/*-- -------------------------- -->
<---     Scroll Animations       -->
<--- -------------------------- -*/

/* Subtle fade + slight directional slide, triggered once as each element
   enters the viewport (js/scroll-animations.js adds .cs-in-view via
   IntersectionObserver). --cs-delay staggers grouped items -- cards,
   list items -- in even steps. */
[data-animate] {
  opacity: 0;
  transition: opacity 1.3s cubic-bezier(0.16, 1, 0.3, 1), transform 1.3s cubic-bezier(0.16, 1, 0.3, 1);
  transition-delay: calc(var(--cs-delay, 0) * 140ms);
  will-change: opacity, transform;
}
[data-animate="fade-up"] {
  transform: translateY(1.75rem);
}
[data-animate="fade-left"] {
  transform: translateX(-2rem);
}
[data-animate="fade-right"] {
  transform: translateX(2rem);
}

[data-animate].cs-in-view {
  opacity: 1;
  transform: translate(0, 0);
}

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