/* The Revolve — the story's house style (../style.css) over one fixed canvas: the scroll only moves the camera.
   Night = scratchboard (paper lines out of black): the stickers are reversed (paper boxes), captions stay paper cards. */
body.rv { background: var(--ink); }
#gl { position: fixed; inset: 0; z-index: 0; display: block; }
#track { height: 3800vh; }
.rv .bar { z-index: 8; }
.rv .bar::before { display: none; }

#loading { position: fixed; inset: 0; z-index: 9; display: grid; place-items: center; background: var(--ink); color: var(--paper); transition: opacity .9s .2s, visibility 0s 1.1s; }
#loading.done { opacity: 0; visibility: hidden; }
#loading span { display: inline-block; animation: nudge 1.4s ease-in-out infinite; }

/* ---------- the words over the shot */
.words > * { position: fixed; z-index: 4; pointer-events: none; }
.words .w-title, .words .w-stk { opacity: 0; transition: opacity .35s; }
.words .w-title.on, .words .w-stk.on { opacity: 1; }
.w-title { left: var(--gut); top: 50%; transform: translateY(-50%); width: min(60vw, 940px); }
.w-title .kicker { color: var(--paper); margin-bottom: 2.2em; }
.w-title .stk .ln { font-size: min(7.2vw, 12.6vh); }
.w-title .lede { color: var(--ink); background: var(--sheet); border: 2px solid var(--ink); padding: .7em .9em .75em; max-width: 30ch; box-shadow: 5px 5px 0 rgba(0,0,0,.55); transform: rotate(-.4deg); }
.w-title .cue { position: relative; left: auto; bottom: auto; margin: 2.6em 0 0 .2em; color: var(--paper); }
.w-title .cue .cue-map { display: inline; margin: 0; padding: 0; animation: none; transform: none; }
.pos-tl { left: var(--gut); top: max(96px, 13vh); }
.pos-tl2 { left: calc(var(--gut) + 3vw); top: calc(max(96px, 13vh) + 5.2em); transform: rotate(.5deg); }
.pos-tr { right: var(--gut); top: max(96px, 14vh); transform: rotate(.7deg); }
.pos-bl { left: var(--gut); bottom: max(150px, 21vh); transform: rotate(.3deg); }
.pos-br { right: var(--gut); bottom: max(150px, 21vh); transform: rotate(-.5deg); }
.words .ch-aside { background: var(--ink); color: var(--paper); border-color: var(--paper); box-shadow: 4px 4px 0 rgba(233,228,214,.2); }
.w-stk .stk .ln { font-size: min(5.8vw, 10.5vh); }
.pos-stk-r { right: 7vw; bottom: max(190px, 27vh); }
.pos-stk-r .stk { align-items: flex-end; }
.pos-stk-l { left: var(--gut); bottom: max(190px, 27vh); }

