/* portal-shell.css — the one-portal shell (header + SOC left panel + footer).
   Self-sufficient: defines its own design tokens so it themes any page.
   Recolored from the Tauri SOC side panel to the landing palette (#9FEF00). */

:root{
  --bg:#000; --bg-soft:#050505;
  --bg-card:rgba(159,239,0,.025); --bg-card-hover:rgba(159,239,0,.055);
  --neon:#9FEF00; --neon-bright:#b6ff1a; --neon-dim:#6fa800; --neon-glow:rgba(159,239,0,.28);
  --text:#f0f0f0; --text-muted:#9a9a9a; --text-dim:#8a8a8a;
  --border:rgba(159,239,0,.18); --border-strong:rgba(159,239,0,.42);
  --danger:#ff3b3b; --warn:#ffcc00;
  --kp-head-h:60px; --kp-rail-w:300px;
}

.kp-body{ margin:0; background:var(--bg); color:var(--text);
  font-family:'Inter',system-ui,-apple-system,sans-serif; -webkit-font-smoothing:antialiased;
  padding-top:var(--kp-head-h); padding-left:var(--kp-rail-w);
  /* wrapped tool pages set body{display:flex}; force normal block flow so the footer
     sits full-width at the BOTTOM instead of floating beside the content */
  display:block !important; }
.kp-body ::selection{ background:var(--neon); color:#000; }
/* the shell must be immune to a wrapped page's box-sizing: some apps (e.g. domain-info-v2)
   leave #kp-rail as content-box, making it 325px (300+padding+border) and covering the
   content. Pin the shell chrome to border-box so the rail is always exactly --kp-rail-w. */
#kp-header, #kp-rail, #kp-footer, .kp-modal, #kp-tip, #kp-overlay,
#kp-header *, #kp-rail *, #kp-footer *, .kp-modal *{ box-sizing:border-box; }

/* old per-page chrome, if present in ported content, is replaced by the shell */
.kp-body .topbar{ display:none !important; }
.kp-body footer[data-kodachi-footer]{ display:none !important; }

/* ---------- HEADER (no page-nav links) ---------- */
#kp-header{ position:fixed; top:0; left:0; right:0; height:var(--kp-head-h); z-index:1000;
  display:flex; align-items:center; gap:14px; padding:0 18px; background:rgba(0,0,0,.92);
  -webkit-backdrop-filter:blur(10px); backdrop-filter:blur(10px); border-bottom:1px solid var(--border); }
#kp-header .kp-burger{ display:none; background:none; border:1px solid var(--border); color:var(--neon);
  border-radius:6px; width:38px; height:38px; cursor:pointer; align-items:center; justify-content:center; }
#kp-header .kp-brand{ display:flex; align-items:center; gap:10px; font-family:'Orbitron',sans-serif;
  font-weight:800; letter-spacing:.06em; font-size:17px; color:var(--text); white-space:nowrap; text-decoration:none; }
#kp-header .kp-brand img{ width:26px; height:26px; }
#kp-header .kp-ver{ font-family:'JetBrains Mono',monospace; font-size:10.5px; color:var(--neon);
  border:1px solid var(--border); padding:2px 7px; border-radius:4px; }
#kp-header .kp-search{ flex:1; max-width:420px; margin-left:auto; position:relative; display:flex; }
#kp-header .kp-search input{ width:100%; background:rgba(159,239,0,.05); border:1px solid var(--border);
  color:var(--text); border-radius:7px; padding:9px 12px 9px 34px; font-size:13px; font-family:'JetBrains Mono',monospace; }
