/* ============================================================
   WorkspaceHQ v3 — launch site
   Tokens are the WorkspaceHQ design system's ARCADE theme, verbatim
   (embed/_ds/…/tokens). The components the design imported from the DS
   bundle (Button, Tag, ProgressBar, Kpi, Achievement, SectionHeading) are
   rebuilt here as plain CSS with the same values.
   One deliberate change: --faint. The DS value (#5e588a) measures ~3:1 on
   the background and this page sets it as TEXT, so it is lifted to pass
   4.5:1. Everything else matches the design.
   ============================================================ */
@font-face{font-family:"Press Start 2P";src:url(fonts/PressStart2P.woff2) format("woff2");font-display:swap}
@font-face{font-family:"VT323";src:url(fonts/VT323.woff2) format("woff2");font-display:swap}

:root{
  --bg:#07060f;--bg2:#0c0a1e;--panel:#100d24;--card:#14102b;--card-hi:#1a1538;--ink:#050409;
  --frame:#322a5e;--frame-hi:#5a4ea8;
  --text:#e8e6ff;--muted:#9a93c9;--faint:#8a83bd;
  --cyan:#00f0ff;--magenta:#ff2bd6;--gold:#ffd23f;--gold-2:#ffe27a;--green:#3aff6e;--red:#ff4757;
  --orange:#ffa502;--yellow:#ffe14d;--blue:#4d9fff;--purple:#b14aff;--pink:#ff6bcb;
  --link:var(--cyan);--link-hover:var(--gold-2);
  --px:"Press Start 2P","Courier New",monospace;
  --term:"VT323","Cascadia Code",Consolas,monospace;
  --shadow-frame:0 0 0 2px var(--frame),0 0 14px -6px rgba(90,78,168,.55);
  --pad:clamp(20px,5vw,56px);
  --ease:cubic-bezier(.16,1,.3,1)}
