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="flex flex-wrap items-center justify-center gap-4 p-4 h-full" style="min-height:200px">
<img src="https://images.unsplash.com/photo-1560220604-1985ebfe28b1?auto=format&fit=crop&w=1200&h=800&q=70" alt="Photo that brightens on hover" class="fx-brightness-contrast object-cover rounded-lg" 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="flex flex-wrap items-center justify-center gap-4 p-4 h-full" style="min-height:200px">
<figure class="fx-sepia-vintage rounded-lg mb-0">
<img src="https://images.unsplash.com/photo-1778864875183-9a89ea0ac26f?auto=format&fit=crop&w=1200&h=800&q=70" alt="Vintage style photo" class="block object-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; }
}3Text Filter Effects
Headings come into focus from a blur with a coloured drop shadow - a cinematic title reveal. Class: fx-text-filter-effects
Stand with families in need
<div class="flex flex-wrap items-center justify-center gap-4 p-4 h-full" style="min-height:200px">
<h2 class="h2 font-bold text-primary-ink text-center mb-0 fx-text-filter-effects">Stand with families in need</h2>
</div>
/* CSS (already in assets/css/effects.css) */
.fx-text-filter-effects { filter: drop-shadow(0 4px 10px rgba(var(--wt-primary-rgb), .45)); animation: fx-text-filter-effects-focus 5s ease-in-out infinite; }
@keyframes fx-text-filter-effects-focus {
0% { filter: blur(8px) drop-shadow(0 4px 10px rgba(var(--wt-primary-rgb), 0)); opacity: .2; letter-spacing: .25em; }
30%, 85% { filter: blur(0) drop-shadow(0 4px 10px rgba(var(--wt-primary-rgb), .45)); opacity: 1; letter-spacing: normal; }
100% { filter: blur(0) drop-shadow(0 4px 10px rgba(var(--wt-primary-rgb), .45)); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
.fx-text-filter-effects, .fx-text-filter-effects::before, .fx-text-filter-effects::after, .fx-text-filter-effects *, .fx-text-filter-effects *::before, .fx-text-filter-effects *::after { animation: none !important; transition: none !important; }
}