/* ===== Valforge — animations des sprites ===== */

.sprite { display: block; margin: 0 auto; overflow: visible; }
.sprite .sprite-body { transform-origin: 50px 116px; animation: idleBreathe 2.6s ease-in-out infinite; }
.sprite .sprite-head { transform-origin: 50px 46px; animation: idleHead 2.6s ease-in-out infinite; }
.sprite .arm-weapon { transform-origin: 74px 60px; animation: idleWeapon 2.6s ease-in-out infinite; }
.sprite .off-hand { transform-origin: 24px 60px; }
.sprite .orb { animation: orbPulse 2s ease-in-out infinite; }
.sprite .halo { animation: haloGlow 2.4s ease-in-out infinite; }

/* Désynchronise les idle pour que l'armée ne respire pas à l'unisson */
.unit:nth-child(2n) .sprite .sprite-body,
.unit:nth-child(2n) .sprite .sprite-head,
.unit:nth-child(2n) .sprite .arm-weapon { animation-delay: -0.9s; }
.unit:nth-child(3n) .sprite .sprite-body,
.unit:nth-child(3n) .sprite .sprite-head,
.unit:nth-child(3n) .sprite .arm-weapon { animation-delay: -1.7s; }

@keyframes idleBreathe {
  0%, 100% { transform: scaleY(1); }
  50% { transform: scaleY(0.97) translateY(1px); }
}
@keyframes idleHead {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(-2.5deg) translateY(1px); }
}
@keyframes idleWeapon {
  0%, 100% { transform: rotate(0deg); }
  50% { transform: rotate(3deg); }
}
@keyframes orbPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}
@keyframes haloGlow {
  0%, 100% { opacity: 0.9; filter: drop-shadow(0 0 2px #f5df8e); }
  50% { opacity: 0.5; filter: drop-shadow(0 0 6px #f5df8e); }
}

/* --- Attaque : fente + moulinet d'arme --- */
.unit.attack-up .sprite .arm-weapon,
.unit.attack-down .sprite .arm-weapon {
  animation: weaponSwing 0.35s ease;
}
@keyframes weaponSwing {
  0% { transform: rotate(0deg); }
  35% { transform: rotate(-55deg); }
  65% { transform: rotate(28deg); }
  100% { transform: rotate(0deg); }
}
.unit.attack-up .sprite .sprite-body,
.unit.attack-down .sprite .sprite-body {
  animation: bodyLunge 0.35s ease;
}
@keyframes bodyLunge {
  0% { transform: none; }
  40% { transform: translateY(-4px) scaleY(1.04); }
  100% { transform: none; }
}

/* --- Incantation : l'arme se lève, le sprite s'illumine --- */
.unit.casting .sprite .arm-weapon { animation: castRaise 0.55s ease; }
@keyframes castRaise {
  0% { transform: rotate(0deg); }
  40% { transform: rotate(-80deg); }
  75% { transform: rotate(-70deg); }
  100% { transform: rotate(0deg); }
}
.unit.casting .sprite { filter: drop-shadow(0 0 10px var(--gold)) brightness(1.25); }

/* --- Touché : recul + teinte rouge --- */
.unit.hit .sprite { animation: spriteHurt 0.4s ease; }
@keyframes spriteHurt {
  0% { transform: translateX(0); filter: none; }
  25% { transform: translateX(-4px); filter: sepia(1) saturate(4) hue-rotate(-45deg) brightness(1.1); }
  55% { transform: translateX(3px); filter: sepia(0.6) saturate(3) hue-rotate(-45deg); }
  100% { transform: translateX(0); filter: none; }
}

/* --- Soigné : lueur verte --- */
.unit.healed .sprite { filter: drop-shadow(0 0 8px #5fd668) brightness(1.15); transition: filter 0.4s; }

/* --- Mort : bascule et disparaît --- */
.unit.dead .sprite .sprite-body { animation: none; }
.unit.dead .sprite {
  animation: spriteDeath 0.6s ease forwards;
}
@keyframes spriteDeath {
  0% { transform: rotate(0deg); opacity: 1; }
  60% { transform: rotate(80deg) translateY(8px); opacity: 0.7; }
  100% { transform: rotate(90deg) translateY(12px); opacity: 0.25; filter: grayscale(1); }
}

/* Sprites hors combat (roster, fiche héros) : idle uniquement */
.sprite-static .sprite .sprite-body,
.sprite-static .sprite .sprite-head,
.sprite-static .sprite .arm-weapon { animation-duration: 3s; }
