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

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

@keyframes pop-in {
  0%   { transform: scale(0); opacity: 0; }
  60%  { transform: scale(1.15); }
  100% { transform: scale(1); opacity: 1; }
}

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20%, 60%  { transform: translateX(-4px); }
  40%, 80%  { transform: translateX(4px); }
}

@keyframes marquee-scroll {
  0%   { transform: translateX(100vw); }
  100% { transform: translateX(var(--marquee-distance, -100%)); }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

@keyframes rotate-continuous {
  to { transform: rotate(360deg); }
}

@keyframes fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

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

.animate-float         { animation: float 3s ease-in-out infinite; }
.animate-bounce        { animation: bounce-soft 2s ease-in-out infinite; }
.animate-pop-in        { animation: pop-in 0.3s ease-out forwards; }
.animate-shake         { animation: shake 0.3s ease-in-out; }
.marquee-playing       { animation: marquee-scroll var(--marquee-duration, 55s) linear forwards; }
.marquee-paused        { animation-play-state: paused; }
