Alignment
CSSFour corners converging to verify a central data point.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4 s, loops
- Categories
- Loaders and spinners
- Use cases
- Loading and waiting, Search and filtering
- Industries
- Finance and fintech, Cross-industry
- Style
- Minimal line · light stroke
- Set
- reconcile
- Tags
- loopminimalgrid
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-crosshair" data-pulsar="reconcile-crosshair" viewBox="0 0 120 40"><path id="reconcile-crosshair-tl" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M40 13V7a2 2 0 0 1 2-2h6" class="reconcile-crosshair-bracket"></path><path id="reconcile-crosshair-tr" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M72 5h6a2 2 0 0 1 2 2v6" class="reconcile-crosshair-bracket"></path><path id="reconcile-crosshair-bl" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M40 27v6a2 2 0 0 0 2 2h6" class="reconcile-crosshair-bracket"></path><path id="reconcile-crosshair-br" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M72 35h6a2 2 0 0 0 2-2v-6" class="reconcile-crosshair-bracket"></path><circle id="reconcile-crosshair-center" cx="60" cy="20" r="2" fill="currentColor" opacity="0"></circle></svg>
animation.css
/* Accent: the centre dot, which is the lock itself. */
.pulsar-reconcile-crosshair #reconcile-crosshair-center {
fill: var(--pulsar-accent, currentColor);
}
.pulsar-reconcile-crosshair .reconcile-crosshair-bracket {
animation-duration: 4000ms;
animation-iteration-count: infinite;
animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);
transform-box: view-box;
}
.pulsar-reconcile-crosshair #reconcile-crosshair-tl {
animation-name: reconcile-crosshair-tl-move;
}
.pulsar-reconcile-crosshair #reconcile-crosshair-tr {
animation-name: reconcile-crosshair-tr-move;
}
.pulsar-reconcile-crosshair #reconcile-crosshair-bl {
animation-name: reconcile-crosshair-bl-move;
}
.pulsar-reconcile-crosshair #reconcile-crosshair-br {
animation-name: reconcile-crosshair-br-move;
}
.pulsar-reconcile-crosshair #reconcile-crosshair-center {
animation: reconcile-crosshair-pulse 4000ms infinite cubic-bezier(0.4, 0, 0.2, 1);
transform-box: view-box;
transform-origin: 60px 20px;
}
@keyframes reconcile-crosshair-tl-move {
0% {
transform: translate(0, 0);
}
30%,
70% {
transform: translate(12px, 7px);
}
100% {
transform: translate(0, 0);
}
}
@keyframes reconcile-crosshair-tr-move {
0% {
transform: translate(0, 0);
}
30%,
70% {
transform: translate(-12px, 7px);
}
100% {
transform: translate(0, 0);
}
}
@keyframes reconcile-crosshair-bl-move {
0% {
transform: translate(0, 0);
}
30%,
70% {
transform: translate(12px, -7px);
}
100% {
transform: translate(0, 0);
}
}
@keyframes reconcile-crosshair-br-move {
0% {
transform: translate(0, 0);
}
30%,
70% {
transform: translate(-12px, -7px);
}
100% {
transform: translate(0, 0);
}
}
@keyframes reconcile-crosshair-pulse {
0%,
40%,
95%,
100% {
opacity: 0;
transform: scale(0.5);
}
50%,
85% {
opacity: 1;
transform: scale(1);
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-reconcile-crosshair .reconcile-crosshair-bracket,
.pulsar-reconcile-crosshair #reconcile-crosshair-center {
animation: none;
opacity: 1;
transform: scale(1);
}
.pulsar-reconcile-crosshair #reconcile-crosshair-tl {
transform: translate(12px, 7px);
}
.pulsar-reconcile-crosshair #reconcile-crosshair-tr {
transform: translate(-12px, 7px);
}
.pulsar-reconcile-crosshair #reconcile-crosshair-bl {
transform: translate(12px, -7px);
}
.pulsar-reconcile-crosshair #reconcile-crosshair-br {
transform: translate(-12px, -7px);
}
.pulsar-reconcile-crosshair #reconcile-crosshair-center {
opacity: 1;
transform: scale(1);
}
}