/* ── Scroll Animations ── */
[data-animate] {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity var(--t-slow) var(--ease), transform var(--t-slow) var(--ease);
}

[data-animate="fade-in"] { transform: none; }
[data-animate="slide-left"] { transform: translateX(-40px); }
[data-animate="slide-right"] { transform: translateX(40px); }

[data-animate].visible {
  opacity: 1;
  transform: none;
}

/* Stagger children */
[data-stagger] > * { transition-delay: calc(var(--i, 0) * 0.1s); }

/* ── Keyframes ── */
@keyframes pulse-glow {
  0%, 100% { box-shadow: 0 0 20px var(--accent-dim); }
  50% { box-shadow: 0 0 40px var(--accent-glow); }
}

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}

@keyframes gradient-shift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* ── Prefers reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  [data-animate] { opacity: 1; transform: none; transition: none; }
  *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
}
