/* Animation Definitions - Ultimate Interactive Showcase */

/* Base Animation Classes */
.fade-in {
  animation: fadeIn 0.5s ease-out;
}

.slide-up {
  animation: slideUp 0.6s ease-out;
}

.slide-in-left {
  animation: slideInLeft 0.6s ease-out;
}

.slide-in-right {
  animation: slideInRight 0.6s ease-out;
}

.scale-in {
  animation: scaleIn 0.4s ease-out;
}

.rotate-in {
  animation: rotateIn 0.6s ease-out;
}

.bounce-in {
  animation: bounceIn 0.8s ease-out;
}

/* Keyframes */
@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

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

@keyframes slideInLeft {
  from {
    opacity: 0;
    transform: translateX(-30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideInRight {
  from {
    opacity: 0;
    transform: translateX(30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.8);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes rotateIn {
  from {
    opacity: 0;
    transform: rotate(-180deg) scale(0.8);
  }
  to {
    opacity: 1;
    transform: rotate(0deg) scale(1);
  }
}

@keyframes bounceIn {
  0% {
    opacity: 0;
    transform: scale(0.3);
  }
  50% {
    opacity: 1;
    transform: scale(1.05);
  }
  70% {
    transform: scale(0.9);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}

/* Loading Animations */
@keyframes pulse {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.5;
  }
}

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

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

/* Particle Animation Classes */
.particle-float {
  animation: particleFloat 6s ease-in-out infinite;
}

.particle-pulse {
  animation: particlePulse 2s ease-in-out infinite;
}

.particle-fade {
  animation: particleFade 4s ease-in-out infinite alternate;
}

@keyframes particleFloat {
  0%, 100% {
    transform: translateY(0) rotate(0deg);
  }
  25% {
    transform: translateY(-10px) rotate(90deg);
  }
  50% {
    transform: translateY(0) rotate(180deg);
  }
  75% {
    transform: translateY(10px) rotate(270deg);
  }
}

@keyframes particlePulse {
  0%, 100% {
    transform: scale(1);
    opacity: 0.8;
  }
  50% {
    transform: scale(1.2);
    opacity: 1;
  }
}

@keyframes particleFade {
  0% {
    opacity: 0.2;
    transform: scale(0.8);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}

/* Game Animations */
@keyframes gameStart {
  0% {
    transform: scale(0) rotate(0deg);
    opacity: 0;
  }
  50% {
    transform: scale(1.1) rotate(180deg);
    opacity: 1;
  }
  100% {
    transform: scale(1) rotate(360deg);
    opacity: 1;
  }
}

@keyframes gameOver {
  0% {
    transform: scale(1) rotate(0deg);
    opacity: 1;
  }
  50% {
    transform: scale(1.5) rotate(90deg);
    opacity: 0.5;
  }
  100% {
    transform: scale(0) rotate(180deg);
    opacity: 0;
  }
}

@keyframes scoreUpdate {
  0% {
    transform: scale(1);
    color: var(--text-color);
  }
  50% {
    transform: scale(1.5);
    color: var(--accent-color);
  }
  100% {
    transform: scale(1);
    color: var(--text-color);
  }
}

/* Chart Animations */
@keyframes barGrow {
  from {
    height: 0;
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes lineDraw {
  from {
    stroke-dashoffset: 1000;
  }
  to {
    stroke-dashoffset: 0;
  }
}

@keyframes dataPointPop {
  0% {
    transform: scale(0);
    opacity: 0;
  }
  50% {
    transform: scale(1.2);
    opacity: 1;
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}

/* Audio Visualizer Animations */
@keyframes audioBar {
  0%, 100% {
    transform: scaleY(0.1);
    background: var(--primary-color);
  }
  50% {
    transform: scaleY(1);
    background: var(--accent-color);
  }
}

@keyframes audioWave {
  0% {
    transform: translateY(0) scaleY(1);
    opacity: 0.6;
  }
  50% {
    transform: translateY(-20px) scaleY(0.8);
    opacity: 1;
  }
  100% {
    transform: translateY(0) scaleY(1);
    opacity: 0.6;
  }
}

@keyframes audioRing {
  0% {
    transform: scale(0.8);
    opacity: 0.8;
    border-color: var(--primary-color);
  }
  50% {
    transform: scale(1.2);
    opacity: 1;
    border-color: var(--accent-color);
  }
  100% {
    transform: scale(0.8);
    opacity: 0.8;
    border-color: var(--primary-color);
  }
}

/* UI Animation Classes */
.loading-dots::after {
  content: '...';
  animation: loadingDots 1.5s ease-in-out infinite;
}

@keyframes loadingDots {
  0%, 60%, 100% {
    content: '';
  }
  20% {
    content: '.';
  }
  40% {
    content: '..';
  }
}

.loading-spinner {
  border: 3px solid var(--border-color);
  border-top: 3px solid var(--primary-color);
  border-radius: var(--radius-full);
  width: 40px;
  height: 40px;
  animation: spin 1s linear infinite;
}

.progress-bar-fill {
  animation: progressFill 2s ease-out;
}

@keyframes progressFill {
  from {
    width: 0%;
  }
  to {
    width: 100%;
  }
}

/* Mobile Menu Animation */
.mobile-menu-toggle.active .hamburger-line:nth-child(1) {
  transform: rotate(45deg) translate(5px, 5px);
}

.mobile-menu-toggle.active .hamburger-line:nth-child(2) {
  opacity: 0;
}

.mobile-menu-toggle.active .hamburger-line:nth-child(3) {
  transform: rotate(-45deg) translate(7px, -6px);
}

/* Performance Mode Animations */
.performance-mode .particle {
  animation-duration: 8s;
  opacity: 0.6;
}

.performance-mode .control-btn {
  transition: none;
}

.performance-mode .feature-card {
  transform: none;
}

.performance-mode .feature-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px var(--shadow-color);
}

/* Reduced Motion */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  
  .particle-float {
    animation: none;
  }
  
  .loading-spinner {
    animation: none;
    border-top-color: var(--primary-color);
  }
}