/* ========================================
   单词小锤手 - 动画效果
   ======================================== */

@keyframes sun-float {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50% { transform: translateY(-8px) rotate(5deg); }
}

@keyframes cloud-drift {
  0% { transform: translateX(-20px); }
  100% { transform: translateX(calc(100vw + 20px)); }
}

@keyframes flower-sway {
  0%, 100% { transform: rotate(-5deg); }
  50% { transform: rotate(5deg); }
}

@keyframes blink {
  0%, 45%, 55%, 100% { transform: scaleY(1); }
  50% { transform: scaleY(0.1); }
}

@keyframes blink-fast {
  0%, 100% { transform: scaleY(1); }
  50% { transform: scaleY(0.1); }
}

@keyframes mole-bob {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

@keyframes jelly-bounce {
  0%, 100% { transform: scale(1, 1); }
  25% { transform: scale(0.95, 1.05); }
  50% { transform: scale(1.05, 0.95); }
  75% { transform: scale(0.98, 1.02); }
}

@keyframes card-glow {
  0%, 100% { box-shadow: 0 0 12px rgba(255,241,118,0.5); }
  50% { box-shadow: 0 0 20px rgba(255,241,118,0.8); }
}

@keyframes card-deal {
  0% { opacity: 0; transform: translateY(30px) scale(0.8); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes pulse-text {
  0%, 100% { opacity: 0.6; }
  50% { opacity: 1; }
}

@keyframes panel-pop {
  0% { opacity: 0; transform: translateY(-40px) scale(0.8); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes mole-rise {
  0% { transform: translateX(-50%) translateY(100%); }
  60% { transform: translateX(-50%) translateY(-8%); }
  100% { transform: translateX(-50%) translateY(0); }
}

@keyframes mole-hit {
  0% { bottom: 15%; transform: translateX(-50%) scaleY(1); }
  30% { bottom: 10%; transform: translateX(-50%) scaleY(0.6); }
  60% { bottom: 12%; transform: translateX(-50%) scaleY(0.8); }
  100% { bottom: -120%; transform: translateX(-50%) scaleY(1); }
}

@keyframes mole-miss {
  0% { bottom: 15%; transform: translateX(-50%) rotate(0deg); }
  25% { bottom: 5%; transform: translateX(-50%) rotate(-10deg); }
  50% { bottom: 15%; transform: translateX(-50%) rotate(0deg); }
  75% { bottom: 10%; transform: translateX(-50%) rotate(5deg); }
  100% { bottom: 15%; transform: translateX(-50%) rotate(0deg); }
}

@keyframes mole-hide {
  0% { bottom: 15%; }
  100% { bottom: -120%; }
}

@keyframes mole-celebrate {
  0% { transform: translateY(0) rotate(0deg); }
  25% { transform: translateY(-20px) rotate(-10deg); }
  50% { transform: translateY(0) rotate(0deg); }
  75% { transform: translateY(-15px) rotate(10deg); }
  100% { transform: translateY(0) rotate(0deg); }
}

@keyframes hammer-whack {
  0% { transform: rotate(0deg) scale(1); }
  30% { transform: rotate(-45deg) scale(1.2); }
  60% { transform: rotate(0deg) scale(0.9); }
  100% { transform: rotate(0deg) scale(1); }
}

@keyframes float-up {
  0% { opacity: 1; transform: translateY(0) scale(1) rotate(0deg); }
  50% { opacity: 1; transform: translateY(-40px) scale(1.3) rotate(5deg); }
  100% { opacity: 0; transform: translateY(-80px) scale(0.8) rotate(-5deg); }
}

@keyframes star-pop {
  0% { transform: scale(0) rotate(-180deg); opacity: 0; }
  60% { transform: scale(1.3) rotate(10deg); opacity: 1; }
  100% { transform: scale(1) rotate(0deg); opacity: 1; }
}

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

@keyframes combo-burst {
  0% { transform: scale(0); opacity: 0; }
  40% { transform: scale(1.4); opacity: 1; }
  100% { transform: scale(1); opacity: 1; }
}

@keyframes confetti-fall {
  0% { transform: translateY(-20px) rotate(0deg); opacity: 1; }
  100% { transform: translateY(100vh) rotate(720deg); opacity: 0; }
}

@keyframes confetti-shoot {
  0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
  60% { opacity: 1; }
  100% { transform: translate(var(--tx), var(--ty)) rotate(360deg); opacity: 0; }
}

@keyframes freeze-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(179, 229, 252, 0.6); }
  50% { box-shadow: 0 0 0 8px rgba(179, 229, 252, 0); }
}

@keyframes timer-warning {
  0%, 100% { color: #E57373; }
  50% { color: #EF5350; transform: scale(1.1); }
}

/* 类引用动画 */
.shake-screen { animation: shake-screen 0.4s ease; }
.combo-burst { animation: combo-burst 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); }
.timer-warning { animation: timer-warning 0.6s ease infinite; }
.frozen-hole { animation: freeze-pulse 1.5s ease infinite; }
