body{margin:0;font-size:14px}
img{max-width:100%}
[hidden]{display:none!important}

/* Layout: a fixed portal tunnel; chapters are layers in one fixed 3D stage that the page scroll flies you through (Z-scroll); fixed chrome (logo, chapter label, depth meter, chapter rail) sits on top. */
:root{
  --void:#000000;
  --bone:#F0EEE8;
  --ash:#B0ABA5;
  --volt:#E8FF47;
  --violet:#A35CF0;
  --line:rgba(240,238,232,.12);
  --scrim:rgba(0,0,0,.62);
  --display:Fraunces,"Iowan Old Style",Georgia,serif;
  --ui:"Space Grotesk","Helvetica Neue",Arial,sans-serif;
  --mono:"Space Mono",ui-monospace,Menlo,Consolas,monospace;
  color-scheme:dark;
}
html{background:var(--void);scroll-snap-type:y proximity}
body{background:var(--void);color:var(--bone);font-family:var(--mono);overflow-x:hidden}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:10;background:var(--void)}
#portal{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
.chrome{position:fixed;z-index:5}
:focus-visible{outline:2px solid var(--volt);outline-offset:4px}
a{color:inherit}

/* fixed chrome */
.logo{top:calc(18px + env(safe-area-inset-top,0px));left:max(22px,env(safe-area-inset-left,0px));display:block;width:44px;height:44px;display:grid;place-items:center;border-radius:50%;transition:transform .5s cubic-bezier(.2,.7,.1,1)}
.logo:hover{transform:rotate(-14deg) scale(1.06)}
.logo svg{width:36px;height:36px}
.chapter{top:calc(30px + env(safe-area-inset-top,0px));right:max(24px,env(safe-area-inset-right,0px));font:400 11px/1 var(--mono);letter-spacing:.3em;text-transform:uppercase;color:var(--ash);display:flex;gap:10px;align-items:center}
.chapter b{font-weight:400;color:var(--bone);display:inline-block;min-width:1ch;transition:opacity .3s}
.depth{bottom:calc(24px + env(safe-area-inset-bottom,0px));left:max(24px,env(safe-area-inset-left,0px));display:flex;align-items:center;gap:14px;font:400 11px/1 var(--mono);letter-spacing:.24em;text-transform:uppercase;color:var(--ash)}
.depth .track{width:120px;height:2px;background:var(--line);position:relative;overflow:hidden}
.depth .fill{position:absolute;inset:0;background:var(--volt);transform-origin:left;transform:scaleX(0)}
.depth output{color:var(--bone);letter-spacing:.08em;min-width:4ch;font-variant-numeric:tabular-nums}

.rail{top:50%;right:max(14px,env(safe-area-inset-right,0px));transform:translateY(-50%);display:flex;flex-direction:column;gap:2px}
.rail button{all:unset;cursor:pointer;display:flex;align-items:center;justify-content:flex-end;gap:12px;height:30px;padding:0 10px;color:var(--ash)}
.rail .nm{font:400 11px/1 var(--mono);letter-spacing:.22em;text-transform:uppercase;opacity:0;transform:translateX(8px);transition:opacity .25s,transform .25s;white-space:nowrap}
.rail .dot{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.5;transition:all .35s cubic-bezier(.2,.7,.1,1)}
.rail:hover .nm,.rail button:focus-visible .nm{opacity:1;transform:none}
.rail button:hover{color:var(--bone)}
.rail button[aria-current=true]{color:var(--volt)}
.rail button[aria-current=true] .dot{opacity:1;height:22px;border-radius:3px}
.rail button:focus-visible{outline-offset:0}

/* chapters */
/* Z-scroll: the page scroll only drives a camera; every chapter is a layer in one fixed 3D stage */
.stage{position:fixed;inset:0;z-index:2;perspective:1200px;perspective-origin:50% 50%;overflow:hidden;pointer-events:none}
section{position:absolute;inset:0;display:flex;align-items:center;padding-block:88px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));box-sizing:border-box;visibility:hidden;will-change:transform,opacity;transform-origin:50% 50%}
.runway{position:relative;z-index:0}
.runway .snap{scroll-snap-align:start}
.inner{width:100%;max-width:1120px;margin:0 auto;padding:0 clamp(0px,5vw,72px);box-sizing:border-box}
.kicker{font:400 11px/1 var(--mono);letter-spacing:.38em;text-transform:uppercase;color:var(--violet);margin:0 0 28px}
.kicker.volt{color:var(--volt)}
h2{font:300 clamp(46px,6.4vw,92px)/.98 var(--display);letter-spacing:-.015em;margin:0;text-wrap:balance}
h2 em{font-style:italic;color:var(--volt)}
.lede{font:400 15px/1.75 var(--mono);color:var(--bone);max-width:56ch;margin:32px 0 0}

