:root{
  --bg:#070b14; --panel:#0e1626; --panel2:#111d33; --line:#1c2c47;
  --txt:#dbe6f5; --muted:#7f93b3; --accent:#22d3ee; --grn:#22c55e;
  --amber:#f59e0b; --red:#ef4444; --crit:#ff2d55; --high:#ff6b35;
  --med:#f5b301; --low:#38bdf8; --shadow:0 6px 24px rgba(0,0,0,.4);
}
*{box-sizing:border-box}
body{margin:0;background:radial-gradient(1200px 700px at 80% -10%,#0d1b30,#070b14);
  color:var(--txt);font-family:"Segoe UI",system-ui,Roboto,sans-serif;font-size:14px}
b{color:var(--accent)}
a{color:inherit;text-decoration:none}

/* Topbar */
.topbar{display:flex;justify-content:space-between;align-items:center;
  padding:12px 20px;background:rgba(10,17,30,.85);border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:20;backdrop-filter:blur(8px);flex-wrap:wrap;gap:10px}
.logo{font-size:19px;font-weight:600;letter-spacing:.5px;display:flex;align-items:center;gap:8px}
.shield{filter:drop-shadow(0 0 6px var(--accent))}
.status-pill{margin-left:10px;font-size:11px;background:rgba(34,197,94,.12);
  color:var(--grn);border:1px solid rgba(34,197,94,.4);padding:3px 10px;border-radius:20px;
  display:inline-flex;align-items:center;gap:6px;letter-spacing:1px}
.status-pill .dot{width:8px;height:8px;border-radius:50%;background:var(--grn);
  box-shadow:0 0 0 0 rgba(34,197,94,.6);animation:pulse 1.6s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.6)}70%{box-shadow:0 0 0 8px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
nav{display:flex;gap:6px}
nav a{padding:7px 14px;border-radius:8px;color:var(--muted);font-weight:500}
nav a.active,nav a:hover{background:var(--panel2);color:var(--txt)}

main{max-width:1280px;margin:0 auto;padding:18px}

/* KPIs */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:14px;
  padding:16px 18px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--accent)}
.kpi.threat::before{background:var(--high)}
.kpi.crit::before{background:var(--crit)}
.kpi.blocked::before{background:var(--red)}
.kpi-num{font-size:30px;font-weight:700;line-height:1}
.kpi-lbl{color:var(--muted);font-size:12px;margin-top:6px;text-transform:uppercase;letter-spacing:.5px}

/* Grid + panels */
.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;
  padding:14px 16px;box-shadow:var(--shadow);margin-bottom:14px}
.span2{grid-column:span 2}
.panel-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.panel-h h2{font-size:14px;margin:0;letter-spacing:.4px}
.muted{color:var(--muted);font-size:12px}
.small{font-size:12px}
.empty{color:var(--muted);padding:16px;text-align:center;font-size:13px}

/* Feed */
.feed{max-height:340px;overflow:auto;display:flex;flex-direction:column;gap:7px}
.feed-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:10px;
  background:var(--panel2);border-left:3px solid var(--med);animation:slide .35s ease}
@keyframes slide{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.feed-item.critical{border-left-color:var(--crit)}
.feed-item.high{border-left-color:var(--high)}
.feed-item.medium{border-left-color:var(--med)}
.feed-item.low{border-left-color:var(--low)}
.sev{font-size:10px;font-weight:700;padding:2px 7px;border-radius:5px;text-transform:uppercase;letter-spacing:.5px}
.sev.critical{background:rgba(255,45,85,.16);color:var(--crit)}
.sev.high{background:rgba(255,107,53,.16);color:var(--high)}
.sev.medium{background:rgba(245,179,1,.16);color:var(--med)}
.sev.low{background:rgba(56,189,248,.16);color:var(--low)}
.fi-main{flex:1;min-width:0}
.fi-name{font-weight:600}
.fi-detail{color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fi-ip{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:var(--accent)}
.badge-block{font-size:10px;background:rgba(239,68,68,.18);color:#fca5a5;border:1px solid rgba(239,68,68,.4);
  padding:2px 7px;border-radius:20px;white-space:nowrap}

/* Bars */
.bars{display:flex;flex-direction:column;gap:9px}
.bar-row{display:flex;align-items:center;gap:8px}
.bar-lbl{width:88px;font-size:12px;color:var(--muted);text-transform:capitalize}
.bar-track{flex:1;height:9px;background:var(--panel2);border-radius:20px;overflow:hidden}
.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--high));border-radius:20px;transition:width .5s}
.bar-n{width:28px;text-align:right;font-size:12px;font-weight:600}

/* Blocks + top ips */
.blocklist,.topips{display:flex;flex-direction:column;gap:7px;max-height:230px;overflow:auto}
.block-item{display:flex;justify-content:space-between;align-items:center;gap:8px;
  padding:8px 10px;background:var(--panel2);border-radius:9px}
.block-item .ip{font-family:ui-monospace,Consolas,monospace;color:#fca5a5}
.block-item button{background:var(--panel);border:1px solid var(--line);color:var(--muted);
  border-radius:7px;padding:4px 9px;cursor:pointer;font-size:11px}
.block-item button:hover{color:var(--txt);border-color:var(--accent)}
.topip{display:flex;justify-content:space-between;padding:7px 10px;background:var(--panel2);border-radius:9px}
.topip .ip{font-family:ui-monospace,Consolas,monospace;color:var(--accent)}
.topip .n{color:var(--high);font-weight:700}

/* Alert log */
.alertlog{display:flex;flex-direction:column;gap:6px;max-height:260px;overflow:auto}
.alert-item{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--panel2);border-radius:9px;font-size:12px}
.ch{font-size:11px;font-weight:700;padding:2px 8px;border-radius:6px;min-width:56px;text-align:center}
.ch.sms{background:rgba(56,189,248,.16);color:var(--low)}
.ch.email{background:rgba(34,197,94,.14);color:var(--grn)}
.ch.voice{background:rgba(245,179,1,.16);color:var(--med)}
.mode-tag{font-size:10px;color:var(--muted);border:1px solid var(--line);padding:1px 6px;border-radius:20px}
.ok-y{color:var(--grn)}.ok-n{color:var(--red)}

/* Sparkline */
canvas{width:100%;display:block}

/* Simulator */
.sim-row{display:flex;flex-wrap:wrap;gap:8px}
.sim-row button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);
  padding:9px 13px;border-radius:9px;cursor:pointer;font-size:13px;transition:.15s}
.sim-row button:hover{border-color:var(--accent);background:#16233c}
.sim-row button.test{background:rgba(34,211,238,.12);border-color:var(--accent);color:var(--accent);margin-left:auto}
.sim-msg{margin-top:10px;color:var(--grn);font-size:13px;min-height:18px}

/* Login */
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px}
.login-card{background:var(--panel);border:1px solid var(--line);border-radius:18px;
  padding:34px 30px;width:100%;max-width:380px;box-shadow:var(--shadow)}
.brand{text-align:center;margin-bottom:20px}
.brand .shield{font-size:40px}
.brand h1{font-size:22px;margin:8px 0 2px;letter-spacing:1px}
.brand .tag{color:var(--muted);font-size:13px;margin:0}
.login-card label{display:block;font-size:12px;color:var(--muted);margin:12px 0 5px}
.login-card input{width:100%;padding:11px 12px;background:var(--bg);border:1px solid var(--line);
  border-radius:9px;color:var(--txt);font-size:14px}
