/* =========================================================
   Animations — kept subtle and purposeful; every rule respects
   prefers-reduced-motion via the global override at the bottom.
   ========================================================= */

/* ---------- Scroll reveal (paired with IntersectionObserver in main.js) ---------- */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
}
.reveal.is-visible { opacity: 1; transform: translateY(0); }

.reveal-fade { opacity: 0; transition: opacity 0.9s ease; }
.reveal-fade.is-visible { opacity: 1; }

.reveal-left { opacity: 0; transform: translateX(-32px); transition: opacity 0.8s cubic-bezier(0.16,1,0.3,1), transform 0.8s cubic-bezier(0.16,1,0.3,1); }
.reveal-left.is-visible { opacity: 1; transform: translateX(0); }

.reveal-right { opacity: 0; transform: translateX(32px); transition: opacity 0.8s cubic-bezier(0.16,1,0.3,1), transform 0.8s cubic-bezier(0.16,1,0.3,1); }
.reveal-right.is-visible { opacity: 1; transform: translateX(0); }

/* stagger helper — apply alongside .reveal on siblings */
.reveal-stagger.is-visible { transition-delay: calc(var(--stagger-index, 0) * 90ms); }

/* ---------- Hero entrance ---------- */
@keyframes hero-rise {
  from { opacity: 0; transform: translateY(24px); }
  to { opacity: 1; transform: translateY(0); }
}
.hero-copy .eyebrow { animation: hero-rise 0.7s cubic-bezier(0.16,1,0.3,1) 0.1s both; }
.hero-copy h1 { animation: hero-rise 0.8s cubic-bezier(0.16,1,0.3,1) 0.22s both; }
.hero-copy p.lead { animation: hero-rise 0.8s cubic-bezier(0.16,1,0.3,1) 0.34s both; }
.hero-copy .hero-actions { animation: hero-rise 0.8s cubic-bezier(0.16,1,0.3,1) 0.46s both; }
.hero-visual { animation: hero-rise 1s cubic-bezier(0.16,1,0.3,1) 0.3s both; }

/* ---------- Decorative motion ---------- */
@keyframes spin-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes spin-slow-reverse { from { transform: rotate(0deg); } to { transform: rotate(-360deg); } }

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

@keyframes float-particle {
  0% { transform: translate(0, 0); opacity: 0.15; }
  50% { transform: translate(12px, -26px); opacity: 0.55; }
  100% { transform: translate(0, 0); opacity: 0.15; }
}

@keyframes scroll-drop {
  0% { top: -30px; }
  100% { top: 30px; }
}

/* ---------- Button micro-interaction ---------- */
@keyframes pulse-ring {
  0% { box-shadow: 0 0 0 0 rgba(224, 147, 44, 0.4); }
  100% { box-shadow: 0 0 0 14px rgba(224, 147, 44, 0); }
}

/* ---------- Mobile menu item stagger ---------- */
.main-nav.is-open .nav-list li {
  animation: hero-rise 0.5s cubic-bezier(0.16,1,0.3,1) both;
}
.main-nav.is-open .nav-list li:nth-child(1) { animation-delay: 0.05s; }
.main-nav.is-open .nav-list li:nth-child(2) { animation-delay: 0.1s; }
.main-nav.is-open .nav-list li:nth-child(3) { animation-delay: 0.15s; }
.main-nav.is-open .nav-list li:nth-child(4) { animation-delay: 0.2s; }
.main-nav.is-open .nav-list li:nth-child(5) { animation-delay: 0.25s; }
.main-nav.is-open .nav-list li:nth-child(6) { animation-delay: 0.3s; }

/* ---------- Counter number pop (used sparingly if numeric stats appear) ---------- */
.count-pop { transition: transform 0.3s ease; }

/* ---------- Reduced motion: disable/limit everything above ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .reveal, .reveal-fade, .reveal-left, .reveal-right {
    opacity: 1 !important;
    transform: none !important;
  }
}
