/* ==========================================================================
   Shared animation keyframes & scroll-reveal utility classes.
   Component files (header.css, hero.css, features.css, email.css,
   footer.css) reference these keyframes and add their own element-specific
   entrance/hover rules. See ANIMATIONS.md for the full animation map.
   ========================================================================== */

/* Generic scroll-reveal pair, applied dynamically by animations.js to
   elements that don't already have a bespoke reveal (feature cards use
   their own — see features.css). Class is added by JS, never present in
   the raw HTML, so content stays visible if JavaScript never runs. */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

@keyframes bounce-in {
  0% {
    opacity: 0;
    transform: scale(0.3);
  }
  50% {
    opacity: 1;
    transform: scale(1.08);
  }
  70% {
    opacity: 1;
    transform: scale(0.95);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes word-fade-up {
  from {
    opacity: 0;
    transform: translateY(14px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes cta-pulse {
  0%,
  100% {
    box-shadow: var(--shadow-card), 0 0 0 0 rgba(3, 108, 66, 0.35);
  }
  50% {
    box-shadow: var(--shadow-card), 0 0 0 9px rgba(3, 108, 66, 0);
  }
}

@keyframes arrow-bounce-x {
  0%,
  100% {
    transform: translateX(0);
  }
  50% {
    transform: translateX(6px);
  }
}

@keyframes click-pulse {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(0.96);
  }
  100% {
    transform: scale(1);
  }
}

@keyframes check-pop {
  0% {
    opacity: 0;
    transform: scale(0.5) rotate(-10deg);
  }
  60% {
    opacity: 1;
    transform: scale(1.15) rotate(4deg);
  }
  100% {
    opacity: 1;
    transform: scale(1) rotate(0);
  }
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
