/* Layout: one fixed 3D stage behind tall sticky sections; scroll scrubs the camera. Single dark world, a paper section near the end. */
:root{
  --void:#050506;      /* the dark stage */
  --ink:#ECEAE4;       /* text on dark */
  --dim:#8E8A82;       /* secondary text on dark */
  --paper:#ECE9E2;     /* light section ground */
  --paper-ink:#141413; /* text on paper */
  --violet:#6E3CFF; --magenta:#EB32D2; --coral:#FF7850; --peak:#3DDC84; --amber:#FFAA00; --ota:#4C8DFF;
  --f-sans:'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
  --f-mono:'Geist Mono', ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace;
  --f-dot:'Doto', 'Geist Mono', ui-monospace, monospace;
  color-scheme: dark;
}
html{background:var(--void)}
body{background:var(--void);color:var(--ink);font-family:var(--f-sans);font-size:16px;-webkit-font-smoothing:antialiased;overflow-x:hidden}
html.locked, html.locked body{overflow:hidden;height:100%}
*{box-sizing:border-box}
a{color:inherit}
:focus-visible{outline:2px solid var(--coral);outline-offset:3px}

#gl{position:fixed;inset:0;width:100%;height:100%;display:block;z-index:0}
#seq{position:fixed;inset:0;width:100%;height:100%;display:none;z-index:0;background:var(--void)}
#veil{position:fixed;inset:0;background:var(--void);opacity:1;pointer-events:none;z-index:1}
#sweep{position:fixed;left:0;right:0;top:50%;height:2px;z-index:2;pointer-events:none;opacity:0;
  background:linear-gradient(90deg,transparent 0%,var(--violet) 30%,var(--magenta) 50%,var(--coral) 70%,transparent 100%);
  box-shadow:0 0 24px 4px rgba(235,50,210,.55);transform-origin:left center}

/* nav */
.nav{position:fixed;left:0;right:0;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:calc(env(safe-area-inset-top,0px) + 20px) clamp(16px,4vw,48px) 0;pointer-events:none}
.nav > *{pointer-events:auto}
.brand{font-family:var(--f-mono);font-size:12px;letter-spacing:.24em;text-decoration:none}
.pill{display:flex;gap:2px;padding:5px;border-radius:999px;background:rgba(20,20,22,.55);border:1px solid rgba(255,255,255,.08);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.pill a{padding:10px 16px;border-radius:999px;font-size:14px;text-decoration:none;color:var(--ink)}
.pill a:hover{background:rgba(255,255,255,.08)}
.pill a.cta{background:var(--ink);color:var(--void)}
@media (max-width:720px){.pill a:not(.cta){display:none}.brand{font-size:11px}}

/* boot */
#boot{position:fixed;inset:0;z-index:30;background:var(--void);display:grid;place-items:center;padding:24px;transition:opacity .9s ease}
#boot.off{opacity:0;pointer-events:none}
.boot-wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:clamp(28px,6vw,80px);max-width:1100px}
.boot-ring{position:relative;width:min(70vw,360px);aspect-ratio:1;max-width:100%}
.boot-ring canvas{width:100%;height:100%;display:block}
.boot-panel{display:flex;flex-direction:column;gap:18px;min-width:0;max-width:340px}
.boot-count{font-family:var(--f-dot);font-weight:900;font-size:clamp(64px,10vw,120px);line-height:.9;letter-spacing:.02em;font-variant-numeric:tabular-nums}
.spec{font-family:var(--f-mono);font-size:12px;letter-spacing:.12em;color:var(--dim);display:grid;grid-template-columns:auto 1fr;gap:6px 18px;text-transform:uppercase}
.spec b{color:var(--ink);font-weight:500}
.btn{appearance:none;border:1px solid rgba(255,255,255,.18);background:var(--ink);color:var(--void);font:500 15px/1 var(--f-sans);
  padding:16px 22px;border-radius:999px;cursor:pointer;display:inline-flex;align-items:center;gap:10px;align-self:flex-start}
.btn[disabled]{background:transparent;color:var(--dim);cursor:default}
.boot-note{font-size:13px;color:var(--dim);line-height:1.5}

