@keyframes pulse-dot {
  0%,
  100% {
    opacity: 1;
    transform: scale(1);
  }
  50% {
    opacity: 0.5;
    transform: scale(0.8);
  }
}

@keyframes grid-drift {
  0% {
    transform: translate(0, 0);
  }
  100% {
    transform: translate(60px, 60px);
  }
}

@keyframes float-particle {
  0%,
  100% {
    transform: translate(0, 0);
    opacity: 0.15;
  }
  25% {
    transform: translate(20px, -30px);
    opacity: 0.3;
  }
  50% {
    transform: translate(-10px, -60px);
    opacity: 0.1;
  }
  75% {
    transform: translate(15px, -20px);
    opacity: 0.25;
  }
}

@keyframes hero-ken-burns {
  from {
    transform: scale(1.04);
  }
  to {
    transform: scale(1);
  }
}

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

/* Scroll reveal */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity var(--duration-slow) var(--ease-out),
    transform var(--duration-slow) var(--ease-out);
}

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

.reveal--delay-1 {
  transition-delay: 100ms;
}

.reveal--delay-2 {
  transition-delay: 200ms;
}

.reveal--delay-3 {
  transition-delay: 300ms;
}

.reveal--delay-4 {
  transition-delay: 400ms;
}