Modern CSS Filter Effects
Grayscale, blur, hue, sepia, duotone and glow filters for photos, logos, icons and text.
1Brightness & Contrast
Images start slightly muted and pop with extra brightness and contrast on hover. Class: fx-brightness-contrast
<div class="d-flex flex-wrap align-items-center justify-content-center gap-3 p-3 h-100" style="min-height:200px">
<img src="https://images.unsplash.com/photo-1516321497487-e288fb19713f?auto=format&fit=crop&w=1200&h=800&q=70" alt="Photo that brightens on hover" class="fx-brightness-contrast object-fit-cover rounded-3" style="width:200px;height:140px">
</div>
/* CSS (already in assets/css/effects.css) */
.fx-brightness-contrast { filter: brightness(.82) contrast(.9); transition: filter .45s ease, transform .45s ease; }
.fx-brightness-contrast:hover, .fx-brightness-contrast:focus-visible { filter: brightness(1.12) contrast(1.2); transform: scale(1.02); }
@media (prefers-reduced-motion: reduce) {
.fx-brightness-contrast, .fx-brightness-contrast::before, .fx-brightness-contrast::after, .fx-brightness-contrast *, .fx-brightness-contrast *::before, .fx-brightness-contrast *::after { animation: none !important; transition: none !important; }
}2Neon Glow
Wraps icons, logos and transparent images in a flickering neon halo using drop-shadow. Class: fx-filter-neon-glow
<div class="d-flex flex-wrap align-items-center justify-content-center gap-3 p-3 h-100" style="min-height:200px">
<div class="bg-dark rounded-4 p-4 d-flex gap-4 fs-1">
<span class="fx-filter-neon-glow"><i class="bi bi-lightning-charge-fill" aria-hidden="true"></i></span><span class="fx-filter-neon-glow"><i class="bi bi-music-note-beamed" aria-hidden="true"></i></span><span class="fx-filter-neon-glow"><i class="bi bi-moon-stars-fill" aria-hidden="true"></i></span>
</div>
</div>
/* CSS (already in assets/css/effects.css) */
.fx-filter-neon-glow {
color: var(--wt-primary-ink);
filter: drop-shadow(0 0 4px var(--wt-primary)) drop-shadow(0 0 12px var(--wt-primary));
animation: fx-filter-neon-glow-flicker 3s linear infinite;
}
@keyframes fx-filter-neon-glow-flicker {
0%, 18%, 22%, 62%, 64%, 100% { filter: drop-shadow(0 0 4px var(--wt-primary)) drop-shadow(0 0 12px var(--wt-primary)); }
20%, 63% { filter: drop-shadow(0 0 1px var(--wt-primary)); }
}
@media (prefers-reduced-motion: reduce) {
.fx-filter-neon-glow, .fx-filter-neon-glow::before, .fx-filter-neon-glow::after, .fx-filter-neon-glow *, .fx-filter-neon-glow *::before, .fx-filter-neon-glow *::after { animation: none !important; transition: none !important; }
}3Saturation Boost
Desaturated at rest, vivid on hover - draws attention to the product the visitor is looking at. Class: fx-saturation-boost
<div class="d-flex flex-wrap align-items-center justify-content-center gap-3 p-3 h-100" style="min-height:200px">
<img src="../assets/img/product-5.svg" alt="Product with boosted colour" class="fx-saturation-boost rounded-3 object-fit-cover" style="width:120px;height:120px"><img src="../assets/img/product-6.svg" alt="Second product" class="fx-saturation-boost rounded-3 object-fit-cover" style="width:120px;height:120px">
</div>
/* CSS (already in assets/css/effects.css) */
.fx-saturation-boost { filter: saturate(.6); transition: filter .4s ease, transform .4s ease; }
.fx-saturation-boost:hover, .fx-saturation-boost:focus-visible { filter: saturate(1.8); transform: scale(1.03); }
@media (prefers-reduced-motion: reduce) {
.fx-saturation-boost, .fx-saturation-boost::before, .fx-saturation-boost::after, .fx-saturation-boost *, .fx-saturation-boost *::before, .fx-saturation-boost *::after { animation: none !important; transition: none !important; }
}