:root{color-scheme:light;--bg:#f4f4f2;--surface:#fcfcfb;--text:#0b0b0b;--text2:#52514e;--muted:#8a8984;--hair:#e4e3df;--wash:#efeeea;--gain:#2a78d6;--loss:#e34948;--neutral:#b9b8b2;--s1:#2a78d6;--s2:#eb6834;--s3:#1baf7a;--s4:#eda100;--warn:#c98500;--focus:#2a78d6}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#121211;--surface:#1a1a19;--text:#f0efec;--text2:#c3c2b7;--muted:#8f8e86;--hair:#2e2e2c;--wash:#242422;--gain:#3987e5;--loss:#e66767;--neutral:#5a5955;--s1:#3987e5;--s2:#d95926;--s3:#199e70;--s4:#c98500;--warn:#fab219;--focus:#3987e5}}*{box-sizing:border-box}body,html{margin:0;background:var(--bg);color:var(--text)}body{font:14px/1.45 -apple-system,Segoe UI,PingFang SC,Noto Sans CJK SC,sans-serif}a{color:inherit}.num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.gain{color:var(--gain)}.loss{color:var(--loss)}.muted{color:var(--muted)}.t2{color:var(--text2)}.nav{display:flex;gap:4px;align-items:center;padding:0 16px;height:48px;background:var(--surface);border-bottom:1px solid var(--hair);position:-webkit-sticky;position:sticky;top:0;z-index:20;overflow-x:auto}.nav .brand{font-weight:650;margin-right:16px;white-space:nowrap}.nav a{text-decoration:none;padding:6px 12px;border-radius:6px;color:var(--text2);white-space:nowrap}.nav a.on,.nav a:hover{background:var(--wash)}.nav a.on{color:var(--text);font-weight:600}.nav a.logout{margin-left:auto;color:var(--muted)}.page{max-width:1440px;margin:0 auto;padding:16px}.login{min-height:calc(100vh - 48px);display:grid;place-items:center;padding:24px}.login-box{width:min(360px,100%);display:flex;flex-direction:column;gap:12px}.login-box h2{margin:0;font-size:20px}.login-box p{margin:-6px 0 4px;font-size:13px}.login-box label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text2)}.login-box button{margin-top:4px;padding:8px 12px}.filters{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:end;padding:12px;background:var(--surface);border:1px solid var(--hair);border-radius:10px;margin-bottom:16px}.filters label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--text2)}button,input,select{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--hair);border-radius:6px;padding:6px 8px}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--focus);outline-offset:1px}button{cursor:pointer}button:hover{background:var(--wash)}button.primary{background:var(--text);color:var(--surface);border-color:var(--text)}button.on{background:var(--wash);font-weight:600;border-color:var(--text2)}.seg{display:flex}.seg button{border-radius:0;margin-left:-1px}.seg button:first-child{border-radius:6px 0 0 6px;margin-left:0}.seg button:last-child{border-radius:0 6px 6px 0}.grid{display:grid;grid-gap:16px;gap:16px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width:900px){.g2,.g3,.g4{grid-template-columns:1fr}}.card{background:var(--surface);border:1px solid var(--hair);border-radius:10px;padding:14px 16px;min-width:0}.card h3{margin:0 0 2px;font-size:14px;font-weight:650}.card .sub{font-size:12px;color:var(--muted);margin-bottom:8px}.card .head{display:flex;justify-content:space-between;align-items:start;gap:8px}.kpi .label{font-size:12px;color:var(--text2)}.kpi .value{font-size:26px;font-weight:650;margin:2px 0}.kpi .foot{font-size:12px;color:var(--muted)}.fade{opacity:.55;transition:opacity .15s}.err{border:1px solid var(--loss);border-radius:8px;padding:10px 12px;margin-bottom:12px;background:var(--surface)}.err:before{content:"⚠ ";color:var(--loss)}.note{font-size:12px;color:var(--text2);background:var(--wash);border-radius:8px;padding:8px 10px;margin:0 0 12px}.tbl-wrap{overflow:auto;max-height:560px}table{border-collapse:collapse;width:100%;font-size:13px}td,th{padding:6px 10px;text-align:right;white-space:nowrap;border-bottom:1px solid var(--hair)}th{position:-webkit-sticky;position:sticky;top:0;background:var(--surface);color:var(--text2);font-weight:600;z-index:1}th.sortable{cursor:pointer}th.sortable:hover{color:var(--text)}td.l,th.l{text-align:left}tbody tr:hover{background:var(--wash)}tbody tr.click{cursor:pointer}.tag{display:inline-block;padding:0 6px;border-radius:4px;font-size:11px;border:1px solid var(--hair);color:var(--text2)}.tag.slow{border-color:var(--warn);color:var(--warn)}.drawer-bg{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:40}.drawer{position:fixed;right:0;top:0;bottom:0;width:min(780px,100vw);background:var(--surface);z-index:41;overflow:auto;padding:16px 18px;border-left:1px solid var(--hair)}.kv{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:8px 16px;gap:8px 16px;margin:10px 0}.kv div span{display:block;font-size:12px;color:var(--muted)}@media (max-width:600px){.kv{grid-template-columns:repeat(2,1fr)}}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--text2);margin-bottom:4px}.legend i{display:inline-block;width:14px;height:0;border-top:2px solid;vertical-align:middle;margin-right:5px}