:root{
  --brand:#79C259; --brand-d: #4f9f2f; --brand-t:#eef7e7; --brand-t2:#dff0d2;
  --ink:#171717; --ink-2:#3d403c; --mut:#767b73; --mut-2:#9aa096;
  --bg:#f6f7f4; --card:#ffffff; --line:#e4e7e1; --line-2:#eef0ec;
  --s:#3f8f2a; --a:#79C259; --b:#a9b0a4; --c:#c6cabf;
  --shadow:0 1px 2px rgba(23,23,23,.04), 0 8px 24px rgba(23,23,23,.05);
  --r:12px;
}
[data-theme="dark"]{
  --ink:#f2f4ef; --ink-2:#cfd4c9; --mut:#9aa096; --mut-2:#767b73;
  --bg:#141614; --card:#1c1f1b; --line:#2a2e28; --line-2:#23261f;
  --brand-t:#1f2a19; --brand-t2:#26331d;
  --shadow:0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.25);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;
  background:var(--bg); color:var(--ink); font-size:14px; line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit;font-size:inherit;color:inherit;cursor:pointer}
a{color:inherit}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:var(--mut-2)}

/* ---------- 顶栏 ---------- */
.top{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--card) 88%,transparent);
  backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.top-in{max-width:1560px;margin:0 auto;padding:11px 22px;display:flex;align-items:center;gap:16px}
.brand{display:flex;align-items:center;gap:10px;flex-shrink:0}
.logo{width:32px;height:32px;border-radius:9px;background:var(--brand);display:grid;place-items:center;
  color:#fff;font-weight:800;font-size:13px;letter-spacing:-.5px;box-shadow:0 2px 8px rgba(121,194,89,.35)}
.brand h1{font-size:15px;margin:0;font-weight:700;letter-spacing:-.2px;white-space:nowrap}
.brand .sub{font-size:11px;color:var(--mut);margin-top:1px;white-space:nowrap}
.search{flex:1;max-width:420px;position:relative}
.search input{width:100%;padding:9px 14px 9px 40px;border:1px solid var(--line);border-radius:9px;
  background:var(--bg);color:var(--ink);font-size:13px;outline:none}
.search input:focus{border-color:var(--brand);background:var(--card);box-shadow:0 0 0 3px var(--brand-t)}
.search svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);opacity:.5;pointer-events:none}
.spacer{flex:1}
.seg{display:flex;background:var(--bg);border:1px solid var(--line);border-radius:9px;padding:2px}
.seg button{border:0;background:none;padding:6px 12px;border-radius:7px;font-size:12.5px;color:var(--mut);font-weight:600}
.seg button.on{background:var(--card);color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.icon-btn{border:1px solid var(--line);background:var(--card);width:34px;height:34px;border-radius:9px;
  display:grid;place-items:center;color:var(--ink-2)}
.icon-btn:hover{border-color:var(--mut-2)}

/* ---------- 布局 ---------- */
.wrap{max-width:1560px;margin:0 auto;display:grid;grid-template-columns:246px minmax(0,1fr);gap:0;
  min-height:calc(100vh - 57px)}
.rail{border-right:1px solid var(--line);background:var(--card);position:sticky;top:57px;
  height:calc(100vh - 57px);overflow-y:auto;overscroll-behavior:contain;padding:12px 0 40px}
.rail-h{padding:8px 16px 6px;font-size:11px;font-weight:700;color:var(--mut);letter-spacing:.6px;
  text-transform:uppercase;display:flex;justify-content:space-between;align-items:center}
.rail-item{display:flex;align-items:center;gap:8px;padding:7px 10px 7px 16px;margin:1px 8px;border-radius:8px;
  cursor:pointer;font-size:13px;color:var(--ink-2);border:1px solid transparent}
.rail-item:hover{background:var(--bg)}
.rail-item.on{background:var(--brand-t);border-color:var(--brand-t2);color:var(--ink);font-weight:650}
.rail-item .n{margin-left:auto;font-size:11.5px;color:var(--mut);font-variant-numeric:tabular-nums}
.rail-item .dot{width:5px;height:5px;border-radius:50%;background:var(--brand);flex-shrink:0}
.rail-item.zero .dot{background:var(--c)}
.rail-sub{padding-left:30px;font-size:12.5px}
.rail-back{font-size:12px;color:var(--mut);padding:4px 16px 8px;cursor:pointer;display:flex;gap:5px;align-items:center}
.rail-back:hover{color:var(--ink)}
.rail-mini{padding:2px 16px 8px;font-size:11.5px;color:var(--mut)}

.main{padding:20px 24px 60px;min-width:0}

/* ---------- 面包屑 + 标题 ---------- */
.crumb{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--mut);margin-bottom:10px;flex-wrap:wrap}
.crumb b{color:var(--ink);font-weight:650}
.crumb span.sep{opacity:.4}
.crumb .pill{background:var(--brand-t);color:var(--brand-d);padding:2px 8px;border-radius:20px;
  font-size:11px;font-weight:650;border:1px solid var(--brand-t2)}
