/* ============ animations：全部关键帧 ============ */

@keyframes twinkle {
  from { opacity: 0.4; }
  to { opacity: 0.9; }
}

@keyframes sunFloat {
  from { transform: translateY(0); }
  to { transform: translateY(-14px); }
}

@keyframes glowDrift {
  from { transform: translate(0, 0); opacity: 0.9; }
  to { transform: translate(2%, -2%); opacity: 1; }
}

@keyframes heroFloat {
  from { transform: translateX(-50%) translateY(0) rotate(-2deg); }
  to { transform: translateX(-50%) translateY(-12px) rotate(2deg); }
}

@keyframes buffPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.65; }
}

@keyframes comboPulse {
  0% { transform: scale(1); }
  40% { transform: scale(1.35); }
  100% { transform: scale(1); }
}

@keyframes praiseFloat {
  0% { opacity: 0; transform: translateX(-50%) scale(0.6); }
  25% { opacity: 1; transform: translateX(-50%) scale(1.12); }
  60% { opacity: 1; transform: translateX(-50%) scale(1); }
  100% { opacity: 0; transform: translateX(-50%) translateY(-46px) scale(0.95); }
}

@keyframes rightPop {
  0% { transform: scale(1); }
  45% { transform: scale(1.06); }
  100% { transform: scale(1); }
}

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

@keyframes listenPulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--accent-soft); }
  50% { box-shadow: 0 0 0 14px transparent; }
}

@keyframes countZoom {
  0% { transform: scale(1.8); opacity: 0; }
  30% { transform: scale(1); opacity: 1; }
  100% { transform: scale(0.92); opacity: 0.9; }
}

@keyframes matchPop {
  0% { transform: scale(1); }
  45% { transform: scale(1.1); }
  100% { transform: scale(1); }
}

@keyframes stampIn {
  0% { transform: scale(2.1) rotate(-14deg); opacity: 0; }
  60% { transform: scale(0.92) rotate(-4deg); opacity: 1; }
  100% { transform: scale(1) rotate(-6deg); opacity: 1; }
}
.result-stars.stamp-in, .omikuji-paper.stamp-in { animation: stampIn 0.5s cubic-bezier(0.34, 1.4, 0.64, 1); }

@keyframes popIn {
  0% { transform: translateY(14px) scale(0.97); opacity: 0; }
  100% { transform: none; opacity: 1; }
}
.pop-in { animation: popIn 0.4s ease; }

@keyframes chipPop {
  0% { opacity: 0; transform: translate(-50%, -110%) scale(0.8); }
  12% { opacity: 1; transform: translate(-50%, -130%) scale(1); }
  80% { opacity: 1; transform: translate(-50%, -138%) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -150%) scale(0.95); }
}

/* 减少动态偏好：关掉装饰动画 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
