/* ============ 设计系统 ============ */
:root{
  --bg0:#020a16; --bg1:#061a30; --bg2:#08243f;
  --panel:rgba(9,28,52,.55); --panel2:rgba(12,36,64,.6);
  --line:rgba(0,229,255,.16); --line2:rgba(120,170,215,.12);
  --cyan:#00e5ff; --blue:#1e90ff; --green:#00e676; --warn:#ffc400; --red:#ff3b5b; --purple:#a78bfa;
  --ink:#e6f4ff; --mut:#7fa8c9; --mut2:#4a6b8a;
  --glow:0 0 10px rgba(0,229,255,.5);
  --sans:"HarmonyOS Sans SC","MiSans","PingFang SC","Microsoft YaHei UI","Microsoft YaHei","Source Han Sans CN",system-ui,sans-serif;
  --num:"Bahnschrift","DIN Alternate","Rajdhani","Segoe UI Variable Display","Oswald",var(--sans);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;background:var(--bg0);overflow:hidden;color:var(--ink);
  font-family:var(--sans);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;
  letter-spacing:.2px;font-feature-settings:"tnum" 1,"ss01" 1}
/* 数字统一用科技等宽字体,提升大屏质感 */
.clk,#clock,.kpi .k-val,.lg-num,.power-big,.agauge .ag-v,.wm .wm-v,.mc .mc-no,
.qcc .qc-rate,.param .pv,.dp .dv,.idh .idh-risk,.twin-strip .ts .n,.wq .wq-v,
.mini b,.drain b,.cold .cv,.dia-row b{font-family:var(--num);letter-spacing:.5px}
svg text{font-family:var(--sans)}
svg text[font-weight="800"],.node-v{font-family:var(--num)}
.c-ok{color:var(--green)!important}.c-red{color:var(--red)!important}.c-warn{color:var(--warn)!important}.c-cyan{color:var(--cyan)!important}
.mut{color:var(--mut)}.sm{font-size:12px}
b{font-weight:700}
::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:rgba(0,229,255,.18);border-radius:3px}
button{font-family:inherit;cursor:pointer}

/* ============ 缩放舞台 ============ */
#scaler{position:fixed;inset:0;overflow:hidden;
  background:
    radial-gradient(1400px 900px at 78% -12%,rgba(0,150,255,.14),transparent 55%),
    radial-gradient(1100px 800px at 5% 110%,rgba(0,229,255,.10),transparent 55%),
    linear-gradient(160deg,#020a16,#04162a 55%,#020a16);}
#stage{width:1920px;height:1080px;position:absolute;left:50%;top:50%;transform-origin:center center;
  display:flex;flex-direction:column;padding:16px 22px;gap:14px}
