:root{
  --bg:#09130f; --side:#0c1a14; --panel:#101e18; --panel2:#152720; --hover:#1a2f26;
  --line:#22382d; --line2:#2e4a3c; --text:#e8f1ea; --muted:#8ea596; --faint:#62786b;
  --green:#9bd06c; --green2:#86bd57; --green-bg:#1d3526; --amber:#e3c06e; --amber-bg:#352d18;
  --red:#ee7d6c; --red-bg:#3a1f1b; --teal:#8fc2ad; --teal-bg:#18302a;
  --radius:12px;
  --input:#0c1813; --green-line:#2f5a3c; --amber-text:#f0d58f; --amber-line:#5a4b24; --track:#1f3328; --on-green:#10200f;
  --scrim:rgba(2,8,5,.62); --shadow:rgba(0,0,0,.45); --red-text:#f7b2a7; --code:#cfe3d4; --ok-text:#c4ec9f; --green-hover:#ade07d;
  --th:#a8bfb0; --red-line:#61322b; --glow:#132a1e; --drop:#0f1f17; --thbg:#0d1914; --detail:#0b1611; color-scheme:dark; --mono:ui-monospace,"SF Mono","Cascadia Mono",Consolas,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif}
a{color:var(--green);text-decoration:none}
a:hover{text-decoration:underline}
button,input,select,textarea{font:inherit;color:inherit}
.boot{padding:40px;color:var(--muted)}
.mono{font-family:var(--mono);font-size:12.5px}
.muted{color:var(--muted)} .faint{color:var(--faint)} .small{font-size:12px}
.nowrap{white-space:nowrap} .right{text-align:right} .center{text-align:center}
.hidden{display:none!important}

/* ---------- layout ---------- */
.app{display:flex;min-height:100vh}
aside.side{width:236px;flex:none;background:var(--side);border-right:1px solid var(--line);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{padding:24px 22px 8px;font-weight:760;font-size:17px;letter-spacing:.2px}
.brand small{display:block;color:var(--faint);font-size:10px;letter-spacing:1.6px;font-weight:600;margin-top:4px}
nav.nav{padding:18px 12px;flex:1;overflow:auto}
nav.nav a{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;margin:2px 0;border-radius:9px;color:var(--muted);font-weight:600}
nav.nav a:hover{background:var(--hover);color:var(--text);text-decoration:none}
nav.nav a.active{background:var(--green-bg);color:var(--green)}
nav.nav .count{background:var(--amber-bg);color:var(--amber);border-radius:10px;padding:0 7px;font-size:11px;font-weight:700}
.userbox{border-top:1px solid var(--line);padding:14px 18px;font-size:12.5px}
.userbox b{display:block;font-size:13.5px}
.userbox .links{margin-top:8px;display:flex;gap:12px}
.userbox .links button{background:none;border:0;color:var(--muted);padding:0;cursor:pointer}
.userbox .links button:hover{color:var(--green)}
main.main{flex:1;min-width:0;padding:28px clamp(16px,3.4vw,44px) 60px;max-width:1500px}
.topbar{display:none}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.page-head h1{font-size:26px;margin:0 0 4px;letter-spacing:.2px}
.page-head .sub{color:var(--muted)}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* ---------- cards ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:16px}
.card h3{margin:0 0 12px;font-size:14.5px}
.card-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.card-head h3{margin:0}
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:16px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}
.kpi .label{color:var(--muted);font-size:12.5px}
.kpi .num{font-size:30px;font-weight:760;margin-top:8px;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.kpi .hint{color:var(--faint);font-size:12px;margin-top:2px}
.grid2{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:16px}
.grid2 > .card{margin-bottom:0}
.grid-eq{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.stack{display:flex;flex-direction:column;gap:16px}
.bars .bar{display:grid;grid-template-columns:150px 1fr 52px;gap:12px;align-items:center;margin:10px 0}
.bars .bar span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.track{height:9px;background:var(--track);border-radius:9px;overflow:hidden}
.fill{display:block;height:100%;background:var(--green);border-radius:9px;width:0;transition:width .5s}
.kv{display:grid;grid-template-columns:auto 1fr;gap:8px 18px;margin:0}
.kv dt{color:var(--muted)} .kv dd{margin:0;word-break:break-all}
.qrow{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px dashed var(--line)}
.qrow:last-child{border:0}

/* ---------- forms / buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:6px;background:var(--panel2);border:1px solid var(--line2);color:var(--text);border-radius:9px;padding:8px 14px;cursor:pointer;font-weight:600;white-space:nowrap}
.btn:hover{border-color:var(--green2);text-decoration:none}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.primary{background:var(--green);border-color:var(--green);color:var(--on-green)}
.btn.primary:hover{background:var(--green-hover)}
.btn.danger{border-color:var(--red-line);color:var(--red)}
.btn.ghost{background:transparent}
.btn.sm{padding:4px 10px;font-size:12.5px;border-radius:7px}
.field{display:flex;flex-direction:column;gap:5px;min-width:0}
.field label{color:var(--muted);font-size:12.5px;font-weight:600}
.field .req{color:var(--amber)}
input[type=text],input[type=password],input[type=search],input[type=number],input[type=date],select,textarea{
  background:var(--input);border:1px solid var(--line2);border-radius:9px;padding:8px 11px;min-width:0;width:100%}
input:focus,select:focus,textarea:focus,.btn:focus-visible,a:focus-visible{outline:2px solid var(--green2);outline-offset:1px}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 15px) 52%,calc(100% - 10px) 52%;background-size:5px 5px;background-repeat:no-repeat;padding-right:30px}
textarea{min-height:76px;resize:vertical}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}
.filters{display:grid;grid-template-columns:minmax(220px,2fr) repeat(5,minmax(120px,1fr)) auto;gap:10px;align-items:end}
.check{display:flex;align-items:center;gap:8px;color:var(--muted);cursor:pointer}
.check input{accent-color:var(--green);width:16px;height:16px}

/* ---------- table ---------- */
.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
table{width:100%;border-collapse:collapse}
th,td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top;font-size:13px}
th{color:var(--th);font-weight:650;font-size:12px;background:var(--thbg);position:sticky;top:0;white-space:nowrap}
th.sortable{cursor:pointer;user-select:none}
th.sortable:hover{color:var(--green)}
tbody tr:last-child td{border-bottom:0}
tbody tr.clickable{cursor:pointer}
tbody tr.clickable:hover,tbody tr.sel{background:var(--hover)}
td.empty{color:var(--faint);text-align:center;padding:34px}
.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;color:var(--muted);flex-wrap:wrap}
.pager .btns{display:flex;gap:6px;align-items:center}

