:root{color-scheme:light dark;--bg: #0f1115;--panel: #161a22;--panel-2: #1d2230;--border: #2a3142;--text: #e6e9ef;--text-dim: #9aa3b2;--accent: #7aa2ff;--good: #4ade80;--warn: #facc15;--danger: #f87171;--done: #6b7280;--paused: #a78bfa;--radius: 10px}@media(prefers-color-scheme:light){:root{--bg: #f6f7fb;--panel: #ffffff;--panel-2: #f0f2f8;--border: #d8dde6;--text: #1a1d24;--text-dim: #5b6473}}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;min-height:100vh}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Pretendard,Apple SD Gothic Neo,Malgun Gothic,sans-serif;line-height:1.5}button{font:inherit;color:inherit;background:transparent;border:none;cursor:pointer}a{color:var(--accent)}.app-loading,.app-error{padding:2rem;text-align:center}.dashboard{max-width:1400px;margin:0 auto;padding:1.25rem 1rem 4rem}.dashboard-header{display:flex;flex-wrap:wrap;gap:1rem;align-items:end;justify-content:space-between;margin-bottom:1.25rem}.dashboard-header h1{margin:0;font-size:1.5rem}.dashboard-header .meta{margin:.25rem 0 0;color:var(--text-dim);font-size:.875rem}.controls select{background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:.35rem .5rem}.errors-banner{background:color-mix(in srgb,var(--danger) 12%,var(--panel));border:1px solid color-mix(in srgb,var(--danger) 40%,var(--border));border-radius:var(--radius);padding:.5rem .75rem;margin-bottom:1rem}.errors-toggle{display:flex;align-items:center;gap:.5rem;width:100%;text-align:left}.errors-banner .dot{color:var(--danger)}.errors-banner .chev{margin-left:auto;color:var(--text-dim)}.errors-banner ul{margin:.5rem 0 0;padding-left:1.25rem;color:var(--text-dim);font-size:.875rem}.errors-banner code{background:var(--panel-2);padding:0 .25rem;border-radius:4px}.next-tasks{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;margin-bottom:1.5rem}.next-tasks h2{margin:0 0 .75rem;font-size:1.1rem}.next-tasks .count{color:var(--text-dim);font-weight:400}.next-tasks ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr;gap:.4rem}@media(min-width:720px){.next-tasks ul{grid-template-columns:repeat(2,1fr)}}.next-tasks li{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.6rem;padding:.45rem .6rem;background:var(--panel-2);border-radius:6px}.next-tasks .task-source{color:var(--text-dim);font-size:.8rem}.pri-tag{font-size:.7rem;padding:.1rem .45rem;border-radius:999px;text-transform:uppercase;letter-spacing:.04em;background:var(--border);color:var(--text-dim)}.pri-tag.high{background:color-mix(in srgb,var(--danger) 25%,transparent);color:var(--danger)}.pri-tag.normal{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}.pri-tag.low{background:var(--border);color:var(--text-dim)}.projects h2{margin:0 0 .75rem;font-size:1.1rem}.project-grid{display:grid;grid-template-columns:1fr;gap:.85rem}@media(min-width:720px){.project-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:1120px){.project-grid{grid-template-columns:repeat(3,1fr)}}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:.9rem 1rem 1rem;display:flex;flex-direction:column;gap:.55rem}.card.status-paused{opacity:.85}.card.status-archived,.card.status-done{opacity:.6}.card-head{display:flex;justify-content:space-between;gap:.5rem;align-items:flex-start}.card-toggle{display:flex;align-items:center;gap:.4rem;padding:0;text-align:left}.card-toggle h3{margin:0;font-size:1rem}.chev{display:inline-block;transition:transform .15s ease;color:var(--text-dim);font-size:.7rem}.chev.open{transform:rotate(90deg)}.badges{display:flex;flex-wrap:wrap;gap:.3rem;justify-content:flex-end}.badge{font-size:.7rem;padding:.15rem .5rem;border-radius:999px;background:var(--panel-2);color:var(--text-dim);white-space:nowrap}.badge.status-active{background:color-mix(in srgb,var(--good) 18%,transparent);color:var(--good)}.badge.status-paused{background:color-mix(in srgb,var(--paused) 25%,transparent);color:var(--paused)}.badge.status-archived,.badge.status-done{background:var(--border);color:var(--text-dim)}.badge.warn{background:color-mix(in srgb,var(--warn) 25%,transparent);color:var(--warn)}.badge.danger{background:color-mix(in srgb,var(--danger) 22%,transparent);color:var(--danger)}.desc{margin:0;color:var(--text-dim);font-size:.875rem}.stack{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.25rem}.stack li{font-size:.72rem;padding:.1rem .45rem;border-radius:4px;background:var(--panel-2);color:var(--text-dim)}.progress-row{display:flex;align-items:center;gap:.6rem}.progress-bar{flex:1;height:6px;background:var(--panel-2);border-radius:999px;overflow:hidden}.progress-bar .fill{height:100%;background:var(--accent);transition:width .3s ease}.pct{font-variant-numeric:tabular-nums;font-size:.85rem;min-width:3ch;text-align:right}.counts{font-size:.75rem;color:var(--text-dim)}.meta-row{display:flex;flex-wrap:wrap;gap:.6rem;font-size:.78rem;color:var(--text-dim)}.card-body{border-top:1px solid var(--border);padding-top:.6rem;margin-top:.2rem;display:flex;flex-direction:column;gap:.6rem}.phase,.subphase{background:var(--panel-2);border-radius:6px;padding:.5rem .65rem}.subphase{margin-top:.3rem;background:color-mix(in srgb,var(--panel-2) 60%,var(--panel))}.phase header,.subphase header{display:flex;align-items:center;gap:.4rem}.phase h4,.subphase h5{margin:0;font-size:.9rem}.subphase h5{font-size:.85rem}.phase-status{font-size:.65rem;text-transform:uppercase;padding:.1rem .4rem;border-radius:999px;background:var(--border);color:var(--text-dim);letter-spacing:.04em}.phase-status.in_progress{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}.phase-status.done{background:color-mix(in srgb,var(--good) 20%,transparent);color:var(--good)}.tasks{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-direction:column;gap:.2rem}.tasks li{display:flex;gap:.4rem;font-size:.85rem}.tasks li.done{color:var(--text-dim);text-decoration:line-through}.tasks .check{color:var(--good)}.tasks li:not(.done) .check{color:var(--text-dim)}.worklog{background:var(--panel-2);border-radius:6px;padding:.5rem .65rem}.worklog summary{cursor:pointer;font-size:.85rem;color:var(--text-dim)}.worklog ul{margin:.4rem 0 0;padding-left:1rem;font-size:.8rem}.worklog em{color:var(--warn)}@media(max-width:480px){.dashboard{padding:.75rem .6rem 3rem}.card-head{flex-direction:column;align-items:stretch}.badges{justify-content:flex-start}}