/* sections */
main{position:relative;z-index:3}
section.scene{position:relative}
.stage{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;padding-inline:clamp(16px,5vw,72px)}
.ln{display:block;overflow:hidden}
.ln > span{display:block;transform:translateY(110%);opacity:0;will-change:transform,opacity}
.big{font-weight:600;letter-spacing:-.035em;line-height:.98;font-size:clamp(40px,7vw,104px);text-wrap:balance}
.mid{font-weight:500;letter-spacing:-.02em;line-height:1.08;font-size:clamp(26px,3.6vw,52px);text-wrap:balance}
.small{font-size:clamp(16px,1.4vw,19px);line-height:1.5;color:var(--dim);max-width:46ch}
.title-card{font-size:clamp(28px,8.6vw,168px);white-space:nowrap}
.eyebrow{font-family:var(--f-mono);font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--dim)}
.at-bottom{position:absolute;left:clamp(16px,5vw,72px);right:clamp(16px,5vw,72px);bottom:clamp(40px,9vh,96px);display:flex;flex-direction:column;gap:14px}
.at-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:16px;padding-inline:16px}
.at-left{position:absolute;left:clamp(16px,5vw,72px);top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:14px;max-width:min(560px,86vw)}

/* build captions */
.caps{position:absolute;left:clamp(16px,5vw,72px);bottom:clamp(36px,8vh,88px);width:min(520px,calc(100% - 32px));display:grid}
.cap{grid-area:1/1;display:flex;flex-direction:column;gap:10px;opacity:0;transform:translateY(16px);transition:none}
.cap .n{font-family:var(--f-mono);font-size:12px;letter-spacing:.2em;color:var(--dim)}
.cap .t{font-size:clamp(22px,2.4vw,34px);font-weight:500;letter-spacing:-.02em;line-height:1.15;text-wrap:balance}
/* sub build: the chip moment. The dies (chip_dies.js) draw over the dark stage, then shrink onto the 3D chips */
.chipcap{position:absolute;left:0;top:0;display:flex;flex-direction:column;gap:6px;opacity:0;pointer-events:none;will-change:transform,opacity}
.chipcap .nm{font-weight:600;letter-spacing:-.01em;font-size:clamp(20px,2.1vw,30px);line-height:1.1;-webkit-background-clip:text;background-clip:text;color:transparent}
.chipcap .ds{font-size:clamp(14px,1.15vw,17px);line-height:1.35;color:var(--dim)}
#chipCapA .nm{background-image:linear-gradient(90deg,#5ad1ff,#3b7bff 55%,#7a5cff)}
#chipCapB .nm{background-image:linear-gradient(90deg,#ffb347,#ff5e62 55%,#d53cff)}
.die{position:absolute;left:0;top:0;transform-origin:50% 50%;opacity:0;pointer-events:none;will-change:transform,opacity}
.die svg{display:block}
/* the chips' impact flash */
.fx{position:absolute;inset:0;pointer-events:none;opacity:0}


/* your turn */
.turn{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;padding-block:120px;padding-inline:16px;background:var(--void)}
.turn-head{text-align:center;display:flex;flex-direction:column;gap:12px;align-items:center}
/* the puck as built: the 1.28" knob (47 mm knurled aluminium, 42 mm black bezel, 32.5 mm screen) on an
   angled stand (soft-touch black face about 77 mm wide, knob centre 42 % down; aluminium base plate) */
