/* Motion stays on the drawing so surrounding text remains stable. */
.tech-visual .stack-diagram{transform-origin:50% 50%}
.tech-float-wrap{animation:tech-layer-hover 6.5s ease-in-out infinite;animation-delay:var(--float-delay,0s);transform-box:fill-box;transform-origin:center}
.tech-float-wrap:nth-of-type(2n){animation-duration:7.4s}
.motion-art{opacity:.95;transition:opacity .4s}
.tech-signal{stroke-dasharray:9 91;stroke-dashoffset:0;animation:tech-signal-flow var(--signal-duration,3s) linear infinite;animation-delay:var(--signal-delay,0s);filter:drop-shadow(0 0 2px #b9c7ff90)}
.tech-edge-signal{fill:none;stroke-width:2;stroke-linecap:round;stroke-dasharray:7 93;stroke-dashoffset:0;animation:tech-signal-flow var(--signal-duration,6s) linear infinite;animation-delay:var(--signal-delay,0s);opacity:.8;filter:drop-shadow(0 0 2px #c8b4ff80)}
.tech-node-pulse{animation:tech-node-breathe 2.8s ease-in-out infinite;animation-delay:var(--signal-delay,0s);transform-box:fill-box;transform-origin:center;filter:drop-shadow(0 0 4px #a8c6f8)}
/* Execution light travels 1.4x faster; the platform drift keeps its original pace. */
.execution-diagram .tech-signal{animation-duration:calc(var(--signal-duration,3s)/1.4);animation-delay:calc(var(--signal-delay,0s)/1.4)}
.execution-diagram .tech-edge-signal{animation-duration:calc(var(--signal-duration,6s)/1.4);animation-delay:calc(var(--signal-delay,0s)/1.4)}
/* Proof light follows actual wires and bevels, with a softer pass through corners. */
.proof-diagram .tech-signal-exterior{display:none}
.proof-diagram .tech-signal{animation-name:proof-wire-flow;stroke-width:1.25px;stroke-dasharray:7 93;stroke-linecap:round;filter:none}
.proof-diagram .tech-edge-signal{animation-name:proof-edge-flow;stroke-width:1.2px;stroke-dasharray:4 96;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 .6px #b6bcdd45)}
.proof-diagram .tech-node-pulse{animation-name:proof-node-breathe;filter:none}
.tech-section:not(.motion-running) :is(.tech-float-wrap,.tech-signal,.tech-edge-signal,.tech-node-pulse){animation-play-state:paused}
.tech-section.motion-paused .motion-art,.tech-section.motion-paused .tech-edge-signal{opacity:.4}
.tech-motion-toggle{display:inline-flex;align-items:center;justify-content:flex-end;gap:7px;flex-shrink:0;font:inherit;font-size:11px;letter-spacing:0;background:transparent;color:#ab9ebe;padding:5px 0 5px 8px;cursor:pointer;border:0;border-radius:2px}
.tech-motion-toggle:hover{color:#e5d8f5}.tech-motion-toggle:focus-visible{outline:1px solid #b69ed6;outline-offset:4px}
.tech-motion-toggle svg{width:12px;height:12px;fill:currentColor}
.tech-motion-toggle .motion-play-icon{display:none}.motion-paused .tech-motion-toggle .motion-play-icon{display:block}.motion-paused .tech-motion-toggle .motion-pause-icon{display:none}
.tech-visual figcaption{gap:14px}.tech-visual figcaption>span:last-of-type{display:none}
@keyframes tech-layer-hover{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes tech-signal-flow{to{stroke-dashoffset:-100}}
@keyframes tech-node-breathe{0%,100%{opacity:.3;transform:scale(.75)}50%{opacity:1;transform:scale(1.25)}}
@keyframes proof-wire-flow{0%{stroke-dashoffset:0;opacity:0}18%,78%{opacity:.52}100%{stroke-dashoffset:-100;opacity:0}}
@keyframes proof-edge-flow{0%{stroke-dashoffset:0;opacity:0}15%,35%,65%,85%{opacity:.5}46%,54%{opacity:.2}100%{stroke-dashoffset:-100;opacity:0}}
@keyframes proof-node-breathe{0%,100%{opacity:.2;transform:scale(.85)}50%{opacity:.55;transform:scale(1.05)}}
@media(max-width:540px){.tech-motion-toggle{font-size:11px}.tech-edge-signal{stroke-width:2.3px}.tech-signal{stroke-width:2.2px}}
@media(prefers-reduced-motion:reduce){.tech-float-wrap,.tech-signal,.tech-edge-signal,.tech-node-pulse{animation:none!important}.motion-art,.tech-signal,.tech-edge-signal,.tech-node-pulse{display:none}.tech-motion-toggle{display:none}}
