:root{
  --bg:#030503; --fg:#b9e6ad; --dim:#6f9468; --accent:#8fb88a; --hot:#d8ffcc; --line:#16241a;
  --mono:"Geist Mono",ui-monospace,Menlo,monospace; --serif:"Fraunces",Georgia,serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{background:var(--bg);color:var(--fg);font-family:var(--mono)}
body.locked{overflow:hidden}
[hidden]{display:none!important}
.sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}

canvas#scene{position:fixed;inset:0;width:100vw;height:100vh;display:block}
canvas#scene.hover{cursor:pointer}
.crt{position:fixed;inset:0;pointer-events:none;
  background:repeating-linear-gradient(0deg,rgba(0,0,0,.3) 0 1px,transparent 1px 3px),
             radial-gradient(ellipse at center,transparent 50%,rgba(0,0,0,.85) 100%)}
.hud{position:fixed;left:24px;right:24px;top:18px;display:flex;justify-content:space-between;
  font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);pointer-events:none}
.hud b{color:var(--accent);font-weight:400}

.stages{position:fixed;left:24px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:10px;
  font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.stages a{color:inherit;text-decoration:none;transition:color .3s}
.stages a:focus-visible{outline:1px solid var(--hot);outline-offset:4px}
.stages a.on{color:var(--hot)}
.stages a.on::before{content:"▸ "}

.panel{position:fixed;right:6vw;bottom:11vh;width:min(440px,86vw);opacity:0;transform:translateY(20px);
  transition:opacity .5s,transform .5s;pointer-events:none;visibility:hidden}
.panel.on{opacity:1;transform:none;visibility:visible}
.panel::before{content:"";position:absolute;inset:-40px -60px;z-index:-1;
  background:radial-gradient(ellipse at center,rgba(3,5,3,.92) 40%,transparent 75%)}
.panel .k{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);margin-bottom:12px}
.panel h1{font-family:var(--serif);font-weight:400;font-size:clamp(44px,6vw,84px);line-height:1;color:var(--hot);
  margin-bottom:16px}
.panel h2{font-family:var(--serif);font-weight:400;font-size:clamp(26px,3.2vw,42px);line-height:1.08;color:var(--hot);
  margin-bottom:14px}
.panel p{font-size:13px;line-height:1.7}
.btn{display:inline-block;margin:18px 8px 0 0;padding:10px 16px;border:1px solid var(--accent);color:var(--hot);background:none;
  font:12px var(--mono);letter-spacing:.1em;text-decoration:none;cursor:pointer;pointer-events:auto}
.btn:hover,.btn:focus-visible{background:var(--accent);color:var(--bg);outline:none}

.tip{position:fixed;left:0;top:0;pointer-events:none;padding:8px 10px;border:1px solid var(--accent);background:rgba(3,5,3,.92);
  font-size:11px;line-height:1.5;color:var(--hot);opacity:0;transition:opacity .15s;white-space:nowrap}
.tip.on{opacity:1}
.tip small{display:block;color:var(--dim);font-size:10px;letter-spacing:.1em;text-transform:uppercase}
.tiltbtn{position:fixed;left:50%;top:52px;transform:translateX(-50%);margin:0;padding:7px 12px;font-size:10px;background:rgba(3,5,3,.8);z-index:5}
.hint{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);font-size:10px;letter-spacing:.2em;color:var(--dim);
  text-transform:uppercase;animation:pulse 2s infinite;transition:opacity .4s;pointer-events:none}
.hint.off{opacity:0;animation:none}
@keyframes pulse{50%{opacity:.3}}

.drawer{position:fixed;top:0;right:0;height:100vh;height:100dvh;width:min(620px,100vw);background:rgba(4,7,4,.96);
  border-left:1px solid var(--accent);transform:translateX(100%);transition:transform .6s cubic-bezier(.2,.8,.2,1);
  display:flex;flex-direction:column;z-index:10}
