/* V32: illuminate the existing photographed data traces, chip and output panes.
   Image and SVG share one 1536×1024 cover crop at every viewport size. */
.connected-photo .service-photo{object-position:center}
.service-tile:hover .connected-photo .service-photo{transform:none}
.connected-energy{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen;opacity:.72}
.connected-input-sweep{opacity:0;animation:connected-input-cycle 7.2s cubic-bezier(.35,0,.3,1) infinite}
.connected-input-sweep.input-echo{animation-delay:.48s;opacity:0}
.connected-core-charge{opacity:0;animation:connected-core-cycle 7.2s ease-in-out infinite}
.connected-output-sweep{opacity:0;animation:connected-output-cycle 7.2s cubic-bezier(.25,0,.3,1) infinite}
.connected-result{opacity:0;animation:connected-result-cycle 7.2s ease-in-out infinite}
.connected-result.result-chart{animation-delay:.35s}
.connected-result.result-table{animation-delay:.7s}
@keyframes connected-input-cycle{0%,2%{transform:translateX(0);opacity:0}7%{opacity:.85}30%{transform:translateX(920px);opacity:1}35%,100%{transform:translateX(920px);opacity:0}}
@keyframes connected-core-cycle{0%,23%,57%,100%{opacity:0}34%{opacity:.75}42%{opacity:.35}47%{opacity:.55}}
@keyframes connected-output-cycle{0%,36%{transform:translateX(0);opacity:0}40%{opacity:1}55%{transform:translateX(350px);opacity:.9}60%,100%{transform:translateX(350px);opacity:0}}
@keyframes connected-result-cycle{0%,49%,86%,100%{opacity:0}61%{opacity:.46}70%{opacity:.13}77%{opacity:.25}}
@media(prefers-reduced-motion:reduce){.connected-energy{display:none}.connected-energy *{animation:none!important}}