.login-card button{width:100%;margin-top:18px;padding:12px;background:linear-gradient(90deg,var(--accent),#0ea5b7);
  border:none;border-radius:9px;color:#04121a;font-weight:700;cursor:pointer;font-size:14px}
.hint{text-align:center;color:var(--muted);font-size:12px;margin-top:14px}
.err{background:rgba(239,68,68,.14);border:1px solid rgba(239,68,68,.4);color:#fca5a5;
  padding:9px 12px;border-radius:9px;font-size:13px;text-align:center}

/* Settings */
.settings form{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;align-items:start}
.settings .panel{margin:0}
.fld{margin-bottom:11px}
.fld label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.fld input,.fld select,.fld2 input{width:100%;padding:9px 11px;background:var(--bg);
  border:1px solid var(--line);border-radius:8px;color:var(--txt);font-size:13px}
.fld2{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:11px}
.fld2 label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.fld.chk label{display:flex;align-items:center;gap:8px;color:var(--txt);font-size:13px}
.fld.chk input{width:auto}
.save-row{grid-column:span 2;display:flex;align-items:center;gap:14px}
.save-row button{padding:12px 22px;background:linear-gradient(90deg,var(--accent),#0ea5b7);
  border:none;border-radius:9px;color:#04121a;font-weight:700;cursor:pointer}
.saved{color:var(--grn)}

/* ===== Live Attack Map ===== */
.map-body{overflow:hidden}
.mapwrap{position:fixed;top:52px;left:0;right:0;bottom:0;background:
  radial-gradient(1400px 800px at 50% 30%,#08182b,#04070e)}
#map{width:100%;height:100%;display:block}
.map-counters{position:absolute;top:14px;left:16px;display:flex;gap:10px;z-index:5}
.mc{background:rgba(10,20,34,.72);border:1px solid var(--line);border-radius:10px;
  padding:8px 14px;backdrop-filter:blur(6px);text-align:center}
.mc-n{font-size:20px;font-weight:700;color:var(--accent)}
.mc-l{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.map-console{position:absolute;left:0;right:0;bottom:0;display:grid;
  grid-template-columns:1fr 1fr 2.4fr;gap:1px;background:var(--line);
  border-top:1px solid var(--accent);max-height:34vh}
.mcol{background:rgba(6,14,24,.92);padding:8px 12px;overflow:hidden;display:flex;flex-direction:column}
.mcol h3{margin:0 0 6px;font-size:13px;letter-spacing:1.5px;color:var(--accent);font-weight:600}
.mc-head{display:grid;grid-template-columns:60px 1fr 34px;gap:8px;font-size:10px;
  color:var(--muted);letter-spacing:.5px;padding-bottom:4px;border-bottom:1px solid var(--line)}
.mcol:nth-child(2) .mc-head{grid-template-columns:34px 1fr}
.mc-head.live{grid-template-columns:70px 1.4fr 1.1fr 1.3fr 1.2fr}
.mc-head .r{text-align:right}
.mc-list{overflow-y:auto;font-size:12px;margin-top:4px}
.mc-list.live{font-size:11.5px}
.mc-row{display:grid;grid-template-columns:60px 1fr 34px;gap:8px;padding:3px 0;
  align-items:center;border-bottom:1px solid rgba(28,44,71,.4)}
.mcol:nth-child(2) .mc-row{grid-template-columns:34px 1fr}
.mc-row.live{grid-template-columns:70px 1.4fr 1.1fr 1.3fr 1.2fr;animation:slide .3s ease}
.mc-row .port{color:var(--amber);font-family:ui-monospace,Consolas,monospace}
.mc-row .svc{color:var(--txt)}
.mc-row .r,.mc-row .n{text-align:right;color:var(--high);font-weight:700}
.mcol:nth-child(2) .mc-row .n{text-align:left;color:var(--accent);min-width:26px}
.mc-row .ts{color:var(--muted);font-family:ui-monospace,Consolas,monospace}
.mc-row .org{color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-row .ip{color:var(--accent);font-family:ui-monospace,Consolas,monospace}
.mc-row .geo{color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-row .typ{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mc-row .typ.critical{color:var(--crit)} .mc-row .typ.high{color:var(--high)}
.mc-row .typ.medium{color:var(--med)} .mc-row .typ.low{color:var(--low)}
.map-console .muted{padding:8px;color:var(--muted)}
@media(max-width:820px){
  .map-console{grid-template-columns:1fr;max-height:44vh;overflow-y:auto}
  .mc-head.live,.mc-row.live{grid-template-columns:56px 1fr 1fr}
  .mc-head.live span:nth-child(4),.mc-head.live span:nth-child(5),
  .mc-row.live .geo,.mc-row.live .typ{display:none}
  .map-counters{top:10px;left:10px;flex-wrap:wrap}
}

/* ===== Global Defense Command Center (war-room) ===== */
.cmd-body{background:
  linear-gradient(rgba(8,16,14,.96),rgba(4,8,8,.98)),
  repeating-linear-gradient(0deg,transparent 0 39px,rgba(34,255,136,.04) 39px 40px),
  repeating-linear-gradient(90deg,transparent 0 39px,rgba(34,255,136,.04) 39px 40px),
  #050a08;color:#c9f5df;font-family:ui-monospace,"Consolas",monospace;
  min-height:100vh;padding:0 14px 16px}
.cmd-scan{position:fixed;inset:0;pointer-events:none;z-index:1;background:
  repeating-linear-gradient(0deg,rgba(0,0,0,0) 0 2px,rgba(0,0,0,.18) 3px);opacity:.35}
.cmd-body>*{position:relative;z-index:2}

.cmd-header{display:flex;align-items:center;gap:18px;padding:12px 6px;flex-wrap:wrap;
  border-bottom:1px solid rgba(34,255,136,.22)}
.cmd-brand{display:flex;align-items:center;gap:10px}
.cmd-brand .shield{font-size:26px;filter:drop-shadow(0 0 8px #22ff88)}
.cmd-title{font-size:18px;font-weight:800;letter-spacing:3px;color:#eafff4}
.cmd-sub{font-size:10px;letter-spacing:2.5px;color:#22ff88}
.cmd-defcon{min-width:180px;border:1px solid rgba(34,255,136,.4);border-radius:8px;padding:6px 12px;
  background:rgba(6,20,14,.6)}
.dc-label{font-size:9px;letter-spacing:2px;color:#7fd4ad}
.dc-val{font-size:17px;font-weight:800;letter-spacing:1px;color:#22c55e}
.dc-bar{height:5px;background:rgba(255,255,255,.08);border-radius:3px;margin-top:4px;overflow:hidden}
.dc-bar i{display:block;height:100%;width:20%;background:#22c55e;transition:.6s}
.cmd-clock{margin-left:auto;text-align:right;font-size:12px;line-height:1.5}
.ck-utc{color:#22ff88;font-weight:700;letter-spacing:1px}
.ck-local{color:#7fd4ad;font-size:11px}
.ck-def{font-size:10px;color:#7fd4ad;letter-spacing:.5px}
.ck-def b{color:#ffd7dc}
.cmd-nav{display:flex;gap:4px;width:100%;justify-content:flex-end;margin-top:2px}
.cmd-nav a{padding:5px 11px;border-radius:6px;color:#7fd4ad;font-size:12px;letter-spacing:1px}
.cmd-nav a:hover,.cmd-nav a.active{background:rgba(34,255,136,.14);color:#eafff4}

.cmd-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:12px 0}
.cs{border:1px solid rgba(34,255,136,.25);border-radius:8px;padding:10px 14px;
  background:rgba(6,18,13,.55);position:relative}
.cs::before,.cs::after{content:"";position:absolute;width:8px;height:8px;border:1px solid #22ff88}
.cs::before{left:-1px;top:-1px;border-right:none;border-bottom:none}
.cs::after{right:-1px;bottom:-1px;border-left:none;border-top:none}
.cs-n{font-size:26px;font-weight:800;color:#eafff4;line-height:1}
.cs.red .cs-n{color:#ff6b6b}.cs.crit .cs-n{color:#ff2d55}.cs.amber .cs-n{color:#f5b301}
.cs-l{font-size:9.5px;letter-spacing:1.5px;color:#7fd4ad;margin-top:5px}

.cmd-grid{display:grid;grid-template-columns:1.35fr 1.35fr 1fr;gap:10px;margin-bottom:10px}
.cmd-grid2{display:grid;grid-template-columns:1.35fr 1.35fr 1fr;gap:10px}
.panel-hud{border:1px solid rgba(34,255,136,.28);border-radius:8px;background:rgba(5,14,10,.6);
  position:relative;padding:26px 12px 12px;overflow:hidden}
.panel-hud::before,.panel-hud::after{content:"";position:absolute;width:12px;height:12px;
  border:1.5px solid #22ff88;z-index:3}
.panel-hud::before{left:5px;top:5px;border-right:none;border-bottom:none}
.panel-hud::after{right:5px;bottom:5px;border-left:none;border-top:none}
.ph-title{position:absolute;top:7px;left:14px;font-size:11px;letter-spacing:2px;color:#22ff88;font-weight:700}
.ph-expand{position:absolute;top:5px;right:12px;color:#7fd4ad;text-decoration:none;font-size:14px;z-index:4}
.ph-expand:hover{color:#eafff4}
.globe-cell,.map-cell{height:46vh;min-height:280px;padding:0}
.globe-cell iframe,.map-cell iframe{width:100%;height:100%;border:0;display:block;border-radius:8px}
.globe-cell .ph-title,.map-cell .ph-title{z-index:5;background:rgba(5,14,10,.7);padding:2px 6px;border-radius:4px}
.radar-cell{height:46vh;min-height:280px;display:flex;flex-direction:column}
#radar{flex:1;width:100%;display:block}
.radar-legend{display:flex;gap:10px;justify-content:center;font-size:9px;letter-spacing:1px;padding-top:4px}
.radar-legend .lg::before{content:"◉ ";}
.radar-legend .crit{color:#ff2d55}.radar-legend .high{color:#ff6b35}.radar-legend .med{color:#f5b301}

/* by-type table */
.type-head,.reg-head{display:grid;font-size:9px;letter-spacing:1px;color:#5fa385;
  padding:0 2px 5px;border-bottom:1px solid rgba(34,255,136,.16)}
.type-head{grid-template-columns:1fr 62px 30px 78px}
.type-table,.region-table{max-height:34vh;overflow-y:auto;margin-top:4px}
.type-head .r,.reg-head .r{text-align:right}
.tr{display:grid;grid-template-columns:1fr 62px 30px 78px;align-items:center;gap:6px;
  padding:5px 2px;border-bottom:1px solid rgba(34,255,136,.08);font-size:12px}
.tv{display:flex;align-items:center;gap:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#dff7ea}
.sd{width:8px;height:8px;border-radius:2px;flex:none}
.tsvc{color:#7fd4ad;font-size:11px}
.tblk{color:#ff9aa7;font-size:11px}
.thit{position:relative;text-align:right;color:#eafff4;font-weight:700}
.thit .tb{position:absolute;left:0;bottom:-3px;height:2px;border-radius:2px;opacity:.8}

/* region table */
.reg-head{grid-template-columns:34px 1fr 1fr 54px}
.rr{display:grid;grid-template-columns:34px 1fr 1fr 54px;align-items:center;gap:6px;
  padding:5px 2px;border-bottom:1px solid rgba(34,255,136,.08);font-size:12px}
.rn{color:#22ff88;font-weight:700}
.rc{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#dff7ea}
.rt{color:#9fb8ad;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ch{text-align:right;font-size:11px}.ch .c{color:#ff2d55}.ch .h{color:#ff6b35}

/* severity + damage */
.sev-bars{display:flex;flex-direction:column;gap:9px;margin-bottom:14px}
.sb{display:grid;grid-template-columns:70px 1fr 34px;align-items:center;gap:8px}
.sbl{font-size:10px;letter-spacing:1px;font-weight:700}
.sbt{height:9px;background:rgba(255,255,255,.06);border-radius:5px;overflow:hidden}
.sbt i{display:block;height:100%;border-radius:5px;transition:width .5s}
.sbn{text-align:right;font-weight:700;color:#eafff4}
.dmg-gauge{border-top:1px solid rgba(34,255,136,.16);padding-top:12px;text-align:center}
.dg-label{font-size:9px;letter-spacing:2px;color:#7fd4ad}
.dg-num{font-size:30px;font-weight:800;color:#ff6b35;line-height:1.1}
.dg-track{height:7px;background:rgba(255,255,255,.06);border-radius:4px;overflow:hidden;margin-top:6px}
.dg-track i{display:block;height:100%;background:linear-gradient(90deg,#f5b301,#ff2d55);transition:width .6s}
.agent-line{margin-top:14px;font-size:10px;letter-spacing:1px;color:#22ff88;display:flex;
  align-items:center;gap:7px;justify-content:center}
.agent-line .dot{width:8px;height:8px;border-radius:50%;background:#22c55e;animation:pulse 1.4s infinite}

.cmd-grid3{display:grid;grid-template-columns:2fr 1fr;gap:10px;margin-top:10px}
.ai-brief{font-size:13.5px;line-height:1.65;color:#dff7ea;min-height:70px;
  border-left:2px solid #22ff88;padding:4px 0 8px 12px;margin-bottom:8px}
.ai-eng{font-size:9px;letter-spacing:1px;color:#7fd4ad;border:1px solid rgba(34,255,136,.3);
  padding:1px 6px;border-radius:10px;margin-left:6px;vertical-align:middle}
.intel-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}
.intel-grid>div{text-align:center}
.ig-n{display:block;font-size:22px;font-weight:800;color:#22ff88}
.ig-n.red{color:#ff6b6b}
.ig-l{font-size:9px;letter-spacing:.5px;color:#7fd4ad}
.intel-src{font-size:11px;color:#9fb8ad;display:flex;flex-wrap:wrap;gap:12px;
  border-top:1px solid rgba(34,255,136,.16);padding-top:10px}
.intel-src .src b{color:#eafff4}

@media(max-width:1000px){
  .cmd-grid3{grid-template-columns:1fr}
  .cmd-grid,.cmd-grid2{grid-template-columns:1fr 1fr}
  .radar-cell{grid-column:span 2;height:38vh}
  .cmd-stats{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:640px){
  .cmd-grid,.cmd-grid2{grid-template-columns:1fr}
  .radar-cell{grid-column:span 1}
  .cmd-stats{grid-template-columns:repeat(2,1fr)}
  .globe-cell,.map-cell,.radar-cell{height:56vw;min-height:220px}
  .cmd-clock{margin-left:0}
}

/* ===== Embed mode (map/globe inside command-center iframes) ===== */
.embed .topbar,.embed .view-ctrls,.embed .map-console,.embed .map-counters,
.embed .globe-metrics,.embed .globe-ticker,.embed .globe-threats,.embed .globe-intel,
.embed #cgfx,.embed #cgfx-siren,.embed #cgfx-hud{display:none!important}
.embed .mapwrap,.embed .globewrap{top:0!important}
.embed body{overflow:hidden}

/* ===== View controls + expand/fullscreen (shared by map + globe) ===== */
.view-ctrls{position:absolute;top:14px;right:16px;display:flex;gap:8px;z-index:8}
.vc{background:rgba(10,20,34,.78);border:1px solid var(--line);color:var(--txt);
  border-radius:9px;padding:8px 13px;cursor:pointer;font-size:13px;backdrop-filter:blur(6px);
  text-decoration:none;display:inline-flex;align-items:center;gap:5px;transition:.15s}
.vc:hover{border-color:var(--accent);color:var(--accent)}
.status-pill.danger{background:rgba(239,68,68,.14);color:#fca5a5;border-color:rgba(239,68,68,.45)}
.status-pill.danger .dot{background:#ef4444;animation:pulse 1.2s infinite}
/* fullscreen: hide chrome so a single view fills the screen */
body.is-full .topbar{display:none}
body.is-full .mapwrap,body.is-full .globewrap{top:0}
body.is-full .map-console{max-height:26vh}

/* ===== 3D Threat Globe ===== */
.globe-body{overflow:hidden;background:#02080a}
.globewrap{position:fixed;top:52px;left:0;right:0;bottom:0;
  background:radial-gradient(1100px 900px at 50% 45%,#062a26 0%,#03141a 45%,#02080a 100%);
  transition:background 1.1s ease}
body.alerting .globewrap{
  background:radial-gradient(1100px 900px at 50% 45%,#2a0206 0%,#12010a 45%,#050208 100%)}
#globe{width:100%;height:100%;display:block;cursor:grab}
#globe:active{cursor:grabbing}
.globe-metrics{position:absolute;top:70px;left:18px;width:210px;
  background:rgba(14,4,8,.66);border:1px solid rgba(239,68,68,.35);border-radius:12px;
  padding:12px 14px;backdrop-filter:blur(7px);z-index:6}
.gm-title{font-size:11px;letter-spacing:1.5px;color:#ff6b6b;margin-bottom:10px;font-weight:700}
.gm{display:flex;align-items:baseline;justify-content:space-between;gap:8px;
  padding:5px 0;border-bottom:1px solid rgba(239,68,68,.14)}
.gm:last-child{border-bottom:none}
.gm-n{font-size:19px;font-weight:800;color:var(--txt);line-height:1}
.gm-n.crit{color:#ff2d55}.gm-n.red{color:#ef4444}.gm-n.amber{color:#f5b301}.gm-n.grn{color:#22c55e}
.gm-l{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;text-align:right}
.globe-ticker{position:absolute;left:0;right:0;bottom:0;height:36px;display:flex;align-items:center;
  gap:12px;background:rgba(10,2,6,.85);border-top:1px solid rgba(239,68,68,.4);
  padding:0 14px;overflow:hidden;z-index:6}
.gt-label{color:#ff2d55;font-weight:700;font-size:12px;letter-spacing:1px;white-space:nowrap;
  animation:pulse 1.2s infinite}
.gt-scroll{white-space:nowrap;overflow:hidden;font-size:12.5px;color:#e5c9cc;
  text-overflow:ellipsis;flex:1}
.gt-item{margin-right:6px}
/* Threat Globe side menus: left live feed + right intel */
.globe-threats{position:absolute;left:18px;top:322px;bottom:48px;width:210px;
  background:rgba(14,4,8,.66);border:1px solid rgba(239,68,68,.35);border-radius:12px;
  padding:12px 12px 8px;backdrop-filter:blur(7px);z-index:6;display:flex;flex-direction:column;overflow:hidden}
.globe-intel{position:absolute;right:18px;top:70px;bottom:48px;width:236px;
  background:rgba(14,4,8,.66);border:1px solid rgba(239,68,68,.35);border-radius:12px;
  padding:12px 12px 8px;backdrop-filter:blur(7px);z-index:6;display:flex;flex-direction:column;overflow-y:auto}
.tl-list{overflow-y:auto;flex:1;margin:0 -4px;padding:0 4px}
.tl-list::-webkit-scrollbar,.globe-intel::-webkit-scrollbar{width:4px}
.tl-list::-webkit-scrollbar-thumb,.globe-intel::-webkit-scrollbar-thumb{background:rgba(239,68,68,.4);border-radius:4px}
.tl-row{display:flex;gap:7px;align-items:flex-start;padding:6px 2px;border-bottom:1px solid rgba(239,68,68,.12)}
.tl-row:last-child{border-bottom:none}
.tl-dot{width:8px;height:8px;border-radius:50%;margin-top:3px;flex:none;box-shadow:0 0 6px currentColor;background:currentColor}
.tl-body{flex:1;min-width:0}
.tl-name{font-size:11.5px;font-weight:700;color:#ffd9dd;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-meta{font-size:10px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tl-blk{color:#ff8a8a;font-weight:700;font-size:9px;border:1px solid rgba(255,138,138,.5);border-radius:4px;padding:0 3px;margin-left:5px}
.tl-empty{font-size:11px;color:var(--muted);padding:8px 2px}
.intel-sec{margin-bottom:13px}
.intel-h{font-size:9.5px;letter-spacing:1px;color:#ff9aa2;margin-bottom:7px;font-weight:700}
.ib-row{margin-bottom:7px}
.ib-top{display:flex;justify-content:space-between;gap:8px;font-size:11px;color:#e5c9cc;margin-bottom:3px}
.ib-top span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ib-top b{color:#fff;font-weight:800;flex:none}
.ib-bar{height:5px;border-radius:3px;background:rgba(239,68,68,.15);overflow:hidden}
.ib-fill{height:100%;border-radius:3px;transition:width .5s ease}
.idf-row{display:flex;justify-content:space-between;font-size:11px;color:#e5c9cc;padding:4px 0;border-bottom:1px solid rgba(239,68,68,.12)}
.idf-row:last-child{border-bottom:none}
.idf-row b{color:#fff;font-weight:700}
.sev-critical{color:#ff2d55}.sev-high{color:#ff6b35}.sev-medium{color:#f5b301}.sev-low{color:#38bdf8}.sev-info{color:#38bdf8}
.bg-critical{background:#ff2d55}.bg-high{background:#ff6b35}.bg-medium{background:#f5b301}.bg-low{background:#38bdf8}.bg-info{background:#38bdf8}
@media(max-width:600px){
  .globe-metrics{width:150px;top:64px;left:10px;padding:9px 10px}
  .gm-n{font-size:16px}
  .view-ctrls{top:10px;right:10px}
  .vc{padding:7px 10px;font-size:12px}
  .globe-threats,.globe-intel{display:none}
}

/* ===== AI-era banner ===== */
.era-banner{background:linear-gradient(90deg,rgba(168,85,247,.16),rgba(34,211,238,.10));
  border:1px solid rgba(168,85,247,.35);border-radius:12px;padding:11px 16px;margin-bottom:16px;
  font-size:13.5px;color:#e5d6ff}
.era-banner b{color:#c99bff}

/* ===== Threat Encyclopedia — AI (left) vs classic (right) ===== */
.enc-split{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start}
.enc-col{border:1px solid var(--line);border-radius:12px;padding:12px;background:rgba(10,17,30,.4)}
.ai-col{border-color:rgba(168,85,247,.4);
  background:linear-gradient(180deg,rgba(168,85,247,.09),rgba(10,17,30,.4))}
.enc-col-h{display:flex;justify-content:space-between;align-items:center;font-size:13.5px;
  font-weight:700;letter-spacing:.3px;margin-bottom:11px;padding-bottom:9px;border-bottom:1px solid var(--line)}
.enc-col-h.ai{color:#c99bff;border-bottom-color:rgba(168,85,247,.3)}
.ech-n{font-size:11px;font-weight:700;color:var(--muted);background:var(--panel2);
  border-radius:20px;padding:2px 9px}
.ai-col .ech-n{color:#c99bff;background:rgba(168,85,247,.15)}
.enc-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;align-content:start}
.enc-card{background:var(--panel2);border:1px solid var(--line);border-top:3px solid #888;
  border-radius:10px;padding:11px 12px}
.ec-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.ec-cls{font-size:9px;font-weight:800;letter-spacing:.5px;padding:2px 7px;border-radius:5px;
  background:rgba(56,189,248,.14);color:#38bdf8}
.ec-cls.ai{background:rgba(168,85,247,.18);color:#c99bff}
.ec-cls.network{background:rgba(245,179,1,.15);color:#f5b301}
.ec-i{background:none;border:none;color:var(--muted);font-size:16px;cursor:pointer;line-height:1;padding:0}
.ec-i:hover{color:var(--accent)}
.ec-name{font-size:13px;font-weight:600;display:flex;align-items:center;gap:7px;line-height:1.25;margin-bottom:9px}
.ec-name .sd{width:8px;height:8px;border-radius:2px;flex:none}
.ec-foot{display:flex;justify-content:space-between;align-items:center}
.ec-sev{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:2px 7px;border-radius:5px}
.ec-sev.critical{background:rgba(255,45,85,.15);color:var(--crit)}
.ec-sev.high{background:rgba(255,107,53,.15);color:var(--high)}
.ec-sev.medium{background:rgba(245,179,1,.15);color:var(--med)}
.ec-sev.low{background:rgba(56,189,248,.15);color:var(--low)}
.ec-n{font-size:11px;color:var(--muted)}

/* known vulns panel */
.enc-vulns{background:rgba(10,17,30,.5);border:1px solid var(--line);border-radius:10px;padding:12px}
.ev-h{font-size:13px;font-weight:700;letter-spacing:.3px}
.ev-sub{font-size:11px;margin:2px 0 10px}
.vuln-list{display:flex;flex-direction:column;gap:7px;max-height:420px;overflow-y:auto}
.vuln-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:9px}
.vuln{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--muted);
  border-radius:8px;padding:8px 10px}
.vuln.ai{border-left-color:#a855f7}.vuln.web{border-left-color:#38bdf8}.vuln.network{border-left-color:#f5b301}
.vv-top{display:flex;justify-content:space-between;align-items:center}
.vv-id{font-family:ui-monospace,Consolas,monospace;font-size:11px;color:var(--accent);font-weight:600}
.vv-sev{font-size:9px;font-weight:700;text-transform:uppercase;padding:1px 6px;border-radius:4px}
.vv-sev.critical{background:rgba(255,45,85,.15);color:var(--crit)}
.vv-sev.high{background:rgba(255,107,53,.15);color:var(--high)}
.vv-sev.medium{background:rgba(245,179,1,.15);color:var(--med)}
.vv-name{font-size:12.5px;margin-top:4px;color:var(--txt)}
.ai-tag{font-size:9px;background:rgba(168,85,247,.2);color:#c99bff;padding:1px 5px;border-radius:4px;margin-left:4px}

/* info popover */
.info-overlay{position:fixed;inset:0;background:rgba(2,6,12,.5);opacity:0;pointer-events:none;transition:.2s;z-index:60}
.info-overlay.show{opacity:1;pointer-events:auto}
.info-pop{position:fixed;left:50%;top:50%;transform:translate(-50%,-46%) scale(.96);opacity:0;
  pointer-events:none;width:min(92vw,440px);background:var(--panel);border:1px solid var(--line);
  border-radius:14px;padding:18px 20px;z-index:61;transition:.22s;box-shadow:0 20px 60px rgba(0,0,0,.55)}
.info-pop.show{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}
.ip-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
#ipName{font-size:16px;font-weight:700;display:flex;align-items:center;gap:8px}
#ipName .sd{width:10px;height:10px;border-radius:3px}
.ip-close{background:none;border:none;color:var(--muted);font-size:24px;cursor:pointer;line-height:1}
.ip-close:hover{color:var(--txt)}
.ip-desc{font-size:13.5px;line-height:1.6;color:#dbe6f5;margin-bottom:14px}
.ip-row{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-top:1px solid var(--line);font-size:12.5px}
.ip-row span{color:var(--muted);letter-spacing:.5px}
.ip-ex-h{font-size:11px;letter-spacing:1px;color:var(--accent);margin:14px 0 6px;font-weight:700}
.ip-ex{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:10px 12px;
  font-family:ui-monospace,Consolas,monospace;font-size:12px;color:#ffd7dc;word-break:break-all}
.ai-sim{margin-top:8px;align-items:center}
.ai-label{font-size:12px;color:#c99bff;font-weight:600;margin-right:2px}
.ai-sim button:not(.test){border-color:rgba(168,85,247,.4)}
.ai-sim button:not(.test):hover{border-color:#a855f7;background:rgba(168,85,247,.12)}
@media(max-width:820px){ .enc-split{grid-template-columns:1fr} }

/* ===== Findings management board (CY·FOCUS-inspired) ===== */
.findings-main{max-width:1360px;margin:0 auto;padding:18px}
.fh h1{font-size:24px;margin:4px 0 2px;letter-spacing:.5px}
.fh .muted{margin:0 0 14px}
.fkpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}
.fkpi{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:15px 18px;
  box-shadow:var(--shadow);position:relative;overflow:hidden}
.fkpi::after{content:"";position:absolute;right:-20px;top:-20px;width:70px;height:70px;border-radius:50%;
  background:radial-gradient(circle,rgba(34,211,238,.14),transparent 70%)}
.fkpi.crit::after{background:radial-gradient(circle,rgba(255,45,85,.16),transparent 70%)}
.fkpi.ok::after{background:radial-gradient(circle,rgba(34,197,94,.16),transparent 70%)}
.fk-top{font-size:12px;color:var(--muted);letter-spacing:.4px}
.fk-n{font-size:32px;font-weight:800;margin:6px 0 2px;line-height:1}
.fkpi.crit .fk-n{color:var(--crit)} .fkpi.ok .fk-n{color:var(--grn)}
.fk-sub{font-size:11px;color:var(--muted)}
.board-hint{font-size:12px;margin-bottom:10px}
.board{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;align-items:start}
.col{background:rgba(10,17,30,.5);border:1px solid var(--line);border-radius:12px;padding:10px 9px;min-height:120px}
.col-h{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;margin-bottom:10px;padding:0 3px}
.ch-dot{width:9px;height:9px;border-radius:50%;background:var(--muted)}
.ch-dot.open{background:#38bdf8}.ch-dot.triaged{background:#f5b301}
.ch-dot.in_progress{background:#a855f7}.ch-dot.resolved{background:#22c55e}.ch-dot.canceled{background:#64748b}
.col-n{margin-left:auto;color:var(--muted);font-weight:700}
.col-body{display:flex;flex-direction:column;gap:9px;min-height:60px;border-radius:8px;padding:2px;transition:.15s}
.col-body.drop{background:rgba(34,211,238,.07);outline:1px dashed rgba(34,211,238,.4)}
.col-empty{color:var(--muted);text-align:center;font-size:12px;padding:10px}
.fcard{background:var(--panel2);border:1px solid var(--line);border-left:3px solid #888;border-radius:10px;
  padding:10px 11px;cursor:grab;transition:.15s;box-shadow:0 2px 8px rgba(0,0,0,.25)}
.fcard:hover{border-color:var(--accent);transform:translateY(-1px)}
.fcard.dragging{opacity:.5;transform:rotate(2deg)}
.fc-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}
.fc-id{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:var(--txt);display:flex;align-items:center;gap:6px;font-weight:600}
.sd{width:8px;height:8px;border-radius:2px;flex:none}
.fc-cvss{font-size:12px;font-weight:800;padding:1px 7px;border-radius:6px;background:rgba(255,255,255,.06)}
.fc-cvss.critical{color:var(--crit)}.fc-cvss.high{color:var(--high)}.fc-cvss.medium{color:var(--med)}.fc-cvss.low{color:var(--low)}
.fc-title{font-size:13px;font-weight:600;margin-bottom:3px;line-height:1.3}
.fc-asset{font-size:11px;color:var(--muted);font-family:ui-monospace,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fc-foot{display:flex;align-items:center;gap:8px;margin-top:8px}
.fc-date{font-size:11px;color:var(--muted)}
.fc-blk{font-size:11px}
.fc-av{margin-left:auto;width:22px;height:22px;border-radius:50%;background:linear-gradient(135deg,var(--accent),#0ea5b7);
  color:#04121a;font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center}

/* drawer */
.drawer-overlay{position:fixed;inset:0;background:rgba(2,6,12,.55);opacity:0;pointer-events:none;
  transition:.25s;z-index:40}
.drawer-overlay.show{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(440px,94vw);background:var(--panel);
  border-left:1px solid var(--line);box-shadow:-10px 0 40px rgba(0,0,0,.5);z-index:41;
  transform:translateX(100%);transition:transform .28s ease;overflow-y:auto}
.drawer.open{transform:none}
.drawer-head{display:flex;justify-content:space-between;align-items:center;padding:16px 18px 8px}
.d-fid{font-family:ui-monospace,Consolas,monospace;font-size:18px;font-weight:800;color:var(--accent)}
.d-close{background:none;border:none;color:var(--muted);font-size:24px;cursor:pointer;line-height:1}
.d-close:hover{color:var(--txt)}
.drawer-actions{display:flex;gap:8px;padding:0 18px 14px;border-bottom:1px solid var(--line)}
.drawer-actions button{flex:1;padding:9px;border-radius:8px;border:1px solid var(--line);cursor:pointer;
  background:var(--panel2);color:var(--txt);font-size:12px;font-weight:600}
.drawer-actions .d-resolve{background:linear-gradient(90deg,#e5484d,#c0392b);border:none;color:#fff}
.drawer-actions button:hover{border-color:var(--accent)}
.drawer-body{padding:14px 18px 30px}
.d-name{font-size:15px;font-weight:700;border-left:3px solid #888;padding-left:10px;margin-bottom:16px}
.d-sec-h{font-size:12px;letter-spacing:1px;color:var(--accent);font-weight:700;margin:16px 0 8px}
.d-rows>div{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px solid rgba(28,44,71,.5);font-size:12.5px}
.d-rows span{color:var(--muted);letter-spacing:.5px}
.d-rows b{text-align:right;color:var(--txt)}
.d-rows b.cap{text-transform:capitalize}
.assign{color:var(--accent);font-size:11px;margin-left:6px;text-decoration:none}
.d-evi{display:flex;flex-direction:column;gap:6px}
.evi{display:grid;grid-template-columns:60px 1fr;gap:8px;font-size:11.5px;background:var(--panel2);
  padding:6px 9px;border-radius:8px;align-items:center}
.evi-t{color:var(--muted);font-family:ui-monospace,monospace}
.evi-n{color:var(--txt);font-weight:600}
.evi-p{grid-column:2;color:var(--muted);font-family:ui-monospace,monospace;font-size:11px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.d-hist{display:flex;flex-direction:column;gap:7px}
.hist{font-size:12px;color:var(--muted);line-height:1.4;padding-left:12px;border-left:2px solid var(--line)}
.h-a{color:var(--accent);font-weight:600}
.h-t{color:var(--muted);font-size:11px}
@media(max-width:1000px){
  .board{grid-template-columns:repeat(2,1fr)}
  .fkpis{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:560px){ .board{grid-template-columns:1fr} }

/* ===== Compact "target lock" focus card (globe + map camera-follow) ===== */
/* Positioned TOP-CENTER — the one zone clear of every panel (metrics top-left,
   intel/threats on the sides, view-ctrls top-right, console/ticker at the
   bottom), so the attacker-IP lock no longer covers the map/globe. */
/* Positioned on the EMPTY side, opposite the attack (side set by JS per attack)
   so it never covers the arcs/target in the centre of the map or globe. */
#focus-card{position:fixed;top:38%;right:20px;z-index:30;width:250px;
  background:rgba(10,6,10,.82);border:1px solid rgba(255,45,85,.45);border-left-width:3px;
  border-radius:10px;padding:11px 13px;backdrop-filter:blur(7px);
  font-family:ui-monospace,Consolas,monospace;color:#ffd7dc;
  transform:translateY(-8px);opacity:0;pointer-events:none;transition:opacity .35s ease,transform .35s ease;
  box-shadow:0 8px 30px rgba(255,20,45,.25)}
#focus-card.show{transform:translateY(0);opacity:1}
#focus-card.critical{border-color:#ff2d55}
#focus-card.high{border-color:#ff6b35}
#focus-card.medium{border-color:#f5b301}
#focus-card.low{border-color:#38bdf8}
.fc-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}
.fc-lock{font-size:10px;letter-spacing:1.5px;color:#ff5a6e;animation:cgflash 1.1s infinite}
.fc-sev{font-size:9px;font-weight:800;padding:2px 7px;border-radius:5px;letter-spacing:.5px}
.fc-sev.critical{background:rgba(255,45,85,.18);color:#ff2d55}
.fc-sev.high{background:rgba(255,107,53,.18);color:#ff6b35}
.fc-sev.medium{background:rgba(245,179,1,.18);color:#f5b301}
.fc-sev.low{background:rgba(56,189,248,.18);color:#38bdf8}
.fc-name{font-size:13.5px;font-weight:700;color:#fff;margin-bottom:8px;line-height:1.3}
.fc-blk{font-size:10px;color:#ff8a8a;font-weight:700}
.fc-row{display:flex;justify-content:space-between;gap:10px;font-size:11.5px;padding:2.5px 0;
  border-top:1px solid rgba(255,45,85,.12)}
.fc-row span{color:#9a7b80;letter-spacing:.5px}
.fc-row b{color:#ffe4e8;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:62%}
@media(max-width:600px){ #focus-card{width:min(80vw,240px);left:50%;right:auto;top:72px} }

/* ===== Cinematic threat alert FX ===== */
#cgfx{position:fixed;inset:0;z-index:9999;pointer-events:none}
#cgfx-flash{display:none}
@keyframes cgflash{0%,100%{opacity:0}50%{opacity:1}}
/* non-blocking corner toast (never covers the screen) */
#cgfx-card{position:fixed;right:16px;top:66px;left:auto;transform:translateX(26px);
  width:min(90vw,320px);padding:12px 15px;text-align:left;opacity:0;
  background:linear-gradient(180deg,rgba(20,2,6,.95),rgba(8,1,3,.97));
  border:1px solid rgba(255,45,85,.5);border-left-width:3px;border-radius:12px;overflow:hidden;
  box-shadow:0 8px 30px rgba(255,20,45,.28);
  transition:opacity .3s,transform .3s;font-family:ui-monospace,Consolas,monospace;
  pointer-events:none}
#cgfx.show #cgfx-card{opacity:1;transform:none}
.cgfx-scan{position:absolute;inset:0;pointer-events:none;background:
  repeating-linear-gradient(0deg,rgba(255,60,80,.06) 0,rgba(255,60,80,.06) 1px,transparent 2px,transparent 4px)}
.cgfx-top{font-size:12.5px;font-weight:800;letter-spacing:1px;color:#ff2d55;margin-bottom:8px;
  text-shadow:0 0 10px rgba(255,45,85,.7)}
.cgfx-chev{color:#ff6b35}
@keyframes cgglitch{0%{transform:translateX(0)}25%{transform:translate(-1.5px,.5px)}
  50%{transform:translate(1.5px,-.5px)}75%{transform:translate(-1px,0)}100%{transform:translateX(0)}}
.cgfx-reticle{display:none}
.cgfx-reticle-off{margin:14px auto 8px;width:112px;height:112px}
.cgfx-reticle svg{width:100%;height:100%;stroke:#ff2d55;fill:none;stroke-width:1.6}
.cgfx-reticle .r1{stroke:rgba(255,45,85,.6);animation:cgspin 4s linear infinite;transform-origin:60px 60px}
.cgfx-reticle .r2{stroke:rgba(255,107,53,.7);animation:cgspin 3s linear infinite reverse;transform-origin:60px 60px;stroke-dasharray:8 6}
.cgfx-reticle .rc{fill:#ff2d55;stroke:none;animation:cgflash .8s infinite}
@keyframes cgspin{to{transform:rotate(360deg)}}
.cgfx-rows{text-align:left;font-size:12.5px;margin:6px auto 4px;max-width:420px}
.cgfx-rows>div{display:flex;justify-content:space-between;gap:12px;padding:4px 0;
  border-bottom:1px solid rgba(255,45,85,.14)}
.cgfx-rows span{color:#8a6b70;letter-spacing:1px}
.cgfx-rows b{color:#ffd7dc;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:60%}
.cgfx-foot{margin-top:12px;font-size:10.5px;letter-spacing:2px;color:#ff6b6b;opacity:.8}
#cgfx-siren{pointer-events:auto;position:fixed;bottom:44px;right:16px;z-index:10000;
  background:rgba(10,2,6,.82);border:1px solid rgba(255,45,85,.4);color:#ff9aa7;
  border-radius:9px;padding:8px 12px;font-size:12px;font-weight:700;cursor:pointer;
  letter-spacing:.5px;backdrop-filter:blur(6px)}
#cgfx-siren.on{color:#7CFF9B;border-color:rgba(34,197,94,.5);background:rgba(4,16,9,.8)}
#cgfx-hud{pointer-events:none;position:fixed;bottom:44px;left:16px;z-index:10000;
  font-size:11.5px;letter-spacing:1.5px;color:#7CFF9B;font-family:ui-monospace,monospace;
  background:rgba(4,16,9,.6);border:1px solid rgba(34,197,94,.3);border-radius:20px;
  padding:5px 12px;display:inline-flex;align-items:center;gap:7px;backdrop-filter:blur(6px)}
#cgfx-hud .dot{width:8px;height:8px;border-radius:50%;background:#22c55e;animation:pulse 1.4s infinite}
body.cg-shake{animation:cgshake .5s}
@keyframes cgshake{0%,100%{transform:translate(0,0)}20%{transform:translate(-3px,2px)}
  40%{transform:translate(3px,-2px)}60%{transform:translate(-2px,-1px)}80%{transform:translate(2px,1px)}}
/* keep the HUD/siren clear of the map/globe bottom bars */
.map-body #cgfx-hud,.globe-body #cgfx-hud{bottom:44px}
@media(max-width:600px){
  #cgfx-card{width:94vw;padding:16px}
  .cgfx-top{font-size:15px}
  #cgfx-hud{font-size:10px;left:8px;bottom:42px}
  #cgfx-siren{right:8px;bottom:42px;padding:6px 9px}
}

/* Responsive */
@media(max-width:820px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .grid{grid-template-columns:1fr}
  .span2{grid-column:span 1}
  .settings form{grid-template-columns:1fr}
  .save-row{grid-column:span 1}
  .sim-row button.test{margin-left:0;width:100%}
}
@media(max-width:420px){
  .kpi-num{font-size:24px}
  main{padding:12px}
}


/* ================================================================
   SENTINEL - production-grade NOC design system (body.noc only)
   ================================================================ */
body.noc{
  --n-bg:#080b12; --n-bg2:#0b0f18; --n-card:#0e1420; --n-card2:#111827;
  --n-line:#1b2536; --n-line2:#243247; --n-txt:#e6edf6; --n-mut:#8595ad;
  --n-cyan:#22d3ee; --n-violet:#a78bfa; --n-grn:#34d399;
  background:
    radial-gradient(900px 520px at 6% -10%, rgba(34,211,238,.10), transparent 60%),
    radial-gradient(900px 520px at 96% -10%, rgba(167,139,250,.10), transparent 60%),
    linear-gradient(180deg,#0a0e17,#070a10) fixed;
  color:var(--n-txt);font-size:14px}
body.noc::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.55;
  background:
    linear-gradient(rgba(120,160,220,.035) 1px,transparent 1px) 0 0/100% 36px,
    linear-gradient(90deg,rgba(120,160,220,.035) 1px,transparent 1px) 0 0/36px 100%;
  -webkit-mask-image:radial-gradient(120% 90% at 50% 0%,#000 40%,transparent 85%);
          mask-image:radial-gradient(120% 90% at 50% 0%,#000 40%,transparent 85%)}
.noc main{position:relative;z-index:1;max-width:1320px}

/* topbar */
.noc .topbar{background:rgba(9,13,21,.82);border-bottom:1px solid var(--n-line);
  box-shadow:0 8px 40px rgba(0,0,0,.35)}
.noc .logo{font-weight:700}
.noc .logo .shield{filter:drop-shadow(0 0 12px var(--n-cyan))}
.noc nav a{font-size:13px;border-radius:9px}
.noc nav a.active{background:linear-gradient(180deg,rgba(34,211,238,.22),rgba(34,211,238,.06));
  color:#eafcff;box-shadow:inset 0 0 0 1px rgba(34,211,238,.35)}
.noc .status-pill{background:rgba(52,211,153,.12);border-color:rgba(52,211,153,.4);color:var(--n-grn)}

/* ---- command header (hero) ---- */
.hero{display:flex;justify-content:space-between;align-items:center;gap:18px;flex-wrap:wrap;
  background:linear-gradient(110deg,rgba(16,24,40,.9),rgba(13,17,28,.72));
  border:1px solid var(--n-line2);border-radius:18px;padding:16px 22px;margin-bottom:16px;
  position:relative;overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,.35)}
.hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(600px 200px at 88% 120%,rgba(34,211,238,.14),transparent 70%)}
.hero-status{display:flex;align-items:center;gap:16px;z-index:1}
.hs-ring{width:44px;height:44px;border-radius:50%;position:relative;flex:none;
  background:radial-gradient(circle,rgba(52,211,153,.25),transparent 68%);
  box-shadow:0 0 0 1px rgba(52,211,153,.4) inset}
.hs-ring::before{content:"";position:absolute;inset:-6px;border-radius:50%;
  border:2px solid rgba(52,211,153,.5);animation:pulse 1.8s infinite}
.hs-core{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:14px;height:14px;border-radius:50%;background:var(--n-grn);box-shadow:0 0 14px var(--n-grn)}
.hs-title{font-size:18px;font-weight:800;letter-spacing:1px;color:#eafcf4}
.hs-sub{font-size:12px;color:var(--n-mut);margin-top:2px}
.hero-metrics{display:flex;align-items:center;gap:22px;z-index:1}
.hm{text-align:center}
.hm b{display:block;font-size:26px;font-weight:800;line-height:1;letter-spacing:-.5px;
  font-family:ui-monospace,"Consolas",monospace;color:#fff}
.hm span{font-size:10px;letter-spacing:1.2px;text-transform:uppercase;color:var(--n-mut)}
.hm-div{width:1px;height:34px;background:var(--n-line2)}
.hm .lvl{font-family:inherit;font-size:20px;padding:2px 10px;border-radius:8px}
.hm .lvl.low{color:var(--n-grn);background:rgba(52,211,153,.12)}
.hm .lvl.guarded{color:#eab308;background:rgba(234,179,8,.12)}
.hm .lvl.elevated{color:var(--high);background:rgba(255,107,53,.12)}
.hm .lvl.severe,.hm .lvl.critical{color:var(--crit);background:rgba(255,45,85,.14);
  animation:pulse 1.4s infinite}

/* ---- KPI tiles ---- */
.noc .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:16px}
.noc .kpi{background:linear-gradient(180deg,var(--n-card),var(--n-bg2));
  border:1px solid var(--n-line);border-radius:16px;padding:16px 16px 0;position:relative;
  overflow:hidden;box-shadow:0 4px 20px rgba(0,0,0,.3);
  transition:transform .2s,box-shadow .25s,border-color .2s}
.noc .kpi::before{content:"";position:absolute;left:0;top:0;height:3px;width:100%;
  background:var(--kc,var(--n-cyan));opacity:.9}
.noc .kpi[data-accent="orange"]{--kc:var(--high)}
.noc .kpi[data-accent="red"]{--kc:var(--crit)}
.noc .kpi[data-accent="green"]{--kc:var(--n-grn)}
.noc .kpi::after{content:none}
.noc .kpi:hover{transform:translateY(-4px);border-color:var(--n-line2);
  box-shadow:0 18px 44px rgba(0,0,0,.5)}
.kpi-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px}
.kpi-ico{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  font-size:19px;background:color-mix(in srgb,var(--kc,var(--n-cyan)) 16%,transparent);
  box-shadow:inset 0 0 20px color-mix(in srgb,var(--kc,var(--n-cyan)) 30%,transparent)}
.kpi-delta{font-size:11px;font-weight:700;font-family:ui-monospace,monospace;
  padding:3px 8px;border-radius:20px;background:rgba(52,211,153,.14);color:var(--n-grn);white-space:nowrap}
.kpi-delta.flat{background:rgba(133,149,173,.14);color:var(--n-mut)}
.noc .kpi-num{font-size:38px;font-weight:800;letter-spacing:-1px;line-height:1;
  font-family:ui-monospace,"Consolas",monospace;color:#fff}
.noc .kpi-lbl{margin-top:8px;font-size:11px;letter-spacing:.6px;text-transform:uppercase;color:var(--n-mut)}
.kpi-spark{display:block;height:38px;margin-top:12px;margin-left:-16px;width:calc(100% + 32px)}

/* ---- panels ---- */
.noc .grid{gap:16px}
.noc .panel{background:var(--n-card);border:1px solid var(--n-line);border-radius:16px;
  box-shadow:0 4px 20px rgba(0,0,0,.28)}
.noc .panel-h{border-bottom:1px solid var(--n-line);padding-bottom:11px;margin-bottom:13px}
.noc .panel-h h2{font-size:14px;font-weight:700;color:#eaf1fb;letter-spacing:.2px}
.noc .muted{color:var(--n-mut)}

/* ---- live feed as a clean log ---- */
.noc .feed{gap:0}
.noc .feed-item{background:transparent;border:none;border-left:3px solid transparent;
  border-bottom:1px solid var(--n-line);border-radius:0;padding:10px 12px;gap:12px;
  transition:background .12s}
.noc .feed-item:hover{background:rgba(34,211,238,.05)}
.noc .feed-item.critical{border-left-color:var(--crit)}
.noc .feed-item.high{border-left-color:var(--high)}
.noc .feed-item.medium{border-left-color:var(--med)}
.noc .fi-name{font-weight:600;font-size:13px}
.noc .fi-ip{color:#67e8f9}
.noc .fi-detail{color:var(--n-mut)}
.noc .sev{border-radius:6px;min-width:62px;text-align:center}
.noc .badge-block{background:rgba(52,211,153,.12);color:#6ee7b7;border-color:rgba(52,211,153,.35)}

/* ---- category bars ---- */
.noc .bar-track{height:8px;background:var(--n-bg2);border:1px solid var(--n-line)}
.noc .bar-fill{background:linear-gradient(90deg,var(--n-cyan),var(--n-violet))}
.noc .bar-lbl{color:var(--n-txt);font-weight:500}
.noc .bar-n{color:#eaf1fb;font-weight:700;font-family:ui-monospace,monospace}

/* ---- blocks / top ips / alerts ---- */
.noc .block-item,.noc .topip,.noc .alert-item{background:var(--n-bg2);border:1px solid var(--n-line)}
.noc .block-item .ip{color:#fca5a5;font-weight:600}
.noc .topip .ip{color:#67e8f9;font-weight:600}
.noc .block-item button{background:var(--n-card);border:1px solid var(--n-line2)}
.noc .topip .n{font-family:ui-monospace,monospace;color:var(--high)}

/* ---- scrollbars ---- */
.noc ::-webkit-scrollbar{width:9px;height:9px}
.noc ::-webkit-scrollbar-track{background:transparent}
.noc ::-webkit-scrollbar-thumb{background:rgba(34,211,238,.22);border-radius:9px;
  border:2px solid transparent;background-clip:padding-box}
.noc ::-webkit-scrollbar-thumb:hover{background:rgba(34,211,238,.4);background-clip:padding-box}

/* ---- simulator buttons ---- */
.noc .sim-row button{background:var(--n-bg2);border:1px solid var(--n-line2);border-radius:10px;
  font-weight:500;transition:.15s}
.noc .sim-row button:hover{border-color:var(--n-cyan);background:rgba(34,211,238,.1);
  transform:translateY(-1px)}

@media(max-width:900px){ .noc .kpis{grid-template-columns:repeat(2,1fr)} }
@media(max-width:600px){
  .noc .kpis{grid-template-columns:1fr}
  .hero{flex-direction:column;align-items:flex-start}
  .hero-metrics{gap:16px}
}

/* ================================================================
   OPS: mode/drill controls · red-team console · drag/expand panels
   ================================================================ */
/* ---- operations control bar ---- */
.ops-bar{display:flex;gap:14px;align-items:stretch;flex-wrap:wrap;margin-bottom:14px}
.ops-ctl{display:flex;align-items:center;gap:14px;justify-content:space-between;
  background:linear-gradient(180deg,#0e1420,#0b0f18);border:1px solid var(--n-line,#1b2536);
  border-radius:14px;padding:12px 16px;cursor:pointer;min-width:250px;user-select:none;
  transition:border-color .2s,box-shadow .2s}
.ops-ctl:hover{border-color:#2b3b55}
.oc-label{font-size:10px;letter-spacing:1.4px;color:#8595ad;text-transform:uppercase;display:block}
.oc-state{font-size:14px;font-weight:700;color:#e6edf6;font-family:ui-monospace,monospace}
.oc-switch{width:52px;height:28px;border-radius:20px;background:#1b2536;position:relative;
  transition:background .2s;flex:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.05)}
.oc-knob{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;
  background:#5a6b85;transition:.22s cubic-bezier(.4,1.3,.6,1)}
.ops-ctl.on .oc-switch{background:rgba(34,211,238,.35)}
.ops-ctl.on .oc-knob{left:27px;background:var(--n-cyan,#22d3ee);box-shadow:0 0 12px var(--n-cyan,#22d3ee)}
.ops-ctl.on .oc-state{color:#7fe3ff}
.ops-ctl.danger.on .oc-switch{background:rgba(255,45,85,.4)}
.ops-ctl.danger.on .oc-knob{background:#ff2d55;box-shadow:0 0 12px #ff2d55}
.ops-ctl.danger.on{border-color:rgba(255,45,85,.5);box-shadow:0 0 26px -8px rgba(255,45,85,.6)}
.ops-ctl.danger.on .oc-state{color:#ff8a9c}
.ops-redteam{margin-left:auto;background:linear-gradient(180deg,#e5484d,#b0242a);border:none;
  color:#fff;font-weight:800;letter-spacing:.5px;border-radius:14px;padding:12px 22px;cursor:pointer;
  font-size:14px;box-shadow:0 8px 26px -8px rgba(229,72,77,.8);transition:transform .15s}
.ops-redteam:hover{transform:translateY(-2px)}

/* ---- mode / drill banner ---- */
.ops-banner{display:none;flex-direction:column;gap:6px;margin-bottom:14px}
.ob{padding:9px 15px;border-radius:11px;font-size:13px;font-weight:600;letter-spacing:.3px}
.ob.live{background:rgba(52,211,153,.1);border:1px solid rgba(52,211,153,.4);color:#7ff0c0}
.ob.drill{background:rgba(255,45,85,.1);border:1px solid rgba(255,45,85,.45);color:#ff9db1;
  animation:pulse 1.4s infinite}
body.drill-active .topbar{box-shadow:0 0 0 2px rgba(255,45,85,.3),0 6px 34px rgba(0,0,0,.4)}

/* ---- toast ---- */
#opsToast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,20px);opacity:0;
  background:rgba(10,16,26,.96);border:1px solid #243247;color:#e6edf6;padding:12px 20px;
  border-radius:12px;font-size:13px;z-index:100;pointer-events:none;transition:.3s;
  box-shadow:0 12px 40px rgba(0,0,0,.6);max-width:90vw;text-align:center}
#opsToast.show{opacity:1;transform:translate(-50%,0)}

/* ---- red team console (right drawer) ---- */
.rt-overlay{position:fixed;inset:0;background:rgba(2,6,12,.6);opacity:0;pointer-events:none;
  transition:.25s;z-index:70}
.rt-overlay.show{opacity:1;pointer-events:auto}
.rt-panel{position:fixed;top:0;right:0;bottom:0;width:min(460px,96vw);z-index:71;
  background:linear-gradient(180deg,#0d1420,#090d15);border-left:1px solid #2a1520;
  box-shadow:-16px 0 50px rgba(0,0,0,.6);transform:translateX(100%);transition:transform .3s ease;overflow-y:auto}
.rt-panel.open{transform:none}
.rt-head{display:flex;justify-content:space-between;align-items:center;padding:16px 18px;
  border-bottom:1px solid #1b2536;position:sticky;top:0;background:#0d1420;z-index:1}
.rt-badge{background:rgba(255,45,85,.16);color:#ff2d55;font-size:11px;font-weight:800;
  padding:2px 8px;border-radius:6px;letter-spacing:.5px}
.rt-close{background:none;border:none;color:#8595ad;font-size:24px;cursor:pointer;line-height:1}
.rt-close:hover{color:#fff}
.rt-body{padding:16px 18px 30px}
.rt-lead{font-size:13px;line-height:1.6;color:#a9b7cc;margin:0 0 16px}
.rt-scen{display:flex;flex-direction:column;gap:9px}
.rt-launch{display:flex;justify-content:space-between;align-items:center;background:#111827;
  border:1px solid #243247;border-radius:11px;padding:13px 15px;cursor:pointer;color:#e6edf6;
  font-size:14px;transition:.15s}
.rt-launch:hover{border-color:#ff2d55;background:#16101a;transform:translateX(3px)}
.rt-launch .sev{font-size:9px;font-weight:800;text-transform:uppercase;padding:2px 8px;border-radius:5px}
.sev.critical{background:rgba(255,45,85,.16);color:#ff2d55}
.sev.high{background:rgba(255,107,53,.16);color:#ff6b35}
/* active incident */
.rt-inc{border:1px solid #2a1520;border-left:3px solid #ff2d55;border-radius:12px;padding:13px 15px;
  background:rgba(255,45,85,.05);margin-bottom:16px}
.rt-inc.high{border-left-color:#ff6b35}
.rt-inc-h{display:flex;align-items:center;gap:10px;font-size:15px;margin-bottom:12px}
.rt-timers{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.rt-timers>div{background:#0b0f18;border:1px solid #1b2536;border-radius:9px;padding:8px 10px}
.rt-timers span{font-size:9px;letter-spacing:1px;color:#8595ad;display:block}
.rt-timers b{font-size:17px;font-family:ui-monospace,monospace;color:#fff}
.rt-play-h{font-size:11px;letter-spacing:.5px;color:#22d3ee;font-weight:700;margin:6px 0 9px}
.rt-play-h .muted{color:#8595ad;font-weight:400;letter-spacing:0}
.rt-steps{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.rt-step{display:flex;align-items:center;gap:11px;background:#111827;border:1px solid #243247;
  border-radius:10px;padding:11px 14px;cursor:pointer;color:#e6edf6;font-size:14px;font-weight:600;
  text-align:left;transition:.15s}
.rt-step:hover:not(.done){border-color:#22d3ee}
.rt-step .rs-i{width:24px;height:24px;border-radius:50%;background:#1b2536;display:flex;
  align-items:center;justify-content:center;font-size:12px;flex:none}
.rt-step.done{border-color:rgba(52,211,153,.45);background:rgba(52,211,153,.07);color:#7ff0c0;cursor:default}
.rt-step.done .rs-i{background:#34d399;color:#04140c}
.rt-resolve{width:100%;padding:13px;border:none;border-radius:11px;cursor:pointer;
  background:linear-gradient(180deg,#e5484d,#b0242a);color:#fff;font-weight:800;font-size:14px}
/* scorecard */
.rt-card{text-align:center}
.rt-grade{width:96px;height:96px;border-radius:50%;border:3px solid;display:flex;align-items:center;
  justify-content:center;font-size:46px;font-weight:800;margin:6px auto 12px;font-family:ui-monospace,monospace}
.rt-score{font-size:14px;color:#a9b7cc}.rt-score b{color:#fff;font-size:17px}
.rt-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:16px 0}
.rt-metrics>div{background:#0b0f18;border:1px solid #1b2536;border-radius:9px;padding:9px}
.rt-metrics span{font-size:9px;letter-spacing:1px;color:#8595ad;display:block}
.rt-metrics b{font-size:16px;font-family:ui-monospace,monospace;color:#fff}
.rt-gap-h{text-align:left;font-size:13px;font-weight:700;margin:14px 0 8px;color:#ffb0b0}
.rt-gaps{text-align:left;margin:0;padding-left:18px;color:#c9b6ba;font-size:12.5px;line-height:1.7}
.rt-again{margin-top:16px;width:100%;padding:11px;border:1px solid #243247;background:#111827;
  color:#e6edf6;border-radius:10px;cursor:pointer;font-weight:600}
.rt-hist-h{font-size:11px;letter-spacing:.5px;color:#8595ad;margin:18px 0 8px;text-transform:uppercase}
.rt-hist{display:flex;flex-direction:column;gap:6px}
.rt-hrow{display:flex;align-items:center;gap:10px;background:#0b0f18;border:1px solid #1b2536;
  border-radius:9px;padding:8px 11px;font-size:13px}
.rt-hrow .grade{width:24px;height:24px;border-radius:6px;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-family:ui-monospace,monospace}
.grade.gA{background:rgba(52,211,153,.16);color:#34d399}.grade.gB{background:rgba(34,211,238,.16);color:#22d3ee}
.grade.gC{background:rgba(245,179,1,.16);color:#f5b301}.grade.gD{background:rgba(255,107,53,.16);color:#ff6b35}
.grade.gF{background:rgba(255,45,85,.16);color:#ff2d55}
.rt-hrow .hn{flex:1}.rt-hrow .hs{color:#8595ad;font-family:ui-monospace,monospace;font-size:12px}

/* ---- panel drag + expand controls ---- */
.panel-ctl{display:flex;gap:4px;margin-left:auto}
.pc-grip,.pc-exp{background:none;border:none;color:#5a6b85;cursor:pointer;font-size:14px;
  line-height:1;padding:2px 5px;border-radius:6px;transition:.15s}
.pc-grip{cursor:grab}.pc-grip:active{cursor:grabbing}
.pc-grip:hover,.pc-exp:hover{color:#22d3ee;background:rgba(34,211,238,.1)}
.panel.dragging{opacity:.4;outline:2px dashed rgba(34,211,238,.5)}
.grid > .panel{transition:box-shadow .2s}
.panel.expanded{position:fixed;inset:64px 24px 24px;z-index:80;margin:0;overflow:auto;
  box-shadow:0 30px 90px rgba(0,0,0,.75);border-color:#2b3b55}
.panel.expanded .feed,.panel.expanded .blocklist,.panel.expanded .alertlog,
.panel.expanded .topips{max-height:calc(100vh - 190px)}
.panel.expanded canvas{height:auto}
body.has-expanded::after{content:"";position:fixed;inset:0;background:rgba(2,6,12,.66);z-index:79;
  backdrop-filter:blur(2px)}

@media(max-width:640px){
  .ops-bar{flex-direction:column}
  .ops-ctl{min-width:0}
  .ops-redteam{margin-left:0;width:100%}
  .panel.expanded{inset:56px 8px 8px}
}

/* ---- DEMO ⇄ PRODUCTION mode toggle ------------------------------------- */
.mode-toggle{display:inline-flex;align-items:center;gap:7px;cursor:pointer;
  font-family:inherit;font-weight:800;font-size:12px;letter-spacing:1.2px;
  padding:8px 14px;border-radius:8px;border:1px solid;background:rgba(6,14,10,.82);
  transition:box-shadow .3s,border-color .3s,color .3s,background .3s;white-space:nowrap}
.mode-toggle .mt-dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.mode-toggle.is-demo{border-color:#f5b301;color:#ffd166;background:rgba(245,179,1,.12)}
.mode-toggle.is-demo .mt-dot{background:#f5b301;box-shadow:0 0 8px #f5b301}
.mode-toggle.is-demo:hover{background:rgba(245,179,1,.2)}
.mode-toggle.is-prod{border-color:#ff2d55;color:#ff8a9c;background:rgba(255,45,85,.16);
  animation:mt-prod-pulse 1.5s ease-in-out infinite}
.mode-toggle.is-prod .mt-dot{background:#ff2d55;box-shadow:0 0 10px #ff2d55;
  animation:mt-dot-blink 1s steps(2,start) infinite}
.mode-toggle:disabled{opacity:.6;cursor:progress}
@keyframes mt-prod-pulse{0%,100%{box-shadow:0 0 0 rgba(255,45,85,0)}
  50%{box-shadow:0 0 16px rgba(255,45,85,.55)}}
@keyframes mt-dot-blink{50%{opacity:.25}}
.cmd-modeslot{margin-left:auto;display:flex;align-items:center}
.embed .mode-toggle,.embed .cmd-modeslot{display:none!important}
@media(max-width:640px){ .mode-toggle{font-size:11px;padding:6px 10px;letter-spacing:.6px} }

/* ================================================================
   AI Threat Intelligence console (/ai-intel)
   ================================================================ */
.aiti-hero{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;
  background:linear-gradient(110deg,rgba(168,85,247,.12),rgba(13,17,28,.6));
  border:1px solid rgba(168,85,247,.32);border-radius:18px;padding:18px 24px;margin-bottom:16px}
.aiti-hero h1{margin:0 0 4px;font-size:22px}
.aiti-hero .muted{margin:0;max-width:640px;line-height:1.5}
.aiti-stat{text-align:center;flex:none}
.aiti-stat b{display:block;font-size:30px;font-weight:800;font-family:ui-monospace,monospace;color:#c99bff}
.aiti-stat span{font-size:10px;letter-spacing:1px;text-transform:uppercase;color:#8595ad}

.aiti-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:16px;margin-bottom:16px;align-items:start}
#aiInput{width:100%;min-height:130px;background:#0a0e17;border:1px solid #243247;border-radius:12px;
  color:#e6edf6;padding:14px;font-family:ui-monospace,Consolas,monospace;font-size:13px;resize:vertical;line-height:1.5}
#aiInput:focus{outline:none;border-color:#a78bfa;box-shadow:0 0 0 3px rgba(168,85,247,.15)}
.aiti-actions{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.aiti-run{background:linear-gradient(180deg,#a855f7,#7c3aed);border:none;color:#fff;font-weight:700;
  padding:10px 24px;border-radius:10px;cursor:pointer;font-size:14px}
.aiti-run:hover{filter:brightness(1.1)}
.aiti-samp{background:#111827;border:1px solid #243247;color:#a9b7cc;padding:9px 12px;border-radius:9px;
  cursor:pointer;font-size:12px}
.aiti-samp:hover{border-color:#a78bfa;color:#e6edf6}
.aiti-load{color:#8595ad;padding:14px;text-align:center}

.aiti-result{margin-top:6px}
.ver{display:flex;align-items:center;gap:16px;background:#0b0f18;border:1px solid #1b2536;
  border-radius:12px;padding:14px 16px;margin-bottom:14px}
.ver-badge{font-size:20px;font-weight:800;letter-spacing:1px;border:2px solid;border-radius:10px;padding:6px 16px;font-family:ui-monospace,monospace}
.ver.malicious{box-shadow:inset 0 0 30px rgba(255,45,85,.1)}
.ver-risk{font-size:14px;color:#a9b7cc}.ver-risk b{font-size:18px}
.ver-sub{font-size:12px;color:#8595ad;margin-top:3px}
.fnd-h{font-size:11px;letter-spacing:.5px;text-transform:uppercase;color:#a78bfa;font-weight:700;margin:14px 0 9px}
.fnd{background:#0b0f18;border:1px solid #1b2536;border-left:3px solid #ff6b35;border-radius:11px;
  padding:12px 14px;margin-bottom:10px}
.fnd.ai{border-left-color:#a855f7;background:linear-gradient(180deg,rgba(168,85,247,.06),#0b0f18)}
.fnd-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.fnd-name{font-weight:700;font-size:14px;display:flex;align-items:center;gap:8px}
.sd{width:8px;height:8px;border-radius:2px;flex:none}
.fnd-cls{font-size:9px;font-weight:800;padding:2px 8px;border-radius:5px;background:rgba(56,189,248,.14);color:#38bdf8}
.fnd-cls.ai{background:rgba(168,85,247,.18);color:#c99bff}
.fnd-map{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:#a9b7cc;margin-bottom:8px}
.fnd-map span{background:#111827;border:1px solid #243247;padding:2px 9px;border-radius:20px}
.fnd-match{font-size:12px;color:#8595ad;margin-bottom:7px}
.fnd-match code{color:#ffd7dc;background:#160b12;padding:2px 7px;border-radius:5px;word-break:break-all}
.fnd-rem{font-size:12.5px;color:#7ff0c0;line-height:1.5}

/* feed */
.aiti-feed{align-self:start}
.aiti-src-h{font-size:11px;text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px}
.aiti-src{display:flex;flex-direction:column;gap:8px;max-height:360px;overflow-y:auto}
.src{background:#0b0f18;border:1px solid #1b2536;border-radius:9px;padding:9px 11px;font-size:12px;
  display:grid;grid-template-columns:1fr auto;gap:3px 8px;align-items:center}
.src-ip{font-family:ui-monospace,monospace;color:#c99bff;font-weight:600}
.src-geo{text-align:right;color:#cbd5e1}
.src-name{color:#ff9db1;font-size:11.5px}
.src .muted{text-align:right;font-size:11px}

/* technique library */
.aiti-tech{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.tech{background:#0b0f18;border:1px solid #1b2536;border-radius:12px;padding:13px 15px}
.tech-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.tech-name{font-weight:700;font-size:14px;display:flex;align-items:center;gap:8px}
.trend{font-size:10px;font-weight:800;color:#ff6b35;background:rgba(255,107,53,.14);padding:2px 8px;border-radius:20px}
.tech-desc{font-size:12.5px;color:#a9b7cc;line-height:1.5;margin-bottom:9px}
.tech-map{display:flex;flex-direction:column;gap:4px;font-size:11px;color:#8fb4d8;margin-bottom:9px}
.tech-foot{display:flex;justify-content:space-between;align-items:center;font-size:12px}
.tech-seen{font-family:ui-monospace,monospace;font-weight:700;color:#c99bff}

@media(max-width:900px){ .aiti-grid{grid-template-columns:1fr} }

/* ================================================================
   Alerts/recipients + malware-scan drawers, ops buttons
   ================================================================ */
.ops-btns{display:flex;gap:10px;margin-left:auto;flex-wrap:wrap}
.ops-btn{background:#111827;border:1px solid #243247;color:#e6edf6;font-weight:600;
  border-radius:14px;padding:12px 16px;cursor:pointer;font-size:13.5px;transition:.15s}
.ops-btn:hover{border-color:#22d3ee;background:#16233c;transform:translateY(-2px)}
.rt-badge.blue{background:rgba(34,211,238,.16);color:#22d3ee}

/* recipients */
.al-sound{display:flex;align-items:center;gap:9px;background:#0b0f18;border:1px solid #1b2536;
  border-radius:10px;padding:11px 13px;font-size:13px;margin-bottom:16px;cursor:pointer}
.al-sound input{width:17px;height:17px;accent-color:#22d3ee}
.al-head,.al-row{display:grid;grid-template-columns:1.1fr .7fr 1.1fr 26px 26px 24px;gap:7px;align-items:center}
.al-head{font-size:9px;letter-spacing:.5px;color:#8595ad;padding:0 2px 6px;text-transform:uppercase}
.al-head span:nth-child(4),.al-head span:nth-child(5){text-align:center}
.al-row{margin-bottom:8px}
.al-row input[type=text],.al-row input:not([type]){width:100%;background:#0a0e17;border:1px solid #243247;
  border-radius:8px;color:#e6edf6;padding:8px 9px;font-size:12.5px}
.al-row input.cc{text-align:center}
.al-row input[type=checkbox]{width:17px;height:17px;accent-color:#22d3ee;justify-self:center}
.al-del{background:none;border:none;color:#ff6b6b;font-size:18px;cursor:pointer;line-height:1}
.al-add{background:#111827;border:1px dashed #2b3b55;color:#a9b7cc;border-radius:10px;
  padding:10px;cursor:pointer;width:100%;font-size:13px;margin-top:6px}
.al-add:hover{border-color:#22d3ee;color:#e6edf6}

/* scan */
.sc-last{border:1px solid #243247;border-left-width:3px;border-radius:11px;padding:12px 14px;margin-bottom:16px;background:#0b0f18}
.sc-v{font-size:15px;font-weight:800;letter-spacing:1px;margin-bottom:5px}
.sc-sum{font-size:12.5px;color:#a9b7cc;line-height:1.5;margin-bottom:5px}
.sc-cfg{display:flex;flex-direction:column;gap:11px;margin-bottom:16px}
.sc-f{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px;color:#a9b7cc}
.sc-f.col{flex-direction:column;align-items:stretch;gap:6px}
.sc-f select,.sc-f input{background:#0a0e17;border:1px solid #243247;border-radius:8px;color:#e6edf6;
  padding:9px 11px;font-size:13px}
.sc-f select{text-transform:capitalize;min-width:120px}
.sc-actions{display:flex;gap:10px;margin-bottom:6px}
.sc-hist{display:flex;flex-direction:column;gap:6px}

/* ================================================================
   Vulnerability assessment (/pentest)
   ================================================================ */
.pt-hero{margin-bottom:16px}
.pt-hero h1{margin:0 0 6px;font-size:23px}
.pt-hero .muted{max-width:760px;line-height:1.6;margin:0}
.pt-hero code{background:#160b12;color:#ffd7dc;padding:1px 6px;border-radius:5px;font-size:12px}
.pt-form{margin-bottom:16px}
.pt-in{display:flex;gap:10px;margin-bottom:14px}
#ptUrl{flex:1;background:#0a0e17;border:1px solid #243247;border-radius:11px;color:#e6edf6;
  padding:13px 15px;font-size:14px;font-family:ui-monospace,Consolas,monospace}
#ptUrl:focus{outline:none;border-color:#22d3ee;box-shadow:0 0 0 3px rgba(34,211,238,.13)}
#ptRun{background:linear-gradient(180deg,#22d3ee,#0ea5b7);border:none;color:#04121a;font-weight:800;
  padding:13px 26px;border-radius:11px;cursor:pointer;font-size:14px;white-space:nowrap}
#ptRun:hover{filter:brightness(1.08)} #ptRun:disabled{opacity:.5;cursor:wait}
.pt-auth{display:flex;gap:11px;align-items:flex-start;background:rgba(245,179,1,.07);
  border:1px solid rgba(245,179,1,.3);border-radius:11px;padding:13px 15px;font-size:13px;
  line-height:1.5;color:#e6d3a7;cursor:pointer}
.pt-auth input{width:20px;height:20px;flex:none;margin-top:1px;accent-color:#f5b301}
.pt-note{font-size:12px;margin-top:10px;line-height:1.5}
.pt-msg{margin-top:12px;font-size:13px;min-height:18px}
.pt-msg.run{color:#22d3ee} .pt-msg.ok{color:#34d399} .pt-msg.warn{color:#ff8a9c}

/* report */
.pt-rep{margin-bottom:16px}
.pt-rep-h{display:flex;align-items:center;gap:20px;padding-bottom:16px;border-bottom:1px solid #1b2536;margin-bottom:14px}
.pt-grade{width:82px;height:82px;border:3px solid;border-radius:16px;display:flex;align-items:center;
  justify-content:center;font-size:36px;font-weight:800;font-family:ui-monospace,monospace;flex:none}
.pt-target{font-size:17px;font-weight:700;font-family:ui-monospace,monospace;word-break:break-all}
.pt-chips{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}
.pchip{font-size:11px;font-weight:700;padding:3px 10px;border-radius:20px}
.pchip.critical{background:rgba(255,45,85,.16);color:#ff2d55}
.pchip.high{background:rgba(255,107,53,.16);color:#ff6b35}
.pchip.medium{background:rgba(245,179,1,.16);color:#f5b301}
.pchip.low{background:rgba(56,189,248,.16);color:#38bdf8}
.pchip.info{background:rgba(133,149,173,.16);color:#8595ad}
.pt-findings{display:flex;flex-direction:column;gap:10px}
.pt-fnd{background:#0b0f18;border:1px solid #1b2536;border-left:3px solid #888;border-radius:11px;padding:12px 15px}
.pf-top{display:flex;align-items:center;gap:11px;margin-bottom:7px}
.pf-sev{font-size:9.5px;font-weight:800;padding:2px 8px;border-radius:5px}
.pf-sev.critical{background:rgba(255,45,85,.16);color:#ff2d55}
.pf-sev.high{background:rgba(255,107,53,.16);color:#ff6b35}
.pf-sev.medium{background:rgba(245,179,1,.16);color:#f5b301}
.pf-sev.low{background:rgba(56,189,248,.16);color:#38bdf8}
.pf-sev.info{background:rgba(133,149,173,.16);color:#8595ad}
.pf-title{font-weight:700;font-size:14px}
.pf-ev{font-size:12px;color:#8595ad;margin-bottom:6px}
.pf-ev code{background:#160b12;color:#ffd7dc;padding:1px 7px;border-radius:5px;word-break:break-all}
.pf-rem{font-size:12.5px;color:#7ff0c0;line-height:1.5}

/* history */
.pt-hist{display:flex;flex-direction:column;gap:7px}
.pt-hrow{display:grid;grid-template-columns:44px 1fr auto auto;gap:12px;align-items:center;
  background:#0b0f18;border:1px solid #1b2536;border-radius:9px;padding:9px 12px;font-size:13px}
.pt-hg{width:38px;height:30px;border:2px solid;border-radius:8px;display:flex;align-items:center;
  justify-content:center;font-weight:800;font-family:ui-monospace,monospace}
.pt-ht{font-family:ui-monospace,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pt-hc{color:#a9b7cc;font-size:12px;white-space:nowrap}

/* ================================================================
   Activity mode toggle (All ⇄ Threats) + user legend  (map + globe)
   ================================================================ */
.vc.viewmode{font-weight:700}
.vc.viewmode.all{border-color:rgba(34,197,94,.5);color:#7ff0c0;background:rgba(34,197,94,.1)}
.vc.viewmode:not(.all){border-color:rgba(255,45,85,.5);color:#ff9db1;background:rgba(255,45,85,.1)}
.mc-n.grn,.gm-n.grn{color:#34d399}
.map-legend,.globe-legend{position:absolute;z-index:6;display:flex;gap:16px;
  background:rgba(8,14,22,.7);border:1px solid var(--line);border-radius:20px;
  padding:7px 15px;font-size:11.5px;color:#c9d6e6;backdrop-filter:blur(6px)}
.map-legend{left:16px;bottom:calc(34vh + 14px)}
.globe-legend{left:50%;transform:translateX(-50%);bottom:52px}
.lg-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:middle}
.lg-dot.atk{background:#ff2d55;box-shadow:0 0 7px #ff2d55}
.lg-dot.usr{background:#22c55e;box-shadow:0 0 7px #22c55e}
.lg-dot.srv{background:#22d3ee;box-shadow:0 0 7px #22d3ee}
@media(max-width:640px){ .map-legend,.globe-legend{display:none!important} }

/* "Show me" locate toast */
#locToast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,20px);opacity:0;
  background:rgba(6,20,14,.96);border:1px solid rgba(34,197,94,.5);color:#c9f5df;
  padding:12px 20px;border-radius:12px;font-size:13px;z-index:100;pointer-events:none;
  transition:.3s;box-shadow:0 12px 40px rgba(0,0,0,.6);max-width:90vw;text-align:center}
#locToast.show{opacity:1;transform:translate(-50%,0)}

/* Operating-mode toggle: DEMO = amber (active), LIVE = cyan — never dead grey */
.ops-ctl.demo{border-color:rgba(245,179,1,.45)}
.ops-ctl.demo .oc-switch{background:rgba(245,179,1,.28)}
.ops-ctl.demo .oc-knob{background:#f5b301;box-shadow:0 0 10px rgba(245,179,1,.7)}
.ops-ctl.demo .oc-state{color:#f5c748}
.ops-ctl{cursor:pointer}
.ops-ctl:hover .oc-switch{filter:brightness(1.15)}

/* map/globe legend + YOU pin */
.mg-legend{position:absolute;left:50%;transform:translateX(-50%);top:60px;z-index:6;display:flex;gap:14px;flex-wrap:wrap;
  background:rgba(6,14,24,.72);border:1px solid var(--line);border-radius:20px;padding:6px 16px;
  font-size:11px;backdrop-filter:blur(6px)}
.mg-legend span{display:inline-flex;align-items:center;gap:6px;color:#c9d6e8}
.mg-legend i{width:9px;height:9px;border-radius:50%}
.lg-you{background:#38bdf8;box-shadow:0 0 8px #38bdf8}
.lg-user{background:#22c55e;box-shadow:0 0 8px #22c55e}
.lg-atk{background:#ff2d55;box-shadow:0 0 8px #ff2d55}

/* Malware Sentinel panel (command center, replaces radar) */
.scan-cell{display:flex;flex-direction:column}
.ms-body{flex:1;display:flex;flex-direction:column;gap:12px;padding:6px 4px}
.ms-hero{text-align:center;padding:8px 0}
.ms-shield{font-size:40px;line-height:1;filter:drop-shadow(0 0 10px #34d399);transition:filter .4s}
.ms-verdict{font-size:17px;font-weight:800;letter-spacing:1px;margin-top:8px;color:#34d399;font-family:ui-monospace,monospace}
.ms-sub{font-size:11px;color:#7fa;opacity:.7;margin-top:5px;line-height:1.4;padding:0 6px;color:#9fb8ad}
.ms-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ms-stats>div{background:rgba(5,14,10,.6);border:1px solid rgba(34,255,136,.15);border-radius:8px;
  padding:8px 6px;text-align:center}
.ms-stats b{display:block;font-size:19px;font-weight:800;font-family:ui-monospace,monospace;color:#eafff4}
.ms-stats span{font-size:8.5px;letter-spacing:.5px;color:#7fa08e;text-transform:uppercase}
.ms-btn{background:linear-gradient(180deg,rgba(34,255,136,.9),rgba(20,180,110,.9));border:none;
  color:#04140c;font-weight:800;padding:11px;border-radius:9px;cursor:pointer;font-size:13px}
.ms-btn:hover{filter:brightness(1.1)} .ms-btn:disabled{opacity:.5;cursor:wait}
.ms-hits{display:flex;flex-direction:column;gap:5px}
.ms-hit{font-size:11px;color:#ff9db1;background:rgba(255,45,85,.08);border-radius:6px;padding:5px 8px}

/* ===== Draggable Incident Terminal (map) + leader line ===== */
.incident-svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:7;display:none}
.incident-svg.show{display:block}
#incidentLine{stroke:#22ff88;stroke-width:1.4;stroke-dasharray:5 4;opacity:.8;
  filter:drop-shadow(0 0 4px rgba(34,255,136,.7))}
.term-win{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);z-index:9;
  width:min(94vw,360px);background:linear-gradient(180deg,rgba(3,14,9,.97),rgba(2,8,6,.98));
  border:1px solid #1c6b45;border-radius:9px;box-shadow:0 0 0 1px rgba(34,255,136,.15),0 14px 44px rgba(0,0,0,.6);
  font-family:ui-monospace,Consolas,monospace;overflow:hidden;display:none}
.term-win.show{display:block;animation:twpop .25s ease}
@keyframes twpop{from{opacity:0;transform:translateX(-50%) translateY(8px)}to{opacity:1}}
.tw-bar{display:flex;align-items:center;gap:9px;padding:7px 11px;cursor:grab;user-select:none;
  background:linear-gradient(180deg,rgba(34,255,136,.14),rgba(34,255,136,.04));border-bottom:1px solid #14512f}
.tw-bar:active{cursor:grabbing}
.tw-dots{display:flex;gap:5px}.tw-dots i{width:9px;height:9px;border-radius:50%;background:#1c6b45}
.tw-dots i:nth-child(1){background:#ff5f56}.tw-dots i:nth-child(2){background:#ffbd2e}.tw-dots i:nth-child(3){background:#27c93f}
.tw-title{flex:1;font-size:11px;letter-spacing:1.5px;color:#7dffb0;font-weight:700}
.tw-x{background:none;border:none;color:#7dffb0;font-size:18px;line-height:1;cursor:pointer;padding:0 2px}
.tw-x:hover{color:#ff5f56}
.tw-body{padding:12px 14px;font-size:12.5px;color:#a8f7c9;line-height:1.7}
.tw-line{white-space:pre-wrap;word-break:break-all}
.tw-body .k{color:#4f9c73}
.tw-body .v{color:#d6ffe7}
.tw-body .crit{color:#ff2d55;font-weight:700}.tw-body .high{color:#ff6b35;font-weight:700}
.tw-body .blk{color:#ff8a9c;font-weight:700}
.tw-body .grn{color:#27c93f}
.tw-prompt{color:#27c93f}

/* ===== Map zoom controls (pan = drag the map) ===== */
.map-zoom{position:absolute;right:14px;bottom:120px;z-index:8;display:flex;flex-direction:column;
  gap:1px;border-radius:9px;overflow:hidden;box-shadow:0 4px 16px rgba(0,0,0,.5)}
.map-zoom button{width:34px;height:34px;border:none;background:rgba(6,20,14,.9);color:#7dffb0;
  font-size:18px;line-height:1;cursor:pointer;font-family:ui-monospace,monospace;
  border:1px solid #14512f;border-bottom:none;transition:.12s}
.map-zoom button:last-child{border-bottom:1px solid #14512f}
.map-zoom button:hover{background:rgba(34,255,136,.18);color:#c9ffe0}
.map-zoom button:active{background:rgba(34,255,136,.3)}
/* panels-toggle "on" (panels currently hidden) — amber so state is obvious */
.map-zoom button.active{background:rgba(245,158,11,.26);color:#ffd79a;border-color:#7a5310}
.map-zoom button.active:hover{background:rgba(245,158,11,.36)}
/* globe cluster sits above the corner intel panel */
.globe-zoom{z-index:9}
/* hide/show overlay panels (keep the control clusters + view buttons visible) */
.mapwrap.panels-hidden .map-counters,
.mapwrap.panels-hidden .mg-legend,
.mapwrap.panels-hidden .map-legend,
.mapwrap.panels-hidden .map-console{display:none!important}
.globewrap.panels-hidden .globe-metrics,
.globewrap.panels-hidden .globe-threats,
.globewrap.panels-hidden .globe-intel,
.globewrap.panels-hidden .globe-legend,
.globewrap.panels-hidden .globe-ticker,
.globewrap.panels-hidden .mg-legend{display:none!important}

/* ===================== Learn page ===================== */
main.learn{max-width:1180px;margin:0 auto;padding:18px}
.learn-head{margin:6px 0 18px}
.learn-head h1{font-size:26px;margin:0 0 8px;letter-spacing:-.2px;line-height:1.2}
.learn-head .lede{color:var(--muted);font-size:14px;margin:0;max-width:78ch;line-height:1.6}
main.learn .panel{margin-bottom:14px}

/* policy grid */
.policy-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:10px}
.pol{background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:12px 14px}
.pol-k{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px}
.pol-v{font-size:15px;margin:5px 0 6px}
.pol-v code{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:var(--accent);
  word-break:break-all}
.pol-d{font-size:12px;color:var(--muted);line-height:1.5}

/* pipeline */
.pipeline{list-style:none;counter-reset:st;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(232px,1fr));gap:10px}
.pipeline li{counter-increment:st;background:var(--panel2);border:1px solid var(--line);
  border-radius:11px;padding:12px 14px 12px 14px;position:relative}
.pipeline li::before{content:counter(st,decimal-leading-zero);font-family:ui-monospace,Consolas,monospace;
  font-size:10px;color:var(--accent);letter-spacing:1.4px;display:block;margin-bottom:6px}
.pipeline .pl-t{display:block;font-weight:600;font-size:14px;margin-bottom:4px}
.pipeline .pl-d{display:block;font-size:12px;color:var(--muted);line-height:1.5}
.pipeline em{color:var(--txt);font-style:normal}

/* filters */
.learn-filters{display:flex;gap:6px;flex-wrap:wrap}
.lf{background:var(--panel2);border:1px solid var(--line);color:var(--muted);cursor:pointer;
  padding:5px 12px;border-radius:20px;font-size:12px;font-family:inherit}
.lf:hover{color:var(--txt);border-color:var(--accent)}
.lf.active{background:rgba(34,211,238,.12);border-color:var(--accent);color:var(--accent)}

/* attack cards */
.attack-list{display:flex;flex-direction:column;gap:10px}
.grp{font-size:12px;text-transform:uppercase;letter-spacing:1.2px;color:var(--muted);
  margin:14px 0 2px;display:flex;align-items:center;gap:8px}
.grp:first-child{margin-top:2px}
.grp-n{background:var(--panel2);border:1px solid var(--line);border-radius:20px;
  padding:1px 8px;font-size:11px;color:var(--accent);letter-spacing:0}
.atk{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--med);
  border-radius:12px;padding:14px 16px}
.atk.critical{border-left-color:var(--crit)}
.atk.high{border-left-color:var(--high)}
.atk.medium{border-left-color:var(--med)}
.atk.low{border-left-color:var(--low)}
.atk-h{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap}
.atk-id{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.atk-id h3{margin:0;font-size:16px;font-weight:600}
.atk-id .slug{font-family:ui-monospace,Consolas,monospace;font-size:11px;color:var(--muted)}
.atk-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.verdict{font-size:11px;font-weight:600;padding:3px 9px;border-radius:6px;white-space:nowrap}
.verdict.blk{background:rgba(255,45,85,.14);color:var(--crit);border:1px solid rgba(255,45,85,.35)}
.verdict.wat{background:rgba(245,179,1,.13);color:var(--med);border:1px solid rgba(245,179,1,.35)}
.seen{font-size:11.5px;color:var(--muted);font-family:ui-monospace,Consolas,monospace}
.seen.none{opacity:.6}
.atk-desc{margin:9px 0 0;font-size:13.5px;color:#c3d2e6;line-height:1.55;max-width:88ch}
.atk-ex{margin-top:9px;background:var(--bg);border:1px solid var(--line);border-radius:9px;
  padding:8px 11px;overflow-x:auto}
.atk-ex .ex-l{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.8px;
  color:var(--muted);margin-bottom:4px}
.atk-ex code{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:#ffd9a8;
  white-space:pre-wrap;word-break:break-word}
.trig{margin-top:9px;background:rgba(34,197,94,.07);border:1px solid rgba(34,197,94,.28);
  border-radius:9px;padding:8px 11px;font-size:13px}
.trig b{color:var(--grn)}
.trig-src{display:block;font-size:11.5px;color:var(--muted);margin-top:3px}
.atk-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;
  margin-top:12px;padding-top:11px;border-top:1px solid var(--line)}
.atk-col.wide{grid-column:span 2}
.atk-col h4{margin:0 0 6px;font-size:10.5px;text-transform:uppercase;letter-spacing:.8px;
  color:var(--muted);font-weight:600;display:flex;align-items:center;gap:6px}
.atk-col h4 .n{background:var(--panel);border:1px solid var(--line);border-radius:20px;
  padding:0 6px;font-size:10px;color:var(--accent);letter-spacing:0}
.siglist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px}
.siglist li{font-size:12.5px;display:flex;align-items:center;gap:7px}
.mitre-link{font-size:12.5px;display:block;line-height:1.45}
.mitre-link code{font-family:ui-monospace,Consolas,monospace;color:var(--accent)}
.mitre-link:hover{text-decoration:underline}
.tactic{font-size:11.5px;color:var(--muted);margin-top:3px}
.rec{margin:0;font-size:12.5px;color:var(--muted);line-height:1.55}

/* where detection happens */
.where-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(228px,1fr));gap:10px}
.where{background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:12px 14px}
.where h3{margin:7px 0 5px;font-size:14.5px}
.where p{margin:0;font-size:12.5px;color:var(--muted);line-height:1.55}
.where code{font-family:ui-monospace,Consolas,monospace;font-size:11.5px;color:var(--accent)}
.where b{color:var(--txt)}
.wtag{font-size:9.5px;text-transform:uppercase;letter-spacing:1px;font-weight:700;
  padding:2px 8px;border-radius:5px}
.wtag.passive{background:rgba(127,147,179,.15);color:var(--muted);border:1px solid var(--line)}
.wtag.inline{background:rgba(34,197,94,.14);color:var(--grn);border:1px solid rgba(34,197,94,.4)}

/* known vulns */
.vuln-ref{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}
.vgrp h4{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:1px;
  color:var(--accent)}
.vrow{display:flex;align-items:center;gap:9px;padding:6px 9px;background:var(--panel2);
  border-radius:8px;margin-bottom:5px;font-size:12.5px}
.vrow code{font-family:ui-monospace,Consolas,monospace;font-size:11.5px;color:var(--muted);
  min-width:104px}
.vrow .vname{flex:1;min-width:0}

@media (max-width:720px){
  .atk-col.wide{grid-column:span 1}
  .learn-head h1{font-size:21px}
}

/* ===================== Protected Machines (Settings) ===================== */
.machines-panel{margin-top:16px}
.m-lede{margin:0 0 14px;font-size:13px;color:var(--muted);line-height:1.55;max-width:80ch}
.m-lede b{color:var(--txt)}

/* Grid rather than flex-wrap: the button used to wrap onto its own line and
   stretch across half the panel. Explicit columns keep it beside the fields. */
.m-add{display:grid;gap:10px 12px;align-items:end;
  grid-template-columns:minmax(140px,1fr) minmax(180px,2fr) auto auto auto;
  background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:12px 14px}
.m-add-f{display:flex;flex-direction:column;gap:5px;min-width:0}
.m-add-f label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.m-add-f input{padding:9px 11px;background:var(--bg);border:1px solid var(--line);
  border-radius:8px;color:var(--txt);font-family:inherit;font-size:13px;width:100%}
.m-add-f input:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}
.m-add button{padding:10px 18px;background:linear-gradient(90deg,var(--accent),#0ea5b7);
  border:0;border-radius:9px;color:#04202a;font-weight:700;cursor:pointer;
  font-family:inherit;font-size:13px;white-space:nowrap;justify-self:start}
.m-add button:hover{filter:brightness(1.08)}
.m-chk{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--txt);
  white-space:nowrap;cursor:pointer;padding-bottom:9px}
.m-chk input{width:auto;cursor:pointer}

.m-err{display:none;margin-top:10px;background:rgba(239,68,68,.14);
  border:1px solid rgba(239,68,68,.4);color:#fca5a5;padding:9px 12px;
  border-radius:9px;font-size:13px}

.m-list{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.m-row{display:grid;grid-template-columns:1.5fr 1.1fr 1fr auto auto;gap:12px;
  align-items:center;background:var(--panel2);border:1px solid var(--line);
  border-radius:10px;padding:11px 13px}
.m-who{display:flex;flex-direction:column;gap:2px;min-width:0}
.m-ip{font-family:ui-monospace,Consolas,monospace;font-size:13.5px;color:var(--accent)}
.m-name{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.m-stat{display:flex;align-items:center;gap:7px;font-size:12.5px}
.m-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto}
.m-dot.ok{background:var(--grn);box-shadow:0 0 7px var(--grn)}
.m-dot.warn{background:var(--med)}
.m-dot.bad{background:var(--muted)}
.m-stat-l{color:var(--txt)}
.m-seen{color:var(--muted);font-size:11.5px;font-family:ui-monospace,Consolas,monospace}
.m-nums{display:flex;flex-direction:column;gap:2px;font-size:11.5px;color:var(--muted);
  font-family:ui-monospace,Consolas,monospace;font-variant-numeric:tabular-nums}
.m-toggles{display:flex;gap:12px}
.m-toggles .m-chk{padding-bottom:0}
.m-del{background:transparent;border:1px solid var(--line);color:var(--muted);
  width:28px;height:28px;border-radius:7px;cursor:pointer;font-size:13px;line-height:1}
.m-del:hover{border-color:var(--red);color:#fca5a5}

.m-help{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.m-help summary{cursor:pointer;font-size:13px;color:var(--accent);font-weight:500}
.m-help p{font-size:12.5px;color:var(--muted);line-height:1.6;max-width:82ch}
.m-help b{color:var(--txt)}
.m-help code{font-family:ui-monospace,Consolas,monospace;color:var(--accent);font-size:12px}
.m-help pre{background:var(--bg);border:1px solid var(--line);border-radius:9px;
  padding:11px 13px;overflow-x:auto;font-family:ui-monospace,Consolas,monospace;
  font-size:11.5px;color:#ffd9a8;line-height:1.6}

@media (max-width:860px){
  .m-add{grid-template-columns:1fr 1fr}
  .m-add button{grid-column:1 / -1;justify-self:stretch;text-align:center}
  .m-row{grid-template-columns:1fr 1fr;gap:9px}
  .m-nums{flex-direction:row;gap:12px}
}

/* ===================== Credit ===================== */
.sre-credit{text-align:center;color:var(--muted);font-size:11.5px;letter-spacing:1.2px;
  text-transform:uppercase;padding:20px 16px 26px}
.sre-credit b{color:var(--accent);font-weight:600;letter-spacing:1.6px}
.login-card .sre-credit{padding:16px 0 0;margin-top:14px;border-top:1px solid var(--line)}

/* ===================== Change password ===================== */
.pw-warn{background:rgba(245,179,1,.12);border:1px solid rgba(245,179,1,.4);
  color:#f5d68a;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.6;
  margin-bottom:16px}
.pw-ok{background:rgba(34,197,94,.12);border:1px solid rgba(34,197,94,.4);
  color:#a7f3c0;padding:14px 16px;border-radius:10px;font-size:13.5px;line-height:1.6}
.pw-ok b{color:var(--grn);display:block;margin-bottom:5px;font-size:15px}
.pw-ok p{margin:0;color:#8fcfa8;font-size:12.5px}
.pw-go{display:block;text-align:center;margin-top:18px;padding:12px;
  background:linear-gradient(90deg,var(--accent),#0ea5b7);border-radius:10px;
  color:#04202a;font-weight:700;font-size:14px}
.pw-go:hover{filter:brightness(1.08)}
.hint a{color:var(--accent)}
.hint a:hover{text-decoration:underline}

/* ===================== Retention (Settings) ===================== */
.ret-stat{display:flex;gap:18px;flex-wrap:wrap;align-items:baseline;
  background:var(--panel2);border:1px solid var(--line);border-radius:10px;
  padding:11px 14px;margin-bottom:11px;font-size:12.5px}
.ret-stat .big{font-size:19px;font-weight:700;color:var(--accent);
  font-variant-numeric:tabular-nums}
.ret-stat .lbl{color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-size:10.5px}
.ret-stat > div{display:flex;flex-direction:column;gap:3px}
.ret-run{background:var(--panel2);border:1px solid var(--line);color:var(--txt);
  padding:9px 15px;border-radius:8px;cursor:pointer;font-family:inherit;font-size:13px}
.ret-run:hover{border-color:var(--accent);color:var(--accent)}
.ret-msg{margin-left:10px;font-size:12.5px;color:var(--grn)}

/* Credit link: reads as text until you reach for it. */
.sre-credit a{color:inherit;transition:color .15s}
.sre-credit a:hover b,.sre-credit a:focus-visible b{color:var(--accent)}
