/* animations.css - reutiliza principios de wow/animate con preferencia a reduced motion */
@media (prefers-reduced-motion:reduce){
  * { animation-duration:.01ms!important; animation-iteration-count:1!important; transition:none!important; }
}
.fade-in { opacity:0; transform:translateY(10px); animation:fade-in .8s ease forwards; }
@keyframes fade-in { to { opacity:1; transform:translateY(0); } }
.scale-in { opacity:0; transform:scale(.95); animation:scale-in .6s cubic-bezier(.4,0,.2,1) forwards; }
@keyframes scale-in { to { opacity:1; transform:scale(1); } }
.slide-up-delayed { opacity:0; transform:translateY(30px); animation:slide-up .9s .25s ease forwards; }
@keyframes slide-up { to { opacity:1; transform:translateY(0); } }
/* Intersection Observer utility classes (aplicadas vía JS) */
.io-init { opacity:0; }
.io-show { opacity:1; transition:opacity .6s ease, transform .6s ease; }