*{box-sizing:border-box}
html{scroll-behavior:smooth;background:var(--bg);scroll-padding-top:70px}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--term);overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:var(--link);text-decoration:none}
a:hover{color:var(--link-hover)}
::selection{background:#ffd23f;color:#3a2a00}
:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
h1,h2,h3,p{margin:0}
.skip{position:fixed;left:12px;top:8px;z-index:200;padding:10px 14px;background:var(--gold);color:#3a2a00;font-family:var(--px);font-size:9px;
  transform:translateY(-200%);transition:transform .15s}
.skip:focus{transform:none}

/* ---------- colour utilities ---------- */
.t-red{color:var(--red)}.t-gold{color:var(--gold)}.t-gold2{color:var(--gold-2)}.t-green{color:var(--green)}
.t-magenta{color:var(--magenta)}.t-text{color:var(--text)}

/* ---------- motion ---------- */
@keyframes drift{0%{transform:translate(0,0) scale(1)}50%{transform:translate(-3%,2%) scale(1.08)}100%{transform:translate(2%,-2%) scale(1.04)}}
@keyframes float{50%{transform:translateY(-12px)}}
@keyframes pulse{50%{opacity:.35}}
@keyframes blink{0%,49%{opacity:1}50%,100%{opacity:0}}
@keyframes marq{to{transform:translateX(-50%)}}
@keyframes gl1{0%,91%,100%{transform:translate(0);opacity:0}92%{transform:translate(-7px,-2px);opacity:1}95%{transform:translate(5px,1px);opacity:1}97%{opacity:0}}
@keyframes gl2{0%,88%,100%{transform:translate(0);opacity:0}89%{transform:translate(7px,2px);opacity:1}94%{transform:translate(-4px,-1px);opacity:1}96%{opacity:0}}
@keyframes rise{0%{transform:translate(-50%,0) scale(.6);opacity:0}20%{transform:translate(-50%,-18px) scale(1.1);opacity:1}100%{transform:translate(-50%,-90px) scale(1);opacity:0}}
@keyframes zz{0%{transform:translate(0,0);opacity:0}30%{opacity:1}100%{transform:translate(18px,-46px);opacity:0}}
.blink{animation:blink 1.1s steps(1) infinite}
/* nothing loops while it is off screen: app.js marks sections .off */
.off,.off *{animation-play-state:paused!important}
/* PAUSE MOTION (the nav button, app.js) sets html.motion-off: every loop on
   the page stops (WCAG 2.2.2). The loops are removed rather than frozen, so
   nothing is caught mid-blink (invisible) or mid-glitch. The one-shot "+130 XP"
   pop that answers a click still plays. prefers-reduced-motion stops
   everything, with no JS needed, unless the visitor pressed the button to
   play (html.motion-on). */
.motion-off *:not(.pops>span),.motion-off *::before,.motion-off *::after{animation:none!important}
/* Without JS there is no switch to pause them, so the loops do not run at all
   (index.html's head script adds html.js when scripts run). */
html:not(.js) *:not(.pops>span),html:not(.js) *::before,html:not(.js) *::after{animation:none!important}
@media (prefers-reduced-motion:reduce){
  html:not(.motion-on) *,html:not(.motion-on) *::before,html:not(.motion-on) *::after{animation:none!important;transition:none!important}
  html{scroll-behavior:auto}
}
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ---------- atmosphere ---------- */
.fx-aurora{position:fixed;inset:-20%;z-index:0;pointer-events:none;
  background:radial-gradient(36% 36% at 80% 10%,rgba(255,210,63,.16),transparent 60%),radial-gradient(34% 34% at 10% 28%,rgba(0,240,255,.12),transparent 60%),radial-gradient(46% 46% at 60% 100%,rgba(90,78,168,.42),transparent 60%),radial-gradient(28% 28% at 96% 72%,rgba(255,43,214,.12),transparent 60%);
  animation:drift 24s ease-in-out infinite alternate}
.fx-grid{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.07;
  background-image:linear-gradient(#5a4ea8 1px,transparent 1px),linear-gradient(90deg,#5a4ea8 1px,transparent 1px);background-size:64px 64px}
.fx-cursor{position:fixed;top:0;left:0;width:320px;height:320px;margin:-160px 0 0 -160px;border-radius:50%;z-index:2;pointer-events:none;
  background:radial-gradient(circle,rgba(255,210,63,.13),transparent 62%);opacity:0;transition:opacity .4s}
.fx-cursor.on{opacity:1}
.fx-scan{position:fixed;inset:0;z-index:70;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(0,0,0,.18) 0 1px,transparent 1px 3px)}
.fx-vignette{position:fixed;inset:0;z-index:70;pointer-events:none;background:radial-gradient(ellipse at center,transparent 55%,rgba(0,0,0,.55) 100%)}
.prog{position:fixed;top:0;left:0;right:0;height:4px;z-index:80;background:var(--ink)}
.prog i{display:block;height:100%;width:100%;transform:scaleX(0);transform-origin:0 50%;
  background:repeating-linear-gradient(90deg,#ffd23f 0 10px,transparent 10px 12px);box-shadow:0 0 12px rgba(255,210,63,.7)}

/* ---------- nav ---------- */
/* the nav sits ABOVE the scanline and vignette layers (z 70): under them the
   vignette darkened the INSTALL button to 3.6:1 at the screen edge */
.nav{position:fixed;top:4px;left:0;right:0;z-index:75;display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding:16px var(--pad);border-bottom:2px solid transparent;transition:background .6s,border-color .6s}
.nav.stuck{background:rgba(7,6,15,.9);border-bottom-color:var(--frame)}
.brand{font-family:var(--px);font-size:12px;letter-spacing:1px;color:var(--text);white-space:nowrap}
.brand span{color:var(--gold);text-shadow:0 0 8px rgba(255,210,63,.6)}
.nav-links{flex:1 1 auto;min-width:0;height:24px;overflow:hidden;display:flex;flex-wrap:wrap;justify-content:center;column-gap:26px;
  font-family:var(--px);font-size:8px;letter-spacing:1px;line-height:24px}
.nav-links a{color:var(--muted)}
.nav-links a:hover{color:var(--gold-2)}
.nav-end{flex:none;display:flex;align-items:center;gap:12px}
.motion-btn[hidden]{display:none}
.motion-btn svg{flex:none;width:9px;height:9px;fill:currentColor;shape-rendering:crispEdges}
.motion-btn .ic-play{display:none}
/* .nav prefix: stays dark-on-gold under .btn--ghost:hover, which comes later */
.nav .motion-btn[aria-pressed="true"]{color:#3a2a00;background:linear-gradient(180deg,var(--gold-2),var(--gold));border-color:#8a6200}
.motion-btn[aria-pressed="true"] .ic-play{display:inline}
.motion-btn[aria-pressed="true"] .ic-pause{display:none}

/* ---------- DS: Button ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--px);line-height:1.4;cursor:pointer;border-radius:0;
  letter-spacing:1px;white-space:nowrap;transition:transform .12s,background .12s,border-color .12s,box-shadow .12s,color .12s}
.btn--sm{font-size:7px;padding:6px 10px;min-height:30px}
.btn--lg{font-size:9px;padding:12px 18px;min-height:44px}
.btn--primary{color:#3a2a00;background:linear-gradient(180deg,var(--gold-2),var(--gold));border:2px solid #8a6200;box-shadow:0 3px 0 #8a6200}
.btn--primary:hover{color:#3a2a00;filter:brightness(1.05)}
.btn--primary:active{transform:translateY(3px);box-shadow:none}
.btn--outline{color:var(--cyan);background:transparent;border:2px solid var(--ink);box-shadow:0 0 0 1px var(--frame)}
.btn--outline:hover{color:var(--gold-2)}
.btn--ghost{color:var(--muted);background:var(--ink);border:2px solid var(--frame)}
.btn--ghost:hover{color:var(--gold-2);border-color:var(--gold)}
.btn--ghost:active{transform:translateY(2px)}

/* ---------- DS: Tag ---------- */
.tags{display:flex;flex-wrap:wrap;gap:6px}
.tag{display:inline-flex;align-items:center;font-family:var(--term);font-size:16px;line-height:1.1;padding:3px 8px;white-space:nowrap;
  color:var(--muted);border:1px solid var(--frame);background:var(--ink)}
.tag--green{color:var(--green);border-color:rgba(58,255,110,.5);background:rgba(58,255,110,.06)}
.tag--red{color:var(--red);border-color:rgba(255,71,87,.5);background:rgba(255,71,87,.07)}
.tag--orange{color:var(--orange);border-color:rgba(255,165,2,.5);background:rgba(255,165,2,.07)}
.tag--blue{color:var(--blue);border-color:rgba(77,159,255,.45);background:rgba(77,159,255,.06)}
.tag--gold{color:var(--gold-2);border-color:rgba(255,210,63,.5);background:rgba(255,210,63,.07)}

/* ---------- DS: ProgressBar ---------- */
.pbar{position:relative;background:var(--ink);border:2px solid var(--ink);box-shadow:0 0 0 1px var(--frame);overflow:hidden}
.pbar--12{height:12px}.pbar--14{height:14px}
.pbar i{display:block;height:100%;width:0;background:var(--gold);color:var(--gold);box-shadow:0 0 8px currentColor;transition:width .7s cubic-bezier(.22,1,.36,1)}
.pbar::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 6px,var(--ink) 6px 8px);pointer-events:none}
.w-86{width:86%!important}.w-83{width:83%}

/* ---------- DS: SectionHeading (an eyebrow here; the big line is the h2) ---------- */
.sh{display:flex;align-items:baseline;gap:8px;margin:0 0 22px;font-family:var(--px);font-size:10px;letter-spacing:2px;line-height:1.6;
  color:var(--cyan);text-shadow:0 0 9px rgba(0,240,255,.5)}
.sh::before{content:"■";color:var(--faint)}
.px-label{font-family:var(--px);font-size:7px;letter-spacing:1px;line-height:1.8;color:var(--faint)}
.px-label--gap{margin-bottom:10px}
.px-label--row{display:flex;justify-content:space-between;align-items:center}

/* ---------- layout ---------- */
main{position:relative;z-index:3}
main:focus{outline:none}   /* focused by the skip link (tabindex=-1), not a control */
.sec{max-width:1320px;margin:0 auto;padding:clamp(80px,11vw,140px) var(--pad)}
.sec--narrow{max-width:1100px;padding-block:clamp(60px,8vw,110px)}
.sec--demo{padding-top:clamp(40px,6vw,80px)}
.sec h2,.install-h{font-weight:400;font-size:clamp(56px,8vw,128px);line-height:.84;letter-spacing:-.01em}
.sec h2 em,.install-h em,.demo-big em{font-style:normal;color:var(--gold);text-shadow:0 0 30px rgba(255,210,63,.4)}
.h2-gap{margin-bottom:56px!important}
.sec-head--split{display:flex;flex-wrap:wrap;align-items:end;justify-content:space-between;gap:24px;margin-bottom:40px}
.sec-aside{max-width:34ch;font-size:23px;line-height:1.3;color:var(--muted)}
.rule{height:2px;max-width:1320px;margin:0 auto;background:linear-gradient(90deg,transparent,var(--gold),var(--cyan),transparent);opacity:.7}
.rule--magenta{background:linear-gradient(90deg,transparent,var(--magenta),var(--gold),transparent)}

/* ---------- 01 hero ---------- */
.hero{max-width:1320px;margin:0 auto;min-height:100vh;padding:150px var(--pad) 80px;display:flex;flex-wrap:wrap;align-items:center;gap:56px}
.hero-copy{flex:1 1 640px;min-width:0}
.hero-kick{font-family:var(--px);font-size:9px;letter-spacing:2px;color:var(--cyan);line-height:1.8;margin-bottom:30px;text-shadow:0 0 9px rgba(0,240,255,.45)}
.hero-kick .blink{color:var(--magenta)}
.hero h1{margin:0 0 0 -.04em;font-weight:400;font-size:clamp(84px,13.5vw,220px);line-height:.8;letter-spacing:-.01em}
.glitch{position:relative;display:inline-block;color:var(--gold);text-shadow:0 0 38px rgba(255,210,63,.45)}
/* The two coloured copies hang off .glitch-fx, an aria-hidden layer over the
   word (index.html): generated content on the heading itself was read as part
   of its name ("now playable. playable. playable."). They rest invisible and
   only flash mid-animation, so with motion stopped the word stays plain gold. */
.glitch-fx{position:absolute;inset:0;pointer-events:none}
.glitch-fx::before,.glitch-fx::after{content:attr(data-text);position:absolute;inset:0;text-shadow:none;opacity:0}
.glitch-fx::before{color:var(--cyan);clip-path:inset(0 0 58% 0);animation:gl1 2.8s infinite linear}
.glitch-fx::after{color:var(--magenta);clip-path:inset(58% 0 0 0);animation:gl2 2.3s infinite linear}
.hero-lede{margin-top:40px;max-width:46ch;font-size:clamp(22px,2vw,27px);line-height:1.3;color:var(--muted);text-wrap:pretty}
.hero-cta{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin-top:44px}

/* install terminals */
.term{border:2px solid var(--ink);background:var(--ink);text-align:left}
.term--hero{flex:1 1 420px;max-width:600px;box-shadow:var(--shadow-frame)}
.term--install{width:100%;max-width:680px;box-shadow:0 0 0 2px var(--gold),0 0 40px -10px rgba(255,210,63,.7)}
.term-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;background:var(--panel);border-bottom:2px solid var(--ink)}
.term-tag{font-family:var(--px);font-size:7px;letter-spacing:1px;padding:7px 10px;border:2px solid var(--gold);color:var(--gold-2)}
.term-os{font-family:var(--px);font-size:6.5px;letter-spacing:1px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.term-line{display:flex;align-items:center;gap:14px;padding:14px 16px}
.term-line--2{padding-top:0}
.term-dollar{font-size:30px;color:var(--gold);line-height:1}
.term-cmd{flex:1 1 auto;min-width:0;font-family:var(--term);font-size:clamp(20px,2.1vw,28px);line-height:1;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.term-cmd--muted{color:var(--muted)}

/* Bit, the scan card */
.hero-bit{flex:0 1 340px;min-width:280px;margin:0 auto;position:relative;padding-top:120px;animation:float 6s ease-in-out infinite}
.bit-btn{display:block;padding:0;border:0;background:none;cursor:pointer;transition:transform .17s cubic-bezier(.34,1.56,.64,1)}
.bit-btn--small{position:absolute;left:50%;top:6px;transform:translateX(-50%)}
.bit-btn--small.hop{transform:translateX(-50%) translateY(-22px)}
.bit-btn--big{position:relative;margin-bottom:-4px;max-width:100%}
/* the big sprite is 288px wide: on a 320px screen it scales down instead of
   widening the card (and the page) past the viewport */
.bit-btn--big .bit svg{max-width:100%;height:auto}
.bit-btn--big.hop{transform:translateY(-40px)}
.bit svg{display:block;overflow:visible;shape-rendering:crispEdges;filter:drop-shadow(0 0 18px rgba(217,119,87,.35))}
.pops{position:absolute;left:50%;pointer-events:none}
.pops--hero{top:10px}
.pops--big{bottom:230px}
.pops span{position:absolute;left:0;font-family:var(--px);color:var(--gold);white-space:nowrap;text-shadow:0 0 8px rgba(255,210,63,.8);animation:rise 1s ease-out forwards}
.pops--hero span{font-size:9px}.pops--big span{font-size:11px}
.scan-card{background:linear-gradient(160deg,var(--card-hi),var(--card));border:2px solid var(--ink);box-shadow:var(--shadow-frame);padding:16px 18px;display:grid;gap:10px}
.scan-row{display:flex;align-items:center;gap:10px;font-size:21px;color:var(--muted)}
.scan-row--between{justify-content:space-between;align-items:baseline;gap:12px}
.dot-live{width:8px;height:8px;background:var(--green);box-shadow:0 0 10px var(--green);animation:pulse 1.6s infinite}
.scan-num{font-size:40px;line-height:.9;color:var(--gold-2)}

/* ---------- screens (reel / walkthrough / demo) ---------- */
.screen{border:2px solid var(--ink);background:var(--ink);box-shadow:0 0 0 2px var(--frame),0 40px 120px -30px rgba(0,0,0,.9),0 0 60px -20px rgba(255,210,63,.35)}
.screen-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 14px;background:var(--panel);border-bottom:2px solid var(--ink);
  font-family:var(--px);font-size:7px;letter-spacing:1px;line-height:1.6;color:var(--faint)}
.screen-169{display:block;width:100%;aspect-ratio:16/9;border:0;background:#0d0d0f}

/* marquee */
.marquee{position:relative;overflow:hidden;border-top:2px solid var(--frame);border-bottom:2px solid var(--frame);background:var(--panel);padding:22px 0}
.marquee-track{display:flex;gap:40px;width:max-content;animation:marq 34s linear infinite;font-size:clamp(34px,4vw,54px);line-height:1;white-space:nowrap}
.marquee-track b{font-weight:400;color:var(--gold)}

/* ---------- 03 features ---------- */
.feat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,270px),1fr));gap:22px}
.feat{--ring:var(--gold);--glow:rgba(255,210,63,.8);display:flex;flex-direction:column;gap:12px;padding:26px 24px;
  background:linear-gradient(165deg,var(--card-hi),var(--card));border:2px solid var(--ink);box-shadow:var(--shadow-frame);
  transition:transform .5s var(--ease),box-shadow .3s}
