
  :root{
    --void:#0A0706;
    --stage:#15100B;
    --gold:#E8B872;
    --gold-hot:#FFE3B0;
    --cream:#F0E4D4;
    --ember:#8A5A2B;
    --display:"Bodoni Moda",Georgia,"Times New Roman",serif;
    --ui:"Archivo",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  }
  /* This is a darkened cinema stage by design; it stays dark in every scheme. */
  :root:not([data-theme="light"]),
  :root[data-theme="dark"],
  :root[data-theme="light"]{ color-scheme: dark; }

  *,*::before,*::after{ box-sizing:border-box; }
  html{ scroll-behavior:auto; }
  body{
    margin:0;
    background:var(--void);
    color:var(--cream);
    font-family:var(--ui);
    -webkit-font-smoothing:antialiased;
    overscroll-behavior-y:none;
  }
  /* The scroll track. Height is set from JS so the pacing matches the frame count. */
  #track{ height:720vh; }

  canvas#stage{
    position:fixed; inset:0; width:100%; height:100%;
    display:block; z-index:0; touch-action:pan-y;
  }
  #vignette{
    position:fixed; inset:0; z-index:1; pointer-events:none;
    background:radial-gradient(120% 90% at 50% 45%, rgba(10,7,6,0) 38%, rgba(10,7,6,.55) 78%, rgba(10,7,6,.92) 100%);
  }

  .overlay{ position:fixed; inset:0; z-index:2; pointer-events:none; }
  .overlay > *{ position:absolute; }

  /* ---------- loader ---------- */
  #loader{
    position:fixed; inset:0; z-index:9; background:var(--void);
    display:grid; place-content:center; justify-items:center; gap:1.6rem;
    transition:opacity .9s ease; padding:2rem;
  }
  #loader.done{ opacity:0; pointer-events:none; }
  .logo{
    background-image:url("images/logo.png");
    background-position:center; background-size:contain; background-repeat:no-repeat;
    aspect-ratio:1000/634;
    filter:drop-shadow(0 0 34px rgba(232,184,114,.22));
  }
  .mark{ width:clamp(150px,42vw,280px); }
  .bar{ width:min(58vw,240px); height:1px; background:rgba(232,184,114,.22); position:relative; }
  .bar i{ position:absolute; inset:0 auto 0 0; width:0%; background:var(--gold); transition:width .25s ease; }
  .count{ font-size:.72rem; letter-spacing:.24em; color:rgba(240,228,212,.42); font-variant-numeric:tabular-nums; }

  /* ---------- opening title ---------- */
  #title{
    inset:0; display:grid; place-content:center; justify-items:center;
    text-align:center; padding:2rem; gap:1.1rem;
  }
  #title .brand{ width:clamp(250px,58vw,600px); }
  #title .sub{
    font-family:var(--display); font-style:italic; font-size:clamp(.95rem,2.4vw,1.35rem);
    color:rgba(240,228,212,.66); max-width:30ch; line-height:1.5; margin:0;
  }
  .hair{ width:56px; height:1px; background:var(--gold); opacity:.8; }

  #cue{
    left:50%; bottom:clamp(1.8rem,5vh,3rem); transform:translateX(-50%);
    display:flex; flex-direction:column; align-items:center; gap:.7rem;
    font-size:.7rem; letter-spacing:.26em; color:rgba(240,228,212,.5);
  }
  #cue .line{ width:1px; height:44px; background:linear-gradient(rgba(232,184,114,.65),rgba(232,184,114,0)); }

  /* ---------- in-flight caption ---------- */
  #hud{
    left:clamp(1.1rem,4vw,3.2rem); bottom:clamp(1.4rem,4.5vh,3rem);
    display:flex; align-items:flex-end; gap:1.1rem;
  }
  #hud .num{
    font-family:var(--display); font-size:clamp(2.6rem,7vw,4.2rem); line-height:.8;
    color:var(--gold); font-variant-numeric:tabular-nums;
  }
  #hud .meta{ padding-bottom:.35rem; }
  #hud .cat{
    font-family:var(--display); font-size:clamp(1.05rem,3.2vw,1.6rem); line-height:1.15;
    color:var(--cream); margin:0 0 .3rem; transition:opacity .35s ease;
  }
  #hud .of{ font-size:.68rem; letter-spacing:.22em; color:rgba(240,228,212,.4); }

  /* ---------- progress rail ---------- */
  #rail{
    right:clamp(.9rem,3vw,2.4rem); top:50%; transform:translateY(-50%);
    width:1px; height:min(42vh,320px); background:rgba(232,184,114,.16);
  }
  #rail i{ position:absolute; left:0; top:0; width:1px; height:0%; background:var(--gold); }
  #rail b{
    position:absolute; left:-3px; width:7px; height:7px; border-radius:50%;
    background:var(--gold-hot); top:0; margin-top:-3px;
    box-shadow:0 0 10px 2px rgba(232,184,114,.55);
  }

  /* ---------- closing ---------- */
  #outro{
    inset:0; display:grid; place-content:center; justify-items:center; text-align:center;
    padding:2rem; gap:1.2rem;
  }
  #outro h2{
    font-family:var(--display); font-weight:400; margin:0;
    font-size:clamp(1.9rem,6vw,3.4rem); line-height:1.1; letter-spacing:.01em; max-width:16ch;
  }
  #outro p{ margin:0; color:rgba(240,228,212,.6); max-width:38ch; line-height:1.6; font-size:.95rem; }
  #outro a{
    pointer-events:auto; display:inline-block; margin-top:.4rem;
    padding:.85rem 1.9rem; border:1px solid rgba(232,184,114,.5); color:var(--gold-hot);
    text-decoration:none; font-size:.78rem; letter-spacing:.2em; border-radius:2px;
    transition:background .3s ease, border-color .3s ease;
  }
  #outro:not(.on) a{ pointer-events:none; visibility:hidden; }   /* no invisible button while the photos are flying by */
  #outro a:hover,#outro a:focus-visible{ background:rgba(232,184,114,.12); border-color:var(--gold); }

  /* ---------- way back to the main site ---------- */
  .home{
    position:fixed; z-index:5; top:max(1rem, env(safe-area-inset-top)); left:clamp(1rem,3vw,2rem);
    display:inline-flex; align-items:center; gap:.55rem; padding:.65rem .95rem;
    color:var(--gold-hot); text-decoration:none; font-size:.72rem; letter-spacing:.2em;
    background:rgba(10,7,6,.45); -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
    border:1px solid rgba(232,184,114,.22); border-radius:2px;
    transition:border-color .3s ease, background .3s ease;
  }
  .home svg{ width:14px; height:14px; flex:none; }
  .home:hover,.home:focus-visible{ border-color:var(--gold); background:rgba(10,7,6,.7); }

  .fade{ opacity:0; transition:opacity .6s ease; }
  .fade.on{ opacity:1; }

  :focus-visible{ outline:2px solid var(--gold-hot); outline-offset:3px; }

  .sr-only{ position:absolute; width:1px; height:1px; margin:-1px; padding:0; border:0; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
  #flat.on ~ #photos{ display:none; }   /* the visible grid replaces the hidden list */

  /* ---------- fallback / screen-reader gallery ---------- */
  #flat{ display:none; position:relative; z-index:3; padding:clamp(1.5rem,5vw,4rem); padding-top:clamp(4.6rem,10vw,6.6rem); }
  #flat.on{ display:block; }
  #flat h2{ font-family:var(--display); font-weight:400; font-size:clamp(2rem,7vw,3.4rem); margin:0 0 .6rem; }
  #flat p{ color:rgba(240,228,212,.6); margin:0 0 2.4rem; max-width:44ch; line-height:1.6; }
  .grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:clamp(.6rem,2vw,1.2rem); }
  .grid figure{ margin:0; }
  .grid img{ width:100%; aspect-ratio:4/5; object-fit:cover; display:block; border:1px solid rgba(232,184,114,.25); }
  .grid figcaption{ font-size:.72rem; letter-spacing:.14em; color:rgba(240,228,212,.45); margin-top:.5rem; }

  .sr{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }

  @media (prefers-reduced-motion:reduce){
    .fade{ transition:none; }
    #loader{ transition:none; }
  }