/* ---------- badges ---------- */
.badge{display:inline-flex;align-items:center;gap:4px;border-radius:7px;padding:2px 8px;font-size:11.5px;font-weight:650;white-space:nowrap;border:1px solid transparent}
.b-ok,.b-committed,.b-active,.b-approved,.b-accept,.b-confirmed{background:var(--green-bg);color:var(--green)}
.b-ambiguous,.b-review,.b-needs_review,.b-ready_for_review,.b-pending,.b-uploaded,.b-parsing,.b-committing{background:var(--amber-bg);color:var(--amber)}
.b-blocker,.b-parse_failed,.b-commit_failed,.b-rejected,.b-deleted,.b-overwrite{background:var(--red-bg);color:var(--red)}
.b-info,.b-skip,.b-skipped,.b-excluded,.b-expanded,.b-parsed,.b-viewer,.b-uploader,.b-reviewer,.b-admin{background:var(--teal-bg);color:var(--teal)}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{border:1px solid var(--line2);background:transparent;border-radius:20px;padding:5px 12px;cursor:pointer;color:var(--muted);font-weight:600;font-size:12.5px}
.chip.on{background:var(--green-bg);border-color:var(--green2);color:var(--green)}
.chip .n{opacity:.75;margin-left:4px}
.issue{display:block;font-size:12px;margin:2px 0;line-height:1.45}
.issue::before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:1px;background:var(--teal)}
.issue.review::before{background:var(--amber)} .issue.blocker::before{background:var(--red)}
.issue .d{color:var(--faint)}

/* ---------- alerts ---------- */
.alert{border-radius:10px;padding:12px 14px;margin-bottom:14px;border:1px solid}
.alert.warn{background:var(--amber-bg);border-color:var(--amber-line);color:var(--amber-text)}
.alert.err{background:var(--red-bg);border-color:var(--red-line);color:var(--red-text)}
.alert.ok{background:var(--green-bg);border-color:var(--green-line);color:var(--ok-text)}
.alert ul{margin:6px 0 0;padding-left:20px}

