
/* Palette sampled from the film's own frames: tobacco amber, olive khaki, petrol night.
   Committed single dark theme - it is a film site; every colour is painted explicitly. */
:root{
  color-scheme:dark;
  --bg:#0B0E0D; --bg2:#111514; --bg3:#171C1A; --bg4:#1E2422;
  --line:#242A28; --line2:#333A37; --line3:#454D49;
  --ink:#EAE6DB; --ink2:#9C9789; --ink3:#6C6A61;
  --amber:#C98A4B; --amber-hi:#E0A466; --amber-lo:#2B1E12;
  --olive:#8E9160; --olive-lo:#1D2117;
  --petrol:#4B82AC; --petrol-lo:#132330;
  --rust:#B4573C; --rust-lo:#2A150F;
  --f-disp:"Bodoni Moda",Didot,"Bodoni MT","Times New Roman",serif;
  --f-body:"Archivo","Helvetica Neue",Helvetica,Arial,sans-serif;
  --f-mono:"DM Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
}
*{box-sizing:border-box}
/* overflow-x on <body> makes the body its own scroll container, which silently
   breaks window.scrollTo and scrollIntoView. It belongs on <html>. */
html{scroll-behavior:smooth;overflow-x:hidden}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--f-body);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}
p{margin:0}
img,video{display:block;max-width:100%}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:0;padding:0}
a{color:var(--amber);text-underline-offset:3px}
:focus-visible{outline:2px solid var(--amber);outline-offset:3px}
.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.wrap{width:min(1240px,90vw);margin-inline:auto}
.narrow{width:min(680px,90vw);margin-inline:auto}
h1,h2,h3{margin:0;font-family:var(--f-disp);font-weight:500;line-height:1.02;letter-spacing:-.015em;text-wrap:balance}
.lbl{font-family:var(--f-mono);font-size:.66rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ink3)}

/* ---------- masthead ---------- */
header.mast{position:sticky;top:0;z-index:80;background:rgba(11,14,13,.82);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}
.mast-in{display:flex;align-items:center;gap:26px;height:58px;width:min(1240px,90vw);margin-inline:auto}
.mark{display:flex;align-items:baseline;gap:9px;text-decoration:none;color:var(--ink);margin-right:auto;white-space:nowrap}
.mark b{font-family:var(--f-disp);font-weight:600;font-size:1.12rem;letter-spacing:-.01em}
.mark span{font-family:var(--f-mono);font-size:.58rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink3)}
.mast nav{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}
.mast nav::-webkit-scrollbar{display:none}
.mast nav a{font-family:var(--f-body);font-size:.72rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink2);text-decoration:none;padding:9px 12px;border-bottom:2px solid transparent;white-space:nowrap}
.mast nav a:hover{color:var(--ink)}
.mast nav a.on{color:var(--ink);border-bottom-color:var(--amber)}

/* ---------- page furniture ---------- */
.page{animation:fade .5s ease both}
@keyframes fade{from{opacity:0}to{opacity:1}}
.ptitle{font-size:clamp(2.6rem,7vw,5.4rem);line-height:.94}
.phead{padding-block:clamp(38px,6vw,72px) clamp(24px,3.5vw,40px);border-bottom:1px solid var(--line)}
.phead .lbl{margin-bottom:16px}
.phead p.sub{color:var(--ink2);font-size:1.02rem;max-width:56ch;margin-top:18px}
.blk{padding-block:clamp(40px,6vw,80px)}
.hr{height:1px;background:var(--line);border:0;margin:0}

/* ---------- home ---------- */
.hero{position:relative;height:min(76vh,660px);min-height:470px;overflow:hidden;background:var(--bg2)}
.hero video{width:100%;height:100%;object-fit:cover;filter:saturate(1.04)}
.hero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,14,13,.55) 0%,rgba(11,14,13,0) 30%,rgba(11,14,13,.15) 55%,rgba(11,14,13,.94) 100%)}
.hero-c{position:absolute;inset:auto 0 0 0;z-index:2;padding-bottom:clamp(28px,4vw,52px)}
.hero-c h1{font-size:clamp(2.5rem,min(11vw,15vh),8.5rem);font-weight:500;line-height:.95;letter-spacing:-.028em}
.hero-c .credit{font-family:var(--f-mono);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink2);margin-bottom:12px}
.hero-c .strip{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:22px;font-family:var(--f-mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink2)}
.tagpill{position:absolute;top:20px;left:0;right:0;z-index:2}
.tagpill span{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink2);border:1px solid var(--line2);background:rgba(11,14,13,.7);padding:6px 12px;border-radius:2px}

