:root{--bg:#0f1420;--panel:#171e2e;--panel2:#1e2740;--panel3:#232d47;--border:#2a3552;--text:#e6ebf5;--muted:#8b96b0;--accent:#4f8cff;--accent-press:#3d76e0;--accent-soft:rgba(79,140,255,.16);--green:#34c98e;--green-soft:rgba(52,201,142,.16);--red:#ff6b6b;--red-soft:hsla(0,100%,71%,.16);--amber:#ffb84f;--amber-soft:rgba(255,184,79,.16);--purple:#a68bff;--purple-soft:rgba(166,139,255,.16);--shadow-sm:0 1px 2px rgba(0,0,0,.25);--shadow-md:0 4px 16px rgba(0,0,0,.28);--shadow-lg:0 12px 40px rgba(0,0,0,.42);--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--r-sm:8px;--r-md:12px;--r-card:14px;--r-lg:20px;--r-pill:999px;--ease:cubic-bezier(0.2,0.8,0.2,1);--dur:160ms}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:Pretendard,-apple-system,BlinkMacSystemFont,Apple SD Gothic Neo,sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none;transition:color var(--dur) var(--ease)}a:hover{opacity:.85}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.shell{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--border);padding:var(--s5) var(--s3);display:flex;flex-direction:column;gap:2px;position:-webkit-sticky;position:sticky;top:0;height:100vh}.sidebar .brand{font-weight:800;font-size:17px;letter-spacing:-.02em;margin:4px 8px 20px;color:var(--text)}.sidebar a.navlink{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--r-md);color:var(--muted);font-weight:500;min-height:44px;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}.sidebar a.navlink:hover{background:var(--panel2);color:var(--text);opacity:1}.sidebar a.navlink.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.navicon{width:18px;height:18px;flex-shrink:0}.sidebar .foot{margin-top:auto;font-size:13px;color:var(--muted);padding:0 8px}.sidebar .foot .who{color:var(--text);font-weight:600;margin-bottom:10px}.footlink{display:flex;align-items:center;min-height:44px;padding:0 8px;margin:0 -8px;border-radius:var(--r-sm);color:var(--muted);transition:background var(--dur) var(--ease)}.footlink:hover{background:var(--panel2);opacity:1}.footlink.danger{color:var(--red);margin-top:6px;border-top:1px solid var(--border);padding-top:6px}.footlink.danger:hover{background:var(--red-soft)}.main{flex:1 1;padding:var(--s6) var(--s6);max-width:1160px;width:100%}.bottomnav,.moresheet,.sheet-backdrop,.topbar{display:none}h1{font-size:24px;font-weight:800;letter-spacing:-.02em;margin:0 0 4px;line-height:1.3}h2{font-size:17px;font-weight:700;letter-spacing:-.01em;margin:28px 0 12px}.sub{margin-bottom:24px;font-size:14px}.note,.sub{color:var(--muted)}.note{font-size:13px;line-height:1.6}.cards{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));grid-gap:var(--s3)}.cards,.metric-3{display:grid;gap:var(--s3)}.metric-3{grid-template-columns:repeat(3,1fr);grid-gap:var(--s3)}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--r-card);padding:var(--s4) var(--s4);transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}.card .label{color:var(--muted);font-size:13px;font-weight:500}.card .value{font-size:clamp(19px,1.8vw,23px);font-weight:800;letter-spacing:-.02em;margin:6px 0 3px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap}.card .delta{font-size:12px;font-weight:500}.delta.up{color:var(--red)}.delta.down{color:var(--green)}.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--s5);margin-bottom:var(--s4)}.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:var(--r-pill);font-size:12px;font-weight:600;background:var(--panel2);color:var(--muted);border:0;white-space:nowrap}.badge.green{color:var(--green);background:var(--green-soft)}.badge.red{color:var(--red);background:var(--red-soft)}.badge.amber{color:var(--amber);background:var(--amber-soft)}.badge.blue{color:var(--accent);background:var(--accent-soft)}.badge.purple{color:var(--purple);background:var(--purple-soft)}table{width:100%;border-collapse:collapse}th{text-align:left;color:var(--muted);font-weight:600;font-size:12px;padding:10px}td,th{border-bottom:1px solid var(--border)}td{padding:11px 10px;font-size:14px;word-break:keep-all}tr:last-child td{border-bottom:0}tbody tr{transition:background var(--dur) var(--ease)}tbody tr:hover td{background:var(--panel2)}.num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.num,th.num{text-align:right}button{background:var(--accent);color:#fff;border:0;border-radius:var(--r-md);padding:0 18px;height:42px;font-size:14px;font-weight:600;cursor:pointer;font-family:inherit;transition:transform var(--dur) var(--ease),background var(--dur) var(--ease),opacity var(--dur) var(--ease);display:inline-flex;align-items:center;justify-content:center;gap:6px}button:hover{background:var(--accent-press)}button:active{transform:scale(.97)}button.ghost{background:transparent;border:1px solid var(--border);color:var(--text)}button.ghost:hover{background:var(--panel2);border-color:var(--muted)}button.soft{background:var(--accent-soft);color:var(--accent)}button.soft:hover{background:var(--accent-soft);opacity:.8}button.danger,button.danger:hover{background:var(--red)}button.danger:hover{opacity:.88}button.sm{height:34px;padding:0 12px;font-size:13px}button:disabled{opacity:.45;cursor:default;transform:none}button:disabled,button[disabled]{opacity:.45;cursor:not-allowed}.linkbtn{background:none;color:var(--accent);padding:0;font-weight:600}.linkbtn,button.card,button.panel{border:0;height:auto;cursor:pointer}button.card,button.panel{background:var(--panel);color:var(--text);font:inherit;text-align:left;display:block;width:100%}button.card:hover,button.panel:hover{background:var(--panel)}button.card:active,button.panel:active{transform:none}input,select{background:var(--panel2);border:1px solid var(--border);color:var(--text);border-radius:var(--r-md);padding:11px 13px;font-size:15px;width:100%;font-family:inherit;transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}input:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}input::placeholder{color:var(--muted)}label{display:block;color:var(--muted);font-size:13px;font-weight:500;margin:14px 0 6px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.error{color:var(--red);font-size:13px;margin-top:10px}.center-page{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px}.auth-box{width:100%;max-width:380px}.kv{display:grid;grid-template-columns:160px 1fr;grid-gap:8px 16px;gap:8px 16px;font-size:14px;align-items:baseline}.kv .k{color:var(--muted)}.drawer{position:fixed;top:0;right:0;width:min(520px,100vw);height:100vh;overflow-y:auto;background:var(--panel);border-left:1px solid var(--border);padding:var(--s5);z-index:60;box-shadow:var(--shadow-lg);animation:slideIn var(--dur) var(--ease)}@keyframes slideIn{0%{transform:translateX(24px);opacity:.4}to{transform:none;opacity:1}}.tabs{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}.tabs button{background:transparent;border:1px solid var(--border);color:var(--muted);height:38px}.tabs button:hover{background:var(--panel2)}.tabs button.active{background:var(--accent-soft);color:var(--accent);border-color:transparent}.subtabs{display:flex;gap:8px;flex-wrap:wrap}.subtabs>a{flex:0 0 auto;min-height:44px;display:inline-flex;align-items:center;padding:0 14px;border-radius:var(--r-pill);text-decoration:none;white-space:nowrap;color:var(--muted)}.subtabs>a[aria-current=page]{background:var(--accent-soft);color:var(--accent);font-weight:600}.simple-theme{--bg:#f2f4f6;--panel:#fff;--panel2:#f2f4f6;--panel3:#e8ebed;--border:#eaedf0;--text:#191f28;--muted:#6b7684;--accent:#3182f6;--accent-press:#2272eb;--accent-soft:rgba(49,130,246,.1);--green:#12b76a;--green-soft:rgba(18,183,106,.1);--red:#f04438;--red-soft:rgba(240,68,56,.1);--amber:#f79009;--amber-soft:rgba(247,144,9,.12);--purple:#7a5af8;--purple-soft:rgba(122,90,248,.1);--shadow-sm:0 1px 3px rgba(25,31,40,.06);--shadow-md:0 4px 20px rgba(25,31,40,.08);--shadow-lg:0 12px 40px rgba(25,31,40,.14);background:var(--bg);color:var(--text)}.simple-theme .sidebar{background:var(--panel);border-right-color:var(--border)}.simple-theme .main{background:var(--bg)}.simple-theme .card,.simple-theme .panel{border:0;box-shadow:var(--shadow-sm);border-radius:var(--r-lg)}.simple-theme .card.tappable{cursor:pointer}.simple-theme .card.tappable:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.simple-theme h1{font-size:22px}.simple-theme .status-hero{font-size:21px;font-weight:800;letter-spacing:-.02em;line-height:1.35;margin-bottom:6px}.simple-theme .big-number{font-size:clamp(20px,2.1vw,26px);font-weight:800;letter-spacing:-.02em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap;word-break:keep-all}.todo-card{display:flex;justify-content:space-between;align-items:center;gap:16px}.todo-card .todo-icon{width:44px;height:44px;border-radius:14px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:20px}.todo-body{flex:1 1;min-width:0}.todo-body strong{display:block;font-size:15px;margin-bottom:3px}@media (max-width:1024px){.main{padding:var(--s5) var(--s5)}.kv{grid-template-columns:130px 1fr}}@media (max-width:768px){body{font-size:15px}.shell{flex-direction:column}.sidebar{display:none}.topbar{display:flex;align-items:center;justify-content:space-between;position:-webkit-sticky;position:sticky;top:0;z-index:40;height:56px;padding:0 16px;background:var(--panel);border-bottom:1px solid var(--border)}.topbar .brand{font-weight:800;font-size:16px;letter-spacing:-.02em}.topbar .role-chip{font-size:12px;color:var(--muted)}.main{padding:20px 16px calc(72px + env(safe-area-inset-bottom, 0px));max-width:100%}h1{font-size:20px}.simple-theme .status-hero{font-size:19px}.cards{grid-template-columns:1fr 1fr;gap:10px}.cards.stack-mobile{grid-template-columns:1fr}.metric-3{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;margin:0 -16px;padding:2px 16px 6px;gap:10px;scrollbar-width:none}.metric-3::-webkit-scrollbar{display:none}.metric-3>.card{min-width:76%;scroll-snap-align:start}.card .value,.simple-theme .big-number{font-size:22px}.bottomnav{display:flex;position:fixed;bottom:0;left:0;right:0;z-index:50;background:var(--panel);border-top:1px solid var(--border);padding:6px 4px calc(6px + env(safe-area-inset-bottom, 0px));justify-content:space-around}.bottomnav a,.bottomnav button{background:none;border:0;height:auto;padding:4px 2px;flex:1 1;display:flex;flex-direction:column;align-items:center;gap:3px;color:var(--muted);font-size:11px;font-weight:500;min-width:0}.bottomnav a.active{color:var(--accent)}.bottomnav .navicon{width:22px;height:22px}.sheet-backdrop{inset:0;z-index:55;background:rgba(0,0,0,.4);animation:fadeIn var(--dur) var(--ease)}.moresheet,.sheet-backdrop{display:block;position:fixed}.moresheet{left:0;right:0;bottom:0;z-index:56;background:var(--panel);border-radius:20px 20px 0 0;padding:12px 16px calc(24px + env(safe-area-inset-bottom, 0px));box-shadow:var(--shadow-lg);animation:sheetUp .22s var(--ease)}.moresheet .grabber{width:40px;height:4px;border-radius:2px;background:var(--border);margin:4px auto 14px}.moresheet a,.moresheet button{display:flex;width:100%;background:none;border:0;height:auto;padding:14px 8px;color:var(--text);font-size:15px;font-weight:500;justify-content:flex-start;border-bottom:1px solid var(--border)}.moresheet a:last-of-type,.moresheet button:last-of-type{border-bottom:0}.drawer{width:100vw}.kv{grid-template-columns:1fr;gap:2px 0}.kv .k{margin-top:8px}.panel{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin}.panel table{min-width:560px}td,th{white-space:nowrap}td:first-child,th:first-child{position:-webkit-sticky;position:sticky;left:0;background:var(--panel);z-index:1}.subtabs{flex-wrap:nowrap;overflow-x:auto;margin:0 -16px;padding:0 16px 4px;scrollbar-width:none}.subtabs::-webkit-scrollbar{display:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes sheetUp{0%{transform:translateY(100%)}to{transform:none}}.desktop-only{display:initial}@media (max-width:768px){.desktop-only{display:none!important}}