.pstage{position:relative;width:min(92vw,520px);padding-top:calc(min(92vw,520px)*0.45);margin-bottom:calc(min(92vw,520px)*0.12)}
.stand{position:relative;z-index:1;width:100%;aspect-ratio:77/100;border-radius:9% 9% 2% 2% / 7% 7% 2% 2%;
  background:linear-gradient(180deg,#1d1d20,#131315 70%,#101012);box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 50px 90px rgba(0,0,0,.55)}
.stand::after{content:"";position:absolute;left:-3%;right:-3%;bottom:-4%;height:4%;border-radius:3px;
  background:linear-gradient(180deg,#d9dce1,#9da2a9 55%,#7c8188);box-shadow:0 10px 24px rgba(0,0,0,.5)}
/* the bezel: a 1/8 in (3.2 mm) mirror-chrome ring, about 6.8 % of the 47 mm knob */
.puck2d{position:absolute;left:19.5%;top:18.5%;width:61%;aspect-ratio:1;border-radius:50%;cursor:grab;touch-action:none;padding:4.15%;
  background:conic-gradient(from -28deg,#fbfcfd,#a3a8b0 7%,#3a3e44 15%,#d9dde2 24%,#ffffff 29%,#8f949b 38%,#2b2e33 49%,#c7cbd1 59%,#ffffff 65%,#787d84 75%,#34373c 85%,#e2e5e9 93%,#fbfcfd);
  box-shadow:0 0 0 1px rgba(0,0,0,.75),inset 0 0 0 1px rgba(255,255,255,.55),0 0 46px 6px rgba(40,95,255,.45),0 18px 30px rgba(0,0,0,.6)}
.puck2d:active{cursor:grabbing}
.puck2d .bezel{position:relative;width:100%;height:100%;border-radius:50%;padding:11.5%;background:radial-gradient(circle at 40% 30%,#141417,#030304 70%);
  box-shadow:0 0 0 1.5px rgba(0,0,0,.85),inset 0 0 10px rgba(0,0,0,.9)}
/* a domed cover glass over the screen: a soft highlight up top left, a thin bright rim, and the edge falling into shadow */
.puck2d .glass{position:absolute;inset:0;border-radius:50%;pointer-events:none;
  background:radial-gradient(70% 34% at 50% 5%,rgba(255,255,255,.32),rgba(255,255,255,0) 72%),
    radial-gradient(115% 80% at 28% 16%,rgba(255,255,255,.16),rgba(255,255,255,.04) 32%,rgba(255,255,255,0) 54%),
    linear-gradient(128deg,rgba(255,255,255,0) 38%,rgba(255,255,255,.06) 46%,rgba(255,255,255,0) 54%),
    radial-gradient(circle,rgba(0,0,0,0) 60%,rgba(0,0,0,.32) 80%,rgba(255,255,255,.08) 95.5%,rgba(255,255,255,.3) 98.6%,rgba(255,255,255,0) 100%);
  box-shadow:inset 0 2px 2px rgba(255,255,255,.22),inset 0 -4px 8px rgba(0,0,0,.55)}
.puck2d canvas{width:100%;height:100%;border-radius:50%;display:block}
.turn{overflow-x:clip}
/* the app tabs float close round the puck mount (over it, at times); the one in use swings to the top and lights its border */
.pstage{--w:min(92vw,520px)}
.tabs{position:absolute;inset:0;z-index:2;pointer-events:none}
.tab{position:absolute;left:0;top:0;width:calc(var(--w)*0.5);min-height:calc(var(--w)*0.3);padding:calc(var(--w)*0.04) calc(var(--w)*0.045) calc(var(--w)*0.05);
  border-radius:calc(var(--w)*0.04);background:rgba(241,239,234,.6);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:2px solid rgba(0,0,0,.06);color:#121214;cursor:pointer;text-align:left;font:inherit;
  pointer-events:auto;transform-origin:50% 50%;will-change:transform,opacity;box-shadow:0 18px 40px rgba(0,0,0,.45);
  transition:border-color .4s ease,box-shadow .4s ease,background .4s ease}
.tab .n{display:flex;align-items:center;gap:8px;font-family:var(--f-mono);font-size:calc(var(--w)*0.024);letter-spacing:.14em;color:#7a776f}
.tab .n i{width:calc(var(--w)*0.017);height:calc(var(--w)*0.017);border-radius:50%;background:var(--c)}
.tab .t{display:block;margin-top:calc(var(--w)*0.04);font-size:calc(var(--w)*0.06);font-weight:600;letter-spacing:-.02em;line-height:1.08;overflow-wrap:anywhere}
.tab.on{background:rgba(255,255,255,.6);border-color:var(--c);box-shadow:0 0 0 2px var(--c),0 0 40px -4px var(--c),0 26px 54px rgba(0,0,0,.55)}
.tab.on .n{color:#121214}
.chip{appearance:none;border:1px solid rgba(255,255,255,.16);background:transparent;color:var(--ink);font:500 14px/1 var(--f-sans);padding:12px 16px;border-radius:999px;cursor:pointer}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--void)}
#pressBtn{border-style:dashed}
.hint{font-family:var(--f-mono);font-size:12px;letter-spacing:.16em;color:var(--dim);text-transform:uppercase;text-align:center}

/* update */
.upd{position:absolute;left:50%;top:50%;width:min(64vh,80vw);aspect-ratio:1;max-width:100%;transform:translate(-50%,-50%)}
.upd canvas{width:100%;height:100%;display:block}
.trail{position:absolute;left:50%;top:0;bottom:0;width:2px;transform:translateX(-50%);overflow:visible}

/* meter */
.meter{position:absolute;left:50%;top:54%;width:min(120vh,96vw);max-width:100%;aspect-ratio:2/1.1;transform:translate(-50%,-50%)}
.meter svg{width:100%;height:100%;display:block;overflow:visible}
.read{position:absolute;left:50%;top:58%;transform:translate(-50%,-50%);text-align:center;display:flex;flex-direction:column;gap:6px;align-items:center}
.read .v{font-family:var(--f-dot);font-weight:900;font-size:clamp(40px,9vw,128px);white-space:nowrap;line-height:.9;font-variant-numeric:tabular-nums}
.read .k{font-family:var(--f-mono);font-size:12px;letter-spacing:.22em;color:var(--dim)}
.read .lim{font-family:var(--f-mono);font-size:12px;letter-spacing:.22em;color:var(--amber);opacity:0}

/* paper */
.paper{background:var(--paper);color:var(--paper-ink)}
.paper .eyebrow,.paper .small{color:#55524b}
.plan{position:absolute;right:clamp(16px,5vw,72px);top:50%;transform:translateY(-50%);width:min(620px,55vw);max-width:100%}
.plan svg{width:100%;height:auto;display:block;overflow:visible}
@media (max-width:820px){.plan{left:16px;right:16px;width:auto;top:auto;bottom:40px;transform:none}.paper .at-left{top:22%}}

/* commission */
.com{background:var(--void);padding-block:clamp(96px,14vh,160px);padding-inline:clamp(16px,5vw,72px);display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));gap:clamp(40px,6vw,96px);align-items:start}
.com-head{display:flex;flex-direction:column;gap:16px;position:sticky;top:120px;min-width:0}
form.list{display:flex;flex-direction:column;gap:4px;min-width:0}
.row{display:flex;flex-direction:column;gap:6px;padding:14px 18px;border-radius:18px;opacity:.42;transform:scale(.96);transform-origin:left center;transition:opacity .35s ease,transform .35s ease,background .35s ease}
.row:focus-within,.row:hover{opacity:1;transform:scale(1);background:rgba(255,255,255,.05)}
.row label{font-family:var(--f-mono);font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--dim)}
.row input,.row select,.row textarea{appearance:none;background:transparent;border:0;border-bottom:1px solid rgba(255,255,255,.16);color:var(--ink);font:500 clamp(20px,2vw,26px)/1.3 var(--f-sans);padding:6px 0;width:100%;border-radius:0}
.row select{background-image:none}
.row select option{background:#111;color:var(--ink)}
.row textarea{resize:vertical;min-height:80px;font-size:18px}
.row input:focus,.row select:focus,.row textarea:focus{outline:none;border-bottom-color:var(--coral)}
.two{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:4px}
.sent{font-size:15px;color:var(--peak);min-height:22px}
footer{background:var(--void);padding:0 clamp(16px,3vw,40px) 40px;overflow:hidden}
.giant{font-weight:700;letter-spacing:-.05em;font-size:clamp(48px,13.2vw,220px);line-height:.82;white-space:nowrap;color:var(--ink)}
.foot-row{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;font-family:var(--f-mono);font-size:12px;letter-spacing:.16em;color:var(--dim);text-transform:uppercase;padding-block:28px}
@media (prefers-reduced-motion: reduce){.row{transition:none}}

/* the numbers: in-room response at the seat, before and after tuning, and the three figures (from website/numbers/section.html) */
.num{position:relative;background:var(--void);padding:clamp(96px,14vh,160px) clamp(16px,5vw,72px);display:flex;flex-direction:column;gap:clamp(32px,5vh,56px);max-width:1280px;margin:0 auto}
.num .mid{margin:12px 0 0}
.graph{position:relative;width:100%}
.graph svg{width:100%;height:auto;display:block;overflow:visible}
.legend{display:flex;flex-wrap:wrap;gap:20px;font-family:var(--f-mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);margin-top:14px}
.legend i{display:inline-block;width:22px;height:2px;vertical-align:middle;margin-right:8px}
.src{font-family:var(--f-mono);font-size:11px;letter-spacing:.12em;color:#55524b;margin-top:8px;text-transform:uppercase}
.figs{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:1px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.1);border-radius:20px;overflow:hidden}
.fig{background:var(--void);padding:26px 24px 28px;display:flex;flex-direction:column;gap:16px;min-width:0;--num:#3DDC84}
.fig .v{font-family:var(--f-dot);font-weight:900;font-size:clamp(52px,6vw,88px);line-height:.9;font-variant-numeric:tabular-nums;white-space:nowrap}
/* a green LED panel: the lit digits over faint unlit "8"s, like a real dot-matrix display */
.fig .n{position:relative;display:inline-block;text-align:right;color:var(--num);isolation:isolate}
.fig .n::before{content:attr(data-ghost);position:absolute;right:0;top:0;color:rgba(61,220,132,.1);z-index:-1}
.fig .v small{font:inherit;margin-left:.28em;color:var(--dim)}
.fig .k{font-family:var(--f-mono);font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--dim)}
.numwrap{background:var(--void);position:relative}
