/* ============================================================
   動畫：畫面進場、彈出、搖動、彩紙、現在玩的呼吸燈
   ============================================================ */
@keyframes screen-in {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: none; }
}
@keyframes pop-in {
  0% { opacity: 0; transform: scale(.9); }
  70% { transform: scale(1.02); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20% { transform: translateX(-6px); }
  40% { transform: translateX(5px); }
  60% { transform: translateX(-4px); }
  80% { transform: translateX(3px); }
}
@keyframes confetti-fall {
  0% { transform: translate3d(0, -10px, 0) rotate(0); opacity: 1; }
  100% { transform: translate3d(var(--dx, 0), 105vh, 0) rotate(var(--rot, 360deg)); opacity: .9; }
}
@keyframes next-pulse {
  0%, 100% { box-shadow: 0 0 0 3px rgba(232, 80, 58, .12); }
  50% { box-shadow: 0 0 0 6px rgba(232, 80, 58, .05); }
}
@keyframes gentle-float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-5px); }
}
@keyframes bg-swap {
  from { opacity: 0; }
  to { opacity: .16; }
}
@keyframes star-pop {
  0% { transform: scale(.6); opacity: 0; }
  60% { transform: scale(1.08); opacity: 1; }
  100% { transform: scale(1); }
}

.node.is-next { animation: next-pulse 2.4s ease-in-out infinite; }
.bg__img.is-swap { animation: bg-swap .5s ease both; }
.result-stars { animation: star-pop .4s ease both; }
.mascot-svg { animation: gentle-float 5s ease-in-out infinite; }
