.constellation{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.const-group{animation:const-drift var(--drift) ease-in-out infinite alternate}.const-spoke{stroke:color-mix(in srgb, var(--violet) 38%, transparent);stroke-width:1.2px;stroke-dasharray:2 6}.const-spoke.empty{stroke:#ffffff1a}.const-edge{stroke-width:1px;stroke-opacity:.45}.const-link{fill:none;stroke:color-mix(in srgb, var(--violet) 22%, transparent);stroke-width:1px}.const-hub{fill:color-mix(in srgb, var(--c) 18%, var(--bg));stroke-width:2px;filter:drop-shadow(0 0 8px var(--c))}.const-hub.empty{fill:#0000;stroke-dasharray:2 3;stroke-opacity:.55;filter:none}.const-label{font-family:var(--font-body);letter-spacing:.1em;text-transform:uppercase;fill:var(--text-soft);font-size:21px;font-weight:600}.const-count{fill:var(--text);font-family:var(--font-display);letter-spacing:0;font-size:32px;font-weight:500}.const-node-label{font-family:var(--font-body);fill:var(--text-soft);pointer-events:none;opacity:0;transition:opacity .25s var(--ease);font-size:19px}g:hover>.const-node-label,g:focus-within>.const-node-label{opacity:1}.const-ghost{fill:none;stroke:var(--c);stroke-opacity:.4;stroke-width:1.5px;stroke-dasharray:2 4}.const-star{cursor:pointer;filter:drop-shadow(0 0 8px var(--c));outline:none}.const-star:focus-visible{stroke:var(--text);stroke-width:2px}@keyframes const-drift{0%{transform:translate(0)}to{transform:translate(var(--dx), 5px)}}@media (prefers-reduced-motion:reduce){.const-group{animation:none}}
