:root{
  --bg:#050407; --bone:#d9d0c1; --dim:#8c8478; --blood:#8a1c1c; --blood2:#c0392b; --ghost:#c9d4e0;
  --serif:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  --wind:0;
  --lantern:170px;
}
*{box-sizing:border-box}
html{scroll-behavior:auto;background:var(--bg)}
body{
  margin:0;color:var(--bone);font-family:var(--serif);line-height:1.55;
  background:
    radial-gradient(60vw 50vh at 78% 8%, rgba(120,110,130,.16), transparent 70%),
    linear-gradient(#050407 0%, #0a0509 55%, #14070b 100%);
  background-color:var(--bg);overflow-x:hidden;min-height:100vh;
}
body.lights-out{--lantern:95px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
a{color:var(--ghost)}
:focus-visible{outline:2px solid var(--ghost);outline-offset:3px}
::selection{background:rgba(138,28,28,.55);color:#f4ead7}

/* fixed background layers */
.layer{position:fixed;left:0;right:0;pointer-events:none;will-change:transform;z-index:0}
.layer.moon{top:2vh;right:4vw;left:auto;width:min(46vw,420px);opacity:.85}
.layer.moon svg{width:100%;height:auto;display:block}
.layer.trees{bottom:-4vh;height:78vh}
.layer.trees svg{width:100%;height:100%;display:block}
.layer.far{opacity:.28}
.layer.near{opacity:.9}
#fog{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}
.vignette{position:fixed;inset:0;pointer-events:none;z-index:4;
  background:radial-gradient(ellipse at 50% 45%, transparent 38%, rgba(0,0,0,.72) 100%);transition:background 1.6s ease}
body.lights-out .vignette{background:radial-gradient(ellipse at 50% 45%, rgba(0,0,0,.35) 8%, rgba(0,0,0,.94) 70%)}
.ghosts{position:fixed;inset:0;pointer-events:none;z-index:5;overflow:hidden}

/* sweeping light */
.beam{position:fixed;top:0;bottom:0;left:0;width:20vw;pointer-events:none;z-index:3;opacity:0;will-change:transform;
  background:linear-gradient(90deg,transparent,rgba(210,220,235,.18),transparent);
  transform:translateX(-30vw);animation:sweep 22s linear infinite}
@keyframes sweep{
  0%{transform:translateX(-30vw);opacity:0}
  6%{opacity:.9}
  44%{transform:translateX(112vw);opacity:.9}
  50%,100%{transform:translateX(112vw);opacity:0}
}

/* top bar */
.bar{position:fixed;top:0;left:0;right:0;display:flex;justify-content:space-between;gap:.6rem;padding:.8rem 16px;z-index:10;pointer-events:none}
.pill{pointer-events:auto;cursor:pointer;font:inherit;font-size:.85rem;letter-spacing:.04em;color:var(--bone);
  background:rgba(8,6,10,.6);border:1px solid rgba(217,208,193,.28);border-radius:999px;padding:.5rem 1rem;display:inline-flex;gap:.55rem;align-items:center;
  transition:border-color .5s,background .5s,color .5s}
.pill:hover{border-color:rgba(217,208,193,.7);background:rgba(30,12,16,.8)}
.dot{width:.55rem;height:.55rem;border-radius:50%;background:var(--dim);transition:background .8s,box-shadow .8s}
.pill[aria-pressed="true"] .dot{background:var(--blood2);box-shadow:0 0 10px var(--blood2);animation:beat 2.4s ease-in-out infinite}
@keyframes beat{0%,100%{opacity:.5}12%{opacity:1}24%{opacity:.55}36%{opacity:1}60%{opacity:.45}}

main{position:relative;z-index:2}
section{position:relative;padding:0 16px}

/* hero */
.hero{min-height:100vh;display:grid;place-items:center;text-align:center;padding-top:5rem}
.hero-inner{max-width:60rem}
.kicker{letter-spacing:.35em;text-transform:uppercase;font-size:.78rem;color:var(--dim);margin:0 0 1.4rem;animation:softin 4s ease both 1s;opacity:0}
h1{font-weight:400;font-size:clamp(2.6rem,9.5vw,7.4rem);line-height:1.02;margin:0;letter-spacing:-.01em}
.word{display:inline-block;transform:skewX(calc(var(--wind) * -5deg));transition:transform .4s ease-out}
.ltr{display:inline-block;animation:ghostltr var(--t,8s) ease-in-out infinite;animation-delay:var(--d,0s)}
.word.no .ltr{color:var(--blood2);text-shadow:0 0 22px rgba(192,57,43,.55)}
@keyframes ghostltr{
  0%,100%{opacity:.95}
  38%{opacity:.9}
  52%{opacity:.14;transform:translateY(-3px)}
  68%{opacity:.7;transform:none}
}
.sub{font-style:italic;font-size:clamp(1.1rem,2.6vw,1.6rem);color:var(--dim);margin:1.4rem 0 2.2rem;opacity:0;animation:softin 5s ease both 2.6s}
.hint{max-width:34rem;margin:0 auto;font-size:.92rem;color:#6e675d;opacity:0;animation:softin 5s ease both 5s}
@keyframes softin{to{opacity:1}}
.scrollcue{position:absolute;bottom:2.4rem;left:50%;width:1px;height:56px;background:linear-gradient(var(--bone),transparent);opacity:.5;animation:cue 3.4s ease-in-out infinite}
@keyframes cue{0%,100%{opacity:.08;transform:translateY(-6px)}50%{opacity:.6;transform:translateY(6px)}}

/* reveal on scroll */
.in-fade{opacity:0;transition:opacity 2.2s ease}
.in-fade.in{opacity:1}

/* the fade */
.fade{padding-top:22vh;padding-bottom:22vh;max-width:46rem;margin:0 auto}
.line{font-size:clamp(1.2rem,3.2vw,1.8rem);margin:0 0 20vh;will-change:transform}
.line.big{font-size:clamp(1.8rem,5.4vw,3.4rem);line-height:1.15}
.line em{color:var(--blood2)}
.ghosty{display:inline-block;animation:fadecycle 7s ease-in-out infinite}
@keyframes fadecycle{0%,100%{opacity:1}50%{opacity:.08}}
.line.in.in-fade{animation:breathe 9s ease-in-out infinite 2.4s}
@keyframes breathe{0%,100%{opacity:1}50%{opacity:.55}}

/* the room */
.room-wrap{max-width:70rem;margin:0 auto;padding-bottom:18vh}
.room-title,.fine-title,.proc-title,.tally-title{font-size:clamp(1.6rem,4.6vw,3rem);line-height:1.15;margin:0 0 .6rem;font-weight:400}
.room-sub,.fine-sub,.proc-note{color:var(--dim);margin:0 0 2rem;font-style:italic}
.room{position:relative;height:min(78vh,640px);border:1px solid rgba(217,208,193,.1);border-radius:6px;overflow:hidden;
  background:#030206;cursor:none;touch-action:pan-y}
.room::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;
  background:radial-gradient(circle var(--lantern) at var(--lx,-300px) var(--ly,-300px),rgba(240,215,160,.2),rgba(240,215,160,.06) 55%,transparent 72%)}
.room::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(0deg,rgba(255,255,255,.012) 0 1px,transparent 1px 3px)}
.hid{position:absolute;opacity:0;transition:opacity .9s ease,filter .9s ease,transform .6s ease;cursor:pointer;background:none;border:0;padding:0;color:inherit;display:block}
.hid svg{width:100%;height:auto;display:block;overflow:visible}
.hid:hover,.hid:focus-visible{transform:scale(1.06)}
.hid.found{filter:drop-shadow(0 0 8px rgba(217,208,193,.35))}
.hid.pulse{animation:foundpulse 1.6s ease}
@keyframes foundpulse{0%{filter:drop-shadow(0 0 0 transparent)}35%{filter:drop-shadow(0 0 26px rgba(240,215,160,.9))}100%{filter:drop-shadow(0 0 8px rgba(217,208,193,.35))}}

/* fine print */
.fine{max-width:46rem;margin:0 auto;padding-bottom:24vh}
.ink-field{margin-top:3rem;padding:3rem 0}
.ink{color:transparent;font-size:clamp(1.3rem,3.4vw,2rem);margin:0 0 6rem;max-width:30rem;cursor:text;user-select:text;-webkit-user-select:text}
.ink.right{margin-left:auto;text-align:right}
.ink::selection{color:#efe3c8;background:rgba(138,28,28,.5);text-shadow:0 0 12px rgba(255,200,160,.5)}
.ink.dim::selection{color:var(--dim)}

/* procession */
.procession{min-height:130vh;padding-bottom:16vh;overflow:hidden;
  background:linear-gradient(transparent,rgba(110,18,22,.22) 40%,rgba(60,10,14,.3) 70%,transparent)}
.proc-title{max-width:46rem;margin-left:auto;margin-right:auto;padding-top:8vh}
.proc-note{max-width:46rem;margin:0 auto}
.rows{position:relative;height:56vh;margin:3rem 0}
.row{position:absolute;left:0;width:260vw;will-change:transform}
.row svg{width:100%;height:auto;display:block}
.row.r1{top:2%;opacity:.35}
.row.r2{top:28%;opacity:.6}
.row.r3{top:56%;opacity:.95}
.beam-zone{position:relative;height:42vh;max-width:70rem;margin:0 auto}

/* tally */
.tally{max-width:46rem;margin:0 auto;padding:12vh 16px 18vh}
.roll{list-style:none;padding:0;margin:2rem 0;display:flex;flex-wrap:wrap;gap:.5rem 1.4rem;color:var(--dim)}
.roll li:nth-child(odd){opacity:.75}
.roll .sep{width:100%;height:0;overflow:hidden}
.fan{color:#6e675d;font-size:.9rem}

.foot{position:relative;z-index:2;padding:3rem 16px 4rem;text-align:center;color:#6e675d;font-size:.85rem}

/* ghosts */
.ghost{position:absolute;width:60px;opacity:0;transform:translate(-50%,-50%) scale(var(--s,1));animation:ghostrise var(--dur,12s) ease-in-out forwards}
.ghost svg{width:100%;height:auto;display:block}
@keyframes ghostrise{
  0%{opacity:0;transform:translate(-50%,-50%) scale(var(--s,1))}
  18%{opacity:.5}
  42%{opacity:.1}
  62%{opacity:.42}
  100%{opacity:0;transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(calc(var(--s,1) * 1.15))}
}
.hand{position:fixed;width:84px;pointer-events:none;z-index:6;transform:translate(-50%,-50%) rotate(var(--r,0deg));opacity:0;animation:handfade 9s ease forwards}
.hand svg{width:100%;height:auto;display:block}
@keyframes handfade{0%{opacity:0}8%{opacity:.75}30%{opacity:.55}100%{opacity:0}}

/* context menu */
.ctx{position:fixed;z-index:50;min-width:15.5rem;background:rgba(10,7,12,.94);border:1px solid rgba(217,208,193,.28);border-radius:8px;padding:.35rem;
  box-shadow:0 12px 40px rgba(0,0,0,.7),0 0 40px rgba(138,28,28,.18);backdrop-filter:blur(8px);opacity:0;transform:translateY(4px);transition:opacity .25s ease,transform .25s ease}
.ctx.show{opacity:1;transform:none}
.ctx[hidden]{display:none}
.ctx button{display:flex;width:100%;gap:.6rem;align-items:center;text-align:left;font:inherit;font-size:.92rem;color:var(--bone);background:none;border:0;border-radius:5px;padding:.5rem .7rem;cursor:pointer}
.ctx button:hover,.ctx button:focus-visible{background:rgba(138,28,28,.4);outline:none}
.ctx button[disabled]{opacity:.35;cursor:default}
.ctx .ico{width:1.2rem;text-align:center}
.ctx hr{border:0;border-top:1px solid rgba(217,208,193,.14);margin:.3rem .2rem}
.ctx .label{font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;color:var(--dim);padding:.35rem .7rem .15rem}
.ctx .tip{font-size:.74rem;color:#6e675d;padding:.3rem .7rem .4rem}

/* toast */
.toast{position:fixed;left:50%;bottom:2.2rem;transform:translateX(-50%);z-index:40;max-width:min(92vw,34rem);text-align:center;pointer-events:none;
  background:rgba(8,5,10,.88);border:1px solid rgba(217,208,193,.3);border-radius:8px;padding:.7rem 1.1rem;opacity:0;transition:opacity 1.2s ease;font-style:italic}
.toast.show{opacity:1}

/* ledger */
.ledger{background:#0a070c;color:var(--bone);border:1px solid rgba(217,208,193,.3);border-radius:10px;padding:0;max-width:min(92vw,34rem);width:100%}
.ledger::backdrop{background:rgba(0,0,0,.78);backdrop-filter:blur(4px)}
.ledger-in{padding:1.4rem 1.5rem 1.6rem}
.ledger h2{margin:0 0 .3rem;font-weight:400;font-size:1.8rem}
.ledger-sub{color:var(--dim);margin:0 0 1rem;font-size:.92rem}
.ledger ol{margin:0 0 1.2rem;padding-left:1.5rem}
.ledger li{margin:.35rem 0}
.ledger li.todo{color:#6e675d}
.ledger li small{color:var(--dim);display:block;font-size:.8rem}

.ns{position:relative;z-index:20;text-align:center;padding:2rem}

@media (max-width:640px){
  .layer.moon{width:62vw}
  .pill{font-size:.78rem;padding:.45rem .8rem}
  .room{cursor:default}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}
  .ltr,.ghosty,.line.in.in-fade{opacity:1;filter:none}
  .in-fade{opacity:1;filter:none}
  .beam{display:none}
  .kicker,.sub,.hint{opacity:1}
}

.lite #fog{display:none}
.lite .beam{display:none}
.lite .ghost{display:none}
.lite .ltr,.lite .ghosty,.lite .line.in.in-fade{animation:none}
.layer.trees{contain:strict}

/* the hour */
.hour{max-width:70rem;margin:0 auto;padding:12vh 16px 14vh;text-align:center}
.hour-title{font-size:clamp(1.6rem,4.6vw,3rem);line-height:1.15;margin:0 0 1.6rem;font-weight:400}
.bigwrap{position:relative;display:inline-block;max-width:100%}
.big{display:flex;justify-content:center;gap:clamp(.6rem,2.4vw,1.8rem);font-variant-numeric:tabular-nums}
.big .grp{display:flex;flex-direction:column;align-items:center;min-width:2ch}
.big .num{font-size:clamp(2.2rem,10vw,6.4rem);line-height:1;letter-spacing:.02em}
.big .lab{font-size:.7rem;letter-spacing:.28em;text-transform:uppercase;color:var(--dim);margin-top:.4rem}
.big.live .num{color:var(--blood2);text-shadow:0 0 24px rgba(192,57,43,.45)}
.big.true .num{color:#f4ead7}
.ghostbig{position:absolute;inset:0;pointer-events:none;color:#9fb4cf;opacity:0;transform:translate(.05em,-.04em);filter:none}
.ghostbig .lab{visibility:hidden}
.hour-sub{color:var(--dim);font-style:italic;margin:1.2rem 0 3rem;font-size:1.1rem}
.clocks{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:1.6rem 1rem;margin:0 0 2.4rem}
.clock{margin:0}
.clock svg{width:min(100%,128px);height:auto;display:block;margin:0 auto}
.clock .face{fill:rgba(8,6,10,.55);stroke:rgba(217,208,193,.35);stroke-width:1.2}
.clock .ticks line{stroke:rgba(217,208,193,.5);stroke-width:1.3}
.clock .re line{stroke:var(--bone)}
.clock .re .re-s{stroke:var(--blood2)}
.clock .gh line{stroke:#9fb4cf}
.clock .gh{opacity:0}
.clock .hub{fill:var(--bone)}
.clock figcaption{margin-top:.5rem;font-size:.82rem;color:var(--dim)}
.clock .nm{display:block;letter-spacing:.06em}
.clock .dg{display:block;position:relative;font-variant-numeric:tabular-nums;color:var(--bone);font-size:1rem;min-height:1.4em}
.clock .dgh{position:absolute;left:0;right:0;top:0;color:#9fb4cf;opacity:0;transform:translate(.35em,.2em)}
.hour-controls{display:flex;flex-wrap:wrap;gap:.8rem;justify-content:center;margin:0 0 1.2rem}
.hour-controls .pill[aria-pressed="true"]{border-color:var(--bone);color:#f4ead7}
.hour-note{color:#6e675d;font-style:italic;min-height:1.6em;margin:0 0 7vh}
.sunset{max-width:36rem;margin:0 auto;padding:2rem 1.4rem;border:1px solid rgba(138,28,28,.5);border-radius:10px;background:rgba(40,8,12,.35)}
.sunset .kicker2{letter-spacing:.3em;text-transform:uppercase;font-size:.72rem;color:var(--blood2);margin:0 0 .8rem}
.sunset h3{font-weight:400;font-size:clamp(1.4rem,3.6vw,2rem);margin:0 0 .6rem}
.sunbig{margin:1.4rem 0 .8rem}
.sunbig .num{font-size:clamp(1.8rem,7vw,3.2rem);color:#f4ead7}
.sun-local{color:var(--dim);margin:0 0 .4rem;font-size:.9rem}
.sun-msg{font-style:italic;margin:0 0 1.2rem}
.hd-link{display:inline-block;padding:.6rem 1.2rem;border:1px solid rgba(217,208,193,.4);border-radius:999px;color:var(--bone);text-decoration:none;transition:background .4s,border-color .4s}
.hd-link:hover,.hd-link:focus-visible{background:rgba(138,28,28,.4);border-color:var(--bone)}
.sunset .fan{margin:1rem 0 0;font-size:.8rem}
.sunset.past{border-color:rgba(217,208,193,.35)}
