/* NexviaSoft v11 — Orbit motion enhancement. Existing visual geometry stays intact. */
.orbit-tracer-track {
  position: absolute;
  z-index: 3;
  top: 50%;
  left: 50%;
  width: 370px;
  height: 370px;
  transform: translate(-50%, -50%);
  pointer-events: none;
  will-change: transform;
}
.orbit-tracer-dot {
  position: absolute;
  top: -5px;
  left: calc(50% - 5px);
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #258dff;
  box-shadow: 0 0 0 5px rgba(37,141,255,.1), 0 0 20px rgba(37,141,255,.8);
}
.orbit-tracer-dot.violet {
  top: auto;
  bottom: -5px;
  background: #aa55ff;
  box-shadow: 0 0 0 5px rgba(170,85,255,.1), 0 0 20px rgba(170,85,255,.76);
}
.orbit-motion-fallback .orbit-tracer-track {
  animation: nx-orbit-trace 26s linear infinite;
  animation-play-state: var(--orbit-play-state, running);
}
.orbit-motion-fallback .ecosystem-core img {
  animation: nx-core-breathe 6.4s ease-in-out infinite alternate;
  animation-play-state: var(--orbit-play-state, running);
}
@keyframes nx-orbit-trace {
  from { transform: translate(-50%, -50%) rotate(0deg); }
  to { transform: translate(-50%, -50%) rotate(360deg); }
}
@keyframes nx-core-breathe {
  0%,100% { transform: scale(1); }
  50% { transform: scale(1.05); }
}
@media (prefers-reduced-motion: reduce) {
  .ecosystem-orbit .orbit,
  .orbit-motion-fallback .orbit-tracer-track,
  .orbit-motion-fallback .ecosystem-core img { animation: none !important; }
  .eco-card { transition: none !important; }
  .eco-node { transition: none !important; }
}