/* 网格纹理 */
#stage::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;
  background-image:linear-gradient(rgba(0,229,255,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(0,229,255,.035) 1px,transparent 1px);
  background-size:46px 46px;mask-image:radial-gradient(circle at 50% 40%,#000,transparent 80%)}

/* ============ 顶栏 ============ */
#topbar{display:flex;align-items:center;gap:15px;height:66px;flex:0 0 auto;position:relative;z-index:5}
.brand{display:flex;align-items:center;gap:13px}
.logo{width:44px;height:44px;border-radius:11px;background:linear-gradient(135deg,var(--cyan),var(--blue));
  display:grid;place-items:center;font-size:22px;font-weight:800;color:#03202e;box-shadow:0 0 22px rgba(0,229,255,.55)}
.brand-txt .b1{font-size:22px;font-weight:800;letter-spacing:.5px;white-space:nowrap;
  background:linear-gradient(90deg,#fff,#9fe6ff);-webkit-background-clip:text;background-clip:text;color:transparent}
.brand-txt .b2{font-size:11px;color:var(--mut2);letter-spacing:2.5px;margin-top:2px}
#tabs{display:flex;gap:4px;margin-left:3px;flex:0 0 auto}
.tab{padding:7px 9px;font-size:13.5px;color:var(--mut);border:1px solid transparent;border-radius:8px;
  cursor:pointer;transition:.18s;font-weight:600;position:relative;white-space:nowrap;flex:0 0 auto}
.tab:hover{color:var(--ink);background:rgba(0,229,255,.06)}
.tab.on{color:#fff;background:linear-gradient(180deg,rgba(0,229,255,.2),rgba(0,229,255,.05));
  border-color:var(--line);box-shadow:inset 0 -2px 0 var(--cyan),0 0 16px rgba(0,229,255,.2)}
.topright{margin-left:auto;display:flex;align-items:center;gap:12px;font-size:13px;color:var(--mut);flex:0 0 auto;white-space:nowrap}
.run-pill{display:inline-flex;align-items:center;gap:7px;padding:5px 12px;border:1px solid var(--line);border-radius:20px;color:var(--green)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 9px var(--green);animation:blink 1.6s infinite}
@keyframes blink{50%{opacity:.35}}
.dt{font-variant-numeric:tabular-nums}.clk{color:var(--cyan);font-size:20px;font-weight:700;text-shadow:var(--glow)}
.duty{padding:5px 12px;border:1px solid var(--line2);border-radius:20px}
.demo-badge{padding:4px 11px;border:1px dashed rgba(255,196,0,.55);border-radius:6px;color:var(--warn);
  font-size:12px;font-weight:700;letter-spacing:1px;background:rgba(255,196,0,.06)}

/* ============ 全国总览 ============ */
.back-btn{padding:8px 15px;border:1px solid var(--line);border-radius:8px;color:var(--cyan);cursor:pointer;
  font-size:14px;font-weight:600;background:rgba(0,229,255,.07);white-space:nowrap;flex:0 0 auto;transition:.15s}
.back-btn:hover{background:rgba(0,229,255,.16);color:#fff}
.center-chip{margin-left:6px;padding:7px 14px;border:1px solid var(--line2);border-radius:8px;
  font-size:15px;font-weight:700;color:#fff;background:rgba(255,255,255,.04);white-space:nowrap;flex:0 0 auto}
.center-chip .cc-tag{font-size:11px;color:var(--mut);font-weight:500;margin-left:8px}
/* 地图铺底 + 悬浮面板 */
#v-national{padding:0;gap:0;overflow:hidden;border-radius:6px}
#v-national.on{display:block}
#chinaMap{position:absolute;inset:0;background:#061321}
#chinaMap canvas{display:block}
.map-scrim{position:absolute;inset:0;pointer-events:none;z-index:1;
  background:radial-gradient(120% 90% at 50% 40%,transparent 55%,rgba(3,10,20,.55) 100%),
    linear-gradient(90deg,rgba(3,10,20,.5) 0%,transparent 22%,transparent 78%,rgba(3,10,20,.5) 100%)}
.nat-title{position:absolute;top:16px;left:50%;transform:translateX(-50%);z-index:6;display:flex;align-items:center;gap:9px;
  font-size:17px;font-weight:700;color:#dff2ff;text-shadow:0 2px 8px rgba(0,0,0,.6)}
.nat-kpi-float{position:absolute;top:52px;left:322px;right:334px;z-index:6;display:grid;grid-template-columns:repeat(6,1fr);gap:10px}
.nat-kpi-float .kpi{background:linear-gradient(150deg,rgba(0,229,255,.14),rgba(7,20,36,.62));backdrop-filter:blur(7px)}
.nat-float{position:absolute;top:16px;bottom:16px;z-index:6;display:flex;flex-direction:column;gap:12px}
.nat-left{left:16px;width:294px}
.nat-right{right:16px;width:306px}
.nat-float .panel{flex:0 0 auto}
.nat-float .panel.grow{flex:1;min-height:0}
.panel.glass{background:rgba(7,21,38,.6);backdrop-filter:blur(8px);border-color:rgba(0,229,255,.22)}
.nat-legend{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);z-index:6;display:flex;gap:15px;align-items:center;
  font-size:12.5px;color:var(--ink);background:rgba(5,16,28,.6);backdrop-filter:blur(6px);
  padding:8px 16px;border-radius:20px;border:1px solid var(--line2)}
.nat-legend span{display:inline-flex;align-items:center;gap:6px}
.nat-legend i{width:9px;height:9px;border-radius:50%;display:inline-block}
/* 更小的灯点 · 逐个轮动闪烁(14px 透明热区 + 小亮核 + 柔光)*/
.bmk{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;cursor:pointer;z-index:3}
.bmk .glow{position:absolute;left:50%;top:50%;width:15px;height:15px;margin:-7.5px 0 0 -7.5px;border-radius:50%;
  background:radial-gradient(circle,var(--c) 0%,rgba(0,0,0,0) 62%);opacity:.3;pointer-events:none;
  animation:twkg 2.6s ease-in-out infinite;animation-delay:var(--d,0s)}
.bmk .core{position:absolute;left:50%;top:50%;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;border-radius:50%;background:var(--c);
  box-shadow:0 0 6px var(--c),0 0 2px #fff;animation:twk 2.6s ease-in-out infinite;animation-delay:var(--d,0s)}
.bmk:hover{z-index:6}
.bmk:hover .core{transform:scale(2);animation:none;box-shadow:0 0 10px var(--c),0 0 3px #fff}
.bmk:hover .glow{opacity:.9;animation:none;transform:scale(1.4)}
.bmk-off .core{animation:none;opacity:.55;box-shadow:0 0 3px var(--c)}
.bmk-off .glow{animation:none;opacity:.16}
.bmk-alarm{z-index:5}
.bmk-alarm .core{width:7px;height:7px;margin:-3.5px 0 0 -3.5px}
.bmk-alarm .glow{width:22px;height:22px;margin:-11px 0 0 -11px}
.bmk-alarm .core,.bmk-alarm .glow{animation-duration:1.2s}
@keyframes twk{0%,100%{opacity:.5;box-shadow:0 0 3px var(--c)}45%{opacity:1;box-shadow:0 0 9px var(--c),0 0 3px #fff}}
@keyframes twkg{0%,100%{opacity:.18;transform:scale(.7)}45%{opacity:.75;transform:scale(1.25)}}
/* 隐藏百度地图 logo/版权(demo 演示用)*/
#chinaMap .anchorBL,#chinaMap .BMap_cpyCtrl,#chinaMap .BMapGL_cpyCtrl,
#chinaMap a[href*="baidu"],#chinaMap [class*="copyright"],#chinaMap img[src*="copyright"]{display:none!important;opacity:0!important}
.map-tip{position:absolute;z-index:9;pointer-events:none;background:rgba(4,14,26,.92);border:1px solid var(--line);
  border-radius:7px;padding:9px 12px;font-size:12.5px;line-height:1.7;color:var(--ink);max-width:280px;box-shadow:var(--shadow)}
.map-tip b{color:var(--cyan)}
.rank{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line2);font-size:13px}
.rank:last-child{border:0}
.rank .rk-i{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;font-weight:800;font-size:12px;flex:0 0 auto}
.rank .rk-n{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rank .rk-v{font-weight:700;font-variant-numeric:tabular-nums;color:var(--cyan)}
.rank.clk{cursor:pointer}.rank.clk:hover{color:#fff}
.natc{display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px dashed var(--line2);cursor:pointer}
.natc:last-child{border:0}
.natc:hover{background:rgba(255,255,255,.03)}
.natc .nc-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto}
.natc .nc-main{flex:1;min-width:0}
.natc .nc-t{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.natc .nc-m{font-size:11px;color:var(--mut);margin-top:2px}

/* ============ 视图容器 ============ */
#views{flex:1;position:relative;min-height:0}
.view{position:absolute;inset:0;display:none;flex-direction:column;gap:14px}
.view.on{display:flex;animation:vfade .4s ease}
@keyframes vfade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ============ 通用面板(HUD 切角)============ */
.panel{background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line2);
  border-radius:4px;position:relative;display:flex;flex-direction:column;overflow:hidden;
  clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,14px 100%,0 calc(100% - 14px))}
.panel::after{content:"";position:absolute;left:0;top:0;width:22px;height:22px;
  border-top:2px solid var(--cyan);border-left:2px solid var(--cyan);opacity:.7}
.panel.grow{flex:1;min-height:0}
.p-hd{display:flex;align-items:center;gap:9px;padding:10px 14px;font-size:15px;font-weight:700;
  border-bottom:1px solid var(--line2);letter-spacing:.5px}
.bar{width:4px;height:15px;background:linear-gradient(var(--cyan),var(--blue));border-radius:2px;box-shadow:var(--glow)}
.hd-tag{margin-left:auto;font-size:11px;font-weight:600;color:var(--cyan);padding:2px 9px;
  border:1px solid var(--line);border-radius:10px;background:rgba(0,229,255,.06)}
.hd-tag.warn{color:var(--warn);border-color:rgba(255,196,0,.3);background:rgba(255,196,0,.06)}
.p-bd{padding:12px 14px;flex:1;min-height:0}
.p-bd.scroll,.scroll{overflow:auto}
.sect-hd{display:flex;align-items:center;gap:10px;font-size:17px;font-weight:800;letter-spacing:.5px;flex:0 0 auto}
.split{height:1px;background:var(--line2);margin:9px 0}
.mini{display:flex;justify-content:space-between;font-size:13px;padding:4px 0;color:var(--mut)}
.mini b{color:var(--ink);font-variant-numeric:tabular-nums}
.lg-num{font-size:34px;font-weight:800;color:var(--cyan);text-shadow:var(--glow);font-variant-numeric:tabular-nums;line-height:1}
.lg-num small{font-size:15px;color:var(--mut);margin-left:3px}
.chart{width:100%}

/* ============ KPI 行 ============ */
.kpi-row{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;flex:0 0 auto}
.kpi{background:linear-gradient(150deg,rgba(0,229,255,.10),var(--panel));border:1px solid var(--line2);
  border-radius:4px;padding:12px 18px;position:relative;overflow:hidden;
  clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px))}
.kpi .k-lab{font-size:14px;color:var(--mut);display:flex;align-items:center;gap:6px}
.kpi .k-ic{width:6px;height:6px;border-radius:50%}
.kpi .k-val{font-size:40px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.05;margin-top:6px;text-shadow:0 0 14px currentColor}
.kpi .k-val small{font-size:15px;font-weight:600;color:var(--mut);margin-left:4px;text-shadow:none}
.kpi::before{content:"";position:absolute;right:-20px;bottom:-20px;width:80px;height:80px;border-radius:50%;
  background:radial-gradient(circle,currentColor,transparent 70%);opacity:.08}

/* ============ 运营总览布局 ============ */
.home-body{flex:1;display:grid;grid-template-columns:340px 1fr 360px;gap:14px;min-height:0}
.rail{display:flex;flex-direction:column;gap:14px;min-height:0}
.rail .panel{flex:1}
.ring{width:96px;height:96px;flex:0 0 auto}
/* 能耗条 */
.ebar{margin:9px 0}
.ebar .eb-top{display:flex;justify-content:space-between;font-size:13px;margin-bottom:5px}
.ebar .eb-track{height:8px;border-radius:4px;background:rgba(255,255,255,.06);overflow:hidden}
.ebar .eb-fill{height:100%;border-radius:4px;transition:width .6s}
/* 冷链 */
.cold{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px dashed var(--line2);font-size:13px}
.cold:last-child{border:0}
.cold .cv{font-weight:700;font-variant-numeric:tabular-nums}

/* 中央 C 位 */
.stagec{display:flex;flex-direction:column;min-height:0}
.stagec-hd{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:700;padding:0 2px 10px}
.c-toggle{margin-left:auto;display:flex;gap:0;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.cbtn{background:transparent;border:0;color:var(--mut);padding:6px 15px;font-size:13px;font-weight:600}
.cbtn.on{background:linear-gradient(180deg,rgba(0,229,255,.22),rgba(0,229,255,.05));color:#fff}
.twin-wrap{flex:1;position:relative;border:1px solid var(--line);border-radius:4px;overflow:hidden;min-height:0;
  background:radial-gradient(900px 500px at 50% 35%,rgba(0,140,255,.10),transparent 60%),rgba(2,10,22,.6)}
#twin3d{position:absolute;inset:0}
#twin3d canvas{display:block}
#plan2d{position:absolute;inset:0;width:100%;height:100%}
.twin-legend{position:absolute;left:14px;bottom:12px;display:flex;gap:14px;font-size:12px;color:var(--mut);
  background:rgba(2,10,22,.6);padding:7px 12px;border-radius:6px;border:1px solid var(--line2);backdrop-filter:blur(4px)}
.twin-legend span{display:inline-flex;align-items:center;gap:6px}
.twin-legend i{width:9px;height:9px;border-radius:50%;display:inline-block}
.twin-strip{position:absolute;right:14px;top:12px;display:flex;gap:10px}
.twin-strip .ts{background:rgba(2,10,22,.6);border:1px solid var(--line2);border-radius:6px;padding:6px 12px;backdrop-filter:blur(4px);text-align:center}
.twin-strip .ts .n{font-size:22px;font-weight:800;font-variant-numeric:tabular-nums}
.twin-strip .ts .l{font-size:11px;color:var(--mut)}

/* 告警列表 */
.alert{display:flex;gap:9px;padding:9px 10px;border-radius:4px;margin-bottom:8px;
  background:rgba(255,255,255,.03);border-left:3px solid var(--mut);animation:vfade .4s}
.alert.danger{border-left-color:var(--red);background:rgba(255,59,91,.07)}
.alert.warn{border-left-color:var(--warn);background:rgba(255,196,0,.06)}
.alert.info{border-left-color:var(--cyan)}
.alert .a-dot{width:8px;height:8px;border-radius:50%;margin-top:5px;flex:0 0 auto}
.alert.danger .a-dot{animation:pulse 1.1s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(255,59,91,.6)}70%{box-shadow:0 0 0 8px rgba(255,59,91,0)}100%{box-shadow:0 0 0 0 rgba(255,59,91,0)}}
.alert .a-main{flex:1;min-width:0}
.alert .a-t{font-size:13.5px;font-weight:700;display:flex;gap:8px;align-items:center}
.alert .a-mod{font-size:10px;font-weight:600;padding:1px 7px;border-radius:8px;background:rgba(255,255,255,.08);color:var(--mut)}
.alert .a-m{font-size:12px;color:var(--mut);line-height:1.5;margin-top:3px}
.alert .a-tm{font-size:10.5px;color:var(--mut2);margin-top:3px}
.mini-gauge{flex:1;height:112px}

/* 时间轴 */
.timeline{flex:0 0 auto;background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line2);
  border-radius:4px;padding:8px 14px}
.tl-hd{display:flex;align-items:center;gap:9px;font-size:14px;font-weight:700;margin-bottom:2px}

/* ============ 集中监控 ============ */
.mon-layout{flex:1;display:grid;grid-template-columns:1fr 420px;gap:14px;min-height:0}
.mon-left{display:flex;flex-direction:column;min-height:0}
.zone-legend{display:flex;gap:12px;margin-left:auto;font-size:12px}
.zone-legend span{display:inline-flex;align-items:center;gap:5px;color:var(--mut)}
.zone-legend i{width:9px;height:9px;border-radius:2px}
.matrix{flex:1;display:grid;grid-template-columns:repeat(6,1fr);grid-auto-rows:1fr;gap:12px;margin-top:12px;min-height:0}
.mc{background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line2);border-radius:6px;
  padding:10px 11px;cursor:pointer;transition:.15s;position:relative;overflow:hidden;display:flex;flex-direction:column}
.mc:hover{transform:translateY(-2px);border-color:var(--cyan);box-shadow:0 6px 20px rgba(0,0,0,.4)}
.mc.sel{border-color:var(--cyan);box-shadow:0 0 0 1px var(--cyan),0 0 18px rgba(0,229,255,.25)}
.mc .mc-zone{position:absolute;left:0;top:0;bottom:0;width:3px}
.mc .mc-top{display:flex;justify-content:space-between;align-items:center}
.mc .mc-no{font-size:16px;font-weight:800}
.mc .mc-bed{font-size:11px;color:var(--mut)}
.mc .mc-st{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:9px}
.mc .mc-pt{font-size:12px;color:var(--mut);margin:5px 0 3px}
.mc .mc-row{display:flex;justify-content:space-between;font-size:11.5px;color:var(--mut2)}
.mc .mc-row b{color:var(--ink);font-variant-numeric:tabular-nums}
.mc .mc-alarm-r{font-size:10.5px;color:var(--red);font-weight:600;margin:3px 0 2px}
.mc .mc-prog{height:3px;background:rgba(255,255,255,.08);border-radius:2px;margin-top:auto;overflow:hidden}
.mc .mc-prog i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--blue))}
.mc.alarm{border-color:rgba(255,59,91,.5);animation:mcpulse 1.6s infinite}
@keyframes mcpulse{50%{box-shadow:0 0 16px rgba(255,59,91,.35)}}
.mc.off{opacity:.5}
.mon-right{display:flex;flex-direction:column;gap:14px;min-height:0}
.mon-right .panel:first-child{flex:1}
.empty{color:var(--mut2);text-align:center;padding:40px 0;font-size:14px}
.dp-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.dp{background:rgba(255,255,255,.03);border:1px solid var(--line2);border-radius:5px;padding:9px 11px}
.dp .dl{font-size:11.5px;color:var(--mut)}
.dp .dv{font-size:19px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums}
.dp .du{font-size:11px;color:var(--mut);font-weight:600}
.ai-panel{flex:0 0 auto}
.idh{display:flex;align-items:center;gap:11px;padding:9px 4px;border-bottom:1px dashed var(--line2)}
.idh:last-child{border:0}
.idh .idh-ring{width:44px;height:44px;flex:0 0 auto}
.idh .idh-main{flex:1}
.idh .idh-t{font-size:13.5px;font-weight:700}
.idh .idh-m{font-size:11.5px;color:var(--mut);margin-top:2px}
.idh .idh-risk{font-size:20px;font-weight:800;font-variant-numeric:tabular-nums}

/* ============ 水处理 ============ */
.water-layout{flex:1;display:grid;grid-template-columns:1fr 380px;gap:14px;min-height:0}
.water-main{display:flex;flex-direction:column;gap:14px;min-height:0}
.water-main>.panel{flex:0 0 340px}
.water-cards{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;flex:1;min-height:0}
.water-cards .panel .p-bd{overflow:auto}
.water-side{display:flex;flex-direction:column;gap:14px;min-height:0}
.water-side .panel:first-child,.water-side .panel:nth-child(2){flex:0 0 auto}
.water-side .panel:last-child{flex:1}
.wq{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px dashed var(--line2);font-size:13px}
.wq:last-child{border:0}
.wq .wq-v{font-weight:700;font-variant-numeric:tabular-nums}
.wq .wq-lim{font-size:10.5px;color:var(--mut2)}
.consum{margin:7px 0}
.consum .cs-top{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:4px}
.consum .cs-track{height:6px;border-radius:3px;background:rgba(255,255,255,.06);overflow:hidden}
.consum .cs-fill{height:100%;border-radius:3px}
.task{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px dashed var(--line2);font-size:12.5px}
.task:last-child{border:0}
.task .tk-name{font-weight:600}.task .tk-sub{font-size:10.5px;color:var(--mut2)}
.task .tk-badge{font-size:10.5px;padding:2px 8px;border-radius:9px}
.dia-row{display:flex;justify-content:space-between;padding:6px 0;font-size:13px;border-bottom:1px dashed var(--line2)}
.dia-row:last-child{border:0}

/* ============ 质控 ============ */
.cnrds-pill{margin-left:auto;font-size:12px;padding:5px 13px;border-radius:20px;border:1px solid var(--green);
  color:var(--green);background:rgba(0,230,118,.08);cursor:pointer;font-weight:600}
.qc-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;flex:0 0 auto}
.qcc{background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line2);border-radius:6px;padding:12px}
.qcc .qc-name{font-size:12.5px;color:var(--mut);height:34px;line-height:1.4}
.qcc .qc-rate{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums;margin:2px 0}
.qcc .qc-track{height:5px;border-radius:3px;background:rgba(255,255,255,.07);overflow:hidden;margin:5px 0}
.qcc .qc-fill{height:100%;border-radius:3px}
.qcc .qc-meta{display:flex;justify-content:space-between;font-size:10.5px;color:var(--mut2)}
.qc-bottom{flex:1;display:grid;grid-template-columns:1fr 420px;gap:14px;min-height:0}
.qcp{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line2);font-size:13px}
.qcp:last-child{border:0}
.qcp .qp-tag{font-size:10.5px;padding:2px 8px;border-radius:9px;background:rgba(255,196,0,.14);color:var(--warn)}

/* ============ 环境 ============ */
.air-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:12px;flex:0 0 auto}
.agauge{background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line2);border-radius:6px;
  padding:14px 12px;text-align:center;position:relative}