/* entry */
#entry{justify-content:center;text-align:center;flex-direction:column}
.mark{width:min(620px,84vw);max-width:100%;display:block;margin:0 auto;cursor:default}
.mark path{fill:var(--bone);fill-opacity:.5;stroke:var(--bone);stroke-width:1.2;stroke-opacity:0;transition:fill-opacity .6s}
.mark.drawing path{stroke-dasharray:1;stroke-dashoffset:1;fill-opacity:0;stroke-opacity:.8;animation:draw 2.6s cubic-bezier(.5,.1,.2,1) forwards,fillin 1.2s 2.1s forwards}
.mark:hover path{fill-opacity:.95}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes fillin{to{fill-opacity:.5;stroke-opacity:0}}
.tag{font:400 12px/1 var(--mono);letter-spacing:.45em;text-transform:uppercase;color:var(--violet);margin:28px 0 0;padding-left:.45em}
.enter{all:unset;cursor:pointer;margin-top:56px;display:inline-flex;flex-direction:column;align-items:center;gap:14px;font:400 11px/1 var(--mono);letter-spacing:.3em;text-transform:uppercase;color:var(--ash);padding:8px 12px}
.enter:hover{color:var(--bone)}
.enter .cue{width:1px;height:44px;background:linear-gradient(var(--volt),transparent);transform-origin:top;animation:cue 2.2s ease-in-out infinite}
@keyframes cue{0%{transform:scaleY(0);opacity:1}60%{transform:scaleY(1);opacity:1}100%{transform:scaleY(1);opacity:0}}

/* practice */
.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:48px;max-width:860px}
.disc{all:unset;box-sizing:border-box;cursor:pointer;position:relative;display:flex;flex-direction:column;gap:12px;padding:26px 26px 28px;border:1px solid var(--line);background:var(--scrim);backdrop-filter:blur(6px);transition:border-color .35s,background .35s,transform .5s cubic-bezier(.2,.7,.1,1)}
.disc .num{font:400 11px/1 var(--mono);letter-spacing:.3em;color:var(--violet)}
.disc .t{font:400 22px/1.15 var(--ui);letter-spacing:-.01em;color:var(--bone);transition:color .3s}
.disc .d{font:400 13px/1.65 var(--mono);color:var(--ash)}
.disc .glyph{position:absolute;top:22px;right:22px;width:30px;height:30px;opacity:.35;transition:opacity .35s,transform 1.2s cubic-bezier(.2,.7,.1,1)}
.disc:hover,.disc:focus-visible{border-color:rgba(232,255,71,.45);transform:translateY(-3px)}
.disc:hover .glyph,.disc:focus-visible .glyph{opacity:.9;transform:rotate(90deg)}
.disc[aria-pressed=true]{border-color:var(--volt);background:rgba(10,11,4,.78)}
.disc[aria-pressed=true] .t{color:var(--volt)}
.disc[aria-pressed=true] .glyph{opacity:1}
.hint{font:400 11px/1.6 var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--ash);margin-top:20px}

/* vault, artifacts, team */
.solo{display:grid;grid-template-columns:minmax(0,420px);margin-top:48px}
.tile{position:relative;perspective:900px}
.tile .card{position:relative;aspect-ratio:4/3;max-width:100%;border:1px solid var(--line);overflow:hidden;transform:rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transition:transform .5s cubic-bezier(.2,.7,.1,1),border-color .4s;background:#060606}
.tile.tall .card{aspect-ratio:3/4}
.tile .card::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(var(--ang,35deg),rgba(240,238,232,.035) 0 1px,transparent 1px 11px)}
.tile .card::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--mx,50%) var(--my,50%),rgba(232,255,71,.16),transparent 45%);opacity:0;transition:opacity .4s}
.tile:hover .card{border-color:rgba(232,255,71,.45)}
.tile:hover .card::after{opacity:1}
.tile .ring{position:absolute;left:50%;top:50%;width:46%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(232,255,71,.22);box-shadow:0 0 0 18px rgba(232,255,71,.03),0 0 0 19px rgba(232,255,71,.12),0 0 0 44px rgba(147,51,234,.025),0 0 0 45px rgba(147,51,234,.14);transition:transform .9s cubic-bezier(.2,.7,.1,1)}
.tile:hover .ring{transform:translate(-50%,-50%) scale(1.18)}
.tile .cap{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding-top:16px;font:400 17px/1.3 var(--ui);color:var(--bone)}
.tile .cap span:last-child{font:400 11px/1 var(--mono);letter-spacing:.24em;color:var(--ash)}

