/* ======================= 10. ANIMATIONS ======================= */

@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeInSoft { from { opacity: 0; filter: blur(6px); } to { opacity: 1; filter: blur(0); } }
@keyframes popIn { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } }
@keyframes slideIn { from { opacity: 0; transform: translateX(-8px); } to { opacity: 1; transform: translateX(0); } }
@keyframes toastIn { from { opacity: 0; transform: translateY(-16px); } to { opacity: 1; transform: translateY(0); } }
@keyframes toastOut { to { opacity: 0; transform: translateY(-10px); } }
@keyframes floatUp { to { transform: translateY(-48px); opacity: 0; } }
@keyframes blink { 50% { opacity: 0.45; } }
@keyframes flashOut { from { opacity: 1; } to { opacity: 0; } }

@keyframes kenBurns {
    0% { transform: scale(1.08) translate3d(-1.5%, -1%, 0); }
    100% { transform: scale(1.2) translate3d(1.5%, 1.5%, 0); }
}

@keyframes drift {
    0% { transform: translate3d(-3%, -2%, 0) scale(1); }
    100% { transform: translate3d(3%, 2%, 0) scale(1.14); }
}

@keyframes breathe {
    0%, 100% { opacity: 0.85; transform: scale(1); }
    50% { opacity: 1; transform: scale(1.06); }
}

@keyframes bossGlow { 50% { box-shadow: inset 0 0 26px rgba(255, 59, 92, 0.75); } }
@keyframes chainPulse { 50% { transform: scale(1.1); } }

/* Le cœur bat quand les PV sont au plus bas : une échelle, jamais une ombre animée. */
@keyframes orbAlarm {
    0%, 100% { transform: scale(1); }
    15% { transform: scale(1.08); }
    30% { transform: scale(1); }
    45% { transform: scale(1.05); }
}



@keyframes pulseHit {
    0% { background: #7a1a24; transform: scale(1); }
    40% { transform: scale(1.14); }
    100% { transform: scale(1); }
}

@keyframes pulseGood {
    0% { background: #1a5c34; transform: scale(1); }
    40% { transform: scale(1.14); }
    100% { transform: scale(1); }
}

@keyframes bannerIn {
    from { opacity: 0; transform: scale(0.86); letter-spacing: 0.4em; }
    to { opacity: 1; transform: scale(1); }
}

@keyframes bannerOut { to { opacity: 0; transform: scale(1.08); } }
@keyframes shakeLight { 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } }

@keyframes shakeHard {
    20% { transform: translate(-9px, 3px) rotate(-1deg); }
    60% { transform: translate(9px, -3px) rotate(1deg); }
}

.shake-light { animation: shakeLight 0.22s ease; }
.shake-hard { animation: shakeHard 0.34s ease; }

