/* ==========================================================================
   Animations — scroll reveal, entry motion
   Default: critically-damped fade + rise (no overshoot — content just appeared,
   no gesture/momentum preceded it, so no bounce per Apple motion guidance).
   ========================================================================== */

[data-reveal] {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity var(--duration-reveal) var(--ease-standard),
    transform var(--duration-reveal) var(--ease-standard);
}

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

[data-reveal][data-reveal-delay="1"] { transition-delay: 80ms; }
[data-reveal][data-reveal-delay="2"] { transition-delay: 160ms; }
[data-reveal][data-reveal-delay="3"] { transition-delay: 240ms; }

@media (prefers-reduced-motion: reduce) {
  [data-reveal] {
    transform: none;
    transition: opacity var(--duration-base) linear;
  }
}

/* Subtle ambient float on hero badge only — slow, low-amplitude, not a full-viewport
   moving background, safely below the "avoid near 0.2Hz oscillation" threshold in duration */
@keyframes gentle-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}

.pulse-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--color-success);
  animation: gentle-pulse 2.4s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  .pulse-dot {
    animation: none;
  }
}
