18 / 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
Aurora Gradient Background Tailwind Blockquote
Three blurred radial blobs drift and screen-blend while a wrapper slowly rotates hue, behind a frosted quote panel. The port adds a static star field — eight 1px radial gradients in one bg-[…] — so the aurora reads as sky rather than lava lamp, and sets the quote in Instrument Serif.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tbq-18 relative w-full min-h-svh grid place-items-center overflow-hidden bg-tbq18-bg px-5 py-14 font-tbq18-sans text-tbq18-ink" aria-label="Aurora gradient background blockquote demo">
<div aria-hidden="true" class="pointer-events-none absolute -inset-[10%] animate-tbq18-hue motion-reduce:animate-none">
<i class="absolute -top-[18%] -left-[12%] size-[55vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b1),transparent_65%)] blur-[70px] mix-blend-screen motion-reduce:animate-none"></i>
<i class="absolute -top-[6%] -right-[14%] size-[48vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b2),transparent_65%)] blur-[70px] mix-blend-screen [animation-direction:alternate-reverse] [animation-duration:31s] motion-reduce:animate-none"></i>
<i class="absolute -bottom-[28%] left-[22%] size-[42vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b3),transparent_65%)] blur-[70px] mix-blend-screen [animation-duration:23s] motion-reduce:animate-none"></i>
</div>
<div aria-hidden="true" class="pointer-events-none absolute inset-0 opacity-70 bg-[radial-gradient(1px_1px_at_12%_22%,white,transparent),radial-gradient(1px_1px_at_28%_68%,white,transparent),radial-gradient(1.5px_1.5px_at_44%_12%,white,transparent),radial-gradient(1px_1px_at_61%_80%,white,transparent),radial-gradient(1px_1px_at_72%_30%,white,transparent),radial-gradient(1.5px_1.5px_at_86%_58%,white,transparent),radial-gradient(1px_1px_at_92%_14%,white,transparent),radial-gradient(1px_1px_at_6%_88%,white,transparent)]"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="w-full max-w-[580px] rounded-3xl border border-white/16 bg-tbq18-panel p-[clamp(30px,5vw,50px)] text-center shadow-[inset_0_1px_0_oklch(1_0_0/0.14),0_30px_70px_oklch(0_0_0/0.5)] supports-[backdrop-filter:blur(1px)]:bg-tbq18-glass supports-[backdrop-filter:blur(1px)]:backdrop-blur-[14px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-140">
<p class="mb-4 text-[11.5px] font-bold tracking-[0.3em] uppercase text-tbq18-mut">Above the weather</p>
<blockquote>
<p class="font-tbq18-display text-[clamp(32px,4.6vw,50px)] leading-[1.1] tracking-[-0.01em] text-balance [text-shadow:0_2px_12px_oklch(0_0_0/0.3)]">“Somewhere, something incredible is waiting to be known.”</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq18-mut">— Carl Sagan</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 bg-tbq18-glass px-3.5 py-2 font-tbq18-mono text-[11.5px] text-tbq18-mut">mix-blend-screen blobs · animate-tbq18-hue · star field bg-[…]</p>
</div>
</section><section class="tbq-18 relative w-full min-h-svh grid place-items-center overflow-hidden bg-tbq18-bg px-5 py-14 font-tbq18-sans text-tbq18-ink" aria-label="Aurora gradient background blockquote demo">
<div aria-hidden="true" class="pointer-events-none absolute -inset-[10%] animate-tbq18-hue motion-reduce:animate-none">
<i class="absolute -top-[18%] -left-[12%] size-[55vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b1),transparent_65%)] blur-[70px] mix-blend-screen motion-reduce:animate-none"></i>
<i class="absolute -top-[6%] -right-[14%] size-[48vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b2),transparent_65%)] blur-[70px] mix-blend-screen [animation-direction:alternate-reverse] [animation-duration:31s] motion-reduce:animate-none"></i>
<i class="absolute -bottom-[28%] left-[22%] size-[42vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b3),transparent_65%)] blur-[70px] mix-blend-screen [animation-duration:23s] motion-reduce:animate-none"></i>
</div>
<div aria-hidden="true" class="pointer-events-none absolute inset-0 opacity-70 bg-[radial-gradient(1px_1px_at_12%_22%,white,transparent),radial-gradient(1px_1px_at_28%_68%,white,transparent),radial-gradient(1.5px_1.5px_at_44%_12%,white,transparent),radial-gradient(1px_1px_at_61%_80%,white,transparent),radial-gradient(1px_1px_at_72%_30%,white,transparent),radial-gradient(1.5px_1.5px_at_86%_58%,white,transparent),radial-gradient(1px_1px_at_92%_14%,white,transparent),radial-gradient(1px_1px_at_6%_88%,white,transparent)]"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="w-full max-w-[580px] rounded-3xl border border-white/16 bg-tbq18-panel p-[clamp(30px,5vw,50px)] text-center shadow-[inset_0_1px_0_oklch(1_0_0/0.14),0_30px_70px_oklch(0_0_0/0.5)] supports-[backdrop-filter:blur(1px)]:bg-tbq18-glass supports-[backdrop-filter:blur(1px)]:backdrop-blur-[14px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-140">
<p class="mb-4 text-[11.5px] font-bold tracking-[0.3em] uppercase text-tbq18-mut">Above the weather</p>
<blockquote>
<p class="font-tbq18-display text-[clamp(32px,4.6vw,50px)] leading-[1.1] tracking-[-0.01em] text-balance [text-shadow:0_2px_12px_oklch(0_0_0/0.3)]">“Somewhere, something incredible is waiting to be known.”</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq18-mut">— Carl Sagan</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 bg-tbq18-glass px-3.5 py-2 font-tbq18-mono text-[11.5px] text-tbq18-mut">mix-blend-screen blobs · animate-tbq18-hue · star field bg-[…]</p>
</div>
</section>@import "tailwindcss";
@theme {
--color-tbq18-bg: #070811;
--color-tbq18-bg: oklch(0.14 0.02 275);
--color-tbq18-ink: #f2f5fb;
--color-tbq18-ink: oklch(0.97 0.008 260);
--color-tbq18-mut: #b3bfd2;
--color-tbq18-mut: oklch(0.8 0.03 260);
--color-tbq18-panel: #1314238c;
--color-tbq18-panel: oklch(0.2 0.03 280 / 0.55);
--color-tbq18-glass: #13142352;
--color-tbq18-glass: oklch(0.2 0.03 280 / 0.32);
--color-tbq18-b1: #00cfdd80;
--color-tbq18-b1: oklch(0.75 0.19 200 / 0.5);
--color-tbq18-b2: #845cf773;
--color-tbq18-b2: oklch(0.6 0.22 290 / 0.45);
--color-tbq18-b3: #e45cbe66;
--color-tbq18-b3: oklch(0.68 0.2 340 / 0.4);
--font-tbq18-display: 'Instrument Serif', Georgia, serif;
--font-tbq18-sans: 'Geist', system-ui, sans-serif;
--font-tbq18-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq18-drift: tbq18-drift 26s ease-in-out infinite alternate;
--animate-tbq18-hue: tbq18-hue 44s linear infinite;
@keyframes tbq18-drift {
from {
transform: translate(-8%, -6%) scale(1);
}
to {
transform: translate(10%, 8%) scale(1.18);
}
}
@keyframes tbq18-hue {
to {
filter: hue-rotate(360deg);
}
}
}
/* 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-18 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbq18-bg: #070811;
--color-tbq18-bg: oklch(0.14 0.02 275);
--color-tbq18-ink: #f2f5fb;
--color-tbq18-ink: oklch(0.97 0.008 260);
--color-tbq18-mut: #b3bfd2;
--color-tbq18-mut: oklch(0.8 0.03 260);
--color-tbq18-panel: #1314238c;
--color-tbq18-panel: oklch(0.2 0.03 280 / 0.55);
--color-tbq18-glass: #13142352;
--color-tbq18-glass: oklch(0.2 0.03 280 / 0.32);
--color-tbq18-b1: #00cfdd80;
--color-tbq18-b1: oklch(0.75 0.19 200 / 0.5);
--color-tbq18-b2: #845cf773;
--color-tbq18-b2: oklch(0.6 0.22 290 / 0.45);
--color-tbq18-b3: #e45cbe66;
--color-tbq18-b3: oklch(0.68 0.2 340 / 0.4);
--font-tbq18-display: 'Instrument Serif', Georgia, serif;
--font-tbq18-sans: 'Geist', system-ui, sans-serif;
--font-tbq18-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq18-drift: tbq18-drift 26s ease-in-out infinite alternate;
--animate-tbq18-hue: tbq18-hue 44s linear infinite;
@keyframes tbq18-drift {
from {
transform: translate(-8%, -6%) scale(1);
}
to {
transform: translate(10%, 8%) scale(1.18);
}
}
@keyframes tbq18-hue {
to {
filter: hue-rotate(360deg);
}
}
}
/* 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-18 {
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-tbq18-bg: #070811;
--color-tbq18-bg: oklch(0.14 0.02 275);
--color-tbq18-ink: #f2f5fb;
--color-tbq18-ink: oklch(0.97 0.008 260);
--color-tbq18-mut: #b3bfd2;
--color-tbq18-mut: oklch(0.8 0.03 260);
--color-tbq18-panel: #1314238c;
--color-tbq18-panel: oklch(0.2 0.03 280 / 0.55);
--color-tbq18-glass: #13142352;
--color-tbq18-glass: oklch(0.2 0.03 280 / 0.32);
--color-tbq18-b1: #00cfdd80;
--color-tbq18-b1: oklch(0.75 0.19 200 / 0.5);
--color-tbq18-b2: #845cf773;
--color-tbq18-b2: oklch(0.6 0.22 290 / 0.45);
--color-tbq18-b3: #e45cbe66;
--color-tbq18-b3: oklch(0.68 0.2 340 / 0.4);
--font-tbq18-display: 'Instrument Serif', Georgia, serif;
--font-tbq18-sans: 'Geist', system-ui, sans-serif;
--font-tbq18-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq18-drift: tbq18-drift 26s ease-in-out infinite alternate;
--animate-tbq18-hue: tbq18-hue 44s linear infinite;
@keyframes tbq18-drift {
from {
transform: translate(-8%, -6%) scale(1);
}
to {
transform: translate(10%, 8%) scale(1.18);
}
}
@keyframes tbq18-hue {
to {
filter: hue-rotate(360deg);
}
}
}
/* 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-18 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbq18-bg: #070811;
--color-tbq18-bg: oklch(0.14 0.02 275);
--color-tbq18-ink: #f2f5fb;
--color-tbq18-ink: oklch(0.97 0.008 260);
--color-tbq18-mut: #b3bfd2;
--color-tbq18-mut: oklch(0.8 0.03 260);
--color-tbq18-panel: #1314238c;
--color-tbq18-panel: oklch(0.2 0.03 280 / 0.55);
--color-tbq18-glass: #13142352;
--color-tbq18-glass: oklch(0.2 0.03 280 / 0.32);
--color-tbq18-b1: #00cfdd80;
--color-tbq18-b1: oklch(0.75 0.19 200 / 0.5);
--color-tbq18-b2: #845cf773;
--color-tbq18-b2: oklch(0.6 0.22 290 / 0.45);
--color-tbq18-b3: #e45cbe66;
--color-tbq18-b3: oklch(0.68 0.2 340 / 0.4);
--font-tbq18-display: 'Instrument Serif', Georgia, serif;
--font-tbq18-sans: 'Geist', system-ui, sans-serif;
--font-tbq18-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq18-drift: tbq18-drift 26s ease-in-out infinite alternate;
--animate-tbq18-hue: tbq18-hue 44s linear infinite;
@keyframes tbq18-drift {
from {
transform: translate(-8%, -6%) scale(1);
}
to {
transform: translate(10%, 8%) scale(1.18);
}
}
@keyframes tbq18-hue {
to {
filter: hue-rotate(360deg);
}
}
}
/* 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-18 {
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=Instrument+Serif:ital@0;1&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=Instrument+Serif:ital@0;1&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.
- Each blob's four declarations (size, position, gradient, animation) became one class list; per-blob timing uses arbitrary animation properties instead of extra keyframes.
- The
@supportsglass block becamesupports-[backdrop-filter:blur(1px)]:utilities, same as demo 09. - UI upgrade from the CSS original: a sparse star field (eight 1px radial gradients) behind the aurora gives it depth and a clear 'night sky' read.
- UI upgrade: the quote is Instrument Serif at up to 50px (was 36px bold sans), and kicker/caption copy raised from
0.75to0.8for contrast over the brightest blob.
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: Aurora Gradient Background Tailwind Blockquote
Source: https://codefronts.com/snippets/tailwind-css-blockquotes/aurora-gradient-background-tailwind-blockquote/
Three blurred radial blobs drift and screen-blend while a wrapper slowly rotates hue, behind a frosted quote panel. The port adds a static star field — eight 1px radial gradients in one bg-[…] — so the aurora reads as sky rather than lava lamp, and sets the quote in Instrument Serif.
## HTML
```html
<section class="tbq-18 relative w-full min-h-svh grid place-items-center overflow-hidden bg-tbq18-bg px-5 py-14 font-tbq18-sans text-tbq18-ink" aria-label="Aurora gradient background blockquote demo">
<div aria-hidden="true" class="pointer-events-none absolute -inset-[10%] animate-tbq18-hue motion-reduce:animate-none">
<i class="absolute -top-[18%] -left-[12%] size-[55vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b1),transparent_65%)] blur-[70px] mix-blend-screen motion-reduce:animate-none"></i>
<i class="absolute -top-[6%] -right-[14%] size-[48vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b2),transparent_65%)] blur-[70px] mix-blend-screen [animation-direction:alternate-reverse] [animation-duration:31s] motion-reduce:animate-none"></i>
<i class="absolute -bottom-[28%] left-[22%] size-[42vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b3),transparent_65%)] blur-[70px] mix-blend-screen [animation-duration:23s] motion-reduce:animate-none"></i>
</div>
<div aria-hidden="true" class="pointer-events-none absolute inset-0 opacity-70 bg-[radial-gradient(1px_1px_at_12%_22%,white,transparent),radial-gradient(1px_1px_at_28%_68%,white,transparent),radial-gradient(1.5px_1.5px_at_44%_12%,white,transparent),radial-gradient(1px_1px_at_61%_80%,white,transparent),radial-gradient(1px_1px_at_72%_30%,white,transparent),radial-gradient(1.5px_1.5px_at_86%_58%,white,transparent),radial-gradient(1px_1px_at_92%_14%,white,transparent),radial-gradient(1px_1px_at_6%_88%,white,transparent)]"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="w-full max-w-[580px] rounded-3xl border border-white/16 bg-tbq18-panel p-[clamp(30px,5vw,50px)] text-center shadow-[inset_0_1px_0_oklch(1_0_0/0.14),0_30px_70px_oklch(0_0_0/0.5)] supports-[backdrop-filter:blur(1px)]:bg-tbq18-glass supports-[backdrop-filter:blur(1px)]:backdrop-blur-[14px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-140">
<p class="mb-4 text-[11.5px] font-bold tracking-[0.3em] uppercase text-tbq18-mut">Above the weather</p>
<blockquote>
<p class="font-tbq18-display text-[clamp(32px,4.6vw,50px)] leading-[1.1] tracking-[-0.01em] text-balance [text-shadow:0_2px_12px_oklch(0_0_0/0.3)]">“Somewhere, something incredible is waiting to be known.”</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq18-mut">— Carl Sagan</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 bg-tbq18-glass px-3.5 py-2 font-tbq18-mono text-[11.5px] text-tbq18-mut">mix-blend-screen blobs · animate-tbq18-hue · star field bg-[…]</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbq18-bg: #070811;
--color-tbq18-bg: oklch(0.14 0.02 275);
--color-tbq18-ink: #f2f5fb;
--color-tbq18-ink: oklch(0.97 0.008 260);
--color-tbq18-mut: #b3bfd2;
--color-tbq18-mut: oklch(0.8 0.03 260);
--color-tbq18-panel: #1314238c;
--color-tbq18-panel: oklch(0.2 0.03 280 / 0.55);
--color-tbq18-glass: #13142352;
--color-tbq18-glass: oklch(0.2 0.03 280 / 0.32);
--color-tbq18-b1: #00cfdd80;
--color-tbq18-b1: oklch(0.75 0.19 200 / 0.5);
--color-tbq18-b2: #845cf773;
--color-tbq18-b2: oklch(0.6 0.22 290 / 0.45);
--color-tbq18-b3: #e45cbe66;
--color-tbq18-b3: oklch(0.68 0.2 340 / 0.4);
--font-tbq18-display: 'Instrument Serif', Georgia, serif;
--font-tbq18-sans: 'Geist', system-ui, sans-serif;
--font-tbq18-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq18-drift: tbq18-drift 26s ease-in-out infinite alternate;
--animate-tbq18-hue: tbq18-hue 44s linear infinite;
@keyframes tbq18-drift {
from {
transform: translate(-8%, -6%) scale(1);
}
to {
transform: translate(10%, 8%) scale(1.18);
}
}
@keyframes tbq18-hue {
to {
filter: hue-rotate(360deg);
}
}
}
/* 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-18 {
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: Aurora Gradient Background Tailwind Blockquote
Source: https://codefronts.com/snippets/tailwind-css-blockquotes/aurora-gradient-background-tailwind-blockquote/
Three blurred radial blobs drift and screen-blend while a wrapper slowly rotates hue, behind a frosted quote panel. The port adds a static star field — eight 1px radial gradients in one bg-[…] — so the aurora reads as sky rather than lava lamp, and sets the quote in Instrument Serif.
## HTML
```html
<section class="tbq-18 relative w-full min-h-svh grid place-items-center overflow-hidden bg-tbq18-bg px-5 py-14 font-tbq18-sans text-tbq18-ink" aria-label="Aurora gradient background blockquote demo">
<div aria-hidden="true" class="pointer-events-none absolute -inset-[10%] animate-tbq18-hue motion-reduce:animate-none">
<i class="absolute -top-[18%] -left-[12%] size-[55vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b1),transparent_65%)] blur-[70px] mix-blend-screen motion-reduce:animate-none"></i>
<i class="absolute -top-[6%] -right-[14%] size-[48vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b2),transparent_65%)] blur-[70px] mix-blend-screen [animation-direction:alternate-reverse] [animation-duration:31s] motion-reduce:animate-none"></i>
<i class="absolute -bottom-[28%] left-[22%] size-[42vmax] animate-tbq18-drift rounded-full bg-[radial-gradient(circle,var(--color-tbq18-b3),transparent_65%)] blur-[70px] mix-blend-screen [animation-duration:23s] motion-reduce:animate-none"></i>
</div>
<div aria-hidden="true" class="pointer-events-none absolute inset-0 opacity-70 bg-[radial-gradient(1px_1px_at_12%_22%,white,transparent),radial-gradient(1px_1px_at_28%_68%,white,transparent),radial-gradient(1.5px_1.5px_at_44%_12%,white,transparent),radial-gradient(1px_1px_at_61%_80%,white,transparent),radial-gradient(1px_1px_at_72%_30%,white,transparent),radial-gradient(1.5px_1.5px_at_86%_58%,white,transparent),radial-gradient(1px_1px_at_92%_14%,white,transparent),radial-gradient(1px_1px_at_6%_88%,white,transparent)]"></div>
<div class="relative grid w-full justify-items-center gap-8">
<figure class="w-full max-w-[580px] rounded-3xl border border-white/16 bg-tbq18-panel p-[clamp(30px,5vw,50px)] text-center shadow-[inset_0_1px_0_oklch(1_0_0/0.14),0_30px_70px_oklch(0_0_0/0.5)] supports-[backdrop-filter:blur(1px)]:bg-tbq18-glass supports-[backdrop-filter:blur(1px)]:backdrop-blur-[14px] supports-[backdrop-filter:blur(1px)]:backdrop-saturate-140">
<p class="mb-4 text-[11.5px] font-bold tracking-[0.3em] uppercase text-tbq18-mut">Above the weather</p>
<blockquote>
<p class="font-tbq18-display text-[clamp(32px,4.6vw,50px)] leading-[1.1] tracking-[-0.01em] text-balance [text-shadow:0_2px_12px_oklch(0_0_0/0.3)]">“Somewhere, something incredible is waiting to be known.”</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq18-mut">— Carl Sagan</figcaption>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 bg-tbq18-glass px-3.5 py-2 font-tbq18-mono text-[11.5px] text-tbq18-mut">mix-blend-screen blobs · animate-tbq18-hue · star field bg-[…]</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbq18-bg: #070811;
--color-tbq18-bg: oklch(0.14 0.02 275);
--color-tbq18-ink: #f2f5fb;
--color-tbq18-ink: oklch(0.97 0.008 260);
--color-tbq18-mut: #b3bfd2;
--color-tbq18-mut: oklch(0.8 0.03 260);
--color-tbq18-panel: #1314238c;
--color-tbq18-panel: oklch(0.2 0.03 280 / 0.55);
--color-tbq18-glass: #13142352;
--color-tbq18-glass: oklch(0.2 0.03 280 / 0.32);
--color-tbq18-b1: #00cfdd80;
--color-tbq18-b1: oklch(0.75 0.19 200 / 0.5);
--color-tbq18-b2: #845cf773;
--color-tbq18-b2: oklch(0.6 0.22 290 / 0.45);
--color-tbq18-b3: #e45cbe66;
--color-tbq18-b3: oklch(0.68 0.2 340 / 0.4);
--font-tbq18-display: 'Instrument Serif', Georgia, serif;
--font-tbq18-sans: 'Geist', system-ui, sans-serif;
--font-tbq18-mono: 'JetBrains Mono', ui-monospace, monospace;
--animate-tbq18-drift: tbq18-drift 26s ease-in-out infinite alternate;
--animate-tbq18-hue: tbq18-hue 44s linear infinite;
@keyframes tbq18-drift {
from {
transform: translate(-8%, -6%) scale(1);
}
to {
transform: translate(10%, 8%) scale(1.18);
}
}
@keyframes tbq18-hue {
to {
filter: hue-rotate(360deg);
}
}
}
/* 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-18 {
width: 100%;
min-height: 100svh;
}
```How this works
Blend, don't stack. Normal compositing turns overlapping colours grey; mix-blend-screen adds light, which is how auroras actually look:
<i class="absolute size-[55vmax] rounded-full blur-[70px] mix-blend-screen
bg-[radial-gradient(circle,var(--color-tbq18-b1),transparent_65%)]
animate-tbq18-drift"></i>One hue-rotate for all three. Animating filter: hue-rotate() on the parent shifts every blob together over 44s — one animation instead of three colour keyframes.
Performance: drift animates transform only, and the blur is applied once per blob; nothing triggers layout.
Make it yours
- Calmer: remove
animate-tbq18-hueand keep only the drift. - Warmer sky: re-point the three blob tokens to amber/rose/violet.
- No stars: delete the star-field div.
Gotchas — read before shipping
- Large
blur()on viewport-sized elements is GPU-heavy on low-end phones;motion-reduce:animate-nonealso reduces battery drain. mix-blend-screenneeds a dark backdrop to show — on light backgrounds switch tomix-blend-multiply.- Keep the section
overflow-hidden: the blobs are larger than the viewport by design.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
mix-blend-mode and filter are universal; backdrop-filter is Chrome 76 / Safari 18 (prefixed 9+) / Firefox 103.