/* Third-stage atmosphere over the native bridge and ruin renders. */
.storm-atmosphere {position:fixed;inset:0;pointer-events:none;z-index:0;opacity:var(--storm-world,0);background:linear-gradient(160deg,#170c32a0,transparent 48%,#0b0e28a0),radial-gradient(ellipse at 75% 10%,#d4a2ff44,transparent 60%);mix-blend-mode:multiply;}
#gameScene .landscape img {filter:saturate(calc(.86 - var(--storm-world,0)*.36)) brightness(calc(.86 - var(--storm-world,0)*.16)) hue-rotate(calc(var(--storm-world,0)*22deg));}
.team[data-stage='2'] .portal-membrane {filter:hue-rotate(36deg);}
.team[data-stage='3'] .portal-membrane {filter:hue-rotate(105deg) brightness(1.7);box-shadow:0 0 18px #f7cb72;}
.team[data-stage='3'] .entry-portal::after {content:'✦';position:absolute;left:45%;top:8%;color:#ffeab6;text-shadow:0 0 20px #ffbd54;font-size:22px;}
#phaseOverlay[data-phase='final'] .phase-card {border-color:#e8c987;box-shadow:0 0 70px #efc47433;background:radial-gradient(ellipse at top,#42364b,#0b1420f5 70%);}
#phaseOverlay[data-winner='storm'] .phase-card {border-color:#9e89c9;background:radial-gradient(ellipse at top,#462653,#0b1420f5 70%);}
#phaseOverlay[data-phase='final'] #phaseEyebrow::before {content:'✦  ✦  ✦';display:block;color:#e8c987;font-size:26px;margin-bottom:14px;}
.team[data-race-status='fallen'] .ground-seal {opacity:0;}
@media(prefers-reduced-motion:reduce){.storm-atmosphere{mix-blend-mode:normal;}}

.portal-trophies i {opacity:.3;}
.portal-trophies i.lit {opacity:1;background:#eac97a;box-shadow:0 0 8px #eac97a88;}

.landscape::before {content:'';position:absolute;inset:0;z-index:2;pointer-events:none;background:radial-gradient(ellipse at 94% 45%,#ffe3a380,transparent 65%);opacity:0;}
#gameScene[data-goal-reached='true'][data-motion='full'] .landscape::before {animation:goal-wave 1100ms ease-out both;}
@keyframes goal-wave {0%{opacity:0;transform:scale(.85);}25%{opacity:1;}100%{opacity:0;transform:scale(1.25);}}

/* The target is a warning only. The discharge is rendered in screen space. */
.lightning-effects {z-index:4;}
.lightning-light {position:fixed;inset:0;pointer-events:none;z-index:0;opacity:calc(var(--lightning-flash,0)*.18);background:radial-gradient(ellipse at var(--lightning-x,50%) var(--lightning-y,50%),#e3eeff,transparent 75%);mix-blend-mode:screen;}
.team .character-sprite,.team .bridge-tile {filter:brightness(calc(1 + var(--storm-light,0)*.8));}
.team .portal-layer {filter:brightness(calc(1 + var(--storm-gate-light,0)*.8));}
/* Storm v2: genuine third scene and continuous physical rear collapse. */
#gameScene .landscape img {filter:saturate(.88) brightness(.88);}
#landscapeStorm {z-index:1;}
.storm-atmosphere {background:radial-gradient(ellipse at 60% -20%,#c3d5ff15,transparent 65%),linear-gradient(100deg,#12172f22,transparent);mix-blend-mode:normal;}
.world-material-elite {position:absolute;inset:0;width:100%;height:100%;pointer-events:none;opacity:var(--elite-blend,0);}
.team[data-stage='3'] .entry-portal {filter:drop-shadow(0 0 7px #c8ad7644);}
.team[data-stage='3'] .portal-layer.world-material-elite {filter:saturate(.35) brightness(1.12);}
.bridge-tile[data-collapsing='true'] {transform-origin:40% 45%;transform:translateY(calc(var(--collapse-fall)*150px)) rotate(calc(var(--collapse)*var(--collapse-turn)));opacity:calc(1 - var(--collapse)*var(--collapse));}
.bridge-tile[data-collapsing='true']::after {content:'';position:absolute;inset:35% -10% -30%;background:radial-gradient(ellipse,#b1b8c348,transparent 70%);opacity:calc(1 - var(--collapse));}
#phaseOverlay[data-phase='final'] {background:radial-gradient(ellipse,#0a102233,#05091599);backdrop-filter:blur(3px);}
#phaseOverlay[data-phase='final'] .phase-card {background:linear-gradient(140deg,#132337e8,#111724e8);border:1px solid #cab78288;border-radius:28px;max-width:660px;}
#phaseOverlay[data-phase='final'][data-winner='A'] .phase-card {box-shadow:0 0 90px #499dc455;}
#phaseOverlay[data-phase='final'][data-winner='B'] .phase-card {box-shadow:0 0 90px #d8786455;}
#phaseOverlay[data-phase='final'] #phaseEyebrow::before {content:'◇ ━ ◇ ━ ◇';letter-spacing:8px;}
#gameScene[data-scene='storm-sanctum'][data-motion='full'] .storm-atmosphere {animation:storm-cloud-drift 24s ease-in-out infinite alternate;}
@keyframes storm-cloud-drift {from{transform:translateX(-1%);opacity:.6;}to{transform:translateX(1%);opacity:1;}}
@media(prefers-reduced-motion:reduce){.bridge-tile,.storm-atmosphere{animation:none!important;transition:none!important;}.bridge-tile[data-collapsing='true']{transform:none;}}
/* Bolts continue behind opaque task surfaces rather than stopping at their edge. */
.lightning-effects {z-index:3;}
/* Reserve visible airborne clearance while retaining identical team scale. */
.team .world.world-art {--sprite:clamp(150px,20vh,216px);}
.rear-fragments {display:none;position:absolute;inset:0;pointer-events:none;}
.rear-fragments i {position:absolute;inset:0;--side:-20px;--turn:-24deg;--depth:140px;transform-origin:25% 45%;}
.rear-fragments i:nth-child(2){--side:4px;--turn:18deg;--depth:185px;transform-origin:50% 45%;}
.rear-fragments i:nth-child(3){--side:24px;--turn:39deg;--depth:155px;transform-origin:75% 45%;}
.rear-fragments img {position:absolute;inset:0;}
.bridge-tile[data-collapsing='true'] {transform:none;opacity:1;}
.bridge-tile[data-collapsing='true'] > img {visibility:hidden;}
.bridge-tile[data-collapsing='true'] .rear-fragments{display:block;}
.bridge-tile[data-collapsing='true'] .rear-fragments i {transform:translate(calc(var(--collapse)*var(--side)),calc(var(--collapse-fall)*var(--depth))) rotate(calc(var(--collapse)*var(--turn)));opacity:calc(1 - var(--collapse)*var(--collapse));}
.fragment-fallback::before{content:'';position:absolute;inset:35% 32% 30%;background:#657887;border-bottom:4px solid #283846;}
.final-heroes{display:flex;justify-content:center;gap:18px;height:126px;margin:-8px auto 4px;}
.final-heroes[hidden],.final-hero[hidden]{display:none;}
.final-hero{position:relative;width:126px;height:126px;background:radial-gradient(ellipse at 50% 80%,#86cde333,transparent 65%);}
.final-hero>div,.final-hero>img{position:absolute;inset:0;width:100%;height:100%;background-repeat:no-repeat;}
#finalHeroB{background:radial-gradient(ellipse at 50% 80%,#e49a7833,transparent 65%);}
#phaseOverlay[data-phase='final'] .final-score strong{font-size:24px;letter-spacing:5px;}
#phaseOverlay[data-phase='final'] .phase-card{max-height:94vh;overflow:auto;}
#phaseOverlay[data-phase='final'] #phaseEyebrow::before{display:none;}
.team[data-stage='3'][data-portal-phase='enter'] .entry-portal .portal-runes{filter:drop-shadow(0 0 8px #fff0b3) brightness(2.4);}
.team[data-stage='3'][data-portal-phase='hidden'] .entry-portal .portal-membrane{background:#d9c794;filter:brightness(1.4);}
.bridge-support {filter:saturate(calc(1 - var(--elite-blend,0)*.8)) hue-rotate(calc(var(--elite-blend,0)*24deg));}
[data-has-elite='true']:not([data-elite-failed='true']) > .world-material-base {opacity:calc((1 - var(--world-blend,0))*(1 - var(--elite-blend,0)));}
[data-has-elite='true']:not([data-elite-failed='true']) > .world-material-next {opacity:calc(var(--world-blend,0)*(1 - var(--elite-blend,0)));}

/* Ground warnings stay below prompts; the two gems describe the actual jump state. */
.jump-charge {position:absolute;bottom:calc(var(--lane-floor) + 8px);width:clamp(66px,7.3vw,104px);height:44px;transform:translateX(-50%);z-index:3;pointer-events:none;color:var(--accent);filter:drop-shadow(0 1px 2px #050c16);}
.jump-charge[hidden]{display:none;}
.jump-charge svg{width:100%;height:100%;overflow:visible;}
.jump-arc,.jump-tip{fill:none;stroke:currentColor;stroke-width:1.6;opacity:.35;stroke-dasharray:4 4;}
.jump-gem{fill:#101e2a;stroke:#d5c79d;stroke-width:1.5;}
.jump-charge[data-charges='1'] .first,.jump-charge[data-charges='2'] .jump-gem{fill:#fff0b9;stroke:#fff9e4;filter:drop-shadow(0 0 4px #e4c272);}
.jump-charge[data-charges='1'] .jump-arc{opacity:.8;}
.jump-charge[data-charges='2'] .jump-arc,.jump-charge[data-charges='2'] .jump-tip{opacity:1;stroke:#fff0b9;stroke-dasharray:none;stroke-width:2.5;}
.bridge-gap::after{display:none;}
#gameScene[data-motion='reduced'] .storm-atmosphere,#gameScene[data-paused='true'] .storm-atmosphere{animation:none;}
#gameScene[data-scene='storm-sanctum'] .storm-atmosphere{background:radial-gradient(ellipse at 70% -20%,#ccd8ff35,transparent 65%),linear-gradient(180deg,#060e2544,transparent 35%,#0c142c22);}

/* Hybrid world: generated distance plate + independently animated native ruin. */
.storm-ruin{position:absolute;left:26%;top:16%;width:clamp(240px,27vw,410px);aspect-ratio:1;z-index:2;pointer-events:none;filter:saturate(.7) brightness(.82);}
.storm-ruin[hidden]{display:none;}
.storm-ruin-sprite{position:absolute;inset:0;background:none 0 0 / 800% 800% no-repeat;}
.storm-ruin svg{position:absolute;inset:0;width:100%;height:100%;fill:none;stroke:#edf5ff;stroke-width:1.5;opacity:var(--ruin-flash,0);filter:drop-shadow(0 0 4px #9dbeff);}
.storm-ruin::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 56% 30%,#d6eaff,transparent 45%);opacity:calc(var(--ruin-flash,0)*.35);}
/* The lower island and departing debris recede into the cloud bank. */
.storm-ruin-sprite{mask-image:linear-gradient(#000 0 78%,transparent 91%);}

/* Short, local cloud at the failing masonry; no screen or input movement. */
.storm-ruin::after{content:'';position:absolute;left:39%;top:25%;width:33%;height:32%;border-radius:50%;background:radial-gradient(ellipse,rgba(185,193,200,.8),rgba(106,126,148,.3) 45%,transparent 72%);filter:blur(5px);opacity:var(--ruin-dust,0);pointer-events:none;}
/* Ground tension is engraved in the native stone, without a floating target box. */
.storm-target{position:absolute;bottom:calc(var(--lane-floor) - 10px);width:calc(100% / 15 - 12px);height:32px;transform:translateX(-50%);z-index:3;pointer-events:none;--fissure-light:#c5d9e2;--fissure-opacity:.65}
.storm-target[hidden]{display:none}
.storm-target .storm-fissure{position:absolute;inset:0 5px;width:calc(100% - 10px);height:100%;overflow:visible;transform:skewX(-18deg);opacity:1;filter:none}
.storm-fissure path,.storm-fissure use{fill:none;stroke-linecap:butt;stroke-linejoin:bevel}
.storm-fissure .stone-cut{stroke:#131719;stroke-width:3.4;opacity:.84}
.storm-fissure .stone-lip{stroke:#b0b4a0;stroke-width:1;transform:translateY(1.1px);opacity:.7}
.storm-fissure .storm-energy{stroke:var(--fissure-light);stroke-width:1;stroke-dasharray:19 7 9 5;opacity:var(--fissure-opacity);filter:drop-shadow(0 0 2px var(--fissure-light))}
.storm-target::before{content:'';position:absolute;inset:5px -8px 2px;background:radial-gradient(ellipse at 50% 45%,#bad6e22e,transparent 68%);opacity:.65;pointer-events:none}
.storm-target[data-kind='rear']{--fissure-opacity:.35}
.storm-target[data-kind='danger'],.storm-target[data-kind='fall']{--fissure-light:#e5ab79;--fissure-opacity:.95}
.storm-target[data-kind='danger'] .stone-cut,.storm-target[data-kind='fall'] .stone-cut{stroke-width:5;opacity:1}
.storm-target[data-kind='danger']::before,.storm-target[data-kind='fall']::before{background:radial-gradient(ellipse at 50% 45%,#d68b463d,transparent 70%)}
.storm-target[data-impact='true'] .storm-fissure,.storm-target[data-impact='true']::before{opacity:0}
.storm-ground-dust{position:absolute;inset:-8px -5px 0;background:radial-gradient(ellipse at 30% 68%,#adb0a557,transparent 35%),radial-gradient(ellipse at 62% 42%,#c4c2af3b,transparent 42%);filter:blur(2px);opacity:0;transform:translateY(calc(var(--strike-age,0)*-13px))}
.storm-target[data-striking='true'] .storm-ground-dust{opacity:calc((1 - var(--strike-age))*.65)}
.storm-target[data-kind='block'] .storm-fissure,.storm-target[data-kind='block']::before,.storm-target[data-kind='block'] .storm-ground-dust{opacity:0}
.storm-target[data-reduced='true'] .storm-energy{filter:none;opacity:.8}
.storm-target[data-reduced='true'] .storm-ground-dust{display:none}
