/* Hexagon ring rotation — wrapper rotates, orbits counter-rotate to stay upright */
@keyframes hex-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}
@keyframes hex-spin-reverse {
  from { transform:
    rotate(var(--angle))
    translate(0, calc(-1 * var(--orbit-radius)))
    rotate(calc(-1 * var(--angle)))
    rotate(0deg); }
  to { transform:
    rotate(var(--angle))
    translate(0, calc(-1 * var(--orbit-radius)))
    rotate(calc(-1 * var(--angle)))
    rotate(-360deg); }
}

.hex-ring {
  position: absolute;
  inset: 0;
  transform-origin: 50% 50%;
  animation: hex-spin 36s linear infinite;
}
.hex-system .hex-orbit {
  animation: hex-spin-reverse 36s linear infinite;
}
.hex-ring.paused,
.hex-ring.paused ~ * .hex-orbit,
.hex-ring.paused .hex-orbit,
.hex-system:has(.hex-ring.paused) .hex-orbit {
  animation-play-state: paused;
}

/* Floating badges */
@keyframes float-y {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-10px); }
}
.float-badge-bl { animation: float-y 5s ease-in-out -0.5s infinite; }

/* Sparkles twinkle */
@keyframes twinkle {
  0%, 100% { opacity: .45; transform: scale(.9); }
  50%      { opacity: 1;  transform: scale(1.2); }
}
.spark { animation: twinkle 2.6s ease-in-out infinite; }

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .hex-ring,
  .hex-system .hex-orbit,
  .float-badge-bl,
  .spark {
    animation: none !important;
  }
  .reveal { opacity: 1; transform: none; transition: none; }
}
