:root{
  --bg:#060d1c; --bg2:#0a1730; --panel:rgba(13,30,56,.72); --panel2:rgba(18,38,68,.55);
  --line:rgba(64,158,255,.16); --line2:rgba(64,158,255,.34);
  --acc:#37c6ff; --acc2:#5ad1c2; --warn:#ffc53d; --bad:#ff5f6e; --ok:#49d17a; --purple:#b99aff;
  --txt:#dbe9f7; --sub:#8ba5c4; --title:#eef7ff;
  --glow:0 0 18px rgba(55,198,255,.22);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{font-family:"Microsoft YaHei","PingFang SC","Segoe UI",sans-serif;background:var(--bg);color:var(--txt);font-size:14px;overflow:hidden}
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:999;background:radial-gradient(ellipse at 50% 40%,transparent 55%,rgba(2,8,20,.5) 100%)}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:rgba(70,140,220,.35);border-radius:4px}
::-webkit-scrollbar-track{background:transparent}
a{color:var(--acc);text-decoration:none}

/* ===== 壳 ===== */
#root{height:100%}
.shell{display:grid;grid-template-columns:216px 1fr;grid-template-rows:56px 1fr;height:100vh}
.hdr{grid-column:1/3;display:flex;align-items:center;gap:14px;padding:0 18px;background:linear-gradient(90deg,rgba(10,26,52,.95),rgba(8,20,40,.8));border-bottom:1px solid var(--line);z-index:30}
.hdr .logo{display:flex;align-items:center;gap:10px;font-weight:700;font-size:17px;color:var(--title);letter-spacing:1px;white-space:nowrap}
.hdr .logo svg{filter:drop-shadow(0 0 6px rgba(55,198,255,.8))}
.hdr .sub{font-size:12px;color:var(--sub);padding-left:10px;border-left:1px solid var(--line2);white-space:nowrap}
.hdr .flex1{flex:1}
.hdr .chip{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--sub);background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:4px 10px;white-space:nowrap}
.hdr .chip b{color:var(--txt);font-weight:600}
.emgBtn{cursor:pointer;border:1px solid rgba(255,95,110,.6)!important;color:#ff9aa5!important}
.emgBtn:hover{background:rgba(255,95,110,.14)!important}
.clock{font-family:Consolas,monospace;font-size:13px;color:var(--acc)}
.nav{background:linear-gradient(180deg,rgba(9,20,40,.96),rgba(6,14,28,.96));border-right:1px solid var(--line);padding:10px 0;overflow-y:auto}
.nav .grp{font-size:11px;color:#5f7ea6;padding:12px 18px 6px;letter-spacing:2px}
.nav .item{display:flex;align-items:center;gap:10px;padding:9px 18px;cursor:pointer;color:#a9c2e0;font-size:13.5px;border-left:3px solid transparent;transition:.15s}
.nav .item svg{opacity:.8;flex:none}
.nav .item:hover{background:rgba(55,198,255,.06);color:var(--title)}
.nav .item.on{background:linear-gradient(90deg,rgba(55,198,255,.16),transparent);border-left-color:var(--acc);color:#fff}
.main{position:relative;overflow:hidden;display:flex;flex-direction:column}
.view{flex:1;overflow:auto;padding:16px;animation:fadein .25s}
@keyframes fadein{from{opacity:0;transform:translateY(6px)}to{opacity:1}}
.crumb{display:flex;align-items:center;gap:10px;padding:12px 18px 0;color:var(--sub);font-size:13px}
.crumb b{color:var(--title)}
.crumb .desc{font-size:12px;color:#5f7ea6;margin-left:8px}

/* ===== 通用组件 ===== */
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px;position:relative}
.card .hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--title);margin-bottom:10px}
.card .hd .more{margin-left:auto;font-size:12px;color:var(--sub);cursor:pointer;font-weight:400}
.card .hd .more:hover{color:var(--acc)}
.hd::before{content:"";width:4px;height:15px;background:linear-gradient(180deg,var(--acc),var(--acc2));border-radius:2px;box-shadow:var(--glow)}
.grid{display:grid;gap:14px}
.cols2{grid-template-columns:1fr 1fr}.cols3{grid-template-columns:repeat(3,1fr)}.cols4{grid-template-columns:repeat(4,1fr)}
.g2-1{grid-template-columns:2fr 1fr}.g1-2{grid-template-columns:1fr 2fr}
.row{display:flex;gap:14px}
.mt10{margin-top:10px}.mt14{margin-top:14px}
.stat{background:linear-gradient(145deg,rgba(20,44,80,.75),rgba(10,24,46,.6));border:1px solid var(--line);border-radius:10px;padding:12px 16px}
.stat .lb{font-size:12px;color:var(--sub)}
.stat .v{font-family:"Bahnschrift",Consolas,sans-serif;font-size:26px;font-weight:700;color:#fff;line-height:1.25}
.stat .v small{font-size:12px;color:var(--sub);font-weight:400}
.stat .d{font-size:11.5px}
.stat .d.up{color:var(--ok)}.stat .d.dn{color:var(--bad)}
.stat::after{content:"";position:absolute;right:0;top:0;width:46px;height:46px;background:radial-gradient(circle at 100% 0,rgba(55,198,255,.18),transparent 70%)}
.tag{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;padding:2px 8px;border-radius:20px;border:1px solid;white-space:nowrap}
.tag.b{color:var(--acc);border-color:rgba(55,198,255,.4);background:rgba(55,198,255,.1)}
.tag.g{color:var(--ok);border-color:rgba(73,209,122,.4);background:rgba(73,209,122,.1)}
.tag.y{color:var(--warn);border-color:rgba(255,197,61,.4);background:rgba(255,197,61,.1)}
.tag.r{color:var(--bad);border-color:rgba(255,95,110,.45);background:rgba(255,95,110,.12)}
.tag.p{color:var(--purple);border-color:rgba(185,154,255,.4);background:rgba(185,154,255,.1)}
.tag.gray{color:var(--sub);border-color:var(--line2);background:rgba(140,170,210,.08)}
.btn{display:inline-flex;align-items:center;gap:6px;cursor:pointer;border-radius:7px;border:1px solid var(--line2);background:var(--panel2);color:var(--txt);padding:6px 14px;font-size:13px;transition:.15s;font-family:inherit}
.btn:hover{border-color:var(--acc);color:#fff;box-shadow:var(--glow)}
.btn.pri{background:linear-gradient(135deg,#0f6fbd,#0aa2c0);border-color:transparent;color:#fff}
.btn.pri:hover{filter:brightness(1.15)}
.btn.sm{padding:3px 10px;font-size:12px}
.btn.danger{border-color:rgba(255,95,110,.5);color:#ff9aa5}
.btn.danger:hover{background:rgba(255,95,110,.14)}
.btn.warn{border-color:rgba(255,150,60,.55);color:#ffb26b}
.btn:disabled{opacity:.45;pointer-events:none}
table.tb{width:100%;border-collapse:collapse;font-size:12.5px}
table.tb th{color:#7d9cc0;font-weight:600;text-align:left;padding:7px 10px;border-bottom:1px solid var(--line2);background:rgba(20,45,85,.35);white-space:nowrap;font-size:12px}
table.tb td{padding:8px 10px;border-bottom:1px solid rgba(64,158,255,.08);color:#c8dcf2}
table.tb tr:hover td{background:rgba(55,198,255,.045)}
table.tb tr{cursor:default}
table.tb tr.click{cursor:pointer}
.tabs{display:flex;gap:6px;border-bottom:1px solid var(--line);margin-bottom:12px;flex-wrap:wrap}
.tabs .t{padding:7px 16px;cursor:pointer;color:var(--sub);font-size:13px;border-radius:8px 8px 0 0;border:1px solid transparent;border-bottom:none}
.tabs .t:hover{color:var(--txt)}
.tabs .t.on{color:#fff;background:linear-gradient(180deg,rgba(55,198,255,.18),rgba(55,198,255,.05));border-color:var(--line2);box-shadow:inset 0 2px 0 var(--acc)}
.bar{height:6px;background:rgba(70,120,180,.2);border-radius:3px;overflow:hidden}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--acc),var(--acc2));border-radius:3px;transition:width .6s}
.bar.warnc i{background:linear-gradient(90deg,#e8a13c,#ffd666)}
.bar.badc i{background:linear-gradient(90deg,#e35d6a,#ff9aa5)}
.feed{max-height:260px;overflow:auto}
.feed .it{display:flex;gap:9px;padding:7px 4px;border-bottom:1px dashed rgba(64,158,255,.12);font-size:12.5px;color:#bcd3ec;animation:fadein .4s}
.feed .it .tm{color:#5f7ea6;font-family:Consolas,monospace;flex:none;font-size:11.5px;padding-top:1px}
.dot{width:8px;height:8px;border-radius:50%;flex:none;margin-top:5px}
.dot.ok{background:var(--ok);box-shadow:0 0 8px var(--ok)}.dot.bad{background:var(--bad);box-shadow:0 0 8px var(--bad)}
.dot.warn{background:var(--warn);box-shadow:0 0 8px var(--warn)}.dot.info{background:var(--acc);box-shadow:0 0 8px var(--acc)}
.steps{display:flex;align-items:flex-start;gap:0}
.steps .st{flex:1;text-align:center;position:relative}
.steps .st .c{width:26px;height:26px;border-radius:50%;border:1px solid var(--line2);margin:0 auto 6px;line-height:24px;color:var(--sub);font-size:12px;background:var(--bg2);position:relative;z-index:2}
.steps .st::before,.steps .st::after{content:"";position:absolute;top:13px;height:1px;background:var(--line2);width:50%}
.steps .st::before{left:0}.steps .st::after{right:0}
.steps .st:first-child::before,.steps .st:last-child::after{display:none}
.steps .st .nm{font-size:12px;color:var(--sub)}
.steps .st.done .c{border-color:var(--ok);color:var(--ok);background:rgba(73,209,122,.12)}
.steps .st.done::before,.steps .st.done::after{background:var(--ok)}
.steps .st.act .c{border-color:var(--acc);color:#fff;background:rgba(55,198,255,.2);box-shadow:var(--glow);animation:pulse 1.6s infinite}
.steps .st.act .nm{color:#fff}
@keyframes pulse{0%,100%{box-shadow:0 0 6px rgba(55,198,255,.4)}50%{box-shadow:0 0 18px rgba(55,198,255,.9)}}
.timeline{position:relative;padding-left:18px}
.timeline::before{content:"";position:absolute;left:5px;top:6px;bottom:6px;width:1px;background:var(--line2)}
.timeline .ti{position:relative;padding:0 0 16px 12px;font-size:12.5px}
.timeline .ti::before{content:"";position:absolute;left:-16.5px;top:4px;width:9px;height:9px;border-radius:50%;background:var(--bg2);border:2px solid var(--acc)}
.timeline .ti.ok::before{border-color:var(--ok)}
.timeline .ti.bad::before{border-color:var(--bad)}
.timeline .ti .tt{color:var(--sub);font-size:11.5px;font-family:Consolas,monospace}
.timeline .ti b{color:var(--title)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;font-size:12.5px}
.kv .k{color:var(--sub);white-space:nowrap}
.kv .v{color:var(--txt)}
.form-it{margin-bottom:10px}
.form-it label{display:block;font-size:12px;color:var(--sub);margin-bottom:4px}
.form-it input,.form-it select,.form-it textarea{width:100%;background:rgba(8,20,40,.8);border:1px solid var(--line2);border-radius:6px;color:var(--txt);padding:7px 10px;font-size:13px;font-family:inherit;outline:none}
.form-it input:focus,.form-it select:focus{border-color:var(--acc);box-shadow:0 0 0 2px rgba(55,198,255,.15)}
.mapbox{position:relative;border-radius:10px;overflow:hidden;border:1px solid var(--line2);background:linear-gradient(180deg,#081226,#0a1a34);box-shadow:inset 0 0 60px rgba(10,40,90,.55)}
.skymap{display:block;width:100%;height:100%}
.map-tip{position:absolute;z-index:15;background:rgba(6,18,36,.95);border:1px solid var(--line2);border-radius:8px;padding:8px 11px;font-size:12px;color:#cfe3f5;pointer-events:none;line-height:1.7;box-shadow:0 6px 24px rgba(0,0,0,.5);max-width:260px}
.map-tip b{color:var(--acc)}
.mk-river{fill:#6db6e8;font-size:15px;letter-spacing:8px;opacity:.55}
.mk-district{fill:#54749c;font-size:13px;letter-spacing:2px}
.mk-zone{font-size:11px;opacity:.85}
.mk-nest{fill:#7fd8ff;font-size:11px;font-family:Consolas}
.mk-drone{fill:#cfefff;font-size:11px;font-family:Consolas;paint-order:stroke;stroke:rgba(0,10,25,.75);stroke-width:3px}
.mk-target{font-size:11px;font-family:Consolas;paint-order:stroke;stroke:rgba(0,10,25,.75);stroke-width:3px}
.pulse-dot{animation:pulseDot 2s infinite}
@keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.25}}
.ring-exp{animation:ringx 1.8s infinite}
@keyframes ringx{0%{r:6;opacity:.9}100%{r:26;opacity:0}}
.fenceAnim{animation:fmove 2.2s linear infinite}
@keyframes fmove{to{stroke-dashoffset:-16}}
.focusBlink{animation:fb .3s 8 alternate}
@keyframes fb{to{fill:#fff}}
.legend{position:absolute;left:12px;bottom:10px;display:flex;gap:12px;background:rgba(5,14,30,.8);border:1px solid var(--line);border-radius:8px;padding:6px 12px;font-size:11.5px;color:var(--sub);flex-wrap:wrap}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:-1px}
.mapTitle{position:absolute;left:12px;top:10px;font-size:12px;color:#9fc6e8;letter-spacing:2px}
.mapTitle b{color:var(--acc)}
.mapops{position:absolute;right:10px;top:8px;display:flex;gap:6px}

/* ===== 视频墙 ===== */
.vwall{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.vwall.g9{grid-template-columns:repeat(3,1fr)}
.vtile{position:relative;aspect-ratio:16/9;border-radius:8px;overflow:hidden;border:1px solid var(--line2);background:#020608;cursor:pointer}
.vtile .cam{position:absolute;inset:-12% -20%;background-repeat:repeat;background-size:130% auto;animation:vpan 26s linear infinite}
@keyframes vpan{from{background-position:0 0}to{background-position:-520px 140px}}
.vtile:hover .cam{animation-duration:8s}
.vtile .osd{position:absolute;inset:0;pointer-events:none;font-family:Consolas,monospace;font-size:11px;color:#d8f4ff;text-shadow:0 1px 3px #000}
.vtile .osd .t1{position:absolute;top:6px;left:8px;display:flex;gap:8px;align-items:center}
.vtile .osd .t2{position:absolute;top:6px;right:8px;text-align:right;line-height:1.5}
.vtile .osd .t3{position:absolute;bottom:6px;left:8px;line-height:1.5}
.vtile .osd .t4{position:absolute;bottom:6px;right:8px;display:flex;gap:6px;align-items:flex-end}
.vtile .rec{color:#ff5f6e;animation:blink 1.2s infinite}
@keyframes blink{50%{opacity:.15}}
.vtile .cross::before,.vtile .cross::after{content:"";position:absolute;background:rgba(180,230,255,.28)}
.vtile .cross::before{left:50%;top:38%;height:24%;width:1px}
.vtile .cross::after{top:50%;left:44%;width:12%;height:1px}
.vtile .aibox{position:absolute;border:1.5px solid #ffd166;color:#ffd166;font-size:10px;font-family:Consolas;line-height:1;padding:2px 4px;background:rgba(60,40,0,.25);border-radius:2px;transition:.5s;animation:fadein .3s}
.vtile .aibox.red{border-color:#ff5f6e;color:#ff8b96}
.vtile .aibox.green{border-color:#49d17a;color:#9fe6b8}
.vtile .scanline{position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 3px,rgba(160,220,255,.02) 3px 4px);mix-blend-mode:screen}
.vtile .vig{position:absolute;inset:0;box-shadow:inset 0 0 44px rgba(0,0,0,.55)}
.vtile.sel{outline:2px solid var(--acc);outline-offset:-2px}
.linkbars{display:flex;gap:2px;align-items:flex-end;height:12px}
.linkbars i{width:3px;background:#9fe6b8}
.linkbars i:nth-child(1){height:4px}.linkbars i:nth-child(2){height:6px}.linkbars i:nth-child(3){height:9px}.linkbars i:nth-child(4){height:12px}
.linkbars.weak i:nth-child(n+3){background:#4a657f}
.linkbars.mid i:nth-child(n+4){background:#4a657f}

/* ===== 大屏(驾驶舱) ===== */
.screen{position:fixed;inset:0;z-index:40;background:radial-gradient(ellipse at 50% 0%,#0c2244 0%,#071123 55%,#040a16 100%);display:flex;flex-direction:column;animation:fadein .4s}
.screen .shd{display:flex;align-items:center;padding:12px 26px;flex:none}
.screen .shd h1{font-size:26px;letter-spacing:3px;background:linear-gradient(180deg,#eaf8ff,#6cc9ff);-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:800;text-shadow:0 0 24px rgba(55,198,255,.3)}
.screen .shd .ssub{color:#7fa7cf;font-size:12.5px;letter-spacing:4px;margin-left:16px;padding-top:4px}
.screen .shd .sright{margin-left:auto;display:flex;gap:14px;align-items:center;color:#9fc6e8;font-size:13px}
.screen .body{flex:1;display:grid;grid-template-columns:minmax(240px,.9fr) 2.2fr minmax(240px,.9fr);gap:12px;padding:4px 16px 12px;min-height:0}
.screen .col{display:flex;flex-direction:column;gap:12px;min-height:0}
.spanel{flex:1;background:linear-gradient(160deg,rgba(12,32,62,.8),rgba(8,20,42,.65));border:1px solid rgba(55,140,230,.22);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;min-height:0;position:relative}
.spanel::before,.spanel::after{content:"";position:absolute;width:12px;height:12px;border-color:var(--acc);opacity:.7}
.spanel::before{left:-1px;top:-1px;border-left:2px solid;border-top:2px solid;border-top-left-radius:8px}
.spanel::after{right:-1px;bottom:-1px;border-right:2px solid;border-bottom:2px solid;border-bottom-right-radius:8px}
.spanel .sp-h{font-size:13.5px;font-weight:700;color:#cfeaff;letter-spacing:2px;margin-bottom:6px;display:flex;align-items:center}
.spanel .sp-h::before{content:"";width:6px;height:6px;background:var(--acc);margin-right:8px;transform:rotate(45deg);box-shadow:0 0 8px var(--acc)}
.spanel .sp-h .x{margin-left:auto;font-size:11px;color:#5f7ea6;font-weight:400}
.spanel .sp-b{flex:1;min-height:0}
.kpiRow{display:flex;gap:12px;flex:none;padding:0 16px 12px}
.kpi{flex:1;text-align:center;padding:10px 6px;background:linear-gradient(180deg,rgba(20,52,96,.55),rgba(8,22,44,.4));border:1px solid rgba(55,140,230,.2);border-radius:8px}
.kpi .v{font-family:"Bahnschrift",Consolas;font-size:30px;font-weight:700;color:#fff;text-shadow:0 0 22px rgba(55,198,255,.55)}
.kpi .v em{font-style:normal;font-size:14px;color:#8fc7ee}
.kpi .k{font-size:12px;color:#89abd0;margin-top:2px;letter-spacing:1px}
.exitBtn{cursor:pointer;border:1px solid var(--line2);border-radius:6px;padding:5px 14px;color:#9fc6e8;background:rgba(12,28,54,.6)}
.exitBtn:hover{color:#fff;border-color:var(--acc)}
.alertLine{display:flex;gap:8px;font-size:12px;padding:5px 2px;border-bottom:1px dashed rgba(64,158,255,.1);color:#cfe3f5;animation:slideL .5s}
@keyframes slideL{from{transform:translateX(16px);opacity:0}}
.alertLine .tm{font-family:Consolas;color:#5f7ea6}

/* ===== 弹窗/提示 ===== */
.mask{position:fixed;inset:0;background:rgba(2,8,18,.66);backdrop-filter:blur(3px);z-index:60;display:flex;align-items:center;justify-content:center;animation:fadein .2s}
.dlg{width:640px;max-width:92vw;max-height:86vh;overflow:auto;background:linear-gradient(165deg,#0d1f3c,#0a1628);border:1px solid var(--line2);border-radius:12px;padding:18px 22px;box-shadow:0 20px 80px rgba(0,0,0,.6);animation:pop .22s}
@keyframes pop{from{transform:scale(.94);opacity:.4}}
.dlg h3{color:var(--title);font-size:16px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.dlg h3 .x{margin-left:auto;cursor:pointer;color:var(--sub);font-size:18px;line-height:1}
.dlg h3 .x:hover{color:#fff}
.qrbox{display:flex;gap:18px;align-items:center;background:rgba(8,20,40,.7);border:1px dashed var(--line2);border-radius:10px;padding:14px}
#toasts{position:fixed;top:66px;right:18px;z-index:80;display:flex;flex-direction:column;gap:8px}
.toast{background:rgba(10,26,48,.95);border:1px solid var(--line2);border-left:3px solid var(--acc);border-radius:8px;padding:10px 14px;font-size:13px;color:#d7e9fb;box-shadow:0 8px 30px rgba(0,0,0,.45);animation:tin .25s;max-width:360px;line-height:1.6}
.toast.ok{border-left-color:var(--ok)}.toast.bad{border-left-color:var(--bad)}.toast.warn{border-left-color:var(--warn)}
.toast b{color:#fff}
@keyframes tin{from{transform:translateX(30px);opacity:0}}

/* ===== 导览 ===== */
.tour{position:fixed;right:20px;bottom:20px;z-index:70;width:400px;background:linear-gradient(160deg,rgba(13,32,60,.97),rgba(8,20,40,.96));border:1px solid var(--line2);border-radius:14px;padding:14px 16px;box-shadow:0 16px 60px rgba(0,0,0,.6);animation:pop .25s}
.tour .tt{display:flex;align-items:center;gap:8px;color:#fff;font-weight:700;font-size:14px}
.tour .tt .step{margin-left:auto;font-size:12px;color:var(--sub);font-family:Consolas}
.tour .txt{font-size:12.8px;color:#bfd7ef;line-height:1.8;margin:10px 0;min-height:66px}
.tour .txt b{color:var(--acc)}
.tour .ops{display:flex;gap:8px;align-items:center}
.tour .barT{flex:1;height:4px;background:rgba(70,120,180,.25);border-radius:2px;margin-right:6px;overflow:hidden}
.tour .barT i{display:block;height:100%;background:linear-gradient(90deg,var(--acc),var(--acc2));transition:.4s}
.hidden{display:none!important}
.closeX{cursor:pointer;color:var(--sub);font-size:16px}
.closeX:hover{color:#fff}

/* ===== 架构图 ===== */
.arch{display:flex;flex-direction:column;gap:10px}
.arch .lyr{border:1px solid var(--line2);border-radius:10px;padding:10px 16px;background:linear-gradient(135deg,rgba(16,38,70,.6),rgba(10,22,44,.5))}
.arch .lyr .ln{font-size:13px;font-weight:700;color:var(--acc);letter-spacing:1px;margin-bottom:7px;display:flex;align-items:center;gap:8px}
.arch .lyr .ln small{font-weight:400;color:#5f7ea6;letter-spacing:0}
.arch .blocks{display:flex;gap:8px;flex-wrap:wrap}
.arch .bk{border:1px solid var(--line2);background:rgba(230,244,255,.06);border-radius:7px;padding:6px 14px;font-size:12.5px;color:#d5e8fa;transition:.2s;cursor:default}
.arch .bk:hover{border-color:var(--acc);box-shadow:var(--glow);transform:translateY(-1px)}
.arch .bk.core{border-color:rgba(55,198,255,.5);background:linear-gradient(135deg,rgba(15,111,189,.35),rgba(10,162,192,.22));font-weight:600}
.arch .bk.sys{border-color:rgba(185,154,255,.4)}
.arch .arrowD{text-align:center;color:#4e76a3;font-size:12px;line-height:1}

/* ===== 应急模式 ===== */
body.emergency .hdr{background:linear-gradient(90deg,rgba(70,10,16,.95),rgba(30,6,12,.85))}
body.emergency .nav{border-right-color:rgba(255,95,110,.3)}
body.emergency .nav .item.on{background:linear-gradient(90deg,rgba(255,95,110,.18),transparent);border-left-color:var(--bad)}
body.emergency .card,body.emergency .stat{border-color:rgba(255,95,110,.35)}
body.emergency .hd::before{background:linear-gradient(180deg,#ff5f6e,#ffb54d)}
body.emergency::after{content:"应急模式已激活 —— 空域/带宽/算力向救援任务倾斜";position:fixed;left:50%;transform:translateX(-50%);bottom:0;z-index:90;background:linear-gradient(90deg,rgba(120,10,20,.9),rgba(200,30,40,.92),rgba(120,10,20,.9));color:#ffe8ea;font-size:12.5px;letter-spacing:2px;padding:5px 30px;border-radius:8px 8px 0 0;border:1px solid rgba(255,120,130,.5);border-bottom:none;animation:pulse 2s infinite}

/* 其他视图局部样式 */
.hero{background:linear-gradient(135deg,rgba(14,42,80,.85),rgba(8,20,40,.6)),radial-gradient(circle at 85% 20%,rgba(55,198,255,.22),transparent 45%);border:1px solid var(--line2);border-radius:14px;padding:22px 26px;position:relative;overflow:hidden}
.hero h2{font-size:22px;color:#fff;letter-spacing:2px}
.hero p{color:#9dbbdd;font-size:13px;margin-top:6px;letter-spacing:1px}
.modCard{cursor:pointer;transition:.2s}
.modCard:hover{transform:translateY(-3px);border-color:var(--acc);box-shadow:0 10px 34px rgba(10,40,90,.5)}
.modCard .ic{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(55,198,255,.25),rgba(90,209,194,.15));border:1px solid var(--line2);margin-bottom:10px}
.modCard .nm{font-size:14.5px;font-weight:700;color:var(--title)}
.modCard .ds{font-size:12px;color:var(--sub);margin-top:4px;line-height:1.7}
.gantt{position:relative}
.gantt .gline{display:flex;align-items:center;height:38px;border-bottom:1px dashed rgba(64,158,255,.1)}
.gantt .glb{width:150px;flex:none;font-size:12px;color:var(--sub)}
.gantt .grail{flex:1;position:relative;height:100%}
.gantt .grail::before{content:"";position:absolute;left:0;right:0;top:50%;border-top:1px solid rgba(64,158,255,.12)}
.gantt .gbar{position:absolute;top:9px;height:20px;border-radius:5px;background:linear-gradient(90deg,#1373c4,#0fb5cc);opacity:.9;font-size:10.5px;color:#eaf8ff;line-height:20px;padding:0 6px;white-space:nowrap;overflow:hidden;box-shadow:0 0 12px rgba(55,198,255,.35)}
.gantt .gbar.g{background:linear-gradient(90deg,#1e9e57,#49d17a)}
.gantt .gbar.y{background:linear-gradient(90deg,#c98a1d,#ffd166);color:#3a2c00}
.gantt .gbar.r{background:linear-gradient(90deg,#c44b58,#ff8b96)}
.gantt .gnow{position:absolute;top:0;bottom:0;width:1px;background:#fff;box-shadow:0 0 8px #fff;z-index:2}
.gantt .hours{display:flex;margin-left:150px;font-size:10px;color:#4e76a3}
.gantt .hours span{flex:1;text-align:left;border-left:1px solid rgba(64,158,255,.12);padding-left:3px}
.checkList .ck{display:flex;gap:8px;align-items:center;padding:6px 2px;font-size:13px;color:var(--sub)}
.checkList .ck .ic{width:18px;height:18px;border-radius:50%;border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-size:11px;flex:none}
.checkList .ck.ok{color:#9fe6b8}.checkList .ck.ok .ic{border-color:var(--ok);color:var(--ok);background:rgba(73,209,122,.12)}
.checkList .ck.bad{color:#ff9aa5}.checkList .ck.bad .ic{border-color:var(--bad);color:var(--bad);background:rgba(255,95,110,.12)}
.checkList .ck.run .ic{border-color:var(--acc);color:var(--acc);animation:pulse 1s infinite}
.sceneIc{position:relative;border-radius:8px;overflow:hidden;border:1px solid var(--line2);aspect-ratio:4/3}
.sceneIc .aibox{position:absolute;border:1.5px solid #ffd166;color:#ffd166;font:10px Consolas;padding:1px 3px;background:rgba(60,40,0,.3)}
.sceneIc .cap{position:absolute;left:0;right:0;bottom:0;padding:4px 8px;font-size:11px;color:#d8ecff;background:linear-gradient(transparent,rgba(2,8,20,.9))}
.pager{display:flex;gap:4px;align-items:center;justify-content:flex-end;font-size:12px;color:var(--sub);margin-top:8px}
.pager span{border:1px solid var(--line2);border-radius:5px;padding:2px 9px;cursor:pointer}
.pager span:hover,.pager span.on{color:#fff;border-color:var(--acc);background:rgba(55,198,255,.12)}
.note{font-size:11.5px;color:#5f7ea6;line-height:1.7}
.hr{border:none;border-top:1px dashed rgba(64,158,255,.15);margin:12px 0}
.chipRow{display:flex;gap:6px;flex-wrap:wrap}
.chip{font-size:11.5px;padding:3px 10px;border-radius:6px;background:rgba(55,198,255,.08);border:1px solid var(--line);color:#a8c8e8;cursor:pointer}
.chip:hover,.chip.on{border-color:var(--acc);color:#fff}
.spin{width:14px;height:14px;border:2px solid rgba(55,198,255,.25);border-top-color:var(--acc);border-radius:50%;animation:rot .7s linear infinite;display:inline-block;vertical-align:-3px}
@keyframes rot{to{transform:rotate(360deg)}}
.evidence{display:flex;gap:8px;flex-wrap:wrap}
.evidence .ev{width:86px;border:1px solid var(--line2);border-radius:8px;overflow:hidden;position:relative}
.evidence .ev .thumb{height:52px}
.evidence .ev .lb{font-size:10px;color:var(--sub);padding:3px 5px;background:rgba(8,20,40,.8)}
.evidence .ev .lock{position:absolute;right:3px;top:3px;font-size:10px;color:var(--purple)}