/* placeholder media, used until real photos are in projects data */
.ph{position:absolute;inset:0;background:#060606;display:grid;place-items:center}
.ph::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(var(--ang,35deg),rgba(240,238,232,.04) 0 1px,transparent 1px 11px)}
.ph::after{content:"";position:absolute;left:50%;top:50%;width:38%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;border:1px solid rgba(232,255,71,.22);box-shadow:0 0 0 16px rgba(232,255,71,.03),0 0 0 17px rgba(232,255,71,.12),0 0 0 40px rgba(147,51,234,.025),0 0 0 41px rgba(147,51,234,.14)}
.ph span{position:relative;z-index:1;font:400 11px/1 var(--mono);letter-spacing:.2em;color:var(--ash)}

/* vault carousel */
#vault h2{font-size:clamp(40px,4.8vw,68px)}
.carousel{--cw:clamp(170px,18vw,240px);position:relative;height:calc(var(--cw)*1.25 + 70px);margin-top:16px;perspective:1300px;touch-action:pan-y;cursor:grab;user-select:none;-webkit-user-select:none}
.carousel.dragging{cursor:grabbing}
.carousel:focus-visible{outline-offset:8px}
.orbit{position:absolute;left:50%;top:50%;width:0;height:0;transform-style:preserve-3d}
.work{all:unset;box-sizing:border-box;position:absolute;left:0;top:0;width:var(--cw);aspect-ratio:4/5;margin-left:calc(var(--cw) / -2);margin-top:calc(var(--cw) * -.625);border:1px solid var(--line);background:#050505;overflow:hidden;cursor:pointer;backface-visibility:hidden;-webkit-backface-visibility:hidden;transition:border-color .3s}
.work img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.work .ph span{display:none}
.work .wcap{position:absolute;left:0;right:0;bottom:0;padding:28px 16px 14px;background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.88));font:400 15px/1.2 var(--ui);color:var(--bone)}
.work.front{border-color:rgba(232,255,71,.65)}
.work:focus-visible{outline:2px solid var(--volt);outline-offset:4px}
.car-bar{display:flex;align-items:center;justify-content:center;gap:16px 20px;flex-wrap:wrap}
.round{all:unset;box-sizing:border-box;cursor:pointer;width:44px;height:44px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:var(--bone);background:var(--scrim);transition:border-color .3s,color .3s}
.round:hover{border-color:var(--volt);color:var(--volt)}
.car-meta{display:flex;flex-direction:column;align-items:center;gap:7px;min-width:220px;text-align:center}
.car-count{font:400 11px/1 var(--mono);letter-spacing:.3em;color:var(--violet);font-variant-numeric:tabular-nums}
.car-title{font:italic 300 28px/1.1 var(--display);color:var(--bone)}
.car-sub{font:400 11px/1 var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--ash)}
.go{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:0 20px;border-radius:999px;background:var(--volt);color:var(--void);font:500 14px/1 var(--ui);transition:background .25s}
.go:hover{background:var(--bone)}

/* travelling to a project star */
.stage,.chapter,.rail,.depth{transition:opacity .6s ease,filter .6s ease}
body.travelling .stage,body.travelling .chapter,body.travelling .rail,body.travelling .depth{opacity:0;filter:blur(6px);pointer-events:none}

