:root{
  --bg:#080b0e;
  --panel:#0d1116;
  --panel-2:#11161d;
  --card:#101720;
  --fg:#c7d3dd;
  --fg-strong:#eaf2f8;
  --dim:#647585;
  --accent:#5ee6a8;
  --accent-2:#57c7ff;
  --warn:#ffcc66;
  --red:#ff6b7a;
  --border:#1c242e;
  --glow:0 0 24px rgba(94,230,168,.14);
  --mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --sans:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-behavior:smooth}
html,body{height:100%}
body{
  margin:0;color:var(--fg);font-family:var(--mono);font-size:15px;line-height:1.65;
  background:radial-gradient(1200px 700px at 50% -10%,#10202a 0%,transparent 60%),var(--bg);
  -webkit-font-smoothing:antialiased;
}
body[data-view="term"]{display:block;padding:0;overflow:hidden}
body[data-view="gui"]{display:block;padding:0;font-family:var(--sans)}
body[data-view="gui"] .crt{display:none}

.crt{position:fixed;inset:0;pointer-events:none;z-index:5;
  background:repeating-linear-gradient(180deg,rgba(255,255,255,.014) 0 1px,transparent 1px 3px);
  mix-blend-mode:overlay}

.switch{font:inherit;font-size:12px;font-family:var(--mono);color:var(--dim);
  background:transparent;border:1px solid var(--border);border-radius:6px;
  padding:4px 10px;cursor:pointer;transition:.15s;white-space:nowrap}
.switch:hover,.switch:focus-visible{color:var(--accent);border-color:var(--accent);outline:none}

/* ================= TERMINAL ================= */
.shell{
  width:100%;height:100vh;height:100dvh;
  display:flex;flex-direction:column;
  background:linear-gradient(180deg,var(--panel-2),var(--panel));
  overflow:hidden;
}
.titlebar{display:flex;align-items:center;gap:12px;padding:10px clamp(14px,4vw,20px);
  background:#0b0f14;border-bottom:1px solid var(--border);
  font-size:12px;color:var(--dim);flex:0 0 auto}
.dots{display:flex;gap:6px}
.dots i{width:11px;height:11px;border-radius:50%;display:block}
.dots i:first-child{background:#ff5f57}
.dots i:nth-child(2){background:#febc2e}
.dots i:nth-child(3){background:#28c840}
.tt{flex:1;text-align:center;letter-spacing:.02em}
@media(max-width:560px){.tt{display:none}}

.screen{flex:1;overflow-y:auto;padding:26px clamp(18px,4vw,46px) 10px;outline:none;
  scrollbar-width:thin;scrollbar-color:#243040 transparent}
.screen::-webkit-scrollbar{width:8px}
.screen::-webkit-scrollbar-thumb{background:#243040;border-radius:4px}
.line{white-space:pre-wrap;word-break:break-word;font-family:var(--mono)}
.line.in{margin-top:14px}
.ps1{color:var(--dim);margin-right:8px}
.ps1 .u{color:var(--accent)}
.ps1 .h{color:var(--accent-2)}

.accent{color:var(--accent);font-weight:700}
.dim{color:var(--dim)}
.ok{color:var(--accent)}
.warn{color:var(--warn)}
.err{color:var(--red)}

.caret{display:inline-block;width:9px;height:1.05em;background:var(--accent);
  vertical-align:-2px;animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
.reveal{animation:fade .18s ease-out both}
@keyframes fade{from{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}

.chips{display:flex;gap:8px;padding:12px clamp(18px,4vw,46px);flex-wrap:wrap;flex:0 0 auto;
  background:#0b0f14;border-top:1px solid var(--border)}
.chips button{font-family:var(--mono);font-size:12px;color:var(--dim);background:#121922;
  border:1px solid var(--border);border-radius:999px;padding:5px 12px;cursor:pointer;transition:.15s}
.chips button:hover,.chips button:focus-visible{color:var(--accent);border-color:var(--accent);
  box-shadow:0 0 0 3px rgba(94,230,168,.08);outline:none}

#kb{position:fixed;opacity:0;pointer-events:none;left:-9999px;top:0}

/* ================= VISUAL SITE ================= */
.site{min-height:100%}
.nav{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:20px;
  padding:14px 32px;background:rgba(8,11,14,.82);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--border)}
.brand{display:flex;align-items:center;gap:9px;color:var(--fg-strong);
  text-decoration:none;font-weight:600;font-size:15px}
.logo{width:22px;height:22px;color:var(--accent);flex:0 0 auto}
.hero .logo{width:46px;height:46px;margin-bottom:22px;display:block}
.navlinks{display:flex;gap:22px;margin-left:auto;flex-wrap:wrap}
#out a,.card .body a{color:var(--accent-2);text-decoration:none;border-bottom:1px solid rgba(87,199,255,.35)}
#out a:hover,.card .body a:hover{border-bottom-color:var(--accent-2)}
.navlinks a{color:var(--dim);text-decoration:none;font-size:14px;transition:.15s}
.navlinks a:hover{color:var(--accent)}
@media(max-width:760px){.navlinks{display:none}.nav{padding:12px 18px}}

.hero{max-width:860px;margin:0 auto;padding:110px 32px 80px;text-align:left}
.eyebrow{font-family:var(--mono);font-size:13px;color:var(--accent);
  letter-spacing:.14em;text-transform:uppercase;margin:0 0 18px}
.hero h1{font-size:clamp(38px,7vw,72px);line-height:1.04;margin:0 0 20px;
  color:var(--fg-strong);font-weight:800;letter-spacing:-.03em}
.lede{font-size:clamp(17px,2.4vw,21px);color:var(--dim);max-width:56ch;margin:0 0 34px;line-height:1.6}
.cta{display:flex;gap:12px;flex-wrap:wrap}
.btn{display:inline-block;padding:12px 22px;border-radius:8px;text-decoration:none;
  font-size:15px;font-weight:500;border:1px solid var(--border);color:var(--fg);transition:.18s}
.btn:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#062015;font-weight:600}
.btn.primary:hover{background:#7df0bd;color:#062015;box-shadow:0 8px 24px rgba(94,230,168,.22)}

.sections{max-width:1200px;margin:0 auto;padding:0 32px 90px;display:grid;gap:22px}
.card{max-width:860px;width:100%;justify-self:center}
.card.wide{max-width:none}
.card{background:var(--card);border:1px solid var(--border);border-radius:14px;
  padding:30px 32px;scroll-margin-top:80px;transition:.2s}
.card:hover{border-color:#26333f}
.card h2{margin:0 0 6px;font-size:24px;color:var(--fg-strong);
  font-weight:700;letter-spacing:-.02em;display:flex;align-items:baseline;gap:10px}
.card h2 .no{font-family:var(--mono);font-size:13px;color:var(--accent);font-weight:500}
.card .sub{margin:0 0 22px;color:var(--dim);font-size:14px}
.card .body{font-family:var(--mono);font-size:14px;line-height:1.85;
  white-space:pre-wrap;word-break:break-word;color:var(--fg)}

.foot{max-width:860px;margin:0 auto;padding:26px 32px 44px;display:flex;
  justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;
  border-top:1px solid var(--border);color:var(--dim);font-size:13px}
.linkish{background:none;border:none;color:var(--dim);font:inherit;
  font-family:var(--mono);cursor:pointer;padding:0}
.linkish:hover{color:var(--accent)}

@media(max-width:640px){
  body{font-size:13.5px}
  .hero{padding:64px 20px 52px}
  .sections{padding:0 20px 60px}
  .card{padding:24px 20px}
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .caret{animation:none}.reveal{animation:none}
}

/* ================= resume request form ================= */
.reqform{margin-top:18px;padding:18px;border:1px solid var(--border);border-radius:12px;
  background:#0c1219;display:flex;flex-direction:column;gap:12px}
.reqlead{margin:0;font-size:14px;color:var(--fg-strong)}
.reqrow{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.reqform label{display:flex;flex-direction:column;gap:5px;font-family:var(--mono);
  font-size:12px;color:var(--dim)}
.reqform .opt{color:#3d4b58;text-transform:none}
.reqform input,.reqform textarea{font:inherit;font-family:var(--mono);font-size:13px;
  color:var(--fg);background:#121922;border:1px solid var(--border);border-radius:8px;
  padding:9px 11px;resize:vertical}
.reqform input:focus,.reqform textarea:focus{outline:none;border-color:var(--accent)}
/* honeypot: off-screen rather than display:none, which some bots skip */
.reqform .hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.reqfoot{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.tswidget{margin:4px 0 2px;min-height:65px}
.reqform button[disabled]{opacity:.5;cursor:not-allowed}
.reqmsg{font-family:var(--mono);font-size:12px;color:var(--dim)}
.reqmsg.ok{color:var(--accent)}
.reqmsg.bad{color:var(--warn)}
.reqfine{margin:0;font-family:var(--mono);font-size:11px;color:#3d4b58}
@media (max-width:560px){ .reqrow{grid-template-columns:1fr} }

/* ================= network map ================= */
.mapwrap{display:grid;grid-template-columns:minmax(0,1fr) 268px;gap:18px;
  margin:6px 0 26px;align-items:start}
.mapview{position:relative;height:clamp(400px,58vh,560px);overflow:hidden;
  background:radial-gradient(700px 380px at 50% 40%,#0d161d 0%,#0a0f14 100%);
  border:1px solid var(--border);border-radius:12px;cursor:grab;touch-action:none}
.mapview.grabbing{cursor:grabbing}
/* full screen: native where supported, fixed overlay as the iOS fallback */
.mapwrap:fullscreen,.mapwrap.fs{position:relative;height:100%;margin:0;padding:14px;
  background:var(--bg);grid-template-columns:1fr;grid-template-rows:1fr;align-items:stretch}
.mapwrap.fs{position:fixed;inset:0;z-index:200}
.mapwrap:fullscreen .mapview,.mapwrap.fs .mapview{height:100%}
/* the map is far wider than it is tall, so the panel floats instead of stealing a column */
.mapwrap:fullscreen .mappanel,.mapwrap.fs .mappanel{position:absolute;top:24px;right:24px;
  width:288px;max-height:calc(100% - 48px);overflow:auto;background:rgba(12,18,25,.95)}
.mapwrap:fullscreen .mapctl,.mapwrap.fs .mapctl{right:auto;left:10px}
svg.map{display:block;width:100%;height:100%}
.mapctl{position:absolute;top:10px;right:10px;display:flex;gap:6px}
.mapctl button{font-family:var(--mono);font-size:12px;min-width:28px;height:28px;
  color:var(--dim);background:rgba(13,19,26,.9);border:1px solid var(--border);
  border-radius:7px;cursor:pointer;transition:.15s}
.mapctl button:hover{color:var(--accent);border-color:var(--accent)}
.maphint{position:absolute;left:12px;bottom:10px;font-family:var(--mono);
  font-size:11px;color:#3d4b58;pointer-events:none}

.map .links path{fill:none;stroke:#233040;stroke-width:1.5}
.map .cbox{fill:rgba(87,199,255,.03);stroke:#1e2937;stroke-dasharray:3 4}
.map .peers path{fill:none;stroke-width:1.5;stroke-dasharray:5 4;opacity:.7}
.map .peers path.mesh{stroke:var(--accent-2)}
.map .peers path.tunnel{stroke:var(--warn);stroke-dasharray:2 5}
.map .peers path.hl{opacity:1;stroke-width:2.2}
.map .mn rect{fill:var(--panel-2);stroke:var(--border);transition:.15s}
.map .mn .lb{fill:var(--fg-strong);font:600 13px var(--sans)}
.map .mn .sb{fill:var(--dim);font:400 10.5px var(--mono)}
.map .mn.chip rect{fill:#0e151d}
.map .mn.chip .lb{font-size:12px;font-weight:500}
.map .mn.k-net rect{fill:#0c161c;stroke:#1c3542}
.map .mn.k-host rect{fill:#101a17;stroke:#1e3a30}
.map .mn{cursor:pointer}
.map .mn:hover rect,.map .mn:focus-visible rect{stroke:var(--accent);filter:drop-shadow(0 0 6px rgba(94,230,168,.25))}
.map .mn:focus-visible{outline:none}
.map.dimmed .mn{opacity:.32}
.map.dimmed .links path,.map.dimmed .cbox,.map.dimmed .peers path{opacity:.2}
.map .mn.hl,.map .links path.hl,.map .cbox.hl{opacity:1}
.map .links path.hl{stroke:var(--accent);stroke-width:2}
.map .mn.hl rect{stroke:var(--accent)}

.dot{stroke:none}
.s-up,.dot.s-up{fill:var(--accent)}
.s-wip,.dot.s-wip{fill:var(--warn)}
.s-planned,.dot.s-planned{fill:#44586a}
.s-down,.dot.s-down{fill:var(--red)}

.mappanel{background:#0c1219;border:1px solid var(--border);border-radius:12px;
  padding:18px;position:sticky;top:76px;min-height:180px}
.dt-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:4px}
.dt-head h3{margin:0;font-size:17px;color:var(--fg-strong);font-weight:600}
.badge{font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.08em;
  padding:2px 8px;border-radius:999px;background:#131c25;color:var(--dim)}
.badge.s-up{color:var(--accent);background:rgba(94,230,168,.1)}
.badge.s-wip{color:var(--warn);background:rgba(255,204,102,.1)}
.badge.s-down{color:var(--red);background:rgba(255,107,122,.1)}
.dt-live{font-family:var(--mono);font-size:12px;color:var(--accent);margin:0 0 10px;
  padding:7px 10px;background:rgba(94,230,168,.07);border-radius:7px;line-height:1.7}
.dt-live span{color:var(--dim)}
.livedot{display:inline-block;width:6px;height:6px;border-radius:50%;
  background:var(--accent);margin-right:5px;vertical-align:middle}

.dt-sub,.dt-path,.dt-kids,.dt-hint{font-size:13px;color:var(--dim);margin:0 0 10px;line-height:1.55}
.dt-path{font-family:var(--mono);font-size:11.5px;color:#4d5f6e}
.dt-exp{font-family:var(--mono);font-size:12px;color:var(--accent);margin:0 0 12px;
  display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.dt-exp span{color:var(--dim);text-transform:uppercase;font-size:10px;letter-spacing:.1em}
.dt-path .sep{opacity:.5;padding:0 2px}
.dt-notes{margin:0 0 12px;padding-left:18px;font-size:13.5px;line-height:1.6}
.dt-notes li{margin-bottom:4px}
.legend{display:flex;flex-direction:column;gap:7px;padding-top:14px;
  border-top:1px solid var(--border);font-size:12px;color:var(--dim)}
.legend span{display:flex;align-items:center;gap:8px}
.legend i{width:8px;height:8px;border-radius:50%;display:inline-block;background:currentColor}
.legend i.s-up{background:var(--accent)}
.legend i.s-wip{background:var(--warn)}
.legend i.s-planned{background:#44586a}
.legend i.s-down{background:var(--red)}
.legend i.s-mesh{background:none;border-top:2px dashed var(--accent-2);
  width:14px;height:0;border-radius:0}
.legend i.s-tunnel{background:none;border-top:2px dotted var(--warn);
  width:14px;height:0;border-radius:0}

@media(max-width:820px){
  .mapwrap{grid-template-columns:1fr}
  .mappanel{position:static}
}

.skiphint{position:fixed;right:18px;bottom:16px;z-index:6;
  font-family:var(--mono);font-size:11px;color:#3d4b58;
  animation:fade .6s ease-out both;white-space:nowrap;pointer-events:none}

/* ---- boot takeover: no chrome until the intro finishes ---- */
.titlebar,.chips{transition:opacity .45s ease,max-height .5s ease,padding .5s ease;
  max-height:80px;overflow:hidden}
.screen{transition:padding-top .55s ease}
body.booting .titlebar,body.booting .chips{
  opacity:0;max-height:0;padding-top:0;padding-bottom:0;border-width:0;pointer-events:none}
body.booting .screen{padding-top:clamp(28px,15vh,150px)}