#kp-header .kp-search input::placeholder{ color:var(--text-dim); }
#kp-header .kp-search svg{ position:absolute; left:10px; top:50%; transform:translateY(-50%); width:15px; height:15px; color:var(--neon-dim); }
/* live search results dropdown */
.kp-sresults{ position:absolute; top:calc(100% + 8px); left:0; right:0; z-index:1200; max-height:min(70vh,540px); overflow-y:auto;
  background:#070a0e; border:1px solid var(--border-strong); border-radius:12px; box-shadow:0 18px 50px rgba(0,0,0,.7); padding:6px; }
.kp-sresults[hidden]{ display:none; }
.kp-sitem{ display:block; padding:9px 12px; border-radius:8px; text-decoration:none; border:1px solid transparent; }
.kp-sitem:hover{ background:rgba(159,239,0,.08); border-color:var(--border); }
.kp-stitle{ display:block; font-family:'Orbitron',sans-serif; font-size:12.5px; color:var(--text); letter-spacing:.01em; }
.kp-ssnip{ display:block; font-size:11.5px; color:var(--text-muted); line-height:1.45; margin-top:3px; font-family:'JetBrains Mono',monospace; }
.kp-ssnip mark{ background:transparent; color:var(--neon); font-weight:600; }
.kp-sempty{ padding:12px 14px; color:var(--text-dim); font-size:13px; font-family:'JetBrains Mono',monospace; }
#kp-header .kp-cta{ display:inline-flex; align-items:center; color:#000; background:var(--neon); border:1px solid var(--neon); padding:8px 14px; border-radius:6px; font-family:'Orbitron',sans-serif; font-weight:700; font-size:13px; letter-spacing:.02em; white-space:nowrap; text-decoration:none; }
#kp-header .kp-cta:hover{ background:var(--neon-bright); }
#kp-header .kp-dl{ display:inline-flex; align-items:center; gap:7px; color:var(--neon); background:rgba(159,239,0,.08);
  border:1px solid var(--border-strong); padding:8px 14px; border-radius:6px; font-weight:700; font-size:13px; white-space:nowrap; font-family:'Orbitron',sans-serif; letter-spacing:.02em; text-decoration:none; }
#kp-header .kp-dl:hover{ background:rgba(159,239,0,.16); }
#kp-header .kp-dl svg{ width:15px; height:15px; }

/* ---------- LEFT RAIL ---------- */
#kp-rail{ position:fixed; top:var(--kp-head-h); left:0; width:var(--kp-rail-w); z-index:999;
  height:calc(100vh - var(--kp-head-h)); overflow:hidden auto; padding:14px 12px 24px;
  background:#000; border-right:1px solid var(--border);
  scrollbar-width:thin; scrollbar-color:rgba(159,239,0,.25) transparent; }
#kp-rail::-webkit-scrollbar{ width:8px; }
#kp-rail::-webkit-scrollbar-thumb{ background:rgba(159,239,0,.22); border-radius:4px; }
.kp-sec-head{ font-family:'Orbitron',sans-serif; font-size:9px; letter-spacing:3px; color:var(--text-muted);
  font-weight:700; text-transform:uppercase; margin:14px 4px 8px; padding-bottom:5px; border-bottom:1px solid var(--border);
  display:flex; align-items:center; }
.kp-sec-head:first-child{ margin-top:2px; }
.kp-sec-head .kp-navtools{ margin-left:auto; display:flex; gap:4px; }
.kp-sec-head .kp-navtools button{ width:22px; height:22px; display:inline-flex; align-items:center; justify-content:center;
  background:rgba(159,239,0,.05); border:1px solid var(--border); border-radius:5px; color:var(--neon-dim); cursor:pointer; }
