.orbital {
  position: absolute;
  inset: 0;
  bottom: -25%;
  z-index: 0;
  pointer-events: none;
  user-select: none;
}

.orbital--backdrop {
  position: fixed;
  inset: 0;
  bottom: 0;
  z-index: -1;
}

.orbital__svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
}

.orbital__scene {
  transform-origin: center;
  will-change: transform;
}

.orbital__cluster {
  transform-origin: center;
  will-change: transform;
}

.orbital__orb {
  will-change: transform, opacity;
}

.orbital__path {
  fill: none;
  stroke: var(--line);
  stroke-width: 1;
  opacity: 0.55;
}

.orbital__node {
  fill: var(--accent);
  will-change: opacity, transform;
  animation: node-pulse 5s ease-in-out infinite;
}

.orbital__node:nth-of-type(1) {
  animation-delay: -1.5s;
}

.orbital__node:nth-of-type(2) {
  animation-delay: -3s;
}

@keyframes node-pulse {
  0%, 100% {
    opacity: 0.75;
  }
  50% {
    opacity: 1;
  }
}

/* Bring the oversized edge orbs back into view on narrow/tall viewports where
   xMidYMid slice crops them out, while preserving the desktop composition. */
@media (max-width: 767px) {
  .orbital__cluster--left {
    transform: translateX(30%);
  }

  .orbital__cluster--right {
    transform: translateX(-33%);
  }
}

@media (max-width: 374px) {
  .orbital__cluster--left {
    transform: translateX(32%);
  }

  .orbital__cluster--right {
    transform: translateX(-35%);
  }
}

@media (min-width: 768px) and (max-width: 1023px) {
  .orbital__cluster--left {
    transform: translateX(22%);
  }

  .orbital__cluster--right {
    transform: translateX(-24%);
  }
}

@media (prefers-reduced-motion: reduce) {
  .orbital__orb,
  .orbital__path,
  .orbital__node,
  .orbital__scene {
    animation: none !important;
    transition: none !important;
  }
}
