Animated, mesh, conic and text gradients built from the theme colours.
1Animated Rainbow
A full-spectrum gradient that flows endlessly across banners, buttons and progress bars. Class: fx-animated-rainbow
Small hotels with big character
Every colour, always moving.
<div class="flex flex-wrap items-center justify-center gap-4 p-4 h-full" style="min-height:200px">
<div class="fx-animated-rainbow rounded-xl p-6 text-center w-full" style="max-width:18rem;text-shadow:0 1px 3px rgba(0,0,0,.3)">
<h3 class="h5 font-bold mb-1">Small hotels with big character</h3>
<p class="small mb-0">Every colour, always moving.</p>
</div>
<button type="button" class="btn rounded-full border-0 fx-animated-rainbow">Celebrate</button>
</div>
/* CSS (already in assets/css/effects.css) */
.fx-animated-rainbow {
color: #fff;
background: linear-gradient(90deg, #ff3d7f, #ff9f1c, #ffd23f, #3bce73, #2ec4ff, #7b5cff, #ff3d7f);
background-size: 300% 100%;
animation: fx-animated-rainbow-flow 8s linear infinite;
}
@keyframes fx-animated-rainbow-flow { to { background-position: -150% 0; } }
@media (prefers-reduced-motion: reduce) {
.fx-animated-rainbow, .fx-animated-rainbow::before, .fx-animated-rainbow::after, .fx-animated-rainbow *, .fx-animated-rainbow *::before, .fx-animated-rainbow *::after { animation: none !important; transition: none !important; }
}2Mesh Gradient
Soft blobs of the theme colours blended into a slowly drifting mesh - perfect for hero panels. Class: fx-mesh-gradient
<div class="flex flex-wrap items-center justify-center gap-4 p-4 h-full" style="min-height:200px">
<div class="fx-mesh-gradient rounded-xl p-6 w-full" style="max-width:19rem">
<span class="badge text-bg-light mb-2">Mountain</span>
<h3 class="h5 font-bold mb-2">Hand-picked stays in beautiful places</h3>
<a href="#" class="btn btn-light btn-sm">Get started</a>
</div>
</div>
/* CSS (already in assets/css/effects.css) */
.fx-mesh-gradient {
background-color: var(--wt-primary);
background-image:
radial-gradient(at 15% 20%, var(--wt-accent) 0, transparent 55%),
radial-gradient(at 85% 15%, var(--wt-secondary) 0, transparent 50%),
radial-gradient(at 75% 85%, var(--wt-accent) 0, transparent 50%),
radial-gradient(at 20% 90%, var(--wt-secondary) 0, transparent 55%);
background-size: 160% 160%;
color: var(--wt-on-primary, #fff);
animation: fx-mesh-gradient-drift 14s ease-in-out infinite alternate;
}
@keyframes fx-mesh-gradient-drift { from { background-position: 0% 0%; } to { background-position: 100% 100%; } }
@media (prefers-reduced-motion: reduce) {
.fx-mesh-gradient, .fx-mesh-gradient::before, .fx-mesh-gradient::after, .fx-mesh-gradient *, .fx-mesh-gradient *::before, .fx-mesh-gradient *::after { animation: none !important; transition: none !important; }
}3Iridescent
A holographic, pearly sheen that shifts its colours as the card is hovered. Class: fx-iridescent
Orbiora
**** **** **** 6928
Ava Harlow
<div class="flex flex-wrap items-center justify-center gap-4 p-4 h-full" style="min-height:200px">
<div class="fx-iridescent rounded-xl p-6 shadow-sm" style="width:15rem">
<div class="flex justify-between items-start mb-6">
<span class="font-bold">Orbiora</span><i class="bi bi-gem" aria-hidden="true"></i>
</div>
<div class="font-mono small mb-1">
**** **** **** 6928
</div>
<div class="small">
Ava Harlow
</div>
</div>
</div>
/* CSS (already in assets/css/effects.css) */
.fx-iridescent {
position: relative; overflow: hidden; color: #1d1d2b;
background: linear-gradient(120deg, #f6d5f7, #fbe9d7, #d5f2ef, #d7e2fb, #e9d5fb, #f6d5f7);
background-size: 300% 300%; background-position: 0% 50%;
transition: background-position 1.2s ease;
}
.fx-iridescent::after {
content: ""; position: absolute; inset: 0; pointer-events: none; mix-blend-mode: overlay;
background: linear-gradient(105deg, transparent 35%, rgba(255, 255, 255, .7) 50%, transparent 65%);
background-size: 250% 100%; background-position: 100% 0; transition: background-position 1.2s ease;
}
.fx-iridescent:hover, .fx-iridescent:focus-within { background-position: 100% 50%; }
.fx-iridescent:hover::after, .fx-iridescent:focus-within::after { background-position: 0 0; }
@media (prefers-reduced-motion: reduce) {
.fx-iridescent, .fx-iridescent::before, .fx-iridescent::after, .fx-iridescent *, .fx-iridescent *::before, .fx-iridescent *::after { animation: none !important; transition: none !important; }
}