:root{
  --bg:#f4f6fa;--panel:#ffffff;--panel2:#f8fafc;--line:#e3e8ef;--text:#1b2433;--sub:#667085;
  --accent:#2f6fed;--accent-soft:#e8f0ff;--good:#12925f;--good-soft:#e3f6ee;--warn:#b7791f;--warn-soft:#fff5e0;
  --bad:#d13d3d;--bad-soft:#fdeaea;--side:#15233b;--side-text:#c7d2e4;--side-active:#2f6fed;
  --s1:#2f6fed;--s2:#12a37a;--s3:#f0a02c;--s4:#8b5cf6;--s5:#e5484d;--s6:#94a3b8;
  --radius:10px;--shadow:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.08);
}
@media (prefers-color-scheme: dark){
  :root{--bg:#0f1522;--panel:#172033;--panel2:#1c2740;--map-bg:#e9eef5;--line:#2a3652;--text:#e6ebf5;--sub:#93a0b8;
  --accent:#5b8dff;--accent-soft:#1f2f55;--good:#3ecf8e;--good-soft:#123829;--warn:#f5c451;--warn-soft:#3a3016;
  --bad:#ff6b6b;--bad-soft:#3d1c20;--side:#0b111c;--side-text:#aeb9cc;--shadow:none;
  --s1:#5b8dff;--s2:#3ecf8e;--s3:#f5b14c;--s4:#a78bfa;--s5:#ff6b6b;--s6:#64748b;}
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;background:var(--bg);color:var(--text);
  font:14px/1.5 "Segoe UI","Microsoft YaHei","PingFang SC",system-ui,sans-serif}
a{color:var(--accent);text-decoration:none}
.layout{display:flex;min-height:100vh}
.side{width:230px;flex:none;background:var(--side);color:var(--side-text);padding:18px 12px;position:sticky;top:0;height:100vh;overflow:auto}
.brand{font-weight:700;font-size:16px;color:#fff;padding:4px 10px 16px;line-height:1.3}
.brand small{display:block;font-weight:400;font-size:11px;color:var(--side-text);opacity:.8}
.nav a{display:flex;gap:10px;align-items:center;padding:9px 10px;border-radius:8px;color:var(--side-text);margin-bottom:2px}
.nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.nav a.active{background:var(--side-active);color:#fff}
.nav .ico{width:20px;text-align:center}
.nav .en{display:block;font-size:11px;opacity:.7}
.side-foot{font-size:11px;opacity:.6;padding:16px 10px}
.side-foot a{color:var(--side-text)}
.main{flex:1;min-width:0;padding:24px 28px 60px}
h1{font-size:22px;margin:0 0 4px}
.lead{color:var(--sub);margin:0 0 20px;max-width:900px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px;margin-bottom:16px}
.panel h3{margin:0 0 10px;font-size:15px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.card{display:block;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;color:var(--text);box-shadow:var(--shadow)}
.card:hover{border-color:var(--accent)}
.card .t{font-weight:600;font-size:15px;margin:6px 0 2px}
.card .d{color:var(--sub);font-size:13px}
.card .i{font-size:22px}
.inputs{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.drop{border:1.5px dashed var(--line);border-radius:var(--radius);padding:14px;background:var(--panel2);cursor:pointer;transition:.15s;position:relative}
.drop:hover,.drop.over{border-color:var(--accent);background:var(--accent-soft)}
.drop .lab{font-weight:600}
.drop .req{color:var(--bad);margin-left:4px}
.drop .hint{color:var(--sub);font-size:12px;margin-top:2px}
.drop .files{margin-top:8px;font-size:12px}
.drop .files span{display:inline-block;background:var(--accent-soft);color:var(--accent);border-radius:6px;padding:2px 8px;margin:2px 4px 0 0;word-break:break-all}
.drop input{display:none}
.params{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px 16px;margin-top:6px}
.params label{display:block;font-size:12px;color:var(--sub);margin-bottom:3px}
.params input,.params select{width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:var(--panel);color:var(--text);font:inherit}
details.adv summary{cursor:pointer;color:var(--sub);font-size:13px;margin-top:12px}
.actions{display:flex;gap:10px;align-items:center;margin-top:14px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:8px;padding:8px 16px;font:inherit;font-weight:600;cursor:pointer}
.btn:disabled{opacity:.5;cursor:wait}
.btn.ghost{background:transparent;color:var(--accent)}
.btn.sm{padding:4px 10px;font-size:12px;font-weight:500}
.status{color:var(--sub);font-size:13px}
.err{background:var(--bad-soft);color:var(--bad);border-radius:8px;padding:10px 12px;white-space:pre-wrap}
.note{border-radius:8px;padding:8px 12px;margin-bottom:8px;font-size:13px;background:var(--accent-soft)}
.note.warn{background:var(--warn-soft);color:var(--warn)}
.note.bad{background:var(--bad-soft);color:var(--bad)}
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}
.kpi .v{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums}
.kpi .l{color:var(--sub);font-size:12px}
.kpi .s{color:var(--sub);font-size:11px;margin-top:2px}
.kpi.good .v{color:var(--good)} .kpi.bad .v{color:var(--bad)} .kpi.warn .v{color:var(--warn)} .kpi.accent .v{color:var(--accent)}
.blocks{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.blocks > .panel{margin:0;grid-column:1 / -1;min-width:0}
.blocks > .panel.half{grid-column:auto}
.blocks > .sec{grid-column:1 / -1;margin:10px 0 -4px}
.sec h2{font-size:17px;margin:0}
.sec p{color:var(--sub);margin:2px 0 0;font-size:13px}
@media (max-width:1100px){.blocks > .panel.half{grid-column:1 / -1}}
.bars{display:flex;flex-direction:column;gap:5px}
.bar-row{display:grid;grid-template-columns:minmax(80px,180px) 1fr 70px;gap:8px;align-items:center;font-size:12px}
.bar-row .bl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--sub)}
.bar-track{height:16px;background:var(--panel2);border-radius:4px;display:flex;overflow:hidden}
.bar-seg{height:100%}
.bar-row .bv{font-variant-numeric:tabular-nums;text-align:right}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--sub);margin-bottom:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px}
.tbar{display:flex;gap:8px;align-items:center;margin-bottom:8px;flex-wrap:wrap}
.tbar h3{margin:0;flex:1;min-width:200px}
.tbar input{padding:5px 8px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);font:inherit;font-size:12px;width:180px}
.tdesc{color:var(--sub);font-size:12px;margin:-4px 0 8px}
.twrap{overflow:auto;max-height:520px;border:1px solid var(--line);border-radius:8px}
table.t{border-collapse:collapse;width:100%;font-size:12.5px}
table.t th{position:sticky;top:0;background:var(--panel2);text-align:left;font-weight:600;padding:7px 9px;border-bottom:1px solid var(--line);white-space:nowrap;cursor:pointer;user-select:none}
table.t td{padding:6px 9px;border-bottom:1px solid var(--line);white-space:nowrap;max-width:420px;overflow:hidden;text-overflow:ellipsis}
table.t td.num{text-align:right;font-variant-numeric:tabular-nums}
table.t tr:hover td{background:var(--panel2)}
.flag-bad{color:var(--bad);font-weight:600}.flag-warn{color:var(--warn);font-weight:600}.flag-good{color:var(--good);font-weight:600}
.tfoot{color:var(--sub);font-size:12px;margin-top:6px}
.spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:sp 0.8s linear infinite;vertical-align:-2px}
@keyframes sp{to{transform:rotate(360deg)}}
.login{max-width:340px;margin:12vh auto}
.login input{width:100%;padding:10px;border:1px solid var(--line);border-radius:8px;margin:10px 0;background:var(--panel);color:var(--text);font:inherit}
.toast{position:fixed;bottom:20px;right:20px;background:var(--text);color:var(--bg);padding:8px 14px;border-radius:8px;font-size:13px;opacity:0;transition:.2s;pointer-events:none}
.toast.show{opacity:1}
@media (max-width:760px){
  .layout{flex-direction:column}.side{width:auto;height:auto;position:static}
  .main{padding:16px}.bar-row{grid-template-columns:90px 1fr 56px}
}
/* ---------- 语言切换 ---------- */
html[data-lang="en"] .l-zh{display:none!important}
html:not([data-lang="en"]) .l-en{display:none!important}
.langsw{display:flex;margin:0 10px 14px;border:1px solid rgba(255,255,255,.18);border-radius:8px;overflow:hidden}
.langsw button{flex:1;background:transparent;border:0;color:var(--side-text);padding:5px 0;font:inherit;font-size:12px;cursor:pointer}
.langsw button.on{background:var(--side-active);color:#fff;font-weight:600}

.params .wide{grid-column:1 / -1}
.params textarea{width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:var(--panel);color:var(--text);font:12px/1.4 ui-monospace,Consolas,monospace;resize:vertical}
/* ---------- 账号 ---------- */
.userbox{margin:14px 10px 0;padding:12px 10px;border-top:1px solid rgba(255,255,255,.1)}
.userbox .who{display:flex;gap:10px;align-items:center;color:#fff}
.userbox .who b{display:block;font-weight:600;font-size:13px}
.userbox .who small{display:block;font-size:11px;color:var(--side-text);opacity:.8}
.avatar{width:30px;height:30px;border-radius:50%;background:var(--side-active);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700;flex:none}
.userbox .links{display:flex;gap:12px;margin-top:8px;font-size:12px}
.userbox .links a{color:var(--side-text)}
.userbox .links a:hover,.userbox .links a.on{color:#fff}
.loginbg{background:var(--bg)}
.login-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.login-head h3{margin:0}
.login-sub{color:var(--sub);font-size:13px;margin:4px 0 10px}
.login label,.form label{display:block;font-size:12px;color:var(--sub);margin-top:8px}
.form input{width:100%;padding:9px 10px;border:1px solid var(--line);border-radius:8px;margin:4px 0 2px;background:var(--panel);color:var(--text);font:inherit}
.login input{margin:4px 0 4px}
.langsw.mini{margin:0;width:96px;border-color:var(--line)}
.langsw.mini button{color:var(--sub)}
.note.good{background:var(--good-soft);color:var(--good)}
.flash{font-size:14px;font-weight:600;user-select:all}
.kv{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}
.kv span{color:var(--sub)}
.modpick{display:flex;flex-wrap:wrap;gap:6px 16px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--panel2)}
.chk{display:inline-flex!important;align-items:center;gap:6px;font-size:13px!important;color:var(--text)!important;margin:0!important;cursor:pointer}
.chk input{width:auto!important}
.chk.all{flex-basis:100%;font-weight:600}
.ulist{border:1px solid var(--line);border-radius:8px;overflow:hidden}
.urow{display:grid;grid-template-columns:minmax(160px,1.4fr) 90px minmax(90px,1fr) 150px 130px 70px;gap:10px;align-items:center;padding:10px 12px;font-size:13px;list-style:none;cursor:pointer}
.urow::-webkit-details-marker{display:none}
.urow.head{background:var(--panel2);font-weight:600;color:var(--sub);cursor:default}
.urow b{display:block}.urow small{display:block;color:var(--sub);font-size:11px}
.urow-wrap{border-top:1px solid var(--line)}
.urow-wrap[open] > .urow{background:var(--accent-soft)}
.urow .edit{color:var(--accent);font-size:12px;text-align:right}
.uedit{padding:12px 14px 14px;background:var(--panel2);border-top:1px dashed var(--line)}
.actions.danger{display:flex;gap:8px;align-items:center;margin-top:10px}
.actions.danger form{margin:0}
.btn.del{color:var(--bad);border-color:var(--bad)}
.btn.armed{background:var(--bad);border-color:var(--bad);color:#fff}
.tag.adm{background:var(--accent-soft);color:var(--accent);border-radius:6px;padding:2px 8px;font-size:12px}
.muted{color:var(--sub);font-size:12px}
.mods{font-size:15px;letter-spacing:2px}
@media (max-width:900px){.urow{grid-template-columns:1fr 1fr;}.urow.head{display:none}}
.langsw.mini button.on{color:#fff}
.tag.mgr{background:var(--good-soft);color:var(--good);border-radius:6px;padding:2px 8px;font-size:12px}
.kpicell{white-space:normal!important;max-width:520px}
.kc{display:inline-block;margin:1px 10px 1px 0;font-variant-numeric:tabular-nums}
.kc em{font-style:normal;color:var(--sub);font-size:11px;margin-right:3px}
.kc.bad{color:var(--bad)}.kc.good{color:var(--good)}.kc.warn{color:var(--warn)}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:2px;background:var(--s6)}
.dot.bad{background:var(--bad)}.dot.warn{background:var(--warn)}.dot.info{background:var(--accent)}
.histbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.histtag{background:var(--warn-soft);color:var(--warn);border-radius:6px;padding:3px 8px;font-size:12px}

/* 覆盖地图 */
.tbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.tbar h3{margin:0}
.mapfocus{padding:5px 8px;border:1px solid var(--line);border-radius:8px;background:var(--panel);color:var(--text);font:inherit;font-size:13px}
.covmap{width:100%;height:auto;display:block;border-radius:10px;border:1px solid var(--line)}
.legend{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:12.5px;color:var(--sub);margin:8px 0 10px}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:11px;height:11px;border-radius:50%;display:inline-block}
.legend i.dia{border-radius:1px;transform:rotate(45deg);width:9px;height:9px;background:#1d2433}
.xlsinfo .chips{display:flex;flex-wrap:wrap;gap:6px}
.xlsinfo .chip{font-size:12.5px;padding:4px 10px;border-radius:999px;background:var(--bg);border:1px solid var(--line);color:var(--text)}
.xlsinfo .chip b{color:var(--sub);font-weight:500;margin-left:4px}

.navgrp{font-size:11px;letter-spacing:.06em;color:#8a97ad;margin:12px 12px 4px;text-transform:uppercase}

/* 处理台账 */
.casef{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.casef button{border:0;background:var(--panel);color:var(--sub);padding:5px 10px;font:inherit;font-size:12.5px;cursor:pointer}
.casef button.on{background:var(--accent,#2a78d6);color:#fff}
table.cases select.cs{font:inherit;font-size:12.5px;padding:3px 4px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);max-width:150px}
table.cases input.cn{font:inherit;font-size:12.5px;padding:4px 6px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--text);width:220px}
table.cases .cs-who{font-size:10.5px;color:var(--sub);margin-top:2px;white-space:nowrap}
table.cases tr.done td{opacity:.55}
table.cases tr.done td:nth-last-child(-n+2){opacity:1}
table.cases td:not(:nth-last-child(-n+2)){max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.attpanel{margin-bottom:14px}
.attlist{display:flex;flex-wrap:wrap;gap:8px}

/* 每日结果 */
.dl-cell a{display:inline-block;margin:2px 10px 2px 0;white-space:nowrap}
.daily-tag{font-size:11.5px;background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:1px 7px;white-space:nowrap}
.srcfiles{margin-left:6px}
.srcfiles a{margin-right:8px}
table.daily td.dl-cell{white-space:normal;max-width:none;overflow:visible;text-overflow:clip;min-width:260px}
table.daily td.kpicell{white-space:normal}
table.daily td.kpicell{min-width:220px}

/* 精简的功能页 */
.mhead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.mhead h1{margin:0}
.drop .lab{font-weight:600}
.drop .opt{font-size:11px;font-weight:500;color:var(--sub);border:1px solid var(--line);border-radius:999px;padding:0 7px;margin-left:8px;vertical-align:1px}
.drop .hint{font-size:12px}

/* 使用说明 */
.helpwrap{display:grid;grid-template-columns:220px 1fr;gap:18px;align-items:start}
.helptoc{position:sticky;top:16px;display:flex;flex-direction:column;gap:2px;font-size:13.5px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px}
.helptoc a{padding:5px 8px;border-radius:8px;color:var(--text);text-decoration:none}
.helptoc a:hover{background:var(--panel2)}
.tocgrp{font-size:11px;color:var(--sub);margin:10px 8px 2px;letter-spacing:.04em}
.helpbody section{scroll-margin-top:12px}
.helpbody h2{margin:0 0 8px;font-size:19px}
.helpbody h3{font-size:14.5px;margin:18px 0 8px}
.helpbody p,.helpbody li,.helpbody dd{font-size:14px;line-height:1.6}
.hhead{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.htable td{white-space:normal;vertical-align:top}
.htable td.nowrap{white-space:nowrap}
.htable code{font-size:12.5px;background:var(--panel2);padding:1px 5px;border-radius:5px}
.opt,.reqtag{font-size:11.5px;border-radius:999px;padding:1px 8px;white-space:nowrap}
.opt{color:var(--sub);border:1px solid var(--line)}
.reqtag{color:var(--accent);background:var(--accent-soft)}
ol.logic{padding-left:20px}
ol.logic li{margin-bottom:6px;color:var(--text)}
.steps{padding-left:20px}
.faq dt{font-weight:600;margin-top:10px}
.faq dd{margin:4px 0 0 0;color:var(--sub)}
@media (max-width:900px){.helpwrap{grid-template-columns:1fr}.helptoc{position:static}}
.drop{padding:12px 14px}.drop .files:empty{display:none}
.htable td{max-width:none;overflow:visible;text-overflow:clip}

/* ==== v1.2 字体与配色优化 ==== */
:root{
  --font:"Segoe UI Variable Text","Segoe UI",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,"PingFang SC","Microsoft YaHei UI","Microsoft YaHei","Noto Sans SC","Noto Sans CJK SC",sans-serif;
  --mono:ui-monospace,"Cascadia Mono",Consolas,"SF Mono",Menlo,monospace;
  --bg:#f5f6f8;--panel:#ffffff;--panel2:#f7f8fa;--line:#e4e6eb;--text:#161b26;--sub:#5d6474;
  --accent:#2a78d6;--accent-soft:#e9f1fc;--side-active:#2a78d6;
  --good:#1a7f37;--good-soft:#e6f4ea;--warn:#9a6200;--warn-soft:#fdf3dc;--bad:#c53030;--bad-soft:#fcebea;
  /* 图表系列色：经色盲可辨识校验（与手机端一致），红色只留给“异常” */
  --s1:#2a78d6;--s2:#eb6834;--s3:#1baf7a;--s4:#eda100;--s5:#e87ba4;--s6:#4a3aa7;
}
@media (prefers-color-scheme: dark){
  :root{--bg:#111318;--panel:#1a1c22;--panel2:#20232a;--line:#2e323b;--text:#e8eaef;--sub:#9aa1ae;
  --accent:#5b9bec;--accent-soft:#1c2b40;--side-active:#3987e5;
  --good:#4cc26b;--good-soft:#16301f;--warn:#e7b24a;--warn-soft:#352a12;--bad:#f07373;--bad-soft:#3a1d1f;
  --s1:#3987e5;--s2:#d95926;--s3:#199e70;--s4:#c98500;--s5:#d55181;--s6:#9085e9;}
}
html,body{font-family:var(--font);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1{font-size:22px;font-weight:650;letter-spacing:-.2px;line-height:1.3}
.sec h2{font-size:17px;font-weight:650;letter-spacing:-.1px}
.panel h3,.tbar h3{font-size:14.5px;font-weight:600}
.lead,.sec p,.tdesc{line-height:1.6}
.brand{font-weight:650;letter-spacing:-.1px}
.nav a{font-size:13.5px}
.btn{font-weight:600;letter-spacing:.1px}
/* 数字：等宽数字，列对齐 */
.kpi .v{font-size:26px;font-weight:650;letter-spacing:-.4px;line-height:1.2}
.kpi .l{font-size:12.5px;color:var(--sub)}
.kpi.good .v,.kpi.bad .v,.kpi.warn .v{font-weight:700}
table.t{font-size:13px;font-variant-numeric:tabular-nums}
table.t th{font-size:12px;font-weight:600;color:var(--sub);background:var(--panel2);border-bottom:1px solid var(--line)}
table.t td{border-bottom-color:color-mix(in srgb,var(--line) 70%,transparent)}
table.t td.num,.bar-row .bv{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
table.t tr:hover td{background:color-mix(in srgb,var(--accent) 5%,var(--panel))}
code,pre,.params textarea{font-family:var(--mono)}
/* 条形图：段与段之间 2px 间隔，端点圆角 */
.bar-track{background:color-mix(in srgb,var(--line) 45%,transparent);border-radius:4px}
.bar-seg + .bar-seg{box-shadow:inset 2px 0 0 var(--panel)}
.bar-seg:last-child{border-radius:0 4px 4px 0}
.legend{color:var(--sub);font-size:12.5px}
.legend i{border-radius:3px}