.drawer.on{transform:none}
.drawer header{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom:1px solid var(--line);
  font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.drawer header button{background:none;border:0;color:var(--hot);font:12px var(--mono);cursor:pointer;letter-spacing:.1em}
.drawer header button:focus-visible{outline:1px solid var(--hot);outline-offset:4px}
.drawer .body{overflow-y:auto;padding:28px 32px 60px}
.drawer h2{font-family:var(--serif);font-weight:400;font-size:clamp(34px,4.5vw,56px);line-height:1;color:var(--hot);margin:6px 0 18px}
.drawer .meta{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}
.drawer .metrics{display:flex;flex-wrap:wrap;gap:28px;margin:22px 0;padding:16px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.drawer .metrics:empty{display:none}
.drawer .metrics b{display:block;font-size:26px;font-weight:300;color:var(--hot)}
.drawer .metrics span{font-size:10px;color:var(--dim);letter-spacing:.1em;text-transform:uppercase}
.drawer .chips{margin-bottom:22px}
.drawer .chip{display:inline-block;border:1px solid var(--line);padding:3px 8px;margin:0 6px 6px 0;font-size:11px;color:var(--accent)}
.drawer .chip.hl{border-color:var(--hot);color:var(--hot)}
.drawer .desc{font-size:13px;line-height:1.75;color:var(--fg)}
.drawer .desc p{margin-bottom:1em}
.drawer .ascii{font-size:10px;line-height:1.2;color:var(--dim);white-space:pre;margin:4px 0 12px}
.cv{list-style:none}
.cv li{padding:16px 0;border-top:1px solid var(--line)}
.cv .meta{margin-bottom:6px}
.cv h3{font-size:16px;font-weight:400;color:var(--hot)}
.cv .org{font-size:12px;color:var(--accent);margin:4px 0 8px}
.cv p{font-size:13px;line-height:1.7}

.hero{position:relative;aspect-ratio:16/9;margin:0 0 10px;background:#030503;border:1px solid var(--line);overflow:hidden}
.hero[hidden]{display:none}
.hero img,.hero canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.hero img{opacity:0}
.hero canvas{pointer-events:none;transition:opacity .25s}
.hero figcaption{position:absolute;left:10px;bottom:8px;font-size:10px;letter-spacing:.1em;color:var(--hot);
  text-transform:uppercase;text-shadow:0 0 8px #000;opacity:0;transition:opacity .4s}
.hero.done figcaption{opacity:.8}
.thumbs{display:flex;gap:6px;margin-bottom:24px}
.thumbs:empty{display:none}
.thumbs button{flex:1;aspect-ratio:16/9;padding:0;border:1px solid var(--line);background:#030503;cursor:pointer;overflow:hidden;
  filter:grayscale(1) brightness(.6);transition:filter .3s,border-color .3s}
.thumbs button img{width:100%;height:100%;object-fit:cover;display:block}
.thumbs button:hover,.thumbs button:focus-visible,.thumbs button.on{filter:none;border-color:var(--accent);outline:none}
.portrait{width:240px;aspect-ratio:4/5;margin-bottom:16px;cursor:crosshair;pointer-events:auto;outline:none}
.portrait:focus-visible{border-color:var(--hot)}

@media (max-width:1000px),(orientation:portrait){.stages{display:none}}
@media (max-width:700px){
  .panel{right:5vw;left:5vw;width:auto;bottom:5vh}
  .panel h1{font-size:44px}.panel h2{font-size:26px}.panel p{font-size:12px}
  .drawer .body{padding:22px 20px 60px}.drawer .metrics{gap:18px}
  .portrait{width:150px}
}

html{scroll-snap-type:y mandatory}
.snaps{position:absolute;top:0;left:0;width:1px;pointer-events:none}
.snaps i{position:absolute;left:0;width:1px;height:1px;scroll-snap-align:start;scroll-snap-stop:always}

/* first-visit intro: only the scene is there until the question lands */
.hud,.stages,.hint{transition:opacity .8s}
body.birthing .hud,body.birthing .stages,body.birthing .hint{opacity:0;animation:none}
body.birthing .panel.on{opacity:0;transform:translateY(20px)}

.boot{position:fixed;left:28px;bottom:24px;z-index:20;display:none;pointer-events:none;
  opacity:.55;transition:opacity .6s}
.boot.on{display:block}
.boot.off{opacity:0}
.boot pre{font:12px/1.8 var(--mono);color:var(--accent);white-space:pre}
@media (max-width:700px){.boot{left:16px;bottom:16px}.boot pre{font-size:10px}}

.notfound main{min-height:100vh;display:grid;place-content:center;gap:12px;padding:24px}
.notfound pre{font:13px/1.8 var(--mono);color:var(--accent);white-space:pre-wrap}

.hero.contain img,.thumbs button img.contain{object-fit:contain}

/* contact · prompt */
html:not(.js) .drawer.contact:target{transform:none}
.drawer header a.close{color:var(--hot);font:12px var(--mono);letter-spacing:.1em;text-decoration:none}
.drawer header a.close:focus-visible{outline:1px solid var(--hot);outline-offset:4px}
.c-lede{font-size:13px;line-height:1.7;margin-bottom:26px;color:var(--fg)}
.prompt{display:flex;flex-direction:column;gap:6px;transition:opacity .5s}
.prompt.sent{opacity:.25}
.prompt .arg,.prompt .msg{display:flex;gap:12px;align-items:baseline;border-bottom:1px solid var(--line);padding:8px 0}
.prompt .arg span,.prompt .msg>span[aria-hidden]{color:var(--accent);font-size:12px;letter-spacing:.06em;white-space:nowrap}
.prompt input,.prompt textarea{flex:1;min-width:0;background:none;border:0;color:var(--hot);font:14px/1.6 var(--mono);caret-color:var(--hot);outline:none;resize:vertical}
.prompt textarea{min-height:9em}
.prompt .arg:focus-within,.prompt .msg:focus-within{border-color:var(--hot)}
.prompt [aria-invalid=true]{color:#ffb4a8}
.prompt .err{min-height:1.2em;font-size:11px;color:#ffb4a8;letter-spacing:.04em}
.prompt .btn{align-self:flex-start;margin-top:10px}
.prompt .hint-keys{font-size:10px;color:var(--dim);letter-spacing:.1em}
.prompt .hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.pass{margin-top:28px}
.pass .tokens{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:22px}
.pass .tokens span{border:1px solid var(--line);padding:2px 6px;font-size:12px;color:var(--accent);max-width:100%;overflow-wrap:anywhere}
.pass .logits div{display:grid;grid-template-columns:5em 1fr 3em;gap:10px;align-items:center;font-size:11px;color:var(--accent);margin:4px 0}
.pass .logits i{height:8px;background:var(--accent);transform-origin:left;transform:scaleX(var(--p))}
.pass .logits div:first-child i{background:var(--hot)}
.pass .logits b{font-weight:400;color:var(--dim);text-align:right}
.pass .reply{margin-top:22px;font-size:15px;line-height:1.7;color:var(--hot)}
.pass .reply::after{content:"█";margin-left:2px;animation:pulse 1s steps(1) infinite}
.pass .reply.done::after{animation:none;opacity:0}
.pass>.btn{margin:14px 10px 0 0}
.grains{position:fixed;inset:0;pointer-events:none;z-index:11}
.grains span{position:absolute;color:var(--hot);font:12px var(--mono)}
