/* One main motion per scene. Decorative layers never intercept input. */
.cinema-scene{position:relative;--scene-warm:#ff9b6b;--scene-pink:#ff64b6}
.cinema-light,.palm-shadow,.region-weather,.postcard-frame,.postcard-stamp,.cast-strips,.cast-rim{pointer-events:none;user-select:none}
.cinema-light{position:absolute;inset:0;overflow:hidden;z-index:0;mix-blend-mode:screen;opacity:.62}
.cinema-light::before{content:'';position:absolute;inset:-25%;background:radial-gradient(ellipse at 90% 20%,var(--scene-warm),transparent 37%),radial-gradient(ellipse at 8% 75%,var(--scene-pink),transparent 35%);opacity:.1;transform:translate3d(-5%,0,0) rotate(-9deg);animation:cinema-light-drift 19s ease-in-out infinite alternate;animation-play-state:paused}
.scene-visible>.cinema-light::before{animation-play-state:running}
.hero>.cinema-light{z-index:-1;opacity:.82}.hero>.cinema-light::before{opacity:.17;background:radial-gradient(ellipse at 93% 14%,#ffc18c,transparent 38%),linear-gradient(112deg,transparent 57%,#ff77b83b 67%,transparent 79%)}
.palm-shadow{position:absolute;width:min(650px,64vw);height:760px;top:-90px;right:-130px;z-index:0;opacity:.19;background:url('assets/palm-shadow.svg') center/contain no-repeat;transform:rotate(-17deg);transform-origin:62% 38%;animation:palm-sway 13s ease-in-out infinite alternate;animation-play-state:paused}
.scene-visible>.palm-shadow{animation-play-state:running}.hero>.palm-shadow{z-index:-1;right:-80px;top:-150px;opacity:.3;width:660px;height:850px;mix-blend-mode:multiply}
.welcome>.welcome-heading,.welcome>.region-explorer,.characters>.section-heading,.characters>.character-grid,.release-atlas>.section-heading,.release-atlas>.atlas-layout,.release-atlas>.atlas-sources{position:relative;z-index:1}
.characters>.palm-shadow{left:-190px;right:auto;top:-120px;transform:rotate(40deg);opacity:.14}.characters{--scene-warm:#ff8d87;--scene-pink:#bc68ec}.release-atlas{--scene-warm:#d373ff;--scene-pink:#54c9e3}
@keyframes cinema-light-drift{to{transform:translate3d(6%,3%,0) rotate(4deg);opacity:.17}}
@keyframes palm-sway{to{rotate:5deg;translate:12px 5px}}
/* A scroll-linked VI aperture reveals existing official Vice City art. */
.vi-portal{height:155svh;min-height:680px;max-height:none;position:relative;isolation:isolate;background:#160e22;--portal-progress:0}
.vi-portal-frame{height:92svh;min-height:580px;max-height:1060px;position:sticky;top:0;overflow:hidden;background:radial-gradient(ellipse at 50% 47%,#76345255,transparent 62%)}
.vi-portal-art{position:absolute;inset:0;background:url('assets/vice-city.webp') 50% 50%/cover no-repeat;-webkit-mask:url('assets/vi-aperture.svg') center/var(--portal-size,32%) auto no-repeat;mask:url('assets/vi-aperture.svg') center/var(--portal-size,32%) auto no-repeat;transform:scale(var(--portal-zoom,1.08));will-change:mask-size,transform}
.vi-portal-ghost{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font:800 clamp(300px,60vw,850px)/1 var(--head);color:transparent;-webkit-text-stroke:1px #ff89c218;letter-spacing:-.07em;transform:translateX(-2%);opacity:calc(1 - var(--portal-progress))}
.vi-portal-shade{position:absolute;inset:0;background:linear-gradient(0deg,#160e22 0%,transparent 27%,transparent 75%,#160e2250);pointer-events:none}
.vi-portal-caption{position:absolute;left:6%;right:6%;bottom:7%;display:flex;align-items:end;justify-content:space-between;gap:25px;color:#fff1d9;opacity:var(--portal-caption,0);transform:translateY(calc((1 - var(--portal-caption,0))*20px))}
.vi-portal-caption>span{font-size:11px;letter-spacing:3px;padding-bottom:9px}.vi-portal-caption strong{font:800 clamp(64px,11vw,170px)/.85 var(--head);letter-spacing:-3px}.vi-portal-caption strong span{display:inline-block;color:#ff84ba;font-size:.45em;margin-left:16px;vertical-align:top}
.vi-portal-edge{position:absolute;bottom:0;left:6%;right:6%;height:1px;background:linear-gradient(90deg,#ff8dbb70,transparent)}
/* Postcard framing stays behind region copy and navigation. */
.region-panel{--postcard-hue:#ffb58f;box-shadow:0 20px 70px #07040e38}
.postcard-frame{position:absolute;inset:16px;border:1px solid #fff2d930;z-index:2;border-radius:1px}
.postcard-frame::before,.postcard-frame::after{content:'';position:absolute;width:28px;height:28px;border-color:#ffe0cc9c;border-style:solid}.postcard-frame::before{top:-1px;left:-1px;border-width:2px 0 0 2px}.postcard-frame::after{bottom:-1px;right:-1px;border-width:0 2px 2px 0}
.postcard-stamp{position:absolute;right:30px;top:30px;z-index:3;color:#fff2da;font:600 11px var(--body);letter-spacing:2px;text-shadow:0 2px 15px #100515}
.region-weather{position:absolute;inset:0;z-index:1;overflow:hidden;opacity:.75}
.region-weather>i{display:block;position:absolute;animation-play-state:paused!important}.scene-visible .region-weather>i{animation-play-state:running!important}
.region-weather .weather-light{inset:-20%;background:radial-gradient(ellipse at 80% 15%,#ffc69266,transparent 52%);mix-blend-mode:screen;opacity:.35;animation:postcard-sun 12s ease-in-out infinite alternate}
.region-weather .weather-water{width:76%;height:35%;right:-12%;top:44%;background:repeating-linear-gradient(174deg,transparent 0 13px,#fff5cb3d 14px,transparent 16px 33px);mask-image:radial-gradient(ellipse,black,transparent 68%);opacity:0;animation:water-shimmer 10s ease-in-out infinite alternate}
.region-weather .weather-mist{width:135%;height:60%;left:-20%;bottom:-8%;background:radial-gradient(ellipse at 30% 72%,#dce7d649,transparent 42%),radial-gradient(ellipse at 75% 55%,#f1e8d439,transparent 40%);filter:blur(15px);opacity:0;animation:low-mist 18s ease-in-out infinite alternate}
.region-weather .weather-heat{inset:-25%;background:linear-gradient(114deg,transparent 32%,#ffce8724 47%,transparent 61%);opacity:.35;transform:translateX(-15%);mix-blend-mode:screen;animation:postcard-heat 16s ease-in-out infinite alternate}
.region-panel[data-region="leonida-keys"] .weather-water{opacity:.52}.region-panel[data-region="leonida-keys"] .weather-light{opacity:.5;background:radial-gradient(ellipse at 60% 8%,#fff0bf60,transparent 47%)}
.region-panel[data-region="grassrivers"] .weather-mist{opacity:.8}.region-panel[data-region="grassrivers"] .weather-light{opacity:.2;background:radial-gradient(ellipse at 84% 14%,#c6dbbb60,transparent 45%)}.region-panel[data-region="grassrivers"] .weather-heat{display:none}
.region-panel[data-region="port-gellhorn"] .weather-heat{opacity:.7}.region-panel[data-region="port-gellhorn"] .weather-light{opacity:.25}
.region-panel[data-region="ambrosia"] .weather-light{background:radial-gradient(ellipse at 78% 18%,#ff955580,transparent 46%);opacity:.48}
.region-panel[data-region="mount-kalaga"] .weather-mist{opacity:.5;bottom:12%;background:radial-gradient(ellipse at 64% 64%,#bfdfec45,transparent 47%)}.region-panel[data-region="mount-kalaga"] .weather-light{opacity:.22;background:radial-gradient(ellipse at 30% 2%,#badbff80,transparent 43%)}.region-panel[data-region="mount-kalaga"] .weather-heat{display:none}
@keyframes postcard-sun{to{transform:translate(-4%,6%);opacity:.48}}
@keyframes water-shimmer{to{transform:translate(-5%,4%) scaleX(1.08)}}
@keyframes low-mist{to{transform:translateX(12%) scale(1.06)}}
@keyframes postcard-heat{to{transform:translateX(17%)}}
/* Cast entrances: alternating vertical shutters, then separate type timing. */
.js-motion .character.reveal{opacity:1;transform:none;transition:none}.cast-strips{position:absolute;inset:-1px;display:grid;grid-template-columns:repeat(5,1fr);z-index:4}
.cast-strips i{background:#160e22;transform:scaleY(1);transform-origin:50% 0;transition:transform 1.05s cubic-bezier(.76,0,.24,1);transition-delay:calc(var(--strip)*75ms)}.cast-strips i:nth-child(even){transform-origin:50% 100%}
.cast-entered .cast-strips i{transform:scaleY(0)}.character.cast-prepared:not(.cast-entered) .character-copy>*{opacity:0;transform:translateY(24px)}
.character.cast-prepared .character-copy>*{transition:transform .85s cubic-bezier(.2,.8,.2,1),opacity .85s}.cast-entered .character-copy>span{transition-delay:.22s}.cast-entered .character-copy>h3{transition-delay:.34s}.cast-entered .character-copy>p{transition-delay:.46s}.cast-entered .character-copy>button{transition-delay:.54s}
.cast-rim{position:absolute;inset:0;z-index:1;box-shadow:inset 0 0 0 1px #ff7fb42c,inset 0 -40px 90px #160e2230;background:radial-gradient(ellipse at var(--cast-light-x,85%) 28%,#ffa5b523,transparent 56%);transition:box-shadow .6s,opacity .6s;opacity:.45}
.character:nth-child(2) .cast-rim{background:radial-gradient(ellipse at var(--cast-light-x,15%) 28%,#c29cff35,transparent 56%)}
@media(hover:hover) and (pointer:fine){.character.cast-entered:hover>img{transform:translate3d(var(--cast-x,0px),var(--cast-y,0px),0) scale(1.055)}.character.cast-entered:hover .cast-rim{opacity:1;box-shadow:inset 0 0 0 1px #ff9cbb91,inset 0 -30px 75px #160e2210}}
/* Atlas halo, audited-region lights, and the selected-country leader. */
.atlas-space::before{content:'';position:absolute;left:11.5%;top:4.5%;width:77%;aspect-ratio:1;border-radius:50%;box-shadow:0 0 34px #ff72b827,0 0 115px #b845ab22,inset 0 0 30px #e995b417;z-index:-1;pointer-events:none}
.atlas-layout{position:relative;isolation:isolate}.atlas-connection{position:absolute;inset:0;width:100%;height:100%;overflow:visible;z-index:2;pointer-events:none}
.atlas-connection path{fill:none;stroke:#ff9ec180;stroke-width:1;stroke-dasharray:3 6;vector-effect:non-scaling-stroke}.atlas-connection circle{fill:#ffc5dc;opacity:.9}
.atlas-marker{fill:#ffc4dc;stroke:#fff1dc;stroke-width:.75;filter:drop-shadow(0 0 3px #ff77b7);pointer-events:none}.atlas-marker.is-selected{fill:#fff5df;stroke:#ff78ba;stroke-width:1.5}
.atlas-pulse{fill:none;stroke:#ffa5cb;stroke-width:1;pointer-events:none;transform-box:fill-box;transform-origin:center;opacity:.5}.scene-visible .atlas-pulse{animation:atlas-beacon 3.8s ease-out infinite;animation-delay:var(--beacon-delay,0s)}
@keyframes atlas-beacon{0%{scale:.7;opacity:.65}80%,100%{scale:2.4;opacity:0}}
@media(max-width:900px){.atlas-connection{display:none}}
@media(max-width:760px){.palm-shadow{width:370px;height:520px;right:-140px;opacity:.13;top:-40px}.hero>.palm-shadow{width:430px;height:580px;right:-160px;top:-80px;opacity:.2}.cinema-light{opacity:.4}.vi-portal{height:85svh;min-height:580px;max-height:800px}.vi-portal-frame{height:76svh;min-height:520px}.vi-portal-art{background-position:56% center;mask-size:var(--portal-size,74%) auto;-webkit-mask-size:var(--portal-size,74%) auto}.vi-portal-caption{bottom:10%;display:block}.vi-portal-caption>span{display:block;font-size:9px;letter-spacing:2px;margin-bottom:16px}.vi-portal-caption strong{font-size:80px}.postcard-frame{inset:10px}.postcard-stamp{top:21px;right:23px;font-size:9px}.region-weather .weather-mist{filter:blur(8px)}.cast-strips i{transition-duration:.8s;transition-delay:calc(var(--strip)*50ms)}.atlas-space::before{box-shadow:0 0 25px #ff72b81c,0 0 55px #b845ab22}}
/* Disabling motion reveals complete content rather than freezing a shutter. */
.motion-paused .cinema-light::before,.motion-paused .palm-shadow,.motion-paused .region-weather>i{animation:none!important;transform:none!important;rotate:none!important;translate:none!important}.motion-paused .cast-strips{display:none}.motion-paused .character.cast-prepared .character-copy>*{opacity:1;transform:none;transition:none}.motion-paused .character:hover>img{transform:none}.motion-paused .vi-portal{height:58svh;min-height:400px}.motion-paused .vi-portal-frame{height:58svh;min-height:400px;position:relative}.motion-paused .vi-portal-art{mask:none;-webkit-mask:none;transform:none;will-change:auto}.motion-paused .vi-portal-caption{opacity:1;transform:none}.motion-paused .vi-portal-ghost{display:none}.motion-paused .atlas-pulse{animation:none;opacity:.35}
@media(prefers-reduced-motion:reduce){.cinema-light::before,.palm-shadow,.region-weather>i{animation:none!important;transform:none!important;rotate:none!important;translate:none!important}.cast-strips{display:none}.character.cast-prepared .character-copy>*{opacity:1!important;transform:none!important;transition:none!important}.character:hover>img{transform:none!important}.vi-portal{height:58svh;min-height:400px}.vi-portal-frame{height:58svh;min-height:400px;position:relative}.vi-portal-art{mask:none;-webkit-mask:none;transform:none;will-change:auto}.vi-portal-caption{opacity:1;transform:none}.vi-portal-ghost{display:none}.atlas-pulse{animation:none!important;opacity:.35}}
.cinema-hidden .cinema-light::before,.cinema-hidden .palm-shadow,.cinema-hidden .region-weather>i,.cinema-hidden .atlas-pulse{animation-play-state:paused!important}
.hero-shade{inset:-50px}.hero>.palm-shadow{opacity:.14;filter:blur(1.5px);right:-155px;top:-205px}
@media(max-width:760px){.hero>.palm-shadow{opacity:.12;right:-190px;top:-110px}}
.region-panel:not([data-region="leonida-keys"]) .weather-water,.region-panel:not([data-region="grassrivers"]):not([data-region="mount-kalaga"]) .weather-mist{display:none}
