/* Independent network-port activity; the power lamps and housings stay calm. */
.ks-workbench .ks-cluster-activity-led { opacity: .4; }
.ks-workbench .ks-cluster-node[data-node="1"] { --cluster-activity-cycle: 3.7s; --cluster-activity-phase: -.6s; }
.ks-workbench .ks-cluster-node[data-node="2"] { --cluster-activity-cycle: 4.3s; --cluster-activity-phase: -2.1s; }
.ks-workbench .ks-cluster-node[data-node="3"] { --cluster-activity-cycle: 4.9s; --cluster-activity-phase: -3.4s; }
.ks-workbench .ks-cluster-activity-led[data-port="1"] { --cluster-port-phase: 0s; }
.ks-workbench .ks-cluster-activity-led[data-port="2"] { --cluster-port-phase: -.85s; }
.ks-workbench .ks-cluster-activity-led[data-port="3"] { --cluster-port-phase: -2.2s; }

@media (prefers-reduced-motion: no-preference) {
    .ks-workbench.is-assembled .ks-cluster-activity-led {
        animation: ks-cluster-port-activity var(--cluster-activity-cycle, 4.3s) ease-in-out infinite;
        animation-delay: calc(var(--cluster-activity-phase, 0s) + var(--cluster-port-phase, 0s));
        animation-play-state: paused;
    }
    .ks-workbench.is-assembled.is-ambient-visible:not(.is-document-hidden) .ks-cluster-activity-led {
        animation-play-state: running;
    }
}

/* A short read/write pair, a later packet, then dark idle between bursts. */
@keyframes ks-cluster-port-activity {
    0%, 8%, 28%, 64%, 77%, 100% { opacity: .14; }
    10%, 14% { opacity: .9; }
    17%, 19% { opacity: .18; }
    21%, 24% { opacity: .76; }
    67%, 71% { opacity: .62; }
}