.feat:hover{transform:translateY(-6px);box-shadow:0 0 0 2px var(--ring),0 0 26px -8px var(--glow)}
.feat--red{--ring:var(--red);--glow:rgba(255,71,87,.8)}
.feat--cyan{--ring:var(--cyan);--glow:rgba(0,240,255,.7)}
.feat--orange{--ring:var(--orange);--glow:rgba(255,165,2,.8)}
.feat--magenta{--ring:var(--magenta);--glow:rgba(255,43,214,.8)}
.feat-n{font-family:var(--px);font-size:10px;color:var(--cyan)}
.feat h3{margin-top:6px;font-weight:400;font-size:38px;line-height:.95}
.feat-sub{font-size:23px;color:var(--gold-2);line-height:1}
.feat-p{flex:1 1 auto;font-size:21px;line-height:1.25;color:var(--muted)}

/* ---------- 04 walkthrough ---------- */
.walk{display:flex;flex-wrap:wrap;gap:28px;align-items:flex-start}
.chapters{flex:1 1 280px}
.chap-list{display:grid;gap:4px}
.chap{display:grid;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;padding:10px 12px;text-align:left;
  background:transparent;border:0;border-left:3px solid var(--frame);color:var(--text);font-family:var(--term);cursor:pointer;transition:background .2s}
