.lottery-ball-reveal-pending {
  opacity: 0;
  transform: translateY(-8px) scale(.52);
  transform-origin: center center;
}

.lottery-ball-reveal-show {
  animation: lottery-ball-pop .46s cubic-bezier(.18, .9, .28, 1.25) both;
  will-change: transform, opacity, filter;
}

.lottery-ball-empty,
.recommend-ball-placeholder {
  border-radius: 50%;
  background: rgba(0, 0, 0, .06);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .04);
}

/* 等待开奖占位球：只做 3 次（约 3.3 秒）的提示性闪烁，之后保持静止。
   原来用 infinite，而「投注截止 → 正式开奖」这段时间可能长达半小时，
   会导致首页号码球一直闪动。 */
.lottery-ball-waiting {
  animation: lottery-ball-waiting-pulse 1.1s ease-in-out 3;
}

@keyframes lottery-ball-waiting-pulse {
  0%,
  100% {
    opacity: .55;
    transform: scale(.94);
  }

  50% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes lottery-ball-pop {
  0% {
    opacity: 0;
    filter: blur(2px) drop-shadow(0 0 0 rgba(7, 193, 96, 0));
    transform: translateY(-10px) scale(.45) rotate(-8deg);
  }

  58% {
    opacity: 1;
    filter: blur(0) drop-shadow(0 0 10px rgba(7, 193, 96, .65));
    transform: translateY(2px) scale(1.12) rotate(2deg);
  }

  100% {
    opacity: 1;
    filter: blur(0) drop-shadow(0 0 0 rgba(7, 193, 96, 0));
    transform: translateY(0) scale(1) rotate(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .lottery-ball-reveal-pending {
    opacity: 1;
    transform: none;
  }

  .lottery-ball-reveal-show {
    animation: none;
  }

  .lottery-ball-waiting {
    animation: none;
  }
}
