
/* Minimal animation utilities - safe defaults */
/* Respect user's reduced motion preferences */
@media (prefers-reduced-motion: reduce) {
  .will-animate, .is-visible { transition: none !important; animation: none !important; transform: none !important; opacity: 1 !important; }
}

/* Base states */
.will-animate { opacity: 0; will-change: transform, opacity; }
.is-visible { opacity: 1; }

/* Variants */
.will-animate.fade-in { transition: opacity .6s ease; }
.will-animate.slide-up { transform: translateY(16px); transition: transform .6s ease, opacity .6s ease; }
.will-animate.pop { transform: scale(.98); transition: transform .4s ease, opacity .6s ease; }

.is-visible.slide-up { transform: translateY(0); }
.is-visible.pop { transform: scale(1); }

/* Stagger helper */
[data-animate-stagger] > .will-animate { transition-delay: calc(var(--stagger, 80ms) * var(--i, 0)); }
