Switch
CSSA primary path disconnects and a solid mechanical switch arm rotates downward to complete a secondary backup circuit.
- Tier
- CSS
- Dependencies
- None
- Duration
- 5.5 s, loops
- Categories
- Icons and micro-interactions
- Use cases
- Sync and integration, Security and trust
- Industries
- IT services and infrastructure, Cross-industry
- Style
- Technical · light stroke
- Set
- failover
- Tags
- geometriclinelooppulserotate
Companion assets
The same artwork, not animated. Derived from the entry’s own resting state, so it matches exactly.
Code
animation.svg
<svg xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true" class="pulsar pulsar-failover-switch" data-pulsar="failover-switch" viewBox="0 0 160 96"><g stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" class="failover-switch-circuit"><line x1="16" x2="48" y1="48" y2="48"></line><circle cx="48" cy="48" r="3.5" fill="currentColor" fill-opacity=".1"></circle><circle id="failover-switch-term-prim" cx="104" cy="30" r="3.5"></circle><line id="failover-switch-line-prim" x1="108" x2="144" y1="30" y2="30"></line><rect id="failover-switch-badge-prim" width="20" height="12" x="124" y="24" fill="currentColor" fill-opacity=".08" rx="2"></rect><circle id="failover-switch-term-sec" cx="104" cy="66" r="3.5"></circle><line id="failover-switch-line-sec" x1="108" x2="144" y1="66" y2="66"></line><rect id="failover-switch-badge-sec" width="20" height="12" x="124" y="60" fill="currentColor" fill-opacity=".08" rx="2"></rect></g><g id="failover-switch-arm-group" stroke="var(--pulsar-accent, currentColor)" stroke-linecap="round" stroke-width="2"><line x1="48" x2="104" y1="48" y2="30"></line><circle cx="104" cy="30" r="2.5" fill="var(--pulsar-accent, currentColor)"></circle></g><circle id="failover-switch-beacon-prim" cx="134" cy="30" r="2.5" fill="currentColor"></circle><circle id="failover-switch-beacon-sec" cx="134" cy="66" r="2.5" fill="var(--pulsar-accent, currentColor)"></circle><circle id="failover-switch-pulse-prim" cx="114" cy="30" r="2" fill="currentColor"></circle><circle id="failover-switch-pulse-sec" cx="114" cy="66" r="2" fill="var(--pulsar-accent, currentColor)"></circle></svg>
animation.css
.pulsar-failover-switch #failover-switch-arm-group {
transform-origin: 48px 48px;
animation: failover-switch-rotate 5500ms cubic-bezier(0.4, 0, 0.2, 1) infinite;
}
@keyframes failover-switch-rotate {
0%,
32% {
transform: rotate(0deg);
}
42%,
82% {
transform: rotate(37deg);
}
92%,
100% {
transform: rotate(0deg);
}
}
.pulsar-failover-switch #failover-switch-term-prim,
.pulsar-failover-switch #failover-switch-line-prim,
.pulsar-failover-switch #failover-switch-badge-prim {
animation: failover-switch-prim-state 5500ms ease-in-out infinite;
}
@keyframes failover-switch-prim-state {
0%,
30% {
opacity: 1;
}
38%,
84% {
opacity: 0.25;
}
92%,
100% {
opacity: 1;
}
}
.pulsar-failover-switch #failover-switch-term-sec,
.pulsar-failover-switch #failover-switch-line-sec,
.pulsar-failover-switch #failover-switch-badge-sec {
stroke: var(--pulsar-accent, currentColor);
animation: failover-switch-sec-state 5500ms ease-in-out infinite;
}
@keyframes failover-switch-sec-state {
0%,
36% {
opacity: 0.3;
}
44%,
82% {
opacity: 1;
}
92%,
100% {
opacity: 0.3;
}
}
.pulsar-failover-switch #failover-switch-beacon-prim {
animation: failover-switch-beacon-p 5500ms ease-in-out infinite;
}
@keyframes failover-switch-beacon-p {
0%,
30% {
opacity: 1;
transform: scale(1);
}
36%,
86% {
opacity: 0.15;
transform: scale(0.6);
}
94%,
100% {
opacity: 1;
transform: scale(1);
}
}
.pulsar-failover-switch #failover-switch-beacon-sec {
animation: failover-switch-beacon-s 5500ms ease-in-out infinite;
}
@keyframes failover-switch-beacon-s {
0%,
38% {
opacity: 0.15;
transform: scale(0.6);
}
46%,
82% {
opacity: 1;
transform: scale(1.2);
}
92%,
100% {
opacity: 0.15;
transform: scale(0.6);
}
}
.pulsar-failover-switch #failover-switch-pulse-prim {
animation: failover-switch-flow-p 5500ms linear infinite;
}
@keyframes failover-switch-flow-p {
0% {
opacity: 0;
transform: translateX(0);
}
5%,
25% {
opacity: 1;
transform: translateX(24px);
}
30%,
100% {
opacity: 0;
transform: translateX(28px);
}
}
.pulsar-failover-switch #failover-switch-pulse-sec {
animation: failover-switch-flow-s 5500ms linear infinite;
}
@keyframes failover-switch-flow-s {
0%,
42% {
opacity: 0;
transform: translateX(0);
}
48%,
76% {
opacity: 1;
transform: translateX(24px);
}
82%,
100% {
opacity: 0;
transform: translateX(28px);
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-failover-switch * {
animation: none !important;
}
}