.agauge .ag-v{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums}
.agauge .ag-u{font-size:12px;color:var(--mut);font-weight:600}
.agauge .ag-l{font-size:13px;color:var(--mut);margin-top:3px}
.agauge .ag-track{height:5px;border-radius:3px;background:rgba(255,255,255,.07);margin-top:10px;overflow:hidden}
.agauge .ag-fill{height:100%;border-radius:3px;transition:width .5s}
.agauge .ag-lim{font-size:10px;color:var(--mut2);margin-top:5px}
.env-grid{flex:0 0 300px;display:grid;grid-template-columns:repeat(4,1fr);gap:14px;min-height:0}
.env-trend-panel{flex:1;min-height:0}
.radar-vis{height:140px;position:relative;border-radius:6px;background:rgba(0,150,255,.05);border:1px solid var(--line2);overflow:hidden;margin-bottom:10px}
.radar-vis .rw{position:absolute;top:50%;left:50%;width:8px;height:8px;border-radius:50%;transform:translate(-50%,-50%)}
.radar-scan{position:absolute;inset:0;background:conic-gradient(from 0deg,rgba(0,229,255,.25),transparent 45%);animation:spin 3s linear infinite;transform-origin:center}
@keyframes spin{to{transform:rotate(360deg)}}
.zbar{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px dashed var(--line2)}
.zbar:last-child{border:0}
.zbar .zi{width:11px;height:11px;border-radius:3px}
.zbar .zt{flex:1;font-size:13px}
.zbar .zc{font-variant-numeric:tabular-nums;font-weight:700}