/* ---------- a stage's card: the text column at the left, the screen fills the right of the shot */
.cards { position: fixed; z-index: 5; left: var(--gut); top: max(100px, 13vh); bottom: max(150px, 20vh); width: min(34vw, 540px); pointer-events: none; }
.card { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: flex-start; gap: max(12px, 1.4vh); opacity: 0; visibility: hidden; transition: opacity .3s, visibility 0s .3s; }
.card.on { opacity: 1; visibility: visible; transition: opacity .3s; }
.card .cd-no { margin: 0 0 .2em; color: var(--paper); text-shadow: 0 1px 0 #000; }
.card .cd-title { margin: 1.2em 0 .6em; }
.card .cd-title .ln { font-size: max(34px, min(4.4vw, 8vh)); color: var(--ink); }
.card .cd-title .ln b { background: var(--paper); box-shadow: 0 0 0 1px rgba(0,0,0,.25); }
.card .cd-title .ln::after { background: linear-gradient(135deg, #3a3833, #121110 60%, #000); }
.card .cap { position: relative; left: auto; top: auto; right: auto; bottom: auto; max-width: 100%; }
.card .cd-cap2 { margin-left: max(14px, 1.4vw); transform: rotate(.5deg); }
.card .cd-aside { margin-left: max(28px, 2.8vw); background: var(--ink); color: var(--paper); border-color: var(--paper); box-shadow: 4px 4px 0 rgba(233,228,214,.2); transform: rotate(-.8deg); }
.cd-go { display: flex; flex-wrap: wrap; gap: .7em; margin: auto 0 0; }
.card .ch-go { margin: 0; opacity: 0; pointer-events: none; cursor: pointer; }
.card.on .ch-go { opacity: 1; pointer-events: auto; transition: opacity .3s 1.1s, transform .2s, box-shadow .2s; }
.card .cd-in { background: var(--ink); color: var(--paper); border-color: var(--paper); box-shadow: 4px 4px 0 rgba(233,228,214,.35); }
.ch-go i { font-style: normal; }

/* ---------- the slate: a paper strip taped to the corner — scene, clock, the night's progress, the ways round it */
.slate { position: fixed; z-index: 7; left: var(--gut); bottom: max(16px, env(safe-area-inset-bottom)); width: min(430px, calc(100vw - 2 * var(--gut)));
  background: var(--sheet); color: var(--ink); border: 2px solid var(--ink); box-shadow: 5px 5px 0 rgba(0,0,0,.6); padding: 10px 12px 10px; transform: rotate(-.6deg);
  transition: opacity .5s, transform .5s; }
.at-open .slate { opacity: 0; transform: translateY(12px) rotate(-.6deg); pointer-events: none; }
.sl-top { display: flex; justify-content: space-between; align-items: baseline; gap: 1em; }
.sl-sc { font: 400 max(22px, 1.5vw)/1 "Anton", Impact, sans-serif; letter-spacing: .01em; }
.sl-clock { font: 600 max(13px, .9vw)/1 "IBM Plex Mono", monospace; letter-spacing: .08em; }
.sl-slug { margin: .55em 0 .7em; font: 500 var(--t-label)/1.35 "IBM Plex Mono", monospace; letter-spacing: .14em; text-transform: uppercase; min-height: 2.7em; }
.sl-bar { height: 3px; background: rgba(18,17,16,.16); margin: 0 0 9px; overflow: hidden; }
.sl-bar i { display: block; height: 100%; background: var(--ink); transform-origin: 0 50%; transform: scaleX(0); }
.sl-btns { display: flex; gap: 6px; }
.sl-btns button { font: 500 var(--t-label)/1 "IBM Plex Mono", monospace; letter-spacing: .14em; text-transform: uppercase; color: var(--ink); background: transparent;
  border: 1.5px solid var(--ink); padding: .8em .9em .75em; cursor: pointer; transition: background .2s, color .2s; }
.sl-btns button i { font-style: normal; }
.sl-btns #prev, .sl-btns #next { font-size: 15px; padding: .32em .7em .38em; }
.sl-btns button:hover, .sl-btns button[aria-pressed="true"], .sl-btns button[aria-expanded="true"] { background: var(--ink); color: var(--paper); }
#ov-btn { margin-left: auto; }
.sl-tape { left: -18px; top: -10px; width: 64px; }

/* the call sheet */
.sheet { position: fixed; z-index: 8; left: var(--gut); bottom: calc(max(16px, env(safe-area-inset-bottom)) + 150px); width: min(560px, calc(100vw - 2 * var(--gut)));
  max-height: calc(100svh - 270px); overflow: auto; background: var(--sheet); color: var(--ink); border: 2px solid var(--ink); box-shadow: 8px 8px 0 rgba(0,0,0,.55);
  padding: 16px 18px 12px; transform: translateY(14px) rotate(.4deg); opacity: 0; transition: opacity .25s, transform .3s cubic-bezier(.2,.8,.2,1); }
.sheet.on { opacity: 1; transform: rotate(.4deg); }
.sh-head { display: grid; grid-template-columns: 1fr auto; align-items: end; gap: 4px 12px; border-bottom: 2px solid var(--ink); padding-bottom: 10px; }
.sh-head b { grid-row: span 2; font: 400 max(28px, 2vw)/1 "Anton", Impact, sans-serif; text-transform: uppercase; }
.sh-head .label { margin: 0; }
.sheet ol { list-style: none; margin: 0; padding: 0; }
.sheet li { border-bottom: 1px solid rgba(18,17,16,.22); position: relative; }
.sheet li button { width: 100%; display: grid; grid-template-columns: 2.4em 1fr auto; gap: .8em; align-items: baseline; text-align: left; background: none; border: 0; padding: .72em 0 .66em; cursor: pointer; color: var(--ink);
  font: 500 var(--t-label)/1.35 "IBM Plex Mono", monospace; letter-spacing: .12em; text-transform: uppercase; }
.sheet li button b { font: 400 18px/1 "Anton", Impact, sans-serif; letter-spacing: .02em; }
.sheet li button em { font-style: normal; opacity: .6; }
.sheet li button:hover span { text-decoration: underline; text-underline-offset: 3px; }
/* the scene we're in: ringed in red china marker (the contact sheet's grammar on /work/) */
.sheet li.on::before { content: ""; position: absolute; left: -8px; right: -6px; top: 2px; bottom: 1px; border: 2.5px solid #d8261c; border-radius: 46% 54% 52% 48% / 60% 46% 54% 40%; transform: rotate(-.8deg); pointer-events: none; }

/* the overview's label at the cursor */
.hint { position: fixed; z-index: 7; left: 0; top: 0; pointer-events: none; background: var(--sheet); color: var(--ink); border: 2px solid var(--ink); box-shadow: 4px 4px 0 rgba(0,0,0,.6);
  padding: .55em .8em .5em; display: flex; flex-direction: column; gap: .3em; opacity: 0; transition: opacity .15s; }
.hint.on { opacity: 1; }
.hint b { font: 400 20px/1 "Anton", Impact, sans-serif; text-transform: uppercase; }
.hint span { font: 500 var(--t-label)/1.2 "IBM Plex Mono", monospace; letter-spacing: .14em; text-transform: uppercase; }
.in-ov .words, .in-ov .cards { opacity: 0; }
.words, .cards { transition: opacity .3s; }

/* the map's pins: a paper flag on a pin per slice, over the set from above */
.pins { position: fixed; inset: 0; z-index: 3; pointer-events: none; opacity: 0; transition: opacity .5s; }
.pins.on { opacity: 1; }
.pin { position: absolute; left: 0; top: 0; padding: 0; border: 0; background: none; color: var(--ink); pointer-events: none; will-change: transform; }
.in-ov .pins.on .pin, .at-open .pins.on .pin { pointer-events: auto; cursor: pointer; }
.pin b { transition: transform .25s cubic-bezier(.2,.8,.2,1), background .2s, color .2s; }
.pin.hot b { transform: translateX(-50%) rotate(var(--tilt)) scale(1.12); }
.pin::before { content: ""; position: absolute; left: -3px; top: -3px; width: 6px; height: 6px; border-radius: 50%; background: var(--paper); box-shadow: 0 0 0 1.5px var(--ink); }
.pin::after { content: ""; position: absolute; left: -.75px; bottom: 0; width: 1.5px; height: 30px; background: var(--paper); transform-origin: 50% 100%; }
.pin { --tilt: -1.5deg; }
.pin-st:nth-child(even) { --tilt: 1.2deg; }
.pin b { position: absolute; left: 0; bottom: 30px; white-space: nowrap; display: flex; align-items: center; gap: .55em; transform: translateX(-50%) rotate(var(--tilt));
  background: var(--sheet); border: 1.5px solid var(--ink); box-shadow: 3px 3px 0 rgba(0,0,0,.6); padding: .28em .55em .26em .4em; transition: background .2s, color .2s; }
.pin i { font: 400 19px/1 "Anton", Impact, sans-serif; font-style: normal; }
.pin span { font: 500 var(--t-label)/1 "IBM Plex Mono", monospace; letter-spacing: .12em; text-transform: uppercase; }
.pin-pl i { font-size: 13px; letter-spacing: .05em; text-transform: uppercase; }
.pin-pl span { opacity: .62; }
.pin-yours b { background: #f2c230; }
.pin.hot b, .pin:hover b, .pin:focus-visible b { background: var(--ink); color: var(--paper); border-color: var(--paper); }
@media (max-width: 760px) { .pin span { display: none; } .pin i { font-size: 15px; } .pin::after { height: 18px; } .pin b { bottom: 18px; padding: .22em .4em; } }

/* the sign-in book's pin in the yard (opens the visitors' log) */
.pin-log { position: fixed; z-index: 4; opacity: 0; transition: opacity .4s; pointer-events: none; }
.pin-log.on { opacity: 1; pointer-events: auto; cursor: pointer; }
.pin-log b { background: #f2c230; }
.pin-log.on:hover b { background: var(--ink); color: var(--paper); }
.in-ov .pin-log, .in-step .pin-log { opacity: 0; pointer-events: none; }

/* taking a seat: the bar comes up once he's sat down; the live site opens out of the screen */
.stepui { position: fixed; z-index: 8; left: 50%; bottom: max(18px, env(safe-area-inset-bottom)); transform: translate(-50%, 16px); display: flex; align-items: center; gap: 10px;
  background: var(--sheet); border: 2px solid var(--ink); box-shadow: 5px 5px 0 rgba(0,0,0,.6); padding: 8px 8px 8px 14px; opacity: 0; pointer-events: none; transition: opacity .3s, transform .35s; }
.in-step.st-ready .stepui { opacity: 1; pointer-events: auto; transform: translate(-50%, 0); }
.in-step .slate { opacity: 0; pointer-events: none; }
.stepui .btn { padding: .95em 1.1em; white-space: nowrap; }
.st-name { display: flex; flex-direction: column; gap: .35em; margin-right: 6px; }
.st-name b { font: 400 20px/1 "Anton", Impact, sans-serif; text-transform: uppercase; white-space: nowrap; }
.st-name em { font: 500 var(--t-label)/1 "IBM Plex Mono", monospace; font-style: normal; letter-spacing: .14em; text-transform: uppercase; background: #f2c230; padding: .3em .45em .25em; align-self: flex-start; }
.st-wait { display: none; color: var(--ink); }
.st-wait span { display: inline-block; animation: nudge 1.4s ease-in-out infinite; }
.stepui.st-loading .st-wait { display: inline; }
.embed { position: fixed; z-index: 6; left: 0; top: 0; width: 0; height: 0; opacity: 0; pointer-events: none; background: #050505;
  box-shadow: 0 0 0 3px var(--ink), 0 0 0 5px var(--paper), 10px 10px 0 5px rgba(0,0,0,.55);
  transition: opacity .45s, left .75s cubic-bezier(.2,.8,.2,1), top .75s cubic-bezier(.2,.8,.2,1), width .75s cubic-bezier(.2,.8,.2,1), height .75s cubic-bezier(.2,.8,.2,1); }
.embed.snap { transition: none; }
.embed.on { opacity: 1; pointer-events: auto; }
.embed iframe { display: block; width: 100%; height: 100%; border: 0; background: #050505; }
.in-embed .words, .in-embed .cards, .in-embed .pins { opacity: 0; }

/* the end: day 2's call sheet on a clipboard, beside the bench in my room (the drawing behind it, the bench's glass in colour) */
.end { position: fixed; z-index: 7; left: var(--gut); top: 74px; bottom: max(16px, env(safe-area-inset-bottom)); width: min(46vw, 740px); display: flex; align-items: center;
  opacity: 0; visibility: hidden; transform: translateY(22px) rotate(-1deg); transition: opacity .6s, transform .8s cubic-bezier(.2,.8,.2,1), visibility 0s .8s; pointer-events: none; }
.at-end .end { opacity: 1; visibility: visible; transform: rotate(-.8deg); transition: opacity .6s, transform .8s cubic-bezier(.2,.8,.2,1); }
.at-end .end .cs { pointer-events: auto; }
.at-end .slate { opacity: 0; pointer-events: none; }
.cs { position: relative; width: 100%; max-height: 100%; overflow: auto; color: var(--ink); border: 2px solid var(--ink); box-shadow: 9px 9px 0 rgba(18,17,16,.82);
  background: var(--sheet) repeating-linear-gradient(0deg, transparent 0 27px, rgba(18,17,16,.035) 27px 28px);
  padding: clamp(26px, 2.6vw, 40px) clamp(16px, 2.1vw, 30px) clamp(14px, 1.5vw, 20px); font: 500 max(14px, .9vw)/1.35 "Archivo", sans-serif; }
/* the clipboard's clip, holding the sheet at the top */
.cs-clip { position: absolute; left: 50%; top: -2px; width: 132px; height: 26px; transform: translateX(-50%); background: linear-gradient(#55524c, #2c2a27); border: 2px solid var(--ink); border-top: 0; border-radius: 0 0 8px 8px; box-shadow: 0 3px 0 rgba(18,17,16,.35); }
.cs-clip::after { content: ""; position: absolute; left: 50%; top: 6px; width: 40px; height: 6px; transform: translateX(-50%); border-radius: 3px; background: #1a1917; }
.cs-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1em; border-bottom: 4px double var(--ink); padding-bottom: 10px; }
.cs-co { display: flex; flex-direction: column; gap: 4px; }
.cs-co b { font: 400 clamp(20px, 1.7vw, 28px)/.9 "Anton", Impact, sans-serif; text-transform: uppercase; letter-spacing: .02em; }
.cs-head .label { margin: 0; }
.cs-kind { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; margin: 0; }
.cs-kind b { font: 400 clamp(30px, 2.8vw, 46px)/.86 "Anton", Impact, sans-serif; text-transform: uppercase; letter-spacing: .01em; }
.cs-prod { padding: 12px 0 10px; border-bottom: 1.5px solid var(--ink); }
.cs-prod > .label { display: block; margin: 0 0 4px; }
.cs-in { display: flex; align-items: flex-end; gap: 12px; }
.cs-in input { flex: 1; min-width: 0; font: 400 clamp(34px, 3.4vw, 58px)/1 "Anton", Impact, sans-serif; text-transform: uppercase; color: var(--ink); background: transparent;
  border: 0; border-bottom: 3px solid var(--ink); padding: .06em 0 .04em; outline: none; caret-color: #d8261c; }
.cs-in input::placeholder { color: rgba(18,17,16,.26); }
.cs-in input:focus { border-bottom-color: #d8261c; }
.cs-in .btn { flex: none; padding: 1em 1.1em; }
.cs-hint { margin: 7px 0 0; opacity: .62; }
.cs-out { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; margin: 0; min-height: 0; font: 600 max(14px, .95vw)/1.35 "Archivo", sans-serif; }
.cs-out:not(:empty) { margin-top: 10px; }
.cs-out span { flex: 1 1 100%; }
.cs-out .btn { padding: .9em 1em; }
/* the call's facts, boxed like the top of a real call sheet */
.cs-facts { display: grid; grid-template-columns: repeat(4, 1fr); margin: 10px 0 0; border: 1.5px solid var(--ink); }
.cs-facts > div { padding: 7px 10px 8px; border-left: 1px solid rgba(18,17,16,.35); }
.cs-facts > div:first-child { border-left: 0; }
.cs-facts dt { margin: 0 0 4px; }
.cs-facts dd { margin: 0; font: 600 max(13px, .86vw)/1.25 "Archivo", sans-serif; }
/* the scenes: day 2, if you write back */
.cs-sc { width: 100%; margin: 12px 0 0; border-collapse: collapse; font: 500 max(13px, .84vw)/1.3 "Archivo", sans-serif; }
.cs-sc caption { text-align: left; margin: 0 0 4px; }
.cs-sc th { text-align: left; padding: 4px 8px 4px 0; border-bottom: 2px solid var(--ink); font-weight: 500; }
.cs-sc td { padding: 7px 8px 7px 0; border-bottom: 1px solid rgba(18,17,16,.24); vertical-align: baseline; }
.cs-sc td:first-child { font: 400 18px/1 "Anton", Impact, sans-serif; width: 2.2em; }
.cs-sc td:nth-child(2) { font: 500 var(--t-label)/1.3 "IBM Plex Mono", monospace; letter-spacing: .08em; white-space: nowrap; }
.cs-sc td:last-child { font: 500 var(--t-label)/1 "IBM Plex Mono", monospace; white-space: nowrap; text-align: right; padding-right: 0; }
.cs-sc th:last-child { text-align: right; padding-right: 0; }
.cs-cast { margin: 12px 0 0; }
.cs-cast > .label, .cs-notes > .label { margin: 0 0 4px; }
.cs-cast ol { list-style: none; margin: 0; padding: 0; border-top: 2px solid var(--ink); }
.cs-cast li { display: grid; grid-template-columns: 2.2em auto 1fr; align-items: center; gap: 12px; padding: 7px 0; border-bottom: 1px solid rgba(18,17,16,.24); }
.cs-cast li > b { font: 400 18px/1 "Anton", Impact, sans-serif; }   /* the cast numbers only (li b also shrank my name sticker's <b> to 18px, its corner cut the last letter) */
.cs-cast li em { font-style: normal; opacity: .78; text-align: right; }
.cs-you { font: 400 clamp(20px, 1.8vw, 30px)/1 "Anton", Impact, sans-serif; text-transform: uppercase; }
.cs-cast .end-name { margin: 2px 0; }
.cs-cast .end-name .ln { font-size: clamp(20px, 1.8vw, 30px); }   /* the studio's size on the row above */
.cs-notes { position: relative; padding: 12px 0 0; }
.cs-notes .cs-stamp { right: 0; top: 6px; bottom: auto; }
.cs-big { font: 600 clamp(17px, 1.4vw, 24px)/1.2 "Archivo", sans-serif; margin: 0 0 6px; max-width: 32ch; }
.cs-txt { margin: 0; max-width: 60ch; font: 400 max(14px, .88vw)/1.45 "Archivo", sans-serif; }
.cs .end-links { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 14px 0 4px; }
.cs-mail { font: 500 var(--t-label)/1 "IBM Plex Mono", monospace; letter-spacing: .06em; color: var(--ink); text-underline-offset: 3px; }

/* a rubber stamp, red, inked unevenly */
.cs-stamp { position: absolute; right: clamp(16px, 2.2vw, 34px); bottom: clamp(16px, 2vw, 26px); font: 400 clamp(20px, 1.7vw, 28px)/1 "Anton", Impact, sans-serif; text-transform: uppercase; letter-spacing: .08em;
  color: #c8261c; border: 3px solid #c8261c; padding: .16em .42em .12em; transform: rotate(-11deg); opacity: .82; mix-blend-mode: multiply; pointer-events: none;
  -webkit-mask: radial-gradient(circle at 30% 40%, #000 0 55%, rgba(0,0,0,.55) 75%), repeating-linear-gradient(73deg, #000 0 3px, rgba(0,0,0,.7) 3px 5px); mask-composite: intersect; }

/* the visitors' log: a ledger, ruled, a red margin; one signed line per visit */
.log { position: fixed; inset: 0; z-index: 9; display: grid; place-items: center; padding: 74px var(--gut) 24px; background: rgba(10,10,9,.62); opacity: 0; transition: opacity .3s; }
.log[hidden] { display: none; }
.log.on { opacity: 1; }
/* a real book, not a panel: cloth-bound at the top with stitching, paper grain, a coffee ring, the page a little
   crooked on the table. Only the form is printed; every entry is handwritten (main.js buildLog) */
.lg-book { position: relative; width: min(1180px, 100%); max-height: 100%; overflow: auto; color: var(--ink); border: 0; border-radius: 2px 2px 3px 3px;
  box-shadow: 0 1px 0 #d9d2c0, 0 3px 0 #ebe5d6, 0 5px 0 #d6cfbd, 0 7px 0 #e6e0d0, 0 26px 50px rgba(0,0,0,.55), 10px 14px 0 rgba(0,0,0,.35);
  background:
    radial-gradient(circle at 88% 82%, transparent 0 46px, rgba(120,78,36,.16) 47px 50px, rgba(120,78,36,.06) 51px 54px, transparent 56px),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .35 0 0 0 0 .3 0 0 0 0 .22 0 0 0 .09 0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23n)'/%3E%3C/svg%3E"),
    linear-gradient(90deg, transparent 0 58px, rgba(200,38,28,.5) 58px 59.5px, transparent 59.5px), #f3eee1;
  padding: 0 22px 18px 76px; transform: translateY(14px) rotate(-.7deg); transition: transform .4s cubic-bezier(.2,.8,.2,1); }
.lg-book::before { content: ""; position: sticky; display: block; top: 0; z-index: 3; height: 16px; margin: 0 -22px 0 -76px;
  background: linear-gradient(#1c1b1a, #2a2826); box-shadow: 0 2px 0 rgba(0,0,0,.25); border-bottom: 1px dashed rgba(236,231,218,.35); }
.log.on .lg-book { transform: rotate(-.7deg); }
.lg-head { position: sticky; top: 16px; z-index: 2; display: flex; justify-content: space-between; align-items: flex-end; gap: 1em; background: #f3eee1; padding: 16px 0 10px; border-bottom: 2.5px solid var(--ink); }
.lg-head .label { margin: 0 0 4px; }
.lg-head b { font: 400 clamp(26px, 2.5vw, 40px)/.95 "Anton", Impact, sans-serif; text-transform: uppercase; }
.lg-cols, .lg-row { display: grid; grid-template-columns: 74px 150px minmax(170px, 1.15fr) minmax(170px, 1.1fr) 62px 52px 150px; gap: 0 12px; align-items: end; font-size: 14px; }
.lg-cols { padding: 10px 0 6px; border-bottom: 1.5px solid var(--ink); }
.lg-rows { list-style: none; margin: 0; padding: 0; }
.lg-row { position: relative; height: 52px; padding-bottom: 7px; border-bottom: 1px solid rgba(66,96,140,.3); }
/* the hand: each entry sits on the ruled line a little off it, tilted and slanted by the hour (vars from buildLog) */
.lg-row > span:not(.lg-go) { font: 600 calc(23px * var(--fs, 1))/1 "Caveat", cursive; color: var(--ink, #1f3561); white-space: nowrap; overflow: visible;
  transform: translate(var(--dx, 0), var(--dy, 0)) rotate(var(--r, 0deg)) skewX(var(--sk, -6deg)); transform-origin: 0 100%; }
.lg-row > .lg-date { font-size: calc(21px * var(--fs, 1)); opacity: .85; }
.lg-row > .lg-sig { font-weight: 700; font-size: calc(27px * var(--fs, 1)); letter-spacing: -.01em; }
.lg-row > .lg-to { font-weight: 700; font-size: calc(24px * var(--fs, 1)); }
.lg-row > .lg-why { font-size: calc(22px * var(--fs, 1)); white-space: normal; line-height: .95; }
.lg-row > .lg-in { font-weight: 700; }
.lg-row > .lg-out { opacity: .6; }
.lg-go { display: flex; gap: 10px; justify-content: flex-end; align-self: center; opacity: .55; transition: opacity .2s; }
.lg-row:hover .lg-go, .lg-go:focus-within { opacity: 1; }
.lg-go button, .lg-go a { font: 500 var(--t-label)/1 "IBM Plex Mono", monospace; letter-spacing: .12em; text-transform: uppercase; color: var(--ink); background: none; border: 0; border-bottom: 1.5px solid var(--ink); padding: 3px 0; cursor: pointer; text-decoration: none; white-space: nowrap; }
.lg-go button:hover, .lg-go a:hover { color: #c8261c; border-color: #c8261c; }
/* hover: the still, paperclipped polaroid-style, with what the studio is under it */
.lg-peek { position: absolute; right: 160px; top: 50%; width: 220px; margin: 0; padding: 7px 7px 9px; background: #fff; box-shadow: 4px 6px 0 rgba(0,0,0,.35); transform: translateY(-50%) rotate(-3deg) scale(.92);
  opacity: 0; pointer-events: none; transition: opacity .2s, transform .25s; z-index: 4; }
.lg-peek img { display: block; width: 100%; aspect-ratio: 16/9; object-fit: cover; }
.lg-peek figcaption { margin-top: 6px; font: 500 11px/1.3 "Archivo", sans-serif; color: #2a2826; }
.lg-row:hover .lg-peek { opacity: 1; transform: translateY(-50%) rotate(-3deg); }
.lg-blank { pointer-events: none; }
.lg-foot { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px; margin: 16px 0 0; font: 600 21px/1.2 "Caveat", cursive; color: #1d2c4a; }
.lg-foot .btn { font-family: "IBM Plex Mono", monospace; }
@media (hover: none) { .lg-peek { display: none; } }

/* ---------- phone: the shot is portrait — words at the top, the screen in the middle, the card under it */
@media (max-width: 760px) {
  .w-title { width: auto; right: var(--gut); top: auto; bottom: 22vh; transform: none; }
  .w-title .kicker { margin-bottom: 2.6em; }
  .w-title .stk .ln { font-size: 12.2vw; }
  .w-title .lede { font-size: 15px; }
  .w-title .cue { margin-top: 1.6em; }
  .cue-map { display: none; }
  .pos-tl, .pos-tr { left: var(--gut); right: auto; top: 76px; }
  .pos-tl2 { left: calc(var(--gut) + 18px); top: 150px; }
  .pos-bl, .pos-br { left: var(--gut); right: var(--gut); bottom: 150px; }
  .pos-br { left: auto; }
  .pos-stk-r, .pos-stk-l { right: var(--gut); left: auto; bottom: 34vh; }
  .w-stk .stk .ln { font-size: 11vw; }
  .cards { left: var(--gut); right: var(--gut); top: auto; bottom: 150px; width: auto; height: 46vh; }
  .card .cd-no { margin-bottom: 1.5em; }
  .sl-tape { display: none; }
  .card { justify-content: flex-end; gap: 8px; }
  .card .cd-title { margin: 0 0 .3em; }
  .card .cd-title .ln { font-size: 9.4vw; }
  .card .cd-cap2, .card .cd-aside { display: none; }
  .cd-go { margin: 4px 0 0; }
  .card .ch-go { padding: .85em .9em; }
  .slate { padding: 8px 10px; width: calc(100vw - 2 * var(--gut)); }
  .sl-slug { min-height: 0; margin: .4em 0 .55em; }
  .sl-btns button { padding: .75em .7em .7em; }
  .sheet { bottom: 150px; max-height: calc(100svh - 240px); }
  .stepui { left: var(--gut); right: var(--gut); transform: translateY(16px); flex-wrap: wrap; }
  .in-step.st-ready .stepui { transform: none; }
  .st-name { width: 100%; }
  .end { left: var(--gut); right: var(--gut); width: auto; top: 40svh; bottom: max(10px, env(safe-area-inset-bottom)); align-items: stretch; }
  .cs { padding: 14px 14px 12px; }
  .cs-stamp { font-size: 18px; }
  .cs-kind { flex-direction: column; align-items: flex-end; gap: .3em; }
  .cs-in input { font-size: 34px; }
  .cs-head { flex-direction: column; align-items: flex-start; gap: 8px; }
  .cs-kind { flex-direction: row; align-items: baseline; gap: .7em; }
  .cs-kind b { font-size: 30px; }
  .cs-clip { width: 96px; height: 20px; }
  .cs-notes .cs-stamp { top: auto; bottom: -6px; }
  .cs-facts { grid-template-columns: 1fr 1fr; }
  .cs-facts > div:nth-child(3) { border-left: 0; }
  .cs-facts > div:nth-child(n+3) { border-top: 1px solid rgba(18,17,16,.35); }
  .cs-sc td:nth-child(2) { white-space: normal; }
  .cs-cast li { grid-template-columns: 1.6em 1fr; }
  .cs-cast li em { grid-column: 2; text-align: left; }
  .cs-cast .end-name .ln { font-size: 8vw; }
  .log { padding: 64px 8px 8px; }
  .lg-book { padding: 0 12px 14px 30px; background-size: auto; background-image: linear-gradient(90deg, transparent 0 18px, rgba(200,38,28,.55) 18px 20px, transparent 20px), repeating-linear-gradient(#f5f1e6 0 43px, rgba(66,96,140,.28) 43px 44px); }
  .lg-cols { display: none; }
  .lg-book::before { margin: 0 -12px 0 -30px; }
  .lg-row > .lg-why { white-space: normal; }
  .lg-row { height: auto; grid-template-columns: 1fr auto; grid-template-areas: "to in" "why why" "sig out" "go go"; padding: 8px 0; gap: 2px 10px; }
  .lg-date { display: none; }
  .lg-to { grid-area: to; } .lg-in { grid-area: in; } .lg-why { grid-area: why; } .lg-sig { grid-area: sig; } .lg-out { grid-area: out; } .lg-go { grid-area: go; justify-content: flex-start; margin-top: 4px; }
  .lg-blank { display: none; }
}
@media (hover: none) { .hint { display: none; } .lg-go { opacity: 1; } }

/* the header's sound switch: off by default; on = three little bars moving */
.snd { display: inline-flex; align-items: center; gap: .55em; cursor: pointer; font-family: "IBM Plex Mono", monospace; }
.snd-bars { display: inline-flex; align-items: flex-end; gap: 2px; height: 11px; }
.snd-bars i { display: block; width: 2px; height: 3px; background: currentColor; opacity: .55; }
.snd.on .snd-bars i { opacity: 1; animation: snd-b .9s ease-in-out infinite alternate; }
.snd.on .snd-bars i:nth-child(2) { animation-delay: -.3s; } .snd.on .snd-bars i:nth-child(3) { animation-delay: -.6s; }
@keyframes snd-b { from { height: 3px } to { height: 11px } }
@media (prefers-reduced-motion: reduce) { .snd.on .snd-bars i { animation: none; height: 8px; } }
/* ?for=: a line under the kicker, handwritten, with the way to their stage */
.for-line { margin: .2em 0 1.25em; font: 700 max(22px, 1.6vw)/1.1 "Caveat", cursive; letter-spacing: 0; text-transform: none; color: var(--paper); transform: rotate(-1.5deg); }
.for-line .for-go { pointer-events: auto; font: inherit; color: inherit; background: none; border: 0; padding: 0; border-bottom: 2px solid #f2c230; cursor: pointer; }
.for-line .for-go:hover { color: #f2c230; }
/* the visitors' log: their line, in pencil */
.lg-row.lg-pencil > span:not(.lg-go) { --ink: #6d6a64; font-family: "Caveat", cursive; opacity: .9; }
@media (max-width: 640px) { .snd .snd-l { display: none; } .snd { padding: .8em .75em; } }

/* ---- the gate: a laminated lot pass on a lanyard over the opening (gate.js). The night loads behind it, dimmed */
.skip-work:hover i { transform: translateX(3px); }   /* Work → (the stack): the arrow goes right, not down */
html.gated #loading { display: none; }
html.gated, html.gated body { overflow: hidden; }
.gate { position: fixed; inset: 0; z-index: 20; display: grid; justify-items: center; align-content: start; overflow: hidden;
  background: radial-gradient(120% 90% at 50% 40%, rgba(18,17,16,.55), rgba(18,17,16,.9)); transition: background .9s ease .25s, opacity .6s ease .9s; --sw: 0deg; --sheen: 50%; }
.gate.open { background: rgba(18,17,16,0); opacity: 0; pointer-events: none; }
.gate-hang { position: relative; display: grid; justify-items: center; width: min(392px, calc(100vw - 32px)); transform-origin: 50% 0; transform: rotate(var(--sw));
  transition: transform .9s cubic-bezier(.55,0,.75,.3), translate .9s cubic-bezier(.55,0,.75,.3); }
.gate.open .gate-hang { translate: 0 115vh; transform: rotate(calc(var(--sw) + 7deg)); }
/* the strap: woven, printed with the name, coming down from above the window */
.gate-strap { width: 30px; height: max(46px, calc(50vh - 330px)); background: #1c1a18; border-left: 1px solid #000; border-right: 1px solid #000;
  box-shadow: inset 4px 0 0 rgba(255,255,255,.05), inset -4px 0 0 rgba(0,0,0,.35); overflow: hidden; display: grid; justify-items: center; }
.gate-strap span { writing-mode: vertical-rl; font: 600 10px/30px "IBM Plex Mono", monospace; letter-spacing: .32em; text-transform: uppercase; color: #f2c230; white-space: nowrap; transform: translateY(-40%); }
.gate-clip { width: 34px; height: 30px; margin-top: -2px; position: relative; z-index: 2;
  background: linear-gradient(90deg, #6d6a64, #d8d4cb 35%, #8f8b84 55%, #e8e4dc 75%, #75716a); border-radius: 4px 4px 6px 6px; box-shadow: 0 2px 3px rgba(0,0,0,.6); }
.gate-clip i { position: absolute; left: 50%; bottom: -14px; width: 12px; height: 20px; margin-left: -6px; border: 3px solid #b9b5ac; border-top: 0; border-radius: 0 0 8px 8px; }
/* the pass: paper under a laminate (the sheen follows the swing), a punched slot, rounded corners */
.pass { position: relative; width: 100%; margin-top: 4px; padding: 30px 22px 18px; color: var(--ink); text-align: left;
  background: linear-gradient(115deg, rgba(255,255,255,0) calc(var(--sheen) - 18%), rgba(255,255,255,.34) var(--sheen), rgba(255,255,255,0) calc(var(--sheen) + 14%)), var(--sheet);
  border-radius: 14px; box-shadow: 0 0 0 1px rgba(0,0,0,.4), 0 1px 0 rgba(255,255,255,.6) inset, 0 26px 50px rgba(0,0,0,.55), 0 4px 10px rgba(0,0,0,.4); }
.pass::after { content: ""; position: absolute; inset: 6px; border: 1.5px solid var(--ink); border-radius: 9px; pointer-events: none; }
.pass-slot { position: absolute; top: 11px; left: 50%; width: 46px; height: 9px; margin-left: -23px; border-radius: 5px; background: #2a2724; box-shadow: inset 0 1px 2px #000; }
.pass-top { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 4px 0 8px; border-bottom: 2px solid var(--ink); }
.pass-co { font: 400 21px/1 "Anton", Impact, sans-serif; text-transform: uppercase; letter-spacing: .01em; }
.pass-no, .pass-k, .pass-facts dt, .pass-status { font: 600 10px/1.2 "IBM Plex Mono", monospace; letter-spacing: .16em; text-transform: uppercase; }
.pass-no b { font-weight: 600; }
.pass-h { margin: 12px 0 0; font: 400 clamp(74px, 21vw, 96px)/.86 "Anton", Impact, sans-serif; text-transform: uppercase; letter-spacing: -.005em; }
.pass-sub { margin: 8px 0 14px; font: 500 14px/1.35 Archivo, Arial, sans-serif; max-width: 21ch; }
.pass-field { display: block; padding: 8px 0 0; border-top: 1px solid rgba(18,17,16,.35); }
.pass-field input { display: block; width: 100%; margin: 2px 0 0; padding: 2px 0 4px; border: 0; border-bottom: 1.5px solid var(--ink); border-radius: 0; background: transparent;
  font: 700 30px/1.1 Caveat, "Comic Sans MS", cursive; color: #1d2c4a; outline: none; }
.pass-field input::placeholder { color: rgba(29,44,74,.38); }
.pass-field input:focus { border-bottom-color: #1d2c4a; background: rgba(29,44,74,.05); }
.pass-facts { display: grid; grid-template-columns: 1fr 1fr; gap: 9px 14px; margin: 13px 0 12px; }
.pass-facts div { min-width: 0; }
.pass-facts dt { opacity: .6; }
.pass-facts dd { margin: 3px 0 0; font: 600 14px/1.2 Archivo, Arial, sans-serif; }
.pass-foot { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 10px 0 12px; border-top: 1px solid rgba(18,17,16,.35); }
.pass-code { width: 46%; height: 34px; fill: var(--ink); flex: none; }
.pass-snd { display: flex; align-items: center; gap: 8px; cursor: pointer; font: 500 12px/1.25 Archivo, Arial, sans-serif; }
.pass-snd b { display: block; font: 600 10px/1.3 "IBM Plex Mono", monospace; letter-spacing: .16em; text-transform: uppercase; }
.pass-snd input { appearance: none; -webkit-appearance: none; flex: none; width: 20px; height: 20px; margin: 0; border: 2px solid var(--ink); border-radius: 3px; display: grid; place-items: center; cursor: pointer; background: transparent; }
.pass-snd input:checked::after { content: "✓"; font: 700 20px/1 Caveat, cursive; color: #1d2c4a; transform: translate(1px, -2px) rotate(-6deg); }
.pass-snd input:focus-visible, .pass-go:focus-visible { outline: 2px solid #1d2c4a; outline-offset: 3px; }
.pass-go { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 12px; padding: 15px 18px 14px; cursor: pointer;
  background: var(--ink); color: var(--paper); border: 0; border-radius: 6px; font: 600 13px/1 "IBM Plex Mono", monospace; letter-spacing: .2em; text-transform: uppercase;
  transition: background .2s, transform .15s; }
.pass-go i { font-style: normal; font-size: 18px; letter-spacing: 0; transition: transform .2s; }
.pass-go:hover i { transform: translateX(4px); }
.pass-go:active { transform: translateY(1px); }
.gate:not(.ready) .pass-go { background: #3a3733; }
.pass-go.wait span::after { content: "…"; }
.pass-status { margin: 10px 0 0; text-align: center; opacity: .62; min-height: 1.2em; }
.gate.ready .pass-status { opacity: .85; }
/* two stamps: UNINVITED is already on it (in the corner); ADMITTED thunks down when you enter */
.pass-stamp { position: absolute; right: 24px; top: 170px; font: 400 22px/1 "Anton", Impact, sans-serif; text-transform: uppercase; letter-spacing: .08em;
  color: #c8261c; border: 3px solid #c8261c; padding: .16em .42em .12em; transform: rotate(-11deg); opacity: .78; mix-blend-mode: multiply; pointer-events: none;
  -webkit-mask: radial-gradient(circle at 30% 40%, #000 0 55%, rgba(0,0,0,.55) 75%), repeating-linear-gradient(73deg, #000 0 3px, rgba(0,0,0,.7) 3px 5px); mask-composite: intersect; }
.pass-stamp.pass-in { right: auto; left: 50%; top: 68%; font-size: 40px; border-width: 4px; opacity: 0; transform: translate(-50%, -50%) rotate(8deg) scale(1.9); }
.gate.stamped .pass-stamp.pass-in { opacity: .86; transform: translate(-50%, -50%) rotate(8deg) scale(1); transition: transform .16s cubic-bezier(.3,1.6,.6,1), opacity .08s; }
.gate-alt { position: fixed; left: 0; right: 0; bottom: max(14px, env(safe-area-inset-bottom)); display: flex; justify-content: center; gap: 22px; padding: 0 16px; }
.gate-alt a { font: 600 10.5px/1 "IBM Plex Mono", monospace; letter-spacing: .16em; text-transform: uppercase; color: var(--paper); opacity: .72; text-decoration: none; border-bottom: 1px solid rgba(233,228,214,.4); padding-bottom: 3px; }
.gate-alt a:hover { opacity: 1; }
.gate.open .gate-alt { opacity: 0; transition: opacity .3s; }
@media (max-height: 760px) { .gate-strap { height: 26px; } .pass-stamp:not(.pass-in) { top: 150px; } .pass-h { font-size: clamp(60px, 17vw, 76px); } .pass { padding-top: 26px; } .pass-sub { margin-bottom: 10px; } .pass-facts { margin: 10px 0; } }
@media (max-height: 640px) { .pass-sub, .pass-facts div:nth-child(n+3) { display: none; } .pass-stamp:not(.pass-in) { display: none; } }
@media (prefers-reduced-motion: reduce) { .gate-hang, .gate.open .gate-hang { transition: none; } }
