Modern CSS Gradient Effects
Animated, mesh, conic and text gradients built from the theme colours.
1Animated Border
A gradient border that rotates around a card or button; browsers without @property show it still. Class: fx-animated-border
Pro plan
$46.05 / month
<div class="d-flex flex-wrap align-items-center justify-content-center gap-3 p-3 h-100" style="min-height:200px">
<div class="card fx-animated-border" style="width:13rem">
<div class="card-body text-center">
<div class="fs-2 text-primary">
<i class="bi bi-trophy-fill" aria-hidden="true"></i>
</div>
<h3 class="h6 mb-1">Pro plan</h3>
<p class="small text-body-secondary mb-0">$46.05 / month</p>
</div>
</div>
</div>
/* CSS (already in assets/css/effects.css) */
@property --fx-animated-border-angle { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
.fx-animated-border {
border: 3px solid transparent;
background:
linear-gradient(var(--wt-surface, #fff), var(--wt-surface, #fff)) padding-box,
conic-gradient(from var(--fx-animated-border-angle), var(--wt-primary), var(--wt-accent), var(--wt-secondary), var(--wt-primary)) border-box;
animation: fx-animated-border-turn 4s linear infinite;
}
@keyframes fx-animated-border-turn { to { --fx-animated-border-angle: 360deg; } }
@media (prefers-reduced-motion: reduce) {
.fx-animated-border, .fx-animated-border::before, .fx-animated-border::after, .fx-animated-border *, .fx-animated-border *::before, .fx-animated-border *::after { animation: none !important; transition: none !important; }
}2Shimmer Effect
A diagonal light sweep that glides across buttons, cards or images every few seconds. Class: fx-shimmer-effect
<div class="d-flex flex-wrap align-items-center justify-content-center gap-3 p-3 h-100" style="min-height:200px">
<button type="button" class="btn btn-primary btn-lg fx-shimmer-effect">Get access</button>
<div class="fx-shimmer-effect rounded-3">
<img src="../assets/img/product-2.svg" alt="Shiny product" class="d-block object-fit-cover" style="width:110px;height:110px">
</div>
</div>
/* CSS (already in assets/css/effects.css) */
.fx-shimmer-effect { position: relative; overflow: hidden; isolation: isolate; }
.fx-shimmer-effect::after {
content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 60%; pointer-events: none;
background: linear-gradient(110deg, transparent 20%, rgba(255, 255, 255, .55) 50%, transparent 80%);
transform: translateX(-120%);
animation: fx-shimmer-effect-sweep 3.2s ease-in-out infinite;
}
@keyframes fx-shimmer-effect-sweep { 0% { transform: translateX(-120%); } 45%, 100% { transform: translateX(260%); } }
@media (prefers-reduced-motion: reduce) {
.fx-shimmer-effect, .fx-shimmer-effect::before, .fx-shimmer-effect::after, .fx-shimmer-effect *, .fx-shimmer-effect *::before, .fx-shimmer-effect *::after { animation: none !important; transition: none !important; }
}3Iridescent
A holographic, pearly sheen that shifts its colours as the card is hovered. Class: fx-iridescent
Nimbus Labs
**** **** **** 4218
Hana Nguyen
<div class="d-flex flex-wrap align-items-center justify-content-center gap-3 p-3 h-100" style="min-height:200px">
<div class="fx-iridescent rounded-4 p-4 shadow-sm" style="width:15rem">
<div class="d-flex justify-content-between align-items-start mb-4">
<span class="fw-bold">Nimbus Labs</span><i class="bi bi-gem" aria-hidden="true"></i>
</div>
<div class="font-monospace small mb-1">
**** **** **** 4218
</div>
<div class="small">
Hana Nguyen
</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; }
}