.reel{display:flex;gap:10px;overflow-x:auto;padding:14px 0 20px;scroll-snap-type:x mandatory}
.reel::-webkit-scrollbar{height:6px}
.reel::-webkit-scrollbar-thumb{background:var(--line2);border-radius:99px}
.reel figure{margin:0;flex:none;width:clamp(210px,26vw,290px);scroll-snap-align:start}
.reel video,.reel img{width:100%;aspect-ratio:16/9;object-fit:cover;background:var(--bg2);filter:grayscale(.32) contrast(1.02);transition:filter .5s}
.reel figure:hover video,.reel figure:hover img{filter:none}
.reel figcaption{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink3);margin-top:8px}

.intro{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,6vw,90px);align-items:start}
@media(max-width:820px){.intro{grid-template-columns:1fr}}
.intro p{font-size:1.06rem;color:var(--ink2)}
.intro p+p{margin-top:1.05em}
.intro p b{color:var(--ink);font-weight:600}
.pull{font-family:var(--f-disp);font-size:clamp(1.5rem,3.2vw,2.3rem);line-height:1.16;font-style:italic;color:var(--ink);border-left:2px solid var(--amber);padding-left:clamp(18px,2.5vw,30px)}
.pull cite{display:block;font-family:var(--f-mono);font-size:.66rem;font-style:normal;letter-spacing:.16em;text-transform:uppercase;color:var(--ink3);margin-top:16px}

.doors{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:2px;background:var(--line)}
.door{position:relative;aspect-ratio:4/3;overflow:hidden;display:block;text-decoration:none;background:var(--bg2)}
.door img{width:100%;height:100%;object-fit:cover;filter:grayscale(.55) brightness(.62);transition:filter .55s,transform .8s}
.door:hover img{filter:grayscale(0) brightness(.78);transform:scale(1.04)}
.door figcaption{position:absolute;inset:auto 0 0 0;padding:18px 20px;background:linear-gradient(transparent,rgba(11,14,13,.9))}
.door h3{font-size:1.5rem;color:var(--ink);font-weight:500}
.door p{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);margin-top:6px}

/* ---------- film page ---------- */
.filmgrid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr);gap:clamp(30px,5vw,74px);align-items:start}
@media(max-width:900px){.filmgrid{grid-template-columns:1fr}}
.prose p{font-size:1.06rem;color:var(--ink2)}
.prose p+p{margin-top:1.05em}
.prose p.big{font-size:1.24rem;color:var(--ink);line-height:1.5}
.credits dt{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);padding-top:11px}
.credits dd{margin:0 0 11px;font-size:.94rem;padding-bottom:11px;border-bottom:1px solid var(--line)}
.credits dd em{color:var(--ink2);font-style:normal}
.credits{margin:0}
.band{position:relative;margin-block:clamp(40px,6vw,80px);background:var(--bg2)}
.band video{width:100%;height:clamp(280px,46vw,520px);object-fit:cover}
.band figcaption{position:absolute;bottom:0;left:0;right:0;padding:16px 20px;background:linear-gradient(transparent,rgba(11,14,13,.86));font-family:var(--f-mono);font-size:.64rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink2)}
.speclist{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:0 clamp(24px,4vw,56px)}
.speclist div{padding:13px 0;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:16px;align-items:baseline}
.speclist dt{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);flex:none}
.speclist dd{margin:0;font-size:.9rem;text-align:right}
.timeline{border-top:1px solid var(--line)}
.tl{display:grid;grid-template-columns:8.5em 1fr auto;gap:18px;padding:13px 0;border-bottom:1px solid var(--line);align-items:baseline;font-size:.93rem}
@media(max-width:620px){.tl{grid-template-columns:1fr;gap:3px}.tl .tl-r{text-align:left!important}}
.tl .tl-d{font-family:var(--f-mono);font-size:.68rem;letter-spacing:.08em;color:var(--amber);text-transform:uppercase}
.tl .tl-r{text-align:right;font-family:var(--f-mono);font-size:.66rem;letter-spacing:.08em;color:var(--ink3);text-transform:uppercase}
.castlist{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:0 clamp(24px,4vw,56px)}
.castlist div{display:flex;justify-content:space-between;gap:14px;align-items:baseline;padding:9px 0;border-bottom:1px solid var(--line)}
.castlist .nm{font-size:.95rem}
.castlist .ro{font-family:var(--f-mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink3);text-align:right}
.statline{display:flex;flex-wrap:wrap;gap:clamp(26px,5vw,66px);padding-block:clamp(26px,4vw,44px);border-block:1px solid var(--line);margin-block:clamp(34px,5vw,60px)}
.statline div{min-width:96px}
.statline .n{font-family:var(--f-disp);font-size:clamp(2.1rem,5vw,3.2rem);line-height:1;color:var(--amber)}
.statline .k{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);margin-top:9px}

