/* ============================================================
   Viewport Animation System — data-animate attributes
   Usage: add data-animate="fade-in|slide-in-right|slide-in-left|scale-in"
   Optional: add data-animate-delay="200" (ms) for a staggered entrance
   ============================================================ */

/* Base hidden state — all animatable elements start invisible */
[data-animate] {
  opacity: 0;
  transition: opacity 0.6s ease, transform 0.6s ease;
}

/* Visible state — added by animation.js when element enters viewport */
[data-animate].animate-visible {
  opacity: 1;
  transform: none !important;
}

/* Slide in from right */
[data-animate="slide-in-right"] {
  transform: translateX(60px);
}

/* Slide in from left */
[data-animate="slide-in-left"] {
  transform: translateX(-60px);
}

/* Scale in from slightly smaller */
[data-animate="scale-in"] {
  transform: scale(0.85);
}

/* Fade in — opacity only, no movement */
[data-animate="fade-in"] {
  transform: none;
}

/* ---- Delay utilities (pair with any data-animate value) ---- */
[data-animate-delay="100"].animate-visible { transition-delay: 0.1s; }
[data-animate-delay="200"].animate-visible { transition-delay: 0.2s; }
[data-animate-delay="300"].animate-visible { transition-delay: 0.3s; }
[data-animate-delay="400"].animate-visible { transition-delay: 0.4s; }
[data-animate-delay="500"].animate-visible { transition-delay: 0.5s; }
[data-animate-delay="600"].animate-visible { transition-delay: 0.6s; }
[data-animate-delay="700"].animate-visible { transition-delay: 0.7s; }
[data-animate-delay="800"].animate-visible { transition-delay: 0.8s; }

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