09 / 25
All 25 in 25 Tailwind CSS Blockquotes
- 01Tailwind Blockquote with Large Decorative Quotation Marks
- 02Tailwind CSS Blockquote Testimonial Component
- 03Tailwind Callout Box / Admonition Blockquote
- 04Responsive Tailwind Center-Aligned Quote Banner
- 05Modern Minimalist Left Border Tailwind Blockquote
- 06Animated Tailwind Gradient Border Blockquote
- 07Classic Left Border Tailwind Blockquote Snippet
- 08Brutalist Tailwind Blockquote Design
- 09Glassmorphism Tailwind Blockquote Card
- 10Glowing Neon Border Tailwind Quote Box
- 11Article Pull Quote Tailwind Design with Wrap Text
- 12Speech Bubble Tailwind Blockquote
- 13Thick Vertical Accent Rail Tailwind Blockquote
- 14Customer Testimonial Blockquote Card in Tailwind CSS
- 15Inline Highlighted Text Tailwind Blockquote
- 16Marker Highlight Underline Tailwind Blockquote
- 17Floating Tailwind Blockquote with Drop Shadow
- 18Aurora Gradient Background Tailwind Blockquote
- 19Twitter / X Post Card Style Tailwind Blockquote
- 20Multi-Column Newspaper Editorial Blockquote in Tailwind
- 21IDE Code Comment Style Blockquote in Tailwind
- 22Markdown Compatible HTML Blockquote in Tailwind
- 23JavaScript Testimonial Quote Slider with Tailwind CSS
- 24Expandable Read More Tailwind Blockquote
- 25Tailwind Blockquote with One-Click Copy Button
Glassmorphism Tailwind Blockquote Card
Frosted-glass quote over drifting colour orbs. The port turns the original's @supports block into supports-[backdrop-filter:blur(1px)]: variants — so the opaque fallback and the frosted version are both visible in one class list — and adds a specular top-edge highlight that sells the glass.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tbq-09 relative w-full min-h-svh grid place-items-center overflow-hidden bg-linear-135 from-tbq09-g1 via-tbq09-g2 via-55% to-tbq09-g3 px-5 py-14 font-tbq09-sans text-tbq09-ink" aria-label="Glassmorphism blockquote card demo">
<div aria-hidden="true" class="absolute top-[14%] left-[12%] size-70 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_32%_30%,var(--color-tbq09-o1a),var(--color-tbq09-o1b))] blur-[2px] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute top-[22%] right-[14%] size-48 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_35%_30%,var(--color-tbq09-o2a),var(--color-tbq09-o2b))] blur-[2px] [animation-direction:alternate-reverse] [animation-duration:13s] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute bottom-[8%] left-[38%] size-58 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_30%_30%,var(--color-tbq09-o3a),var(--color-tbq09-o3b))] blur-[2px] [animation-duration:19s] motion-reduce:animate-none"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="relative w-full max-w-[520px] rounded-[22px] border border-white/28 bg-tbq09-fallback p-[clamp(26px,4vw,38px)] shadow-[inset_0_1px_0_oklch(1_0_0/0.32),0_24px_50px_oklch(0_0_0/0.35)] before:pointer-events-none before:absolute before:inset-x-8 before:top-0 before:h-px before:bg-linear-to-r before:from-transparent before:via-white/80 before:to-transparent supports-[backdrop-filter:blur(1px)]:bg-white/10 supports-[backdrop-filter:blur(1px)]:backdrop-blur-[18px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-160">
<blockquote>
<p class="text-[clamp(18px,2.4vw,23px)] leading-[1.55] font-semibold tracking-[-0.012em] text-balance [text-shadow:0_1px_2px_oklch(0_0_0/0.2)]">“Good abstractions are like frosted glass — they hide the machinery without pretending it isn't there.”</p>
</blockquote>
<figcaption class="mt-6 flex items-center gap-3.5 text-[13.5px] leading-[1.45] text-tbq09-mut">
<span aria-hidden="true" class="grid size-11 flex-none place-items-center rounded-full border border-white/35 bg-white/20 text-[13px] font-extrabold text-tbq09-ink">LN</span>
<span><strong class="block text-sm font-bold text-tbq09-ink">Lena Novak</strong>Staff Engineer, Praxis Cloud</span>
</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/25 bg-white/14 px-3.5 py-2 font-tbq09-mono text-[11.5px] text-tbq09-ink">supports-[backdrop-filter]: · backdrop-blur-[18px] · backdrop-saturate-160</p>
</div>
</section><section class="tbq-09 relative w-full min-h-svh grid place-items-center overflow-hidden bg-linear-135 from-tbq09-g1 via-tbq09-g2 via-55% to-tbq09-g3 px-5 py-14 font-tbq09-sans text-tbq09-ink" aria-label="Glassmorphism blockquote card demo">
<div aria-hidden="true" class="absolute top-[14%] left-[12%] size-70 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_32%_30%,var(--color-tbq09-o1a),var(--color-tbq09-o1b))] blur-[2px] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute top-[22%] right-[14%] size-48 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_35%_30%,var(--color-tbq09-o2a),var(--color-tbq09-o2b))] blur-[2px] [animation-direction:alternate-reverse] [animation-duration:13s] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute bottom-[8%] left-[38%] size-58 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_30%_30%,var(--color-tbq09-o3a),var(--color-tbq09-o3b))] blur-[2px] [animation-duration:19s] motion-reduce:animate-none"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="relative w-full max-w-[520px] rounded-[22px] border border-white/28 bg-tbq09-fallback p-[clamp(26px,4vw,38px)] shadow-[inset_0_1px_0_oklch(1_0_0/0.32),0_24px_50px_oklch(0_0_0/0.35)] before:pointer-events-none before:absolute before:inset-x-8 before:top-0 before:h-px before:bg-linear-to-r before:from-transparent before:via-white/80 before:to-transparent supports-[backdrop-filter:blur(1px)]:bg-white/10 supports-[backdrop-filter:blur(1px)]:backdrop-blur-[18px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-160">
<blockquote>
<p class="text-[clamp(18px,2.4vw,23px)] leading-[1.55] font-semibold tracking-[-0.012em] text-balance [text-shadow:0_1px_2px_oklch(0_0_0/0.2)]">“Good abstractions are like frosted glass — they hide the machinery without pretending it isn't there.”</p>
</blockquote>
<figcaption class="mt-6 flex items-center gap-3.5 text-[13.5px] leading-[1.45] text-tbq09-mut">
<span aria-hidden="true" class="grid size-11 flex-none place-items-center rounded-full border border-white/35 bg-white/20 text-[13px] font-extrabold text-tbq09-ink">LN</span>
<span><strong class="block text-sm font-bold text-tbq09-ink">Lena Novak</strong>Staff Engineer, Praxis Cloud</span>
</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/25 bg-white/14 px-3.5 py-2 font-tbq09-mono text-[11.5px] text-tbq09-ink">supports-[backdrop-filter]: · backdrop-blur-[18px] · backdrop-saturate-160</p>
</div>
</section>@import "tailwindcss";
@theme {
--color-tbq09-g1: #583da6;
--color-tbq09-g1: oklch(0.45 0.16 290);
--color-tbq09-g2: #b43694;
--color-tbq09-g2: oklch(0.55 0.19 340);
--color-tbq09-g3: #eb883b;
--color-tbq09-g3: oklch(0.72 0.15 55);
--color-tbq09-fallback: #3f3355;
--color-tbq09-fallback: oklch(0.35 0.06 300);
--color-tbq09-ink: #fafcff;
--color-tbq09-ink: oklch(0.99 0.004 260);
--color-tbq09-mut: #eef3fb;
--color-tbq09-mut: oklch(0.96 0.015 260);
--color-tbq09-o1a: #58e5ed;
--color-tbq09-o1a: oklch(0.85 0.12 200);
--color-tbq09-o1b: #0082e6;
--color-tbq09-o1b: oklch(0.6 0.18 250);
--color-tbq09-o2a: #f9dd73;
--color-tbq09-o2a: oklch(0.9 0.13 95);
--color-tbq09-o2b: #fe6652;
--color-tbq09-o2b: oklch(0.7 0.19 30);
--color-tbq09-o3a: #fec0f7;
--color-tbq09-o3a: oklch(0.88 0.1 330);
--color-tbq09-o3b: #9543c6;
--color-tbq09-o3b: oklch(0.55 0.2 310);
--font-tbq09-sans: 'Geist', system-ui, sans-serif;
--font-tbq09-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq09-drift: tbq09-drift 16s ease-in-out infinite alternate;
@keyframes tbq09-drift {
from {
translate: 0 0;
}
to {
translate: 60px -40px;
}
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-09 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbq09-g1: #583da6;
--color-tbq09-g1: oklch(0.45 0.16 290);
--color-tbq09-g2: #b43694;
--color-tbq09-g2: oklch(0.55 0.19 340);
--color-tbq09-g3: #eb883b;
--color-tbq09-g3: oklch(0.72 0.15 55);
--color-tbq09-fallback: #3f3355;
--color-tbq09-fallback: oklch(0.35 0.06 300);
--color-tbq09-ink: #fafcff;
--color-tbq09-ink: oklch(0.99 0.004 260);
--color-tbq09-mut: #eef3fb;
--color-tbq09-mut: oklch(0.96 0.015 260);
--color-tbq09-o1a: #58e5ed;
--color-tbq09-o1a: oklch(0.85 0.12 200);
--color-tbq09-o1b: #0082e6;
--color-tbq09-o1b: oklch(0.6 0.18 250);
--color-tbq09-o2a: #f9dd73;
--color-tbq09-o2a: oklch(0.9 0.13 95);
--color-tbq09-o2b: #fe6652;
--color-tbq09-o2b: oklch(0.7 0.19 30);
--color-tbq09-o3a: #fec0f7;
--color-tbq09-o3a: oklch(0.88 0.1 330);
--color-tbq09-o3b: #9543c6;
--color-tbq09-o3b: oklch(0.55 0.2 310);
--font-tbq09-sans: 'Geist', system-ui, sans-serif;
--font-tbq09-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq09-drift: tbq09-drift 16s ease-in-out infinite alternate;
@keyframes tbq09-drift {
from {
translate: 0 0;
}
to {
translate: 60px -40px;
}
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-09 {
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";
@theme {
--color-tbq09-g1: #583da6;
--color-tbq09-g1: oklch(0.45 0.16 290);
--color-tbq09-g2: #b43694;
--color-tbq09-g2: oklch(0.55 0.19 340);
--color-tbq09-g3: #eb883b;
--color-tbq09-g3: oklch(0.72 0.15 55);
--color-tbq09-fallback: #3f3355;
--color-tbq09-fallback: oklch(0.35 0.06 300);
--color-tbq09-ink: #fafcff;
--color-tbq09-ink: oklch(0.99 0.004 260);
--color-tbq09-mut: #eef3fb;
--color-tbq09-mut: oklch(0.96 0.015 260);
--color-tbq09-o1a: #58e5ed;
--color-tbq09-o1a: oklch(0.85 0.12 200);
--color-tbq09-o1b: #0082e6;
--color-tbq09-o1b: oklch(0.6 0.18 250);
--color-tbq09-o2a: #f9dd73;
--color-tbq09-o2a: oklch(0.9 0.13 95);
--color-tbq09-o2b: #fe6652;
--color-tbq09-o2b: oklch(0.7 0.19 30);
--color-tbq09-o3a: #fec0f7;
--color-tbq09-o3a: oklch(0.88 0.1 330);
--color-tbq09-o3b: #9543c6;
--color-tbq09-o3b: oklch(0.55 0.2 310);
--font-tbq09-sans: 'Geist', system-ui, sans-serif;
--font-tbq09-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq09-drift: tbq09-drift 16s ease-in-out infinite alternate;
@keyframes tbq09-drift {
from {
translate: 0 0;
}
to {
translate: 60px -40px;
}
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-09 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbq09-g1: #583da6;
--color-tbq09-g1: oklch(0.45 0.16 290);
--color-tbq09-g2: #b43694;
--color-tbq09-g2: oklch(0.55 0.19 340);
--color-tbq09-g3: #eb883b;
--color-tbq09-g3: oklch(0.72 0.15 55);
--color-tbq09-fallback: #3f3355;
--color-tbq09-fallback: oklch(0.35 0.06 300);
--color-tbq09-ink: #fafcff;
--color-tbq09-ink: oklch(0.99 0.004 260);
--color-tbq09-mut: #eef3fb;
--color-tbq09-mut: oklch(0.96 0.015 260);
--color-tbq09-o1a: #58e5ed;
--color-tbq09-o1a: oklch(0.85 0.12 200);
--color-tbq09-o1b: #0082e6;
--color-tbq09-o1b: oklch(0.6 0.18 250);
--color-tbq09-o2a: #f9dd73;
--color-tbq09-o2a: oklch(0.9 0.13 95);
--color-tbq09-o2b: #fe6652;
--color-tbq09-o2b: oklch(0.7 0.19 30);
--color-tbq09-o3a: #fec0f7;
--color-tbq09-o3a: oklch(0.88 0.1 330);
--color-tbq09-o3b: #9543c6;
--color-tbq09-o3b: oklch(0.55 0.2 310);
--font-tbq09-sans: 'Geist', system-ui, sans-serif;
--font-tbq09-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq09-drift: tbq09-drift 16s ease-in-out infinite alternate;
@keyframes tbq09-drift {
from {
translate: 0 0;
}
to {
translate: 60px -40px;
}
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-09 {
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=Geist:wght@400..800&family=JetBrains+Mono:wght@400;500;600;700&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=Geist:wght@400..800&family=JetBrains+Mono:wght@400;500;600;700&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- The original's
@supports (backdrop-filter:blur(1px))block became threesupports-[…]:utilities — the fallback and the enhancement now sit side by side in the markup. @keyframes bq09-driftmoved into@theme; per-orb timing uses arbitrary animation properties rather than three keyframe copies.- UI upgrade from the CSS original: a white specular hairline (
before:via-white/80) across the glass's top edge — the single cue that makes frosted glass read as glass rather than a translucent box. - UI upgrade: role copy raised from
0.87to0.92with a stronger text shadow on the quote, keeping 4.5:1 even where the card passes over the yellow orb; the role is no longer set in a fake<em>.
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: Glassmorphism Tailwind Blockquote Card
Source: https://codefronts.com/snippets/tailwind-css-blockquotes/glassmorphism-tailwind-blockquote-card/
Frosted-glass quote over drifting colour orbs. The port turns the original's @supports block into supports-[backdrop-filter:blur(1px)]: variants — so the opaque fallback and the frosted version are both visible in one class list — and adds a specular top-edge highlight that sells the glass.
## HTML
```html
<section class="tbq-09 relative w-full min-h-svh grid place-items-center overflow-hidden bg-linear-135 from-tbq09-g1 via-tbq09-g2 via-55% to-tbq09-g3 px-5 py-14 font-tbq09-sans text-tbq09-ink" aria-label="Glassmorphism blockquote card demo">
<div aria-hidden="true" class="absolute top-[14%] left-[12%] size-70 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_32%_30%,var(--color-tbq09-o1a),var(--color-tbq09-o1b))] blur-[2px] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute top-[22%] right-[14%] size-48 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_35%_30%,var(--color-tbq09-o2a),var(--color-tbq09-o2b))] blur-[2px] [animation-direction:alternate-reverse] [animation-duration:13s] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute bottom-[8%] left-[38%] size-58 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_30%_30%,var(--color-tbq09-o3a),var(--color-tbq09-o3b))] blur-[2px] [animation-duration:19s] motion-reduce:animate-none"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="relative w-full max-w-[520px] rounded-[22px] border border-white/28 bg-tbq09-fallback p-[clamp(26px,4vw,38px)] shadow-[inset_0_1px_0_oklch(1_0_0/0.32),0_24px_50px_oklch(0_0_0/0.35)] before:pointer-events-none before:absolute before:inset-x-8 before:top-0 before:h-px before:bg-linear-to-r before:from-transparent before:via-white/80 before:to-transparent supports-[backdrop-filter:blur(1px)]:bg-white/10 supports-[backdrop-filter:blur(1px)]:backdrop-blur-[18px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-160">
<blockquote>
<p class="text-[clamp(18px,2.4vw,23px)] leading-[1.55] font-semibold tracking-[-0.012em] text-balance [text-shadow:0_1px_2px_oklch(0_0_0/0.2)]">“Good abstractions are like frosted glass — they hide the machinery without pretending it isn't there.”</p>
</blockquote>
<figcaption class="mt-6 flex items-center gap-3.5 text-[13.5px] leading-[1.45] text-tbq09-mut">
<span aria-hidden="true" class="grid size-11 flex-none place-items-center rounded-full border border-white/35 bg-white/20 text-[13px] font-extrabold text-tbq09-ink">LN</span>
<span><strong class="block text-sm font-bold text-tbq09-ink">Lena Novak</strong>Staff Engineer, Praxis Cloud</span>
</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/25 bg-white/14 px-3.5 py-2 font-tbq09-mono text-[11.5px] text-tbq09-ink">supports-[backdrop-filter]: · backdrop-blur-[18px] · backdrop-saturate-160</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbq09-g1: #583da6;
--color-tbq09-g1: oklch(0.45 0.16 290);
--color-tbq09-g2: #b43694;
--color-tbq09-g2: oklch(0.55 0.19 340);
--color-tbq09-g3: #eb883b;
--color-tbq09-g3: oklch(0.72 0.15 55);
--color-tbq09-fallback: #3f3355;
--color-tbq09-fallback: oklch(0.35 0.06 300);
--color-tbq09-ink: #fafcff;
--color-tbq09-ink: oklch(0.99 0.004 260);
--color-tbq09-mut: #eef3fb;
--color-tbq09-mut: oklch(0.96 0.015 260);
--color-tbq09-o1a: #58e5ed;
--color-tbq09-o1a: oklch(0.85 0.12 200);
--color-tbq09-o1b: #0082e6;
--color-tbq09-o1b: oklch(0.6 0.18 250);
--color-tbq09-o2a: #f9dd73;
--color-tbq09-o2a: oklch(0.9 0.13 95);
--color-tbq09-o2b: #fe6652;
--color-tbq09-o2b: oklch(0.7 0.19 30);
--color-tbq09-o3a: #fec0f7;
--color-tbq09-o3a: oklch(0.88 0.1 330);
--color-tbq09-o3b: #9543c6;
--color-tbq09-o3b: oklch(0.55 0.2 310);
--font-tbq09-sans: 'Geist', system-ui, sans-serif;
--font-tbq09-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq09-drift: tbq09-drift 16s ease-in-out infinite alternate;
@keyframes tbq09-drift {
from {
translate: 0 0;
}
to {
translate: 60px -40px;
}
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-09 {
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: Glassmorphism Tailwind Blockquote Card
Source: https://codefronts.com/snippets/tailwind-css-blockquotes/glassmorphism-tailwind-blockquote-card/
Frosted-glass quote over drifting colour orbs. The port turns the original's @supports block into supports-[backdrop-filter:blur(1px)]: variants — so the opaque fallback and the frosted version are both visible in one class list — and adds a specular top-edge highlight that sells the glass.
## HTML
```html
<section class="tbq-09 relative w-full min-h-svh grid place-items-center overflow-hidden bg-linear-135 from-tbq09-g1 via-tbq09-g2 via-55% to-tbq09-g3 px-5 py-14 font-tbq09-sans text-tbq09-ink" aria-label="Glassmorphism blockquote card demo">
<div aria-hidden="true" class="absolute top-[14%] left-[12%] size-70 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_32%_30%,var(--color-tbq09-o1a),var(--color-tbq09-o1b))] blur-[2px] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute top-[22%] right-[14%] size-48 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_35%_30%,var(--color-tbq09-o2a),var(--color-tbq09-o2b))] blur-[2px] [animation-direction:alternate-reverse] [animation-duration:13s] motion-reduce:animate-none"></div>
<div aria-hidden="true" class="absolute bottom-[8%] left-[38%] size-58 animate-tbq09-drift rounded-full bg-[radial-gradient(circle_at_30%_30%,var(--color-tbq09-o3a),var(--color-tbq09-o3b))] blur-[2px] [animation-duration:19s] motion-reduce:animate-none"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="relative w-full max-w-[520px] rounded-[22px] border border-white/28 bg-tbq09-fallback p-[clamp(26px,4vw,38px)] shadow-[inset_0_1px_0_oklch(1_0_0/0.32),0_24px_50px_oklch(0_0_0/0.35)] before:pointer-events-none before:absolute before:inset-x-8 before:top-0 before:h-px before:bg-linear-to-r before:from-transparent before:via-white/80 before:to-transparent supports-[backdrop-filter:blur(1px)]:bg-white/10 supports-[backdrop-filter:blur(1px)]:backdrop-blur-[18px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-160">
<blockquote>
<p class="text-[clamp(18px,2.4vw,23px)] leading-[1.55] font-semibold tracking-[-0.012em] text-balance [text-shadow:0_1px_2px_oklch(0_0_0/0.2)]">“Good abstractions are like frosted glass — they hide the machinery without pretending it isn't there.”</p>
</blockquote>
<figcaption class="mt-6 flex items-center gap-3.5 text-[13.5px] leading-[1.45] text-tbq09-mut">
<span aria-hidden="true" class="grid size-11 flex-none place-items-center rounded-full border border-white/35 bg-white/20 text-[13px] font-extrabold text-tbq09-ink">LN</span>
<span><strong class="block text-sm font-bold text-tbq09-ink">Lena Novak</strong>Staff Engineer, Praxis Cloud</span>
</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/25 bg-white/14 px-3.5 py-2 font-tbq09-mono text-[11.5px] text-tbq09-ink">supports-[backdrop-filter]: · backdrop-blur-[18px] · backdrop-saturate-160</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbq09-g1: #583da6;
--color-tbq09-g1: oklch(0.45 0.16 290);
--color-tbq09-g2: #b43694;
--color-tbq09-g2: oklch(0.55 0.19 340);
--color-tbq09-g3: #eb883b;
--color-tbq09-g3: oklch(0.72 0.15 55);
--color-tbq09-fallback: #3f3355;
--color-tbq09-fallback: oklch(0.35 0.06 300);
--color-tbq09-ink: #fafcff;
--color-tbq09-ink: oklch(0.99 0.004 260);
--color-tbq09-mut: #eef3fb;
--color-tbq09-mut: oklch(0.96 0.015 260);
--color-tbq09-o1a: #58e5ed;
--color-tbq09-o1a: oklch(0.85 0.12 200);
--color-tbq09-o1b: #0082e6;
--color-tbq09-o1b: oklch(0.6 0.18 250);
--color-tbq09-o2a: #f9dd73;
--color-tbq09-o2a: oklch(0.9 0.13 95);
--color-tbq09-o2b: #fe6652;
--color-tbq09-o2b: oklch(0.7 0.19 30);
--color-tbq09-o3a: #fec0f7;
--color-tbq09-o3a: oklch(0.88 0.1 330);
--color-tbq09-o3b: #9543c6;
--color-tbq09-o3b: oklch(0.55 0.2 310);
--font-tbq09-sans: 'Geist', system-ui, sans-serif;
--font-tbq09-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq09-drift: tbq09-drift 16s ease-in-out infinite alternate;
@keyframes tbq09-drift {
from {
translate: 0 0;
}
to {
translate: 60px -40px;
}
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-09 {
width: 100%;
min-height: 100svh;
}
```How this works
Fallback first, frost second. The base class list paints an opaque purple card. The supports-[…]: variants only apply where the browser can actually blur:
bg-tbq09-fallback
supports-[backdrop-filter:blur(1px)]:bg-white/10
supports-[backdrop-filter:blur(1px)]:backdrop-blur-[18px]
supports-[backdrop-filter:blur(1px)]:backdrop-saturate-160Saturation is the secret. Blur alone greys the colours behind; backdrop-saturate-160 restores the vivid orbs so the glass looks lit, not dirty.
One keyframe, three motions. The orbs share animate-tbq09-drift; arbitrary [animation-duration:13s] and [animation-direction:alternate-reverse] desynchronise them without extra keyframes.
Make it yours
- More frost:
backdrop-blur-[28px]andbg-white/15. - Dark glass:
bg-black/25withborder-white/15. - Static background: remove
animate-tbq09-driftfrom the orbs.
Gotchas — read before shipping
- Backdrop blur is expensive on large areas — keep glass cards modest in size, and avoid stacking several.
- Text on glass needs a guaranteed contrast floor: a faint
[text-shadow:0_1px_2px_…]keeps white text legible over the yellow orb. - The orbs are
absolute; the card and chip needrelativeto sit above them.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
backdrop-filter is Chrome 76 / Safari 18 unprefixed (9+ prefixed) / Firefox 103; Tailwind emits the -webkit- form too.