/* ============================================================
   動畫與轉場（可由「減少動畫」或系統設定關閉）
   ============================================================ */
@keyframes page-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes screen-in {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}
.screen.is-active { animation: screen-in 0.32s ease both; }
@keyframes toast-in {
  from { opacity: 0; transform: translate(-50%, 8px) scale(0.98); }
  to { opacity: 1; transform: translate(-50%, 0) scale(1); }
}
@keyframes spark-fly {
  0% { opacity: 1; transform: translate(0, 0) rotate(0) scale(0.7); }
  45% { opacity: 1; }
  100% { opacity: 0; transform: translate(var(--dx), var(--dy)) rotate(var(--rot)) scale(1.15); }
}
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-6px); }
  40% { transform: translateX(5px); }
  60% { transform: translateX(-4px); }
  80% { transform: translateX(3px); }
}
@keyframes combo-pop {
  0% { transform: scale(0.92); }
  60% { transform: scale(1.08); }
  100% { transform: scale(1); }
}
@keyframes timer-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 122, 138, 0); }
  50% { box-shadow: 0 0 0 4px rgba(255, 122, 138, 0.16); }
}
@keyframes correct-glow {
  0% { box-shadow: 0 0 0 0 rgba(78, 225, 176, 0); }
  40% { box-shadow: 0 0 0 5px rgba(78, 225, 176, 0.3), 0 0 28px rgba(78, 225, 176, 0.3); }
  100% { box-shadow: 0 0 0 0 rgba(78, 225, 176, 0); }
}
@keyframes wrong-glow {
  0% { box-shadow: 0 0 0 0 rgba(255, 122, 138, 0); }
  45% { box-shadow: 0 0 0 4px rgba(255, 122, 138, 0.28); }
  100% { box-shadow: 0 0 0 0 rgba(255, 122, 138, 0); }
}
@keyframes star-glow {
  from { filter: drop-shadow(0 0 4px rgba(255, 200, 87, 0.25)); }
  to { filter: drop-shadow(0 0 20px rgba(255, 200, 87, 0.66)); }
}
@keyframes float-y {
  from { transform: translateY(0); }
  to { transform: translateY(-7px); }
}
.home__hero, .hero-fallback { animation: float-y 4.6s ease-in-out infinite alternate; }
