/* ============================================================
   ANIMATIONS — durations 200-500ms for feedback, longer for reveals
   ============================================================ */

@keyframes fadeSlideUp {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

.hero-content .eyebrow { animation: fadeSlideUp 0.6s ease both; }
.hero-content h1 { animation: fadeSlideUp 0.6s ease 0.1s both; }
.hero-content .hero-sub { animation: fadeSlideUp 0.6s ease 0.2s both; }
.hero-content .hero-ctas { animation: fadeSlideUp 0.6s ease 0.3s both; }
.hero-content .hero-trust { animation: fadeSlideUp 0.6s ease 0.4s both; }

@media (prefers-reduced-motion: reduce) {
  .hero-content .eyebrow, .hero-content h1, .hero-content .hero-sub,
  .hero-content .hero-ctas, .hero-content .hero-trust { animation: none; }
}

/* staggered reveal for grid children — JS toggles .in-view on .reveal */
.reveal-group .reveal:nth-child(1) { transition-delay: 0s; }
.reveal-group .reveal:nth-child(2) { transition-delay: 0.04s; }
.reveal-group .reveal:nth-child(3) { transition-delay: 0.08s; }
.reveal-group .reveal:nth-child(4) { transition-delay: 0.12s; }
.reveal-group .reveal:nth-child(5) { transition-delay: 0.15s; }
.reveal-group .reveal:nth-child(6) { transition-delay: 0.18s; }
.reveal-group .reveal:nth-child(7) { transition-delay: 0.21s; }
.reveal-group .reveal:nth-child(8) { transition-delay: 0.24s; }
.reveal-group .reveal:nth-child(9) { transition-delay: 0.27s; }
.reveal-group .reveal:nth-child(n+10) { transition-delay: 0.3s; }

.module-dot {
  fill-opacity: 0;
  animation: dotIn 0.9s ease forwards;
}
@keyframes dotIn {
  0% { fill-opacity: 0; transform-origin: center; transform: scale(0.4); }
  100% { fill-opacity: var(--target-opacity, 1); transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .module-dot { animation: none; fill-opacity: var(--target-opacity, 1); }
}
