/* Security Lab — same navy/brass system as the main site, in a focused "console" layout. */
:root{
  --bg:#F2F4F7; --bg-2:#E9EDF3; --surface:#FFFFFF; --surface-2:#F6F8FB;
  --ink:#0C1422; --ink-2:#465265; --ink-3:#6B778A;
  --line:rgba(12,20,34,.11); --line-2:rgba(12,20,34,.2);
  --brass:#87611D; --brass-fill:#B98A2E; --brass-soft:rgba(185,138,46,.14); --on-brass:#FFFFFF;
  --ok:#11764A; --ok-soft:rgba(17,118,74,.12); --warn:#9A5806; --warn-soft:rgba(154,88,6,.12);
  --bad:#B22C1E; --bad-soft:rgba(178,44,30,.12);
  --term:#0E1726; --term-fg:#E8EDF4; --term-mute:#9AA6BC; --term-line:rgba(232,237,244,.12);
  --term-green:#43DB9B; --term-amber:#F2B544; --term-red:#F2715E;
  --header:rgba(242,244,247,.72); --shadow:0 1px 2px rgba(12,20,34,.06),0 12px 32px -12px rgba(12,20,34,.18);
  --f-display:"Archivo","Helvetica Neue",Arial,sans-serif;
  --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --r:14px; --max:1080px;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#070B13; --bg-2:#0A1019; --surface:#0E1522; --surface-2:#121B2B;
  --ink:#E8EDF4; --ink-2:#A3AFC2; --ink-3:#7D8AA0;
  --line:rgba(232,237,244,.09); --line-2:rgba(232,237,244,.18);
  --brass:#E2B964; --brass-fill:#D9AE55; --brass-soft:rgba(226,185,100,.13); --on-brass:#0A0F18;
  --ok:#43DB9B; --ok-soft:rgba(67,219,155,.12); --warn:#F2B544; --warn-soft:rgba(242,181,68,.13);
  --bad:#F2715E; --bad-soft:rgba(242,113,94,.14);
  --term:#0A101C; --term-fg:#E8EDF4; --term-mute:#9AA6BC; --term-line:rgba(232,237,244,.1);
  --header:rgba(7,11,19,.66); --shadow:0 1px 0 rgba(255,255,255,.03) inset,0 20px 40px -18px rgba(0,0,0,.7);
  color-scheme:dark;
}}
:root[data-theme="dark"]{
  --bg:#070B13; --bg-2:#0A1019; --surface:#0E1522; --surface-2:#121B2B;
  --ink:#E8EDF4; --ink-2:#A3AFC2; --ink-3:#7D8AA0;
  --line:rgba(232,237,244,.09); --line-2:rgba(232,237,244,.18);
  --brass:#E2B964; --brass-fill:#D9AE55; --brass-soft:rgba(226,185,100,.13); --on-brass:#0A0F18;
  --ok:#43DB9B; --ok-soft:rgba(67,219,155,.12); --warn:#F2B544; --warn-soft:rgba(242,181,68,.13);
  --bad:#F2715E; --bad-soft:rgba(242,113,94,.14);
  --term:#0A101C; --term-fg:#E8EDF4; --term-mute:#9AA6BC; --term-line:rgba(232,237,244,.1);
  --header:rgba(7,11,19,.66); --shadow:0 1px 0 rgba(255,255,255,.03) inset,0 20px 40px -18px rgba(0,0,0,.7);
  color-scheme:dark;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{background:var(--bg);color:var(--ink);font:400 17px/1.6 var(--f-body);margin:0;overflow-x:hidden;transition:background-color .4s,color .4s}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:60;background:var(--bg)}
img,svg{max-width:100%}
a{color:inherit}
:focus-visible{outline:2px solid var(--brass);outline-offset:3px;border-radius:6px}
::selection{background:var(--brass-fill);color:var(--on-brass)}
.wrap{max-width:var(--max);margin:0 auto;padding-left:max(20px,env(safe-area-inset-left,0px));padding-right:max(20px,env(safe-area-inset-right,0px))}
h1,h2,h3{font-family:var(--f-display);letter-spacing:-.02em;line-height:1.05;margin:0;text-wrap:balance;font-weight:700}
p{margin:0}
.mono{font-family:var(--f-mono)}
.eyebrow{font:500 12px/1 var(--f-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--brass);display:inline-flex;align-items:center;gap:10px}
.eyebrow::before{content:"";width:18px;height:1px;background:currentColor}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;font:600 15px/1 var(--f-body);text-decoration:none;padding:14px 20px;border-radius:999px;border:1px solid transparent;cursor:pointer;transition:transform .2s,background-color .2s,border-color .2s,box-shadow .2s}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn svg{width:16px;height:16px;flex:none}
.btn-primary{background:var(--ink);color:var(--bg)}
.btn-primary:not(:disabled):hover{transform:translateY(-1px);box-shadow:0 10px 24px -10px var(--brass-fill)}
.btn-brass{background:var(--brass-fill);color:var(--on-brass)}
.btn-brass:not(:disabled):hover{transform:translateY(-1px)}
.btn-ghost{border-color:var(--line-2);color:var(--ink);background:transparent}
.btn-ghost:not(:disabled):hover{border-color:var(--brass);color:var(--brass)}

