@keyframes planet-rotate { to { transform: rotate(360deg); } }
@keyframes planet-breathe {
  0%, 100% { transform: translateZ(0) scale(1); filter: brightness(1); }
  50% { transform: translateZ(0) scale(1.012); filter: brightness(1.045); }
}
@keyframes earth-orbit-drift {
  0%, 100% { transform: translate3d(-2px, 1px, 0) rotate(-.65deg) scale(1.004); background-position: 49% 50%; filter: brightness(.99) saturate(1.025); }
  25% { transform: translate3d(1px, -2px, 0) rotate(-.1deg) scale(1.009); background-position: 50% 49%; filter: brightness(1.015) saturate(1.04); }
  50% { transform: translate3d(2px, -3px, 0) rotate(.65deg) scale(1.014); background-position: 51% 50%; filter: brightness(1.035) saturate(1.055); }
  75% { transform: translate3d(-1px, 0, 0) rotate(.1deg) scale(1.009); background-position: 50% 51%; filter: brightness(1.015) saturate(1.04); }
}
@keyframes earth-float-360 {
  0%, 100% { transform: translate3d(0, -3px, 0) scale(1); }
  12.5% { transform: translate3d(3px, -2px, 0) scale(1.006); }
  25% { transform: translate3d(5px, 0, 0) scale(1.011); }
  37.5% { transform: translate3d(3px, 3px, 0) scale(1.016); }
  50% { transform: translate3d(0, 5px, 0) scale(1.02); }
  62.5% { transform: translate3d(-3px, 3px, 0) scale(1.016); }
  75% { transform: translate3d(-5px, 0, 0) scale(1.011); }
  87.5% { transform: translate3d(-3px, -2px, 0) scale(1.006); }
}
@keyframes atmosphere-pulse {
  0%, 100% { opacity: .84; transform: translateZ(0) scale(.998); }
  50% { opacity: 1; transform: translateZ(0) scale(1.007); }
}
@keyframes starfield-drift {
  to { background-position: 61px 61px; }
}
@keyframes near-stars-drift {
  to { background-position: -137px 89px, 113px -127px, -79px -101px; }
}
@keyframes stars-twinkle {
  0%, 100% { opacity: .24; }
  50% { opacity: .42; }
}

/* --shake is set to 1 / 0 by the Screen Reactions setting. At 0 only the
   brightness flash remains, so the toggle has a real, visible effect. */
@keyframes planet-pick {
  0%, 100% { transform: translateZ(0) scale(1) rotate(0deg); filter: brightness(1); }
  34% {
    transform: translateZ(0) scale(calc(1 - .045 * var(--shake, 1))) rotate(calc(-.7deg * var(--shake, 1)));
    filter: brightness(1.22);
  }
  68% {
    transform: translateZ(0) scale(calc(1 + .012 * var(--shake, 1))) rotate(calc(.4deg * var(--shake, 1)));
    filter: brightness(1.08);
  }
}

@keyframes float-reward { 0% { opacity:0; transform:translate(-50%,10px) scale(.85); } 18% { opacity:1; } 100% { opacity:0; transform:translate(-50%,-80px) scale(1.05); } }
@keyframes spark-fly { to { opacity:0; transform:translate(var(--dx),var(--dy)) scale(.2); } }
@keyframes asteroid-wobble { 50% { transform:rotate(8deg) scale(1.04); } }
@keyframes toast-in { from { opacity:0; transform:translateY(10px); } }

@media (prefers-reduced-motion: reduce) {
  .game-shell::before, .planet-stage::after, .planet-button::before, .planet-button::after, .planet-texture, .asteroid-target { animation: none; }
}
