/* ANIMATIONS */
@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(24px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes scrollPulse {
  0%,
  100% {
    opacity: 0.4;
  }
  50% {
    opacity: 1;
  }
}

@keyframes pulse {
  0%,
  100% {
    opacity: 0.4;
    transform: scale(1);
  }
  50% {
    opacity: 1;
    transform: scale(1.3);
  }
}

/* Reveal on scroll */
.reveal {
  opacity: 0;
  transform: translateY(32px);
  transition:
    opacity 0.8s var(--ease-out),
    transform 0.8s var(--ease-out);
}
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}
.reveal-delay-1 {
  transition-delay: 0.1s;
}
.reveal-delay-2 {
  transition-delay: 0.2s;
}
.reveal-delay-3 {
  transition-delay: 0.3s;
}

/* Trigger-zone discovery hint — a gentle glow pulse that draws a lingering
   first visitor's eye to an interactive element, without revealing the gesture.
   !important so it wins over an element's own resting filter/animation for the
   couple of beats it runs; the JS gates it out under reduced motion. */
@keyframes triggerHintGlow {
  0%,
  100% {
    filter: drop-shadow(0 0 4px rgba(var(--theme-glow), 0.35));
  }
  50% {
    filter: drop-shadow(0 0 14px rgba(var(--theme-glow), 0.95));
  }
}
.trigger-hinting {
  animation: triggerHintGlow 1.3s ease-in-out 2 !important;
}
