Nodes
CSSA constellation of sparse, interconnected node coordinates where the linking lines fade in and out as a soft horizontal light band sweeps across them.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4.6 s, loops
- Categories
- Backgrounds and ambient
- Use cases
- Security and trust, Ambient background
- Industries
- Security and identity, IT services and infrastructure
- Style
- Technical · light stroke
- Set
- perimeter
- Tags
- dotslineambientgeometricminimal
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-perimeter-nodes" data-pulsar="perimeter-nodes" viewBox="0 0 160 96"><rect width="120" height="64" x="20" y="16" stroke="currentColor" stroke-dasharray="3 3" opacity=".15"></rect><g class="perimeter-nodes-links"><line x1="32" x2="52" y1="36" y2="60" stroke="currentColor" opacity=".3"></line><line x1="52" x2="72" y1="60" y2="30" stroke="currentColor" opacity=".3"></line><line x1="72" x2="96" y1="30" y2="52" stroke="currentColor" opacity=".3"></line><line x1="96" x2="114" y1="52" y2="28" stroke="currentColor" opacity=".3"></line><line x1="114" x2="132" y1="28" y2="58" stroke="currentColor" opacity=".3"></line><line x1="52" x2="96" y1="60" y2="52" stroke="currentColor" stroke-dasharray="2 2" opacity=".2"></line><line x1="72" x2="114" y1="30" y2="28" stroke="currentColor" stroke-dasharray="2 2" opacity=".2"></line></g><g class="perimeter-nodes-point-1"><circle cx="32" cy="36" r="2.5" fill="currentColor"></circle></g><g class="perimeter-nodes-point-2"><circle cx="52" cy="60" r="2.5" fill="currentColor"></circle></g><g class="perimeter-nodes-point-3"><circle cx="72" cy="30" r="3" fill="var(--pulsar-accent, currentColor)"></circle></g><g class="perimeter-nodes-point-4"><circle cx="96" cy="52" r="3" fill="var(--pulsar-accent, currentColor)"></circle></g><g class="perimeter-nodes-point-5"><circle cx="114" cy="28" r="2.5" fill="currentColor"></circle></g><g class="perimeter-nodes-point-6"><circle cx="132" cy="58" r="2.5" fill="currentColor"></circle></g><line y1="12" y2="84" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5" class="perimeter-nodes-beam" opacity=".6"></line></svg>
animation.css
.pulsar-perimeter-nodes {
display: block;
overflow: visible;
}
.pulsar-perimeter-nodes .perimeter-nodes-beam {
animation: perimeter-nodes-beam-anim 4600ms ease-in-out infinite;
}
.pulsar-perimeter-nodes .perimeter-nodes-point-1 {
animation: perimeter-nodes-pt-anim 4600ms ease infinite -3800ms;
}
.pulsar-perimeter-nodes .perimeter-nodes-point-2 {
animation: perimeter-nodes-pt-anim 4600ms ease infinite -3200ms;
}
.pulsar-perimeter-nodes .perimeter-nodes-point-3 {
animation: perimeter-nodes-pt-anim 4600ms ease infinite -2600ms;
}
.pulsar-perimeter-nodes .perimeter-nodes-point-4 {
animation: perimeter-nodes-pt-anim 4600ms ease infinite -2000ms;
}
.pulsar-perimeter-nodes .perimeter-nodes-point-5 {
animation: perimeter-nodes-pt-anim 4600ms ease infinite -1400ms;
}
.pulsar-perimeter-nodes .perimeter-nodes-point-6 {
animation: perimeter-nodes-pt-anim 4600ms ease infinite -800ms;
}
@keyframes perimeter-nodes-beam-anim {
0% {
transform: translateX(16px);
opacity: 0;
}
15% {
opacity: 0.8;
}
85% {
opacity: 0.8;
}
100% {
transform: translateX(144px);
opacity: 0;
}
}
@keyframes perimeter-nodes-pt-anim {
0%,
100% {
transform: scale(0.85);
opacity: 0.4;
}
40% {
transform: scale(1.3);
opacity: 1;
}
70% {
transform: scale(0.85);
opacity: 0.4;
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-perimeter-nodes .perimeter-nodes-beam,
.pulsar-perimeter-nodes .perimeter-nodes-point-1,
.pulsar-perimeter-nodes .perimeter-nodes-point-2,
.pulsar-perimeter-nodes .perimeter-nodes-point-3,
.pulsar-perimeter-nodes .perimeter-nodes-point-4,
.pulsar-perimeter-nodes .perimeter-nodes-point-5,
.pulsar-perimeter-nodes .perimeter-nodes-point-6 {
animation: none;
}
}