/* =========================================================
   SHOCKER v69 — adaptive render governor
   The presentation stays intact at normal load. During an
   overlapping FX burst, only redundant trails are thinned.
   ========================================================= */

#v68-motion-layer,
#v67-fx-layer,
#v67-battle-atmosphere {
    transform:translateZ(0);
}

#v68-motion-layer > *,
#v67-fx-layer > * {
    backface-visibility:hidden;
}

/* Filters still render normally; excluding them from will-change avoids
   reserving large compositor surfaces for every ambient/effect element. */
#v67-battle-atmosphere > div,
#v67-fx-layer > *,
.v68-flight-card,
.v68-flight-ghost {
    will-change:transform,opacity !important;
}

/* Foreground cards and their impact conceal most background movement.
   Pausing those hidden animations substantially lowers overlapping work. */
html.v69-foreground-fx #v64-battle-backdrop::before,
html.v69-foreground-fx #v67-battle-atmosphere *,
html.v69-foreground-fx #v67-battle-atmosphere *::before,
html.v69-foreground-fx #v67-battle-atmosphere *::after,
html.v69-foreground-fx body.v45-battle-active.v64-shocker-battle .field-area::before,
html.v69-foreground-fx body.v45-battle-active.v64-shocker-battle .deck-pile:not(.v68-deck-launch):not(.v68-deck-absorb) {
    animation-play-state:paused !important;
}

/* These nodes are only the extra copy of an already-visible trail/particle.
   The flying card, beam, landing flash, rings and rays remain unchanged. */
.v68-flight-ghost[data-v69-secondary="true"][data-v69-cull="true"],
.v68-suit-spark[data-v69-overflow="true"][data-v69-cull="true"] {
    display:none !important;
}

/* A sustained slow frame rate enables the same conservative fallback.
   It affects only redundant motes/trails, never the main card animation. */
html.v69-low-fps #v67-battle-atmosphere .v67-mote:nth-of-type(n+13),
html.v69-low-fps .v68-flight-ghost[data-v69-secondary="true"],
html.v69-low-fps .v68-suit-spark[data-v69-overflow="true"],
html.v69-low-fps #v68-turn-arrival .v68-turn-particle:nth-of-type(n+13) {
    display:none !important;
}

/* Sorting reuses the existing card nodes, so selections and click handlers
   survive. Containment keeps the single relayout local to the hand row. */
#hand-zone.v69-sorting {
    contain:layout style;
}
