/* Node-attached render ownership.
 *
 * The first version tried to keep SVG status rings synchronized with WebGPU by
 * giving both layers the same duration/easing. That still left two independent
 * position owners and therefore could still show a ring where the soma no
 * longer was.
 *
 * In the active WebGPU path there is now one owner for node-attached status:
 * WebGPU. Failure fog and the persistent impact ring are drawn from the exact
 * live `position` and depth-scaled `radius` used for that soma in the same
 * frame. SVG keeps those marks only as fallback state.
 *
 * Repository names remain SVG text for accessibility and crisp typography, but
 * they no longer animate on their own either: the renderer publishes the live
 * soma displacement for the frame and the SVG label inherits that displacement.
 */

.renderer-surface--wasm[data-renderer="webgpu"] .wasm-node__fog,
.renderer-surface--wasm[data-renderer="webgpu"] .wasm-node__impact {
  display: none;
}

/* The SVG fallback still moves the whole node group as one object. Nothing
 * node-attached gets a second independent transition here: its local centre is
 * always (0, 0) inside the node group, so wherever that node goes, its fallback
 * weather goes with it. */
.renderer-surface--wasm[data-dragging="true"] .wasm-node__fog,
.renderer-surface--wasm[data-dragging="true"] .wasm-node__impact {
  transition: none;
}

@media (prefers-reduced-motion: reduce) {
  .wasm-node__fog,
  .wasm-node__impact {
    transition: none;
  }
}
