/**
 * Everything - Animations
 * Shared keyframe animations used across themes
 */

/* Float - gentle up/down */
@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}

/* Spin - continuous rotation */
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Spin reverse */
@keyframes spin-reverse {
  from { transform: rotate(360deg); }
  to { transform: rotate(0deg); }
}

/* Pulse - scale up/down */
@keyframes pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.05); }
}

/* Pulse glow - for neon effects */
@keyframes pulse-glow {
  0%, 100% {
    opacity: 1;
    filter: brightness(1);
  }
  50% {
    opacity: 0.8;
    filter: brightness(1.2);
  }
}

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

/* Fade out */
@keyframes fade-out {
  from { opacity: 1; }
  to { opacity: 0; }
}

/* Slide in from top */
@keyframes slide-in-top {
  from {
    opacity: 0;
    transform: translateY(-20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Slide in from bottom */
@keyframes slide-in-bottom {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Slide in from left */
@keyframes slide-in-left {
  from {
    opacity: 0;
    transform: translateX(-20px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Slide in from right */
@keyframes slide-in-right {
  from {
    opacity: 0;
    transform: translateX(20px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Bounce */
@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  25% { transform: translateY(-10px); }
  50% { transform: translateY(0); }
  75% { transform: translateY(-5px); }
}

/* Shake */
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}

/* Wiggle */
@keyframes wiggle {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(-5deg); }
  75% { transform: rotate(5deg); }
}

/* Glitch - for cyberpunk/broken effects */
@keyframes glitch {
  0% {
    clip-path: inset(40% 0 61% 0);
    transform: translate(-2px, 2px);
  }
  20% {
    clip-path: inset(92% 0 1% 0);
    transform: translate(1px, -1px);
  }
  40% {
    clip-path: inset(43% 0 1% 0);
    transform: translate(-1px, 2px);
  }
  60% {
    clip-path: inset(25% 0 58% 0);
    transform: translate(2px, -2px);
  }
  80% {
    clip-path: inset(54% 0 7% 0);
    transform: translate(-2px, 1px);
  }
  100% {
    clip-path: inset(58% 0 43% 0);
    transform: translate(1px, -1px);
  }
}

/* Scanline - for CRT effect */
@keyframes scanline {
  0% { transform: translateY(-100%); }
  100% { transform: translateY(100vh); }
}

/* Flicker - old TV */
@keyframes flicker {
  0%, 100% { opacity: 1; }
  3% { opacity: 0.9; }
  6% { opacity: 1; }
  7% { opacity: 0.8; }
  8% { opacity: 1; }
  9% { opacity: 0.9; }
  10% { opacity: 1; }
  89% { opacity: 1; }
  90% { opacity: 0.9; }
  100% { opacity: 1; }
}

/* Fire flicker */
@keyframes fire-flicker {
  0%, 100% {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
  25% {
    opacity: 0.9;
    transform: scale(1.02) translateY(-2px);
  }
  50% {
    opacity: 1;
    transform: scale(0.98) translateY(1px);
  }
  75% {
    opacity: 0.95;
    transform: scale(1.01) translateY(-1px);
  }
}

/* Rainbow - color cycling */
@keyframes rainbow {
  0% { filter: hue-rotate(0deg); }
  100% { filter: hue-rotate(360deg); }
}

/* Typing cursor blink */
@keyframes cursor-blink {
  0%, 50% { opacity: 1; }
  51%, 100% { opacity: 0; }
}

/* Marquee scroll */
@keyframes marquee {
  from { transform: translateX(100%); }
  to { transform: translateX(-100%); }
}

/* Cloud drift */
@keyframes drift {
  from { transform: translateX(-100%); }
  to { transform: translateX(100vw); }
}

/* Zoom in */
@keyframes zoom-in {
  from {
    opacity: 0;
    transform: scale(0.9);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Pop */
@keyframes pop {
  0% { transform: scale(1); }
  50% { transform: scale(1.2); }
  100% { transform: scale(1); }
}

/* Utility classes for animations */
.animate-float { animation: float 3s ease-in-out infinite; }
.animate-spin { animation: spin 2s linear infinite; }
.animate-spin-slow { animation: spin 8s linear infinite; }
.animate-pulse { animation: pulse 2s ease-in-out infinite; }
.animate-bounce { animation: bounce 1s ease-in-out infinite; }
.animate-shake { animation: shake 0.5s ease-in-out; }
.animate-wiggle { animation: wiggle 0.5s ease-in-out infinite; }
.animate-fade-in { animation: fade-in 0.3s ease-out forwards; }
.animate-glitch { animation: glitch 0.3s linear infinite; }
.animate-flicker { animation: flicker 4s linear infinite; }
.animate-rainbow { animation: rainbow 5s linear infinite; }