/* ---------- tabs ---------- */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}
.tabs button{background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;color:var(--muted);font-weight:650;cursor:pointer;white-space:nowrap}
.tabs button.on{color:var(--green);border-color:var(--green)}

/* ---------- steps / upload ---------- */
.steps{display:flex;gap:10px;margin-bottom:18px;flex-wrap:wrap}
.step{display:flex;align-items:center;gap:8px;color:var(--faint);font-weight:650}
.step i{font-style:normal;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line2);font-size:12px}
.step.on{color:var(--text)} .step.on i{background:var(--green);color:var(--on-green);border-color:var(--green)}
.step.done{color:var(--muted)} .step.done i{background:var(--green-bg);color:var(--green);border-color:var(--green-bg)}
.step-sep{flex:0 0 28px;border-top:1px solid var(--line2);align-self:center}
.drop{border:1.5px dashed var(--line2);border-radius:12px;padding:34px 20px;text-align:center;color:var(--muted);cursor:pointer;transition:.15s}
.drop:hover,.drop.over{border-color:var(--green);background:var(--drop);color:var(--text)}
.drop b{color:var(--text);display:block;font-size:15px;margin-bottom:4px}
.filelist{margin-top:14px}
.fileitem{display:flex;align-items:center;gap:12px;padding:9px 12px;border:1px solid var(--line);border-radius:9px;margin-top:6px;background:var(--panel2)}
.fileitem .name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.progress{height:8px;background:var(--track);border-radius:8px;overflow:hidden;margin-top:12px}
.progress div{height:100%;background:var(--green);width:0;transition:width .2s}
.stat-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin-bottom:16px}
.tile{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 14px}
.tile .label{color:var(--muted);font-size:12px}
.tile .num{font-size:21px;font-weight:740;font-variant-numeric:tabular-nums}
.tile.warn .num{color:var(--amber)} .tile.err .num{color:var(--red)} .tile.good .num{color:var(--green)}

/* ---------- compare ---------- */
.compare{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:6px}
.compare .col{background:var(--input);border:1px solid var(--line);border-radius:9px;padding:10px 12px}
.compare h4{margin:0 0 6px;font-size:12px;color:var(--muted)}
.compare table td{padding:3px 6px;border:0;font-size:12px}
.compare table td:first-child{color:var(--muted);white-space:nowrap}
.diff{color:var(--amber);font-weight:650}
tr.detail-row > td{background:var(--detail)}

/* ---------- drawer / modal ---------- */
.overlay{position:fixed;inset:0;background:var(--scrim);z-index:40;display:flex;justify-content:flex-end}
.overlay.centered{align-items:center;justify-content:center;padding:16px}
.drawer{width:min(620px,100%);height:100%;background:var(--panel);border-left:1px solid var(--line2);overflow:auto;padding:22px 24px}
.modal{width:min(560px,100%);max-height:calc(100vh - 32px);overflow:auto;background:var(--panel);border:1px solid var(--line2);border-radius:14px;padding:22px 24px}
.modal.wide{width:min(760px,100%)}
.modal h2,.drawer h2{margin:0 0 4px;font-size:18px}
.modal .foot{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}
.close{float:right;background:none;border:0;color:var(--muted);font-size:22px;line-height:1;cursor:pointer}
.section-title{margin:22px 0 10px;font-size:13px;color:var(--muted);font-weight:700;letter-spacing:.5px}
.timeline{border-left:2px solid var(--line2);margin-left:6px;padding-left:14px}
.timeline .ev{margin-bottom:12px;position:relative}
.timeline .ev::before{content:"";position:absolute;left:-20px;top:6px;width:10px;height:10px;border-radius:50%;background:var(--green-bg);border:2px solid var(--green2)}
.token{background:var(--input);border:1px solid var(--green2);border-radius:9px;padding:12px;font-family:var(--mono);word-break:break-all;color:var(--green)}
pre.code{background:var(--input);border:1px solid var(--line);border-radius:9px;padding:12px 14px;overflow:auto;font-family:var(--mono);font-size:12px;color:var(--code);margin:8px 0}

