/* ===== MOTION ============================================================ */

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
  from { opacity: 0; } to { opacity: 1; }
}
@keyframes slideInRight {
  from { transform: translateX(100%); } to { transform: translateX(0); }
}
@keyframes slideInLeft {
  from { transform: translateX(-100%); } to { transform: translateX(0); }
}
@keyframes neroFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-6px); }
}
@keyframes pulseDot {
  0%, 100% { opacity: 1; } 50% { opacity: 0.35; }
}
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
@keyframes countGlow {
  0%, 100% { text-shadow: 0 0 0 rgba(221,161,59,0); }
  50% { text-shadow: 0 0 24px rgba(221,161,59,0.35); }
}

/* Scroll-reveal: opt-in via [data-reveal], toggled to .is-visible by nav.js
   IntersectionObserver. Falls back to visible if JS never runs. */
[data-reveal] {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 700ms var(--ease), transform 700ms var(--ease);
}
[data-reveal].is-visible { opacity: 1; transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1; transform: none; transition: none; }
}

.stagger > * { animation: fadeUp var(--dur-slow) var(--ease) both; }
.stagger > *:nth-child(1) { animation-delay: 0ms; }
.stagger > *:nth-child(2) { animation-delay: 80ms; }
.stagger > *:nth-child(3) { animation-delay: 160ms; }
.stagger > *:nth-child(4) { animation-delay: 240ms; }
.stagger > *:nth-child(5) { animation-delay: 320ms; }
.stagger > *:nth-child(6) { animation-delay: 400ms; }

.pulse-live { animation: pulseDot 1.8s ease-in-out infinite; }
