Record Matching
CSSTwo columns of line segments sliding to align and fuse into pairs.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4.2 s, loops
- Categories
- Loaders and spinners
- Use cases
- Loading and waiting, Sync and integration
- Industries
- Finance and fintech, Cross-industry
- Style
- Minimal line · light stroke
- Set
- reconcile
- Tags
- loopminimalui
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" aria-hidden="true" class="pulsar pulsar-reconcile-match" data-pulsar="reconcile-match" viewBox="0 0 120 40"><g class="pulsar-reconcile-match-left"><line x1="40" x2="60" y1="8" y2="8" class="pulsar-reconcile-match-segment"></line><line x1="40" x2="60" y1="16" y2="16" class="pulsar-reconcile-match-segment"></line><line x1="40" x2="60" y1="24" y2="24" class="pulsar-reconcile-match-segment"></line><line x1="40" x2="60" y1="32" y2="32" class="pulsar-reconcile-match-segment"></line></g><g class="pulsar-reconcile-match-right"><line x1="60" x2="80" y1="8" y2="8" class="pulsar-reconcile-match-segment"></line><line x1="60" x2="80" y1="16" y2="16" class="pulsar-reconcile-match-segment"></line><line x1="60" x2="80" y1="24" y2="24" class="pulsar-reconcile-match-segment"></line><line x1="60" x2="80" y1="32" y2="32" class="pulsar-reconcile-match-segment"></line></g></svg>
animation.css
/* Accent: the side that slides in to match the fixed one. */
.pulsar-reconcile-match .pulsar-reconcile-match-right .pulsar-reconcile-match-segment {
stroke: var(--pulsar-accent, currentColor);
}
.pulsar-reconcile-match .pulsar-reconcile-match-segment {
fill: none;
stroke: currentColor;
stroke-width: 2;
stroke-linecap: round;
animation: reconcile-match-pulse 4200ms ease-in-out infinite;
}
.pulsar-reconcile-match .pulsar-reconcile-match-right {
animation: reconcile-match-move 4200ms linear infinite;
transform-box: view-box;
}
@keyframes reconcile-match-move {
0% {
transform: translateY(12px);
opacity: 1;
}
45% {
transform: translateY(0);
opacity: 1;
}
85% {
transform: translateY(0);
opacity: 1;
}
92.5% {
transform: translateY(0);
opacity: 0;
}
92.6% {
transform: translateY(12px);
opacity: 0;
}
100% {
transform: translateY(12px);
opacity: 1;
}
}
@keyframes reconcile-match-pulse {
0%,
45% {
stroke-width: 2;
}
55% {
stroke-width: 4;
}
65%,
100% {
stroke-width: 2;
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-reconcile-match .pulsar-reconcile-match-segment,
.pulsar-reconcile-match .pulsar-reconcile-match-right {
animation: none !important;
transform: none !important;
opacity: 1 !important;
stroke-width: 2 !important;
}
}