Fenceposts
CSSA horizontal row of short vertical tick indicators with tiny circles at their peaks that blink sequentially from the edges toward the center.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4 s, loops
- Categories
- Backgrounds and ambient
- Use cases
- Security and trust, Ambient background
- Industries
- SaaS and software, Security and identity
- Style
- Technical · light stroke
- Set
- perimeter
- Tags
- barsdotspulseambientminimal
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-fenceposts" data-pulsar="perimeter-fenceposts" viewBox="0 0 160 96"><line x1="20" x2="140" y1="62" y2="62" stroke="currentColor" opacity=".35"></line><g class="perimeter-fenceposts-pair-1"><line x1="32" x2="32" y1="62" y2="42" stroke="currentColor" stroke-width="1.25"></line><circle cx="32" cy="40" r="2.5" fill="currentColor"></circle><line x1="128" x2="128" y1="62" y2="42" stroke="currentColor" stroke-width="1.25"></line><circle cx="128" cy="40" r="2.5" fill="currentColor"></circle></g><g class="perimeter-fenceposts-pair-2"><line x1="48" x2="48" y1="62" y2="38" stroke="currentColor" stroke-width="1.25"></line><circle cx="48" cy="36" r="2.5" fill="currentColor"></circle><line x1="112" x2="112" y1="62" y2="38" stroke="currentColor" stroke-width="1.25"></line><circle cx="112" cy="36" r="2.5" fill="currentColor"></circle></g><g class="perimeter-fenceposts-pair-3"><line x1="64" x2="64" y1="62" y2="34" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5"></line><circle cx="64" cy="32" r="2.5" fill="var(--pulsar-accent, currentColor)"></circle><line x1="96" x2="96" y1="62" y2="34" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5"></line><circle cx="96" cy="32" r="2.5" fill="var(--pulsar-accent, currentColor)"></circle></g><g class="perimeter-fenceposts-center"><line x1="80" x2="80" y1="62" y2="28" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5"></line><circle cx="80" cy="26" r="3.5" fill="var(--pulsar-accent, currentColor)"></circle><circle cx="80" cy="26" r="7" stroke="var(--pulsar-accent, currentColor)" class="perimeter-fenceposts-ring" opacity=".8"></circle></g></svg>
animation.css
.pulsar-perimeter-fenceposts {
display: block;
overflow: visible;
}
.pulsar-perimeter-fenceposts .perimeter-fenceposts-pair-1 {
animation: perimeter-fenceposts-step-anim 4000ms ease infinite -3000ms;
}
.pulsar-perimeter-fenceposts .perimeter-fenceposts-pair-2 {
animation: perimeter-fenceposts-step-anim 4000ms ease infinite -2000ms;
}
.pulsar-perimeter-fenceposts .perimeter-fenceposts-pair-3 {
animation: perimeter-fenceposts-step-anim 4000ms ease infinite -1000ms;
}
.pulsar-perimeter-fenceposts .perimeter-fenceposts-center {
animation: perimeter-fenceposts-center-anim 4000ms ease infinite 0ms;
}
.pulsar-perimeter-fenceposts .perimeter-fenceposts-ring {
animation: perimeter-fenceposts-ring-anim 2000ms ease-out infinite;
transform-origin: 80px 26px;
}
@keyframes perimeter-fenceposts-step-anim {
0%,
100% {
opacity: 0.35;
transform: translateY(0);
}
30% {
opacity: 1;
transform: translateY(-3px);
}
60% {
opacity: 0.35;
transform: translateY(0);
}
}
@keyframes perimeter-fenceposts-center-anim {
0%,
100% {
opacity: 0.5;
transform: translateY(0);
}
40% {
opacity: 1;
transform: translateY(-4px);
}
70% {
opacity: 0.5;
transform: translateY(0);
}
}
@keyframes perimeter-fenceposts-ring-anim {
0% {
transform: scale(0.5);
opacity: 0.9;
}
100% {
transform: scale(1.6);
opacity: 0;
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-perimeter-fenceposts .perimeter-fenceposts-pair-1,
.pulsar-perimeter-fenceposts .perimeter-fenceposts-pair-2,
.pulsar-perimeter-fenceposts .perimeter-fenceposts-pair-3,
.pulsar-perimeter-fenceposts .perimeter-fenceposts-center,
.pulsar-perimeter-fenceposts .perimeter-fenceposts-ring {
animation: none;
}
}