33 / 33
All 33 in 33 Tailwind CSS Card Hover Effects
- 01Tailwind 3D Tilt & Parallax Card with Depth Layers
- 02Tailwind Glowing Gradient & Glassmorphic Border Card
- 03Tailwind Image Zoom Card with Slide-Up Content Reveal
- 04Tailwind 3D Flip Card (Front to Back) with backface-visibility
- 05Tailwind Sibling De-emphasis Pricing Grid with has-hover
- 06Tailwind Minimalist Elevation Card with Layered Dynamic Shadows
- 07Tailwind Elastic Lift Card with Spring Cubic-Bezier
- 08Tailwind Animated Conic Gradient Border Card with @property
- 09Tailwind Stacked Layer Reveal Card (Fanned Risograph Deck)
- 10Tailwind Holographic Foil Shimmer Card with mix-blend-mode
- 11Tailwind Curtain Reveal Card (Parting Velvet Halves)
- 12Tailwind Corner Peel Card with clip-path Triangles
- 13Tailwind Neon Sign Card with Layered Text-Shadow Glow
- 14Tailwind CRT Scanline Terminal Card with Sweeping Beam
- 15Tailwind Depth Parallax Landscape Card with Layer Multipliers
- 16Tailwind Cursor Spotlight Card with Masked Border Highlight
- 17Tailwind 3D Tilt Product Card with Specular Glare
- 18Tailwind Slide-Up Panel Card with Peek Header Swap
- 19Tailwind Credit Card Flip with Magnetic Strip & CVV
- 20Tailwind RGB Channel-Split Glitch Card
- 21Tailwind Rotating Conic Aura Card with Blurred Gradient Bloom
- 22Tailwind Blob-to-Rectangle Border Morph Card
- 23Tailwind Magnetic Float Orb Card with Pointer Attraction
- 24Tailwind Typewriter Reveal Card with Steps Animation & Caret
- 25Tailwind Magazine Overlay Slide Card (Full-Face Panel Takeover)
- 26Tailwind Breathing Film Grain Card with SVG Turbulence Noise
- 27Tailwind Frosted Glass Intensify Card with Deepening Backdrop Blur
- 28Tailwind Blueprint Reveal Card with Circular clip-path Wipe
- 29Tailwind Cursor-Anchored Shockwave Ripple Card
- 30Tailwind Color-Burn Ignition Card with Grayscale-to-Fire Hover
- 31Tailwind Prismatic Light Sweep Card with Screen Blend Bar
- 32Tailwind Book Cover Open Card with Hinged 3D Rotation
- 33Tailwind Drifting Aurora Ribbons Card with Blurred Gradient Bands
Tailwind Drifting Aurora Ribbons Card with Blurred Gradient Bands
Two blurred gradient ribbons drift across a starfield and sharpen on hover — the blur drops from 28px to 20px and the opacity climbs, so the aurora seems to gather strength. The second band reuses the first's keyframe with a longer duration and reverse direction, which is what breaks the symmetry.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tch-33 w-full min-h-svh grid place-items-center bg-tch33-bg font-tch33-sans p-8">
<article tabindex="0" class="group relative w-[340px] h-[450px] rounded-[22px] overflow-hidden cursor-pointer outline-none bg-[linear-gradient(180deg,#050b1a_0%,#02040a_100%)] border border-tch33-a/10 focus-visible:outline-2 focus-visible:outline-tch33-a focus-visible:outline-offset-4 before:content-[''] before:absolute before:inset-0 before:opacity-70 before:bg-[radial-gradient(1px_1px_at_20%_30%,#fff,transparent),radial-gradient(1px_1px_at_70%_20%,#ccffee,transparent),radial-gradient(1px_1px_at_40%_60%,#fff,transparent),radial-gradient(1px_1px_at_85%_75%,#ddffff,transparent),radial-gradient(1px_1px_at_55%_85%,#fff,transparent),radial-gradient(1px_1px_at_10%_80%,#cceeff,transparent)]">
<div class="absolute -inset-x-[30%] top-[5%] h-3/5 z-1 pointer-events-none opacity-55 blur-[28px] animate-tch33-drift transition-[opacity,filter] duration-600 group-hover:opacity-85 group-hover:blur-[20px] group-focus-visible:opacity-85 group-focus-visible:blur-[20px] motion-reduce:animate-none bg-[radial-gradient(ellipse_60%_100%_at_30%_50%,#2cffa6_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_60%_40%,#3ad0ff_0%,transparent_60%),radial-gradient(ellipse_55%_100%_at_80%_60%,#b06cff_0%,transparent_60%)]"></div>
<div class="absolute -inset-x-[30%] top-[20%] h-3/5 z-1 pointer-events-none opacity-40 blur-[28px] animate-tch33-drift [animation-duration:13s] [animation-direction:reverse] transition-[opacity,filter] duration-600 group-hover:opacity-65 group-hover:blur-[20px] group-focus-visible:opacity-65 motion-reduce:animate-none bg-[radial-gradient(ellipse_50%_100%_at_50%_50%,#5affc4_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_75%_40%,#6a8cff_0%,transparent_60%)]"></div>
<div class="relative z-2 h-full p-[2.6rem] flex flex-col justify-end text-tch33-ink">
<span class="text-[0.72rem] font-medium tracking-[0.3em] uppercase text-tch33-a">Arctic Expeditions</span>
<h2 class="font-tch33-display font-medium text-[3rem] leading-none mt-2.5 mb-3">Chasing<br>the Lights</h2>
<p class="font-light text-[0.9rem] leading-[1.65] text-tch33-body">Seven nights in Tromsø under the polar sky. Glass-roof cabins, dog sleds, and the slow green fire overhead.</p>
<div class="flex justify-between mt-6 pt-4 text-[0.78rem] tracking-[0.08em] text-tch33-a border-t border-tch33-a/20"><span>Sept – March</span><span>from $2,400</span></div>
</div>
</article>
</section><section class="tch-33 w-full min-h-svh grid place-items-center bg-tch33-bg font-tch33-sans p-8">
<article tabindex="0" class="group relative w-[340px] h-[450px] rounded-[22px] overflow-hidden cursor-pointer outline-none bg-[linear-gradient(180deg,#050b1a_0%,#02040a_100%)] border border-tch33-a/10 focus-visible:outline-2 focus-visible:outline-tch33-a focus-visible:outline-offset-4 before:content-[''] before:absolute before:inset-0 before:opacity-70 before:bg-[radial-gradient(1px_1px_at_20%_30%,#fff,transparent),radial-gradient(1px_1px_at_70%_20%,#ccffee,transparent),radial-gradient(1px_1px_at_40%_60%,#fff,transparent),radial-gradient(1px_1px_at_85%_75%,#ddffff,transparent),radial-gradient(1px_1px_at_55%_85%,#fff,transparent),radial-gradient(1px_1px_at_10%_80%,#cceeff,transparent)]">
<div class="absolute -inset-x-[30%] top-[5%] h-3/5 z-1 pointer-events-none opacity-55 blur-[28px] animate-tch33-drift transition-[opacity,filter] duration-600 group-hover:opacity-85 group-hover:blur-[20px] group-focus-visible:opacity-85 group-focus-visible:blur-[20px] motion-reduce:animate-none bg-[radial-gradient(ellipse_60%_100%_at_30%_50%,#2cffa6_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_60%_40%,#3ad0ff_0%,transparent_60%),radial-gradient(ellipse_55%_100%_at_80%_60%,#b06cff_0%,transparent_60%)]"></div>
<div class="absolute -inset-x-[30%] top-[20%] h-3/5 z-1 pointer-events-none opacity-40 blur-[28px] animate-tch33-drift [animation-duration:13s] [animation-direction:reverse] transition-[opacity,filter] duration-600 group-hover:opacity-65 group-hover:blur-[20px] group-focus-visible:opacity-65 motion-reduce:animate-none bg-[radial-gradient(ellipse_50%_100%_at_50%_50%,#5affc4_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_75%_40%,#6a8cff_0%,transparent_60%)]"></div>
<div class="relative z-2 h-full p-[2.6rem] flex flex-col justify-end text-tch33-ink">
<span class="text-[0.72rem] font-medium tracking-[0.3em] uppercase text-tch33-a">Arctic Expeditions</span>
<h2 class="font-tch33-display font-medium text-[3rem] leading-none mt-2.5 mb-3">Chasing<br>the Lights</h2>
<p class="font-light text-[0.9rem] leading-[1.65] text-tch33-body">Seven nights in Tromsø under the polar sky. Glass-roof cabins, dog sleds, and the slow green fire overhead.</p>
<div class="flex justify-between mt-6 pt-4 text-[0.78rem] tracking-[0.08em] text-tch33-a border-t border-tch33-a/20"><span>Sept – March</span><span>from $2,400</span></div>
</div>
</article>
</section>@import "tailwindcss";
@keyframes tch33-drift {
0%,
100% {
transform: translateX(-6%) translateY(0) skewX(-6deg);
}
50% {
transform: translateX(8%) translateY(-12px) skewX(4deg);
}
}
@theme {
--color-tch33-bg: #03060d;
--color-tch33-bg: oklch(0.08 0.01 250);
--color-tch33-ink: #eafff6;
--color-tch33-ink: oklch(0.97 0.02 165);
--color-tch33-body: #b9d6cc;
--color-tch33-body: oklch(0.84 0.03 170);
--color-tch33-a: #7ff0c4;
--color-tch33-a: oklch(0.89 0.12 165);
--color-tch33-b: #3ad0ff;
--color-tch33-b: oklch(0.81 0.13 225);
--color-tch33-c: #b06cff;
--color-tch33-c: oklch(0.65 0.21 295);
--font-tch33-sans: 'Jost', system-ui, sans-serif;
--font-tch33-display: 'Cormorant Garamond', Georgia, serif;
--animate-tch33-drift: tch33-drift 9s ease-in-out infinite;
}
.tch-33 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@keyframes tch33-drift {
0%,
100% {
transform: translateX(-6%) translateY(0) skewX(-6deg);
}
50% {
transform: translateX(8%) translateY(-12px) skewX(4deg);
}
}
@theme {
--color-tch33-bg: #03060d;
--color-tch33-bg: oklch(0.08 0.01 250);
--color-tch33-ink: #eafff6;
--color-tch33-ink: oklch(0.97 0.02 165);
--color-tch33-body: #b9d6cc;
--color-tch33-body: oklch(0.84 0.03 170);
--color-tch33-a: #7ff0c4;
--color-tch33-a: oklch(0.89 0.12 165);
--color-tch33-b: #3ad0ff;
--color-tch33-b: oklch(0.81 0.13 225);
--color-tch33-c: #b06cff;
--color-tch33-c: oklch(0.65 0.21 295);
--font-tch33-sans: 'Jost', system-ui, sans-serif;
--font-tch33-display: 'Cormorant Garamond', Georgia, serif;
--animate-tch33-drift: tch33-drift 9s ease-in-out infinite;
}
.tch-33 {
width: 100%;
min-height: 100svh;
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@keyframes tch33-drift {
0%,
100% {
transform: translateX(-6%) translateY(0) skewX(-6deg);
}
50% {
transform: translateX(8%) translateY(-12px) skewX(4deg);
}
}
@theme {
--color-tch33-bg: #03060d;
--color-tch33-bg: oklch(0.08 0.01 250);
--color-tch33-ink: #eafff6;
--color-tch33-ink: oklch(0.97 0.02 165);
--color-tch33-body: #b9d6cc;
--color-tch33-body: oklch(0.84 0.03 170);
--color-tch33-a: #7ff0c4;
--color-tch33-a: oklch(0.89 0.12 165);
--color-tch33-b: #3ad0ff;
--color-tch33-b: oklch(0.81 0.13 225);
--color-tch33-c: #b06cff;
--color-tch33-c: oklch(0.65 0.21 295);
--font-tch33-sans: 'Jost', system-ui, sans-serif;
--font-tch33-display: 'Cormorant Garamond', Georgia, serif;
--animate-tch33-drift: tch33-drift 9s ease-in-out infinite;
}
.tch-33 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@keyframes tch33-drift {
0%,
100% {
transform: translateX(-6%) translateY(0) skewX(-6deg);
}
50% {
transform: translateX(8%) translateY(-12px) skewX(4deg);
}
}
@theme {
--color-tch33-bg: #03060d;
--color-tch33-bg: oklch(0.08 0.01 250);
--color-tch33-ink: #eafff6;
--color-tch33-ink: oklch(0.97 0.02 165);
--color-tch33-body: #b9d6cc;
--color-tch33-body: oklch(0.84 0.03 170);
--color-tch33-a: #7ff0c4;
--color-tch33-a: oklch(0.89 0.12 165);
--color-tch33-b: #3ad0ff;
--color-tch33-b: oklch(0.81 0.13 225);
--color-tch33-c: #b06cff;
--color-tch33-c: oklch(0.65 0.21 295);
--font-tch33-sans: 'Jost', system-ui, sans-serif;
--font-tch33-display: 'Cormorant Garamond', Georgia, serif;
--animate-tch33-drift: tch33-drift 9s ease-in-out infinite;
}
.tch-33 {
width: 100%;
min-height: 100svh;
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600&family=Jost:wght@300;400;500&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600&family=Jost:wght@300;400;500&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
[animation-duration:13s] [animation-direction:reverse]on the second band is the whole reason this demo needs only one keyframe block. Overriding animation longhands is an underused utility trick.- Sharpening the blur on hover instead of only raising opacity is a small change with a large perceptual payoff — the lights feel like they gather rather than brighten.
- UI change from the CSS original: focusable card, the aurora responds to
group-focus-visible:, and both bands now animatefilteras well as opacity (the original changed blur only on the first band's hover rule).
Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Drifting Aurora Ribbons Card with Blurred Gradient Bands
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-drifting-aurora-ribbons-card/
Two blurred gradient ribbons drift across a starfield and sharpen on hover — the blur drops from 28px to 20px and the opacity climbs, so the aurora seems to gather strength. The second band reuses the first's keyframe with a longer duration and reverse direction, which is what breaks the symmetry.
## HTML
```html
<section class="tch-33 w-full min-h-svh grid place-items-center bg-tch33-bg font-tch33-sans p-8">
<article tabindex="0" class="group relative w-[340px] h-[450px] rounded-[22px] overflow-hidden cursor-pointer outline-none bg-[linear-gradient(180deg,#050b1a_0%,#02040a_100%)] border border-tch33-a/10 focus-visible:outline-2 focus-visible:outline-tch33-a focus-visible:outline-offset-4 before:content-[''] before:absolute before:inset-0 before:opacity-70 before:bg-[radial-gradient(1px_1px_at_20%_30%,#fff,transparent),radial-gradient(1px_1px_at_70%_20%,#ccffee,transparent),radial-gradient(1px_1px_at_40%_60%,#fff,transparent),radial-gradient(1px_1px_at_85%_75%,#ddffff,transparent),radial-gradient(1px_1px_at_55%_85%,#fff,transparent),radial-gradient(1px_1px_at_10%_80%,#cceeff,transparent)]">
<div class="absolute -inset-x-[30%] top-[5%] h-3/5 z-1 pointer-events-none opacity-55 blur-[28px] animate-tch33-drift transition-[opacity,filter] duration-600 group-hover:opacity-85 group-hover:blur-[20px] group-focus-visible:opacity-85 group-focus-visible:blur-[20px] motion-reduce:animate-none bg-[radial-gradient(ellipse_60%_100%_at_30%_50%,#2cffa6_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_60%_40%,#3ad0ff_0%,transparent_60%),radial-gradient(ellipse_55%_100%_at_80%_60%,#b06cff_0%,transparent_60%)]"></div>
<div class="absolute -inset-x-[30%] top-[20%] h-3/5 z-1 pointer-events-none opacity-40 blur-[28px] animate-tch33-drift [animation-duration:13s] [animation-direction:reverse] transition-[opacity,filter] duration-600 group-hover:opacity-65 group-hover:blur-[20px] group-focus-visible:opacity-65 motion-reduce:animate-none bg-[radial-gradient(ellipse_50%_100%_at_50%_50%,#5affc4_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_75%_40%,#6a8cff_0%,transparent_60%)]"></div>
<div class="relative z-2 h-full p-[2.6rem] flex flex-col justify-end text-tch33-ink">
<span class="text-[0.72rem] font-medium tracking-[0.3em] uppercase text-tch33-a">Arctic Expeditions</span>
<h2 class="font-tch33-display font-medium text-[3rem] leading-none mt-2.5 mb-3">Chasing<br>the Lights</h2>
<p class="font-light text-[0.9rem] leading-[1.65] text-tch33-body">Seven nights in Tromsø under the polar sky. Glass-roof cabins, dog sleds, and the slow green fire overhead.</p>
<div class="flex justify-between mt-6 pt-4 text-[0.78rem] tracking-[0.08em] text-tch33-a border-t border-tch33-a/20"><span>Sept – March</span><span>from $2,400</span></div>
</div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@keyframes tch33-drift {
0%,
100% {
transform: translateX(-6%) translateY(0) skewX(-6deg);
}
50% {
transform: translateX(8%) translateY(-12px) skewX(4deg);
}
}
@theme {
--color-tch33-bg: #03060d;
--color-tch33-bg: oklch(0.08 0.01 250);
--color-tch33-ink: #eafff6;
--color-tch33-ink: oklch(0.97 0.02 165);
--color-tch33-body: #b9d6cc;
--color-tch33-body: oklch(0.84 0.03 170);
--color-tch33-a: #7ff0c4;
--color-tch33-a: oklch(0.89 0.12 165);
--color-tch33-b: #3ad0ff;
--color-tch33-b: oklch(0.81 0.13 225);
--color-tch33-c: #b06cff;
--color-tch33-c: oklch(0.65 0.21 295);
--font-tch33-sans: 'Jost', system-ui, sans-serif;
--font-tch33-display: 'Cormorant Garamond', Georgia, serif;
--animate-tch33-drift: tch33-drift 9s ease-in-out infinite;
}
.tch-33 {
width: 100%;
min-height: 100svh;
}
```Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Drifting Aurora Ribbons Card with Blurred Gradient Bands
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-drifting-aurora-ribbons-card/
Two blurred gradient ribbons drift across a starfield and sharpen on hover — the blur drops from 28px to 20px and the opacity climbs, so the aurora seems to gather strength. The second band reuses the first's keyframe with a longer duration and reverse direction, which is what breaks the symmetry.
## HTML
```html
<section class="tch-33 w-full min-h-svh grid place-items-center bg-tch33-bg font-tch33-sans p-8">
<article tabindex="0" class="group relative w-[340px] h-[450px] rounded-[22px] overflow-hidden cursor-pointer outline-none bg-[linear-gradient(180deg,#050b1a_0%,#02040a_100%)] border border-tch33-a/10 focus-visible:outline-2 focus-visible:outline-tch33-a focus-visible:outline-offset-4 before:content-[''] before:absolute before:inset-0 before:opacity-70 before:bg-[radial-gradient(1px_1px_at_20%_30%,#fff,transparent),radial-gradient(1px_1px_at_70%_20%,#ccffee,transparent),radial-gradient(1px_1px_at_40%_60%,#fff,transparent),radial-gradient(1px_1px_at_85%_75%,#ddffff,transparent),radial-gradient(1px_1px_at_55%_85%,#fff,transparent),radial-gradient(1px_1px_at_10%_80%,#cceeff,transparent)]">
<div class="absolute -inset-x-[30%] top-[5%] h-3/5 z-1 pointer-events-none opacity-55 blur-[28px] animate-tch33-drift transition-[opacity,filter] duration-600 group-hover:opacity-85 group-hover:blur-[20px] group-focus-visible:opacity-85 group-focus-visible:blur-[20px] motion-reduce:animate-none bg-[radial-gradient(ellipse_60%_100%_at_30%_50%,#2cffa6_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_60%_40%,#3ad0ff_0%,transparent_60%),radial-gradient(ellipse_55%_100%_at_80%_60%,#b06cff_0%,transparent_60%)]"></div>
<div class="absolute -inset-x-[30%] top-[20%] h-3/5 z-1 pointer-events-none opacity-40 blur-[28px] animate-tch33-drift [animation-duration:13s] [animation-direction:reverse] transition-[opacity,filter] duration-600 group-hover:opacity-65 group-hover:blur-[20px] group-focus-visible:opacity-65 motion-reduce:animate-none bg-[radial-gradient(ellipse_50%_100%_at_50%_50%,#5affc4_0%,transparent_60%),radial-gradient(ellipse_50%_100%_at_75%_40%,#6a8cff_0%,transparent_60%)]"></div>
<div class="relative z-2 h-full p-[2.6rem] flex flex-col justify-end text-tch33-ink">
<span class="text-[0.72rem] font-medium tracking-[0.3em] uppercase text-tch33-a">Arctic Expeditions</span>
<h2 class="font-tch33-display font-medium text-[3rem] leading-none mt-2.5 mb-3">Chasing<br>the Lights</h2>
<p class="font-light text-[0.9rem] leading-[1.65] text-tch33-body">Seven nights in Tromsø under the polar sky. Glass-roof cabins, dog sleds, and the slow green fire overhead.</p>
<div class="flex justify-between mt-6 pt-4 text-[0.78rem] tracking-[0.08em] text-tch33-a border-t border-tch33-a/20"><span>Sept – March</span><span>from $2,400</span></div>
</div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@keyframes tch33-drift {
0%,
100% {
transform: translateX(-6%) translateY(0) skewX(-6deg);
}
50% {
transform: translateX(8%) translateY(-12px) skewX(4deg);
}
}
@theme {
--color-tch33-bg: #03060d;
--color-tch33-bg: oklch(0.08 0.01 250);
--color-tch33-ink: #eafff6;
--color-tch33-ink: oklch(0.97 0.02 165);
--color-tch33-body: #b9d6cc;
--color-tch33-body: oklch(0.84 0.03 170);
--color-tch33-a: #7ff0c4;
--color-tch33-a: oklch(0.89 0.12 165);
--color-tch33-b: #3ad0ff;
--color-tch33-b: oklch(0.81 0.13 225);
--color-tch33-c: #b06cff;
--color-tch33-c: oklch(0.65 0.21 295);
--font-tch33-sans: 'Jost', system-ui, sans-serif;
--font-tch33-display: 'Cormorant Garamond', Georgia, serif;
--animate-tch33-drift: tch33-drift 9s ease-in-out infinite;
}
.tch-33 {
width: 100%;
min-height: 100svh;
}
```How this works
Blur is the aurora. The bands are three overlapping radial gradients in mint, cyan and violet. Unblurred they are obvious blobs; at 28px they become atmosphere. Hover tightens the blur to 20px, which reads as the lights sharpening, not merely getting brighter — a better cue than opacity alone.
One keyframe, two behaviours. Both bands run animate-tch33-drift. The second adds [animation-duration:13s] and [animation-direction:reverse], so the two ribbons cross rather than move in lockstep. Overriding animation longhands with arbitrary properties is the utility answer to a second keyframe block.
The card face stays dark. A near-black vertical gradient under everything keeps the copy at full contrast no matter where the ribbons drift.
Make it yours
- Palette:
--color-tch33-a/b/c— mint/cyan/violet is arctic; pink/orange/violet is a sunset variant with no structural change. - Drift speed: the duration in the theme entry and the band's override. 9s and 13s is a slow, uncorrelated pair.
- Blur range: 40px→30px is smoky; 15px→10px turns the ribbons into defined shapes.
Gotchas — read before shipping
- Blurred, oversized, animated layers are the most GPU-expensive thing here — two bands is the budget, not a starting point.
- Gate the drift behind
motion-reduce:animate-none; continuous ambient motion is exactly what the preference asks about. - Keep the bands behind the content and keep the card's base dark, or the body copy fails contrast over the bright ribbon cores.
- The bands must extend past the card (
-inset-x-[30%]) or their drift exposes hard vertical edges.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Radial gradients, filter: blur() and keyframes are universally supported and GPU-accelerated; the floor is Tailwind v4's generated sheet.