/* Persistent equipment sits above every fighter badge, not inside its stacking context. */
.battle-equipment-plane{position:absolute;inset:75px 5% 170px;z-index:6;pointer-events:none;transform:scale(var(--shot-zoom,1));transform-origin:var(--camera-x,50%) var(--camera-y,50%);transition:transform 1.4s cubic-bezier(.2,.65,.3,1),transform-origin 1.4s ease;overflow:visible}
.equipped-weapon{position:absolute;width:50px;height:50px;transform:translate(-50%,-50%);pointer-events:none;z-index:1}
.equipped-weapon.weapon-turn{z-index:3}.equipped-weapon.weapon-out{opacity:.22;filter:grayscale(1)}
.equipped-weapon.weapon-striking{animation:token-lunge min(900ms,var(--beat-duration)) ease-in-out both}
.battle-token.combo-striker,.equipped-weapon.combo-striker{animation:combo-route min(1000ms,var(--beat-duration)) ease-in-out both!important}
.equipped-weapon .weapon-arm{left:35%;top:24px;width:87px;height:87px;z-index:1}.equipped-weapon .weapon-punch{width:55px;height:55px}.equipped-weapon .weapon-cast{width:65px;height:65px}
.equipped-weapon .weapon-sprite{opacity:1;filter:drop-shadow(0 3px 2px #000) drop-shadow(0 0 3px #d2e8fd33)}
.equipped-weapon .solar-armament{filter:sepia(.6) saturate(2) drop-shadow(0 0 9px #ffb425)}
.battle-stage[data-camera-mode="fixed"] .battle-equipment-plane,.battle-stage[data-density="dense"] .battle-equipment-plane{transform:none!important}
.battle-stage[data-camera-mode="cinematic"][data-shot="track"] .battle-equipment-plane{animation:camera-track var(--beat-duration) cubic-bezier(.2,.6,.3,1) both}
.battle-stage[data-camera-mode="cinematic"][data-shot="clash"] .battle-equipment-plane{animation:camera-clash var(--beat-duration) ease both}
.battle-stage[data-density="dense"] .equipped-weapon .weapon-arm{width:48px;height:48px;top:20px;opacity:1}
.battle-token{overflow:visible;width:56px;height:56px;display:block}.battle-token>span{width:56px;height:56px;display:grid;place-items:center;border-radius:12px 4px 12px 4px!important;background:linear-gradient(145deg,#12263a,#07121c)!important}
.battle-token.side-1>span{background:linear-gradient(145deg,#322136,#100f1c)!important}
.battle-token>small{position:absolute;top:65px;left:50%;transform:translateX(-50%);margin:0!important;width:max-content;max-width:130px;text-align:center}.battle-token>i{position:absolute;top:58px;left:50%;transform:translateX(-50%);width:44px;margin:0!important}.battle-token.kind-boss{width:88px;height:88px}.battle-token.kind-boss>span{width:88px;height:88px}.battle-token.kind-boss>small{top:97px}.battle-token.kind-boss>i{top:91px}.battle-token-field{z-index:4}.battle-fx-plane{z-index:7}
.battle-stage[data-density="dense"] .battle-token{width:28px;height:28px}.battle-stage[data-density="dense"] .battle-token>span{width:28px;height:28px}.battle-stage[data-density="dense"] .battle-token>small{top:39px}.battle-stage[data-density="dense"] .battle-token>i{top:31px;width:25px}
.battle-technique-host{position:absolute;inset:0;z-index:10;pointer-events:none;overflow:hidden}
.technique-stage{position:absolute;inset:0;--spectacle-hue:40;animation:technique-envelope var(--beat-duration,2600ms) ease both}
.technique-shade{position:absolute;inset:0;background:linear-gradient(165deg,hsl(var(--spectacle-hue) 65% 12%/.94),transparent 44%),linear-gradient(90deg,transparent 65%,hsl(var(--spectacle-hue) 65% 12%/.45));border-top:3px solid hsl(var(--spectacle-hue) 70% 70%/.5)}
.technique-title{position:absolute;top:38px;left:28px;right:22%;display:grid;gap:8px;text-shadow:0 2px 12px #000}
.technique-title>span{font:600 .75rem/1.5 monospace;letter-spacing:.16em;color:hsl(var(--spectacle-hue) 80% 80%)}
.technique-title>strong{font:700 clamp(1.2rem,2.8vw,2.5rem)/1.12 Georgia,serif;color:#fff3dc;max-width:850px;text-wrap:balance}
.technique-title>q{font:italic 1rem/1.45 Georgia,serif;color:#e3e4df;max-width:560px}
.technique-title>small{font-size:.875rem;color:#d3d9cf}
.technique-armament{position:absolute;width:200px;height:200px;right:3%;top:70px;opacity:.8;transform:rotate(-20deg);animation:armament-reveal min(1300ms,var(--beat-duration)) cubic-bezier(.15,.8,.3,1) both}
.technique-release .technique-title{top:40px}.technique-release .technique-shade{background:linear-gradient(180deg,#03090cbb,transparent 40%)}
.technique-quiet{animation:none}.technique-quiet .technique-title{top:32px;right:25px;gap:4px}.technique-quiet .technique-title>strong{font-size:1.15rem}.technique-quiet .technique-title>q{font-size:.875rem}.technique-quiet .technique-shade{background:linear-gradient(#02070bcc,transparent 28%)}
.battle-stage:has(.technique-stage) .battle-cue-host{display:none}.battle-stage:has(.technique-stage) .battle-dialogue{max-width:340px}
.aoe-spectacle,.motion-spectacle,.motion-spectacle>svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.aoe-spectacle{color:hsl(var(--spectacle-hue) 85% 74%);filter:drop-shadow(0 0 3px hsl(var(--spectacle-hue) 80% 60%/.5))}
.aoe-spectacle path,.aoe-spectacle circle,.aoe-spectacle ellipse{vector-effect:non-scaling-stroke}
.footprint-edge{fill:none;stroke:currentColor;stroke-width:1.5;stroke-dasharray:6 5}.footprint-light{fill:currentColor;opacity:.06}
.released .footprint-edge{stroke-dasharray:none;stroke-width:2;animation:impact-fade min(1400ms,var(--beat-duration)) both}.released .footprint-light{animation:area-bloom min(1500ms,var(--beat-duration)) both}
.volley-ray,.blast-ray,.rift-cut,.crystal-ray,.pressure-wave{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;opacity:0;animation:volley-arrive min(1100ms,var(--beat-duration)) var(--trail-delay) ease-out both}
.volley-ray{stroke-dasharray:10 12}.blast-ray{stroke-width:3}.rift-cut{stroke-width:4}.crystal-ray{fill:#afebff44;stroke:#ccefff}.pressure-wave{stroke-width:2}
.charging .volley-ray,.charging .blast-ray,.charging .rift-cut,.charging .crystal-ray,.charging .pressure-wave{animation:charge-trace min(1600ms,var(--beat-duration)) var(--trail-delay) ease both;stroke-width:1;opacity:.3}
.shock-front{fill:none;stroke:currentColor;stroke-width:3;transform-box:fill-box;transform-origin:center;animation:shock-expand min(1350ms,var(--beat-duration)) ease-out both}
.shock-core{fill:#fff1cc;opacity:0;animation:core-release min(700ms,var(--beat-duration)) ease-out both}
.charging .shock-front{stroke-width:1;stroke-dasharray:3 8;animation:charge-trace min(1800ms,var(--beat-duration)) both}.charging .shock-core{display:none}
.family-quills,.family-tendrils{color:#bf9cf0}.family-quills .volley-ray{stroke:#c5a3f4;stroke-width:2.5}.family-tendrils .volley-ray{stroke-width:4;stroke-dasharray:12 2}.family-solar{color:#ffca6b}.family-solar .blast-ray{stroke-width:5}.family-water{color:#83dceb}.family-heat{color:#f8a467}.family-gravity .pressure-wave{stroke:#d9b3ff;stroke-width:3}.family-chains .volley-ray{stroke-dasharray:3 2}.family-temporal .rift-cut{stroke-dasharray:7 6}
.motion-spectacle svg{color:hsl(var(--spectacle-hue) 85% 78%)}.mach-trail,.combo-trajectory{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;vector-effect:non-scaling-stroke;stroke-dasharray:8 4;animation:impact-fade min(650ms,var(--beat-duration)) both}
.sonic-cone{fill:none;stroke:#f0debf;stroke-width:2;vector-effect:non-scaling-stroke;transform-box:fill-box;transform-origin:center;animation:shock-expand min(850ms,var(--beat-duration)) both}
.combo-trajectory{stroke-width:3;stroke-dasharray:80;animation:volley-arrive min(700ms,var(--beat-duration)) var(--hit-delay) both}
.combo-contact{stroke:#ffead0;stroke-width:4;vector-effect:non-scaling-stroke;animation:combo-impact min(450ms,var(--beat-duration)) var(--hit-delay) both}
.motion-ghost{position:absolute;width:65px;height:65px;transform:translate(-50%,-50%);opacity:var(--ghost-alpha);filter:drop-shadow(0 0 5px hsl(var(--spectacle-hue) 80% 65%));animation:ghost-pass min(700ms,var(--beat-duration)) var(--ghost-delay) both}.rift-ghost{filter:hue-rotate(35deg) drop-shadow(0 0 7px #aabbff)}
.combo-damage{position:absolute;color:#ffe1ad;font:700 .9375rem/1.2 monospace;text-shadow:0 2px 4px #000;animation:combo-label min(1100ms,var(--beat-duration)) var(--hit-delay) both;transform:translate(-50%,-50%)}
.combo-counter{position:absolute;font:700 .75rem/1.2 monospace;letter-spacing:.1em;color:#ffe2a7;padding:7px 10px;background:#071019d9;border-left:2px solid #e8ba79;white-space:nowrap}.combo-counter b{font-size:1.5rem;margin-right:5px}
.battle-stage[data-type="regenerate"] .battle-token.acting>span{box-shadow:0 0 30px #82d6b555,inset 0 0 20px #67b19144}
.battle-stage[data-solar="true"] .battle-equipment-plane .solar-armament{filter:sepia(.5) saturate(2) drop-shadow(0 0 15px #ffb92bbb)}
.spectacle-still *{animation:none!important}.spectacle-still .motion-ghost{display:none}.spectacle-still .volley-ray,.spectacle-still .blast-ray,.spectacle-still .rift-cut,.spectacle-still .crystal-ray,.spectacle-still .pressure-wave{opacity:.3}.spectacle-still .shock-core{display:none}
.is-paused .battle-equipment-plane *,.is-paused .battle-technique-host *,.is-paused .battle-equipment-plane{animation-play-state:paused!important}
@keyframes technique-envelope{0%{opacity:0}8%,76%{opacity:1}100%{opacity:0}}
@keyframes armament-reveal{from{transform:translateX(50px) rotate(-40deg);opacity:0}to{transform:translateX(0) rotate(-20deg);opacity:.8}}
@keyframes volley-arrive{0%{opacity:0;stroke-dashoffset:30}15%,45%{opacity:.9}100%{opacity:0;stroke-dashoffset:-30}}
@keyframes charge-trace{0%{opacity:0;stroke-dashoffset:30}60%{opacity:.25}100%{opacity:.65;stroke-dashoffset:0}}
@keyframes shock-expand{0%{transform:scale(.15);opacity:.8}100%{transform:scale(1.25);opacity:0}}
@keyframes core-release{0%{opacity:.8}100%{opacity:0}}
@keyframes area-bloom{0%{opacity:.23}100%{opacity:.015}}
@keyframes impact-fade{0%,20%{opacity:.9}100%{opacity:0}}
@keyframes ghost-pass{0%{opacity:0}20%{opacity:var(--ghost-alpha)}100%{opacity:0}}
@keyframes combo-impact{0%{opacity:0}20%,35%{opacity:1}100%{opacity:0}}
@keyframes combo-label{0%{opacity:0;translate:0 8px}15%,65%{opacity:1}100%{opacity:0;translate:0 -10px}}
@keyframes combo-route{0%{transform:translate(calc(-50% + var(--combo-x0)),calc(-50% + var(--combo-y0)))}20%{transform:translate(calc(-50% + var(--combo-x1)),calc(-50% + var(--combo-y1)))}40%{transform:translate(calc(-50% + var(--combo-x2)),calc(-50% + var(--combo-y2)))}60%{transform:translate(calc(-50% + var(--combo-x3)),calc(-50% + var(--combo-y3)))}80%{transform:translate(calc(-50% + var(--combo-x4)),calc(-50% + var(--combo-y4)))}100%{transform:translate(calc(-50% + var(--combo-x5)),calc(-50% + var(--combo-y5)))}}
@media(max-width:750px){.battle-token{width:39px;height:39px}.battle-token>span{width:39px;height:39px}.battle-token>small{top:48px;max-width:100px}.battle-token>i{top:42px;width:31px}.battle-token.kind-boss,.battle-token.kind-boss>span{width:65px;height:65px}.battle-token.kind-boss>small{top:74px}.battle-token.kind-boss>i{top:68px}.battle-equipment-plane{inset:80px 7% 185px}.equipped-weapon{width:39px;height:39px}.equipped-weapon .weapon-arm{width:68px;height:68px;top:19px}.equipped-weapon .weapon-punch{width:45px;height:45px}.technique-title{left:16px;right:17px;top:40px;gap:5px}.technique-title>span{font-size:.75rem;letter-spacing:.05em}.technique-title>strong{font-size:1.3rem}.technique-title>q{font-size:.875rem;max-width:80%}.technique-armament{width:105px;height:105px;right:0;top:110px;opacity:.5}.combo-counter{font-size:.65rem;letter-spacing:0}.combo-counter b{font-size:1.1rem}}
@media(prefers-reduced-motion:reduce){.battle-equipment-plane{transform:none!important}.battle-equipment-plane *,.battle-technique-host *{animation:none!important}.technique-armament,.motion-ghost{display:none}.technique-stage{animation:none}.volley-ray,.blast-ray,.rift-cut,.crystal-ray,.pressure-wave{opacity:.3}}
html[data-motion="quiet"] .battle-equipment-plane{transform:none!important}html[data-motion="quiet"] .technique-armament,html[data-motion="quiet"] .motion-ghost{display:none}
