@keyframes hero-fade-up {
  from {
    opacity: 0;
    transform: translateY(22px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes float-drift {
  0%,
  100% {
    transform: translate3d(0, 0, 0);
  }

  50% {
    transform: translate3d(0, -6px, 0);
  }
}

@keyframes halo-breathe {
  0%,
  100% {
    transform: scale(1);
    opacity: 0.9;
  }

  50% {
    transform: scale(1.02);
    opacity: 1;
  }
}

body:not(.page-is-ready) .hero__content,
body:not(.page-is-ready) .hero__visual {
  opacity: 0;
  transform: translateY(22px);
}

.page-is-ready .hero__content {
  animation: hero-fade-up 820ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.page-is-ready .hero__visual {
  animation: hero-fade-up 860ms 120ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.page-is-ready .hero__halo {
  animation: halo-breathe 9s ease-in-out infinite;
}

.page-is-ready .hero-floating--top {
  animation: float-drift 8s ease-in-out infinite;
}

.page-is-ready .hero-floating--bottom {
  animation: float-drift 9.5s ease-in-out infinite reverse;
}

[data-reveal] {
  opacity: 0;
  transform: translateY(22px);
  transition:
    opacity 720ms var(--transition-base),
    transform 720ms var(--transition-base);
  transition-delay: var(--reveal-delay, 0ms);
  will-change: opacity, transform;
}

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

@keyframes redirect-fade-up {
  from {
    opacity: 0;
    transform: translateY(18px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes redirect-icon-breathe {
  0%,
  100% {
    transform: translateY(0) scale(1);
  }

  50% {
    transform: translateY(-4px) scale(1.02);
  }
}

@keyframes redirect-glow-shift {
  0%,
  100% {
    transform: scale(1);
    opacity: 0.82;
  }

  50% {
    transform: scale(1.04);
    opacity: 1;
  }
}

@keyframes redirect-pulse {
  0%,
  100% {
    transform: scale(1);
    opacity: 0.9;
  }

  50% {
    transform: scale(1.15);
    opacity: 1;
  }
}

body.redirect-page:not(.page-is-ready) .redirect-back,
body.redirect-page:not(.page-is-ready) .redirect-stage,
body.redirect-page:not(.page-is-ready) .redirect-brand {
  opacity: 0;
  transform: translateY(18px);
}

.page-is-ready .redirect-back {
  animation: redirect-fade-up 760ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.page-is-ready .redirect-stage {
  animation: redirect-fade-up 820ms 90ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.page-is-ready .redirect-brand {
  animation: redirect-fade-up 780ms 180ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.page-is-ready .redirect-icon {
  animation: redirect-icon-breathe 7s ease-in-out infinite;
}

.page-is-ready .redirect-stage__glow {
  animation: redirect-glow-shift 9s ease-in-out infinite;
}

.page-is-ready .redirect-status__dot {
  animation: redirect-pulse 1.8s ease-in-out infinite;
}
