Expire
CSSA circular validity gauge sweeps toward renewal while a status ping alerts compliance.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4 s, loops
- Categories
- Icons and micro-interactions
- Use cases
- Success and confirmation, Security and trust
- Industries
- Education and training, Cross-industry
- Style
- Technical · light stroke
- Set
- accredit
- Tags
- circleringprogressloop
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-accredit-expire" data-pulsar="accredit-expire" viewBox="0 0 160 96"><circle cx="80" cy="48" r="28" stroke="currentColor" stroke-width="1.5" class="track" opacity=".2"></circle><circle cx="80" cy="48" r="28" stroke="var(--pulsar-accent, currentColor)" stroke-dasharray="175.9" stroke-dashoffset="40" stroke-linecap="round" stroke-width="2" class="meter-arc"></circle><circle cx="80" cy="20" r="3" fill="var(--pulsar-accent, currentColor)" class="alert-dot"></circle><line x1="80" x2="80" y1="48" y2="28" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"></line><circle cx="80" cy="48" r="3" fill="currentColor"></circle></svg>
animation.css
.pulsar-accredit-expire {
display: block;
width: 100%;
height: 100%;
}
.pulsar-accredit-expire .meter-arc {
transform-origin: 80px 48px;
transform: rotate(-90deg);
animation: accredit-expire-drain 4s ease-in-out infinite;
}
.pulsar-accredit-expire .alert-dot {
animation: accredit-expire-warn 4s ease-in-out infinite;
}
@keyframes accredit-expire-drain {
0%,
15% {
stroke-dashoffset: 40;
}
50%,
75% {
stroke-dashoffset: 140;
}
100% {
stroke-dashoffset: 40;
}
}
@keyframes accredit-expire-warn {
0%,
40% {
opacity: 0.2;
transform: scale(0.8);
}
60%,
80% {
opacity: 1;
transform: scale(1.4);
}
100% {
opacity: 0.2;
transform: scale(0.8);
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-accredit-expire .meter-arc,
.pulsar-accredit-expire .alert-dot {
animation: none;
transform: none;
opacity: 1;
}
}