.kp-sec-head .kp-navtools button:hover{ color:#000; background:var(--neon); border-color:var(--neon); }
.kp-sec-head .kp-navtools svg{ width:12px; height:12px; }

/* verifier chips */
.kp-status{ display:flex; flex-direction:column; gap:5px; }
.kp-chip{ display:flex; align-items:center; gap:9px; padding:7px 9px; border-radius:7px;
  background:#070a0e; border:1px solid rgba(255,255,255,.07); border-left:3px solid rgba(255,255,255,.1); }
.kp-chip .dot{ width:8px; height:8px; border-radius:50%; flex:0 0 auto; background:var(--neon); box-shadow:0 0 7px var(--neon); animation:kp-dot-pulse 1.9s ease-in-out infinite; }
@keyframes kp-dot-pulse{ 0%,100%{ transform:scale(1); opacity:1; } 50%{ transform:scale(.62); opacity:.5; } }
.kp-chip.warn{ border-left-color:var(--warn); } .kp-chip.warn .dot{ background:var(--warn); box-shadow:0 0 7px var(--warn); }
.kp-chip.bad{ border-left-color:var(--danger); } .kp-chip.bad .dot{ background:var(--danger); box-shadow:0 0 7px var(--danger); }
.kp-chip.muted .dot{ background:#5a6470; box-shadow:none; }
.kp-chip .lbl{ font-family:'Orbitron',sans-serif; font-size:9px; letter-spacing:1px; text-transform:uppercase; color:#aab4be; }
.kp-chip .val{ margin-left:auto; font-family:'JetBrains Mono',monospace; font-size:11px; color:#eaf2e2; max-width:60%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:right; }
.kp-chip .val.flag{ display:flex; gap:6px; align-items:center; } .kp-chip .val.flag b{ font-size:14px; }

.kp-ipactions{ display:flex; gap:5px; margin:4px 0 2px 6px; }
.kp-iaction{ width:26px; height:26px; display:inline-flex; align-items:center; justify-content:center; cursor:pointer;
  background:#0c0f14; border:1px solid rgba(255,255,255,.07); border-radius:6px; color:#8a93a0; text-decoration:none; }
.kp-iaction:hover{ color:#000; background:var(--neon); border-color:var(--neon); }
.kp-iaction svg{ width:14px; height:14px; }

.kp-iconrow{ display:flex; gap:6px; margin:2px 4px 2px; }
.kp-iconrow a, .kp-iconrow button{ flex:1; height:30px; display:inline-flex; align-items:center; justify-content:center; cursor:pointer;
  background:#0c0f14; border:1px solid rgba(255,255,255,.07); border-radius:6px; color:#8a93a0; }
.kp-iconrow a:hover, .kp-iconrow button:hover{ color:#000; background:var(--neon); border-color:var(--neon); text-decoration:none; }
.kp-iconrow svg{ width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }

.kp-controls{ display:flex; align-items:center; gap:10px; margin:9px 4px 4px; }
.kp-toggle{ display:flex; align-items:center; gap:7px; cursor:pointer; font-family:'Orbitron',sans-serif; font-size:8.5px; letter-spacing:1px; text-transform:uppercase; color:var(--text-muted); }
.kp-toggle svg{ width:14px; height:14px; fill:none; stroke:var(--neon-dim); }
.kp-toggle b{ color:var(--neon); }
.kp-switch{ width:30px; height:16px; border-radius:9px; background:var(--neon); position:relative; box-shadow:0 0 8px var(--neon-glow); flex:0 0 auto; transition:background .15s; }
.kp-switch::after{ content:''; position:absolute; right:2px; top:2px; width:12px; height:12px; border-radius:50%; background:#000; transition:right .15s; }
.kp-toggle.off .kp-switch{ background:var(--text-dim); box-shadow:none; }
.kp-toggle.off .kp-switch::after{ right:16px; }
.kp-gauge{ margin-left:auto; display:flex; align-items:center; gap:5px; font-family:'JetBrains Mono',monospace; font-size:10px; color:var(--neon-dim); }
.kp-gauge svg{ width:24px; height:24px; transform:rotate(-90deg); }
.kp-gauge .rg-track{ fill:none; stroke:rgba(159,239,0,.18); stroke-width:3; }
.kp-gauge .rg-prog{ fill:none; stroke:var(--neon); stroke-width:3; stroke-linecap:round; stroke-dasharray:119; stroke-dashoffset:0; transition:stroke-dashoffset 1s linear; }

/* network/infrastructure stats */
.kp-stats{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:6px; margin:2px 4px 6px; }
.kp-stat{ border:1px solid rgba(255,255,255,.08); border-radius:8px; padding:7px 6px; background:#070a0e; text-align:center; }
.kp-stat .n{ display:block; font-family:'Orbitron',sans-serif; font-weight:800; font-size:17px; color:var(--neon); line-height:1; }
/* live pulse on the quick-action + ip-action icons so the rail feels alive */
.kp-iconrow a svg, .kp-iconrow button svg{ transition:transform .15s; }
.kp-iconrow a:hover svg, .kp-iconrow button:hover svg{ transform:scale(1.15); }
.kp-gauge .rg-prog{ filter:drop-shadow(0 0 3px var(--neon)); }
.kp-stat .n.zero{ color:var(--text-muted); text-shadow:none; }
.kp-stat .n .kp-i{ font-family:'JetBrains Mono',monospace; font-size:8px; font-weight:600; color:var(--neon-dim); margin-left:2px; vertical-align:super; }
.kp-stat .l{ display:block; margin-top:5px; font-family:'JetBrains Mono',monospace; font-size:9.5px; letter-spacing:.02em; color:#aab4be; text-transform:uppercase; line-height:1.2; }
.kp-substat{ font-family:'Orbitron',sans-serif; font-size:9px; letter-spacing:1.5px; text-transform:uppercase; color:#aab4be; margin:11px 4px 7px; display:flex; }
.kp-substat .mut{ margin-left:auto; color:var(--neon-dim); letter-spacing:.04em; }
.kp-userbar{ display:flex; height:10px; border-radius:6px; overflow:hidden; margin:0 4px 6px; border:1px solid var(--border); }
.kp-userbar .seg{ height:100%; } .kp-userbar .seg.prem{ background:var(--neon); } .kp-userbar .seg.ded{ background:#35e6d4; } .kp-userbar .seg.free{ background:rgba(159,239,0,.16); }
.kp-userleg{ display:flex; gap:11px; flex-wrap:wrap; margin:0 4px 6px; font-family:'JetBrains Mono',monospace; font-size:9.5px; color:var(--text-muted); }
.kp-userleg b{ color:var(--text); font-weight:700; }
.kp-userleg i{ display:inline-block; width:8px; height:8px; border-radius:2px; margin-right:5px; vertical-align:middle; }
.kp-userleg i.prem{ background:var(--neon); } .kp-userleg i.ded{ background:#35e6d4; } .kp-userleg i.free{ background:rgba(159,239,0,.3); }
.kp-pool{ display:flex; align-items:center; gap:7px; margin:0 4px 6px; font-family:'JetBrains Mono',monospace; font-size:11px; }
.kp-pool .pn{ color:var(--text); width:40px; flex:0 0 40px; }
.kp-pool .pt{ font-size:9px; padding:1px 6px; border-radius:4px; flex:0 0 auto; letter-spacing:.02em; }
.kp-pool .pt.prem{ color:var(--neon); border:1px solid var(--neon-dim); } .kp-pool .pt.ded{ color:#35e6d4; border:1px solid rgba(53,230,212,.45); } .kp-pool .pt.free{ color:var(--text-muted); border:1px solid var(--border); }
.kp-pool .track{ flex:1; min-width:0; height:6px; border-radius:4px; background:rgba(255,255,255,.07); overflow:hidden; }
.kp-pool .fill{ height:100%; border-radius:4px; background:var(--neon); box-shadow:0 0 6px var(--neon-glow); }
.kp-pool .fill.ded{ background:#35e6d4; box-shadow:0 0 6px rgba(53,230,212,.4); } .kp-pool .fill.free{ background:var(--warn); box-shadow:none; }
.kp-pool .pc{ width:30px; flex:0 0 30px; text-align:right; color:var(--text); }

/* recursive collapsible nav (any depth) */
.kp-node > .kp-row{ width:100%; display:flex; align-items:center; gap:9px; padding:7px 9px; cursor:pointer;
  background:none; border:none; color:var(--text); font-family:inherit; font-size:12.5px; font-weight:600; text-align:left; border-radius:7px; transition:background .15s; }
.kp-node > .kp-row:hover{ background:rgba(13,18,26,.85); }
.kp-node.open > .kp-row{ color:var(--neon); }
.kp-node > .kp-row .gi{ width:15px; height:15px; color:var(--neon-dim); flex:0 0 auto; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.kp-node > .kp-row .chev{ margin-left:auto; width:14px; height:14px; color:var(--text-dim); transition:transform .2s ease; fill:none; stroke:currentColor; stroke-width:2.5; }
.kp-node.open > .kp-row .chev{ transform:rotate(90deg); }
.kp-children{ max-height:0; overflow:hidden; transition:max-height .3s ease; padding-left:11px; }
.kp-node.open > .kp-children{ max-height:6000px; }
.kp-leaf,.kp-leaf:link,.kp-leaf:visited{ display:flex; align-items:center; gap:8px; padding:6px 9px; font-size:12px; color:var(--text-muted); border-radius:6px; text-decoration:none; }
.kp-leaf:hover,.kp-leaf:visited:hover{ background:rgba(159,239,0,.06); color:var(--neon); }
.kp-leaf::before{ content:''; width:4px; height:4px; border-radius:50%; background:var(--neon-dim); opacity:.65; flex:0 0 auto; }
.kp-leaf.active{ color:var(--neon); background:rgba(159,239,0,.12); font-weight:600; box-shadow:inset 2px 0 0 var(--neon); }
.kp-leaf.active::before{ background:var(--neon); opacity:1; box-shadow:0 0 7px var(--neon); }
.kp-node.open > .kp-row:has(+ .kp-children .kp-leaf.active){ color:var(--neon); }
/* leaf label + hover info icon (tooltip explains what each link is) */
.kp-leaf-txt{ flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.kp-leaf-i{ flex:0 0 auto; width:15px; height:15px; display:inline-flex; align-items:center; justify-content:center;
  border:1px solid var(--border-strong); border-radius:50%; font-family:'JetBrains Mono',monospace; font-size:9px; font-style:italic;
  line-height:1; color:var(--text-dim); opacity:.45; transition:opacity .15s,color .15s,background .15s,border-color .15s; cursor:help; }
.kp-leaf:hover .kp-leaf-i{ opacity:.8; }
.kp-leaf-i:hover{ opacity:1; color:#000; background:var(--neon); border-color:var(--neon); }

/* LEFT-PANEL FOOTER: version chip pinned to bottom of the rail */
/* version chip flows at the END of the rail content (NOT pinned), so it never covers the
   last card pool; it scrolls into view at the bottom like everything else. */
.kp-railfoot{ margin:16px -12px -24px; padding:9px 12px; background:rgba(2,5,8,.985); border-top:1px solid var(--border); }
.kp-verchip{ position:relative; display:flex; align-items:center; gap:8px; padding:6px 8px; border:1px solid var(--border); border-radius:7px; cursor:default; background:rgba(159,239,0,.04); }
.kp-verchip:hover{ border-color:var(--border-strong); }
.kp-verchip svg{ width:15px; height:15px; flex:0 0 auto; }
.kp-verchip .vn{ font-family:'Orbitron',sans-serif; font-weight:700; font-size:12px; color:var(--text); letter-spacing:.04em; }
.kp-verchip .nb{ font-family:'JetBrains Mono',monospace; font-size:10px; color:var(--neon); margin-left:auto; border:1px solid var(--border); border-radius:4px; padding:1px 6px; }

/* FOOTER (no nav links) */
#kp-footer{ padding:26px 24px; border-top:1px solid var(--border); color:var(--text-dim); font-size:12px;
  display:flex; flex-wrap:wrap; gap:16px; justify-content:space-between; align-items:center; font-family:'JetBrains Mono',monospace; background:#020303; }
#kp-footer a{ color:var(--text-muted); } #kp-footer a:hover{ color:var(--neon); }
#kp-footer .kp-foot-left{ display:flex; flex-direction:column; gap:3px; }
/* shared social share row (replaces the per-page share baked into tool/doc bodies) */
.kp-share{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.kp-share-lbl{ font-size:10px; letter-spacing:.18em; text-transform:uppercase; color:var(--text-dim); }
.kp-sh{ width:30px; height:30px; display:inline-flex; align-items:center; justify-content:center; border:1px solid rgba(159,239,0,.16);
  border-radius:8px; color:var(--text-muted); background:#070a0e; cursor:pointer; transition:.15s; }
.kp-sh:hover{ color:#000; background:var(--neon); border-color:var(--neon); transform:translateY(-1px); }
.kp-sh svg{ width:15px; height:15px; }
#kp-overlay{ display:none; position:fixed; inset:0; background:rgba(0,0,0,.6); z-index:998; }

/* baked chrome that wrapped tool/app pages carry but the .topbar/<footer> rules miss:
   the PHP-app passthroughs (ip-report, domain-info) ship a bare <header>, a div.footer,
   and their own logo; the hand-authored whitepaper ships a .site-top header. Hide them
   so only the portal shell chrome shows. (Converted docs have no such elements.) */
.kp-body header:not(#kp-header){ display:none !important; }
.kp-body .site-top{ display:none !important; }
.kp-body .kodachi-logo, .kp-body .logo-container{ display:none !important; }
.kp-body div.footer{ display:none !important; }
.kp-body .headerlink{ display:none !important; }   /* stray "#" heading permalinks on wrapped pages */

/* visible keyboard focus ring on every interactive control (default outline is invisible on #000) */
.kp-body a.kp-leaf:focus-visible, .kp-body .kp-row:focus-visible, .kp-body .kp-iaction:focus-visible,
.kp-body .kp-navtools-btn:focus-visible, .kp-body .kp-soundbtn:focus-visible, .kp-body .kp-sh:focus-visible,
.kp-body .kp-map-btn:focus-visible, .kp-body #kp-monitor:focus-visible, .kp-body .kp-burger:focus-visible,
.kp-body .kp-leaf-i:focus-visible, .kp-body [data-kp-close]:focus-visible, .kp-body .kp-gauge:focus-visible,
.kp-body #kp-map-max:focus-visible, .kp-body #kp-map-newtab:focus-visible, .kp-body .kp-search input:focus-visible{
  outline:2px solid var(--neon) !important; outline-offset:2px !important; border-radius:6px; }

/* ---- wrapped-tool-page foundation (shared across every /tools + /apps page) ---- */
/* the wrapped tools ship their own CSS that caps <svg> max-width to 0; pin the two panel control icons */
html body #kp-rail .kp-soundbtn svg, html body #kp-rail .kp-navtools-btn svg{
  width:15px !important; height:15px !important; min-width:15px !important; max-width:none !important; flex:0 0 auto !important; }
/* a tool's release-version-footer.js injects a <footer> AFTER the injector's one-shot hide ran;
   a CSS rule hides it continuously, even when added late */
body.kp-body > footer:not(#kp-footer){ display:none !important; }
/* the per-page social share + duplicate release/version footers live in the body; the portal
   footer now carries share, so hide the page-owned copies everywhere */
.kp-body .kodachi-share,
.kp-body .kd-release-footer,
.kp-body [class*="release-version-footer"],
.kp-body [class*="release-footer"]{ display:none !important; }

/* JS-positioned tooltip/popover: appended to <body> as position:fixed so the rail overflow NEVER clips it */
#kp-tip{ position:fixed; z-index:3000; display:none; background:#06090a; color:var(--text); border:1px solid var(--border-strong);
  border-radius:9px; padding:8px 11px; font-family:'JetBrains Mono',monospace; font-size:11px; line-height:1.5;
  text-align:left; box-shadow:0 14px 44px rgba(0,0,0,.78); pointer-events:none; max-width:240px; }
#kp-tip.rich{ padding:12px 13px; max-width:320px; }
#kp-tip .eb{ font-family:'Orbitron',sans-serif; font-size:8px; letter-spacing:2.5px; text-transform:uppercase; color:var(--neon); display:block; margin-bottom:7px; }
#kp-tip .pt{ font-family:'Orbitron',sans-serif; font-size:13px; color:var(--text); margin:0 0 9px; line-height:1.3; }
#kp-tip .vr{ display:flex; justify-content:space-between; gap:14px; padding:3px 0; border-bottom:1px solid rgba(159,239,0,.08); }
#kp-tip .vr:last-child{ border-bottom:none; }
#kp-tip .vr span{ color:var(--text-muted); } #kp-tip .vr b{ color:var(--text); font-weight:600; white-space:nowrap; }
#kp-tip .vr b.hi{ color:var(--neon); }
#kp-tip .note{ color:var(--text-dim); font-size:10px; line-height:1.55; margin-top:9px; display:block; }

/* back to top */
.kp-top{ position:fixed; right:24px; bottom:24px; width:48px; height:48px; display:inline-flex; align-items:center; justify-content:center;
  background:linear-gradient(180deg, rgba(159,239,0,.14) 0%, rgba(0,16,16,.92) 100%); color:var(--neon-bright);
  border:1.5px solid var(--neon); border-radius:12px; cursor:pointer; opacity:0; visibility:hidden; transform:translateY(8px);
  transition:opacity .2s ease, transform .2s ease, visibility 0s linear .2s; z-index:1001; box-shadow:0 8px 24px rgba(0,0,0,.55), 0 0 18px var(--neon-glow); }
.kp-top.is-visible{ opacity:1; visibility:visible; transform:translateY(0); transition:opacity .2s ease, transform .2s ease, visibility 0s linear 0s; }
.kp-top:hover{ border-color:var(--neon-bright); transform:translateY(-2px); }
.kp-top svg{ width:22px; height:22px; }

/* responsive: off-canvas drawer */
@media (max-width:960px){
  .kp-body{ padding-left:0 !important; }
  #kp-header .kp-burger{ display:inline-flex; }
  #kp-rail{ transform:translateX(-100%); transition:transform .25s ease; box-shadow:0 0 40px rgba(0,0,0,.7); }
  #kp-rail.open{ transform:translateX(0); }
  #kp-overlay.show{ display:block; }
}
@media (max-width:560px){ #kp-header .kp-search{ display:none; } #kp-header .kp-brand .kp-ver{ display:none; } }
@media (prefers-reduced-motion: reduce){ .kp-top, .kp-children, .kp-node > .kp-row .chev{ transition:none; } .kp-chip .dot, .kp-stat .n{ animation:none; } }

/* ---------- RSS + Threat-map modals (ported from the original verifier) ---------- */
.kp-modal{ position:fixed; inset:0; z-index:4000; display:none; align-items:center; justify-content:center; padding:24px;
  background:rgba(0,0,0,.74); -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px); }
.kp-modal.show{ display:flex; }
.kp-modal-box{ width:min(920px,96vw); max-height:88vh; display:flex; flex-direction:column; background:#04070a;
  border:1px solid var(--border-strong); border-radius:14px; box-shadow:0 30px 80px rgba(0,0,0,.7); overflow:hidden; }
.kp-modal-head{ display:flex; align-items:center; gap:8px; padding:13px 16px; border-bottom:1px solid rgba(255,255,255,.08); background:#0a0d12; }
.kp-modal-head h3{ margin:0; font-family:'Orbitron',sans-serif; font-size:14px; color:#eef3e8; letter-spacing:.04em; flex:1; white-space:nowrap; }
.kp-modal-head button{ width:32px; height:32px; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center;
  background:rgba(159,239,0,.05); border:1px solid var(--border); border-radius:7px; color:var(--neon-dim); cursor:pointer; }
.kp-modal-head button:hover,.kp-modal-head button.active{ color:#000; background:var(--neon); border-color:var(--neon); }
.kp-modal-head button svg{ width:15px; height:15px; fill:currentColor; }
.kp-modal-body{ flex:1; overflow:auto; min-height:0; }
#kp-rss-list{ list-style:none; margin:0; padding:8px 10px; display:flex; flex-direction:column; gap:6px; }
#kp-rss-list li{ display:flex; gap:12px; align-items:flex-start; padding:12px 14px; border:1px solid rgba(255,255,255,.06); border-radius:10px; background:#0a0d12; }
#kp-rss-list li:hover{ background:#0e1218; border-color:rgba(255,255,255,.12); }
#kp-rss-list .feed-icon{ font-family:'JetBrains Mono',monospace; font-size:10px; font-weight:600; color:#aab4be; background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.12); border-radius:5px; padding:2px 6px; flex:0 0 auto; }
#kp-rss-list .feed-content{ display:flex; flex-direction:column; gap:4px; min-width:0; }
#kp-rss-list a{ color:#e8edf2; font-size:14px; line-height:1.45; text-decoration:none; font-weight:500; }
#kp-rss-list a:hover{ color:var(--neon); }
#kp-rss-list .feed-date{ font-family:'JetBrains Mono',monospace; font-size:10.5px; color:#6b7686; }
#kp-rss-list .feed-error{ color:var(--danger); padding:16px 18px; }
#kp-map-frame{ width:100%; height:100%; border:none; background:#000; display:block; }
.kp-map-ph{ display:flex; align-items:center; justify-content:center; height:100%; min-height:300px; color:var(--text-muted); font-family:'JetBrains Mono',monospace; }
/* the threat-map modal is wider + RESIZABLE (drag the bottom-right corner) */
#kp-map-modal .kp-modal-box{ width:min(1320px,97vw); height:82vh; resize:both; overflow:hidden; min-width:640px; min-height:420px; max-width:98vw; max-height:97vh; }
#kp-map-modal .kp-modal-body{ flex:1; min-height:0; }
#kp-map-frame-wrap{ height:100%; }
#kp-map-modal .kp-modal-box.maximized{ width:97vw !important; height:96vh !important; max-width:97vw; max-height:96vh; }
/* edition builds line in the version chip */
.kp-verchip .kp-vertext{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.kp-builds{ font-family:'JetBrains Mono',monospace; font-size:8.5px; color:#8a93a0; letter-spacing:.01em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* monitor sound toggle + the gauge sit on the right of the controls row */
.kp-soundbtn{ margin-left:auto; width:30px; height:30px; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center;
  background:#0c0f14; border:1px solid rgba(255,255,255,.08); border-radius:6px; color:var(--neon-dim); cursor:pointer; }
.kp-soundbtn:hover{ color:#000; background:var(--neon); border-color:var(--neon); }
.kp-soundbtn.off{ color:#5a6470; }
.kp-soundbtn svg{ width:15px; height:15px; }
.kp-controls .kp-gauge{ margin-left:10px; }

/* IP-change notification toasts (the monitor's popup alerts) */
#kp-notifs{ position:fixed; top:72px; right:18px; z-index:5000; display:flex; flex-direction:column; gap:10px; width:330px; max-width:92vw; }
.kp-notif{ background:#0a0d12; border:1px solid var(--border-strong); border-left:3px solid var(--warn); border-radius:11px;
  padding:12px 14px; box-shadow:0 14px 44px rgba(0,0,0,.65); animation:kp-notif-in .25s ease-out; transition:opacity .3s; }
@keyframes kp-notif-in{ from{ transform:translateX(24px); opacity:0; } to{ transform:none; opacity:1; } }
.kp-notif-head{ display:flex; align-items:center; gap:8px; margin-bottom:7px; }
.kp-notif-head strong{ font-family:'Orbitron',sans-serif; font-size:12px; color:var(--warn); flex:1; letter-spacing:.02em; }
.kp-notif-ctrls{ display:flex; gap:5px; flex:0 0 auto; }
.kp-notif-ctrls button{ width:24px; height:24px; display:inline-flex; align-items:center; justify-content:center;
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.12); border-radius:5px; color:var(--text-muted); cursor:pointer; }
.kp-notif-ctrls button:hover{ color:#000; background:var(--neon); border-color:var(--neon); }
.kp-notif-ctrls svg{ width:12px; height:12px; fill:currentColor; }
.kp-notif-body{ font-size:13px; color:var(--text); line-height:1.45; }
.kp-notif-ip{ color:#00e5ff; font-weight:700; font-family:'JetBrains Mono',monospace; }

/* ---------- collapsible rail sections + child-count badges + feedback ---------- */
/* clear vertical gap between sections so the collapse icon never touches the row above */
.kp-section + .kp-section{ margin-top:16px; padding-top:14px; border-top:1px solid rgba(255,255,255,.06); }
.kp-sec-head{ cursor:pointer; user-select:none; }
.kp-sec-chev{ width:13px; height:13px; margin-left:auto; margin-right:2px; color:var(--text-dim); transition:transform .2s ease; flex:0 0 auto; }
.kp-navtools-btn + .kp-sec-chev{ margin-left:16px; }
.kp-section.collapsed .kp-sec-chev{ transform:rotate(-90deg); }
.kp-section.collapsed > .kp-sec-body{ display:none; }
.kp-section.collapsed .kp-navtools-btn{ display:none; }   /* nothing to expand when the section is collapsed */
.kp-section.collapsed .kp-sec-chev{ margin-left:auto; }   /* keep the chevron right-aligned when the nav button hides */
.kp-navtools-btn{ width:22px; height:22px; margin-left:auto; display:inline-flex; align-items:center; justify-content:center;
  background:#0a0d11; border:1px solid rgba(255,255,255,.09); border-radius:5px; color:var(--neon-dim); cursor:pointer; flex:0 0 auto; }
.kp-navtools-btn:hover{ color:#000; background:var(--neon); border-color:var(--neon); }
.kp-navtools-btn svg{ width:12px; height:12px; transition:transform .2s; }
.kp-navtools-btn.expanded svg{ transform:rotate(180deg); }
/* child-count badge on parent menus */
.kp-node > .kp-row .kp-count{ margin-left:auto; font-family:'JetBrains Mono',monospace; font-size:9.5px; color:var(--text-dim);
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.08); border-radius:9px; padding:1px 6px; min-width:20px; text-align:center; }
.kp-node.open > .kp-row .kp-count{ color:var(--neon-dim); border-color:rgba(159,239,0,.25); }
/* the chevron sits after the count */
.kp-node > .kp-row .kp-count + .chev{ margin-left:6px; }
/* IP-action "done" confirmation flash */
.kp-iaction{ transition:background .15s, color .15s, border-color .15s; }
.kp-iaction.kp-done{ background:var(--neon) !important; border-color:var(--neon) !important; color:#000 !important; }

/* hide-all: collapse the whole rail to the side (desktop) */
.kp-body.kp-rail-collapsed{ padding-left:0 !important; }
.kp-body.kp-rail-collapsed #kp-rail{ transform:translateX(-100%); }
#kp-header .kp-burger{ display:inline-flex; }   /* always available to collapse/expand */

/* ===== RE-APPLIED PORTAL FIXES (footer centering, panel-info icons, mock-shell hide) ===== */
#kp-footer{ flex-direction:column !important; justify-content:center !important; align-items:center !important; text-align:center !important; gap:10px !important; }
#kp-footer .kp-foot-left{ align-items:center !important; text-align:center !important; }
.kp-share{ justify-content:center !important; }
.kp-panelinfo{ display:flex; gap:8px; margin-top:9px; }
.kp-pi{ flex:1; display:flex; align-items:center; justify-content:center; gap:7px; padding:8px 6px;
  background:#070a0e; border:1px solid var(--border); border-radius:8px; color:var(--text-muted); cursor:pointer;
  font-family:'JetBrains Mono',monospace; font-size:10px; letter-spacing:.02em; transition:color .15s,border-color .15s,background .15s; }
.kp-pi:hover{ color:var(--neon); border-color:var(--neon); background:rgba(159,239,0,.05); }
.kp-pi svg{ width:15px; height:15px; flex:0 0 auto; }
.kp-body .reserved{ display:none !important; }

/* MOCK-SHELL-HIDE: domain-checker ships fake site-shell placeholders; portal provides the real shell */
.r-top, .r-left, .r-foot, .r-top.reserved, .r-left.reserved, .r-foot.reserved{ display:none !important; }
