@keyframes brandBounce {
  0%, 100% { transform: translateY(0) rotate(-1deg); }
  5% { transform: translateY(-4px) rotate(0deg); }
  10% { transform: translateY(0) rotate(-1deg); }
  88% { transform: translateY(0) rotate(-1deg); }
}

@keyframes brandShine {
  to { background-position: -220% center; }
}

@keyframes kissPulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.3) rotate(-5deg); }
}

@keyframes introBackgroundReveal {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes introStageReveal {
  from { opacity: 0; transform: translate3d(0, 18px, -24px) scale(0.96); }
  to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes introPanelReveal {
  from { opacity: 0; transform: translate3d(0, 20px, 35px) scale(0.96); }
  to { opacity: 1; transform: translate3d(0, 0, 35px) scale(1); }
}

@keyframes introLetterWave {
  0%, 76%, 100% { transform: translateY(0) rotate(0); }
  82% { transform: translateY(-6px) rotate(-2deg); }
  88% { transform: translateY(1px) rotate(1deg); }
}

@keyframes introButtonReveal {
  from { opacity: 0; transform: translate3d(0, 18px, 52px) scale(0.94); }
  to { opacity: 1; transform: translate3d(0, 0, 52px) scale(1); }
}

@keyframes introExit {
  to { opacity: 0; transform: translate3d(0, -10vh, 180px) rotateX(-14deg) scale(1.08); }
}

@keyframes halloweenRain {
  0% { transform: translate3d(0, -12vh, 0) rotate(-8deg); }
  100% { transform: translate3d(var(--sway), 118vh, 0) rotate(12deg); }
}

@keyframes heartRise {
  0% { opacity: 0; transform: translate(-50%, -50%) scale(0.35) rotate(0deg); }
  14% { opacity: 1; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--heart-x)), calc(-50% - var(--heart-y))) scale(1.15) rotate(var(--heart-rotation)); }
}

@keyframes revealUp {
  from { transform: translateY(40px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

@keyframes imagePop {
  0% { opacity: 0; transform: scale(0.9) translateY(15px); filter: blur(5px); }
  100% { opacity: 1; transform: scale(1) translateY(0); filter: blur(0); }
}

.anim-pop {
  animation: imagePop 0.45s ease-in-out forwards;
  will-change: opacity, transform, filter;
}

@keyframes cartFly {
  0% { opacity: 1; transform: translate(0, 0) scale(1); }
  100% { opacity: 0; transform: translate(115vw, -12vh) scale(0.7) rotate(18deg); }
}

@media (prefers-reduced-motion: reduce) {
  #hero,
  .intro-stage,
  .intro-button,
  .intro-title-letter,
  .heart-particle,
  .rain-item,
  .brand-bounce,
  .cart-flight {
    animation: none;
    transition: none;
  }
}
