/* ============================================================
   QAHE 智慧能源全域运营平台 · 样式（深色科技风）
   ============================================================ */
:root{
  --bg:#070b14; --bg2:#0a1120; --panel:#0e1728; --panel2:#111d33;
  --line:rgba(0,212,255,.14); --line2:rgba(124,92,255,.22);
  --cyan:#00d4ff; --purple:#7c5cff; --amber:#ffb454; --green:#4ade80;
  --red:#ff5d6c; --text:#dce8f5; --dim:#7f92ab; --dim2:#5b6e88;
  --mono:'Cascadia Code','JetBrains Mono',Consolas,monospace;
  --radius:14px;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{
  font-family:'Segoe UI','PingFang SC','Microsoft YaHei',system-ui,sans-serif;
  background:
    radial-gradient(1200px 600px at 85% -10%, rgba(124,92,255,.14), transparent 60%),
    radial-gradient(900px 500px at -10% 110%, rgba(0,212,255,.10), transparent 55%),
    var(--bg);
  color:var(--text); overflow:hidden;
}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:rgba(0,212,255,.25);border-radius:4px}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 布局 ---------- */
.app{display:flex;height:100vh}
.side{
  width:218px; flex:0 0 218px; background:linear-gradient(180deg,#0c1424,#0a101d);
  border-right:1px solid var(--line); display:flex; flex-direction:column; z-index:5;
}
.logo{padding:18px 16px 14px; border-bottom:1px solid var(--line)}
.logo .t1{font-size:15px;font-weight:700;letter-spacing:.5px;
  background:linear-gradient(90deg,#00d4ff,#7c5cff); -webkit-background-clip:text; background-clip:text; color:transparent}
.logo .t2{font-size:11px;color:var(--dim);margin-top:3px;letter-spacing:1px}
.nav{flex:1;overflow-y:auto;padding:10px 8px}
.nav .sec{font-size:10px;color:var(--dim2);letter-spacing:2px;padding:12px 10px 6px}
.nav a{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;color:var(--dim);
  font-size:13px;text-decoration:none;cursor:pointer;transition:.18s;margin-bottom:2px;border:1px solid transparent}
.nav a:hover{color:var(--text);background:rgba(0,212,255,.06)}
.nav a.on{color:#fff;background:linear-gradient(90deg,rgba(0,212,255,.16),rgba(124,92,255,.12));
  border-color:var(--line)}
.nav a .ic{width:16px;height:16px;flex:0 0 16px;opacity:.9}
.nav a .bd{margin-left:auto;font-size:10px;background:rgba(0,212,255,.15);color:var(--cyan);
  border-radius:8px;padding:1px 7px}
.side-foot{padding:12px 16px;border-top:1px solid var(--line);font-size:10px;color:var(--dim2);line-height:1.7}

.main{flex:1;display:flex;flex-direction:column;min-width:0}
.top{height:54px;flex:0 0 54px;display:flex;align-items:center;gap:14px;padding:0 18px;
  border-bottom:1px solid var(--line);background:rgba(10,16,29,.6);backdrop-filter:blur(6px)}
.crumb{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--dim)}
.crumb b{color:var(--cyan);font-weight:600;cursor:pointer}
.crumb .sep{color:var(--dim2)}
.crumb .cur{color:var(--text)}
.top .sp{flex:1}
.role-pill{font-size:11px;color:var(--cyan);border:1px solid var(--line);padding:5px 12px;border-radius:20px;
  background:rgba(0,212,255,.06);cursor:pointer}
.bell{position:relative;font-size:16px;cursor:pointer;color:var(--dim)}
.bell .dot{position:absolute;top:-2px;right:-4px;width:8px;height:8px;border-radius:50%;
  background:var(--red);box-shadow:0 0 8px var(--red)}
.content{flex:1;overflow-y:auto;padding:18px 20px 40px}
.page{display:none;animation:fade .35s ease}
.page.on{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- 通用组件 ---------- */
.h-title{display:flex;align-items:baseline;gap:10px;margin-bottom:14px}
.h-title h2{font-size:19px;font-weight:700}
.h-title .sub{font-size:12px;color:var(--dim)}
.grid{display:grid;gap:14px}
.card{background:linear-gradient(160deg,var(--panel),var(--panel2));border:1px solid var(--line);
  border-radius:var(--radius);padding:16px}
.card h3{font-size:13px;color:var(--text);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.card h3 .tag{font-size:10px;color:var(--dim2);font-weight:400}
.kpis{display:grid;grid-template-columns:repeat(8,1fr);gap:12px;margin-bottom:14px}
.kpi{background:linear-gradient(160deg,var(--panel),var(--panel2));border:1px solid var(--line);
  border-radius:12px;padding:12px 14px;position:relative;overflow:hidden}
.kpi::after{content:'';position:absolute;right:-18px;top:-18px;width:60px;height:60px;border-radius:50%;
  background:radial-gradient(circle,rgba(0,212,255,.18),transparent 70%)}
.kpi .k{font-size:11px;color:var(--dim)}
.kpi .v{font-size:21px;font-weight:800;font-family:var(--mono);margin:6px 0 2px;
  background:linear-gradient(90deg,#eaf6ff,#9fe8ff);-webkit-background-clip:text;background-clip:text;color:transparent}
.kpi .v small{font-size:11px;font-weight:500;color:var(--dim);margin-left:2px}
.kpi .u{font-size:11px;color:var(--dim2)}
.btn{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:6px 14px;border-radius:8px;
  border:1px solid var(--line);color:var(--cyan);background:rgba(0,212,255,.07);cursor:pointer;transition:.15s}
.btn:hover{background:rgba(0,212,255,.16)}
.btn.primary{background:linear-gradient(90deg,#00d4ff,#7c5cff);color:#04121c;border:none;font-weight:600}
.pill{display:inline-block;font-size:10px;padding:2px 9px;border-radius:20px;border:1px solid}
.pill.ok{color:var(--green);border-color:rgba(74,222,128,.4);background:rgba(74,222,128,.08)}
.pill.warn{color:var(--amber);border-color:rgba(255,180,84,.4);background:rgba(255,180,84,.08)}
.pill.bad{color:var(--red);border-color:rgba(255,93,108,.4);background:rgba(255,93,108,.08)}
.pill.cy{color:var(--cyan);border-color:rgba(0,212,255,.4);background:rgba(0,212,255,.08)}
.pill.pu{color:var(--purple);border-color:rgba(124,92,255,.4);background:rgba(124,92,255,.1)}
table{width:100%;border-collapse:collapse;font-size:12px}
th{color:var(--dim);font-weight:600;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);
  font-size:11px;letter-spacing:.5px}
td{padding:9px 10px;border-bottom:1px solid rgba(0,212,255,.07);color:var(--text)}
tr:hover td{background:rgba(0,212,255,.03)}
.mono{font-family:var(--mono);font-size:12px}
.up{color:var(--green)} .dn{color:var(--red)}
.muted{color:var(--dim)} .mini{font-size:11px;color:var(--dim2)}

/* ---------- 驾驶舱地图 ---------- */
.map-wrap{position:relative}
.map-svg{width:100%;height:auto;display:block}
.map-grid{position:absolute;inset:0;background-image:
  linear-gradient(rgba(0,212,255,.05) 1px,transparent 1px),
  linear-gradient(90deg,rgba(0,212,255,.05) 1px,transparent 1px);
  background-size:26px 26px;pointer-events:none;border-radius:var(--radius)}
.city{animation:pulse 2.4s infinite}
.city .core{fill:var(--cyan)}
.city text{fill:var(--dim);font-size:10px}
.city.hot .core{fill:#ffb454}
.city.hot text{fill:#ffd9a8}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.55}}
.link{stroke:rgba(0,212,255,.18);stroke-width:1;stroke-dasharray:3 4;fill:none}
.zoom-bar{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.zoom-bar .z{font-size:12px;padding:5px 14px;border-radius:20px;border:1px solid var(--line);color:var(--dim);cursor:pointer}
.zoom-bar .z.on{background:linear-gradient(90deg,rgba(0,212,255,.2),rgba(124,92,255,.16));color:#fff;border-color:var(--cyan)}
.zoom-bar .z:hover{color:var(--text)}
.sh-map{position:relative;height:330px;border-radius:12px;overflow:hidden;border:1px solid var(--line);
  background:radial-gradient(500px 300px at 50% 40%,rgba(0,212,255,.08),transparent 70%)}
.sh-block{position:absolute;border:1px solid rgba(0,212,255,.22);border-radius:8px;padding:8px 10px;
  background:rgba(14,23,40,.85);cursor:pointer;transition:.2s;min-width:92px}
.sh-block:hover{transform:translateY(-2px);border-color:var(--cyan);box-shadow:0 6px 18px rgba(0,212,255,.15)}
.sh-block .n{font-size:13px;font-weight:700}
.sh-block .s{font-size:10px;color:var(--dim);margin-top:3px}
.sh-block.sel{border-color:var(--purple);background:rgba(124,92,255,.14)}
.sh-block.sel .n{color:#cfc3ff}
.sh-river{position:absolute;left:44%;top:0;bottom:0;width:6px;background:linear-gradient(180deg,rgba(0,212,255,.05),rgba(0,212,255,.28),rgba(0,212,255,.05))}
.sh-river::after{content:'黄浦江';position:absolute;top:8px;left:10px;font-size:10px;color:var(--dim2);writing-mode:vertical-lr}

/* ---------- 项目/楼宇卡片 ---------- */
.bld-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.bld{background:linear-gradient(160deg,var(--panel),var(--panel2));border:1px solid var(--line);
  border-radius:var(--radius);padding:15px;cursor:pointer;transition:.2s;position:relative;overflow:hidden}
.bld:hover{transform:translateY(-3px);border-color:var(--cyan);box-shadow:0 10px 26px rgba(0,212,255,.12)}
.bld::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,var(--cyan),var(--purple));opacity:0;transition:.2s}
.bld:hover::before{opacity:1}
.bld .bn{font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px}
.bld .bu{font-size:11px;color:var(--dim);margin:4px 0 10px}
.bld .row{display:flex;justify-content:space-between;font-size:12px;padding:5px 0;border-top:1px dashed rgba(0,212,255,.09)}
.bld .row .k{color:var(--dim)}
.bld .row .v{font-weight:600}
.bld .save{font-size:22px;font-weight:800;font-family:var(--mono);color:#7ef0c8}
.bld .rate{color:var(--amber)}

/* ---------- BIM 楼宇 ---------- */
.bim-stage{display:flex;gap:14px}
.bim-left{flex:1.15;display:flex;align-items:flex-end;justify-content:center;min-height:430px;
  background:radial-gradient(600px 300px at 50% 100%,rgba(0,212,255,.10),transparent 65%),var(--bg2);
  border:1px solid var(--line);border-radius:var(--radius);padding:26px 16px 0;position:relative}
.bim-ground{position:absolute;left:8%;right:8%;bottom:0;height:1px;
  background:linear-gradient(90deg,transparent,var(--cyan),transparent);box-shadow:0 0 20px rgba(0,212,255,.5)}
.bim-build{display:flex;flex-direction:column-reverse;gap:3px;width:190px}
.bim-floor{height:26px;border:1px solid rgba(0,212,255,.25);border-radius:4px;background:linear-gradient(180deg,#12233d,#0d1a30);
  cursor:pointer;transition:.2s;position:relative;font-size:9px;color:var(--dim2);display:flex;align-items:center;padding-left:6px}
.bim-floor:hover{border-color:var(--cyan);background:linear-gradient(180deg,rgba(0,212,255,.22),#0d1a30)}
.bim-floor.on{border-color:var(--cyan);background:linear-gradient(180deg,rgba(0,212,255,.35),rgba(124,92,255,.25));
  box-shadow:0 0 14px rgba(0,212,255,.35);color:#eaf6ff}
.bim-floor.hot{animation:glow 1.6s infinite}
@keyframes glow{0%,100%{box-shadow:0 0 4px rgba(255,180,84,.4)}50%{box-shadow:0 0 14px rgba(255,180,84,.9)}}
.bim-q{position:absolute;width:10px;height:10px;border-radius:50%;background:var(--amber);
  box-shadow:0 0 10px var(--amber);right:-14px;top:6px;animation:glow 1.6s infinite}
.bim-roof{height:12px;border-radius:4px 4px 0 0;background:linear-gradient(180deg,rgba(124,92,255,.5),rgba(124,92,255,.15));
  border:1px solid rgba(124,92,255,.5);margin-bottom:3px;position:relative}
.bim-roof::after{content:'屋顶设备层';position:absolute;right:-56px;top:-1px;font-size:9px;color:var(--dim2);width:50px}
.bim-side{flex:1;display:flex;flex-direction:column;gap:14px}
.load-bar{height:8px;border-radius:4px;background:rgba(255,255,255,.06);overflow:hidden;margin-top:5px}
.load-bar i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--cyan),var(--purple))}
.load-row{display:flex;justify-content:space-between;font-size:12px;padding:7px 0;border-bottom:1px dashed rgba(0,212,255,.09)}
.load-row .k{color:var(--dim)} .load-row .v{font-weight:600;font-family:var(--mono)}

/* ---------- 结算图表 ---------- */
.chart-box{position:relative}
.legend{display:flex;gap:16px;font-size:11px;color:var(--dim);margin-top:8px;flex-wrap:wrap}
.legend i{display:inline-block;width:12px;height:3px;border-radius:2px;margin-right:6px;vertical-align:middle}
.settle-card{background:linear-gradient(150deg,rgba(0,212,255,.10),rgba(124,92,255,.08));
  border:1px solid var(--line);border-radius:12px;padding:16px}
.settle-card .row{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px dashed rgba(0,212,255,.1);font-size:13px}
.settle-card .row:last-child{border:none}
.settle-card .row .k{color:var(--dim)}
.settle-card .row .v{font-weight:700;font-family:var(--mono)}
.settle-card .total{font-size:15px;color:#7ef0c8}
.settle-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.settle-head .ver{font-size:11px;color:var(--green)}

/* ---------- 分润树 ---------- */
.profit-svg{width:100%;height:auto}
.profit-node{fill:#12233d;stroke:rgba(0,212,255,.35);stroke-width:1}
.profit-node text{fill:var(--text);font-size:12px}
.profit-node .t2{fill:var(--dim);font-size:9px}

/* ---------- 工单 ---------- */
.kanban{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.kb-col{background:rgba(10,16,29,.5);border:1px solid var(--line);border-radius:12px;padding:10px;min-height:180px}
.kb-col .hd{font-size:12px;font-weight:700;color:var(--dim);margin-bottom:10px;display:flex;align-items:center;gap:6px}
.kb-col .hd .n{background:rgba(0,212,255,.15);color:var(--cyan);border-radius:8px;padding:1px 8px;font-size:10px}
.wo{background:linear-gradient(160deg,var(--panel),var(--panel2));border:1px solid var(--line);
  border-radius:10px;padding:10px 12px;margin-bottom:8px;cursor:pointer;transition:.15s}
.wo:hover{border-color:var(--cyan)}
.wo .t{font-size:12px;font-weight:600;line-height:1.5}
.wo .m{font-size:10px;color:var(--dim);margin-top:6px;display:flex;justify-content:space-between}
.flow8{display:flex;align-items:center;gap:4px;margin-top:14px;flex-wrap:wrap}
.flow8 .st{font-size:10px;padding:4px 10px;border-radius:16px;border:1px solid var(--line);color:var(--dim2)}
.flow8 .st.on{background:linear-gradient(90deg,rgba(0,212,255,.25),rgba(124,92,255,.2));color:#fff;border-color:var(--cyan)}
.flow8 .ar{color:var(--dim2);font-size:10px}

/* ---------- 维保甘特 ---------- */
.gantt{display:grid;grid-template-columns:80px repeat(4,1fr);gap:6px;font-size:11px}
.gantt .gh{padding:8px;text-align:center;color:var(--dim);border-bottom:1px solid var(--line)}
.gantt .gb{padding:6px 8px;color:var(--dim);display:flex;align-items:center}
.g-cell{min-height:34px;border-radius:6px;border:1px dashed rgba(0,212,255,.12);padding:5px;color:var(--dim2);
  font-size:10px;display:flex;align-items:center;justify-content:center;text-align:center}
.g-cell.f{background:rgba(0,212,255,.14);border-color:rgba(0,212,255,.4);color:#bdf0ff}
.g-cell.p{background:rgba(124,92,255,.14);border-color:rgba(124,92,255,.4);color:#cfc3ff}
.g-cell.w{background:rgba(255,180,84,.12);border-color:rgba(255,180,84,.4);color:#ffd9a8}

/* ---------- 生命周期 ---------- */
.lc{position:relative;display:flex;gap:0;overflow-x:auto;padding:20px 6px 6px}
.lc::before{content:'';position:absolute;left:4%;right:4%;top:34px;height:2px;
  background:linear-gradient(90deg,var(--cyan),var(--purple),var(--amber));opacity:.5}
.lc-step{flex:1;min-width:148px;position:relative;text-align:center;padding:0 8px}
.lc-dot{width:18px;height:18px;border-radius:50%;margin:0 auto 10px;position:relative;z-index:1;
  background:var(--bg);border:2px solid var(--cyan);box-shadow:0 0 12px rgba(0,212,255,.5)}
.lc-step:nth-child(even) .lc-dot{border-color:var(--purple);box-shadow:0 0 12px rgba(124,92,255,.5)}
.lc-step:nth-child(3n) .lc-dot{border-color:var(--amber);box-shadow:0 0 12px rgba(255,180,84,.5)}
.lc-step .p{font-size:13px;font-weight:700;margin-bottom:4px}
.lc-step .d{font-size:10px;color:var(--cyan);font-family:var(--mono);margin-bottom:6px}
.lc-step .c{font-size:11px;color:var(--dim);line-height:1.6}
.lc-step .r{font-size:10px;color:var(--dim2);margin-top:6px;border-top:1px dashed rgba(0,212,255,.12);padding-top:6px}
.lc-loop{margin-top:16px;display:flex;align-items:center;gap:10px;justify-content:center;font-size:12px;color:var(--dim)}
.lc-loop b{color:var(--cyan)}

/* ---------- 微件 ---------- */
.feed{display:flex;flex-direction:column;gap:10px}
.feed .it{display:flex;gap:10px;font-size:12px;padding:9px 0;border-bottom:1px dashed rgba(0,212,255,.09)}
.feed .it:last-child{border:none}
.feed .tm{font-family:var(--mono);color:var(--dim2);flex:0 0 44px;font-size:11px}
.feed .tx{color:var(--text);line-height:1.6}
.ring-note{display:flex;gap:18px;flex-wrap:wrap;margin-top:10px}
.ring-note .n{font-size:11px;color:var(--dim)}
.ring-note .n b{color:var(--text);font-size:13px}
.certs{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.certs .c{font-size:10px;border:1px solid var(--line);border-radius:16px;padding:3px 10px;color:var(--dim)}
.hint{position:fixed;right:16px;bottom:16px;font-size:10px;color:var(--dim2);background:rgba(10,16,29,.8);
  border:1px solid var(--line);padding:6px 12px;border-radius:20px;z-index:9}

/* ============================================================
   新增模块：阶梯分成 / 工单分析 / 调度库存 / ESG / AI 研判
   ============================================================ */
/* AI 导航高亮 */
.nav a.ai-nav{color:#b7a5ff}
.nav a.ai-nav.on{color:#fff;background:linear-gradient(90deg,rgba(124,92,255,.22),rgba(0,212,255,.12));border-color:var(--line2)}
.pill.ai{color:#b7a5ff;border-color:rgba(124,92,255,.45);background:rgba(124,92,255,.12)}

/* AI 能力矩阵 */
.cap-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.cap-card{background:rgba(10,17,32,.6);border:1px solid var(--line);border-radius:12px;padding:12px 14px;transition:.18s}
.cap-card:hover{border-color:var(--line2);transform:translateY(-2px)}
.cap-hd{display:flex;align-items:center;gap:8px;font-size:12.5px}
.cap-hd .ci{font-size:15px}
.cap-hd b{flex:1;color:var(--text)}
.cap-d{font-size:11px;color:var(--dim);margin-top:8px;line-height:1.7}

/* AI 异常检测结果 */
.an-item{border:1px solid rgba(255,93,108,.18);background:rgba(255,93,108,.04);border-radius:10px;
  padding:10px 12px;margin-bottom:10px;animation:fade .4s ease}
.an-item .conf{color:var(--amber);font-size:11px;margin-left:8px}
.an-item b{margin-left:6px}

/* AI 对话流 */
.chat-ln{display:flex;gap:10px;margin-bottom:12px;animation:fade .4s ease}
.chat-ln .who{flex:0 0 34px;font-size:10px;text-align:center;border-radius:6px;padding:3px 0;height:fit-content}
.chat-ln.sys .who{background:rgba(255,93,108,.12);color:var(--red);border:1px solid rgba(255,93,108,.35)}
.chat-ln.ai .who{background:rgba(124,92,255,.14);color:#b7a5ff;border:1px solid rgba(124,92,255,.4)}
.chat-ln .tx{font-size:12px;line-height:1.8;color:var(--text);
  background:rgba(10,17,32,.6);border:1px solid var(--line);border-radius:0 10px 10px 10px;padding:9px 12px;flex:1}
.chat-ln.sys .tx{border-color:rgba(255,93,108,.25)}

/* 潜力评分 / 健康度 */
.pot-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;padding-top:6px}
.pot-row .score{font-size:16px;font-weight:800;color:#b7a5ff}

/* ESG 客户门户 */
.portal-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.portal-item{background:rgba(10,17,32,.6);border:1px solid var(--line);border-radius:10px;padding:11px 13px}
.portal-item .pt{font-size:12.5px;font-weight:700;color:var(--text)}
.portal-item .pd{font-size:11px;color:var(--dim);margin-top:5px;line-height:1.6}

/* 派单日志 */
.disp-log{display:flex;flex-direction:column;gap:10px}
.disp-log .it{display:flex;gap:10px;font-size:12px;padding:9px 0;border-bottom:1px dashed rgba(0,212,255,.09)}
.disp-log .it:last-child{border:none}
.disp-log .tm{font-family:var(--mono);color:var(--dim2);flex:0 0 40px;font-size:11px}
.disp-log .tx{color:var(--text);line-height:1.7}

/* ============================================================
   第四次迭代：GIS 全球层 / 报表中心 / 后台管理
   ============================================================ */
/* 报表中心 */
.rpt-cats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
.rpt-cat{background:rgba(10,17,32,.6);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.rpt-cat .rc-hd{display:flex;align-items:center;gap:6px;font-size:12.5px;margin-bottom:8px}
.rpt-cat .rc-hd .ci{font-size:14px}
.rpt-cat .rc-hd b{flex:1;color:var(--text)}
.rpt-cat .rc-hd .mini{font-size:10px;color:var(--dim2)}
.rpt-cat .load-row{padding:3px 0}

/* 后台管理 */
.adm-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.adm-tabs .at{font-size:12.5px;padding:7px 16px;border-radius:20px;border:1px solid var(--line);color:var(--dim);cursor:pointer;background:rgba(10,17,32,.4)}
.adm-tabs .at:hover{color:var(--text)}
.adm-tabs .at.on{background:linear-gradient(90deg,rgba(124,92,255,.24),rgba(0,212,255,.14));color:#fff;border-color:rgba(124,92,255,.55);font-weight:600}
.adm-pane{display:none}
.adm-pane.on{display:block;animation:fade .3s ease}

/* ============================================================
   第五次迭代：借鉴 WindTwin（健康寿命 / 两票许可 / 演练仿真 / AR）
   ============================================================ */
/* 健康热力点 */
.hl-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;box-shadow:0 0 8px currentColor}
#page-health table tr:hover td{background:rgba(124,92,255,.05)}

/* AR 现场助手 */
.ar-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.ar-card{background:rgba(10,17,32,.6);border:1px solid var(--line);border-radius:12px;padding:12px 14px;transition:.18s}
.ar-card:hover{border-color:rgba(0,212,255,.45);transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,212,255,.06)}
.ar-hd{display:flex;align-items:center;gap:8px;font-size:13px}
.ar-hd b{flex:1;color:var(--text)}
.ar-scan{font-size:14px;color:#00d4ff;animation:pulse 2.4s infinite}
.ar-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.ar-tags span{font-size:10.5px;color:var(--dim);background:rgba(0,212,255,.05);border:1px solid rgba(0,212,255,.14);border-radius:6px;padding:3px 7px}
.ar-tags b{color:var(--text);font-weight:700}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}

/* 演练场景 */
.drill-scene{display:block;background:rgba(10,17,32,.6);border:1px solid var(--line);border-radius:10px;
  padding:9px 12px;margin-bottom:9px;cursor:pointer;transition:.16s}
.drill-scene:hover{border-color:var(--line2)}
.drill-scene.sel{border-color:rgba(124,92,255,.6);background:rgba(124,92,255,.08);box-shadow:0 0 14px rgba(124,92,255,.12)}
.drill-hd{display:flex;align-items:center;gap:8px;font-size:12.5px}
.drill-hd b{flex:1;color:var(--text)}
.drill-steps .chat-ln .tx{font-size:11.5px}

/* ============================================================
   第六次迭代：多端适配（大屏指挥舱 / 桌面 / iPad / 手机）
   ============================================================ */
/* 汉堡按钮（默认隐藏） */
.menu-btn{display:none;font-size:18px;color:var(--cyan);cursor:pointer;padding:4px 8px;border:1px solid var(--line);border-radius:8px;background:rgba(0,212,255,.05)}
.cmd-btn{font-size:11px;color:#b7a5ff;border:1px solid rgba(124,92,255,.45);padding:5px 12px;border-radius:20px;background:rgba(124,92,255,.10);cursor:pointer;white-space:nowrap}
.cmd-btn:hover{background:rgba(124,92,255,.2)}
.side-mask{display:none}

/* ---------- 指挥舱模式（大屏投影） ---------- */
body.cmd-mode .side{display:none}
body.cmd-mode .top{height:64px;padding:0 28px;background:rgba(4,10,20,.85)}
body.cmd-mode .content{padding:26px 30px 60px}
body.cmd-mode .kpi .v{font-size:30px}
body.cmd-mode .kpi .k{font-size:13px}
body.cmd-mode .card h3{font-size:14px}
body.cmd-mode .nav{display:none}
body.cmd-mode .h-title h2{font-size:24px}
body.cmd-mode .grid{gap:18px}
body.cmd-mode .role-pill,body.cmd-mode .bell{opacity:.75}

/* ---------- ≥1920 大屏增强 ---------- */
@media (min-width:1920px){
  .content{padding:22px 28px 52px}
  .kpi .v{font-size:26px}
  .grid{gap:18px}
  .card{padding:18px 20px}
  .h-title h2{font-size:22px}
}

/* ---------- 1280 以下小桌面：KPI 折行 ---------- */
@media (max-width:1279px){
  .kpis{grid-template-columns:repeat(4,1fr)}
}

/* ---------- ≤1024 iPad：侧边栏折叠为图标条 ---------- */
@media (max-width:1023px){
  .side{width:64px;flex-basis:64px}
  .side .logo{padding:16px 8px 12px}
  .side .logo .t1{font-size:0}
  .side .logo .t1::first-letter{font-size:15px}
  .side .logo .t2{font-size:0}
  .nav{padding:10px 4px}
  .nav .sec{font-size:0;padding:10px 0 4px}
  .nav .sec::first-letter{font-size:10px}
  .nav a{justify-content:center;padding:10px 0;width:48px;margin:0 auto 2px;overflow:hidden;font-size:0}
  .nav a .ic{flex:0 0 16px}
  .nav a .bd{display:none}
  .side-foot{font-size:0}
  .side-foot::first-letter{font-size:9px}
  .content{padding:14px 14px 40px}
  .h-title .sub{display:none}
  .kpis{grid-template-columns:repeat(2,1fr)}
}

/* ---------- ≤767 手机：汉堡抽屉 + 单列 ---------- */
@media (max-width:767px){
  .menu-btn{display:block}
  .cmd-btn{display:none}              /* 手机不提供指挥舱，桌面/大屏使用 */
  .side{position:fixed;left:0;top:0;bottom:0;width:236px;transform:translateX(-100%);
    transition:transform .25s ease;z-index:60}
  body.side-open .side{transform:translateX(0)}
  body.side-open .side-mask{display:block;position:fixed;inset:0;background:rgba(2,6,14,.6);z-index:55}
  body.side-open .side .logo .t1{font-size:15px}
  body.side-open .side .logo .t2{font-size:11px}
  body.side-open .side .nav .sec{font-size:10px}
  body.side-open .side .nav a{width:auto;margin:0 0 2px;padding:9px 12px;justify-content:flex-start;font-size:13px}
  body.side-open .side .nav a .bd{display:inline}
  body.side-open .side-foot{font-size:10px}
  .top{height:50px;padding:0 12px;gap:8px}
  .crumb{font-size:11px}
  .crumb .sep,.crumb b[data-go="project"]{display:none}
  .role-pill{display:none}
  .content{padding:12px 10px 70px}
  .h-title{flex-wrap:wrap}
  .h-title h2{font-size:16px}
  .kpis{grid-template-columns:repeat(2,1fr);gap:8px}
  .kpi .v{font-size:17px}
  .grid{grid-template-columns:1fr !important;gap:10px}
  .card{padding:12px}
  .card h3{font-size:12px;flex-wrap:wrap}
  .card h3 .tag{width:100%}
  .tbl{display:block;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}
  .load-bar i{min-width:4px}
  .cap-grid{grid-template-columns:1fr 1fr}
  .portal-grid{grid-template-columns:1fr}
  .ar-grid{grid-template-columns:1fr 1fr}
  .rpt-cats{grid-template-columns:1fr 1fr}
  .map-wrap .map-svg{min-height:260px}
  .patrol-log .it .tm{flex-basis:34px}
}
@media (max-width:420px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .cap-grid{grid-template-columns:1fr}
  .ar-grid{grid-template-columns:1fr}
  .rpt-cats{grid-template-columns:1fr}
}