/* ---------- map ---------- */
.maplay{display:grid;grid-template-columns:minmax(0,1fr) 372px;gap:0;border-top:1px solid var(--line);min-height:70vh}
@media(max-width:1000px){.maplay{grid-template-columns:1fr}}
.mapcol{position:relative;background:var(--bg2);border-right:1px solid var(--line)}
@media(max-width:1000px){.mapcol{border-right:0;border-bottom:1px solid var(--line)}}
.areabar{display:flex;gap:1px;background:var(--line);border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
.areabar::-webkit-scrollbar{display:none}
.areabar button{background:var(--bg2);padding:11px 15px;font-family:var(--f-mono);font-size:.62rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink3);white-space:nowrap;flex:none}
.areabar button:hover{color:var(--ink);background:var(--bg3)}
.areabar button.on{color:var(--bg);background:var(--amber)}
#mapsvg{display:block;width:100%;height:clamp(400px,62vh,760px);touch-action:none;cursor:grab;background:var(--bg2)}
#mapsvg.drag{cursor:grabbing}
.mapfoot{display:flex;align-items:center;gap:16px;padding:10px 15px;border-top:1px solid var(--line);background:var(--bg2);flex-wrap:wrap}
.scalebar{display:flex;align-items:center;gap:9px;font-family:var(--f-mono);font-size:.6rem;letter-spacing:.1em;color:var(--ink3)}
.scalebar i{display:block;height:6px;border:1px solid var(--ink3);border-top:0;transition:width .2s}
.attrib{margin-left:auto;font-family:var(--f-mono);font-size:.56rem;letter-spacing:.06em;color:var(--ink3)}
.attrib a{color:var(--ink3)}
.zoombtns{display:flex;gap:1px;background:var(--line)}
.zoombtns button{background:var(--bg3);width:28px;height:26px;font-family:var(--f-mono);font-size:.85rem;color:var(--ink2);display:grid;place-items:center}
.zoombtns button:hover{background:var(--bg4);color:var(--ink)}
/* map layer styling: strokes hold constant screen width while zooming, as a map should */
g[class^="ly-"] path{vector-effect:non-scaling-stroke}
.ly-w{fill:#18211A;stroke:none}
.ly-g{fill:#161D18;stroke:none}
.ly-aq{fill:#13232E;stroke:#1F3A4C;stroke-width:1}
.ly-water{fill:none;stroke:#2A4E66;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.ly-rail{fill:none;stroke:#414845;stroke-width:1.2;stroke-dasharray:6 4}
.ly-e{fill:none;stroke:#242B28;stroke-width:.55;stroke-linecap:round}
.ly-d{fill:none;stroke:#2C332F;stroke-width:.85;stroke-linecap:round}
.ly-c{fill:none;stroke:#3C4541;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.ly-b{fill:none;stroke:#525C56;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}
.ly-a{fill:none;stroke:#7A6A47;stroke-width:3.4;stroke-linecap:round;stroke-linejoin:round}
.plabel{font-family:var(--f-mono);fill:var(--ink3);letter-spacing:.16em;text-transform:uppercase;pointer-events:none}
.belg{fill:#141A18;stroke:#39423E;stroke-width:1.5;vector-effect:non-scaling-stroke}
.mpin{cursor:pointer}
.mpin .ring{fill:none;stroke:var(--amber);stroke-width:2;opacity:.9}
.mpin .core{fill:var(--amber)}
.mpin .lab{font-family:var(--f-mono);font-size:12px;fill:var(--bg);font-weight:500;text-anchor:middle;dominant-baseline:central;pointer-events:none}
.mpin.on .ring{stroke:var(--ink)}
.mpin.on .core{fill:var(--ink)}
.mpin.on .lab{fill:var(--bg)}
.mpin .halo{fill:var(--amber);opacity:0}
.mpin.on .halo{fill:var(--ink);opacity:.16}
.mpin:hover .core{fill:var(--amber-hi)}

.loccol{background:var(--bg);overflow-y:auto;max-height:min(72vh,860px)}
@media(max-width:1000px){.loccol{max-height:none}}
.locitem{display:grid;grid-template-columns:30px 1fr;gap:14px;width:100%;text-align:left;padding:15px 20px;border-bottom:1px solid var(--line);transition:background .18s}
.locitem:hover{background:var(--bg2)}
.locitem.on{background:var(--bg3);box-shadow:inset 3px 0 0 var(--amber)}
.locitem .n{font-family:var(--f-mono);font-size:.72rem;color:var(--ink3);padding-top:2px}
.locitem.on .n{color:var(--amber)}
.locitem h4{margin:0;font-size:.99rem;font-weight:600;letter-spacing:-.005em}
.locitem .sc{display:block;font-size:.86rem;color:var(--ink2);margin-top:3px}
.locitem .co{display:block;font-family:var(--f-mono);font-size:.63rem;color:var(--ink3);margin-top:8px;overflow-wrap:anywhere}
.locitem .mp{display:inline-block;font-family:var(--f-mono);font-size:.6rem;letter-spacing:.11em;text-transform:uppercase;color:var(--petrol);margin-top:8px;text-decoration:none}
.locitem .mp:hover{text-decoration:underline}

/* ---------- arcade / quiz ---------- */
.rooms{display:grid;grid-template-columns:repeat(4,1fr);gap:2px;background:var(--line)}
@media(max-width:980px){.rooms{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){
  /* Four picture tiles stack to ~870px on a phone, pushing the game far below the
     fold so tapping one looks like nothing happened. Compact rows instead, so the
     game is on screen the moment it opens. */
  .rooms{grid-template-columns:1fr;gap:1px}
  .room{width:100%;aspect-ratio:auto;height:66px;display:grid;grid-template-columns:104px 1fr;align-items:center}
  .room img{height:66px;filter:grayscale(.45) brightness(.6)}
  .room .cap{position:static;padding:0 14px;background:none}
  .room h3{font-size:1.02rem}
  .room p{display:none}
  .room.on{box-shadow:inset 0 0 0 2px var(--amber)}
}
.room{position:relative;width:100%;aspect-ratio:16/10;overflow:hidden;background:var(--bg2);text-align:left}
.room img{width:100%;height:100%;object-fit:cover;filter:grayscale(.6) brightness(.5);transition:filter .5s,transform .7s}
.room:hover img,.room.on img{filter:grayscale(.1) brightness(.72);transform:scale(1.03)}
.room .cap{position:absolute;inset:auto 0 0 0;padding:15px 17px;background:linear-gradient(transparent,rgba(11,14,13,.92))}
.room h3{font-size:1.22rem;font-weight:500}
.room p{font-size:.8rem;color:var(--ink2);margin-top:4px;line-height:1.35}
.room.on{box-shadow:inset 0 0 0 2px var(--amber)}
.stage{border:1px solid var(--line);border-top:0;background:var(--bg2)}
.stagehead{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;padding:15px 20px;border-bottom:1px solid var(--line)}
.stagehead h3{font-size:1.25rem}
.stagehead .sh-sub{font-size:.85rem;color:var(--ink2);margin-top:3px}
.hud{display:flex;gap:18px;flex-wrap:wrap;align-items:center}
.stat{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.13em;text-transform:uppercase;color:var(--ink3)}
.stat b{display:block;font-size:1.15rem;letter-spacing:0;color:var(--ink);font-weight:500;margin-top:2px}
.btn{font-family:var(--f-mono);font-size:.64rem;letter-spacing:.15em;text-transform:uppercase;padding:10px 18px;border:1px solid var(--line3);color:var(--ink);transition:background .2s,border-color .2s}
.btn:hover{background:var(--bg4);border-color:var(--ink3)}
.btn.pri{background:var(--amber);border-color:var(--amber);color:#14100A;font-weight:500}
.btn.pri:hover{background:var(--amber-hi);border-color:var(--amber-hi)}
.btn:disabled{opacity:.4;pointer-events:none}
.stagebody{padding:clamp(18px,3vw,28px)}

#catchwrap{position:relative;background:#080B0A;overflow:hidden}
#catch{display:block;width:100%;height:auto;touch-action:none}
.ovl{position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:14px;padding:26px;
     background:radial-gradient(120% 90% at 50% 45%,rgba(11,14,13,.72),rgba(11,14,13,.95));backdrop-filter:blur(4px)}
.ovl h4{font-family:var(--f-disp);font-size:clamp(2rem,4.4vw,2.9rem);font-weight:500}
.ovl p{color:var(--ink2);font-size:.94rem;max-width:42ch;margin-inline:auto}
.ovl .keys{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3)}
.hearts{display:flex;gap:5px;align-items:center;margin-top:5px}
.hearts i{display:block;width:9px;height:9px;border-radius:50%;background:var(--rust);
          box-shadow:0 0 8px -2px var(--rust);transition:background .25s,box-shadow .25s}
.hearts i.off{background:var(--line3);box-shadow:none}
.combo{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);
       opacity:0;transition:opacity .25s}
.combo.on{opacity:1}

/* memory: the faces are spans inside a <button>, so they must be told to be blocks */
.memgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;max-width:760px;margin-inline:auto}
@media(max-width:560px){.memgrid{grid-template-columns:repeat(3,1fr);gap:7px}}
.mcard{display:block;aspect-ratio:16/11;perspective:1000px;background:none;border:0;padding:0;width:100%}
.mcard-in{display:block;position:relative;width:100%;height:100%;transform-style:preserve-3d;
          transition:transform .5s cubic-bezier(.3,1.15,.42,1)}
.mcard.f .mcard-in,.mcard.d .mcard-in{transform:rotateY(180deg)}
.mface{display:block;position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;
       overflow:hidden;border:1px solid var(--line2);background:var(--bg3)}
.mface.b{background:
   repeating-linear-gradient(135deg,rgba(201,138,75,.10) 0 6px,rgba(201,138,75,0) 6px 12px),var(--bg3);
   display:grid;place-items:center}
.mface.b span{font-family:var(--f-disp);font-size:1.35rem;color:var(--line3);letter-spacing:.04em}
.mface.f{transform:rotateY(180deg)}
.mface.f img{display:block;width:100%;height:100%;object-fit:cover}
.mcard:hover:not(.d):not(.f) .mface.b{border-color:var(--amber);background:
   repeating-linear-gradient(135deg,rgba(201,138,75,.2) 0 6px,rgba(201,138,75,0) 6px 12px),var(--bg4)}
.mcard.d .mface.f{border-color:var(--olive);box-shadow:0 0 0 1px var(--olive),0 0 22px -6px var(--olive)}
.mcard.d .mface.f img{filter:saturate(.45) brightness(.66)}
.mface .cap{position:absolute;inset:auto 0 0 0;padding:6px 8px;font-family:var(--f-mono);font-size:.53rem;
     letter-spacing:.1em;text-transform:uppercase;color:var(--ink);background:linear-gradient(transparent,rgba(11,14,13,.9));
     opacity:0;transition:opacity .3s}
.mcard.d .mface .cap{opacity:1}

/* ---------- expandable location cards ---------- */
.lgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(246px,1fr));gap:14px}
.lcard{perspective:1000px;text-align:left;width:100%;display:block}
.lcard-in{position:relative;display:block;overflow:hidden;border:1px solid var(--line2);background:var(--bg2);
  height:140px;transform-style:preserve-3d;
  transition:height .5s cubic-bezier(.22,1,.3,1),transform .45s cubic-bezier(.2,.9,.3,1),border-color .3s}
.lcard.open .lcard-in{height:288px}
.lcard:hover .lcard-in{border-color:var(--line3)}
.lcard .gridpat{position:absolute;inset:0;opacity:.05;transition:opacity .35s;
  background-image:linear-gradient(var(--ink) 1px,transparent 1px),linear-gradient(90deg,var(--ink) 1px,transparent 1px);
  background-size:20px 20px}
.lcard.open .gridpat{opacity:0}
.lcard .mface{position:absolute;inset:0;opacity:0;transition:opacity .45s .1s;display:block}
.lcard.open .mface{opacity:1}
.lcard .mface svg{display:block;width:100%;height:100%}
.lcard .veil{position:absolute;inset:0;display:block;opacity:0;transition:opacity .45s .1s;
  background:linear-gradient(to top,var(--bg) 3%,rgba(11,14,13,.05) 48%),
             linear-gradient(to bottom,rgba(11,14,13,.55),transparent 36%)}
.lcard.open .veil{opacity:1}
.lcard .pin{position:absolute;left:50%;top:44%;margin-left:-13px;margin-top:-26px;z-index:4;
  transform:scale(0);transform-origin:50% 100%;
  transition:transform .55s cubic-bezier(.2,1.45,.4,1) .3s}
.lcard.open .pin{transform:scale(1)}
.lcard .lbody{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;justify-content:space-between;
  padding:15px 17px}
.lcard .ico{color:var(--amber);filter:drop-shadow(0 0 4px rgba(201,138,75,.3));transition:filter .3s,opacity .3s}
.lcard:hover .ico{filter:drop-shadow(0 0 8px rgba(201,138,75,.6))}
.lcard.open .ico{opacity:0}
.lcard .lname{display:block;font-size:.95rem;font-weight:600;color:var(--ink);
  transition:transform .35s cubic-bezier(.2,.9,.3,1)}
.lcard:hover .lname{transform:translateX(4px)}
.lcard .lco{display:block;font-family:var(--f-mono);font-size:.6rem;color:var(--ink2);
  opacity:0;max-height:0;overflow:hidden;transition:opacity .3s,max-height .3s,margin .3s}
.lcard.open .lco{opacity:1;max-height:46px;margin-top:5px}
.lcard .rule{display:block;height:1px;margin-top:9px;transform:scaleX(.28);transform-origin:0 50%;
  background:linear-gradient(to right,var(--amber),rgba(201,138,75,.3),transparent);
  transition:transform .4s ease-out}
.lcard:hover .rule,.lcard.open .rule{transform:scaleX(1)}
.lcard .toast{position:absolute;top:13px;right:15px;z-index:6;font-family:var(--f-mono);font-size:.55rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--amber);opacity:0;transition:opacity .3s;pointer-events:none}
.lcard .toast.on{opacity:1}


/* coordinate hunt: real map reveal */
.minimap{border:1px solid var(--line2);background:var(--bg3);margin-top:20px;position:relative}
.minimap svg{display:block;width:100%;height:clamp(190px,26vw,260px)}
.minimap .mmcap{position:absolute;inset:auto 0 0 0;padding:8px 11px;font-family:var(--f-mono);font-size:.57rem;
     letter-spacing:.1em;text-transform:uppercase;color:var(--ink2);background:linear-gradient(transparent,rgba(11,14,13,.92))}

.qwrap{max-width:660px}
.qn{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink3)}
.qq{font-family:var(--f-disp);font-size:clamp(1.35rem,2.7vw,1.85rem);line-height:1.22;margin:12px 0 22px;font-weight:500}
.opts{display:flex;flex-direction:column;gap:1px;background:var(--line)}
.opt{display:flex;gap:14px;align-items:baseline;text-align:left;padding:14px 17px;background:var(--bg2);font-size:.98rem;transition:background .16s}
.opt:hover:not(:disabled){background:var(--bg4)}
.opt .k{font-family:var(--f-mono);font-size:.66rem;color:var(--ink3);flex:none}
.opt.ok{background:var(--olive-lo);box-shadow:inset 3px 0 0 var(--olive)}
.opt.no{background:var(--rust-lo);box-shadow:inset 3px 0 0 var(--rust)}
.opt:disabled{cursor:default}
.expl{margin-top:20px;padding-left:16px;border-left:2px solid var(--amber);color:var(--ink2);font-size:.93rem}
.qbar{height:2px;background:var(--line);margin-bottom:26px}
.qbar i{display:block;height:100%;background:var(--amber);transition:width .45s}
.res{text-align:center;padding-block:22px}
.res .big{font-family:var(--f-disp);font-size:clamp(3.4rem,10vw,6rem);line-height:1;color:var(--amber);font-weight:500}
.res .cap{font-family:var(--f-mono);font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink3);margin-top:10px}
.res h4{font-family:var(--f-disp);font-size:1.7rem;margin-top:20px;font-weight:500}
.res p{max-width:48ch;margin:12px auto 0;color:var(--ink2);font-size:.96rem}
.charcard{display:grid;grid-template-columns:minmax(0,240px) 1fr;gap:26px;align-items:center;text-align:left;max-width:640px;margin:24px auto 0;border:1px solid var(--line);background:var(--bg2)}
@media(max-width:620px){.charcard{grid-template-columns:1fr}}
.charcard img{width:100%;height:100%;min-height:170px;object-fit:cover}
.charcard .cc{padding:22px 24px 22px 0}
@media(max-width:620px){.charcard .cc{padding:0 22px 24px}}
.charcard h4{font-family:var(--f-disp);font-size:1.9rem;color:var(--amber);font-weight:500;margin:0}
.charcard p{margin:10px 0 0;color:var(--ink2);font-size:.95rem;max-width:none}

.mgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;max-width:600px}
.mcol{display:flex;flex-direction:column;gap:1px;background:var(--line)}
.mw{text-align:left;padding:12px 15px;background:var(--bg2);font-size:.97rem;transition:background .16s}
.mw:hover:not(:disabled){background:var(--bg4)}
.mw .t{font-family:var(--f-mono);font-size:.55rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);display:block;margin-bottom:3px}
.mw.sel{background:var(--petrol-lo);box-shadow:inset 3px 0 0 var(--petrol)}
.mw.ok{background:var(--olive-lo);color:var(--ink3);cursor:default}
.mw.no{background:var(--rust-lo)}

/* ---------- wall ---------- */
.wallhero{position:relative;height:clamp(200px,30vw,320px);overflow:hidden;border-bottom:1px solid var(--line)}
.wallhero video{width:100%;height:100%;object-fit:cover;opacity:.5}
.wallhero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,14,13,.5),rgba(11,14,13,.96))}
.wallhero .wh{position:absolute;inset:auto 0 0 0;z-index:2;padding-bottom:26px}
.wallhero h1{font-size:clamp(2.1rem,5.2vw,3.6rem)}
.nform{border:1px solid var(--line);background:var(--bg2);padding:20px;max-width:620px}
.nform textarea{width:100%;min-height:108px;resize:vertical;background:var(--bg);border:1px solid var(--line2);padding:14px 16px;font-family:var(--f-body);font-size:1rem;color:var(--ink);line-height:1.5}
.nform textarea:focus{border-color:var(--line3);outline:none}
.nhp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}
.nform textarea::placeholder{color:var(--ink3)}
.nfoot{display:flex;gap:14px;align-items:center;justify-content:space-between;margin-top:13px;flex-wrap:wrap}
.nstat{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);display:flex;align-items:center;gap:8px;margin-top:15px}
.nstat i{width:6px;height:6px;border-radius:50%;background:var(--ink3);flex:none}
.nstat.live i{background:var(--olive)}
.nstat.local i{background:var(--amber)}
.wall{columns:3 260px;column-gap:16px;margin-top:clamp(28px,4vw,44px)}
.note{break-inside:avoid;margin-bottom:16px;padding:19px 21px;background:var(--bg2);border:1px solid var(--line);border-left:2px solid var(--line3);font-size:1rem;line-height:1.52;position:relative}
.note:nth-child(3n+1){border-left-color:var(--amber)}
.note:nth-child(3n+2){border-left-color:var(--olive)}
.note:nth-child(3n+3){border-left-color:var(--petrol)}
.note .tx{overflow-wrap:break-word;color:var(--ink)}
.note time{display:block;font-family:var(--f-mono);font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);margin-top:13px}
.note.mine::after{content:"yours";position:absolute;top:10px;right:12px;font-family:var(--f-mono);font-size:.52rem;letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}