[data-theme="dark"] .crumb .pill{color:var(--brand)}
h2.title{font-size:22px;margin:0 0 3px;letter-spacing:-.4px;font-weight:750}
.title-sub{color:var(--mut);font-size:12.5px}

/* ---------- KPI ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:10px;margin:16px 0 14px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:11px 13px}
.kpi .k{font-size:11px;color:var(--mut);font-weight:600;display:flex;align-items:center;gap:5px}
.kpi .v{font-size:21px;font-weight:750;letter-spacing:-.6px;margin-top:3px;font-variant-numeric:tabular-nums}
.kpi .v small{font-size:11px;font-weight:600;color:var(--mut);margin-left:3px;letter-spacing:0}
.kpi.s .v{color:var(--s)} .kpi.a .v{color:var(--brand-d)}
[data-theme="dark"] .kpi.a .v{color:var(--brand)}

/* ---------- 筛选 ---------- */
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.chip{border:1px solid var(--line);background:var(--card);border-radius:20px;padding:5px 11px;font-size:12.5px;
  color:var(--ink-2);font-weight:600;display:flex;align-items:center;gap:5px}
.chip:hover{border-color:var(--mut-2)}
.chip.on{background:var(--ink);color:var(--card);border-color:var(--ink)}
.chip.on .cnt{color:rgba(255,255,255,.7)}
.chip .cnt{font-size:11px;color:var(--mut);font-variant-numeric:tabular-nums}
.gdot{width:7px;height:7px;border-radius:2px}
.filters .sep{width:1px;height:18px;background:var(--line);margin:0 3px}
.hint{font-size:12px;color:var(--mut);margin-left:auto}