/* header */
.site-header{position:sticky;top:env(safe-area-inset-top,0px);z-index:50;padding-top:14px;background:var(--bg)}
.bar{display:flex;align-items:center;gap:16px;padding:10px 10px 10px 4px;max-width:var(--max);margin:0 auto}
.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--ink);margin-right:auto;min-width:0}
.brand svg{width:34px;height:34px;flex:none}
.brand b{font:800 17px/1 var(--f-display);font-stretch:125%;letter-spacing:.04em}
.brand span{font:500 9.5px/1 var(--f-mono);letter-spacing:.3em;color:var(--ink-2);margin-top:5px;display:block}
.brand .wm{display:flex;flex-direction:column;line-height:1}
.back{font:500 14px/1 var(--f-body);color:var(--ink-2);text-decoration:none;display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.back:hover{color:var(--brass)}
.back svg{width:15px;height:15px}
.icon-btn{width:42px;height:42px;border-radius:50%;border:1px solid var(--line-2);background:transparent;color:var(--ink);display:grid;place-items:center;cursor:pointer;flex:none;transition:border-color .2s,color .2s}
.icon-btn:hover{border-color:var(--brass);color:var(--brass)}
.icon-btn svg{width:18px;height:18px}
.theme-btn .moon{display:none}
:root[data-theme="dark"] .theme-btn .moon{display:block}
:root[data-theme="dark"] .theme-btn .sun{display:none}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .theme-btn .moon{display:block}:root:not([data-theme="light"]) .theme-btn .sun{display:none}}

/* hero */
.hero{padding:40px 0 20px}
.hero h1{font-size:clamp(38px,6vw,68px);font-stretch:116%;font-weight:800;letter-spacing:-.03em;line-height:.98;margin:18px 0 18px}
.hero .lede{font-size:clamp(16px,1.4vw,19px);color:var(--ink-2);max-width:60ch}
.safe{display:inline-flex;align-items:center;gap:9px;margin-top:22px;font:500 13px/1.4 var(--f-body);color:var(--ok);background:var(--ok-soft);padding:10px 14px;border-radius:999px}
.safe svg{width:16px;height:16px;flex:none}

/* tabs */
.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:28px 0 24px;position:sticky;top:calc(66px + env(safe-area-inset-top,0px));z-index:40;padding:12px 0;background:var(--bg)}
.tab{display:inline-flex;align-items:center;gap:10px;font:600 15px/1 var(--f-body);padding:13px 18px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);cursor:pointer;transition:all .2s}
.tab svg{width:18px;height:18px}
.tab:hover{border-color:var(--brass);color:var(--ink)}
.tab[aria-selected="true"]{background:var(--ink);color:var(--bg);border-color:transparent}
.tab .n{font:600 11px/1 var(--f-mono);opacity:.6}
.panel[hidden]{display:none}
.panel{animation:fade .4s ease}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.panel-head{max-width:64ch;margin-bottom:24px}
.panel-head h2{font-size:clamp(26px,3.4vw,40px);margin-bottom:12px}
.panel-head p{color:var(--ink-2)}

.card{background:var(--surface);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow)}
.pad{padding:clamp(20px,3vw,30px)}

/* ---------- terminal ---------- */
.term{background:var(--term);color:var(--term-fg);border-radius:16px;overflow:hidden;border:1px solid var(--term-line)}
.term-top{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--term-line);font:500 12px/1 var(--f-mono);color:var(--term-mute)}
.dots{display:flex;gap:6px;margin-right:8px}
.dots i{width:11px;height:11px;border-radius:50%;display:block;background:var(--term-line)}
.term-body{padding:16px;font:500 13.5px/1.7 var(--f-mono);min-height:260px;max-height:400px;overflow-y:auto;white-space:pre-wrap;word-break:break-word}
.term-body .ln{display:block}
.c-green{color:var(--term-green)}
.c-amber{color:var(--term-amber)}
.c-red{color:var(--term-red)}
.c-mute{color:var(--term-mute)}
.cursor::after{content:"▋";color:var(--term-green);animation:blink 1s steps(1) infinite;margin-left:2px}
@keyframes blink{50%{opacity:0}}