/* ---------- footer ---------- */
footer{border-top:1px solid var(--line);padding-block:clamp(38px,5vw,64px);margin-top:clamp(40px,6vw,80px)}
.fgrid{display:grid;grid-template-columns:1.5fr .9fr .9fr;gap:36px}
@media(max-width:980px){.fgrid{grid-template-columns:1fr 1fr}}
.srcs.comm a{color:var(--amber);border-bottom-color:var(--amber-lo)}
.srcs.comm a:hover{border-bottom-color:var(--amber)}
@media(max-width:760px){.fgrid{grid-template-columns:1fr}}
footer h4{font-family:var(--f-disp);font-size:1.05rem;margin:0 0 12px;font-weight:500}
footer p{font-size:.9rem;color:var(--ink2);max-width:58ch}
footer p+p{margin-top:10px}
.srcs{display:flex;flex-direction:column;gap:8px}
.srcs a{font-family:var(--f-mono);font-size:.66rem;color:var(--ink2);text-decoration:none;border-bottom:1px solid var(--line);padding-bottom:5px;width:fit-content}
.srcs a:hover{color:var(--amber);border-bottom-color:var(--amber)}
.colo{margin-top:32px;padding-top:16px;border-top:1px solid var(--line);font-family:var(--f-mono);font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);display:flex;flex-wrap:wrap;gap:8px 24px}

