/* ============================================================
   03-ANIMATIONS — Bibliothèque partagée d'animations RPG
   ============================================================ */

/* ── FADE ── */
@keyframes rpg-fadeIn{from{opacity:0}to{opacity:1}}
@keyframes rpg-fadeInUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes rpg-fadeInDown{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}
@keyframes rpg-fadeInLeft{from{opacity:0;transform:translateX(-12px)}to{opacity:1;transform:translateX(0)}}
@keyframes rpg-fadeInRight{from{opacity:0;transform:translateX(12px)}to{opacity:1;transform:translateX(0)}}
@keyframes rpg-fadeOut{from{opacity:1}to{opacity:0}}

/* ── POP / SCALE ── */
@keyframes rpg-popIn{0%{opacity:0;transform:scale(.6)}70%{transform:scale(1.05)}100%{opacity:1;transform:scale(1)}}
@keyframes rpg-popOut{from{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.6)}}
@keyframes rpg-scaleIn{from{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}

/* ── SHAKE ── */
@keyframes rpg-shake{0%,100%{transform:translateX(0)}15%{transform:translateX(-5px)}30%{transform:translateX(5px)}45%{transform:translateX(-4px)}60%{transform:translateX(3px)}75%{transform:translateX(-2px)}90%{transform:translateX(1px)}}
@keyframes rpg-shakeHard{0%,100%{transform:translate(0)}10%{transform:translate(-8px,3px)}20%{transform:translate(8px,-3px)}30%{transform:translate(-6px,4px)}40%{transform:translate(6px,-2px)}50%{transform:translate(-4px,2px)}60%{transform:translate(4px,-3px)}70%{transform:translate(-2px,1px)}80%{transform:translate(2px,-1px)}}

/* ── PULSE ── */
@keyframes rpg-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
@keyframes rpg-pulseGlow{0%,100%{box-shadow:0 0 5px rgba(201,168,76,.2)}50%{box-shadow:0 0 20px rgba(201,168,76,.5)}}
@keyframes rpg-pulseLowHp{0%,100%{filter:brightness(1)}50%{filter:brightness(1.3)}}

/* ── SLIDE ── */
@keyframes rpg-slideUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes rpg-slideDown{from{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}
@keyframes rpg-slideInLeft{from{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}
@keyframes rpg-slideInRight{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}

/* ── SHIMMER ── */
@keyframes rpg-shimmer{0%{background-position:-200% center}100%{background-position:200% center}}
@keyframes rpg-goldShimmer{0%{text-shadow:0 0 5px rgba(201,168,76,.3)}50%{text-shadow:0 0 15px rgba(201,168,76,.6)}100%{text-shadow:0 0 5px rgba(201,168,76,.3)}}
@keyframes rpg-barShimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}

/* ── FLOAT ── */
@keyframes rpg-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes rpg-floatSlow{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}

/* ── GLOW ── */
@keyframes rpg-glowGold{0%,100%{box-shadow:0 0 5px rgba(201,168,76,.2)}50%{box-shadow:0 0 20px rgba(201,168,76,.5)}}
@keyframes rpg-glowRed{0%,100%{box-shadow:0 0 5px rgba(231,76,60,.2)}50%{box-shadow:0 0 20px rgba(231,76,60,.5)}}
@keyframes rpg-glowGreen{0%,100%{box-shadow:0 0 5px rgba(46,204,113,.2)}50%{box-shadow:0 0 20px rgba(46,204,113,.5)}}
@keyframes rpg-glowBlue{0%,100%{box-shadow:0 0 5px rgba(74,144,217,.2)}50%{box-shadow:0 0 20px rgba(74,144,217,.5)}}
@keyframes rpg-glowPurple{0%,100%{box-shadow:0 0 5px rgba(168,85,247,.2)}50%{box-shadow:0 0 20px rgba(168,85,247,.5)}}

/* ── SPIN ── */
@keyframes rpg-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
@keyframes rpg-spinSlow{from{transform:rotate(0)}to{transform:rotate(360deg)}}

/* ── COMBAT ── */
@keyframes rpg-critFlash{0%{background:rgba(255,50,50,.3)}100%{background:transparent}}
@keyframes rpg-healFlash{0%{background:rgba(50,255,100,.3)}100%{background:transparent}}
@keyframes rpg-damageFloat{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-30px)}}
@keyframes rpg-idleBreathe{0%,100%{transform:scale(1)}50%{transform:scale(1.02)}}

/* ── UTILITY CLASSES ── */
.anim-fade-in{animation:rpg-fadeIn var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-fade-in-up{animation:rpg-fadeInUp var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-fade-in-down{animation:rpg-fadeInDown var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-fade-in-left{animation:rpg-fadeInLeft var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-fade-in-right{animation:rpg-fadeInRight var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-pop-in{animation:rpg-popIn var(--dur-slow,.55s) var(--ease-magic,cubic-bezier(.34,1.56,.64,1)) both}
.anim-scale-in{animation:rpg-scaleIn var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-shake{animation:rpg-shake .5s ease-out}
.anim-shake-hard{animation:rpg-shakeHard .6s ease-out}
.anim-pulse{animation:rpg-pulse 2s ease-in-out infinite}
.anim-pulse-glow{animation:rpg-pulseGlow 2s ease-in-out infinite}
.anim-slide-up{animation:rpg-slideUp var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-slide-down{animation:rpg-slideDown var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-slide-left{animation:rpg-slideInLeft var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-slide-right{animation:rpg-slideInRight var(--dur-base,.3s) var(--ease-smooth,ease) both}
.anim-shimmer{background:linear-gradient(90deg,transparent 30%,rgba(255,255,255,.08) 50%,transparent 70%);background-size:200% 100%;animation:rpg-shimmer 3s linear infinite}
.anim-gold-shimmer{animation:rpg-goldShimmer 3s ease-in-out infinite}
.anim-float{animation:rpg-float 3s ease-in-out infinite}
.anim-float-slow{animation:rpg-floatSlow 4s ease-in-out infinite}
.anim-glow-gold{animation:rpg-glowGold 2s ease-in-out infinite}
.anim-glow-red{animation:rpg-glowRed 2s ease-in-out infinite}
.anim-glow-green{animation:rpg-glowGreen 2s ease-in-out infinite}
.anim-glow-blue{animation:rpg-glowBlue 2s ease-in-out infinite}
.anim-glow-purple{animation:rpg-glowPurple 2s ease-in-out infinite}
.anim-spin{animation:rpg-spin 1s linear infinite}
.anim-spin-slow{animation:rpg-spinSlow 3s linear infinite}
.anim-breathe{animation:rpg-idleBreathe 3s ease-in-out infinite}
.anim-delay-1{animation-delay:.1s}
.anim-delay-2{animation-delay:.2s}
.anim-delay-3{animation-delay:.3s}
.anim-delay-4{animation-delay:.4s}
.anim-delay-5{animation-delay:.5s}
.anim-fast{animation-duration:var(--dur-fast,.18s)}
.anim-normal{animation-duration:var(--dur-base,.3s)}
.anim-slow{animation-duration:var(--dur-slow,.55s)}
.anim-infinite{animation-iteration-count:infinite}

@media(prefers-reduced-motion:reduce){
    [class*="anim-"]{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
}
