.fx-card-play{animation:cardCast .24s cubic-bezier(.2,.8,.2,1) forwards!important;pointer-events:none}.fx-attack{animation:enemyLunge .42s ease}.fx-hit{animation:takeHit .42s ease}.fx-defend{animation:defendPulse .58s ease}.fx-heal{animation:healGlow .8s ease}.fx-abyss{animation:abyssCast .8s ease}.fx-shake{animation:screenShake .3s linear}.fx-fade{animation:fadePulse .55s ease}.fx-turn{animation:turnReveal .5s ease}
.floating-number{position:absolute;z-index:30;left:50%;top:47%;transform:translate(-50%,0);font:700 24px var(--display);color:#ef665f;text-shadow:0 2px 12px #000;pointer-events:none;animation:floatNumber .9s ease forwards}.floating-number.heal{color:#77d39a}.floating-number.block{color:#79bde8}.floating-number.corrupt{color:#c482e8}
.action-flash{position:absolute;z-index:20;inset:0;pointer-events:none;opacity:0;background:radial-gradient(circle at 50% 55%,rgba(255,255,255,.35),transparent 50%);animation:actionFlash .45s ease}.action-flash.abyss{background:radial-gradient(circle at 50% 55%,rgba(141,48,170,.55),transparent 58%)}.action-flash.heal{background:radial-gradient(circle at 30% 60%,rgba(80,190,120,.36),transparent 45%)}
.turn-order{display:flex;gap:5px;margin:-4px 0 12px}.turn-token{flex:1;padding:6px 3px;text-align:center;border:1px solid var(--line);background:rgba(0,0,0,.16);font-size:7px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.turn-token.current{border-color:var(--gold);color:var(--gold);background:rgba(199,167,107,.08)}
.damage-vignette{position:fixed;z-index:40;inset:0;pointer-events:none;box-shadow:inset 0 0 130px 35px rgba(160,28,25,.75);opacity:0;animation:damageVignette .5s ease}.heal-particles{position:absolute;inset:0;pointer-events:none;overflow:hidden}.heal-particles i{position:absolute;bottom:20%;width:4px;height:4px;border-radius:50%;background:#8ae3a8;box-shadow:0 0 8px #8ae3a8;animation:riseParticle .9s ease forwards}
@keyframes cardCast{0%{transform:translateY(0) scale(1)}45%{transform:translateY(-34px) scale(1.12);filter:brightness(1.5)}100%{transform:translateY(-55px) scale(.85);opacity:0}}
@keyframes enemyLunge{0%,100%{transform:translateX(0)}38%{transform:translateX(-28px) scale(1.05)}58%{transform:translateX(8px)}}
@keyframes takeHit{0%,100%{transform:translateX(0);filter:none}20%{transform:translateX(-10px);filter:brightness(2) saturate(.3)}40%{transform:translateX(9px)}60%{transform:translateX(-5px)}}
@keyframes defendPulse{0%,100%{filter:none}40%{filter:drop-shadow(0 0 25px #78bde8) brightness(1.35);transform:scale(1.03)}}
@keyframes healGlow{0%,100%{filter:none}40%{filter:drop-shadow(0 0 28px #68d693) brightness(1.3)}}
@keyframes abyssCast{0%,100%{filter:none}30%{filter:drop-shadow(0 0 35px #b454dd) brightness(1.5);transform:scale(1.04)}55%{filter:hue-rotate(40deg) brightness(.8)}}
@keyframes screenShake{0%,100%{transform:translate(0)}20%{transform:translate(-5px,3px)}40%{transform:translate(5px,-2px)}60%{transform:translate(-3px,-2px)}80%{transform:translate(3px,2px)}}
@keyframes floatNumber{0%{opacity:0;transform:translate(-50%,10px) scale(.7)}20%{opacity:1;transform:translate(-50%,-5px) scale(1.15)}100%{opacity:0;transform:translate(-50%,-55px) scale(.9)}}
@keyframes actionFlash{0%,100%{opacity:0}35%{opacity:1}}@keyframes turnReveal{0%{opacity:.3;transform:translateY(-6px)}100%{opacity:1;transform:none}}@keyframes damageVignette{0%,100%{opacity:0}30%{opacity:1}}@keyframes riseParticle{0%{opacity:0;transform:translateY(0) scale(.5)}25%{opacity:1}100%{opacity:0;transform:translateY(-110px) scale(1.4)}}
@media(prefers-reduced-motion:reduce){.fx-card-play,.fx-attack,.fx-hit,.fx-defend,.fx-heal,.fx-abyss,.fx-shake,.fx-fade,.fx-turn,.floating-number,.action-flash,.damage-vignette,.heal-particles i{animation-duration:.01ms!important;animation-iteration-count:1!important}}
