/* ==========================================================================
   Animations — All @keyframes
   ========================================================================== */

@keyframes pulse {
  0%,
  100% {
    transform: translate(-14px, -14px) scale(1);
  }
  50% {
    transform: translate(-14px, -14px) scale(1.3);
  }
}

@keyframes bounce {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-15px);
  }
}

@keyframes shake {
  0%,
  100% {
    transform: translate(0, 0);
  }
  25% {
    transform: translate(-3px, -3px);
  }
  75% {
    transform: translate(3px, 3px);
  }
}

@keyframes marquee {
  0% {
    transform: translate(0, 0);
  }
  100% {
    transform: translate(-50%, 0);
  }
}

@keyframes glow {
  0%,
  100% {
    box-shadow:
      0 0 15px #ff0000,
      0 0 40px #ff0000,
      0 0 80px rgba(255, 0, 0, 0.5),
      0 6px 0 #550000,
      0 8px 20px rgba(0, 0, 0, 0.5);
  }
  50% {
    box-shadow:
      0 0 25px #ff6666,
      0 0 70px #ff0000,
      0 0 140px rgba(255, 0, 0, 0.9),
      0 6px 0 #550000,
      0 8px 20px rgba(0, 0, 0, 0.5);
  }
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes fall {
  0% {
    transform: translateY(-10vh) rotate(0deg);
  }
  100% {
    transform: translateY(110vh) rotate(720deg);
  }
}

@keyframes konamiFlash {
  0% {
    box-shadow: inset 0 0 0 0 rgba(255, 255, 0, 0.6);
  }
  100% {
    box-shadow: inset 0 0 0 30px rgba(255, 255, 0, 0);
  }
}

@keyframes rainbowBg {
  0% {
    filter: hue-rotate(0deg);
  }
  100% {
    filter: hue-rotate(360deg);
  }
}

@keyframes confettiDrop {
  0% {
    transform: translate3d(0, -14vh, 0) rotate(0deg);
    opacity: 0;
  }
  10% {
    opacity: 1;
  }
  100% {
    transform: translate3d(var(--confetti-drift, 0px), 115vh, 0) rotate(600deg);
    opacity: 0;
  }
}

@keyframes gptPulse {
  0%,
  100% {
    opacity: 0.65;
  }
  50% {
    opacity: 1;
  }
}