/* ============ 能耗 ============ */
.energy-top{flex:0 0 auto;display:grid;grid-template-columns:1fr 2fr;gap:14px;height:270px}
.power-big{font-size:52px;font-weight:800;color:var(--purple);text-shadow:0 0 18px rgba(167,139,250,.5);font-variant-numeric:tabular-nums}
.wm-row{flex:0 0 132px;display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.wm{background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line2);border-radius:6px;padding:14px 16px;display:flex;flex-direction:column;justify-content:center}
.wm .wm-v{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums}
.wm .wm-l{font-size:12.5px;color:var(--mut);margin-top:5px;line-height:1.4}
.energy-bottom{flex:1;display:grid;grid-template-columns:2fr 1fr;gap:14px;min-height:0}
.drain{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px dashed var(--line2);font-size:13.5px}
.drain:last-child{border:0}.drain b{font-variant-numeric:tabular-nums}
.drain .valve-btn{font-size:11px;padding:3px 10px;border-radius:12px;border:1px solid var(--line);background:rgba(0,229,255,.08);color:var(--cyan);cursor:pointer}

/* ============ 业务闭环 ============ */
.biz-grid{flex:1;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:14px;min-height:0}
.biz-grid .panel{min-height:0}
.biz-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line2)}
.biz-row:last-child{border:0}
.bz-bed{font-weight:800;font-size:13px;color:var(--cyan);width:44px;flex:0 0 auto;font-variant-numeric:tabular-nums}
.bz-main{flex:1;min-width:0}
.bz-t{font-size:13px;font-weight:600}
.bz-sub{font-size:11px;color:var(--mut2);margin-top:2px}
.bz-badge{font-size:10.5px;font-weight:700;padding:2px 9px;border-radius:9px;white-space:nowrap}
.biz-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.biz-tbl th{text-align:left;color:var(--mut);font-weight:600;padding:6px 8px;border-bottom:1px solid var(--line2);white-space:nowrap}
.biz-tbl td{padding:6px 8px;border-bottom:1px dashed var(--line2);font-variant-numeric:tabular-nums}
.biz-tbl tr:last-child td{border:0}
.biz-shift{margin:9px 0}
.biz-shift .bs-top{display:flex;justify-content:space-between;font-size:13px;margin-bottom:5px}
.biz-shift .bs-track{height:7px;border-radius:4px;background:rgba(255,255,255,.06);overflow:hidden}
.biz-shift .bs-track i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--blue))}