/* ---------- loader ----------
   Bicycle loader from Uiverse.io by fanishah. Kept as authored; --primary and
   --trans-dur are pointed at this site's tokens, and the pen's --hue/--bg/--fg
   dark-theme block is dropped because this site is already single-theme dark. */
.loader {
  --primary: var(--amber);
  --trans-dur: 0.3s;
  display: block;
  width: 150px;
  height: auto;
  color: var(--ink2);
}
.loader_body,
.loader_front,
.loader_handlebars,
.loader_pedals,
.loader_pedals-spin,
.loader_seat,
.loader_spokes,
.loader_spokes-spin,
.loader_tire {
  animation: bikeBody 3s ease-in-out infinite;
  stroke: var(--primary);
  transition: stroke var(--trans-dur);
}
.loader_front { animation-name: bikeFront; }
.loader_handlebars { animation-name: bikeHandlebars; }
.loader_pedals { animation-name: bikePedals; }
.loader_pedals-spin { animation-name: bikePedalsSpin; }
.loader_seat { animation-name: bikeSeat; }
.loader_spokes,
.loader_tire { stroke: currentColor; }
.loader_spokes { animation-name: bikeSpokes; }
.loader_spokes-spin { animation-name: bikeSpokesSpin; }
.loader_tire { animation-name: bikeTire; }

