:root{
  color-scheme:dark;
  --red:#d94c38;
  --green:#7fae55;
  --gold:#e4bd69;
  --cream:#f4ead1;
  --ink:#070807;
  --velvet:#260908;
  --stage-ratio:1.7777778;
}
*{box-sizing:border-box}
html,body{width:100%;min-width:960px;height:100%;margin:0;overflow:hidden;background:#050505;color:var(--cream)}
body{font-family:Georgia,'Times New Roman',serif;background:
  radial-gradient(ellipse at 50% -25%,#6a2018 0,#270a09 34%,#090706 73%),
  repeating-linear-gradient(90deg,#180706 0 9%,#260a08 9.5% 10.5%,#130605 11% 20%)}
button,a,input,summary{font:inherit}
button,a{touch-action:manipulation}
button{color:inherit}
[hidden]{display:none!important}
.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}

#finale-app{position:relative;width:100%;height:100%;isolation:isolate;--curtain-open:0;--ghost-level:0;--phase-progress:0}
#finale-app::before{content:"";position:fixed;inset:0;z-index:-3;background:radial-gradient(ellipse at 50% 45%,transparent 0 48%,#0009 74%,#000 100%);pointer-events:none}
#finale-app::after{content:"";position:fixed;inset:0;z-index:90;background:#000;opacity:0;pointer-events:none;transition:opacity .7s ease}
#finale-app[data-phase="goodbye-reverb"]::after{opacity:calc(1 - var(--ghost-level))}
#finale-app[data-phase="score-ended"]::after,#finale-app[data-phase="completion"]::after{opacity:1}

.finale-controls{position:fixed;z-index:120;top:max(12px,env(safe-area-inset-top));left:max(18px,env(safe-area-inset-left));right:max(18px,env(safe-area-inset-right));display:flex;align-items:center;gap:13px;pointer-events:none}
.finale-controls button,.finale-controls a{pointer-events:auto}
.finale-home,.finale-control-buttons button{height:39px;border:1px solid #dfc27b66;background:#0a0b09d9;color:#eee2c2;box-shadow:0 8px 24px #0007,inset 0 1px #fff1;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.finale-home{display:flex;align-items:center;gap:8px;padding:0 14px;border-radius:99px;text-decoration:none;font:700 12px/1 ui-monospace,SFMono-Regular,monospace;letter-spacing:.08em;text-transform:uppercase}
.finale-home b{font-size:17px;color:var(--gold)}
.finale-billing{display:flex;align-items:baseline;gap:8px;color:#d8c79e;text-shadow:0 2px 9px #000;font:700 9px/1 ui-monospace,SFMono-Regular,monospace;letter-spacing:.18em}.finale-billing b{color:var(--gold);font-size:8px}
.finale-control-buttons{display:flex;gap:7px;margin-left:auto}
.finale-control-buttons button{min-width:43px;padding:0 10px;border-radius:99px;cursor:pointer;font:700 10px/1 ui-monospace,SFMono-Regular,monospace;letter-spacing:.05em;text-transform:uppercase;transition:border-color .2s,background .2s,opacity .2s}
.finale-control-buttons button span{color:var(--gold);font-size:13px}.finale-control-buttons button b{margin-left:5px;font-size:8px}
.finale-control-buttons button:hover:not(:disabled),.finale-control-buttons button:focus-visible,.finale-home:focus-visible{border-color:#f0d188;background:#1a1710;outline:2px solid #f0d18866;outline-offset:2px}
.finale-control-buttons button:disabled{opacity:.38;cursor:default}.finale-control-buttons button[aria-pressed=true]{border-color:#e4bd69aa;background:#332413e8}

.finale-stage-shell{position:fixed;inset:0;z-index:1;display:grid;place-items:center;padding:55px 28px 41px;pointer-events:none}
.finale-stage{position:relative;width:min(calc(100vw - 56px),calc((100vh - 96px)*var(--stage-ratio)));aspect-ratio:16/9;overflow:hidden;background:#000;border:clamp(5px,.55vw,10px) solid #412519;border-radius:3px;box-shadow:0 0 0 2px #c69a4c,0 0 0 7px #1b0c08,0 24px 90px #000,0 0 90px #b52c181e;pointer-events:auto;transform:translateZ(0)}
.finale-stage-depth{position:absolute;inset:0;overflow:hidden;background:#030303;perspective:1200px}
.finale-storybook{position:absolute;z-index:58;inset:0;overflow:hidden;background:#17140e;opacity:0;transition:opacity 1.15s ease}
#finale-app[data-film="story"] .finale-storybook{opacity:1}
.finale-storybook figure{position:absolute;inset:0;margin:0;opacity:0;transform:scale(1.018) translate3d(0,0,0);transition:opacity 1.2s ease,transform 15s cubic-bezier(.2,.65,.3,1);will-change:opacity,transform}
.finale-storybook figure.active{opacity:1;transform:scale(1) translate3d(var(--story-pan-x,0),var(--story-pan-y,0),0)}
.finale-storybook img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.95) contrast(1.025)}
.finale-storybook-paper{position:absolute;z-index:3;inset:0;pointer-events:none;mix-blend-mode:soft-light;opacity:.25;background:repeating-linear-gradient(8deg,#fff1 0 1px,transparent 1px 4px),radial-gradient(ellipse at 50% 44%,transparent 38%,#24180e8f 100%)}
.finale-film{position:absolute;z-index:60;inset:0;width:100%;height:100%;object-fit:contain;background:#000;opacity:.001;transition:opacity 1.15s ease,filter .7s ease}
#finale-app[data-film="video"] .finale-film,#finale-app[data-film="playing"] .finale-film,#finale-app[data-film="paused"] .finale-film,#finale-app[data-film="finished"] .finale-film{opacity:1}
#finale-app[data-film="finished"] .finale-film{filter:brightness(.62)}
.finale-curtain{transition:transform 1.05s cubic-bezier(.76,0,.24,1)}
.finale-stage::before{content:"";position:absolute;z-index:92;inset:0;pointer-events:none;box-shadow:inset 0 0 52px #000d,inset 0 0 0 2px #e5be6b3d}

/* SceneryDeck fills these stacks. Each image is a painted rear cloth, while
   the atmosphere and foreground flats remain separate and reusable. */
.finale-scenery{position:absolute;z-index:2;inset:0 0 15%;overflow:hidden;background:#030303;transform-style:preserve-3d}
.finale-scenery-stack,.finale-scenery-set{position:absolute;inset:0;overflow:hidden;opacity:0;transform:translateY(-104%);will-change:transform,opacity}
.finale-scenery-stack.is-active,.finale-scenery-set.is-active,.finale-scenery-stack[data-active=true],.finale-scenery-set[data-active=true]{opacity:1;transform:translateY(0)}
.finale-scenery img,.finale-scenery-picture,.finale-scenery-layer{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;user-select:none;-webkit-user-drag:none}
.finale-scenery-stack.is-entering,.finale-scenery-set.is-entering{animation:finale-drop-in 1.05s cubic-bezier(.17,.8,.24,1) both}
.finale-scenery-stack.is-leaving,.finale-scenery-set.is-leaving{animation:finale-fly-out .9s cubic-bezier(.62,0,.83,.28) both}
.finale-scenery-stack.is-cut,.finale-scenery-set.is-cut{animation:none}
.finale-scenery[data-set="dark-road"] img{filter:brightness(.19) saturate(.42) hue-rotate(8deg)}
.finale-scenery[data-set="black-cyclorama"]{background:#010101}
@keyframes finale-drop-in{0%{opacity:.25;transform:translateY(-103%)}76%{opacity:1;transform:translateY(1.2%)}100%{opacity:1;transform:translateY(0)}}
@keyframes finale-fly-out{0%{opacity:1;transform:translateY(0)}100%{opacity:.2;transform:translateY(-105%)}}

.finale-atmosphere{position:absolute;z-index:7;inset:0 0 14%;pointer-events:none;background:
  radial-gradient(ellipse at 50% 89%,#e5bb6540 0,transparent 39%),
  linear-gradient(90deg,#020302a8,transparent 18% 82%,#020302a8),
  linear-gradient(0deg,#09060499,transparent 34%);mix-blend-mode:screen;opacity:.5;transition:opacity 1.1s,background 1.1s}
#finale-app[data-scenery="daylight-water"] .finale-atmosphere{background:radial-gradient(ellipse at 50% 82%,#f6d1863b,transparent 43%),linear-gradient(90deg,#09252182,transparent 20% 80%,#09252182);opacity:.64}
#finale-app[data-scenery="workshop-machinery"] .finale-atmosphere{background:radial-gradient(circle at 50% 48%,#f4a82a47,transparent 29%),linear-gradient(90deg,#080605a8,transparent 23% 77%,#080605a8);opacity:.72}
#finale-app[data-scenery="dark-road"] .finale-atmosphere{background:radial-gradient(ellipse at 50% 77%,#d9b56312,transparent 25%),linear-gradient(#03040560,#000e);opacity:1}
#finale-app[data-scenery="restored-world"] .finale-atmosphere{background:radial-gradient(ellipse at 50% 82%,#e8be6157,transparent 42%),linear-gradient(90deg,#04101b99,transparent 20% 80%,#04101b99);opacity:.8}
#finale-app[data-scenery="black-cyclorama"] .finale-atmosphere{background:#000;opacity:1}

.finale-stage-floor{position:absolute;z-index:9;left:-1%;right:-1%;bottom:-1%;height:22%;transform:rotateX(54deg);transform-origin:50% 100%;background:
  linear-gradient(90deg,transparent 0 12%,#c9873b16 12.2% 12.35%,transparent 12.55% 31%,#c9873b15 31.2% 31.35%,transparent 31.6% 51%,#c9873b15 51.2% 51.35%,transparent 51.6% 72%,#c9873b14 72.2% 72.35%,transparent 72.6%),
  repeating-linear-gradient(0deg,#100b08 0 2px,#47291a 3px 9px,#21130e 10px 11px),
  linear-gradient(#58321e,#110b09);box-shadow:0 -6px 20px #0008,inset 0 17px 25px #daa1541d;opacity:.96}
.finale-stage-floor::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 50% 0,#e8bb6540,transparent 55%);mix-blend-mode:screen}

.finale-cast{position:absolute;z-index:28;inset:11% 4% 13%;transition:opacity 1.1s ease;pointer-events:none}
.finale-cast figure{position:absolute;left:var(--x);bottom:var(--bottom);height:var(--h);margin:0;transform:translateX(-50%) translateY(var(--lift,0)) scale(var(--scale,1));transform-origin:50% 100%;filter:drop-shadow(0 8px 7px #000a) brightness(var(--brightness,1));opacity:var(--opacity,1);transition:left 1.15s cubic-bezier(.2,.75,.22,1),bottom 1.15s cubic-bezier(.2,.75,.22,1),height 1.15s cubic-bezier(.2,.75,.22,1),opacity .75s,filter .55s,transform 1.05s cubic-bezier(.2,.75,.22,1)}
.finale-cast figure img{display:block;width:auto;height:100%;user-select:none;-webkit-user-drag:none}
.finale-cast .finale-pose-standing{position:relative;z-index:1;opacity:1;transition:opacity .62s ease}
.finale-cast .finale-pose-bow{position:absolute;z-index:2;left:50%;bottom:0;transform:translateX(-50%);opacity:0;transition:opacity .62s ease}
.finale-cast figure:nth-child(2) img{transition-delay:.06s}.finale-cast figure:nth-child(3) img{transition-delay:.12s}.finale-cast figure:nth-child(4) img{transition-delay:.18s}.finale-cast figure:nth-child(5) img{transition-delay:.24s}
.finale-cast figure[data-animal=kalli]{--x:17%;--bottom:0%;--h:72%}
.finale-cast figure[data-animal=alli]{--x:34%;--bottom:0%;--h:65%}
.finale-cast figure[data-animal=skjaldi]{--x:50%;--bottom:0%;--h:62%}
.finale-cast figure[data-animal=fusi]{--x:67%;--bottom:0%;--h:61%}
.finale-cast figure[data-animal=broddi]{--x:83%;--bottom:0%;--h:62%}
.finale-cast[data-spotting=true] figure{--brightness:.28;--opacity:.66}
.finale-cast[data-spotting=true] figure.spotlit,.finale-cast[data-company-lit=true] figure{--brightness:1.16;--opacity:1}

/* Re-block the same consistent performers for each theatrical tableau. */
#finale-app[data-tableau="mechanism-team"] .finale-cast figure[data-animal=kalli]{--x:24%;--h:76%;--lift:-1%}
#finale-app[data-tableau="mechanism-team"] .finale-cast figure[data-animal=broddi]{--x:73%;--h:68%;--lift:-1%}
#finale-app[data-tableau="mechanism-team"] .finale-cast figure[data-animal=fusi]{--x:51%;--bottom:23%;--h:48%}
#finale-app[data-tableau="mechanism-team"] .finale-cast figure[data-animal=alli]{--x:9%;--h:48%;--opacity:.68}
#finale-app[data-tableau="mechanism-team"] .finale-cast figure[data-animal=skjaldi]{--x:91%;--h:48%;--opacity:.68}
#finale-app[data-tableau="water-sky-team"] .finale-cast figure[data-animal=kalli]{--x:8%;--h:42%;--opacity:.54}
#finale-app[data-tableau="water-sky-team"] .finale-cast figure[data-animal=alli]{--x:27%;--h:71%}
#finale-app[data-tableau="water-sky-team"] .finale-cast figure[data-animal=skjaldi]{--x:50%;--bottom:-7%;--h:61%;--scale:.93}
#finale-app[data-tableau="water-sky-team"] .finale-cast figure[data-animal=fusi]{--x:70%;--bottom:26%;--h:49%;--lift:-3%}
#finale-app[data-tableau="water-sky-team"] .finale-cast figure[data-animal=broddi]{--x:91%;--h:42%;--opacity:.54}
#finale-app[data-tableau="company-lantern"] .finale-cast figure[data-animal=kalli]{--x:31%;--h:59%}
#finale-app[data-tableau="company-lantern"] .finale-cast figure[data-animal=alli]{--x:41%;--h:54%}
#finale-app[data-tableau="company-lantern"] .finale-cast figure[data-animal=skjaldi]{--x:50%;--h:53%}
#finale-app[data-tableau="company-lantern"] .finale-cast figure[data-animal=fusi]{--x:59%;--h:52%}
#finale-app[data-tableau="company-lantern"] .finale-cast figure[data-animal=broddi]{--x:69%;--h:53%}
#finale-app[data-tableau="broddi-button"] .finale-cast figure:not([data-animal=broddi]){--scale:.72;--opacity:.76}
#finale-app[data-tableau="broddi-button"] .finale-cast figure[data-animal=kalli]{--x:15%}
#finale-app[data-tableau="broddi-button"] .finale-cast figure[data-animal=alli]{--x:27%}
#finale-app[data-tableau="broddi-button"] .finale-cast figure[data-animal=skjaldi]{--x:39%}
#finale-app[data-tableau="broddi-button"] .finale-cast figure[data-animal=fusi]{--x:51%}
#finale-app[data-tableau="broddi-button"] .finale-cast figure[data-animal=broddi]{--x:76%;--h:71%;--scale:1.08}
#finale-app[data-tableau="company-deep-bow"] .finale-pose-standing{opacity:0}
#finale-app[data-tableau="company-deep-bow"] .finale-pose-bow{opacity:1}
#finale-app[data-tableau="empty-stage"] .finale-cast{opacity:0}

.finale-spots{position:absolute;z-index:24;inset:0;pointer-events:none;mix-blend-mode:screen}.finale-spots i{position:absolute;top:-17%;left:var(--x);width:19%;height:104%;opacity:0;transform:translateX(-50%) rotate(var(--tilt,0deg));transform-origin:50% 0;background:linear-gradient(180deg,#fff2b8d6 0,#f9cf7350 55%,transparent 91%);clip-path:polygon(44% 0,56% 0,100% 100%,0 100%);filter:blur(5px);transition:opacity .25s}
.finale-spots i[data-animal=kalli]{--x:20%;--tilt:3deg}.finale-spots i[data-animal=alli]{--x:35%;--tilt:1deg}.finale-spots i[data-animal=skjaldi]{--x:50%}.finale-spots i[data-animal=fusi]{--x:65%;--tilt:-1deg}.finale-spots i[data-animal=broddi]{--x:81%;--tilt:-3deg}
.finale-spots i.active{opacity:.67;animation:spot-breathe 1.8s ease-in-out infinite alternate}.finale-spots i.pulse{animation:spot-pop .36s ease-out both}
@keyframes spot-breathe{to{opacity:.86}}
@keyframes spot-pop{0%{opacity:0;filter:blur(8px)}30%{opacity:1;filter:blur(2px)}100%{opacity:.5;filter:blur(7px)}}

.finale-scene-wash{position:absolute;z-index:31;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 67%,transparent 0 42%,#02020191 85%);transition:background 1.1s,opacity 1.1s;opacity:.45}
#finale-app[data-wash="near-black"] .finale-scene-wash{background:radial-gradient(circle at 50% 72%,transparent 0 12%,#000d 36%,#000 81%);opacity:1}
#finale-app[data-wash="maximum"] .finale-scene-wash{background:radial-gradient(ellipse at 50% 65%,#ffe2a620,transparent 66%);opacity:.55}
#finale-app[data-wash="black"] .finale-scene-wash{background:#000;opacity:.95}

.finale-mechanism{position:absolute;z-index:17;left:47%;bottom:13%;width:19%;aspect-ratio:1;border:clamp(4px,.5vw,9px) solid #ba7e30;border-radius:50%;opacity:0;transform:translateX(-50%) scale(.7);transition:opacity .5s,transform .9s;box-shadow:inset 0 0 0 10px #3b2417,0 0 30px #ffc45d4a}.finale-mechanism::before,.finale-mechanism::after,.finale-mechanism i{content:"";position:absolute;inset:45% -18%;height:10%;border-radius:99px;background:#a56c2b;box-shadow:inset 0 2px #eac170}.finale-mechanism::after{transform:rotate(90deg)}.finale-mechanism i:nth-child(1){transform:rotate(45deg)}.finale-mechanism i:nth-child(2){transform:rotate(-45deg)}.finale-mechanism i:nth-child(3){inset:32%;height:auto;border-radius:50%;background:radial-gradient(circle,#f7d682,#ad6429 38%,#281b13 42% 64%,#b87b2f 66%)}
#finale-app[data-tableau="mechanism-team"] .finale-mechanism{opacity:.78;transform:translateX(-50%) scale(1);animation:mechanism-turn 8s linear infinite}@keyframes mechanism-turn{to{rotate:360deg}}

.finale-water-ripples{position:absolute;z-index:18;left:49%;bottom:11%;width:55%;height:13%;opacity:0;transform:translateX(-50%);transition:opacity .6s}.finale-water-ripples i{position:absolute;inset:var(--i,5%);border:2px solid #a5e8e7b8;border-radius:50%;animation:ripple 2.4s ease-out infinite}.finale-water-ripples i:nth-child(2){--i:22%;animation-delay:.6s}.finale-water-ripples i:nth-child(3){--i:36%;animation-delay:1.2s}#finale-app[data-tableau="water-sky-team"] .finale-water-ripples{opacity:1}@keyframes ripple{0%{transform:scale(.45);opacity:0}25%{opacity:.75}100%{transform:scale(1.2);opacity:0}}

.finale-lantern{position:absolute;z-index:36;left:50%;bottom:15%;width:4.8%;aspect-ratio:.76;opacity:0;transform:translateX(-50%) scale(.6);transition:opacity 1.5s,transform 1.5s}.finale-lantern i{position:absolute;left:50%;top:45%;width:390%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,#fff7cd 0,#f5c85a50 16%,transparent 66%);filter:blur(3px)}.finale-lantern b{position:absolute;inset:24% 17% 0;border:3px solid #b68137;border-radius:42% 42% 18% 18%;background:linear-gradient(90deg,#2d1e16,#ffe2a1 48%,#3b2719);box-shadow:0 0 18px #f9d061}.finale-lantern::before{content:"";position:absolute;z-index:2;left:10%;right:10%;top:3%;height:39%;border:3px solid #c08a3f;border-bottom:0;border-radius:50% 50% 0 0}
#finale-app[data-tableau="company-lantern"] .finale-lantern{opacity:1;transform:translateX(-50%) scale(1)}

.finale-button-prop{position:absolute;z-index:34;left:76%;bottom:13%;width:13%;height:26%;opacity:0;transform:translateX(-50%) scale(.7);transition:opacity .2s,transform .45s;text-align:center}.finale-button-prop::before{content:"";position:absolute;left:21%;right:21%;bottom:0;height:58%;background:linear-gradient(90deg,#2a1b14,#7a5536 48%,#231713);border:3px solid #c08b48;box-shadow:0 7px 20px #000a}.finale-button-prop b{position:absolute;z-index:2;left:28%;right:28%;top:8%;aspect-ratio:1;border:4px solid #63201a;border-radius:50%;background:radial-gradient(circle at 36% 30%,#ffb19a,#d73528 31%,#5d0d0a 74%);box-shadow:0 0 0 5px #bd8644,0 0 25px #f22}.finale-button-prop span{position:absolute;z-index:3;bottom:8%;left:0;right:0;color:#f6d997;font:900 clamp(6px,.75vw,12px)/1 ui-monospace,SFMono-Regular,monospace;letter-spacing:.08em;text-shadow:0 2px #000}
#finale-app[data-tableau="broddi-button"] .finale-button-prop{opacity:1;transform:translateX(-50%) scale(1)}
#finale-app[data-action="orchestra-stop"] .finale-button-prop b{animation:button-warning .72s step-end infinite}@keyframes button-warning{50%{filter:brightness(1.8);box-shadow:0 0 0 5px #bd8644,0 0 50px #ff4030}}

.finale-confetti{position:absolute;z-index:39;inset:-8% 0 0;overflow:hidden;pointer-events:none;opacity:0;transition:opacity .4s}.finale-confetti i{position:absolute;top:-10%;left:var(--x);width:var(--w);height:4px;background:var(--c);transform:rotate(var(--r));animation:confetti-fall var(--d) linear var(--delay) infinite;box-shadow:0 2px 5px #0004}.finale-confetti[data-mode="restrained"],.finale-confetti[data-mode="maximum"],.finale-confetti[data-mode="settling"]{opacity:1}.finale-confetti[data-mode="restrained"] i:nth-child(3n){display:none}.finale-confetti[data-mode="settling"] i{animation-iteration-count:1}.finale-confetti[data-mode="maximum"] i{filter:brightness(1.2)}@keyframes confetti-fall{0%{translate:0 -12%;rotate:0deg}50%{translate:var(--sway) 58%;rotate:240deg}100%{translate:calc(var(--sway)*-.4) 118%;rotate:520deg}}

.finale-show-title{position:absolute;z-index:43;left:50%;top:17%;display:flex;align-items:baseline;opacity:0;transform:translate(-50%,-12%) scale(.82);filter:drop-shadow(0 8px 15px #000c);transition:opacity .35s,transform .55s;white-space:nowrap;font:900 clamp(48px,6.9vw,116px)/.82 Georgia,serif;letter-spacing:-.09em;text-shadow:0 3px 0 #522,0 6px 24px #000}.finale-show-title span:nth-child(odd){color:#e55342}.finale-show-title span:nth-child(even){color:#83b764}.finale-show-title b{margin-left:.18em;color:#edcb6c;font:900 .25em/1 ui-monospace,SFMono-Regular,monospace;letter-spacing:-.05em}
#finale-app[data-title="cycling"] .finale-show-title,#finale-app[data-title="held"] .finale-show-title,#finale-app[data-title="fading"] .finale-show-title{opacity:1;transform:translate(-50%,0) scale(1)}
#finale-app[data-title="cycling"] .finale-show-title span{animation:title-cycle .76s steps(1,end) infinite}
#finale-app[data-title="cycling"] .finale-show-title span:nth-child(2){animation-delay:-.15s}#finale-app[data-title="cycling"] .finale-show-title span:nth-child(3){animation-delay:-.3s}#finale-app[data-title="cycling"] .finale-show-title span:nth-child(4){animation-delay:-.45s}#finale-app[data-title="cycling"] .finale-show-title span:nth-child(5){animation-delay:-.6s}
#finale-app[data-title="fading"] .finale-show-title{opacity:calc(1 - var(--phase-progress));transform:translate(-50%,calc(var(--phase-progress)*-12%)) scale(calc(1 - var(--phase-progress)*.08))}
@keyframes title-cycle{0%,33%{color:#e55342}34%,66%{color:#83b764}67%,100%{color:#edcb6c}}

.finale-curtain{position:absolute;z-index:75;top:0;bottom:0;width:55%;background-image:linear-gradient(90deg,#18030244,transparent 17% 75%,#09010177),url('../assets/opening-stage-curtain.webp');background-size:200% 100%;filter:saturate(.9) brightness(.72) contrast(1.08);will-change:transform;pointer-events:none}.finale-curtain-left{left:-1%;background-position:left center;transform:translateX(calc(var(--curtain-open)*-91%))}.finale-curtain-right{right:-1%;background-position:right center;transform:translateX(calc(var(--curtain-open)*91%)) scaleX(-1)}
.finale-valance{position:absolute;z-index:79;left:-2%;right:-2%;top:-3%;height:12.5%;background:url('../assets/opening-stage-curtain.webp') center top/100% auto no-repeat;filter:saturate(.92) brightness(.72);box-shadow:0 9px 20px #0008;pointer-events:none}
.finale-proscenium{position:absolute;z-index:82;inset:0;pointer-events:none;border:clamp(4px,.5vw,9px) solid transparent;border-image:linear-gradient(135deg,#5c301a,#d9aa54 22%,#5a2b17 52%,#e2ba6d 78%,#4a2517) 1;box-shadow:inset 0 0 0 3px #1c0a05,inset 0 0 28px #0009}

.finale-footlights{position:absolute;z-index:88;left:3%;right:3%;bottom:1%;height:7%;display:flex;align-items:flex-end;justify-content:space-around;pointer-events:none}.finale-footlights::before{content:"";position:absolute;left:-2%;right:-2%;bottom:-23%;height:72%;background:linear-gradient(#9a713b,#22160e 26%,#0b0806 72%);border-top:2px solid #d6aa60;box-shadow:0 -4px 13px #000c}.finale-footlights i{position:relative;z-index:1;width:clamp(9px,1.18vw,21px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 38% 32%,#fff 0 8%,#fff1b5 12%,#edb64c 37%,#6f3d19 66%,#1e100b 76%);box-shadow:0 0 calc(5px + 18px*var(--bulb-level,0)) rgba(255,209,102,var(--bulb-level,0)),0 0 calc(2px + 42px*var(--bulb-level,0)) rgba(255,166,48,calc(var(--bulb-level,0)*.7)),0 2px 4px #000;filter:brightness(calc(.25 + var(--bulb-level,0)*1.2));transition:filter .16s,box-shadow .16s}

.finale-ghost-light{position:absolute;z-index:70;left:50%;bottom:7%;width:7%;height:39%;opacity:var(--ghost-level);transform:translateX(-50%);pointer-events:none}.finale-ghost-light i{position:absolute;left:50%;top:5%;width:280%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,#fffde4 0 4%,#f2d17076 19%,transparent 68%);filter:blur(3px)}.finale-ghost-light b{position:absolute;left:43%;right:43%;top:12%;bottom:0;background:linear-gradient(90deg,#201812,#c39957,#211812);box-shadow:0 2px 7px #000}.finale-ghost-light::before{content:"";position:absolute;z-index:2;left:39%;right:39%;top:3%;aspect-ratio:1;border-radius:50%;background:#fffad4;box-shadow:0 0 18px #ffe899,0 0 46px #eabf5a}

.finale-caption-wrap{position:absolute;z-index:102;left:11%;right:11%;bottom:7.6%;display:flex;justify-content:center;pointer-events:none}.finale-caption{min-height:1.5em;margin:0;padding:.34em .72em .42em;border-radius:4px;background:#050504d4;box-shadow:0 4px 16px #0009;color:#fff7e2;text-align:center;text-wrap:balance;font:700 clamp(15px,1.72vw,28px)/1.24 Georgia,serif;text-shadow:0 2px 3px #000}.finale-caption:empty{visibility:hidden}

.finale-transport{position:fixed;z-index:125;left:50%;bottom:max(10px,env(safe-area-inset-bottom));display:grid;grid-template-columns:42px minmax(260px,34vw) 42px;align-items:center;gap:10px;translate:-50% 0;color:#d9c79f;font:700 10px/1 ui-monospace,SFMono-Regular,monospace;text-shadow:0 2px 4px #000;opacity:.72;transition:opacity .2s}.finale-transport:hover,.finale-transport:focus-within{opacity:1}.finale-transport span:last-child{text-align:right}.finale-transport input{width:100%;height:18px;margin:0;accent-color:var(--gold);cursor:pointer}.finale-transport input:disabled{cursor:default;opacity:.45}

.finale-card{position:fixed;z-index:150;left:50%;top:50%;width:min(570px,calc(100vw - 80px));max-height:calc(100vh - 120px);overflow:auto;transform:translate(-50%,-50%);padding:clamp(28px,4vw,56px);border:1px solid #e2c07173;border-radius:8px;background:linear-gradient(145deg,#171411f5,#070807f4 72%);box-shadow:0 24px 110px #000,0 0 0 8px #120906b8,0 0 0 10px #bd8a3f55;text-align:center;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.finale-card::before{content:"";position:absolute;inset:10px;border:1px solid #e2bd6840;pointer-events:none}.finale-card-kicker{margin:0 0 10px;color:var(--gold)!important;font:800 10px/1 ui-monospace,SFMono-Regular,monospace!important;letter-spacing:.24em}.finale-card h1,.finale-card h2{margin:0;color:#eee3c7;font:900 clamp(52px,7vw,86px)/.92 Georgia,serif;letter-spacing:-.06em;text-shadow:0 3px #000}.finale-card h2{font-size:clamp(39px,5vw,67px)}.finale-card>p:not(.finale-card-kicker){max-width:460px;margin:20px auto 26px;color:#d5d3c5;font:500 17px/1.6 Georgia,serif}
.finale-primary,.finale-secondary{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:13px;min-height:48px;padding:0 19px;border:1px solid #e2bd69;border-radius:4px;background:linear-gradient(#d3ae5e,#a66f30);color:#120c08;text-decoration:none;box-shadow:0 7px 24px #0007,inset 0 1px #fff8;cursor:pointer;font:800 12px/1 ui-monospace,SFMono-Regular,monospace;letter-spacing:.06em;text-transform:uppercase}.finale-primary:hover,.finale-primary:focus-visible{filter:brightness(1.12);outline:3px solid #edce8066;outline-offset:3px}.finale-primary b{font-size:17px}.finale-secondary{border-color:#c7a86a78;background:#10110eea;color:#eadcb7;box-shadow:none}.finale-end-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:9px}.finale-transcript-details{position:relative;margin-top:24px;text-align:left;border-top:1px solid #c6a45c42;padding-top:15px;color:#cfc5aa}.finale-transcript-details summary{cursor:pointer;text-align:center;color:#e0ca91;font:700 10px/1.4 ui-monospace,SFMono-Regular,monospace;letter-spacing:.09em;text-transform:uppercase}.finale-transcript-details ol{max-height:205px;overflow:auto;margin:16px 0 0;padding:0 10px 0 41px;font:500 13px/1.45 Georgia,serif}.finale-transcript-details li{margin:.42em 0;padding-left:.35em}.finale-transcript-details time{display:inline-block;width:42px;color:#a8894d;font:700 9px ui-monospace,SFMono-Regular,monospace}
#finale-app[data-player="playing"] .finale-start-card{animation:card-away .55s ease both}@keyframes card-away{to{opacity:0;transform:translate(-50%,-48%) scale(.96);visibility:hidden}}
.finale-end-card{animation:end-card-in .75s .1s ease both}@keyframes end-card-in{from{opacity:0;transform:translate(-50%,-47%) scale(.94)}}

@media(max-height:760px){.finale-controls{top:7px}.finale-stage-shell{padding:43px 22px 35px}.finale-stage{width:min(calc(100vw - 44px),calc((100vh - 74px)*var(--stage-ratio)))}.finale-transport{bottom:5px}.finale-card{padding:27px 38px}.finale-card>p:not(.finale-card-kicker){margin:13px auto 18px}.finale-transcript-details{margin-top:17px}.finale-transcript-details ol{max-height:130px}}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important}
  #finale-app::after,.finale-atmosphere,.finale-scene-wash,.finale-footlights i,.finale-card,.finale-scenery-stack,.finale-scenery-set,.finale-cast figure,.finale-cast img,.finale-show-title,.finale-curtain,.finale-lantern,.finale-storybook,.finale-storybook figure,.finale-film{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}
  .finale-confetti{display:none}.finale-spots i{animation:none!important}.finale-water-ripples i,.finale-mechanism{animation:none!important}
}
