:root{--bg: #0b1526;--bg-soft: #101d33;--card: #16263f;--card-2: #1b2e4a;--line: #24395a;--text: #e8eef8;--text-dim: #9db0cc;--text-faint: #6b80a3;--accent: #4da3ff;--accent-soft: rgba(77, 163, 255, .14);--ok: #3fce8f;--warn: #f5b25c;--danger: #f07a6a;--violet: #a78bfa;--radius: 12px;--shadow: 0 8px 28px rgba(2, 8, 20, .45)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.55 -apple-system,PingFang SC,Microsoft YaHei,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;color:var(--text);background:var(--bg-soft);border:1px solid var(--line);border-radius:8px;padding:7px 10px}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}a{color:var(--accent)}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:14px;padding:10px 18px;background:linear-gradient(180deg,#0e1b30,#0b1526);border-bottom:1px solid var(--line);flex-wrap:wrap;position:sticky;top:0;z-index:30}.brand{display:flex;align-items:baseline;gap:8px}.brand h1{font-size:18px;margin:0;letter-spacing:1px}.brand .slogan{color:var(--text-faint);font-size:11px}.ws-name{color:var(--accent);font-size:13px}.view-tabs{display:flex;gap:4px;flex-wrap:wrap}.view-tab{border:1px solid var(--line);background:transparent;color:var(--text-dim);border-radius:8px;padding:5px 11px;font-size:13px}.view-tab.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);font-weight:600}.view-tab .sub{display:block;font-size:10px;color:var(--text-faint)}.spacer{flex:1}.person-filter{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.chip{border:1px solid var(--line);background:var(--bg-soft);color:var(--text-dim);border-radius:999px;padding:3px 11px;font-size:12px}.chip.active{background:var(--accent);border-color:var(--accent);color:#06121f;font-weight:600}.sync-dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:5px}.sync-ok{background:var(--ok)}.sync-warn{background:var(--warn)}.sync-err{background:var(--danger)}.userbox{color:var(--text-dim);font-size:13px;display:flex;gap:10px;align-items:center}.mini-btn{background:transparent;border:1px solid var(--line);color:var(--text-dim);border-radius:7px;padding:4px 10px;font-size:12px}.mini-btn:hover{border-color:var(--accent);color:var(--accent)}.primary-btn{background:var(--accent);border:none;color:#06121f;font-weight:600;border-radius:9px;padding:8px 16px}.primary-btn:disabled{opacity:.5;cursor:not-allowed}.main{flex:1;overflow:auto;padding:16px 18px 60px}.section{margin-bottom:20px}.person-section-head{display:flex;align-items:baseline;gap:10px;margin:0 0 8px;font-size:15px;font-weight:600}.person-section-head .org,.person-section-head .count{color:var(--text-faint);font-size:12px;font-weight:400}.task-rows{display:flex;flex-direction:column;gap:8px}.task-row{display:grid;grid-template-columns:minmax(180px,1.2fr) minmax(120px,1fr) minmax(140px,.9fr) minmax(110px,.7fr) minmax(120px,1fr);gap:10px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;cursor:pointer}.task-row:hover{border-color:var(--accent);background:var(--card-2)}.task-title{font-weight:600;word-break:break-all}.task-note{color:var(--text-dim);font-size:12.5px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.progress-cell{display:flex;align-items:center;gap:8px;min-width:0}.progress-scope{color:var(--text-dim);font-size:12px;white-space:nowrap}.bar{flex:1;height:7px;background:var(--bg-soft);border-radius:4px;overflow:hidden;min-width:40px}.bar>i{display:block;height:100%;background:linear-gradient(90deg,#2f7fe0,var(--accent))}.date-cell{color:var(--text-dim);font-size:12.5px}.date-cell .hint{color:var(--warn)}.blocker-cell{color:var(--warn);font-size:12.5px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.blocker-cell.empty{color:var(--text-faint)}.status-pill{display:inline-block;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;white-space:nowrap}.st-not_started{background:#9db0cc26;color:var(--text-dim)}.st-in_progress{background:#4da3ff29;color:var(--accent)}.st-waiting_feedback{background:#f5b25c29;color:var(--warn)}.st-pending_confirmation{background:#a78bfa29;color:var(--violet)}.st-pending_release{background:#3fce8f24;color:var(--ok)}.st-completed{background:#3fce8f33;color:var(--ok)}.st-cancelled{background:#f07a6a24;color:var(--danger)}table.list{width:100%;border-collapse:collapse}table.list th{text-align:left;color:var(--text-faint);font-size:12px;font-weight:500;padding:6px 10px;border-bottom:1px solid var(--line)}table.list td{padding:8px 10px;border-bottom:1px solid rgba(36,57,90,.5);vertical-align:top}table.list tr.group td{background:var(--bg-soft);color:var(--accent);font-weight:600;font-size:13px}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.cal-head{color:var(--text-faint);font-size:12px;text-align:center;padding-bottom:2px}.cal-cell{background:var(--card);border:1px solid var(--line);border-radius:10px;min-height:110px;padding:7px;font-size:12px}.cal-cell.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.cal-cell .d{color:var(--text-faint);font-size:11px;margin-bottom:4px}.cal-item{background:var(--accent-soft);border-left:3px solid var(--accent);border-radius:6px;padding:4px 7px;margin-bottom:5px;cursor:pointer;word-break:break-all}.cal-item .t{font-weight:600;font-size:12px}.cal-item .m{color:var(--text-dim);font-size:11px}.cal-item.cond{border-left-color:var(--warn);background:#f5b25c1a}.undated-panel{background:var(--card);border:1px dashed var(--line);border-radius:var(--radius);padding:12px 14px;margin-top:14px}.undated-panel h3{margin:0 0 8px;font-size:14px;color:var(--warn)}.swim{display:grid;grid-template-columns:130px 1fr;gap:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-bottom:12px}.swim-head{background:var(--bg-soft);padding:10px 12px;font-weight:600;display:flex;flex-direction:column;gap:2px}.swim-head .org{color:var(--text-faint);font-size:11px;font-weight:400}.swim-body{display:grid;grid-template-columns:repeat(7,1fr)}.swim-day{border-left:1px solid var(--line);min-height:64px;padding:6px}.swim-day .dd{color:var(--text-faint);font-size:10.5px}.swim-item{background:var(--accent-soft);border-radius:6px;padding:3px 6px;margin-bottom:4px;font-size:11.5px;cursor:pointer;border-left:3px solid var(--accent);word-break:break-all}.swim-item.est{border-left-color:var(--violet);background:#a78bfa1f}.swim-item.cond{border-left-color:var(--warn);background:#f5b25c1a}.queue-split{display:grid;grid-template-columns:minmax(300px,380px) 1fr;gap:14px}.queue-col{display:flex;flex-direction:column;gap:8px}.queue-group-title{color:var(--text-faint);font-size:12px;margin:8px 0 2px}.queue-item{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:9px 12px;cursor:pointer;font-size:13px}.queue-item.active{border-color:var(--accent);background:var(--card-2)}.queue-item .why{color:var(--warn);font-size:11.5px;margin-top:3px}.queue-empty{color:var(--text-faint);font-size:13px;padding:14px;text-align:center}.board{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(230px,1fr);gap:10px;overflow-x:auto;align-items:start;padding-bottom:8px}.board-col{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--radius);padding:10px}.board-col h3{margin:0 0 8px;font-size:13px;color:var(--text-dim);display:flex;justify-content:space-between}.board-card{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:8px 10px;margin-bottom:8px;cursor:pointer;font-size:12.5px}.board-card:hover{border-color:var(--accent)}.board-card .t{font-weight:600;margin-bottom:3px;word-break:break-all}.board-card .meta{color:var(--text-dim);font-size:11.5px}.meeting{font-size:16px}.meeting .person-block{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 20px;margin-bottom:14px}.meeting .person-block h2{margin:0 0 10px;font-size:22px}.meeting .m-task{display:grid;grid-template-columns:minmax(160px,1fr) auto;gap:8px 18px;padding:9px 0;border-top:1px solid rgba(36,57,90,.6)}.meeting .m-title{font-weight:600;font-size:17px}.meeting .m-line{color:var(--text-dim);font-size:14.5px}.meeting .m-right{text-align:right;white-space:nowrap}.meeting .m-date{font-size:15px;color:var(--text)}.meeting .m-date .hint{color:var(--warn)}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#03091299;z-index:40}.drawer{position:fixed;top:0;right:0;bottom:0;width:min(560px,100vw);z-index:41;background:var(--bg-soft);border-left:1px solid var(--line);overflow-y:auto;padding:18px 20px 40px;box-shadow:var(--shadow)}.drawer h2{margin:0 40px 2px 0;font-size:18px;word-break:break-all}.drawer .close-x{position:absolute;top:14px;right:16px;background:none;border:none;color:var(--text-faint);font-size:22px}.drawer .sub-line{color:var(--text-faint);font-size:12px;margin-bottom:14px}.kv{display:grid;grid-template-columns:88px 1fr;gap:6px 12px;font-size:13px;margin:12px 0}.kv .k{color:var(--text-faint)}.kv .v{word-break:break-all}.drawer h3{font-size:14px;margin:18px 0 8px;color:var(--text-dim);border-top:1px solid var(--line);padding-top:14px}.milestone-item{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:8px 11px;margin-bottom:7px;font-size:12.5px}.milestone-item .row1{display:flex;justify-content:space-between;gap:8px;align-items:baseline}.milestone-item .note{color:var(--text-faint);font-size:11.5px;margin-top:3px}.badge{font-size:11px;border-radius:5px;padding:1px 7px;white-space:nowrap}.badge.unconfirmed{background:#9db0cc26;color:var(--text-dim)}.badge.completed{background:#3fce8f2e;color:var(--ok)}.badge.not_completed{background:#f07a6a29;color:var(--danger)}.badge.primary{background:var(--accent-soft);color:var(--accent)}.badge.estimate{background:#a78bfa24;color:var(--violet)}.badge.conditional{background:#f5b25c24;color:var(--warn)}.change-item{font-size:12px;padding:7px 0;border-bottom:1px dashed rgba(36,57,90,.6)}.change-item .meta{color:var(--text-faint)}.quick-form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;margin-top:14px;display:flex;flex-direction:column;gap:10px}.form-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.form-row label{color:var(--text-dim);font-size:12.5px;white-space:nowrap}.form-row input[type=number]{width:76px}.form-row input[type=date]{color-scheme:dark}.toggle{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--text-dim);cursor:pointer}.toggle input{width:15px;height:15px;accent-color:var(--accent)}.form-actions{display:flex;gap:10px;justify-content:flex-end;align-items:center}.save-state{font-size:12.5px}.save-state.err{color:var(--danger)}.save-state.ok{color:var(--ok)}.conflict-box{background:#f07a6a14;border:1px solid rgba(240,122,106,.4);border-radius:9px;padding:10px 12px;font-size:12.5px}.login-wrap{min-height:100%;display:flex;align-items:center;justify-content:center;padding:20px}.login-card{width:420px;max-width:100%;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:34px 32px;box-shadow:var(--shadow);text-align:center}.login-card h1{font-size:26px;margin:0 0 6px}.login-card .slogan{color:var(--text-dim);margin-bottom:26px;letter-spacing:2px}.login-card .desc{color:var(--text-faint);font-size:12.5px;margin-top:22px;line-height:1.7;text-align:left}.login-btn{width:100%;padding:12px;font-size:15px;margin-top:10px}.mock-box{margin-top:16px;border-top:1px dashed var(--line);padding-top:14px;display:flex;flex-direction:column;gap:8px}.mock-box .demo-tag{color:var(--warn);font-size:11.5px}.empty-state{text-align:center;color:var(--text-faint);padding:50px 0}.empty-state .big{font-size:34px;margin-bottom:8px}.error-banner{background:#f07a6a1a;border:1px solid rgba(240,122,106,.4);color:var(--danger);border-radius:10px;padding:12px 16px;margin-bottom:14px}.warn-banner{background:#f5b25c14;border:1px solid rgba(245,178,92,.35);color:var(--warn);border-radius:10px;padding:10px 14px;margin-bottom:14px;font-size:12.5px}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#03091299;z-index:50;display:flex;align-items:flex-start;justify-content:center;padding:60px 16px}.modal{width:460px;max-width:100%;background:var(--bg-soft);border:1px solid var(--line);border-radius:14px;padding:20px 22px;box-shadow:var(--shadow)}.modal h2{margin:0 0 14px;font-size:17px}.modal .form-col{display:flex;flex-direction:column;gap:10px}.modal .form-col label{color:var(--text-dim);font-size:12.5px}@media (max-width: 760px){.main{padding:12px 12px 80px}.task-row{grid-template-columns:1fr;gap:5px;padding:11px 13px}.date-cell,.blocker-cell{font-size:12px}.cal-grid{grid-template-columns:1fr}.cal-cell{min-height:0}.cal-cell .d{display:inline;margin-right:8px}.swim{grid-template-columns:96px 1fr}.swim-body{display:block}.swim-day{border-left:none;border-top:1px solid var(--line);min-height:0}.swim-day .dd{display:inline;margin-right:6px}.queue-split{grid-template-columns:1fr}.board{grid-auto-flow:row;grid-auto-columns:unset;overflow:visible}.meeting .m-task{grid-template-columns:1fr}.meeting .m-right{text-align:left}.drawer{width:100vw}.topbar{padding:8px 12px;gap:8px}.view-tab{padding:5px 8px}.person-filter{max-height:76px;overflow-y:auto}}
