:root{color-scheme:dark;--bg: #0b1220;--header: #0e1628;--paper: #151d2e;--ink: #f4f7fb;--muted: #9aa8bd;--line: #243044;--gold: #5b8cff;--gold-dim: #3b82f6;--danger: #f87171;--ok: #4ade80;--ok-bg: #16351f;--glow: rgba(59, 130, 246, .18);--safe-t: env(safe-area-inset-top, 0px);--safe-b: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font-family:Noto Sans TC,PingFang TC,Microsoft JhengHei,sans-serif;background:var(--bg);color:var(--ink);line-height:1.6}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--gold);text-decoration:none}a:hover{text-decoration:underline}.app{min-height:100vh;display:flex;flex-direction:column}.site-header{background:var(--header);border-bottom:1px solid #1b2538;padding:calc(12px + var(--safe-t)) 0 12px}.header-inner,.page,.site-footer{width:min(1080px,calc(100% - 40px));margin:0 auto}.header-inner{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.header-right{margin-left:auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}.brand{display:flex;align-items:center;gap:8px;color:inherit;text-decoration:none;font-weight:600}.brand:hover{text-decoration:none}.mark{font-size:18px;color:#facc15;line-height:1}.brand-name{font-size:15px;letter-spacing:.01em}.header-nav{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.header-nav button,.ghost{border:0;background:transparent;color:var(--muted);padding:8px 12px;cursor:pointer;border-radius:8px;font-size:14px}.header-nav button:hover,.ghost:hover,.header-nav button.on{color:var(--ink)}.auth-slot{display:flex;align-items:center;gap:10px}.auth-chip{display:flex;align-items:center;gap:10px;border:1px solid #2a3a54;border-radius:12px;padding:4px 4px 4px 14px;flex-wrap:wrap}.muted-label{color:var(--muted);font-size:13px;white-space:nowrap}.btn-blue{border:0;background:#3b82f6;color:#fff;border-radius:10px;padding:7px 18px;cursor:pointer;font-weight:600;font-size:14px}.btn-blue:hover{background:#2563eb}.btn-blue:disabled{opacity:.7;cursor:wait}.page{flex:1;padding:36px 0 48px}.hero{margin-bottom:28px}.hero h1{margin:0 0 10px;font-size:clamp(26px,3.6vw,32px);font-weight:700;display:flex;align-items:center;gap:10px;flex-wrap:wrap;letter-spacing:.01em}.ver{font-size:11px;font-weight:600;background:#1b3a5c;color:#93c5fd;border-radius:999px;padding:2px 8px}.lead{margin:0;color:var(--muted);max-width:40em;font-size:15px}.tool-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin-bottom:18px}.tool-card,.how-card,.panel,.card,.alerts,.report,.gantt-box,.gate-card{background:var(--paper);border:1px solid #1e2a40;border-radius:18px;padding:24px}.tool-card{min-height:240px;cursor:pointer;display:flex;flex-direction:column}.tool-card:hover{border-color:#2d3e5c}.tool-card h2,.how-card h2{margin:0 0 8px;font-size:18px;font-weight:700}.tool-card p,.how-card p,.how-card li{margin:0;color:var(--muted);font-size:14px}.icon-box{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;font-size:22px;margin-bottom:14px}.icon-orange{background:#3b2a14}.icon-yellow{background:#3a3212}.icon-blue{background:#163056}.icon-green{background:#16351f}.ok-pill{display:inline-block;margin-top:auto;align-self:flex-start;background:var(--ok-bg);color:var(--ok);border-radius:999px;font-size:12px;font-weight:600;padding:4px 10px}.how-card{margin-top:8px}.how-card h2{font-size:16px;font-weight:600}.how-card ol{margin:12px 0 0;padding-left:22px;color:var(--muted)}.how-card li{margin:6px 0}.how-card code{background:#0b1220;border-radius:6px;padding:1px 6px;color:#dbeafe}.site-footer{padding:18px 0 calc(20px + var(--safe-b));color:var(--muted);font-size:13px;text-align:center;border-top:1px solid #1b2538}.wrap{width:min(1080px,calc(100% - 40px));margin:0 auto}.top-actions,.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}select.proj-select{background:#0b1220;border:1px solid var(--line);border-radius:10px;padding:8px 10px}.pill{color:var(--muted);font-size:13px}.btn,.logout,.page-head button,.nav button{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:10px;padding:8px 12px;cursor:pointer}.btn:hover,.logout:hover,.page-head button:hover{color:var(--ink)}.btn-gold{border-color:#3b82f6;color:#93c5fd}.btn-gold:hover{background:var(--glow)}.btn-danger{border-color:#7f1d1d;color:#fca5a5}.btn-danger:hover{background:#f871711f;color:#fecaca}.nav{display:none}.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin:8px 0 18px;flex-wrap:wrap}.page-head h1{font-size:28px;font-weight:700;margin:0 0 4px}.page-head p{margin:0;color:var(--muted);font-size:14px}.ww-badge{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;background:var(--paper);border:1px solid #1e2a40;border-radius:12px;padding:8px 14px}.ww-kicker{color:var(--muted);font-size:13px}.ww-badge strong{font-size:22px;letter-spacing:.04em;color:#93c5fd}.field{display:grid;gap:6px;margin-bottom:14px}.field label{font-size:12px;color:var(--muted)}.field input,.field select,.field textarea,.table input,.table select,.table-wrap input,.table-wrap select{width:100%;border:1px solid var(--line);background:#0b1220;color:var(--ink);font-size:15px;padding:10px 12px;border-radius:10px;outline:none;color-scheme:dark}input[type=date]{min-width:12.5rem;color:var(--ink)}input[type=date]::-webkit-calendar-picker-indicator{opacity:.85;cursor:pointer}.table select{min-width:7rem}.field input:focus,.field select:focus,.field textarea:focus{border-color:#3b82f6}.gate-error,.error{min-height:1.4em;color:var(--danger);font-size:13px}.hint{color:var(--muted);font-size:13px}.login-overlay{position:fixed;inset:0;z-index:30;background:#050a149e;display:grid;place-items:center;padding:24px}.login-card{width:min(420px,100%);margin:0}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line);vertical-align:middle}th{color:var(--muted);font-weight:500;font-size:12px}.note-input{min-width:220px}.analysis-input{min-width:260px;width:100%;resize:vertical;line-height:1.45}.alerts{margin-bottom:18px}.alerts h2{margin:0 0 8px;font-size:14px;color:#93c5fd}.alerts li{color:var(--muted);font-size:14px}.project-stack{display:grid;gap:16px}.project-block-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.project-block h2{margin:0 0 4px;font-size:20px}.project-block.current{border-color:#3b82f6}.project-task-list{margin:14px 0 0;padding-left:20px}.project-task-list li{margin:8px 0}.add-member-row{display:grid;grid-template-columns:minmax(220px,1.4fr) minmax(140px,.7fr) auto;gap:12px;align-items:end;margin-top:16px}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.gantt-box{overflow-x:auto}.gantt-box .gantt .grid-header,.gantt-box .gantt .grid-row,.gantt-box .gantt .grid-row:nth-child(2n){fill:#151d2e}.gantt-box .gantt .row-line,.gantt-box .gantt .tick{stroke:#243044}.gantt-box .gantt .today-highlight{fill:#3b82f629}.gantt-box .gantt text{fill:#f4f7fb}.gantt-box .gantt .lower-text.current-ww{fill:#93c5fd;font-weight:700}.gantt-box .gantt .bar-label{fill:#fff;font-weight:600}.gantt-box .gantt .bar-wrapper .bar,.gantt-box .gantt .bar-wrapper .bar-progress{fill:#475569}.gantt-box .gantt .bar-wrapper.opening .bar,.gantt-box .gantt .bar-wrapper.opening .bar-progress{fill:#64748b}.gantt-box .gantt .bar-wrapper.working .bar,.gantt-box .gantt .bar-wrapper.working .bar-progress{fill:#2563eb}.gantt-box .gantt .bar-wrapper.closing .bar,.gantt-box .gantt .bar-wrapper.closing .bar-progress{fill:#d97706}.gantt-box .gantt .bar-wrapper.verify .bar,.gantt-box .gantt .bar-wrapper.verify .bar-progress{fill:#16a34a}.gantt-box .gantt .bar-wrapper.opening:hover .bar,.gantt-box .gantt .bar-wrapper.opening:hover .bar-progress,.gantt-box .gantt .bar-wrapper.opening.active .bar,.gantt-box .gantt .bar-wrapper.opening.active .bar-progress{fill:#475569}.gantt-box .gantt .bar-wrapper.working:hover .bar,.gantt-box .gantt .bar-wrapper.working:hover .bar-progress,.gantt-box .gantt .bar-wrapper.working.active .bar,.gantt-box .gantt .bar-wrapper.working.active .bar-progress{fill:#1d4ed8}.gantt-box .gantt .bar-wrapper.closing:hover .bar,.gantt-box .gantt .bar-wrapper.closing:hover .bar-progress,.gantt-box .gantt .bar-wrapper.closing.active .bar,.gantt-box .gantt .bar-wrapper.closing.active .bar-progress{fill:#b45309}.gantt-box .gantt .bar-wrapper.verify:hover .bar,.gantt-box .gantt .bar-wrapper.verify:hover .bar-progress,.gantt-box .gantt .bar-wrapper.verify.active .bar,.gantt-box .gantt .bar-wrapper.verify.active .bar-progress{fill:#15803d}.gantt-legend{display:flex;flex-wrap:wrap;gap:12px 18px;margin:14px 0 0;padding:0;list-style:none;color:var(--muted);font-size:13px}.gantt-legend li{display:flex;align-items:center;gap:8px}.gantt-swatch{width:14px;height:14px;border-radius:4px}.gantt-swatch.opening{background:#64748b}.gantt-swatch.working{background:#2563eb}.gantt-swatch.closing{background:#d97706}.gantt-swatch.verify{background:#16a34a}.report{padding:28px 28px 32px}.report-head{padding-bottom:20px;margin-bottom:8px;border-bottom:1px solid #2a3a54}.report-kicker{margin:0 0 6px;color:#93c5fd;font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.report-head h1{margin:0 0 16px;font-size:28px;line-height:1.25}.report-meta{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 16px;margin:0}.report-meta div{background:#0b1220;border:1px solid #243044;border-radius:12px;padding:10px 12px}.report-meta dt{margin:0 0 4px;color:var(--muted);font-size:11px;font-weight:600}.report-meta dd{margin:0;font-size:14px;font-weight:600}.report-block{margin-top:22px;padding:16px 16px 8px;border:1px solid #243044;border-radius:14px;border-left-width:5px}.report-done{border-left-color:#4ade80}.report-doing{border-left-color:#60a5fa}.report-overdue{border-left-color:#f87171}.report-next{border-left-color:#fbbf24}.report-block h2{display:flex;align-items:center;gap:10px;margin:0 0 12px;font-size:16px;color:var(--ink)}.report-count{display:inline-grid;place-items:center;min-width:1.6em;height:1.6em;padding:0 6px;border-radius:999px;background:#0b1220;border:1px solid #2a3a54;color:#dbeafe;font-size:12px}.report-done .report-count{color:#86efac;border-color:#166534}.report-doing .report-count{color:#93c5fd;border-color:#1d4ed8}.report-overdue .report-count{color:#fca5a5;border-color:#7f1d1d}.report-next .report-count{color:#fde68a;border-color:#854d0e}.report-empty{margin:0 0 8px;color:var(--muted);font-size:14px}.report-table-wrap{overflow-x:auto}.report-table{width:100%;border-collapse:collapse;font-size:14px}.report-table th,.report-table td{text-align:left;vertical-align:top;padding:10px 8px;border-bottom:1px solid #243044}.report-table th{color:var(--muted);font-size:12px;font-weight:600}.report-table tr:last-child td{border-bottom:0}.report-task{font-weight:700}.report-date{white-space:nowrap;font-variant-numeric:tabular-nums}.report-analysis{color:#d5deea;white-space:pre-wrap;line-height:1.45}.status-pill{display:inline-block;border-radius:999px;padding:2px 8px;font-size:12px;font-weight:700;letter-spacing:.02em}.status-opening{background:#1e293b;color:#cbd5e1}.status-working{background:#1e3a5f;color:#93c5fd}.status-closing{background:#3b2f12;color:#fde68a}.status-verify{background:#16351f;color:#86efac}.foot{display:none}@media(max-width:800px){.tool-grid,.grid-2,.add-member-row,.report-meta{grid-template-columns:1fr 1fr}.page-head h1{font-size:24px}}@media print{.site-header,.page-head button,.alerts,.logout,.no-print,.auth-slot{display:none!important}body{background:#fff;color:#111}.page{width:auto}.report{background:#fff;border:0;border-radius:0;padding:0;color:#111}.report-head{border-bottom-color:#d1d5db}.report-kicker{color:#1d4ed8}.report-meta div{background:#f8fafc;border-color:#d1d5db}.report-meta dt{color:#64748b}.report-block{background:#fff;border-color:#d1d5db;break-inside:avoid}.report-count{background:#f8fafc;border-color:#d1d5db;color:#111}.report-table th,.report-table td{border-bottom-color:#e5e7eb}.report-analysis{color:#334155}.status-opening{background:#e2e8f0;color:#334155}.status-working{background:#dbeafe;color:#1d4ed8}.status-closing{background:#fef3c7;color:#92400e}.status-verify{background:#dcfce7;color:#166534}}