/* wifi */
.wifi-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:20px;align-items:start}
.net-list{display:grid;gap:10px;margin:0;padding:0;list-style:none}
.net{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:14px;width:100%;text-align:left;padding:14px 16px;border-radius:14px;border:1px solid var(--line-2);background:var(--surface);cursor:pointer;color:inherit;font:inherit;transition:border-color .2s,transform .2s}
.net:hover{border-color:var(--brass);transform:translateX(2px)}
.net[aria-pressed="true"]{border-color:var(--brass-fill);background:var(--brass-soft)}
.net .ssid{min-width:0}
.net .ssid b{display:block;font:600 15px/1.2 var(--f-body);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.net .ssid span{font:500 11.5px/1 var(--f-mono);color:var(--ink-3)}
.sig{display:flex;align-items:flex-end;gap:2px;height:18px}
.sig i{width:3px;background:var(--ink-3);border-radius:1px;display:block}
.sig .l1{height:6px}.sig .l2{height:9px}.sig .l3{height:13px}.sig .l4{height:18px}.sig i.off{opacity:.25}
.tag{font:600 10.5px/1 var(--f-mono);letter-spacing:.06em;text-transform:uppercase;padding:5px 8px;border-radius:6px;white-space:nowrap}
.tag.open{color:var(--bad);background:var(--bad-soft)}
.tag.wps{color:var(--warn);background:var(--warn-soft)}
.tag.wpa2{color:var(--ink-3);background:var(--bg-2)}
.tag.wpa3{color:var(--ok);background:var(--ok-soft)}
.wifi-actions{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}
.verdict{margin-top:16px;border-radius:14px;padding:18px;border:1px solid var(--line)}
.verdict[data-v="bad"]{background:var(--bad-soft);border-color:color-mix(in srgb,var(--bad) 40%,transparent)}
.verdict[data-v="warn"]{background:var(--warn-soft);border-color:color-mix(in srgb,var(--warn) 40%,transparent)}
.verdict[data-v="good"]{background:var(--ok-soft);border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.verdict h3{font-size:19px;display:flex;align-items:center;gap:10px;margin-bottom:8px}
.verdict h3 svg{width:20px;height:20px;flex:none}
.verdict p{font-size:14.5px;color:var(--ink-2)}
.verdict .fix{margin-top:12px;font:600 13px/1.5 var(--f-body);color:var(--ink)}

/* password tool */
.pw-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:start}
.pw-field{position:relative}
.pw-field input{width:100%;font:500 18px/1.4 var(--f-mono);color:var(--ink);background:var(--bg);border:1px solid var(--line-2);border-radius:12px;padding:16px 50px 16px 16px;transition:border-color .2s,box-shadow .2s}
.pw-field input:focus{outline:none;border-color:var(--brass-fill);box-shadow:0 0 0 4px var(--brass-soft)}
.pw-eye{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:38px;height:38px;border:0;background:transparent;color:var(--ink-3);display:grid;place-items:center;cursor:pointer;border-radius:8px}
.pw-eye:hover{color:var(--ink)}
.pw-eye svg{width:20px;height:20px}
.meter{height:10px;border-radius:999px;background:var(--bg-2);overflow:hidden;margin:16px 0 10px}
.meter i{display:block;height:100%;width:0;border-radius:999px;transition:width .4s,background-color .4s}
.pw-stat{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
.pw-label{font:700 18px/1 var(--f-display);font-stretch:108%}
.pw-time{font:500 13px/1.4 var(--f-mono);color:var(--ink-2);text-align:right}
.pw-time b{color:var(--ink);font-weight:600}
.pw-notes{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:8px}
.pw-notes li{display:flex;gap:10px;font-size:14px;align-items:flex-start;color:var(--ink-2)}
.pw-notes li svg{width:16px;height:16px;flex:none;margin-top:3px}
.pw-notes li.good svg{color:var(--ok)}
.pw-notes li.bad svg{color:var(--bad)}
.pw-notes li.warn svg{color:var(--warn)}
.gen-controls{display:grid;gap:16px;margin-bottom:18px}
.seg{display:flex;gap:4px;padding:4px;background:var(--bg-2);border-radius:999px}
.seg button{flex:1;font:600 14px/1 var(--f-body);padding:10px;border:0;border-radius:999px;background:transparent;color:var(--ink-2);cursor:pointer;transition:all .2s}
.seg button[aria-selected="true"]{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}
.slider-row{display:flex;align-items:center;gap:14px;font:500 13px/1 var(--f-mono);color:var(--ink-2)}
.slider-row input[type=range]{flex:1;accent-color:var(--brass-fill)}
.slider-row .val{min-width:28px;text-align:right;color:var(--ink);font-weight:600}
.opts{display:flex;flex-wrap:wrap;gap:8px}
.chip-toggle{font:500 13px/1 var(--f-mono);padding:9px 12px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-3);cursor:pointer}
.chip-toggle[aria-pressed="true"]{border-color:var(--brass-fill);background:var(--brass-soft);color:var(--ink)}
.gen-out{display:flex;align-items:center;gap:12px;background:var(--term);color:var(--term-fg);border-radius:12px;padding:16px;min-height:60px}
.gen-out .val{flex:1;min-width:0;font:600 17px/1.4 var(--f-mono);word-break:break-all}
.gen-copy{flex:none;width:42px;height:42px;border-radius:10px;border:1px solid var(--term-line);background:transparent;color:var(--term-fg);cursor:pointer;display:grid;place-items:center}
.gen-copy:hover{border-color:var(--term-green);color:var(--term-green)}
.gen-copy svg{width:18px;height:18px}
.copied{font:500 12px/1 var(--f-mono);color:var(--ok)}

/* phishing game */
.phish-stage{max-width:540px;margin:0 auto}
.progress-row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;font:500 12px/1 var(--f-mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.1em}
.pbar{height:6px;border-radius:999px;background:var(--bg-2);overflow:hidden;margin-bottom:20px}
.pbar i{display:block;height:100%;background:var(--brass-fill);width:0;transition:width .4s}
.message{border:1px solid var(--line);border-radius:16px;overflow:hidden;background:var(--surface)}
.msg-head{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.msg-ic{width:38px;height:38px;border-radius:50%;flex:none;display:grid;place-items:center;background:var(--brass-soft);color:var(--brass)}
.msg-ic svg{width:20px;height:20px}
.msg-meta{min-width:0}
.msg-meta b{display:block;font:600 14px/1.2 var(--f-body);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msg-meta span{font:500 12px/1.3 var(--f-mono);color:var(--ink-3);word-break:break-all}
.msg-body{padding:18px 16px;font-size:15px;line-height:1.6;color:var(--ink)}
.msg-body .subj{font-weight:600;margin-bottom:10px}
.mark{background:var(--warn-soft);border-bottom:2px solid var(--warn);padding:0 2px;border-radius:3px 3px 0 0}
.phish-choices{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}
.choice{font:600 15px/1 var(--f-body);padding:16px;border-radius:12px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:9px;transition:all .15s}
.choice svg{width:18px;height:18px}
.choice.legit:hover{border-color:var(--ok);color:var(--ok)}
.choice.phish:hover{border-color:var(--bad);color:var(--bad)}
.reveal{margin-top:16px;border-radius:12px;padding:16px;display:none}
.reveal.show{display:block;animation:fade .3s}
.reveal[data-r="right"]{background:var(--ok-soft)}
.reveal[data-r="wrong"]{background:var(--bad-soft)}
.reveal h4{font:700 16px/1.2 var(--f-display);display:flex;align-items:center;gap:8px;margin-bottom:8px}
.reveal h4 svg{width:18px;height:18px}
.reveal[data-r="right"] h4{color:var(--ok)}
.reveal[data-r="wrong"] h4{color:var(--bad)}
.reveal p{font-size:14px;color:var(--ink-2)}
.reveal .next{margin-top:14px}
.score-final{text-align:center;padding:20px 0}
.score-final .big{font:800 72px/1 var(--f-display);font-stretch:112%;color:var(--brass-fill)}
.score-final h3{font-size:26px;margin:10px 0}
.score-final p{color:var(--ink-2);max-width:44ch;margin:0 auto 20px}

/* CTA footer band */
.cta{margin-top:44px;border-radius:20px;background:var(--term);color:var(--term-fg);padding:clamp(26px,4vw,44px);text-align:center}
.cta h2{font-size:clamp(24px,3vw,34px);color:var(--term-fg);margin-bottom:12px}
.cta p{color:var(--term-mute);max-width:52ch;margin:0 auto 22px}
.cta .btn-brass:hover{box-shadow:0 10px 30px -10px var(--brass-fill)}

footer{padding:40px 0 calc(32px + env(safe-area-inset-bottom,0px));margin-top:40px;border-top:1px solid var(--line)}
.foot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:18px}
.foot p{font-size:13px;color:var(--ink-3);max-width:60ch}
.foot a{color:var(--brass);text-decoration:none}

@media (max-width:860px){
  .wifi-grid,.pw-grid{grid-template-columns:1fr}
}
@media (max-width:480px){
  .tabs{gap:6px}
  .tab{padding:11px 13px;font-size:13.5px}
  .tab .lbl-long{display:none}
  .phish-choices{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}
