
/* Layout: one full-bleed cinematic stage; a title card and controls float over it. Single committed dark look. */
:root{
  --bg:#120c08;
  --ink:#f3e6d0;
  --dim:#c9b18c;
  --accent:#f0a64a;
  --on-accent:#1a0f07;
  --panel:rgba(18,12,8,.66);
  --line:rgba(243,230,208,.26);
  --display:'Spectral',Georgia,'Times New Roman',serif;
  --label:'Barlow Condensed','Arial Narrow',system-ui,sans-serif;
  --bar:clamp(6vh,calc((100vh - 100vw/2.35)/2),22vh);
  color-scheme:dark;
}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);overflow:hidden;font-family:var(--label)}
#stage{position:fixed;inset:0;background:var(--bg);overflow:hidden}
#gl{position:absolute;inset:0;width:100%;height:100%;display:block}
.vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 55%,transparent 55%,rgba(10,6,3,.55) 100%)}
.grain{position:absolute;inset:-50%;pointer-events:none;opacity:.09;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");animation:gr .6s steps(6) infinite}
@keyframes gr{0%{transform:translate(0,0)}20%{transform:translate(-5%,3%)}40%{transform:translate(4%,-6%)}60%{transform:translate(-3%,5%)}80%{transform:translate(6%,2%)}100%{transform:translate(0,0)}}
@media (prefers-reduced-motion:reduce){.grain{animation:none}}
.sub{position:absolute;left:16px;right:16px;bottom:calc(var(--bar) + 62px);text-align:center;font-family:var(--display);font-weight:500;font-size:clamp(17px,2.5vw,28px);line-height:1.35;text-shadow:0 2px 8px rgba(0,0,0,.9),0 0 2px #000;pointer-events:none;text-wrap:balance;min-height:1.4em}
.sub.j{color:#f7e9cb}.sub.r{color:#8fe9ff;font-family:var(--label);letter-spacing:.08em;text-transform:uppercase;font-weight:600}
.fade{position:absolute;inset:0;background:#000;opacity:1;pointer-events:none}
.bar{position:absolute;left:0;right:0;height:var(--bar);background:#000;pointer-events:none}
.bar.top{top:0}.bar.bot{bottom:0}
.card{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:24px 16px;text-align:center;background:radial-gradient(ellipse at center,rgba(12,8,5,.55),rgba(12,8,5,.88))}
.card h1{margin:0;font-family:var(--display);font-weight:300;font-size:clamp(40px,8vw,88px);letter-spacing:.01em;line-height:1.05;text-wrap:balance}
.card p{margin:0;max-width:34ch;color:var(--dim);font-family:var(--display);font-style:italic;font-weight:300;font-size:clamp(16px,2.4vw,21px);line-height:1.5}
.card small{color:var(--dim);font-size:15px;letter-spacing:.14em;text-transform:uppercase}
[hidden]{display:none!important}
button{font:inherit;cursor:pointer}
.go:disabled{opacity:.5;cursor:not-allowed}
#gfx-error{color:#f2c9a0;font-style:normal}
.go{margin-top:8px;background:var(--accent);color:var(--on-accent);border:0;padding:14px 34px;font-family:var(--label);font-weight:600;font-size:19px;letter-spacing:.14em;text-transform:uppercase}
.go:hover{filter:brightness(1.08)}
button:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
#ctrl{position:absolute;right:16px;bottom:calc(var(--bar) + 12px);display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;opacity:0;pointer-events:none;transition:opacity .3s}
/* Controls show briefly after start or a tap, on pointer hover, and whenever one has focus (keyboard or assistive
   technology; player.js drops focus after a touch tap). A touch screen's sticky :hover is excluded so they hide
   again, and hidden controls do not catch taps. */
#ctrl:focus-within,#ctrl.peek{opacity:1;pointer-events:auto}
@media (hover:hover){#stage:hover #ctrl{opacity:1;pointer-events:auto}}
/* Subtitles always sit above the control row, so the controls never cover them in any state or orientation.
   Phones (<=600px): the controls are a 2x2 grid (two rows). */
@media (max-width:600px){#ctrl{left:16px;display:grid;grid-template-columns:1fr 1fr}.sub{bottom:calc(var(--bar) + 112px)}}
#ctrl button{background:var(--panel);color:var(--ink);border:1px solid var(--line);padding:7px 14px;min-height:40px;min-width:40px;font-family:var(--label);font-weight:500;font-size:15px;letter-spacing:.12em;text-transform:uppercase;backdrop-filter:blur(4px)}
#ctrl button:hover{border-color:var(--accent);color:var(--accent)}
#ctrl[hidden]{display:none}
.back{color:var(--dim);font-size:15px;letter-spacing:.14em;text-transform:uppercase;text-decoration:none;border-bottom:1px solid var(--line);padding-bottom:2px}
.back:hover{color:var(--accent);border-color:var(--accent)}
html.embed .back{display:none}

html:not(.playing) .grain{animation-play-state:paused}
