Asset Allocation Axes
CSSA fine grid of axes slowly adjusts its origin point, with subtle coordinate numbers shifting in response.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4 s, loops
- Categories
- Backgrounds and ambient
- Use cases
- Dashboards and reporting, Ambient background
- Industries
- Finance and fintech, Cross-industry
- Style
- Technical · light stroke
- Set
- treasury
- Tags
- gridlineuiambient
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-treasury-allocation" data-pulsar="treasury-allocation" viewBox="0 0 160 96"><g stroke="currentColor" stroke-dasharray="2 4" class="sub-grid" opacity=".2"><line x1="24" x2="136" y1="28" y2="28"></line><line x1="24" x2="136" y1="48" y2="48"></line><line x1="24" x2="136" y1="68" y2="68"></line><line x1="48" x2="48" y1="16" y2="80"></line><line x1="80" x2="80" y1="16" y2="80"></line><line x1="112" x2="112" y1="16" y2="80"></line></g><g class="allocation-quad"><polygon stroke="var(--pulsar-accent, currentColor)" stroke-linejoin="round" stroke-width="1.5" points="48,48 80,28 112,48 80,68" opacity=".6"></polygon></g><g class="dynamic-axes"><line x1="24" x2="136" y1="48" y2="48" stroke="currentColor" stroke-width="1.25" class="axis-h" opacity=".5"></line><line x1="80" x2="80" y1="16" y2="80" stroke="currentColor" stroke-width="1.25" class="axis-v" opacity=".5"></line><circle cx="80" cy="48" r="3.5" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5" class="axis-origin"></circle></g><g stroke="var(--pulsar-accent, currentColor)" stroke-width="1.2" class="axis-datum" opacity=".7"><circle cx="80" cy="28" r="2" fill="var(--pulsar-accent, currentColor)"></circle><circle cx="112" cy="48" r="2" fill="var(--pulsar-accent, currentColor)"></circle><circle cx="80" cy="68" r="2" fill="var(--pulsar-accent, currentColor)"></circle><circle cx="48" cy="48" r="2" fill="var(--pulsar-accent, currentColor)"></circle></g></svg>
animation.css
.pulsar-treasury-allocation {
display: block;
width: 100%;
height: 100%;
}
.pulsar-treasury-allocation .allocation-quad {
transform-origin: 80px 48px;
animation: treasury-allocation-breathe 4s ease-in-out infinite;
}
.pulsar-treasury-allocation .dynamic-axes .axis-origin {
transform-origin: 80px 48px;
animation: treasury-allocation-shift 4s ease-in-out infinite;
}
.pulsar-treasury-allocation .dynamic-axes .axis-h {
animation: treasury-allocation-drift-h 4s ease-in-out infinite;
}
.pulsar-treasury-allocation .dynamic-axes .axis-v {
animation: treasury-allocation-drift-v 4s ease-in-out infinite;
}
.pulsar-treasury-allocation .axis-datum {
transform-origin: 80px 48px;
animation: treasury-allocation-breathe 4s ease-in-out infinite;
}
@keyframes treasury-allocation-breathe {
0%,
100% {
transform: scale(0.94);
opacity: 0.5;
}
50% {
transform: scale(1.06);
opacity: 0.9;
}
}
@keyframes treasury-allocation-shift {
0%,
100% {
transform: translate(0, 0) scale(1);
opacity: 0.6;
}
35% {
transform: translate(2px, -3px) scale(1.2);
opacity: 1;
}
70% {
transform: translate(-3px, 2px) scale(1.1);
opacity: 0.9;
}
}
@keyframes treasury-allocation-drift-h {
0%,
100% {
transform: translateY(0);
}
35% {
transform: translateY(-2px);
}
70% {
transform: translateY(1.5px);
}
}
@keyframes treasury-allocation-drift-v {
0%,
100% {
transform: translateX(0);
}
35% {
transform: translateX(2px);
}
70% {
transform: translateX(-2px);
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-treasury-allocation .allocation-quad,
.pulsar-treasury-allocation .dynamic-axes .axis-origin,
.pulsar-treasury-allocation .dynamic-axes .axis-h,
.pulsar-treasury-allocation .dynamic-axes .axis-v,
.pulsar-treasury-allocation .axis-datum {
animation: none;
transform: none;
opacity: 0.6;
}
}