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-1600596542815-ffad4c1539a9?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; }
}2Sepia Vintage
An old-photo look with sepia tones and a soft vignette; works on an img or a wrapper around one. Class: fx-sepia-vintage
<div class="d-flex flex-wrap align-items-center justify-content-center gap-3 p-3 h-100" style="min-height:200px">
<figure class="fx-sepia-vintage rounded-3 mb-0">
<img src="https://images.unsplash.com/photo-1670589953882-b94c9cb380f5?auto=format&fit=crop&w=1200&h=800&q=70" alt="Vintage style photo" class="d-block object-fit-cover" style="width:210px;height:145px">
</figure>
</div>
/* CSS (already in assets/css/effects.css) */
.fx-sepia-vintage { position: relative; display: inline-block; overflow: hidden; }
img.fx-sepia-vintage, .fx-sepia-vintage img { filter: sepia(.75) contrast(1.1) brightness(.95) saturate(.85); transition: filter .5s ease; }
.fx-sepia-vintage::after { content: ""; position: absolute; inset: 0; pointer-events: none; box-shadow: inset 0 0 50px rgba(60, 35, 10, .55); border-radius: inherit; }
img.fx-sepia-vintage:hover, .fx-sepia-vintage:hover img { filter: sepia(0) contrast(1) brightness(1) saturate(1); }
@media (prefers-reduced-motion: reduce) {
.fx-sepia-vintage, .fx-sepia-vintage::before, .fx-sepia-vintage::after, .fx-sepia-vintage *, .fx-sepia-vintage *::before, .fx-sepia-vintage *::after { animation: none !important; transition: none !important; }
}