.chap:hover{background:var(--card-hi)}
.chap[aria-pressed="true"]{background:var(--card-hi);border-left-color:var(--gold)}
.chap .n{font-family:var(--px);font-size:8px;color:var(--cyan)}
.chap .l{font-size:24px;line-height:1}
.chap .ts{font-size:19px;color:var(--faint)}
.walk-screen{flex:3 1 600px;min-width:0}

/* ---------- 05 demo ---------- */
.demo-status{color:var(--faint)}
.demo-status.live{color:var(--green)}
.demo-stage{position:relative;height:clamp(560px,82vh,860px);background:#0d0d0f}
.demo-stage iframe{display:block;width:100%;height:100%;border:0;background:#0d0d0f}
.demo-coin{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:30px;padding:24px;text-align:center;
  background:radial-gradient(ellipse at center,rgba(90,78,168,.25),transparent 65%)}
.demo-big{font-size:clamp(70px,10vw,150px);line-height:.8}
.demo-coin .px-label{font-size:8px;letter-spacing:2px;color:var(--muted)}

/* ---------- 06 Bit ---------- */
.bit-wrap{display:flex;flex-wrap:wrap;gap:32px;align-items:stretch}
.bit-card{flex:1 1 520px;min-width:0;position:relative;display:grid;grid-template-columns:minmax(0,1fr);gap:24px;padding:26px;
  background:linear-gradient(165deg,var(--card-hi),var(--card));border:2px solid var(--ink);box-shadow:var(--shadow-frame)}
.bit-floor{position:relative;height:300px;display:flex;align-items:flex-end;justify-content:center;border-bottom:2px solid var(--frame);
  background:repeating-linear-gradient(90deg,transparent 0 31px,rgba(90,78,168,.12) 31px 32px),linear-gradient(0deg,rgba(90,78,168,.18),transparent 40%)}
.zz{position:absolute;display:none;font-family:var(--px);color:var(--cyan);animation:zz 2.2s ease-out infinite}
.zz--1{left:62%;bottom:210px;font-size:14px}
.zz--2{left:65%;bottom:230px;font-size:10px;animation-delay:.8s}
.bit-card.sleepy .zz{display:block}
.mood-line{font-size:24px;line-height:1.25;min-height:60px}
.moods{display:flex;flex-wrap:wrap;gap:8px}
.moods .btn[aria-pressed="true"]{color:#3a2a00;background:linear-gradient(180deg,var(--gold-2),var(--gold));border-color:#8a6200;box-shadow:0 3px 0 #8a6200}
.xp{display:grid;gap:8px}
.xp-row{display:flex;justify-content:space-between;gap:10px;font-size:19px;color:var(--faint)}
.bit-side{flex:1 1 400px;min-width:0;display:grid;gap:22px;align-content:start}
.bit-blurb{font-size:clamp(24px,2.2vw,30px);line-height:1.25;color:var(--muted);text-wrap:pretty}

/* DS: Kpi */
.kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.kpi{--accent:var(--blue);position:relative;padding:13px 14px 13px 18px;background:linear-gradient(160deg,var(--card-hi),var(--card));border:2px solid var(--ink);box-shadow:var(--shadow-frame)}
.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--accent)}
.kpi--gold{--accent:var(--gold)}.kpi--orange{--accent:var(--orange)}.kpi--green{--accent:var(--green)}
.kpi b{display:block;font-weight:400;font-size:34px;line-height:.9}
.kpi span{display:block;margin-top:9px;font-family:var(--px);font-size:6.5px;letter-spacing:1px;text-transform:uppercase;color:var(--muted)}

/* DS: Achievement */
.achs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
/* Locked: the DS dims the whole card to .55 opacity, which took its text to
   2.8:1. Here only the icon greys out and the name drops to --muted; the
   text stays legible, and unlocking still lights the gold ring. */
.ach{position:relative;text-align:center;padding:16px 14px;background:linear-gradient(165deg,var(--card-hi),var(--card));border:2px solid var(--ink);
  box-shadow:var(--shadow-frame);transition:box-shadow .4s}
.ach b{color:var(--muted)}
.ach.on{box-shadow:0 0 0 2px var(--gold),0 0 22px -8px rgba(255,210,63,.9)}
.ach.on b{color:var(--text)}
.ach-star{position:absolute;top:8px;right:10px;color:var(--gold-2);font-size:15px;text-shadow:0 0 8px rgba(255,210,63,.8);display:none}
.ach.on .ach-star{display:block}
.ach-i{display:block;font-size:34px;filter:grayscale(1) opacity(.45)}
.ach.on .ach-i{filter:none}
.ach b{display:block;margin-top:11px;font-family:var(--px);font-weight:400;font-size:8.5px;letter-spacing:.5px;line-height:1.5}
.ach>span:last-child{display:block;margin-top:6px;font-size:16px;line-height:1.3;color:var(--muted)}

/* ---------- 07 changelog ---------- */
.log{list-style:none;margin:0;padding:0;display:grid;border-top:2px solid var(--frame)}
.log li{display:grid;grid-template-columns:120px minmax(0,1fr) minmax(0,1.3fr);gap:8px 28px;align-items:baseline;padding:24px 4px;border-bottom:1px dashed var(--frame);transition:background .2s}
.log li:hover{background:rgba(26,21,56,.6)}
.log .tag{justify-self:start}
.log b{font-weight:400;font-size:32px;line-height:1}
.log li>span:last-child{font-size:22px;line-height:1.25;color:var(--muted)}

/* ---------- 08 FAQ ---------- */
.faq{display:grid;gap:14px}
.faq details{background:var(--card);border:2px solid var(--ink);box-shadow:0 0 0 2px var(--frame);transition:box-shadow .2s}
.faq details[open]{box-shadow:0 0 0 2px var(--gold)}
.faq summary{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px 22px;font-size:28px;line-height:1.1;cursor:pointer;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary i::before{content:"+";font-style:normal;font-family:var(--px);font-size:12px;color:var(--gold)}
.faq details[open] summary i::before{content:"−"}
.faq details p{padding:0 22px 22px;font-size:23px;line-height:1.3;color:var(--muted);max-width:70ch}

/* ---------- 09 install / signature / footer ---------- */
.install{display:flex;flex-direction:column;align-items:center;text-align:center;gap:34px;padding-block:clamp(60px,9vw,120px)}
.install .px-label{font-size:9px;letter-spacing:2px}
.install-h{font-size:clamp(70px,11vw,180px);line-height:.8}
.install-p{max-width:40ch;font-size:25px;line-height:1.3;color:var(--muted)}
.sig{padding:clamp(70px,12vw,150px) 20px clamp(50px,8vw,90px);text-align:center;overflow:hidden}
/* fits on one line at every width; under user text-spacing overrides
   (WCAG 1.4.12) it breaks instead of being cut by .sig's overflow:hidden */
.sig-word{font-size:clamp(64px,17vw,300px);line-height:.8;letter-spacing:-.02em;overflow-wrap:anywhere}
.sig-word span{color:var(--gold);text-shadow:0 0 50px rgba(255,210,63,.5)}
.sig-sub{margin-top:30px;font-size:9px;letter-spacing:3px;color:var(--muted)}
/* the footer sits after <main> (a contentinfo landmark), so it carries main's
   stacking itself to stay above the fixed aurora, grid and cursor glow */
.foot{position:relative;z-index:3;border-top:2px solid var(--frame);padding:34px var(--pad);display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px;
  font-family:var(--px);font-size:7px;letter-spacing:1px;line-height:1.8;color:var(--faint)}
.foot a{color:var(--muted)}
.foot a:hover{color:var(--gold-2)}

/* ---------- reveal (app.js arms it only below the fold) ---------- */
.rv{opacity:0;translate:0 46px;transition:opacity .9s var(--ease),translate .9s var(--ease),transform .5s var(--ease),box-shadow .3s,background .2s}
.rv.in{opacity:1;translate:0 0}

/* The motion switch shows only its icon (its name stays for assistive tech)
   wherever its label would push section links off the one-row nav. */
@media (max-width:1279px){
  .motion-tx{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
  .motion-btn{min-width:34px}
}

/* ---------- small screens ---------- */
@media (max-width:720px){
  .nav-links{display:none}
  .nav{gap:12px}
  /* the motion button keeps its name for assistive tech, shows only its icon */
  .motion-tx{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
  .motion-btn{min-width:34px}
  .log li{grid-template-columns:minmax(0,1fr)}
  .kpis{gap:10px}
  .achs{gap:10px}
  .bit-floor{height:250px}
  .term-line{flex-wrap:wrap}
  .term--hero{min-width:0}
  .term-bar{flex-wrap:wrap}
  .term-cmd{flex-basis:calc(100% - 44px);white-space:normal;overflow-wrap:anywhere;font-size:22px}
  .hero{padding-top:120px}
}

/* ---------- print: dark text on white, no atmosphere or players, nothing
   left at the reveal's opacity 0, FAQ answers printed ---------- */
@media print{
  html,body{background:#fff}
  .fx-aurora,.fx-grid,.fx-cursor,.fx-scan,.fx-vignette,.prog,.nav,.skip,.marquee,.rule,.screen,.hero-bit,.bit-floor,.moods,.xp,[data-copy],.glitch-fx{display:none!important}
  *,*::before,*::after{color:#000!important;background:transparent!important;text-shadow:none!important;box-shadow:none!important;animation:none!important;transition:none!important}
  .rv{opacity:1!important;translate:none!important}
  .hero{min-height:0;padding-top:0}
  .sec,.install,.sig{padding-block:28px}
  .term,.scan-card,.feat,.bit-card,.kpi,.ach,.faq details,.tag{border:1px solid #888!important}
  .faq details::details-content{display:block;content-visibility:visible}
  .term-cmd{white-space:normal;overflow-wrap:anywhere}
}

/* breadcrumb: Numidea Labs / br4vetr4veler / WorkspaceHQ */
.bc ol{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 18px;padding:0;list-style:none;
  font-family:var(--px);font-size:7px;letter-spacing:1px;line-height:1.8;color:var(--muted)}
.bc li{display:flex;align-items:center;gap:8px}
.bc li+li::before{content:"›";color:var(--gold)}
.bc a{color:var(--muted)}
.bc a:hover,.bc a:focus-visible{color:var(--text)}
.bc [aria-current]{color:var(--text)}

/* ===== r3/a: mobile audit ===== */
/* Finger-sized hit areas for the small pixel-font links, without moving a
   thing: the wordmark was a 12px-tall target, the breadcrumb links 13px and
   the footer links 7px (measured at 320-844px). Padding grows the target;
   the negative margin (or the inline box) keeps the layout where it was. */
.brand{padding-block:12px;margin-block:-12px}
.bc a{padding-block:8px;margin-block:-8px}
.foot a{padding-block:9px}
/* The hero centres its copy in a screen-tall box: 100vh is the LARGE
   viewport on iOS, so with the toolbars out the copy sat low and the box ran
   under them. svh is the screen as first seen. */
@supports (height:1svh){@media screen{.hero{min-height:100svh}}}   /* print keeps min-height:0 */
