/* Primitive Shell is rendered by the shared battle clock; no independent animation. */
.primitive-breath{position:absolute;left:var(--breath-x,0px);top:var(--breath-y,0px);width:var(--breath-length,0px);height:var(--breath-width,0px);overflow:visible;pointer-events:none;z-index:7;opacity:var(--breath-alpha,0);transform-origin:0 50%;transform:translateY(-50%) rotate(var(--breath-angle,0deg));filter:drop-shadow(0 0 5px #98eaff88)}
.primitive-breath .ice-mist{fill:#a3efff;opacity:.12;filter:blur(8px)}
.primitive-breath .ice-facets{fill:url('#primitive-ice');stroke:#dcffff;stroke-opacity:.7;stroke-width:1.4}
.primitive-breath .ice-facets path:nth-child(2){fill:#4f94d9;fill-opacity:.32}
.primitive-breath .ice-facets path:nth-child(3){fill:#efffff;fill-opacity:.42}
.primitive-breath .ice-facets path:nth-child(4){fill:#53c5f1;fill-opacity:.15}
.primitive-breath .ice-ribs{stroke:#ebffff;stroke-width:2;opacity:.8;stroke-dasharray:15 8;stroke-dashoffset:var(--breath-phase,0)}
.primitive-shell{position:absolute;inset:0;pointer-events:none;z-index:4;transform-style:preserve-3d}
.primitive-shell-art,.primitive-shell-wire{position:absolute;inset:0;width:100%;height:100%;opacity:var(--shell-alpha,0);clip-path:circle(var(--shell-reveal,0%) at 69% 33%)}
.primitive-shell-art{background:url('/assets/corruption-vector.webp') center/contain no-repeat;filter:grayscale(1) sepia(1) saturate(5) hue-rotate(145deg) brightness(1.45);mask-image:radial-gradient(ellipse 9% 10% at 69% 31%,transparent 90%,#000 100%),radial-gradient(ellipse 5% 7% at 20% 54%,transparent 85%,#000 100%),radial-gradient(ellipse 4% 6% at 87% 49%,transparent 85%,#000 100%),radial-gradient(ellipse 4% 6% at 36% 73%,transparent 85%,#000 100%),radial-gradient(ellipse 4% 6% at 80% 75%,transparent 85%,#000 100%);mask-composite:intersect}
.team-corruption[data-primitive-shell-art=ready] .primitive-shell-art{background-image:url('/assets/fighters/corruption-primitive-shell.png');filter:drop-shadow(3px 3px 1px #0e73bb88) drop-shadow(-2px -2px 1px #ddffff88);mask-image:none}
.primitive-shell-wire{overflow:visible;fill:none;stroke:#dfffff;stroke-width:4;filter:drop-shadow(2px 3px 1px #287bb8);transform:translate3d(0,0,4px)}
.primitive-shell-wire .shell-back{stroke:#2f8ac4;stroke-width:8;fill:#18395566}
.primitive-shell-wire .shell-facets{stroke-width:2;stroke:#9fefff;opacity:.8}
.primitive-shard{position:absolute;left:calc(20% + var(--shard-index)*5%);top:calc(20% + var(--shard-index)*4%);width:8%;height:13%;background:linear-gradient(135deg,#f3ffffdd,#78d9ff99 45%,#28689455 46%);border:1px solid #c6f8ff;clip-path:polygon(50% 0,100% 37%,60% 100%,0 64%);opacity:var(--shard-alpha,0);transform:translate3d(var(--shard-x,0px),var(--shard-y,0px),12px) rotate(var(--shard-spin,0deg))}
.team-scene .team-corruption.is-primitive-target .team-sprite-idle{opacity:calc(var(--enemy-fade,1)*(1 - var(--shell-alpha,0)))}
.team-scene .team-corruption:is(.is-primitive-target,.is-face-combo) .team-character-float{animation:none!important;transform:none}
.team-scene .team-corruption.is-primitive-target .team-sprite-damage{opacity:0}
/* The full-team Tripo bolt keeps its primitive ice identity on the existing timing. */
.combo-projectile[data-kind=tripo]{width:57px;height:38px;border:2px solid #d6ffff;border-radius:0;clip-path:polygon(0 50%,30% 0,78% 0,100% 50%,78% 100%,30% 100%);background:linear-gradient(150deg,#efffff 0 23%,#8de7ff77 24% 48%,#286fae 49% 53%,#b8f6ff99 54%);box-shadow:inset 0 0 10px #d9ffff}
.combo-projectile[data-kind=tripo] i{inset:5px 12px;border:1px solid #fff;border-radius:0;transform:rotate(30deg)}
.combo-projectile[data-kind=tripo] b{inset:9px -4px;border:1px solid #b4efff;border-radius:0;transform:rotate(-22deg)}
@media(prefers-reduced-motion:reduce){.primitive-breath,.primitive-shard{display:none}.primitive-shell-art,.primitive-shell-wire{clip-path:none}.team-scene .team-corruption.is-primitive-target .team-sprite-idle{opacity:0}}
/* Precision moves ease into one coordinate plane before contact. Perspective, pointer
   tilt, breakout and inspection return on the same pausable clock after the recovery. */
.team-scene[data-precision-member] .team-plane{transform:rotateX(calc(var(--team-y)*-2deg*var(--precision-rest,1))) rotateY(calc(var(--team-x)*3.6deg*var(--precision-rest,1))) scale(var(--super-zoom,1))}
.team-scene[data-precision-member] .team-corruption,
.team-scene[data-precision-member=tripo] .team-tripo,
.team-scene[data-precision-member=minimax] .team-minimax{transform:translate3d(calc(var(--team-x)*var(--parallax)*var(--precision-rest,1)),calc((var(--team-y)*var(--parallax)*.65 + var(--inspection-shift,0px) - var(--fighter-breakout,0px))*var(--precision-rest,1)),calc((var(--z) + var(--foreground-depth,0px) + var(--battle-depth) + var(--inspection-depth,0px))*var(--precision-rest,1))) scale(calc(1 + (var(--inspection-scale,1) - 1)*var(--precision-rest,1)))}
@media(prefers-reduced-motion:reduce){.team-scene[data-precision-member] .team-plane,.team-scene[data-precision-member] .team-corruption,.team-scene[data-precision-member=tripo] .team-tripo,.team-scene[data-precision-member=minimax] .team-minimax{transform:none}}
/* Idle float cannot contribute a second, independently paused targeting offset. */
.team-scene[data-precision-member=tripo] .team-tripo .team-character-float,
.team-scene[data-precision-member=minimax] .team-minimax .team-character-float{animation:none!important;transform:none}