@keyframes bikeBody {
  from { stroke-dashoffset: 79; }
  33%, 67% { stroke-dashoffset: 0; }
  to { stroke-dashoffset: -79; }
}
@keyframes bikeFront {
  from { stroke-dashoffset: 19; }
  33%, 67% { stroke-dashoffset: 0; }
  to { stroke-dashoffset: -19; }
}
@keyframes bikeHandlebars {
  from { stroke-dashoffset: 10; }
  33%, 67% { stroke-dashoffset: 0; }
  to { stroke-dashoffset: -10; }
}
@keyframes bikePedals {
  from { animation-timing-function: ease-in; stroke-dashoffset: -25.133; }
  33%, 67% { animation-timing-function: ease-out; stroke-dashoffset: -21.991; }
  to { stroke-dashoffset: -25.133; }
}
@keyframes bikePedalsSpin {
  from { transform: rotate(0.1875turn); }
  to { transform: rotate(3.1875turn); }
}
@keyframes bikeSeat {
  from { stroke-dashoffset: 5; }
  33%, 67% { stroke-dashoffset: 0; }
  to { stroke-dashoffset: -5; }
}
@keyframes bikeSpokes {
  from { animation-timing-function: ease-in; stroke-dashoffset: -31.416; }
  33%, 67% { animation-timing-function: ease-out; stroke-dashoffset: -23.562; }
  to { stroke-dashoffset: -31.416; }
}
@keyframes bikeSpokesSpin {
  from { transform: rotate(0); }
  to { transform: rotate(3turn); }
}
@keyframes bikeTire {
  from { animation-timing-function: ease-in; stroke-dashoffset: 56.549; transform: rotate(0); }
  33% { stroke-dashoffset: 0; transform: rotate(0.33turn); }
  67% { animation-timing-function: ease-out; stroke-dashoffset: 0; transform: rotate(0.67turn); }
  to { stroke-dashoffset: -56.549; transform: rotate(1turn); }
}

.loadwrap{display:grid;place-items:center;gap:16px;justify-items:center;max-width:100%}
.loadwrap .sub{font-family:var(--f-mono);font-size:.6rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink3)}
.loader-fallback{display:none;font-family:var(--f-mono);font-size:.72rem;letter-spacing:.24em;text-transform:uppercase;color:var(--ink2)}

#boot{position:fixed;inset:0;z-index:200;display:grid;place-items:center;background:var(--bg);
      transition:opacity .55s ease,visibility .55s}
#boot .loader{width:min(190px,46vw)}
#boot.gone{opacity:0;visibility:hidden;pointer-events:none}
.wallload{display:grid;place-items:center;padding-block:clamp(36px,6vw,64px)}
.wallload .loader{width:min(132px,34vw)}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
  .loader{display:none}
  .loader-fallback{display:block}
}
