Exhaust Filtration
CSSVertical emissions lines rise through a horizontal filter grid, emerge as clean dashed lines, and fade away to represent active flue gas scrubbing.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4 s, loops
- Categories
- Icons and micro-interactions
- Use cases
- Determinate progress, Automation and rules
- Industries
- Manufacturing and industrial, Energy and utilities
- Style
- Minimal line · light stroke
- Set
- emission
- Tags
- gridbarslineminimalfade
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" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="pulsar pulsar-emission-smoke-filter" data-pulsar="emission-smoke-filter" viewBox="0 0 160 96"><path stroke-width="1.5" d="M52 86V74h56v12" opacity=".35"></path><rect width="72" height="10" x="44" y="44" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5" rx="3"></rect><line x1="56" x2="56" y1="44" y2="54" stroke="var(--pulsar-accent, currentColor)" opacity=".5"></line><line x1="68" x2="68" y1="44" y2="54" stroke="var(--pulsar-accent, currentColor)" opacity=".5"></line><line x1="80" x2="80" y1="44" y2="54" stroke="var(--pulsar-accent, currentColor)" opacity=".5"></line><line x1="92" x2="92" y1="44" y2="54" stroke="var(--pulsar-accent, currentColor)" opacity=".5"></line><line x1="104" x2="104" y1="44" y2="54" stroke="var(--pulsar-accent, currentColor)" opacity=".5"></line><g class="emission-filter-dirty"><line x1="64" x2="64" y1="72" y2="54" stroke-width="2"></line><line x1="80" x2="80" y1="72" y2="54" stroke-width="2"></line><line x1="96" x2="96" y1="72" y2="54" stroke-width="2"></line></g><g class="emission-filter-clean"><line x1="64" x2="64" y1="44" y2="16" stroke="var(--pulsar-accent, currentColor)" stroke-dasharray="2 3" stroke-width="1.5" class="emission-stream-1"></line><line x1="80" x2="80" y1="44" y2="14" stroke="var(--pulsar-accent, currentColor)" stroke-dasharray="2 3" stroke-width="1.5" class="emission-stream-2"></line><line x1="96" x2="96" y1="44" y2="16" stroke="var(--pulsar-accent, currentColor)" stroke-dasharray="2 3" stroke-width="1.5" class="emission-stream-3"></line></g><circle cx="112" cy="49" r="2" fill="var(--pulsar-accent, currentColor)" stroke-width="0" class="emission-filter-led"></circle></svg>
animation.css
.pulsar-emission-smoke-filter {
display: block;
overflow: visible;
}
.pulsar-emission-smoke-filter .emission-filter-dirty {
animation: emission-smoke-filter-smoke-rise 4000ms linear infinite;
}
.pulsar-emission-smoke-filter .emission-stream-1 {
animation: emission-smoke-filter-clean-flow 4000ms ease-out infinite;
}
.pulsar-emission-smoke-filter .emission-stream-2 {
animation: emission-smoke-filter-clean-flow 4000ms ease-out -1333ms infinite;
}
.pulsar-emission-smoke-filter .emission-stream-3 {
animation: emission-smoke-filter-clean-flow 4000ms ease-out -2666ms infinite;
}
.pulsar-emission-smoke-filter .emission-filter-led {
animation: emission-smoke-filter-led-glow 4000ms ease-in-out infinite;
}
@keyframes emission-smoke-filter-smoke-rise {
0% {
transform: translateY(4px);
opacity: 0.3;
}
50% {
transform: translateY(0px);
opacity: 0.9;
}
100% {
transform: translateY(4px);
opacity: 0.3;
}
}
@keyframes emission-smoke-filter-clean-flow {
0% {
stroke-dashoffset: 16;
opacity: 0.2;
}
40%,
70% {
opacity: 1;
}
100% {
stroke-dashoffset: -16;
opacity: 0.2;
}
}
@keyframes emission-smoke-filter-led-glow {
0%,
100% {
opacity: 0.4;
transform: scale(0.9);
}
50% {
opacity: 1;
transform: scale(1.2);
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-emission-smoke-filter .emission-filter-dirty,
.pulsar-emission-smoke-filter .emission-stream-1,
.pulsar-emission-smoke-filter .emission-stream-2,
.pulsar-emission-smoke-filter .emission-stream-3,
.pulsar-emission-smoke-filter .emission-filter-led {
animation: none;
transform: none;
opacity: 1;
stroke-dashoffset: 0;
}
}