/* ---------- toasts ---------- */
#toasts{position:fixed;right:18px;bottom:18px;z-index:60;display:flex;flex-direction:column;gap:8px;max-width:min(420px,calc(100vw - 32px))}
.toast{background:var(--panel2);border:1px solid var(--line2);border-left:4px solid var(--green);border-radius:10px;padding:11px 14px;box-shadow:0 8px 28px var(--shadow);animation:in .2s}
.toast.err{border-left-color:var(--red)}
@keyframes in{from{transform:translateY(8px);opacity:0}}

/* ---------- login ---------- */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px;background:radial-gradient(1200px 600px at 20% 0%,var(--glow),transparent),var(--bg)}
.login{width:min(400px,100%);background:var(--panel);border:1px solid var(--line2);border-radius:16px;padding:30px 28px}
.login h1{margin:0 0 4px;font-size:22px}
.login .field{margin-top:14px}
.login .btn{width:100%;justify-content:center;margin-top:20px;padding:10px}

/* ---------- responsive ---------- */
@media (max-width:1180px){.filters{grid-template-columns:repeat(3,minmax(0,1fr))}.filters .grow{grid-column:1/-1}}
@media (max-width:980px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.grid2,.grid-eq{grid-template-columns:1fr}}
@media (max-width:820px){
  aside.side{position:fixed;left:-260px;z-index:50;transition:left .2s;box-shadow:0 0 40px var(--shadow)}
  aside.side.open{left:0}
  .topbar{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--side);position:sticky;top:0;z-index:30}
  .topbar button{background:none;border:1px solid var(--line2);border-radius:8px;color:var(--text);padding:5px 10px}
  main.main{padding:20px 16px 50px}
  .app{flex-direction:column}
  .filters{grid-template-columns:1fr 1fr}
  .compare{grid-template-columns:1fr}
  .bars .bar{grid-template-columns:100px 1fr 40px}
}
@media (max-width:480px){.kpis{grid-template-columns:1fr 1fr}.kpi .num{font-size:24px}.filters{grid-template-columns:1fr}}

/* ---------- utilities (CSP 禁止内联 style，统一用类) ---------- */
.mt6{margin-top:6px}.mt8{margin-top:8px}.mt12{margin-top:12px}.mt14{margin-top:14px}.mt16{margin-top:16px}.mt22{margin-top:22px}
.mb10{margin-bottom:10px}.mb12{margin-bottom:12px}.p0{padding:0!important}.end{justify-content:flex-end}
.card.tight{padding:14px 16px}
.rules{padding-left:18px;margin:0;line-height:1.9}
.filters.cols-3{grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr)}
.filters.cols-audit{grid-template-columns:minmax(0,200px) minmax(0,200px) 1fr}
.compare.one{grid-template-columns:1fr}
.actions.drawer-acts{margin:8px 0 4px}
select.b-accept,select.b-skip,select.b-overwrite,select.b-pending,select.b-ambiguous{border-color:transparent;font-weight:650;padding-top:4px;padding-bottom:4px}
@media (max-width:820px){.filters.cols-3,.filters.cols-audit{grid-template-columns:1fr}}
table.tight-rows td{white-space:nowrap;vertical-align:middle;padding-top:9px;padding-bottom:9px}
select[data-chg=row-dec]{min-width:96px;width:auto}