/* project page */
.project{position:fixed;inset:0;z-index:20;overflow-y:auto;overscroll-behavior:contain;background:var(--void);opacity:0;transform:scale(.965);transition:opacity .7s ease,transform 1s cubic-bezier(.2,.7,.1,1)}
.project.shown{opacity:1;transform:none}
.p-top{position:sticky;top:0;z-index:2;display:flex;justify-content:space-between;align-items:center;gap:16px;padding-top:calc(18px + env(safe-area-inset-top,0px));padding-bottom:18px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));background:linear-gradient(var(--void) 65%,rgba(0,0,0,0))}
.back{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:0 20px 0 16px;border:1px solid var(--line);border-radius:999px;font:400 11px/1 var(--mono);letter-spacing:.24em;text-transform:uppercase;color:var(--bone);transition:border-color .3s,color .3s}
.back:hover{border-color:var(--volt);color:var(--volt)}
.p-count{font:400 11px/1 var(--mono);letter-spacing:.3em;color:var(--violet);font-variant-numeric:tabular-nums}
.p-body{max-width:1120px;margin:0 auto;padding-top:24px;padding-bottom:120px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));display:flex;flex-direction:column;gap:48px}
.p-head h1{font:300 clamp(52px,8vw,120px)/.95 var(--display);font-style:italic;letter-spacing:-.02em;margin:0;color:var(--volt);text-wrap:balance}
.p-meta{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px;margin:0;padding:22px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.p-meta dt{font:400 11px/1 var(--mono);letter-spacing:.24em;text-transform:uppercase;color:var(--ash);margin-bottom:10px}
.p-meta dd{margin:0;font:400 16px/1.4 var(--ui);color:var(--bone)}
.p-hero{position:relative;margin:0;aspect-ratio:16/9;max-width:100%;border:1px solid var(--line);overflow:hidden}
.p-hero img{width:100%;height:100%;object-fit:cover;display:block}
.p-text{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:40px}
.p-lead{font:300 clamp(24px,2.6vw,34px)/1.3 var(--display);margin:0;text-wrap:balance}
.p-paras{display:flex;flex-direction:column;gap:18px}
.p-paras p{margin:0;font:400 15px/1.75 var(--mono);color:var(--bone);max-width:60ch}
.p-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.p-gallery figure{margin:0;display:flex;flex-direction:column;gap:10px}
.p-gallery figure.wide{grid-column:1 / -1}
.p-gallery .frame{position:relative;aspect-ratio:4/3;max-width:100%;border:1px solid var(--line);overflow:hidden}
.p-gallery figure.wide .frame{aspect-ratio:21/9}
.p-gallery img{width:100%;height:100%;object-fit:cover;display:block}
.p-gallery figcaption{font:400 12px/1.5 var(--mono);color:var(--ash)}
.p-credits{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:18px 24px;margin:0}
.p-credits dt{font:400 11px/1 var(--mono);letter-spacing:.24em;text-transform:uppercase;color:var(--ash);margin-bottom:8px}
.p-credits dd{margin:0;font:400 16px/1.4 var(--ui)}
.p-next{all:unset;box-sizing:border-box;cursor:pointer;display:flex;justify-content:space-between;align-items:baseline;gap:20px;flex-wrap:wrap;padding:32px 0;border-top:1px solid var(--line)}
.p-next .lbl{font:400 11px/1 var(--mono);letter-spacing:.3em;text-transform:uppercase;color:var(--ash)}
.p-next .nt{font:italic 300 clamp(36px,5vw,64px)/1 var(--display);color:var(--bone);transition:color .3s,transform .5s cubic-bezier(.2,.7,.1,1)}
.p-next:hover .nt,.p-next:focus-visible .nt{color:var(--volt);transform:translateX(-8px)}

/* contact */
#contact .inner{text-align:center}
#contact h2{font-size:clamp(68px,11vw,150px);letter-spacing:-.025em}
#contact .lede{margin-left:auto;margin-right:auto}
.mail{display:inline-flex;align-items:center;gap:6px;margin-top:44px;border:1px solid var(--line);background:var(--scrim);backdrop-filter:blur(6px);padding:6px 6px 6px 24px;border-radius:999px;transition:border-color .3s}
.mail:hover,.mail:focus-within{border-color:var(--volt)}
.mail a{font:400 13px/1 var(--mono);letter-spacing:.2em;color:var(--bone);text-decoration:none;padding:12px 4px;user-select:all}
.mail a:hover{color:var(--volt)}
.mail button{all:unset;cursor:pointer;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;color:var(--void);background:var(--volt);transition:background .25s,transform .4s}
.mail button:hover{background:var(--bone)}
.mail button.done{transform:rotate(360deg)}

@media (max-width:760px){
  .grid{grid-template-columns:minmax(0,1fr)}
  .p-meta,.p-text,.p-gallery{grid-template-columns:minmax(0,1fr)}
  .p-gallery figure.wide{grid-column:auto}
  .rail{display:none}
  .depth .track{width:72px}
  section{padding-block:96px}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .mark.drawing path{animation:none;stroke-opacity:0;fill-opacity:.5}
  .enter .cue{animation:none}
  .tile .card,.disc,.tile .ring{transition:none}
}