/* ============ 路线图 ============ */
.rm-legend{display:flex;gap:10px;flex-wrap:wrap;flex:0 0 auto}
.rm-legend span{font-size:12.5px;padding:5px 13px;border-radius:20px;border:1px solid var(--line2);display:inline-flex;gap:7px;align-items:center}
.rm-legend i{width:9px;height:9px;border-radius:50%}
.rm-cat{margin-bottom:16px}
.rm-cat h4{font-size:15px;font-weight:800;margin-bottom:10px;display:flex;gap:8px;align-items:center}
.rm-cat h4 .cnt{font-size:12px;color:var(--mut);font-weight:500}
.rm-items{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.rmi{background:linear-gradient(160deg,var(--panel2),var(--panel));border:1px solid var(--line2);border-radius:6px;padding:11px 13px;border-left:3px solid var(--mut)}
.rmi .ri-t{font-size:13px;font-weight:700;display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.rmi .ri-b{font-size:10px;padding:2px 7px;border-radius:8px;font-weight:700;white-space:nowrap}
.rmi .ri-m{font-size:11.5px;color:var(--mut);margin-top:6px;line-height:1.5}
.rmi .ri-d{font-size:11px;color:var(--mut2);margin-top:4px}

/* ============ 弹窗 ============ */
.modal{position:fixed;inset:0;background:rgba(2,8,16,.9);backdrop-filter:blur(9px);display:none;place-items:center;z-index:80}
.modal.on{display:grid;animation:vfade .3s}
.modal-box{width:720px;max-width:94vw;background:linear-gradient(160deg,#0a2036,#061726);border:1px solid var(--line);
  border-radius:8px;padding:24px;box-shadow:0 20px 60px rgba(0,0,0,.6);position:relative;
  clip-path:polygon(0 0,calc(100% - 18px) 0,100% 18px,100% 100%,18px 100%,0 calc(100% - 18px))}
.modal-box .x{position:absolute;right:18px;top:14px;font-size:20px;color:var(--mut);cursor:pointer}
.modal-box .x:hover{color:#fff}
.mo-hd{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}
.mo-hd h3{font-size:22px}
.mo-hd .sub{font-size:13px;color:var(--mut);margin-top:4px}
.mo-st{font-size:13px;font-weight:700;padding:6px 14px;border-radius:20px}
.mo-banner{display:flex;align-items:center;gap:10px;background:rgba(255,59,91,.12);border:1px solid rgba(255,59,91,.4);
  border-radius:6px;padding:10px 14px;margin-bottom:14px;font-size:13px;color:#ffd7de}
.mo-banner .mo-b-ic{font-size:18px;color:var(--red)}
.param-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.param{background:rgba(255,255,255,.03);border:1px solid var(--line2);border-radius:5px;padding:10px 12px}
.param .pl{font-size:11.5px;color:var(--mut)}
.param .pv{font-size:20px;font-weight:800;margin-top:3px;font-variant-numeric:tabular-nums}
.param .pu{font-size:11px;color:var(--mut);font-weight:600}
.mo-chart{margin-top:16px}
.mo-chart .p-hd{padding:0 0 8px;border:0;font-size:14px}
