/* =========================================================
   Scroll-triggered animation classes
   ========================================================= */

[data-animate] {
  opacity: 0;
  will-change: transform, opacity;
}

[data-animate="fade-up"] {
  transform: translateY(40px);
  transition: opacity 0.8s var(--ease), transform 0.8s var(--ease);
}
[data-animate="fade-scale"] {
  transform: scale(0.95);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
[data-animate="slide-left"] {
  transform: translateX(-60px);
  transition: opacity 0.9s var(--ease), transform 0.9s var(--ease);
}
[data-animate="slide-right"] {
  transform: translateX(60px);
  transition: opacity 0.9s var(--ease), transform 0.9s var(--ease);
}
[data-animate="fade"] {
  transition: opacity 1s var(--ease);
}

[data-animate].visible {
  opacity: 1 !important;
  transform: translate(0,0) scale(1) !important;
}

@media (prefers-reduced-motion: reduce) {
  [data-animate] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}