/* ================= v2 外观：参考稿（图标侧栏 + 面包屑 + 大卡片） ================= */
:root{--radius:16px}
.ic{width:18px;height:18px;flex:none}
aside.side{width:248px}
.brand{display:flex;align-items:center;gap:12px;padding:24px 18px 22px;border-bottom:1px solid var(--line);margin:0 6px}
.brand b{display:block;font-size:17px;font-weight:780;letter-spacing:.1px}
.brand small{font-size:9.5px;letter-spacing:1.8px;line-height:1.35;margin-top:3px;color:var(--muted)}
.logo{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:var(--green-bg);border:1px solid var(--green-line);color:var(--green);flex:none}
.logo .ic{width:22px;height:22px}
nav.nav{padding:8px 12px 16px}
.nav-sec{font-size:10.5px;font-weight:700;letter-spacing:2.6px;color:var(--faint);padding:20px 12px 8px}
nav.nav a{justify-content:flex-start;gap:12px;padding:11px 12px;border:1px solid transparent;border-radius:12px;font-size:14.5px}
nav.nav a .ic{width:19px;height:19px}
nav.nav a .lbl{flex:1}
nav.nav a.active{background:var(--green-bg);border-color:var(--green-line);color:var(--green)}
.userbox{display:flex;gap:12px;align-items:flex-start;padding:16px 18px;margin:0 6px}
.avatar{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--green-bg);border:1px solid var(--green-line);color:var(--green);font-weight:800;font-size:13.5px;flex:none}
.userbox .who{min-width:0}
.userbox .who span{display:block;color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mainwrap{flex:1;min-width:0;padding:22px clamp(16px,3.2vw,44px) 60px;max-width:1500px}
main.main{padding:0;max-width:none}
.crumbbar{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding-bottom:22px}
.crumbs{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:14.5px;flex-wrap:wrap;min-width:0}
.crumbs a{color:var(--muted)} .crumbs a:hover{color:var(--text)}
.crumbs b{color:var(--text)}
.crumbs .sep{width:15px;height:15px;color:var(--faint)}
.btn .ic{width:17px;height:17px}
.btn.big{padding:10px 18px;font-size:14.5px;border-radius:12px}
.btn.chip-btn{padding:10px 16px;font-size:14px;border-radius:12px;background:var(--panel)}
.notice-bar{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap;border:1px solid var(--amber-line);background:var(--amber-bg);color:var(--amber-text);border-radius:12px;padding:10px 16px;margin-bottom:22px;font-weight:600;font-size:13.5px;max-width:100%}
.notice-bar .ic{width:20px;height:20px}
.page-head{margin-bottom:24px}
.page-head h1{font-size:34px;font-weight:800;letter-spacing:.5px;margin-bottom:8px;text-wrap:balance}
.page-head .sub{font-size:14.5px}
.kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.kpi{border-radius:18px;padding:22px 24px 20px}
.kpi-top{display:flex;justify-content:space-between;align-items:center;gap:10px}
.kpi-top .label{font-size:14px;color:var(--muted)}
.kpi-top .ic{width:22px;height:22px;color:var(--green)}
.kpi .num{font-size:44px;font-weight:800;margin-top:14px;line-height:1.1}
.kpi .hint{font-size:13px;color:var(--muted);margin-top:8px}
.card{border-radius:16px;padding:20px 22px}
.stat-tiles .tile{border-radius:12px}
.topbar button{display:grid;place-items:center}
@media (min-width:1600px){.kpis{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:820px){
  .mainwrap{padding:16px max(16px,env(safe-area-inset-right,0px)) 50px max(16px,env(safe-area-inset-left,0px))}
  .crumbs{font-size:13px}.page-head h1{font-size:26px}.kpi .num{font-size:32px}
}
@media (max-width:480px){.kpis{grid-template-columns:1fr 1fr}.kpi{padding:16px}.kpi .num{font-size:26px}.kpi-top .label{font-size:12.5px}.crumbs span,.crumbs .sep:first-of-type{display:none}}

/* 品牌 Logo（白色透明底 PNG） */
.brand{flex-direction:column;align-items:flex-start;gap:8px}
.brand-logo{display:block;width:176px;max-width:100%;height:auto}
.brand small{margin-top:0;padding-left:2px}
.login .brand{border:0;margin:0}
.login .brand-logo{width:220px}
.login h1.mt22{margin-top:26px}

/* 筛选栏自适应换行，避免按钮被挤出 */
.filters{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.filters .grow{grid-column:span 2}
.filters > .actions{align-self:end;flex-wrap:nowrap}
@media (max-width:480px){.filters{grid-template-columns:1fr}.filters .grow{grid-column:auto}}

/* ---------- 浅色主题（系统设置 → 显示与语言） ---------- */
html[data-ui="light"]{
  --bg:#f3f6f1; --side:#e9efe6; --panel:#ffffff; --panel2:#f2f6f0; --hover:#e5ede2; --line:#d9e3d5; --line2:#c4d3bf;
  --text:#14231a; --muted:#52695a; --faint:#7d9184; --green:#3c7a1c; --green2:#5b9a36; --green-bg:#e2efd8;
  --amber:#865f00; --amber-bg:#fbf0d6; --red:#b13a2b; --red-bg:#fbe4df; --teal:#2d6c59; --teal-bg:#dfeee8;
  --input:#ffffff; --green-line:#b5d49e; --amber-text:#6b4c00; --amber-line:#e5cb86; --track:#dfe8dc; --on-green:#ffffff;
  --scrim:rgba(22,34,27,.38); --shadow:rgba(24,44,32,.16); --red-text:#8d2a1e; --code:#21362a; --ok-text:#2c5a15; --green-hover:#4c8c27;
  --th:#4a6152; --red-line:#e5b2a8; --glow:#dcecd9; --drop:#edf5e9; --thbg:#f0f4ee; --detail:#f6f9f4; color-scheme:light;
}
html[data-ui="light"] .brand-logo{filter:brightness(0) saturate(100%) invert(10%) sepia(14%) saturate(900%) hue-rotate(90deg)}
html[data-ui="light"] .btn.primary{color:var(--on-green)}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:12px;padding:3px;gap:3px;background:var(--panel2);flex-wrap:wrap}
.seg button{border:0;background:transparent;color:var(--muted);padding:8px 16px;border-radius:9px;font-weight:650;cursor:pointer}
.seg button.on{background:var(--green-bg);color:var(--green);box-shadow:inset 0 0 0 1px var(--green-line)}
.pref-row{display:flex;flex-direction:column;gap:8px;padding:14px 0;border-bottom:1px dashed var(--line)}
.pref-row:last-child{border:0}
.pref-row .seg{align-self:flex-start}

.brand-table td{vertical-align:middle;padding:7px 10px}
.brand-table input[type=text]{min-width:160px}
.brand-table input[type=radio]{accent-color:var(--green);width:16px;height:16px}
.static-field{padding:8px 11px;border:1px dashed var(--line2);border-radius:9px;color:var(--text);background:var(--panel2)}
.filesum{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:13px;margin-bottom:4px}
.filescroll{max-height:300px;overflow:auto;padding-right:4px}
.rows-table td:last-child{min-width:220px}
.rows-table td:first-child,.rows-table th:first-child{width:36px}

/* 工作表批量处理 */
.selbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 14px;margin-bottom:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel);color:var(--muted);font-size:13px}
.selbar.on{border-color:var(--green-line);background:var(--green-bg);color:var(--text)}
.selbar span{flex:1;min-width:200px}
.sheet-table td,.sheet-table th{vertical-align:top}
.sheet-table input[type=checkbox],.rows-table input[type=checkbox]{accent-color:var(--green);width:16px;height:16px}
.sheet-table th:first-child,.sheet-table td:first-child{width:36px;min-width:36px}
.sheet-table td:nth-child(2){min-width:200px;max-width:260px;word-break:break-all}
.sheet-table td:last-child{min-width:200px}
.sh-col-model{min-width:170px}.sh-col-batch{min-width:190px}
.sh-col-model select,.sh-col-batch input{width:100%;padding:6px 9px;font-size:13px}
.sh-col-model select{padding-right:28px}
select.need,input.need{border-color:var(--amber-line);background-color:var(--amber-bg)}
.cands{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.cand{border:1px dashed var(--line2);background:transparent;color:var(--muted);border-radius:7px;padding:2px 7px;font-family:var(--mono);font-size:11.5px;cursor:pointer}
.cand:hover{border-color:var(--green2);color:var(--text)}
.cand.on{border-style:solid;border-color:var(--green-line);background:var(--green-bg);color:var(--green)}
.stack-sm{display:flex;flex-direction:column;gap:6px;align-items:flex-start}

.shake{animation:shake .4s}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
@media (prefers-reduced-motion:reduce){.shake{animation:none}}
.nextstep{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.alert-link{color:inherit;text-decoration:underline;text-underline-offset:3px}
.peer{border:1px solid var(--amber-line);border-radius:10px;padding:12px 14px;background:var(--panel)}
.peer h4{margin:0 0 8px;font-size:13px}
.peer table td,.peer table th{font-size:12.5px;padding:6px 10px;vertical-align:top}
.peer tr.peer-diff td{background:var(--amber-bg)}
.peer tr.peer-diff td:first-child{color:var(--amber-text);font-weight:650}
.danger-card{border-color:var(--red-line)}
.danger-card input{max-width:260px}
