:root{--opening-red:#ee825e;--opening-green:#b1d27c;--opening-gold:#eac77a;--opening-ink:#091613;--opening-cream:#f3e9cf}
html,body{overflow:auto;min-height:100%;background:#091613}.campaign-home{color:var(--opening-cream)}#campaign-app{position:relative;min-height:100svh;overflow:hidden;background:#0b1c18}
.opening-art{position:absolute;inset:0 0 auto;height:min(100svh,960px);background:url('assets/opening-cast-photo.webp') center/cover no-repeat;filter:saturate(.9) brightness(.82);transform:scale(1.025);transition:filter .7s ease}
.opening-vignette{position:absolute;inset:0 0 auto;height:min(100svh,960px);background:linear-gradient(90deg,#07130ff5 0%,#07130fd6 34%,#07130f42 62%,#07130f24 100%),linear-gradient(0deg,#0b1c18 0%,transparent 45%,#07130f87 100%);pointer-events:none}
.opening-header{position:relative;inset:auto;left:auto;right:auto;top:auto;display:flex;padding:25px clamp(20px,4vw,68px);z-index:2}.discovery{display:flex;align-items:center;gap:10px;pointer-events:auto}.discovery>span{display:grid;place-items:center;width:43px;height:43px;border:1px solid #e7cd8266;border-radius:5px;font:900 16px Georgia;color:#e9cc7a;background:#071712b8;box-shadow:inset 0 0 14px #e4bd5630}.discovery>b{font:700 10px/1.05 ui-monospace,SFMono-Regular,monospace;letter-spacing:.18em;color:#dfd2ac}.opening-options{display:flex;margin-left:auto;gap:8px;pointer-events:auto}.opening-options button{width:39px;height:39px;border-radius:50%;border:1px solid #d7c88747;background:#0a1d17c7;color:#f2dfaa;font:700 12px ui-monospace,monospace;backdrop-filter:blur(10px)}
.opening-copy{position:relative;z-index:2;width:min(670px,89vw);min-height:calc(min(100svh,960px) - 95px);padding:clamp(80px,13vh,150px) 0 145px;margin-left:clamp(24px,7vw,116px);display:flex;flex-direction:column;align-items:flex-start;justify-content:center;text-shadow:0 3px 25px #00130d}
.opening-kicker,.collection-heading p{margin:0;color:var(--opening-gold);font:700 11px ui-monospace,SFMono-Regular,monospace;letter-spacing:.22em}.opening-copy h1{position:relative;margin:15px 0 21px;font:900 clamp(72px,11vw,145px)/.8 Georgia;letter-spacing:-.09em;filter:drop-shadow(0 8px 16px #0009)}.opening-copy h1>span:nth-child(odd){color:var(--opening-red)}.opening-copy h1>span:nth-child(even){color:var(--opening-green)}.opening-copy h1>b{position:absolute;left:100%;bottom:-.03em;margin-left:.18em;color:#f1cf67;font:900 .24em/1 ui-monospace,monospace;letter-spacing:-.04em;text-shadow:0 2px 8px #000}
.opening-pitch{max-width:585px;margin:0;color:#e4e8d8;font:500 clamp(16px,1.7vw,20px)/1.62 Georgia}.opening-actions{display:flex;align-items:center;gap:11px;flex-wrap:wrap;margin-top:30px}.opening-primary,.opening-secondary{min-height:50px;padding:0 20px;border-radius:6px;font-weight:800}.opening-primary{min-width:245px;display:flex;align-items:center;justify-content:space-between;gap:20px;border:1px solid #ffe3a3;border-bottom:3px solid #8b672f;color:#203023;background:linear-gradient(#f5dc9a,#dcb362);box-shadow:0 10px 35px #0007}.opening-primary b{font-size:13px}.opening-secondary{border:1px solid #d4c08755;background:#102820d9;color:#eadcae;backdrop-filter:blur(11px)}
.opening-language-choice{display:none;width:min(570px,90vw);gap:12px;margin-top:34px}.opening-language-choice a{flex:1;min-height:58px;padding:0 18px;display:flex;align-items:center;justify-content:space-between;gap:18px;border:1px solid #d9bd73;border-bottom:3px solid #745127;border-radius:7px;background:linear-gradient(145deg,#3d2518,#1b120d);box-shadow:0 13px 38px #000a,inset 0 0 0 1px #f3db9d18;color:#f4dfa9;font:800 14px/1.2 ui-monospace,SFMono-Regular,monospace;letter-spacing:.03em;text-shadow:0 2px 5px #000;transition:transform .16s,filter .16s,border-color .16s}.opening-language-choice a:hover{filter:brightness(1.16);border-color:#ffe0a0;transform:translateY(-2px)}.opening-language-choice a:active{transform:translateY(1px)}.opening-language-choice b{font-size:11px;color:#e8c36f}
.opening-progress{--opening-progress:0%;width:min(520px,80vw);height:18px;margin-top:21px;display:flex;align-items:center;gap:12px}.opening-progress:before{content:'';flex:1;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--opening-gold) var(--opening-progress),#d4c58b38 var(--opening-progress));box-shadow:0 0 16px #e5c56b42}.opening-progress i{display:none}.opening-progress span{font:10px ui-monospace,monospace;color:#dacc9f}.opening-now{min-height:20px;margin:9px 0 0;color:#f1d58f;font:700 11px ui-monospace,monospace;letter-spacing:.12em;text-transform:uppercase}
.crew-dossier{position:absolute;z-index:3;left:0;right:0;top:min(calc(100svh - 114px),846px);padding:0 clamp(20px,5vw,80px)}#opening-crew{max-width:1140px;margin:auto;display:grid;grid-template-columns:repeat(5,1fr);border:1px solid #d2c18135;border-radius:11px;overflow:hidden;background:#0b1e19d9;box-shadow:0 16px 55px #0008;backdrop-filter:blur(18px)}.dossier-animal{min-width:0;display:flex;align-items:center;gap:10px;padding:12px 15px;border-right:1px solid #d2c18125;transition:background .25s,transform .25s}.dossier-animal:last-child{border-right:0}.dossier-animal.active{background:#d4b66322;transform:translateY(-3px)}.dossier-animal .portrait{font-size:43px}.dossier-animal strong{display:block;font:700 14px Georgia}.dossier-animal small{display:block;margin-top:3px;color:#b9c8af;font:8px ui-monospace,monospace;letter-spacing:.08em;text-transform:uppercase}
#campaign-app[data-opening-beat=solo] .dossier-animal.active{background:#e7c77735;box-shadow:inset 0 -3px #efd484}#campaign-app[data-opening-beat=call] .dossier-animal,#campaign-app[data-opening-beat=chorus] .dossier-animal,#campaign-app[data-opening-beat=finale] .dossier-animal,#campaign-app[data-opening-beat=no-return] .dossier-animal{background:#d4b6631c}#campaign-app[data-opening-beat=chorus] .opening-copy h1{animation:opening-chorus .72s cubic-bezier(.2,.75,.25,1)}#campaign-app[data-opening-beat=chorus] .opening-art{filter:saturate(1.02) brightness(.9)}#campaign-app[data-opening-beat=drumroll] .opening-copy h1 b{animation:opening-drumroll .28s ease-in-out infinite alternate}#campaign-app[data-opening-beat=countdown] .opening-now{font-size:clamp(24px,4vw,42px);letter-spacing:.04em;color:#ffe09a}#campaign-app[data-opening-beat=whisper] .opening-now{color:#bac9bb;font-weight:500}#campaign-app[data-opening-beat=whisper] .opening-art{filter:saturate(.72) brightness(.64)}#campaign-app[data-opening-beat=finale] .opening-art{filter:saturate(1.08) brightness(1)}#campaign-app[data-opening-beat=finale] .opening-copy h1 b{animation:opening-finale .9s cubic-bezier(.13,.8,.24,1);filter:drop-shadow(0 0 18px #f3ce72)}@keyframes opening-chorus{0%{transform:scale(.92)}45%{transform:scale(1.035)}100%{transform:scale(1)}}@keyframes opening-drumroll{from{transform:translateX(-2px)}to{transform:translateX(2px)}}@keyframes opening-finale{0%{transform:scale(.6);opacity:.25}55%{transform:scale(1.35)}100%{transform:scale(1);opacity:1}}
.chapter-collection{position:relative;z-index:2;padding:110px clamp(20px,6vw,100px) 85px;background:radial-gradient(circle at 77% 0,#35574452,transparent 37%),linear-gradient(#0b1c18,#07120f)}.collection-heading{max-width:1180px;margin:0 auto 28px;display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.collection-heading h2{margin:8px 0 0;font:400 clamp(30px,4vw,50px) Georgia}.collection-heading>strong{color:#d9c688;font:700 12px ui-monospace,monospace;letter-spacing:.12em}.chapter-list{max-width:1180px;margin:auto;display:grid;grid-template-columns:repeat(5,1fr);gap:10px}.chapter-card{position:relative;min-height:210px;padding:22px 18px 18px;border:1px solid #b7c79b2e;border-radius:8px;background:linear-gradient(145deg,#17332a,#0d241d);overflow:hidden;transition:transform .2s,border-color .2s,background .2s}.chapter-card:hover{transform:translateY(-4px);border-color:#e4cd855e;background:linear-gradient(145deg,#1d4034,#102a22)}.chapter-card .number{display:block;margin-bottom:32px;color:#e4c576;font:700 12px ui-monospace,monospace}.chapter-card h3{margin:0 0 6px;font:400 23px Georgia}.chapter-card p{margin:0;color:#afc0af;font-size:13px;line-height:1.5}.chapter-card small{position:absolute;left:18px;bottom:16px;color:#d8c990;font:700 9px ui-monospace,monospace;letter-spacing:.13em}.chapter-card.complete:after{content:'✓';position:absolute;right:14px;top:13px;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:#b8cf7d;color:#163023;font-weight:900}.chapter-card.current{box-shadow:inset 0 -3px #e8c977;border-color:#e8c97755}
.campaign-home footer{position:relative;z-index:2;display:flex;justify-content:space-between;gap:20px;padding:20px clamp(20px,6vw,100px);border-top:1px solid #b9c79222;background:#06100d;color:#8fa496;font:10px ui-monospace,monospace;letter-spacing:.08em}.campaign-home footer a{color:#ddca91;text-decoration:underline;text-underline-offset:4px}
.campaign-leaving #campaign-app,.campaign-leaving #app{animation:campaign-fade .25s ease both}@keyframes campaign-fade{to{opacity:0;filter:blur(4px);transform:scale(1.006)}}
@media(max-width:900px){.chapter-list{grid-template-columns:repeat(2,1fr)}.chapter-card:last-child{grid-column:span 2}.crew-dossier{position:relative;top:auto;margin-top:-105px}.opening-copy{padding-bottom:145px}#opening-crew{grid-template-columns:repeat(5,minmax(105px,1fr));overflow-x:auto}.dossier-animal{min-width:128px}.chapter-collection{padding-top:70px}}
@media(max-width:600px){.opening-art,.opening-vignette{height:760px}.opening-art{background-position:66% center}.opening-vignette{background:linear-gradient(90deg,#07130fe8 0%,#07130fb8 64%,#07130f69),linear-gradient(0deg,#0b1c18 0%,transparent 50%)}.opening-header{padding:15px}.opening-copy{min-height:650px;margin-left:22px;padding:70px 0 100px;width:calc(100% - 44px);justify-content:flex-end}.opening-copy h1{font-size:67px}.opening-pitch{font-size:15px;max-width:94%}.opening-actions{width:100%;margin-top:22px}.opening-primary,.opening-secondary{width:100%}.crew-dossier{margin-top:-30px;padding:0 14px}.chapter-collection{padding:55px 14px}.chapter-list{grid-template-columns:1fr}.chapter-card,.chapter-card:last-child{grid-column:auto;min-height:160px}.chapter-card .number{margin-bottom:20px}.collection-heading{align-items:flex-start;flex-direction:column}.campaign-home footer{flex-direction:column}.discovery>b{display:none}}
@media(prefers-reduced-motion:reduce){.opening-art{transform:none}.dossier-animal.active{transform:none}}

/* A new audience enters through a closed playhouse curtain. Nothing from the
   cast portrait or chapter collection is revealed before the overture does. */
#campaign-app[data-opening-entry=first] .opening-art{height:100svh;background:linear-gradient(#0203027a,#020302b8),url('assets/opening-stage-curtain.webp') center/cover no-repeat;filter:saturate(.72) brightness(.48);transform:none}
#campaign-app[data-opening-entry=first] .opening-vignette{height:100svh;background:radial-gradient(ellipse at 50% 44%,#5b321d1f 0,transparent 38%),linear-gradient(#0003,#020302b8)}
body:not(.opening-staging) #campaign-app[data-opening-entry=first]{height:100svh;min-height:100svh;background:#020302}
body:not(.opening-staging) #campaign-app[data-opening-entry=first] :is(.opening-header,.opening-kicker,.opening-pitch,.opening-progress,.opening-now,.crew-dossier,.chapter-collection,footer){display:none}
body:not(.opening-staging) #campaign-app[data-opening-entry=first] .opening-copy{width:100%;height:100svh;min-height:100svh;margin:0;padding:max(36px,env(safe-area-inset-top)) max(22px,env(safe-area-inset-right)) max(36px,env(safe-area-inset-bottom)) max(22px,env(safe-area-inset-left));align-items:center;justify-content:center;text-align:center;text-shadow:0 6px 30px #000}
body:not(.opening-staging) #campaign-app[data-opening-entry=first] .opening-copy h1{margin:0;font-size:clamp(76px,15vw,176px)}
#campaign-app[data-opening-entry=first][data-language-gate=on] .opening-actions{display:none}
#campaign-app[data-opening-entry=first][data-language-gate=on] .opening-language-choice{display:flex}
#campaign-app[data-opening-entry=returning] .opening-language-choice,.opening-staging .opening-language-choice{display:none!important}
@media(max-width:600px){#campaign-app[data-opening-entry=first] .opening-art{background-position:center}.opening-language-choice{width:min(330px,86vw);flex-direction:column;margin-top:30px}.opening-language-choice a{width:100%;min-height:56px}body:not(.opening-staging) #campaign-app[data-opening-entry=first] .opening-copy h1{font-size:clamp(68px,24vw,108px)}}

/* The opening becomes a photographed miniature theatre only after Play. The
   ordinary campaign page remains underneath, so chapter links never depend on
   the performance layer. */
.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.opening-stage{position:fixed;inset:0;z-index:20;display:grid;place-items:center;visibility:hidden;opacity:0;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,#17211b 0,#050806 62%,#010201 100%);transition:opacity .5s ease,visibility 0s linear .5s;isolation:isolate}.opening-stage:before{content:'';position:fixed;z-index:0;inset:0;background:#000;opacity:0;pointer-events:none;transition:opacity .34s ease}
.opening-staging{overflow:hidden}.opening-staging .opening-stage{visibility:visible;opacity:1;transition:opacity .45s ease,visibility 0s}
.stage-house{position:relative;z-index:1;width:min(95vw,calc(82svh * 1.7778));padding-top:clamp(25px,4.5vh,54px);filter:drop-shadow(0 25px 50px #000)}
.stage-billing{position:absolute;z-index:8;left:50%;top:0;transform:translate(-50%,-12%);min-width:220px;padding:8px 28px 7px;border:1px solid #b98b45;border-radius:50% 50% 8px 8px;background:linear-gradient(#382918,#110d08);box-shadow:inset 0 0 0 3px #080604,0 4px 18px #000;text-align:center;color:#eac77a;opacity:1;transition:opacity .26s ease}
.stage-billing span,.stage-billing b{display:block;font-family:ui-monospace,SFMono-Regular,monospace}.stage-billing span{font-size:10px;letter-spacing:.23em}.stage-billing b{margin-top:3px;font-size:8px;letter-spacing:.32em;color:#f3e9cf}
.stage-frame{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;border:clamp(7px,1vw,15px) solid #17100a;border-radius:48% 48% 4px 4px/12% 12% 4px 4px;background:#020302;box-shadow:inset 0 0 0 2px #9b773f,inset 0 0 0 5px #322312,0 0 0 1px #c19c5b,0 20px 70px #000;transition:border-color .24s ease,box-shadow .24s ease}
.stage-scene,.stage-cutout{position:absolute;inset:0;background:url('assets/opening-cast-photo.webp') center/cover no-repeat}.stage-scene{z-index:0;filter:saturate(.3) brightness(0);transform:scale(1.015);opacity:1;transition:filter .7s ease,transform 9s ease,opacity .32s ease}
.stage-scene-wash{position:absolute;z-index:1;inset:0;background:radial-gradient(ellipse at var(--stage-spot-x,70%) 58%,transparent 0 12%,#020604ab 31%,#010201d7 70%);opacity:.4;transition:opacity .5s ease,background-position .5s ease}
.stage-tower-spot{position:absolute;z-index:2;inset:0;background:url('assets/opening-cast-photo.webp') center/cover no-repeat;clip-path:ellipse(8% 15% at 56% 18%);filter:saturate(.92) brightness(1.18) drop-shadow(0 0 13px #edc978);opacity:0;transition:opacity .22s ease}
#stage-spots{position:absolute;z-index:2;inset:0;opacity:1;transition:opacity .28s ease}.stage-spot{position:absolute;inset:0;opacity:0;transition:opacity .18s ease}.stage-spot.active{opacity:1}.stage-cutout{clip-path:ellipse(var(--spot-rx) var(--spot-ry) at var(--spot-x) var(--spot-y));filter:saturate(1.08) brightness(1.22) drop-shadow(0 0 9px #f6d894)}.stage-beam{position:absolute;left:calc(var(--spot-x) - 13%);top:-4%;width:26%;height:76%;clip-path:polygon(43% 0,57% 0,100% 100%,0 100%);background:linear-gradient(90deg,transparent,#ffe8a128 50%,transparent);filter:blur(5px)}
.stage-rhythm{position:absolute;z-index:3;inset:0;opacity:0;pointer-events:none;mix-blend-mode:screen}
.stage-lightning{position:absolute;z-index:4;inset:0;background:#dcecff;box-shadow:inset 0 0 80px #fff,0 0 45px #a8c8ff;opacity:0;pointer-events:none}
.stage-curtain{position:absolute;z-index:6;top:0;bottom:0;width:50%;background-image:url('assets/opening-stage-curtain.webp');background-repeat:no-repeat;background-size:200% 100%;opacity:1;transition:transform 1.48s cubic-bezier(.64,.02,.25,1),opacity .3s ease;will-change:transform,opacity}.stage-curtain-left{left:0;background-position:left top;box-shadow:12px 0 24px #0008}.stage-curtain-right{right:0;background-position:right top;box-shadow:-12px 0 24px #0008}#campaign-app[data-opening-curtain=open] .stage-curtain-left{transform:translateX(-88%)}#campaign-app[data-opening-curtain=open] .stage-curtain-right{transform:translateX(88%)}
.stage-footlights{position:absolute;z-index:7;left:3%;right:3%;bottom:-1.2%;height:6%;background:radial-gradient(circle at 4% 55%,#fff7c9 0 5%,#edbf56 6% 12%,transparent 14%) 0 0/7.7% 100% repeat-x;filter:drop-shadow(0 -5px 8px #ffd87b9c);opacity:.38;transition:opacity .35s ease}
.stage-show-title{position:absolute;z-index:5;left:50%;top:19%;transform:translate(-50%,-60%) scale(.72);opacity:0;white-space:nowrap;font:900 clamp(48px,7.5vw,118px)/.8 Georgia;letter-spacing:-.09em;filter:drop-shadow(0 8px 16px #000);transition:opacity .25s ease,transform .55s cubic-bezier(.2,.8,.2,1)}.stage-show-title>span:nth-child(odd){color:var(--opening-red)}.stage-show-title>span:nth-child(even){color:var(--opening-green)}.stage-show-title>b{display:inline-block;margin-left:.18em;color:#f1cf67;font:900 .24em/1 ui-monospace,monospace;letter-spacing:-.04em}
.stage-projection{position:absolute;z-index:8;inset:0;display:grid;place-items:center;padding:8%;color:#f3e4b6;text-align:center;text-shadow:0 3px 18px #000;font:900 clamp(42px,8vw,124px)/1 Georgia;letter-spacing:.02em;opacity:0;transition:opacity .18s ease}.stage-projection.cue-enter{animation:stage-projection-enter .24s cubic-bezier(.18,.8,.24,1) both}
.opening-staging .opening-kicker,.opening-staging .opening-pitch,.opening-staging .crew-dossier,.opening-staging .chapter-collection,.opening-staging footer{opacity:0;visibility:hidden}.opening-staging .opening-copy>h1{position:fixed!important;width:1px!important;height:1px!important;margin:-1px!important;overflow:hidden!important;clip-path:inset(50%)!important;white-space:nowrap!important}.opening-staging .opening-header{position:fixed;z-index:32}.opening-staging .opening-header .discovery{visibility:hidden;pointer-events:none}.opening-staging .opening-options button{width:44px;height:44px;background:#090d0bd9;border-color:#caaa6366}.opening-staging .opening-copy{position:static;min-height:0;padding:0;margin:0}.opening-staging .opening-actions{position:fixed;z-index:33;right:max(20px,env(safe-area-inset-right));top:max(82px,calc(env(safe-area-inset-top) + 66px));margin:0}.opening-staging .opening-primary,.opening-staging #opening-replay{display:none!important}.opening-staging #opening-skip{min-height:44px;border-color:#c8a75f66;background:#090d0bd9;color:#ead9a6}.opening-staging .opening-progress{position:fixed;z-index:31;left:50%;bottom:max(58px,calc(env(safe-area-inset-bottom) + 46px));transform:translateX(-50%);width:min(520px,70vw);margin:0}.opening-staging .opening-now{position:fixed;z-index:31;left:50%;bottom:max(90px,calc(env(safe-area-inset-bottom) + 77px));transform:translateX(-50%);width:min(760px,85vw);min-height:22px;margin:0;text-align:center;color:#f6dea0;font-size:14px;line-height:1.45;letter-spacing:.12em;text-shadow:0 2px 12px #000}

#campaign-app[data-opening-beat=prologue] .stage-scene,#campaign-app[data-opening-beat=story] .stage-scene,#campaign-app[data-opening-beat=solo] .stage-scene,#campaign-app[data-opening-beat=problem] .stage-scene{filter:saturate(.3) brightness(0)}
#campaign-app[data-opening-beat=prologue] .stage-projection,#campaign-app[data-opening-beat=story] .stage-projection{opacity:1;font-size:clamp(28px,5vw,76px);padding-inline:13%;letter-spacing:.1em;text-transform:uppercase}
#campaign-app[data-opening-beat=prologue][data-opening-accent=year] .stage-projection{color:#e8d5a2;font-size:clamp(24px,4vw,60px);letter-spacing:.18em}
#campaign-app[data-opening-beat=story][data-opening-accent=five] .stage-projection,#campaign-app[data-opening-beat=story][data-opening-accent=escaped] .stage-projection{color:#f3e9cf}
#campaign-app[data-opening-beat=story][data-opening-accent=maze] .stage-projection{color:#d8d0ba;letter-spacing:.16em}
#campaign-app[data-opening-beat=story][data-opening-accent=mad] .stage-projection{color:#ee825e;font-size:clamp(40px,7vw,108px);letter-spacing:.24em}
#campaign-app[data-opening-beat=story][data-opening-accent=doctor] .stage-projection{color:#eac77a;font-size:clamp(44px,7.5vw,116px);letter-spacing:.2em}
#campaign-app[data-opening-beat=story][data-opening-accent=lost] .stage-projection{color:#abb8ae;font-size:clamp(22px,3.6vw,54px);font-style:italic;letter-spacing:.08em}
#campaign-app[data-opening-beat=story][data-opening-accent=needed] .stage-projection{color:#f4dc9c;font-size:clamp(26px,4.5vw,68px);letter-spacing:.12em}
#campaign-app[data-opening-beat=story][data-opening-accent=drum] .stage-projection,#campaign-app[data-opening-beat=story][data-opening-accent=thunder] .stage-projection{opacity:0}
#campaign-app[data-opening-beat=solo] .stage-scene-wash,#campaign-app[data-opening-beat=verse] .stage-scene-wash{opacity:.75}
#campaign-app[data-opening-beat=problem] .stage-projection,#campaign-app[data-opening-beat=call-build] .stage-projection,#campaign-app[data-opening-beat=call] .stage-projection{opacity:1}
#campaign-app[data-opening-beat=problem] .stage-projection,#campaign-app[data-opening-beat=call-build] .stage-projection{font-size:clamp(25px,4.4vw,66px);letter-spacing:.12em}
#campaign-app[data-opening-beat=call-build] .stage-scene{filter:saturate(.3) brightness(0)}
#campaign-app[data-opening-beat=call] .stage-projection{place-items:center start;padding-right:55%;font-size:clamp(36px,6vw,92px);color:#f4dc9c;letter-spacing:.08em}
#campaign-app[data-opening-beat=call] .stage-scene{filter:saturate(1.02) brightness(.86);transform:scale(1)}
#campaign-app[data-opening-beat=drumroll] .stage-scene{filter:saturate(.86) brightness(.58)}
#campaign-app[data-opening-beat=verse] .stage-scene{filter:saturate(.65) brightness(.16)}
#campaign-app[data-opening-beat=chorus] .stage-scene{filter:saturate(.82) brightness(.42);transform:scale(1)}
#campaign-app[data-opening-beat=tower] .stage-scene{filter:saturate(.58) brightness(.13)}
#campaign-app[data-opening-beat=tower] .stage-tower-spot{opacity:1}
#campaign-app[data-opening-beat=blackout] .stage-scene{filter:saturate(.25) brightness(.035)}
#campaign-app[data-opening-beat=fuse] .stage-scene,#campaign-app[data-opening-beat=countdown] .stage-scene,#campaign-app[data-opening-beat=aside] .stage-scene{filter:saturate(.42) brightness(.09)}
#campaign-app[data-opening-beat=no-return] .stage-scene{filter:saturate(.9) brightness(.55)}
#campaign-app[data-opening-beat=credits] .stage-scene{filter:saturate(.7) brightness(.38)}
#campaign-app[data-opening-beat=credits] .stage-spot.active{opacity:.24}
#campaign-app[data-opening-beat=audience-credit] .stage-scene{filter:saturate(.45) brightness(.12)}
#campaign-app[data-opening-beat=audience-punchline] .stage-scene{filter:saturate(.2) brightness(.025);transition-duration:.12s}
#campaign-app[data-opening-beat=audience-punchline] .stage-footlights{opacity:0;filter:none;transition-duration:.1s}
#campaign-app[data-opening-beat=villain-credit] .stage-scene,#campaign-app[data-opening-beat=next-week] .stage-scene,#campaign-app[data-opening-beat=teaser] .stage-scene{filter:saturate(.5) brightness(.14)}
#campaign-app[data-opening-beat=villain-credit] .stage-tower-spot{opacity:.36;filter:saturate(.55) brightness(.7) drop-shadow(0 0 8px #b98b45)}
#campaign-app[data-opening-beat=finale] .stage-scene,#campaign-app[data-opening-beat=reverb] .stage-scene{filter:saturate(1.04) brightness(.9);transform:scale(1)}
#campaign-app[data-opening-beat=call] .stage-footlights,#campaign-app[data-opening-beat=chorus] .stage-footlights,#campaign-app[data-opening-beat=finale] .stage-footlights{opacity:1}
#campaign-app[data-opening-beat=chorus] .stage-show-title,#campaign-app[data-opening-beat=finale] .stage-show-title,#campaign-app[data-opening-beat=reverb] .stage-show-title{opacity:1;transform:translate(-50%,-50%) scale(1)}
#campaign-app[data-opening-beat=chorus][data-opening-accent=title] .stage-show-title{animation:stage-title-hit .5s cubic-bezier(.16,.82,.24,1)}
#campaign-app[data-opening-beat=chorus][data-opening-accent=title] .stage-footlights{animation:stage-chorus-flash .52s ease-out}
#campaign-app[data-opening-beat=chorus] .stage-show-title>span{animation:stage-title-cycle 1.2s steps(1,end) infinite}
#campaign-app[data-opening-beat=chorus] .stage-show-title>span:nth-child(2){animation-delay:-.18s}#campaign-app[data-opening-beat=chorus] .stage-show-title>span:nth-child(3){animation-delay:-.36s}#campaign-app[data-opening-beat=chorus] .stage-show-title>span:nth-child(4){animation-delay:-.54s}#campaign-app[data-opening-beat=chorus] .stage-show-title>span:nth-child(5){animation-delay:-.72s}
#campaign-app[data-opening-beat=tower] .stage-projection,#campaign-app[data-opening-beat=fuse] .stage-projection,#campaign-app[data-opening-beat=countdown] .stage-projection,#campaign-app[data-opening-beat=credits] .stage-projection,#campaign-app[data-opening-beat=audience-credit] .stage-projection,#campaign-app[data-opening-beat=audience-punchline] .stage-projection,#campaign-app[data-opening-beat=villain-credit] .stage-projection,#campaign-app[data-opening-beat=next-week] .stage-projection,#campaign-app[data-opening-beat=teaser] .stage-projection,#campaign-app[data-opening-beat=finale] .stage-projection,#campaign-app[data-opening-beat=reverb] .stage-projection{opacity:1}
#campaign-app[data-opening-beat=tower] .stage-projection,#campaign-app[data-opening-beat=fuse] .stage-projection,#campaign-app[data-opening-beat=credits] .stage-projection,#campaign-app[data-opening-beat=audience-credit] .stage-projection,#campaign-app[data-opening-beat=villain-credit] .stage-projection,#campaign-app[data-opening-beat=next-week] .stage-projection,#campaign-app[data-opening-beat=teaser] .stage-projection{font-size:clamp(17px,3vw,44px);padding-inline:16%}
#campaign-app[data-opening-beat=audience-punchline] .stage-projection{font-size:clamp(48px,9vw,132px);letter-spacing:.12em}
#campaign-app[data-opening-beat=finale] .stage-projection,#campaign-app[data-opening-beat=reverb] .stage-projection{color:transparent;text-shadow:none}
#campaign-app[data-opening-beat=drumroll] .stage-footlights{opacity:.9;animation:stage-footlight-roll .8s linear infinite}
/* The blackout is a scored interval rather than one cue: it begins when the
   narrator drops the lights and holds through the fuse, count and drumroll. */
#campaign-app[data-opening-blackout=on] .opening-stage{background:#000}
#campaign-app[data-opening-blackout=on] .opening-stage:before{opacity:1;transition-duration:.12s}
#campaign-app[data-opening-blackout=on] .stage-billing{opacity:0;transition-duration:.12s}
#campaign-app[data-opening-blackout=on] .stage-frame{border-color:#000;background:#000;box-shadow:none;transition-duration:.12s}
#campaign-app[data-opening-blackout=on] :is(.stage-scene,.stage-scene-wash,.stage-tower-spot,#stage-spots,.stage-show-title,.stage-curtain,.stage-footlights,.stage-rhythm,.stage-lightning){opacity:0!important;animation:none!important;transition:opacity .12s linear}
#campaign-app[data-opening-blackout=on] .stage-projection{opacity:1;color:#eee7d7;text-shadow:0 0 18px #d6c18a42,0 3px 18px #000;font-size:clamp(24px,4.5vw,68px);padding-inline:15%}
#campaign-app[data-opening-blackout=on][data-opening-beat=blackout] .stage-projection{font-size:clamp(21px,3.8vw,56px);letter-spacing:.12em;color:#c9c9c4}
#campaign-app[data-opening-blackout=on][data-opening-beat=fuse] .stage-projection{font-size:clamp(24px,4.5vw,68px);letter-spacing:.1em;color:#eac77a}
#campaign-app[data-opening-blackout=on][data-opening-beat=countdown] .stage-projection{font-size:clamp(96px,22vw,310px);line-height:.7;letter-spacing:0;color:#f3e9cf;text-shadow:0 0 24px #eac77a78}
#campaign-app[data-opening-blackout=on][data-opening-beat=aside] .stage-projection,#campaign-app[data-opening-blackout=on][data-opening-beat=drumroll] .stage-projection{font-size:clamp(18px,3vw,44px);letter-spacing:.09em;color:#b9b5a9}
#campaign-app[data-opening-blackout=on] .opening-now{opacity:0}
#campaign-app[data-opening-blackout=on] .opening-progress{opacity:.22}
#campaign-app[data-opening-blackout=on] .opening-options button,#campaign-app[data-opening-blackout=on] #opening-skip{border-color:#302b22;background:#000;color:#9c9277;box-shadow:none}
#campaign-app.opening-percussion-hit[data-opening-percussion=drumbeat][data-opening-percussion-section=prologue] .stage-rhythm{background:radial-gradient(ellipse at 50% 105%,#efc875 0,#9d563b59 31%,transparent 65%);animation:stage-rhythm-round .24s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=drumbeat][data-opening-percussion-section=prechorus] .stage-rhythm{background:linear-gradient(90deg,transparent 9%,#ffe5a391 50%,transparent 91%);opacity:var(--stage-beat-strength,.12);transition:opacity .07s linear}
#campaign-app.opening-percussion-hit[data-opening-percussion=drumbeat][data-opening-percussion-section=prechorus] .stage-footlights{opacity:calc(.4 + var(--stage-beat-strength,.12));transition:opacity .07s linear}
#campaign-app.opening-percussion-hit[data-opening-percussion=thunder] .stage-lightning{animation:stage-thunder .4s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=thunder] .stage-rhythm{background:radial-gradient(ellipse at 56% 20%,#e8f2ff80 0,transparent 50%);animation:stage-rhythm-round .4s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=orchestra-kick] .stage-rhythm{background:radial-gradient(ellipse at 50% 65%,#fff1b8 0,#e8b95d88 30%,transparent 70%);animation:stage-rhythm-round .34s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=orchestra-kick-low] .stage-rhythm{background:radial-gradient(ellipse at 50% 78%,#e9c77f 0,#bd754c66 34%,transparent 72%);animation:stage-rhythm-round .3s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=timpani] .stage-rhythm{background:radial-gradient(ellipse at 50% 108%,#f0bf63 0,#9f4e355e 42%,transparent 76%);animation:stage-rhythm-round .48s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=drumroll] .stage-rhythm{background:linear-gradient(90deg,transparent 7%,#d68d4d42 24%,#ffe5a374 50%,#d68d4d42 76%,transparent 93%);animation:stage-rhythm-roll-on .24s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=bass-kick] .stage-rhythm{background:radial-gradient(ellipse at 50% 108%,#efc86e 0,#c5764748 25%,transparent 57%);animation:stage-rhythm-round .14s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=bass-drum] .stage-rhythm{background:radial-gradient(ellipse at 50% 110%,#efa557 0,#9a3e345d 35%,transparent 67%);animation:stage-rhythm-round .14s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=snare] .stage-rhythm{background:linear-gradient(108deg,transparent 31%,#e8f0df66 48%,#fff4cf80 51%,transparent 69%);animation:stage-rhythm-snap .11s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=orchestra-hit] .stage-rhythm{background:radial-gradient(ellipse at 50% 58%,#fff7d0 0,#efcb7494 29%,#b45e4159 52%,transparent 76%);animation:stage-rhythm-round .5s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=orchestra-kick] .stage-footlights,#campaign-app.opening-percussion-hit[data-opening-percussion=orchestra-kick-low] .stage-footlights,#campaign-app.opening-percussion-hit[data-opening-percussion=timpani] .stage-footlights,#campaign-app.opening-percussion-hit[data-opening-percussion=orchestra-hit] .stage-footlights{animation:stage-percussion-footlights .32s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=drumbeat][data-opening-percussion-section=prologue] .stage-footlights,#campaign-app.opening-percussion-hit[data-opening-percussion=drumroll] .stage-footlights{animation:stage-percussion-footlights .24s ease-out}
#campaign-app.opening-percussion-hit[data-opening-percussion=bass-kick] .stage-footlights,#campaign-app.opening-percussion-hit[data-opening-percussion=bass-drum] .stage-footlights{animation:stage-percussion-footlights .14s ease-out}
#campaign-app[data-opening-beat=reverb] .stage-curtain-left,.opening-ending .stage-curtain-left{transform:translateX(0);transition-delay:0s;transition-duration:2.25s}#campaign-app[data-opening-beat=reverb] .stage-curtain-right,.opening-ending .stage-curtain-right{transform:translateX(0);transition-delay:0s;transition-duration:2.25s}.opening-paused .stage-footlights,.opening-paused .stage-show-title>span,.opening-paused .stage-rhythm,.opening-paused .stage-lightning{animation-play-state:paused!important}
@keyframes stage-footlight-roll{to{background-position:7.7% 0}}@keyframes stage-title-cycle{0%,49.99%{color:var(--opening-red);text-shadow:0 0 10px #ee825e99}50%,100%{color:var(--opening-green);text-shadow:0 0 10px #b1d27c99}}@keyframes stage-title-hit{0%{transform:translate(-50%,-50%) scale(.78);filter:drop-shadow(0 0 5px #000)}58%{transform:translate(-50%,-50%) scale(1.09);filter:drop-shadow(0 0 22px #efd777)}100%{transform:translate(-50%,-50%) scale(1);filter:drop-shadow(0 8px 16px #000)}}@keyframes stage-chorus-flash{0%{opacity:.4;filter:drop-shadow(0 -3px 3px #ffd87b55)}38%{opacity:1;filter:drop-shadow(0 -9px 15px #fff0b8)}100%{opacity:1;filter:drop-shadow(0 -5px 8px #ffd87b9c)}}@keyframes stage-projection-enter{0%{opacity:0;transform:scale(.94);filter:blur(3px)}100%{opacity:1;transform:scale(1);filter:none}}@keyframes stage-thunder{0%,100%{opacity:0}20%{opacity:.28}58%{opacity:.07}}@keyframes stage-rhythm-round{0%,100%{opacity:0}24%{opacity:var(--stage-beat-strength,.36)}65%{opacity:.06}}@keyframes stage-rhythm-snap{0%,100%{opacity:0}16%{opacity:var(--stage-beat-strength,.2)}58%{opacity:.04}}@keyframes stage-rhythm-roll-on{0%,100%{opacity:0}35%{opacity:var(--stage-beat-strength,.38)}72%{opacity:.08}}@keyframes stage-percussion-footlights{0%,100%{opacity:.38}25%{opacity:calc(.42 + var(--stage-beat-strength,.36));filter:drop-shadow(0 -7px 12px #ffe4a0)}}

.chapter-fallback{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;max-width:1180px;margin:auto}.chapter-fallback a{padding:18px;border:1px solid #b7c79b2e;border-radius:8px;background:#122b23;color:#e7d69e}.chapter-collection{content-visibility:auto;contain-intrinsic-size:700px}

@media(max-width:600px){.stage-house{width:96vw;padding-top:39px}.stage-billing{min-width:180px;padding-inline:18px}.stage-frame{border-width:7px}.opening-staging .opening-header{left:auto;right:max(12px,env(safe-area-inset-right));top:max(10px,env(safe-area-inset-top));padding:0}.opening-staging .opening-options{gap:7px}.opening-staging .opening-actions{left:max(12px,env(safe-area-inset-left));right:auto;top:max(10px,env(safe-area-inset-top))}.opening-staging #opening-skip{width:auto;padding:0 13px;font-size:12px}.opening-staging .opening-progress{width:78vw;bottom:max(38px,calc(env(safe-area-inset-bottom) + 26px))}.opening-staging .opening-now{bottom:max(65px,calc(env(safe-area-inset-bottom) + 53px));font-size:12px}.stage-show-title{font-size:12vw}.stage-projection{font-size:14vw}}
@media(max-height:520px){.stage-house{width:min(82vw,calc(78svh * 1.7778));padding-top:28px}.stage-billing{transform:translate(-50%,-18%);padding-block:5px}.opening-staging .opening-progress{bottom:max(24px,env(safe-area-inset-bottom))}.opening-staging .opening-now{bottom:max(47px,calc(env(safe-area-inset-bottom) + 23px))}.opening-staging .opening-actions{top:max(8px,env(safe-area-inset-top))}}
@media(prefers-reduced-motion:reduce){.opening-stage,.opening-stage:before,.stage-frame,.stage-billing,.stage-scene,.stage-scene-wash,.stage-tower-spot,#stage-spots,.stage-spot,.stage-cutout,.stage-curtain,.stage-show-title,.stage-show-title>span,.stage-projection,.stage-lightning,.stage-rhythm,.stage-footlights{transition:none!important;animation:none!important}#campaign-app[data-opening-curtain=open] .stage-curtain-left{transform:translateX(-88%)!important}#campaign-app[data-opening-curtain=open] .stage-curtain-right{transform:translateX(88%)!important}#campaign-app.opening-percussion-hit .stage-lightning,#campaign-app.opening-percussion-hit .stage-rhythm{opacity:0!important}.opening-ending .stage-curtain-left,.opening-ending .stage-curtain-right{transform:translateX(0)!important}}
