@keyframes scroll-line {
  0% { transform: translateY(-100%); }
  80% { transform: translateY(200%); }
  100% { transform: translateY(200%); }
}

.animate-scroll-line {
  animation: scroll-line 2.2s infinite cubic-bezier(0.15, 0.85, 0.45, 1);
}

@keyframes heroReveal {
  from {
    opacity: 0.001;
    transform: var(--reveal-from, translateY(15px));
  }
  to {
    opacity: var(--reveal-to, 1);
    transform: translateY(0) scale(1);
  }
}

@keyframes heroRevealFade {
  from { opacity: 0.001; }
  to { opacity: var(--reveal-to, 1); }
}

.reveal {
  opacity: var(--reveal-to, 1);
  animation-name: heroReveal;
  animation-duration: var(--reveal-duration, 1.8s);
  animation-delay: var(--reveal-delay, 0s);
  animation-timing-function: var(--reveal-ease, cubic-bezier(0.16, 1, 0.3, 1));
  animation-fill-mode: backwards;
}

.reveal-fade {
  opacity: var(--reveal-to, 1);
  animation-name: heroRevealFade;
  animation-duration: var(--reveal-duration, 1.8s);
  animation-delay: var(--reveal-delay, 0s);
  animation-timing-function: var(--reveal-ease, ease-out);
  animation-fill-mode: backwards;
}

@keyframes cinematic-push {
  0% { transform: scale(1); }
  100% { transform: scale(1.08); }
}

@keyframes light-breathe {
  0% { opacity: 0.8; }
  100% { opacity: 1; }
}

@keyframes float-slow {
  0% { transform: translateY(0) scale(0.6); opacity: 0; }
  50% { opacity: 0.1; }
  100% { transform: translateY(-40px) scale(0.6); opacity: 0; }
}

@keyframes float-med {
  0% { transform: translateY(0) scale(1); opacity: 0; }
  50% { opacity: 0.2; }
  100% { transform: translateY(-60px) scale(1); opacity: 0; }
}

@keyframes float-fast {
  0% { transform: translateY(0) scale(1.5); opacity: 0; }
  50% { opacity: 0.08; }
  100% { transform: translateY(-100px) scale(1.5); opacity: 0; }
}

@keyframes foil-shimmer {
  0% { background-position: -200% center; }
  100% { background-position: 200% center; }
}

@keyframes pulse-sparkle {
  0% { transform: scale(0.8) rotate(0deg); opacity: 0.7; }
  100% { transform: scale(1.3) rotate(45deg); opacity: 1; }
}

@keyframes shimmer {
  0% { opacity: 0.6; filter: brightness(1); }
  100% { opacity: 1; filter: brightness(1.5); }
}

@keyframes roll-up {
  0% { transform: translateY(100%); opacity: 0; }
  100% { transform: translateY(0); opacity: 1; }
}

@keyframes everything-dust {
  0% { transform: translate3d(0, 0, 0); opacity: 0.2; }
  100% { transform: translate3d(0, -18px, 0); opacity: 0.55; }
}

@keyframes concierge-light-drift {
  0% { opacity: 0.55; transform: translate3d(-2%, -1%, 0) scale(1); }
  100% { opacity: 0.85; transform: translate3d(2%, 1%, 0) scale(1.05); }
}

@keyframes guest-count-roll {
  0% { transform: translateY(100%); opacity: 0; }
  100% { transform: translateY(0); opacity: 1; }
}

@keyframes modal-success-enter {
  0% { opacity: 0; transform: translate3d(0, 10px, 0) scale(0.97); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes modal-success-exit {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  100% { opacity: 0; transform: translate3d(0, 6px, 0) scale(0.98); }
}

@media (prefers-reduced-motion: reduce) {
  .reveal { animation-name: heroRevealFade; }
  .modal-overlay.is-open .modal-panel--success,
  .modal-overlay.is-closing .modal-panel--success {
    animation: none;
  }
}
