Reconciled Lock
CSSInterlocking semicircles attempting to align and finally snapping into a secure circle.
- Tier
- CSS
- Dependencies
- None
- Duration
- 5 s, loops
- Categories
- Loaders and spinners
- Use cases
- Loading and waiting, Security and trust
- Industries
- Finance and fintech, Cross-industry
- Style
- Minimal line · light stroke
- Set
- reconcile
- Tags
- loopcircleminimal
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-labelledby="reconcile-lock-title" class="pulsar pulsar-reconcile-lock" data-pulsar="reconcile-lock" role="img" viewBox="0 0 120 40"><title id="reconcile-lock-title">Reconciled Lock</title><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" class="pulsar-reconcile-lock-container"><path id="reconcile-lock-left" d="M60 6h2a14 14 0 0 0 0 28h-2"></path><path id="reconcile-lock-right" d="M60 6h-2a14 14 0 0 1 0 28h2"></path></g></svg>
animation.css
/* Accent: the closing half, so the two halves meeting is visible. */
.pulsar-reconcile-lock #reconcile-lock-right {
stroke: var(--pulsar-accent, currentColor);
}
.pulsar-reconcile-lock .pulsar-reconcile-lock-container {
transform-box: view-box;
transform-origin: 60px 20px;
}
.pulsar-reconcile-lock #reconcile-lock-left,
.pulsar-reconcile-lock #reconcile-lock-right {
transform-box: view-box;
transform-origin: 60px 20px;
animation-duration: 5000ms;
animation-iteration-count: infinite;
animation-fill-mode: both;
}
.pulsar-reconcile-lock #reconcile-lock-left {
animation-name: reconcile-lock-left-move;
}
.pulsar-reconcile-lock #reconcile-lock-right {
animation-name: reconcile-lock-right-move;
}
.pulsar-reconcile-lock .pulsar-reconcile-lock-container {
animation: reconcile-lock-fade 5000ms infinite both;
}
@keyframes reconcile-lock-left-move {
0% {
transform: rotate(-90deg);
animation-timing-function: cubic-bezier(0.37, 0, 0.63, 1);
}
35% {
transform: rotate(8deg);
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
}
60% {
transform: rotate(0deg);
animation-timing-function: linear;
}
85% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0.37, 0, 0.63, 1);
}
100% {
transform: rotate(-90deg);
}
}
@keyframes reconcile-lock-right-move {
0% {
transform: rotate(90deg);
animation-timing-function: cubic-bezier(0.37, 0, 0.63, 1);
}
35% {
transform: rotate(-8deg);
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
}
60% {
transform: rotate(0deg);
animation-timing-function: linear;
}
85% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0.37, 0, 0.63, 1);
}
100% {
transform: rotate(90deg);
}
}
@keyframes reconcile-lock-fade {
0%,
60% {
opacity: 1;
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
72.5% {
opacity: 0.4;
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
85%,
100% {
opacity: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-reconcile-lock #reconcile-lock-left,
.pulsar-reconcile-lock #reconcile-lock-right,
.pulsar-reconcile-lock .pulsar-reconcile-lock-container {
animation: none;
transform: rotate(0deg);
opacity: 1;
}
}