Chromatic Blur is a dreamy, atmospheric design aesthetic built on out-of-focus color fields, soft gradient transitions, and intentionally defocused palettes. Inspired by the optical phenomenon of chromatic aberration – where a camera lens fails to converge all wavelengths of light to a single focal point, producing separated color fringes and beautifully blurred color halos – Chromatic Blur translates this photographic artifact into a deliberate digital design language. The result is interfaces that feel like looking through frosted glass at a sunset: warm, immersive, and gently disorienting.
Where most design systems chase sharpness and pixel-perfect clarity, Chromatic Blur embraces the opposite. It treats defocus as a feature, not a flaw. Large, overlapping color fields with heavy Gaussian blur create ambient backgrounds that shift and breathe. Colors bleed into one another without hard boundaries, producing painterly transitions that feel organic and alive. The aesthetic draws from bokeh photography (the quality of blur in out-of-focus areas), color field painting (think Mark Rothko’s luminous rectangles of pure color), and the smoky, ambient gradient trends that have emerged in web design since 2024, where gradients function as atmospheric lighting rather than decorative stripes.
The Chromatic Blur palette favors soft, desaturated tones – lavenders, peach, powder blue, sage – punctuated by warmer focal points of coral, amber, or rose. Typography sits atop these diffused color beds with careful contrast management, often using semi-transparent background chips or subtle text shadows to remain legible against the shifting hues beneath. Layouts are spacious and unhurried, with generous whitespace that lets the color fields expand and merge. Cards, buttons, and UI elements use frosted-glass effects (backdrop-filter blur) to maintain the defocused language at every layer. The overall mood is meditative, ethereal, and sensory – a visual whisper rather than a shout.
Colors drawn from defocused photography, bokeh light studies, and color field painting. The palette balances soft, chalky pastels for ambient fields with warmer saturated tones for focal accents, all designed to look beautiful when blurred and overlapped.
| Swatch | Hex | Role / Usage |
|---|---|---|
| Cloud White | #F7F5F2 |
Page background, lightest base surface |
| Warm Mist | #EDE8E3 |
Secondary background, card surfaces |
| Lavender Haze | #C8B8E8 |
Primary blur field, decorative gradient stop |
| Powder Blush | #E8C4C8 |
Warm blur field, secondary gradient stop |
| Peach Glow | #F0CDB5 |
Warm accent blur field, highlight areas |
| Sky Wash | #B5CCE0 |
Cool blur field, balancing gradient stop |
| Sage Mist | #B8CCBA |
Neutral-cool blur field, secondary accents |
| Coral Focus | #E07A6B |
Primary CTA, focal accent, active states |
| Rose Lens | #D4728A |
Secondary accent, hover states, badges |
| Amber Flare | #D4A24E |
Tertiary accent, warm highlights, alerts |
| Soft Indigo | #7B6FA0 |
Primary text on light backgrounds |
| Charcoal Fog | #4A4550 |
Headings, high-contrast text |
| Muted Plum | #8A7F96 |
Secondary text, descriptions, captions |
| Faded Dusk | #A899B8 |
Tertiary text, placeholders, disabled states |
| Glass Frost | rgba(255,255,255,0.55) |
Frosted glass card background |
:root {
/* Backgrounds */
--cb-bg-primary: #f7f5f2;
--cb-bg-secondary: #ede8e3;
--cb-bg-glass: rgba(255, 255, 255, 0.55);
--cb-bg-glass-border: rgba(255, 255, 255, 0.7);
/* Blur color fields */
--cb-lavender: #c8b8e8;
--cb-blush: #e8c4c8;
--cb-peach: #f0cdb5;
--cb-sky: #b5cce0;
--cb-sage: #b8ccba;
/* Accent / focal colors */
--cb-coral: #e07a6b;
--cb-rose: #d4728a;
--cb-amber: #d4a24e;
/* Text */
--cb-text-primary: #4a4550;
--cb-text-secondary: #8a7f96;
--cb-text-muted: #a899b8;
--cb-text-body: #7b6fa0;
/* Blur values */
--cb-blur-sm: 20px;
--cb-blur-md: 40px;
--cb-blur-lg: 80px;
--cb-blur-xl: 120px;
--cb-glass-blur: 16px;
/* Signature gradients (pre-blurred via radial-gradient) */
--cb-gradient-warm: radial-gradient(circle at 30% 40%, rgba(232,196,200,0.6), rgba(240,205,181,0.4), transparent 70%);
--cb-gradient-cool: radial-gradient(circle at 70% 60%, rgba(181,204,224,0.5), rgba(200,184,232,0.4), transparent 70%);
--cb-gradient-full: radial-gradient(circle at 25% 35%, rgba(200,184,232,0.5) 0%, transparent 50%),
radial-gradient(circle at 75% 25%, rgba(232,196,200,0.4) 0%, transparent 50%),
radial-gradient(circle at 50% 75%, rgba(181,204,224,0.4) 0%, transparent 50%);
/* Radii */
--cb-radius-sm: 12px;
--cb-radius-md: 20px;
--cb-radius-lg: 32px;
--cb-radius-pill: 9999px;
}
Chromatic Blur typography is:
| Font | Style | Best For |
|---|---|---|
| DM Sans | Geometric, low contrast, clean | Headlines, hero text – soft geometry matches blur fields |
| Nunito | Rounded terminals, friendly | Body text, UI elements – warmth without whimsy |
| Outfit | Geometric, contemporary, variable | Headlines, display text, metrics |
| Source Sans 3 | Humanist, highly readable | Body text, long-form content |
| Figtree | Geometric, open, friendly | Body text, approachable interfaces |
| Josefin Sans | Elegant, thin, geometric | Display headlines, hero statements |
| Karla | Grotesque, slightly quirky | Body text, captions, secondary content |
| Manrope | Semi-condensed, modern | Navigation, labels, UI components |
| Heading Font | Body Font | Character |
|---|---|---|
| DM Sans (600) | Nunito (400) | Clean and soft, warm and rounded |
| Outfit (600) | Source Sans 3 (400) | Contemporary display, excellent readability |
| Josefin Sans (300) | Figtree (400) | Elegant thin headlines, friendly body |
| DM Sans (700) | Karla (400) | Bold geometric headers, relaxed body text |
| Manrope (600) | Nunito (400) | Compact navigation, warm content |
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=Nunito:wght@400;500;600&display=swap');
h1, h2, h3, h4, h5, h6 {
font-family: 'DM Sans', sans-serif;
font-weight: 600;
color: var(--cb-text-primary);
line-height: 1.2;
letter-spacing: -0.01em;
}
.cb-display {
font-family: 'DM Sans', sans-serif;
font-size: clamp(2.5rem, 5vw, 4.5rem);
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.1;
color: var(--cb-text-primary);
}
body {
font-family: 'Nunito', sans-serif;
font-weight: 400;
font-size: 1rem;
line-height: 1.75;
color: var(--cb-text-body);
}
.cb-label {
font-family: 'DM Sans', sans-serif;
font-weight: 500;
font-size: 0.8rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--cb-text-muted);
}
.cb-caption {
font-family: 'Nunito', sans-serif;
font-weight: 400;
font-size: 0.85rem;
color: var(--cb-text-secondary);
}
.cb-background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
pointer-events: none;
background: var(--cb-bg-primary);
overflow: hidden;
}
.cb-background::before,
.cb-background::after {
content: '';
position: absolute;
border-radius: 50%;
filter: blur(var(--cb-blur-xl));
animation: cbDrift 25s ease-in-out infinite alternate;
}
.cb-background::before {
width: 60vw;
height: 60vw;
top: -10%;
left: -10%;
background: radial-gradient(circle, rgba(200,184,232,0.5) 0%, rgba(232,196,200,0.3) 50%, transparent 70%);
}
.cb-background::after {
width: 50vw;
height: 50vw;
bottom: -15%;
right: -10%;
background: radial-gradient(circle, rgba(181,204,224,0.45) 0%, rgba(240,205,181,0.3) 50%, transparent 70%);
animation-delay: -12s;
animation-direction: alternate-reverse;
}
@keyframes cbDrift {
0% { transform: translate(0, 0) scale(1); }
33% { transform: translate(3%, -2%) scale(1.05); }
66% { transform: translate(-2%, 3%) scale(0.97); }
100% { transform: translate(1%, -1%) scale(1.02); }
}
/* Additional blur blobs as child elements */
.cb-blob {
position: absolute;
border-radius: 50%;
filter: blur(var(--cb-blur-lg));
pointer-events: none;
animation: cbDrift 30s ease-in-out infinite alternate;
}
.cb-blob--lavender {
width: 40vw;
height: 40vw;
background: rgba(200, 184, 232, 0.35);
}
.cb-blob--blush {
width: 35vw;
height: 35vw;
background: rgba(232, 196, 200, 0.3);
}
.cb-blob--sky {
width: 45vw;
height: 45vw;
background: rgba(181, 204, 224, 0.3);
}
/* Grain overlay for tactile warmth */
.cb-grain {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
pointer-events: none;
opacity: 0.04;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
background-repeat: repeat;
background-size: 256px 256px;
}
.cb-card {
background: var(--cb-bg-glass);
backdrop-filter: blur(var(--cb-glass-blur));
-webkit-backdrop-filter: blur(var(--cb-glass-blur));
border: 1px solid var(--cb-bg-glass-border);
border-radius: var(--cb-radius-md);
padding: 32px;
transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;
box-shadow: 0 8px 32px rgba(74, 69, 80, 0.06);
}
.cb-card:hover {
transform: translateY(-4px);
background: rgba(255, 255, 255, 0.65);
box-shadow: 0 16px 48px rgba(74, 69, 80, 0.1);
}
.cb-card h3 {
font-size: 1.15rem;
margin-bottom: 0.75rem;
color: var(--cb-text-primary);
}
.cb-card p {
font-size: 0.95rem;
line-height: 1.65;
color: var(--cb-text-body);
}
/* Card with colored blur accent */
.cb-card--accent {
position: relative;
overflow: hidden;
}
.cb-card--accent::before {
content: '';
position: absolute;
width: 120px;
height: 120px;
top: -30px;
right: -30px;
border-radius: 50%;
background: rgba(200, 184, 232, 0.3);
filter: blur(30px);
pointer-events: none;
}
.cb-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
background: var(--cb-coral);
color: #ffffff;
border: none;
border-radius: var(--cb-radius-pill);
padding: 14px 36px;
font-family: 'DM Sans', sans-serif;
font-weight: 600;
font-size: 0.95rem;
cursor: pointer;
text-decoration: none;
transition: transform 0.2s ease, box-shadow 0.3s ease, filter 0.3s ease;
box-shadow: 0 4px 20px rgba(224, 122, 107, 0.25);
}
.cb-button:hover {
transform: translateY(-2px);
box-shadow: 0 8px 30px rgba(224, 122, 107, 0.35);
filter: blur(0px) brightness(1.05);
}
.cb-button:active {
transform: translateY(0px);
box-shadow: 0 2px 12px rgba(224, 122, 107, 0.2);
}
/* Ghost / glass variant */
.cb-button--ghost {
background: var(--cb-bg-glass);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(200, 184, 232, 0.4);
color: var(--cb-text-primary);
box-shadow: none;
}
.cb-button--ghost:hover {
background: rgba(255, 255, 255, 0.7);
border-color: rgba(200, 184, 232, 0.6);
box-shadow: 0 8px 24px rgba(74, 69, 80, 0.08);
}
/* Soft secondary */
.cb-button--soft {
background: rgba(200, 184, 232, 0.2);
color: var(--cb-text-primary);
box-shadow: none;
}
.cb-button--soft:hover {
background: rgba(200, 184, 232, 0.35);
}
.cb-nav {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1100px;
margin: 0 auto;
padding: 20px 40px;
position: relative;
z-index: 10;
}
.cb-nav--sticky {
position: sticky;
top: 0;
background: rgba(247, 245, 242, 0.7);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid rgba(200, 184, 232, 0.15);
z-index: 100;
max-width: 100%;
padding: 16px 40px;
}
.cb-nav__logo {
font-family: 'DM Sans', sans-serif;
font-weight: 700;
font-size: 1.3rem;
color: var(--cb-text-primary);
text-decoration: none;
letter-spacing: -0.02em;
}
.cb-nav__links {
display: flex;
gap: 32px;
list-style: none;
margin: 0;
padding: 0;
}
.cb-nav__links a {
font-family: 'Nunito', sans-serif;
font-weight: 500;
font-size: 0.9rem;
color: var(--cb-text-secondary);
text-decoration: none;
transition: color 0.2s ease;
position: relative;
}
.cb-nav__links a:hover {
color: var(--cb-text-primary);
}
.cb-nav__links a::after {
content: '';
position: absolute;
bottom: -4px;
left: 50%;
width: 0;
height: 2px;
background: var(--cb-coral);
border-radius: 1px;
transition: width 0.2s ease, left 0.2s ease;
}
.cb-nav__links a:hover::after {
width: 100%;
left: 0;
}
.cb-hero {
min-height: 85vh;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding: 100px 40px;
position: relative;
z-index: 2;
}
.cb-hero__inner {
max-width: 720px;
margin: 0 auto;
}
.cb-hero h1 {
font-size: clamp(2.5rem, 6vw, 4.5rem);
font-weight: 700;
margin-bottom: 1.5rem;
letter-spacing: -0.03em;
color: var(--cb-text-primary);
line-height: 1.08;
}
.cb-hero p {
font-size: 1.2rem;
color: var(--cb-text-body);
margin-bottom: 2.5rem;
max-width: 560px;
margin-left: auto;
margin-right: auto;
line-height: 1.8;
}
/* Chromatic text effect -- color-separated shadow */
.cb-hero__chromatic {
position: relative;
display: inline-block;
}
.cb-hero__chromatic::before,
.cb-hero__chromatic::after {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
}
.cb-hero__chromatic::before {
color: rgba(200, 184, 232, 0.5);
transform: translate(-3px, -2px);
filter: blur(2px);
}
.cb-hero__chromatic::after {
color: rgba(232, 196, 200, 0.5);
transform: translate(3px, 2px);
filter: blur(2px);
}
.cb-bokeh {
position: absolute;
border-radius: 50%;
pointer-events: none;
opacity: 0.4;
animation: cbFloat 20s ease-in-out infinite;
}
.cb-bokeh--sm {
width: 60px;
height: 60px;
filter: blur(15px);
}
.cb-bokeh--md {
width: 120px;
height: 120px;
filter: blur(30px);
}
.cb-bokeh--lg {
width: 200px;
height: 200px;
filter: blur(50px);
}
.cb-bokeh--lavender { background: var(--cb-lavender); }
.cb-bokeh--blush { background: var(--cb-blush); }
.cb-bokeh--sky { background: var(--cb-sky); }
.cb-bokeh--peach { background: var(--cb-peach); }
@keyframes cbFloat {
0%, 100% { transform: translate(0, 0) scale(1); }
25% { transform: translate(10px, -15px) scale(1.05); }
50% { transform: translate(-5px, 10px) scale(0.95); }
75% { transform: translate(8px, 5px) scale(1.02); }
}
.cb-section {
padding: 100px 40px;
max-width: 1100px;
margin: 0 auto;
position: relative;
z-index: 2;
}
.cb-section__header {
text-align: center;
margin-bottom: 60px;
}
.cb-section__header h2 {
font-size: clamp(1.75rem, 3.5vw, 2.5rem);
margin-bottom: 1rem;
color: var(--cb-text-primary);
}
.cb-section__header p {
font-size: 1.05rem;
color: var(--cb-text-secondary);
max-width: 520px;
margin: 0 auto;
}
.cb-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 28px;
}
/* Frosted divider between sections */
.cb-divider {
width: 80px;
height: 3px;
background: linear-gradient(90deg, var(--cb-lavender), var(--cb-blush), var(--cb-sky));
border: none;
border-radius: 2px;
margin: 0 auto;
opacity: 0.5;
filter: blur(1px);
}
.cb-cta {
text-align: center;
padding: 100px 40px;
position: relative;
z-index: 2;
}
.cb-cta__inner {
background: var(--cb-bg-glass);
backdrop-filter: blur(24px);
-webkit-backdrop-filter: blur(24px);
border: 1px solid var(--cb-bg-glass-border);
border-radius: var(--cb-radius-lg);
padding: 72px 48px;
max-width: 780px;
margin: 0 auto;
position: relative;
overflow: hidden;
}
/* Ambient color blob inside the CTA */
.cb-cta__inner::before {
content: '';
position: absolute;
width: 250px;
height: 250px;
top: -60px;
right: -60px;
background: rgba(232, 196, 200, 0.3);
border-radius: 50%;
filter: blur(60px);
pointer-events: none;
}
.cb-cta__inner::after {
content: '';
position: absolute;
width: 200px;
height: 200px;
bottom: -50px;
left: -50px;
background: rgba(181, 204, 224, 0.25);
border-radius: 50%;
filter: blur(50px);
pointer-events: none;
}
.cb-cta h2 {
font-size: 2rem;
margin-bottom: 1rem;
position: relative;
z-index: 1;
}
.cb-cta p {
margin-bottom: 2rem;
position: relative;
z-index: 1;
}
filter: blur() or backdrop-filter taxes GPU performance| Aesthetic | Relationship to Chromatic Blur |
|---|---|
| Aurora Gradient | Shares flowing gradient language but uses vivid, saturated aurora-spectrum colors on dark backgrounds; Chromatic Blur is lighter and softer |
| Glassmorphism | Core technique overlap; both use frosted glass and backdrop-filter blur, but Chromatic Blur builds entire environments from blur, not just UI panels |
| Frosted Touch | Close sibling; both use translucent glass surfaces, but Chromatic Blur foregrounds the color fields themselves as the primary visual element |
| Danish Pastel | Shares the muted, soft pastel palette but with flat, solid color blocks rather than defocused gradients |
| Dreamcore | Both pursue dreamy, surreal atmospheres, but Dreamcore leans nostalgic and liminal while Chromatic Blur stays polished and contemporary |
| Flat Design | Opposite approach; Flat Design eliminates all blur, gradient, and depth in favor of crisp, solid surfaces |
| Acid Design | Both use blur and color overlap, but Acid Design pushes toward chaotic, neon intensity while Chromatic Blur maintains soft restraint |
| Dopamine Design | Shares color richness but through bold, saturated, sharp-edged maximalism rather than diffused, muted fields |
| Bright Tertiaries | Adjacent palette territory with tertiary color mixing, but rendered as solid fills rather than defocused fields |
| Minimalism | Chromatic Blur borrows minimalist layout restraint but adds atmospheric color depth that pure minimalism avoids |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chromatic Blur Page</title>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=Nunito:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root {
--cb-bg-primary: #f7f5f2;
--cb-bg-secondary: #ede8e3;
--cb-bg-glass: rgba(255, 255, 255, 0.55);
--cb-bg-glass-border: rgba(255, 255, 255, 0.7);
--cb-lavender: #c8b8e8;
--cb-blush: #e8c4c8;
--cb-peach: #f0cdb5;
--cb-sky: #b5cce0;
--cb-sage: #b8ccba;
--cb-coral: #e07a6b;
--cb-rose: #d4728a;
--cb-amber: #d4a24e;
--cb-text-primary: #4a4550;
--cb-text-secondary: #8a7f96;
--cb-text-muted: #a899b8;
--cb-text-body: #7b6fa0;
--cb-blur-sm: 20px;
--cb-blur-md: 40px;
--cb-blur-lg: 80px;
--cb-blur-xl: 120px;
--cb-glass-blur: 16px;
--cb-radius-sm: 12px;
--cb-radius-md: 20px;
--cb-radius-lg: 32px;
--cb-radius-pill: 9999px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: var(--cb-bg-primary);
color: var(--cb-text-body);
font-family: 'Nunito', sans-serif;
font-weight: 400;
line-height: 1.75;
overflow-x: hidden;
min-height: 100vh;
}
h1, h2, h3, h4 {
font-family: 'DM Sans', sans-serif;
font-weight: 600;
color: var(--cb-text-primary);
line-height: 1.2;
letter-spacing: -0.01em;
}
/* ===== Ambient Background ===== */
.cb-background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
pointer-events: none;
overflow: hidden;
}
.cb-background .blob {
position: absolute;
border-radius: 50%;
}
.blob--1 {
width: 55vw;
height: 55vw;
top: -15%;
left: -10%;
background: radial-gradient(circle, rgba(200,184,232,0.45) 0%, transparent 70%);
filter: blur(100px);
animation: drift1 28s ease-in-out infinite alternate;
}
.blob--2 {
width: 45vw;
height: 45vw;
top: 10%;
right: -15%;
background: radial-gradient(circle, rgba(232,196,200,0.4) 0%, transparent 70%);
filter: blur(90px);
animation: drift2 24s ease-in-out infinite alternate;
}
.blob--3 {
width: 50vw;
height: 50vw;
bottom: -20%;
left: 20%;
background: radial-gradient(circle, rgba(181,204,224,0.4) 0%, transparent 70%);
filter: blur(110px);
animation: drift3 32s ease-in-out infinite alternate;
}
.blob--4 {
width: 30vw;
height: 30vw;
top: 45%;
left: 55%;
background: radial-gradient(circle, rgba(240,205,181,0.3) 0%, transparent 70%);
filter: blur(80px);
animation: drift1 20s ease-in-out infinite alternate-reverse;
}
.blob--5 {
width: 25vw;
height: 25vw;
bottom: 10%;
right: 10%;
background: radial-gradient(circle, rgba(184,204,186,0.25) 0%, transparent 70%);
filter: blur(70px);
animation: drift2 26s ease-in-out infinite alternate-reverse;
}
@keyframes drift1 {
0% { transform: translate(0, 0) scale(1); }
50% { transform: translate(4%, -3%) scale(1.06); }
100% { transform: translate(-2%, 2%) scale(0.97); }
}
@keyframes drift2 {
0% { transform: translate(0, 0) scale(1); }
50% { transform: translate(-3%, 4%) scale(0.95); }
100% { transform: translate(2%, -1%) scale(1.04); }
}
@keyframes drift3 {
0% { transform: translate(0, 0) scale(1); }
50% { transform: translate(2%, 3%) scale(1.03); }
100% { transform: translate(-3%, -2%) scale(0.98); }
}
/* Grain overlay */
.cb-grain {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
pointer-events: none;
opacity: 0.035;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
background-repeat: repeat;
background-size: 256px 256px;
}
/* ===== Content Layer ===== */
.content {
position: relative;
z-index: 2;
}
/* ===== Navigation ===== */
nav {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1100px;
margin: 0 auto;
padding: 24px 40px;
}
nav .logo {
font-family: 'DM Sans', sans-serif;
font-weight: 700;
font-size: 1.35rem;
color: var(--cb-text-primary);
text-decoration: none;
letter-spacing: -0.02em;
}
nav ul {
display: flex;
gap: 32px;
list-style: none;
}
nav ul a {
font-family: 'Nunito', sans-serif;
font-weight: 500;
font-size: 0.9rem;
color: var(--cb-text-secondary);
text-decoration: none;
transition: color 0.2s ease;
}
nav ul a:hover {
color: var(--cb-text-primary);
}
/* ===== Hero ===== */
.hero {
min-height: 85vh;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding: 80px 40px;
position: relative;
}
.hero__inner {
max-width: 680px;
}
.hero .overline {
font-family: 'DM Sans', sans-serif;
font-size: 0.8rem;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--cb-text-muted);
margin-bottom: 1.25rem;
display: block;
}
.hero h1 {
font-size: clamp(2.5rem, 6vw, 4.2rem);
font-weight: 700;
letter-spacing: -0.03em;
line-height: 1.08;
margin-bottom: 1.5rem;
color: var(--cb-text-primary);
}
/* Chromatic text shift effect */
.chromatic-text {
position: relative;
display: inline;
}
.chromatic-text::before {
content: attr(data-text);
position: absolute;
top: 0;
left: -3px;
color: rgba(200, 184, 232, 0.4);
filter: blur(2px);
pointer-events: none;
z-index: -1;
}
.chromatic-text::after {
content: attr(data-text);
position: absolute;
top: 0;
left: 3px;
color: rgba(232, 196, 200, 0.4);
filter: blur(2px);
pointer-events: none;
z-index: -1;
}
.hero p {
font-size: 1.15rem;
margin-bottom: 2.5rem;
color: var(--cb-text-body);
max-width: 520px;
margin-left: auto;
margin-right: auto;
line-height: 1.8;
}
.hero__actions {
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
}
/* ===== Buttons ===== */
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
border: none;
border-radius: var(--cb-radius-pill);
padding: 14px 36px;
font-family: 'DM Sans', sans-serif;
font-weight: 600;
font-size: 0.95rem;
cursor: pointer;
text-decoration: none;
transition: transform 0.2s ease, box-shadow 0.3s ease;
}
.btn--primary {
background: var(--cb-coral);
color: #ffffff;
box-shadow: 0 4px 20px rgba(224, 122, 107, 0.25);
}
.btn--primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 30px rgba(224, 122, 107, 0.35);
}
.btn--ghost {
background: var(--cb-bg-glass);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(200, 184, 232, 0.35);
color: var(--cb-text-primary);
}
.btn--ghost:hover {
background: rgba(255, 255, 255, 0.7);
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(74, 69, 80, 0.08);
}
/* ===== Features Section ===== */
.features {
padding: 100px 40px;
max-width: 1100px;
margin: 0 auto;
}
.features__header {
text-align: center;
margin-bottom: 60px;
}
.features__header h2 {
font-size: clamp(1.75rem, 3.5vw, 2.5rem);
margin-bottom: 0.75rem;
}
.features__header p {
font-size: 1.05rem;
color: var(--cb-text-secondary);
max-width: 480px;
margin: 0 auto;
}
.features__grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 28px;
}
.feature-card {
background: var(--cb-bg-glass);
backdrop-filter: blur(var(--cb-glass-blur));
-webkit-backdrop-filter: blur(var(--cb-glass-blur));
border: 1px solid var(--cb-bg-glass-border);
border-radius: var(--cb-radius-md);
padding: 36px;
transition: transform 0.3s ease, box-shadow 0.3s ease;
position: relative;
overflow: hidden;
}
.feature-card:hover {
transform: translateY(-4px);
box-shadow: 0 16px 48px rgba(74, 69, 80, 0.1);
}
/* Ambient color accent per card */
.feature-card::after {
content: '';
position: absolute;
width: 100px;
height: 100px;
border-radius: 50%;
top: -25px;
right: -25px;
filter: blur(35px);
pointer-events: none;
opacity: 0.4;
}
.feature-card:nth-child(1)::after { background: var(--cb-lavender); }
.feature-card:nth-child(2)::after { background: var(--cb-blush); }
.feature-card:nth-child(3)::after { background: var(--cb-sky); }
.feature-card__icon {
width: 48px;
height: 48px;
border-radius: var(--cb-radius-sm);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
}
.feature-card h3 {
font-size: 1.15rem;
margin-bottom: 0.75rem;
}
.feature-card p {
font-size: 0.95rem;
line-height: 1.65;
}
/* ===== Showcase / Metrics ===== */
.showcase {
padding: 80px 40px;
max-width: 1100px;
margin: 0 auto;
}
.showcase__grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 28px;
text-align: center;
}
.metric-card {
background: var(--cb-bg-glass);
backdrop-filter: blur(var(--cb-glass-blur));
-webkit-backdrop-filter: blur(var(--cb-glass-blur));
border: 1px solid var(--cb-bg-glass-border);
border-radius: var(--cb-radius-md);
padding: 40px 24px;
}
.metric-card__number {
font-family: 'DM Sans', sans-serif;
font-size: 2.5rem;
font-weight: 700;
color: var(--cb-coral);
letter-spacing: -0.02em;
line-height: 1;
margin-bottom: 0.5rem;
}
.metric-card__label {
font-size: 0.9rem;
color: var(--cb-text-secondary);
}
/* ===== CTA Section ===== */
.cta {
text-align: center;
padding: 100px 40px;
}
.cta__inner {
background: var(--cb-bg-glass);
backdrop-filter: blur(24px);
-webkit-backdrop-filter: blur(24px);
border: 1px solid var(--cb-bg-glass-border);
border-radius: var(--cb-radius-lg);
padding: 72px 48px;
max-width: 780px;
margin: 0 auto;
position: relative;
overflow: hidden;
}
.cta__inner::before {
content: '';
position: absolute;
width: 220px;
height: 220px;
top: -50px;
right: -50px;
background: rgba(232, 196, 200, 0.3);
border-radius: 50%;
filter: blur(55px);
pointer-events: none;
}
.cta__inner::after {
content: '';
position: absolute;
width: 180px;
height: 180px;
bottom: -40px;
left: -40px;
background: rgba(200, 184, 232, 0.25);
border-radius: 50%;
filter: blur(50px);
pointer-events: none;
}
.cta h2 {
font-size: 2rem;
margin-bottom: 1rem;
position: relative;
z-index: 1;
}
.cta p {
margin-bottom: 2rem;
position: relative;
z-index: 1;
color: var(--cb-text-secondary);
}
.cta .btn {
position: relative;
z-index: 1;
}
/* ===== Footer ===== */
footer {
text-align: center;
padding: 48px 40px;
font-size: 0.85rem;
color: var(--cb-text-muted);
}
footer a {
color: var(--cb-text-secondary);
text-decoration: none;
}
footer a:hover {
color: var(--cb-text-primary);
}
/* ===== Responsive ===== */
@media (max-width: 768px) {
nav {
padding: 16px 20px;
}
nav ul {
gap: 16px;
}
.hero {
min-height: 70vh;
padding: 60px 20px;
}
.hero h1 {
font-size: clamp(2rem, 8vw, 2.8rem);
}
.features,
.showcase,
.cta {
padding: 60px 20px;
}
.showcase__grid {
grid-template-columns: 1fr;
gap: 20px;
}
.cta__inner {
padding: 48px 28px;
}
.blob--1,
.blob--2,
.blob--3 {
filter: blur(60px);
}
.blob--4,
.blob--5 {
display: none;
}
}
@media (prefers-reduced-motion: reduce) {
.blob--1,
.blob--2,
.blob--3,
.blob--4,
.blob--5 {
animation: none;
}
}
</style>
</head>
<body>
<!-- Ambient blur background -->
<div class="cb-background">
<div class="blob blob--1"></div>
<div class="blob blob--2"></div>
<div class="blob blob--3"></div>
<div class="blob blob--4"></div>
<div class="blob blob--5"></div>
</div>
<!-- Grain texture overlay -->
<div class="cb-grain"></div>
<!-- Page content -->
<div class="content">
<nav>
<a href="#" class="logo">Chroma</a>
<ul>
<li><a href="#">Studio</a></li>
<li><a href="#">Gallery</a></li>
<li><a href="#">Process</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
<section class="hero">
<div class="hero__inner">
<span class="overline">A new way to see</span>
<h1>
Design through the
<span class="chromatic-text" data-text="soft lens">soft lens</span>
of color
</h1>
<p>
Embrace the beauty of defocus. Let color fields drift
and merge, creating interfaces that feel alive, warm,
and gently immersive.
</p>
<div class="hero__actions">
<a href="#" class="btn btn--primary">Explore Gallery</a>
<a href="#" class="btn btn--ghost">Learn More</a>
</div>
</div>
</section>
<section class="features">
<div class="features__header">
<h2>Dreamy by design</h2>
<p>Every element is crafted to feel soft, ambient, and beautifully out of focus.</p>
</div>
<div class="features__grid">
<div class="feature-card">
<div class="feature-card__icon" style="background: rgba(200,184,232,0.2);">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#7b6fa0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="10"/>
<circle cx="12" cy="12" r="4"/>
</svg>
</div>
<h3>Ambient Color Fields</h3>
<p>Large, blurred color gradients create living backgrounds that shift and breathe with gentle motion.</p>
</div>
<div class="feature-card">
<div class="feature-card__icon" style="background: rgba(232,196,200,0.2);">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#d4728a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7S2 12 2 12z"/>
<circle cx="12" cy="12" r="3"/>
</svg>
</div>
<h3>Frosted Layers</h3>
<p>Translucent glass surfaces separate content from the ambient background while maintaining the dreamy atmosphere.</p>
</div>
<div class="feature-card">
<div class="feature-card__icon" style="background: rgba(181,204,224,0.2);">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5a8bb0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 3v18M3 12h18"/>
<circle cx="12" cy="12" r="9"/>
</svg>
</div>
<h3>Soft Precision</h3>
<p>Intentional imprecision meets careful craft. Every blur, every fade, every transition is deliberately designed.</p>
</div>
</div>
</section>
<section class="showcase">
<div class="showcase__grid">
<div class="metric-card">
<div class="metric-card__number">120px</div>
<div class="metric-card__label">Maximum blur radius</div>
</div>
<div class="metric-card">
<div class="metric-card__number">0.55</div>
<div class="metric-card__label">Glass opacity</div>
</div>
<div class="metric-card">
<div class="metric-card__number">28s</div>
<div class="metric-card__label">Animation cycle</div>
</div>
</div>
</section>
<section class="cta">
<div class="cta__inner">
<h2>Ready to blur the lines?</h2>
<p>Start creating interfaces that feel as warm and immersive as light through a soft lens.</p>
<a href="#" class="btn btn--primary">Get Started</a>
</div>
</section>
<footer>
<p>Built with the Chromatic Blur aesthetic. Soft, warm, deliberately out of focus.</p>
</footer>
</div>
</body>
</html>
will-change: transform on animated blur blobs – large blurred elements with CSS animation can cause significant repaint overhead; hinting the browser with will-change enables GPU compositing and dramatically improves scroll performancergba(255,255,255,0.55) minimum and verify with a contrast checker against the darkest possible background statefilter: blur() and backdrop-filter: blur() is GPU-intensive; on mobile devices, reduce the number of background blobs from 5 to 2-3 and lower blur radii by 30-40% to maintain smooth 60fps scrolling@media (prefers-reduced-motion: no-preference) – the drifting blob animations are core to the aesthetic but must respect user accessibility settings; provide a beautiful static fallback with the blobs in their default positionsclamp() for all headline sizing – Chromatic Blur’s spacious layout means headlines need to scale gracefully from mobile to desktop; clamp(2rem, 6vw, 4.5rem) ensures the dreamy proportions work at every breakpoint