/* ---------- 列表 ---------- */
.list{background:var(--card);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.thead,.row{display:grid;grid-template-columns:46px minmax(180px,2.1fr) 118px 92px 104px 96px minmax(110px,1fr) 86px;
  gap:10px;align-items:center;padding:0 14px}
.thead{height:34px;background:var(--bg);border-bottom:1px solid var(--line);font-size:11px;color:var(--mut);
  font-weight:700;letter-spacing:.3px}
.row{min-height:56px;border-bottom:1px solid var(--line-2);cursor:pointer;font-size:13px}
.row:last-child{border-bottom:0}
.row:hover{background:var(--brand-t)}
.row .nm{font-weight:650;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .nm .tag{display:inline-block;font-size:10px;font-weight:650;padding:1px 5px;border-radius:4px;
  background:var(--bg);color:var(--mut);margin-left:6px;vertical-align:1px}
.row .loc{font-size:11.5px;color:var(--mut);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .tel{font-variant-numeric:tabular-nums;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.row .tel.mob{color:var(--brand-d);font-weight:650}
[data-theme="dark"] .row .tel.mob{color:var(--brand)}
.row .muted{color:var(--mut-2);font-size:12px}
.badge{width:30px;height:24px;border-radius:7px;display:grid;place-items:center;font-weight:800;font-size:13px;
  letter-spacing:-.3px}
.badge.S{background:var(--s);color:#fff}
.badge.A{background:var(--brand-t2);color:var(--brand-d);box-shadow:inset 0 0 0 1px var(--brand)}
[data-theme="dark"] .badge.A{color:var(--brand)}
.badge.B{background:var(--bg);color:var(--b);box-shadow:inset 0 0 0 1px var(--line)}
.badge.C{background:transparent;color:var(--c);box-shadow:inset 0 0 0 1px var(--line)}
.ev{font-size:10px;padding:1px 5px;border-radius:4px;font-weight:700;letter-spacing:.2px}
.ev.L1{background:var(--brand-t);color:var(--brand-d)}
[data-theme="dark"] .ev.L1{color:var(--brand)}
.ev.L2{background:var(--bg);color:var(--mut)}
.ev.L3{background:transparent;color:var(--mut-2);box-shadow:inset 0 0 0 1px var(--line)}
.bar{height:5px;border-radius:3px;background:var(--line);display:flex;overflow:hidden;width:100%}
.bar i{display:block;height:100%}
.why{font-size:11.5px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.more{display:block;width:100%;padding:12px;border:0;background:var(--card);border-top:1px solid var(--line);
  color:var(--brand-d);font-weight:650;font-size:13px}
.more:hover{background:var(--brand-t)}
.empty{padding:52px 20px;text-align:center;color:var(--mut);font-size:13px}

/* ---------- 省级总览卡 ---------- */
.grid-prov{display:grid;grid-template-columns:repeat(auto-fill,minmax(214px,1fr));gap:11px}
.pcard{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:13px 14px;cursor:pointer;
  transition:border-color .15s, transform .15s}
.pcard:hover{border-color:var(--brand);transform:translateY(-1px)}
.pcard .h{display:flex;align-items:baseline;gap:7px}
.pcard .h b{font-size:15px;font-weight:750;letter-spacing:-.2px}
.pcard .h span{font-size:11.5px;color:var(--mut)}
.pcard .h .s{margin-left:auto;font-size:11px;font-weight:700;color:var(--brand-d);
  background:var(--brand-t);padding:1px 6px;border-radius:5px}
[data-theme="dark"] .pcard .h .s{color:var(--brand)}
.pcard .nums{display:flex;gap:12px;margin:9px 0 8px;font-size:11.5px;color:var(--mut);font-variant-numeric:tabular-nums}
.pcard .nums b{color:var(--ink);font-weight:700}
.pcard .foot{font-size:11px;color:var(--mut-2);margin-top:7px;display:flex;gap:8px;flex-wrap:wrap}
.warn{color:#b4751a}
[data-theme="dark"] .warn{color:#e0a34a}

/* ---------- 抽屉 ---------- */
.mask{position:fixed;inset:0;background:rgba(15,17,14,.34);opacity:0;pointer-events:none;transition:opacity .18s;z-index:60}
.mask.on{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;height:100%;width:min(560px,94vw);background:var(--card);z-index:61;
  transform:translateX(102%);transition:transform .22s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;
  border-left:1px solid var(--line);box-shadow:-20px 0 50px rgba(0,0,0,.12)}
.drawer.on{transform:none}
.dhead{padding:16px 20px 12px;border-bottom:1px solid var(--line);display:flex;gap:12px;align-items:flex-start}
.dhead .x{margin-left:auto;border:0;background:var(--bg);width:30px;height:30px;border-radius:8px;color:var(--mut);font-size:16px}
.dbody{overflow-y:auto;padding:16px 20px 40px;overscroll-behavior:contain}
.dname{font-size:19px;font-weight:750;letter-spacing:-.3px;line-height:1.25}
.dloc{font-size:12px;color:var(--mut);margin-top:4px}
.sec{margin:18px 0 0}
.sec h4{font-size:11px;font-weight:750;color:var(--mut);letter-spacing:.7px;text-transform:uppercase;margin:0 0 8px}
.kv{display:grid;grid-template-columns:82px 1fr;gap:5px 10px;font-size:13px}
.kv .k{color:var(--mut);font-size:12px}
.kv .v{font-weight:550;word-break:break-all}
.reason{background:var(--bg);border-radius:9px;padding:10px 12px;font-size:12.5px;line-height:1.65;color:var(--ink-2)}
.reason .ln{display:flex;gap:7px;margin:2px 0}
.reason .ln i{color:var(--brand-d);font-style:normal;font-weight:800}
.dims{display:grid;gap:7px}
.dim{display:grid;grid-template-columns:52px 1fr auto;gap:9px;align-items:center;font-size:12.5px}
.dim .lb{color:var(--mut)}
.dim .sc{font-weight:650;font-size:12px}
.dim .src{font-size:10.5px;color:var(--mut-2)}
.seg-bar{height:6px;border-radius:4px;background:var(--line);overflow:hidden;display:flex}
.seg-bar i{height:100%}
.arc{display:flex;gap:9px;padding:8px 0;border-bottom:1px dashed var(--line-2);font-size:12.5px}
.arc:last-child{border:0}
.arc .t{color:var(--mut);font-size:11px}
.arc .p{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--brand-d);font-weight:650;white-space:nowrap}
.dfoot{margin-top:20px;display:flex;gap:8px;flex-wrap:wrap}
.btn{border:1px solid var(--line);background:var(--card);border-radius:9px;padding:8px 13px;font-size:12.5px;
  font-weight:650;color:var(--ink-2)}
.btn:hover{border-color:var(--mut-2)}
.btn.primary{background:var(--ink);color:var(--card);border-color:var(--ink)}
.btn.brand{background:var(--brand);color:#0f1a09;border-color:var(--brand)}
textarea,input[type=text]{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 10px;
  font-family:inherit;font-size:12.5px;background:var(--bg);color:var(--ink);outline:none;resize:vertical}
textarea:focus,input[type=text]:focus{border-color:var(--brand);background:var(--card)}
.form{display:grid;gap:8px;margin-top:8px}
.form label{font-size:11.5px;color:var(--mut);font-weight:650;display:block;margin-bottom:3px}

/* ---------- 覆盖缺口面板 ---------- */
.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;margin-top:14px}
.panel h3{font-size:13px;margin:0 0 4px;font-weight:750}
.panel .p-sub{font-size:12px;color:var(--mut);margin-bottom:12px}
.cov{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:7px}
.cov .c{border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-size:12px;display:flex;gap:8px;align-items:center;cursor:pointer}
.cov .c:hover{border-color:var(--brand)}
.cov .c .nm{font-weight:600}
.cov .c .n{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--mut);font-size:11.5px}
.cov .c.blank{background:#fffbf2;border-color:#f0e2c8}
[data-theme="dark"] .cov .c.blank{background:#251f14;border-color:#3d3220}
.cov .c.blank .nm{color:#b4751a}

/* ---------- 弹层：方法论 ---------- */
.modal{position:fixed;inset:0;z-index:70;display:none;place-items:center;padding:20px}
.modal.on{display:grid}
.modal .box{background:var(--card);border-radius:16px;max-width:680px;width:100%;max-height:86vh;overflow-y:auto;
  padding:24px 26px;box-shadow:0 30px 80px rgba(0,0,0,.25)}
.modal h3{margin:0 0 4px;font-size:18px;letter-spacing:-.3px}
.modal p{font-size:13px;color:var(--ink-2);line-height:1.7}
.modal table{width:100%;border-collapse:collapse;font-size:12.5px;margin:10px 0}
.modal td,.modal th{border-bottom:1px solid var(--line);padding:7px 8px;text-align:left;vertical-align:top}
.modal th{font-size:11px;color:var(--mut);font-weight:700;letter-spacing:.3px}
.modal code{background:var(--bg);padding:1px 5px;border-radius:4px;font-size:12px}

footer.pg{max-width:1560px;margin:0 auto;padding:18px 24px 40px;color:var(--mut-2);font-size:11.5px;
  border-top:1px solid var(--line);display:flex;gap:14px;flex-wrap:wrap}

@media(max-width:1080px){
  .wrap{grid-template-columns:1fr}
  .rail{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line);max-height:224px}
  .thead,.row{grid-template-columns:40px minmax(150px,2fr) 90px 88px}
  .c-bt,.c-rt,.c-am,.c-wh{display:none}
}
@media(max-width:720px){
  .top-in{padding:9px 12px;gap:10px}
  .brand .sub{display:none}
  .main{padding:14px 12px 40px}
  .kpis{grid-template-columns:repeat(3,1fr)}
  .thead,.row{grid-template-columns:32px minmax(110px,1fr) 76px}
  .c-bt,.c-rt,.c-am,.c-wh,.c-cp{display:none}
}

/* ---------- 粘性切换条（城市快切 + 等级筛选） ---------- */
.subbar{position:sticky;top:57px;z-index:22;background:color-mix(in srgb,var(--bg) 94%,transparent);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line);
  margin:0 -24px 12px;padding:9px 24px;display:flex;flex-direction:column;gap:8px}
.subbar .row1{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:1px}
.subbar .row1::-webkit-scrollbar{display:none}
.cchip{flex:0 0 auto;border:1px solid var(--line);background:var(--card);border-radius:8px;
  padding:5px 10px;font-size:12.5px;color:var(--ink-2);white-space:nowrap;font-weight:600}
.cchip:hover{border-color:var(--mut-2)}
.cchip.on{background:var(--ink);color:var(--card);border-color:var(--ink)}
.cchip .n{font-size:11px;opacity:.65;margin-left:4px;font-variant-numeric:tabular-nums}
.subbar .row2{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.subbar .row2 .lbl{font-size:11px;color:var(--mut);font-weight:700;letter-spacing:.4px;margin-right:2px}
@media(max-width:1080px){ .subbar{top:53px;margin:0 -12px 10px;padding:8px 12px} }

/* ---------- 商场明细可编辑 ---------- */
.editbtn{border:1px dashed var(--line);background:transparent;border-radius:6px;padding:1px 6px;
  font-size:11px;color:var(--mut);margin-left:6px;font-weight:600}
.editbtn:hover{border-color:var(--brand);color:var(--brand-d)}
.kv .v .edited{font-size:10px;color:var(--brand-d);background:var(--brand-t);border-radius:4px;
  padding:0 4px;margin-left:5px}
.editform{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.editform .full{grid-column:1/-1}

/* ---------- 点位图 ---------- */
.plans{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-top:8px}
.plan{border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--bg);position:relative;
  aspect-ratio:4/3;display:grid;place-items:center;cursor:zoom-in}
.plan img{width:100%;height:100%;object-fit:cover;display:block}
.plan .del{position:absolute;top:3px;right:3px;width:20px;height:20px;border-radius:6px;border:0;
  background:rgba(0,0,0,.55);color:#fff;font-size:12px;line-height:1;display:grid;place-items:center;cursor:pointer}
.plan .cap{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(transparent,rgba(0,0,0,.62));
  color:#fff;font-size:10px;padding:8px 5px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pcell{display:flex;flex-direction:column}
.plan .pmeta{font-size:10.5px;color:#666;text-align:center;margin-top:3px;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;line-height:1.3}
.uploadbox{border:1.5px dashed var(--line);border-radius:10px;padding:14px;text-align:center;
  font-size:12.5px;color:var(--mut);cursor:pointer;background:var(--bg)}
.uploadbox:hover{border-color:var(--brand);color:var(--brand-d);background:var(--brand-t)}
.lightbox{position:fixed;inset:0;z-index:95;background:rgba(10,12,10,.88);display:none;place-items:center;padding:24px}
.lightbox.on{display:grid}
.lightbox img{max-width:96vw;max-height:88vh;border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.lightbox .bar{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);display:flex;gap:10px}
.lightbox .bar a,.lightbox .bar button{background:rgba(255,255,255,.14);color:#fff;border:0;border-radius:8px;
  padding:8px 14px;font-size:12.5px;text-decoration:none}

/* 过滤容器本身不参与布局，交给内部 .subbar */
#filters{display:block;padding:0;margin:0}

/* 人工定级角标 */
.badge{position:relative}
.badge.man::after{content:"";position:absolute;top:-3px;right:-3px;width:7px;height:7px;border-radius:50%;
  background:var(--ink);border:1.5px solid var(--card)}

/* 就地编辑输入框 */
.inline-inp{flex:1;min-width:0;padding:7px 9px;border:1px solid var(--line);border-radius:7px;
  font:inherit;font-size:13px;background:var(--card);color:var(--fg)}
.inline-inp:focus{outline:none;border-color:var(--brand)}
.inline-box{align-items:center}
#rnBox{display:flex;gap:6px;margin-top:6px}
.editbtn{cursor:pointer;border:1px dashed var(--line);background:transparent;color:var(--brand-d);
  font-size:11px;padding:1px 6px;border-radius:5px;margin-left:6px}
.editbtn:hover{border-color:var(--brand);background:var(--brand-t)}

/* ===== 登录门 ===== */
html.locked body{overflow:hidden}
.gate{position:fixed;inset:0;z-index:9999;background:linear-gradient(160deg,#0f1a12,#16281a 55%,#0d1410);
  display:flex;align-items:center;justify-content:center;padding:20px}
.gatebox{width:100%;max-width:340px;background:#fff;border-radius:16px;padding:26px 22px 20px;box-shadow:0 18px 50px rgba(0,0,0,.35)}
.glogo{font-size:26px;font-weight:900;color:#79C259;letter-spacing:-.5px}
.glogo span{color:#171717}
.gtitle{font-size:14px;font-weight:700;margin-top:10px;color:#171717}
.gsub{font-size:12px;color:#8a8f8b;margin:4px 0 16px}
.gatebox label{display:block;font-size:12px;color:#6b716c;margin:10px 0 4px}
.gatebox input{width:100%;box-sizing:border-box;padding:11px 12px;border:1px solid #dfe3df;border-radius:9px;font:inherit;font-size:15px}
.gatebox input:focus{outline:none;border-color:#79C259;box-shadow:0 0 0 3px rgba(121,194,89,.15)}
.gerr{color:#b42318;font-size:12px;min-height:16px;margin-top:8px}
.gbtn{width:100%;margin-top:6px;justify-content:center;padding:11px}
.ghint{margin-top:14px;font-size:11px;line-height:1.6;color:#8a8f8b;border-top:1px dashed #e6e9e6;padding-top:10px}
.ghint b{color:#171717}

/* ===== 顶栏 ===== */
#qpBar{position:fixed;left:14px;bottom:14px;z-index:900;display:flex;align-items:center;gap:8px;
  background:#fff;border:1px solid var(--line);border-radius:999px;padding:6px 8px 6px 14px;box-shadow:0 6px 20px rgba(0,0,0,.12)}
.qwho{font-size:12px;font-weight:700;color:#171717}
.qwho i{font-style:normal;font-size:10px;font-weight:600;color:#0a7a3f;background:#eaf7ee;border-radius:4px;padding:1px 5px;margin-left:5px}
.qbtn{border:1px solid var(--line);background:#fff;border-radius:999px;padding:6px 12px;font:inherit;font-size:12px;cursor:pointer}
.qbtn.ghost{color:#8a8f8b}

/* ===== 面板 ===== */
.qpPanel{position:fixed;inset:0;z-index:950;background:rgba(12,20,14,.45);display:flex;align-items:flex-start;justify-content:center;padding:26px 14px;overflow:auto}
.qpCard{width:100%;max-width:960px;background:#fff;border-radius:14px;box-shadow:0 24px 60px rgba(0,0,0,.3)}
.qpHead{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}
.qpHead h2{font-size:16px;margin:0;color:#171717}
.qpBody{padding:16px 20px 22px}
.tabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}
.tab{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 14px;font:inherit;font-size:13px;cursor:pointer;color:#4a514c}
.tab.on{background:#171717;color:#fff;border-color:#171717}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px}
.kpi{border:1px solid var(--line);border-radius:11px;padding:12px 14px;background:#fafbfa}
.kl{font-size:11.5px;color:#7c837e}
.kv{font-size:24px;font-weight:800;color:#171717;margin-top:4px;letter-spacing:-.5px}
.ks{font-size:10.5px;color:#9aa09b;margin-top:2px}
.sec2{margin:16px 0 6px}
.sec2 h4{font-size:13px;margin:0 0 8px;color:#171717;display:flex;align-items:center;gap:8px}
.tb{width:100%;border-collapse:collapse;font-size:12.5px}
.tb th{text-align:left;font-weight:600;color:#7c837e;border-bottom:1px solid var(--line);padding:7px 6px;font-size:11.5px}
.tb td{padding:7px 6px;border-bottom:1px solid #f1f3f1;color:#2b322d;vertical-align:middle}
.tb.tight td,.tb.tight th{padding:5px 5px;font-size:11.5px}
.tb .big{font-weight:800;font-size:14px;color:#0a7a3f}
.sel{padding:5px 8px;border:1px solid var(--line);border-radius:7px;font:inherit;font-size:12px;background:#fff;max-width:150px}
.frm{display:flex;gap:8px;flex-wrap:wrap}
.frm input{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:13px;min-width:140px}
.frm2{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.btn.mini{padding:4px 9px;font-size:11.5px}
.btn.danger{color:#b42318;border-color:#f3c7c7}
.hint2{font-size:11.5px;color:#8a8f8b;margin:6px 0 10px;line-height:1.6}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip2{font-size:11.5px;border:1px solid var(--line);border-radius:999px;padding:3px 10px;color:#4a514c;background:#fafbfa}
.muted{color:#9aa09b;font-size:12px}
.tg-edit{color:#0a7a3f;background:#eaf7ee;border-radius:4px;padding:1px 6px;font-size:10.5px}
.tg-undo{color:#8a5a00;background:#fff4e0;border-radius:4px;padding:1px 6px;font-size:10.5px}
.old{color:#b42318;text-decoration:line-through;opacity:.8}
.new{color:#0a7a3f;font-weight:600}
.off{color:#b42318}.on{color:#0a7a3f}
.mono{font-variant-numeric:tabular-nums;color:#7c837e}
@media (max-width:640px){.kpis{grid-template-columns:repeat(2,1fr)}.qpCard{border-radius:12px}.qpPanel{padding:10px 8px}}
.tg-adm{color:#1a4d8a;background:#e8f0fa;border-radius:4px;padding:1px 6px;font-size:10.5px}

/* 页脚不被悬浮身份条遮挡 */
#foot{padding-bottom:6px}
body{padding-bottom:52px}
@media (max-width:640px){#qpBar{left:8px;bottom:8px;padding:5px 6px 5px 10px}body{padding-bottom:46px}}

/* 云端同步横条 */
#cloudBar{position:sticky;bottom:0;background:#fff;border-top:1px solid var(--line);z-index:80}
#cloudBar .cbin{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:8px 14px;font-size:12px;max-width:1400px;margin:0 auto}
#cloudBar .cbtitle{font-weight:700;color:#171717}

/* 同步告警条 */
#syncBanner{position:fixed;left:0;right:0;top:0;z-index:997;display:flex;align-items:center;gap:10px;
  padding:7px 14px;background:#fdecea;color:#b42318;font-size:12.5px;font-weight:600;
  border-bottom:1px solid #f3c7c7;flex-wrap:wrap}
#syncBanner .btn.mini{background:#fff;border-color:#f3c7c7;color:#b42318}
#verBanner{position:fixed;left:0;right:0;top:0;z-index:998;display:flex;align-items:center;gap:10px;
  padding:7px 14px;background:#fff4e0;color:#8a5a00;font-size:12.5px;font-weight:600;
  border-bottom:1px solid #f0d9a8;flex-wrap:wrap}

/* 只读模式：隐藏所有编辑入口 */
#dBody.ro .editbtn,#dBody.ro #btnEdit,#dBody.ro #dOpenOn,#dBody.ro #dOpenEdit,
#dBody.ro #dOpenOff,#dBody.ro #fSave,#dBody.ro #openForm,#dBody.ro #dDel,#dBody.ro #dRestore{display:none!important}
.roTip{background:#fff8e6;border:1px solid #f0d9a8;color:#8a5a00;border-radius:9px;
  padding:9px 11px;font-size:12.5px;line-height:1.65;margin-bottom:10px}
.tg-plan{color:#6b3fd4;background:#f1ecff;border-radius:4px;padding:1px 6px;font-size:10.5px}
#authBanner{position:fixed;left:0;right:0;top:0;z-index:999;display:flex;align-items:center;gap:10px;
  padding:8px 14px;background:#b42318;color:#fff;font-size:12.5px;font-weight:600;flex-wrap:wrap}
#authBanner .btn.mini{background:#fff;border-color:#fff;color:#b42318}

/* 点位图：非图片文件卡片 */
.plan.card{display:flex;align-items:center;justify-content:center;background:#f6f8f4;
  border-style:dashed;border-color:var(--brand);cursor:pointer;min-height:96px}
.plan.card .fico{font-family:inherit;font-weight:800;font-size:14px;letter-spacing:.5px;color:var(--brand-d);
  background:#e8f4e0;border:1px solid var(--brand);border-radius:8px;padding:10px 12px}
.plan.card .cap{background:rgba(255,255,255,.92);color:var(--fg);border-top:1px solid var(--line);
  font-size:10.5px;line-height:1.25;padding:3px 4px;max-height:44px;overflow:hidden;word-break:break-all}
