/* First-paint skeleton shares the finished scene's fixed responsive frame. */
.association-skeleton{position:absolute;inset:0;display:grid;place-items:center;overflow:hidden;pointer-events:none;opacity:1;transition:opacity .65s ease}
.association-skeleton-art{width:91%;height:86%;opacity:.8;animation:association-skeleton-breathe 2.6s ease-in-out infinite}
.association-skeleton:after{content:'';position:absolute;inset:0;background:linear-gradient(105deg,transparent 25%,#ffffff85 48%,transparent 70%);transform:translateX(-110%);animation:association-skeleton-sweep 2.6s ease-in-out infinite}
#association-scene canvas{opacity:0;transition:opacity .65s ease}
#association-scene[data-ready=true] canvas{opacity:1}
#association-scene[data-ready=true] .association-skeleton,#association-scene[data-ready=fallback] .association-skeleton{opacity:0;visibility:hidden;transition:opacity .65s ease,visibility 0s .65s}
#association-scene:not([data-ready=loading]) .association-skeleton-art,#association-scene:not([data-ready=loading]) .association-skeleton:after{animation:none}
#association-scene[data-ready=loading] .association-scene-fallback,#association-scene[data-ready=loading] .association-data-points{visibility:hidden}
.association-scene-modes .association-motion-toggle{border-left:1px solid var(--line);border-radius:0;min-width:44px;margin-left:4px;padding-inline:13px;color:var(--ink);font-size:14px;background:none}
.association-scene-modes .association-motion-toggle[aria-pressed=true]{color:var(--ink);background:none}

/* Normalized path lengths let every leader trace from its object to its note. */
#association-scene[data-animated=true] .association-data-points[data-positioned=true]{opacity:1;visibility:visible;transition:none}
#association-scene[data-animated=true] .datum-leader path{stroke-dasharray:1;stroke-dashoffset:calc(1 - var(--line-draw,0));opacity:.8}
#association-scene[data-animated=true] .datum-leader circle{opacity:var(--point-opacity,0)}
#association-scene[data-animated=true] .datum-label{opacity:var(--note-opacity,0);pointer-events:none}
@keyframes association-skeleton-breathe{0%,100%{opacity:.6}50%{opacity:.9}}
@keyframes association-skeleton-sweep{to{transform:translateX(110%)}}
@media(prefers-reduced-motion:reduce){
  .association-skeleton,#association-scene canvas{transition:none!important}
  .association-skeleton-art,.association-skeleton:after{animation:none}
  .association-skeleton:after{display:none}
}
