Frosted Touch is the 2026 evolution of glassmorphism – more refined, more subtle, with better performance and deeper layering. Where early glassmorphism relied on a single frosted panel over a colorful background, Frosted Touch builds entire interfaces from translucent layers at multiple depths, each revealing hints of color beneath. Frosted glass panels float over vibrant gradient backgrounds, connected by diffused shadows that create elegant depth without heaviness. Semi-transparent whites and soft blurs replace hard edges and solid fills. The result is an interface that feels like looking through layers of architectural glass: luminous, airy, and quietly sophisticated. Every surface breathes, every boundary is soft, and the vibrant world beneath the frost is always felt but never fully revealed.
backdrop-filter: blur() creating translucent surfaces that obscure but do not hide the layers beneathrgba(255,255,255,0.15-0.25)) that catch light and define panel edges without hard contrastsaturate(1.2-1.8) applied with backdrop-filter to make colors beneath the frost richer, not dullerThe Frosted Touch palette centers on semi-transparent whites layered over vibrant gradients. The frost itself is nearly colorless; all chromatic energy comes from the backgrounds and accents beneath:
rgba(255,255,255,0.08) for deep background layers to rgba(255,255,255,0.25) for foreground panelsrgba(255,255,255,0.15-0.25)) to catch and define edges| Role | Color | Hex / Value |
|---|---|---|
| Background Gradient A | Deep Navy Blue | #1a1a4e |
| Background Gradient B | Deep Purple | #4a1a6b |
| Background Gradient C | Deep Magenta | #6b1a4a |
| Frost Surface Deep | Translucent White | rgba(255, 255, 255, 0.08) |
| Frost Surface Mid | Translucent White | rgba(255, 255, 255, 0.12) |
| Frost Surface Light | Translucent White | rgba(255, 255, 255, 0.18) |
| Frost Surface Raised | Translucent White | rgba(255, 255, 255, 0.25) |
| Frost Border | White Edge | rgba(255, 255, 255, 0.18) |
| Frost Border Bright | White Edge Highlight | rgba(255, 255, 255, 0.30) |
| Accent Blue | Clear Sky Blue | #60A5FA |
| Accent Purple | Soft Violet | #A78BFA |
| Accent Cyan | Frost Cyan | #67E8F9 |
| Text Primary | Warm White | #F8FAFC |
| Text Secondary | Muted Lavender | rgba(248, 250, 252, 0.70) |
| Text Muted | Faded White | rgba(248, 250, 252, 0.45) |
| Shadow | Deep Indigo | rgba(15, 10, 40, 0.25) |
| Shadow Diffused | Blue-Black | rgba(10, 10, 50, 0.15) |
| Glow Accent | Blue Glow | rgba(96, 165, 250, 0.20) |
:root {
/* Background gradient stops */
--frost-bg-a: #1a1a4e;
--frost-bg-b: #4a1a6b;
--frost-bg-c: #6b1a4a;
/* Frost surface layers (ordered by depth, back to front) */
--frost-surface-deep: rgba(255, 255, 255, 0.08);
--frost-surface-mid: rgba(255, 255, 255, 0.12);
--frost-surface-light: rgba(255, 255, 255, 0.18);
--frost-surface-raised: rgba(255, 255, 255, 0.25);
/* Borders */
--frost-border: rgba(255, 255, 255, 0.18);
--frost-border-bright: rgba(255, 255, 255, 0.30);
--frost-border-subtle: rgba(255, 255, 255, 0.10);
/* Text */
--frost-text-primary: #F8FAFC;
--frost-text-secondary: rgba(248, 250, 252, 0.70);
--frost-text-muted: rgba(248, 250, 252, 0.45);
--frost-text-heading: #FFFFFF;
/* Accents */
--frost-accent-blue: #60A5FA;
--frost-accent-purple: #A78BFA;
--frost-accent-cyan: #67E8F9;
--frost-accent-pink: #F472B6;
/* Shadows */
--frost-shadow: rgba(15, 10, 40, 0.25);
--frost-shadow-diffused: rgba(10, 10, 50, 0.15);
--frost-shadow-glow: rgba(96, 165, 250, 0.12);
/* Functional mappings */
--frost-bg-primary: var(--frost-bg-a);
--frost-bg-card: var(--frost-surface-light);
--frost-bg-card-hover: var(--frost-surface-raised);
--frost-text-body: var(--frost-text-primary);
--frost-accent-primary: var(--frost-accent-blue);
--frost-accent-secondary: var(--frost-accent-purple);
/* Blur values */
--frost-blur-sm: blur(8px);
--frost-blur-md: blur(16px);
--frost-blur-lg: blur(24px);
--frost-blur-xl: blur(40px);
/* Border radius */
--frost-radius-sm: 8px;
--frost-radius-md: 16px;
--frost-radius-lg: 24px;
--frost-radius-pill: 9999px;
}
Frosted Touch typography prioritizes clean legibility against translucent, shifting backgrounds:
| Font | Style | Usage |
|---|---|---|
| Inter | Geometric sans-serif | Primary body and UI text – excellent legibility, wide range of weights, variable font support |
| Plus Jakarta Sans | Modern geometric sans | Headings and display text – slightly warmer and more characterful than Inter |
| DM Sans | Clean geometric sans | Alternative body text – compact and clear with geometric proportions |
| Outfit | Geometric sans-serif | Headings – geometric with slight softness, good for larger sizes |
| Manrope | Semi-rounded sans | Friendly alternative for body text – open apertures aid readability on glass |
| Space Grotesk | Monospace-inspired sans | UI labels, data displays, technical text |
| JetBrains Mono | Monospace | Code snippets, status indicators, numerical data |
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Plus+Jakarta+Sans:wght@500;600;700;800&family=Space+Grotesk:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');
/* Primary body text -- clean, readable against frost */
body {
font-family: 'Inter', 'DM Sans', system-ui, -apple-system, sans-serif;
font-size: 16px;
line-height: 1.7;
letter-spacing: 0.01em;
color: var(--frost-text-primary);
font-weight: 400;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Headings -- slightly heavier, geometric, white */
h1, h2, h3 {
font-family: 'Plus Jakarta Sans', 'Inter', sans-serif;
color: var(--frost-text-heading);
font-weight: 700;
letter-spacing: -0.01em;
line-height: 1.3;
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
}
h1 {
font-size: clamp(2rem, 5vw, 3.5rem);
font-weight: 800;
letter-spacing: -0.02em;
}
h2 {
font-size: clamp(1.4rem, 3vw, 2rem);
font-weight: 700;
color: var(--frost-text-primary);
}
h3 {
font-size: clamp(1.1rem, 2vw, 1.4rem);
font-weight: 600;
color: var(--frost-text-secondary);
}
/* Paragraph text on glass surfaces */
.frost-body-text {
font-family: 'Inter', sans-serif;
font-size: 1rem;
font-weight: 400;
line-height: 1.7;
color: var(--frost-text-secondary);
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}
/* Small UI labels */
.frost-label {
font-family: 'Space Grotesk', 'Inter', sans-serif;
font-size: 0.75rem;
font-weight: 500;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--frost-text-muted);
}
/* Accent text for links and interactive elements */
.frost-link {
color: var(--frost-accent-blue);
text-decoration: none;
font-weight: 500;
transition: color 0.2s ease;
}
.frost-link:hover {
color: var(--frost-accent-cyan);
}
/* Monospace for data and code */
.frost-mono {
font-family: 'JetBrains Mono', 'Space Grotesk', monospace;
font-size: 0.9rem;
font-weight: 400;
color: var(--frost-accent-cyan);
letter-spacing: 0.02em;
}
The defining element of the aesthetic – a translucent surface that partially reveals what lies behind:
backdrop-filter: blur(16-24px) softening everything behind the panelbackdrop-filter: saturate(1.2-1.8) keeping colors vibrant through the frostrgba(255,255,255,0.15-0.25) catching virtual lightMultiple translucent layers create a convincing 3D space:
The energy source beneath all frost layers:
Shadows in Frosted Touch are atmospheric, not structural:
box-shadow: 0 8px 32px rgba(10, 10, 50, 0.12) typical for cardsInteractions feel like moving a panel closer to the viewer:
rgba(255,255,255,0.08-0.12) – barely visible, more felt than seen/* The fundamental frosted glass panel */
.frost-panel {
background: var(--frost-surface-light);
backdrop-filter: blur(16px) saturate(1.4);
-webkit-backdrop-filter: blur(16px) saturate(1.4);
border: 1px solid var(--frost-border);
border-radius: var(--frost-radius-lg);
box-shadow:
0 8px 32px var(--frost-shadow-diffused),
0 2px 8px rgba(0, 0, 0, 0.08);
padding: 2rem;
}
/* Inner light gradient simulating light on glass */
.frost-panel::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.08) 0%,
rgba(255, 255, 255, 0.02) 50%,
transparent 100%
);
pointer-events: none;
}
/* Layer 1 -- deepest frost, ambient background panels */
.frost-layer-deep {
background: var(--frost-surface-deep);
backdrop-filter: blur(40px) saturate(1.2);
-webkit-backdrop-filter: blur(40px) saturate(1.2);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: var(--frost-radius-lg);
box-shadow: 0 16px 64px rgba(10, 10, 50, 0.10);
}
/* Layer 2 -- mid-depth content containers */
.frost-layer-mid {
background: var(--frost-surface-mid);
backdrop-filter: blur(20px) saturate(1.4);
-webkit-backdrop-filter: blur(20px) saturate(1.4);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: var(--frost-radius-lg);
box-shadow: 0 8px 32px rgba(10, 10, 50, 0.12);
}
/* Layer 3 -- surface-level interactive cards */
.frost-layer-surface {
background: var(--frost-surface-light);
backdrop-filter: blur(16px) saturate(1.6);
-webkit-backdrop-filter: blur(16px) saturate(1.6);
border: 1px solid var(--frost-border);
border-radius: var(--frost-radius-md);
box-shadow:
0 4px 16px rgba(10, 10, 50, 0.15),
0 1px 4px rgba(0, 0, 0, 0.08);
}
/* Layer 4 -- raised elements (tooltips, dropdowns, modals) */
.frost-layer-raised {
background: var(--frost-surface-raised);
backdrop-filter: blur(8px) saturate(1.8);
-webkit-backdrop-filter: blur(8px) saturate(1.8);
border: 1px solid var(--frost-border-bright);
border-radius: var(--frost-radius-md);
box-shadow:
0 12px 40px rgba(10, 10, 50, 0.20),
0 4px 12px rgba(0, 0, 0, 0.10);
}
/* Vibrant gradient mesh background */
.frost-background {
position: fixed;
inset: 0;
background: linear-gradient(
135deg,
var(--frost-bg-a) 0%,
var(--frost-bg-b) 50%,
var(--frost-bg-c) 100%
);
z-index: -2;
}
/* Overlay radial gradients for mesh effect */
.frost-background::before {
content: '';
position: absolute;
inset: 0;
background:
radial-gradient(
ellipse 80% 60% at 20% 30%,
rgba(96, 165, 250, 0.25) 0%,
transparent 70%
),
radial-gradient(
ellipse 60% 80% at 80% 70%,
rgba(167, 139, 250, 0.20) 0%,
transparent 70%
),
radial-gradient(
ellipse 70% 50% at 50% 90%,
rgba(244, 114, 182, 0.15) 0%,
transparent 70%
);
z-index: -1;
}
/* Optional slow gradient animation */
@keyframes frost-gradient-shift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.frost-background--animated {
background-size: 200% 200%;
animation: frost-gradient-shift 20s ease-in-out infinite;
}
/* Sticky frosted navigation */
.frost-nav {
position: sticky;
top: 0;
z-index: 100;
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(24px) saturate(1.6);
-webkit-backdrop-filter: blur(24px) saturate(1.6);
border-bottom: 1px solid var(--frost-border-subtle);
padding: 0.75rem 2rem;
display: flex;
align-items: center;
justify-content: space-between;
transition: background 0.3s ease;
}
/* Increase opacity on scroll for readability */
.frost-nav--scrolled {
background: rgba(255, 255, 255, 0.15);
box-shadow: 0 4px 24px var(--frost-shadow-diffused);
}
.frost-nav a {
color: var(--frost-text-secondary);
text-decoration: none;
font-family: 'Inter', sans-serif;
font-weight: 500;
font-size: 0.9rem;
padding: 0.5rem 1rem;
border-radius: var(--frost-radius-sm);
transition: color 0.2s ease, background 0.2s ease;
}
.frost-nav a:hover {
color: var(--frost-text-primary);
background: rgba(255, 255, 255, 0.08);
}
.frost-nav a.active {
color: var(--frost-accent-blue);
background: rgba(96, 165, 250, 0.10);
}
/* Interactive frosted card with hover elevation */
.frost-card {
position: relative;
background: var(--frost-surface-light);
backdrop-filter: blur(16px) saturate(1.4);
-webkit-backdrop-filter: blur(16px) saturate(1.4);
border: 1px solid var(--frost-border);
border-radius: var(--frost-radius-lg);
padding: 2rem;
box-shadow:
0 4px 16px var(--frost-shadow-diffused),
0 1px 4px rgba(0, 0, 0, 0.06);
transition:
background 0.3s ease,
border-color 0.3s ease,
box-shadow 0.3s ease,
transform 0.3s ease;
overflow: hidden;
}
/* Light refraction gradient overlay */
.frost-card::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.10) 0%,
rgba(255, 255, 255, 0.03) 40%,
transparent 70%
);
pointer-events: none;
transition: opacity 0.3s ease;
}
/* Hover state -- panel moves closer to viewer */
.frost-card:hover {
background: var(--frost-surface-raised);
border-color: var(--frost-border-bright);
box-shadow:
0 8px 32px rgba(10, 10, 50, 0.20),
0 2px 8px rgba(0, 0, 0, 0.10),
0 0 0 1px rgba(255, 255, 255, 0.05);
transform: translateY(-2px);
}
.frost-card:hover::before {
opacity: 1.4;
}
/* Primary frosted button */
.frost-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 0.65rem 1.6rem;
background: rgba(96, 165, 250, 0.18);
backdrop-filter: blur(12px) saturate(1.3);
-webkit-backdrop-filter: blur(12px) saturate(1.3);
border: 1px solid rgba(96, 165, 250, 0.30);
border-radius: var(--frost-radius-sm);
color: var(--frost-text-primary);
font-family: 'Inter', sans-serif;
font-size: 0.9rem;
font-weight: 500;
letter-spacing: 0.01em;
cursor: pointer;
transition:
background 0.25s ease,
border-color 0.25s ease,
box-shadow 0.25s ease;
}
.frost-button:hover {
background: rgba(96, 165, 250, 0.28);
border-color: rgba(96, 165, 250, 0.45);
box-shadow:
0 4px 16px rgba(96, 165, 250, 0.15),
0 0 0 1px rgba(96, 165, 250, 0.08);
}
.frost-button:active {
background: rgba(96, 165, 250, 0.35);
transform: scale(0.98);
transition-duration: 0.1s;
}
/* Secondary / ghost button */
.frost-button--secondary {
background: var(--frost-surface-mid);
border-color: var(--frost-border);
color: var(--frost-text-secondary);
}
.frost-button--secondary:hover {
background: var(--frost-surface-light);
border-color: var(--frost-border-bright);
color: var(--frost-text-primary);
box-shadow: 0 4px 16px var(--frost-shadow-diffused);
}
/* Frosted input field */
.frost-input {
width: 100%;
padding: 0.7rem 1rem;
background: rgba(255, 255, 255, 0.06);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.10);
border-radius: var(--frost-radius-sm);
color: var(--frost-text-primary);
font-family: 'Inter', sans-serif;
font-size: 0.95rem;
outline: none;
transition:
border-color 0.25s ease,
box-shadow 0.25s ease,
background 0.25s ease;
}
.frost-input::placeholder {
color: var(--frost-text-muted);
}
.frost-input:focus {
border-color: rgba(96, 165, 250, 0.50);
background: rgba(255, 255, 255, 0.10);
box-shadow:
0 0 0 3px rgba(96, 165, 250, 0.12),
0 2px 8px rgba(10, 10, 50, 0.10);
}
/* Gradient divider that fades at edges */
.frost-divider {
border: none;
height: 1px;
background: linear-gradient(
to right,
transparent 0%,
rgba(255, 255, 255, 0.12) 20%,
rgba(255, 255, 255, 0.12) 80%,
transparent 100%
);
margin: 2rem 0;
}
/* Accented divider with glow */
.frost-divider--accent {
height: 1px;
background: linear-gradient(
to right,
transparent 0%,
rgba(96, 165, 250, 0.30) 30%,
rgba(167, 139, 250, 0.30) 70%,
transparent 100%
);
box-shadow: 0 0 8px rgba(96, 165, 250, 0.08);
}
/* Modal overlay with blur */
.frost-modal-overlay {
position: fixed;
inset: 0;
background: rgba(10, 10, 30, 0.50);
backdrop-filter: blur(6px);
-webkit-backdrop-filter: blur(6px);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
/* Modal panel -- raised frost */
.frost-modal {
background: var(--frost-surface-raised);
backdrop-filter: blur(24px) saturate(1.8);
-webkit-backdrop-filter: blur(24px) saturate(1.8);
border: 1px solid var(--frost-border-bright);
border-radius: var(--frost-radius-lg);
padding: 2.5rem;
max-width: 520px;
width: 90%;
box-shadow:
0 24px 80px rgba(10, 10, 40, 0.35),
0 8px 24px rgba(0, 0, 0, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.10);
}
/* Small frosted tag / badge */
.frost-tag {
display: inline-flex;
align-items: center;
padding: 0.25rem 0.75rem;
background: rgba(167, 139, 250, 0.15);
border: 1px solid rgba(167, 139, 250, 0.25);
border-radius: var(--frost-radius-pill);
font-family: 'Space Grotesk', 'Inter', sans-serif;
font-size: 0.75rem;
font-weight: 500;
color: var(--frost-accent-purple);
letter-spacing: 0.02em;
}
.frost-tag--blue {
background: rgba(96, 165, 250, 0.15);
border-color: rgba(96, 165, 250, 0.25);
color: var(--frost-accent-blue);
}
.frost-tag--cyan {
background: rgba(103, 232, 249, 0.12);
border-color: rgba(103, 232, 249, 0.25);
color: var(--frost-accent-cyan);
}
| Physical / Architectural Reference | Web Equivalent |
|---|---|
| Frosted architectural glass panels | backdrop-filter: blur(16-24px) with semi-transparent rgba white background |
| Layered glass walls at different depths | Multiple overlapping elements with varying blur intensity and opacity |
| Light falling across a glass surface | linear-gradient(135deg, rgba(255,255,255,0.08), transparent) overlay on panels |
| Diffused light through frosted glass | backdrop-filter: saturate(1.2-1.8) boosting color vibrancy through the blur |
| Soft shadows cast by floating glass | Large-spread, low-opacity box-shadow (20-40px spread, 0.08-0.15 alpha) |
| Thin luminous edge of glass catching light | border: 1px solid rgba(255,255,255,0.15-0.25) |
| Gradient light refracting through glass edges | Border-top or border-left with slightly higher opacity than other borders |
| Vibrant colored wall behind glass partitions | Multi-stop CSS linear-gradient and radial-gradient backgrounds |
| Glass with varying thickness / frost density | Different blur() and background opacity values for panels at different depths |
| Rounded glass corners (no sharp edges) | border-radius: 16-24px on all panel elements |
| Anti-reflective glass coating | Smooth CSS transitions on hover (0.25-0.35s ease-out) preventing harsh visual jumps |
| Stacked glass shelves | z-index layering with decreasing blur and increasing opacity for closer layers |
When creating or sourcing imagery for a Frosted Touch styled site:
| Aesthetic | Relationship to Frosted Touch |
|---|---|
| Glassmorphism | Direct predecessor; Frosted Touch refines and deepens glassmorphism with multi-layer depth, better performance patterns, and more sophisticated color handling |
| Neumorphism | Shares the soft-shadow philosophy but differs fundamentally – neumorphism uses extruded surfaces on solid backgrounds while Frosted Touch uses translucent surfaces over vibrant backgrounds |
| Aurora Gradient | Shares vibrant gradient backgrounds; Aurora Gradient focuses on the gradient itself as the primary visual element, while Frosted Touch uses gradients as the foundation beneath frost layers |
| Dark Mode Neon | Both work on dark backgrounds, but Dark Mode Neon uses high-contrast glowing elements while Frosted Touch uses soft, diffused translucency |
| Cyberminimalism | Shares the minimal, clean approach to UI but Cyberminimalism uses flat surfaces and sharp type, lacking the frosted depth and warmth |
| Claymorphism | Both create soft, rounded, elevated surfaces, but Claymorphism simulates opaque clay/plastic while Frosted Touch simulates transparent glass |
backdrop-filter browser support is critical – the entire aesthetic depends on it. As of 2026, support is strong across modern browsers, but always provide a solid-color fallback (background: rgba(30, 30, 60, 0.85)) for environments where backdrop-filter is unavailable or disabled. Use @supports (backdrop-filter: blur(1px)) to detect support.backdrop-filter: blur() is GPU-intensive, especially with large blur radii and multiple overlapping layers. Limit frosted panels to 3-4 visible at any time. Avoid animating blur values. Use will-change: backdrop-filter sparingly and only on elements that will transition.backdrop-filter creates a new stacking context. Nested frost panels may not blur content outside their stacking context parent. Test depth layering carefully.text-shadow for legibility, increase panel opacity in critical reading areas, and test with varying background gradient positions to ensure text remains readable in all states.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Frosted Touch Page</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Plus+Jakarta+Sans:wght@500;600;700;800&family=Space+Grotesk:wght@400;500&family=JetBrains+Mono:wght@400&display=swap" rel="stylesheet">
<style>
:root {
/* Background gradient */
--frost-bg-a: #1a1a4e;
--frost-bg-b: #4a1a6b;
--frost-bg-c: #6b1a4a;
/* Frost surfaces */
--frost-surface-deep: rgba(255, 255, 255, 0.08);
--frost-surface-mid: rgba(255, 255, 255, 0.12);
--frost-surface-light: rgba(255, 255, 255, 0.18);
--frost-surface-raised: rgba(255, 255, 255, 0.25);
/* Borders */
--frost-border: rgba(255, 255, 255, 0.18);
--frost-border-bright: rgba(255, 255, 255, 0.30);
--frost-border-subtle: rgba(255, 255, 255, 0.10);
/* Text */
--frost-text-primary: #F8FAFC;
--frost-text-secondary: rgba(248, 250, 252, 0.70);
--frost-text-muted: rgba(248, 250, 252, 0.45);
/* Accents */
--frost-accent-blue: #60A5FA;
--frost-accent-purple: #A78BFA;
--frost-accent-cyan: #67E8F9;
--frost-accent-pink: #F472B6;
/* Shadows */
--frost-shadow: rgba(15, 10, 40, 0.25);
--frost-shadow-diffused: rgba(10, 10, 50, 0.15);
/* Radius */
--frost-radius-sm: 8px;
--frost-radius-md: 16px;
--frost-radius-lg: 24px;
--frost-radius-pill: 9999px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
font-size: 16px;
line-height: 1.7;
color: var(--frost-text-primary);
min-height: 100vh;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* ---- Gradient Background ---- */
.frost-bg {
position: fixed;
inset: 0;
background: linear-gradient(
135deg,
var(--frost-bg-a) 0%,
var(--frost-bg-b) 50%,
var(--frost-bg-c) 100%
);
z-index: -2;
}
.frost-bg::before {
content: '';
position: absolute;
inset: 0;
background:
radial-gradient(
ellipse 80% 50% at 15% 25%,
rgba(96, 165, 250, 0.22) 0%,
transparent 70%
),
radial-gradient(
ellipse 60% 70% at 85% 65%,
rgba(167, 139, 250, 0.18) 0%,
transparent 70%
),
radial-gradient(
ellipse 70% 40% at 50% 95%,
rgba(244, 114, 182, 0.14) 0%,
transparent 60%
);
}
/* ---- Navigation ---- */
.frost-nav {
position: sticky;
top: 0;
z-index: 100;
background: rgba(255, 255, 255, 0.07);
backdrop-filter: blur(24px) saturate(1.5);
-webkit-backdrop-filter: blur(24px) saturate(1.5);
border-bottom: 1px solid var(--frost-border-subtle);
padding: 0.8rem 2rem;
display: flex;
align-items: center;
justify-content: space-between;
}
.frost-nav-brand {
font-family: 'Plus Jakarta Sans', sans-serif;
font-weight: 700;
font-size: 1.2rem;
color: var(--frost-text-primary);
text-decoration: none;
}
.frost-nav-links {
display: flex;
gap: 0.25rem;
list-style: none;
}
.frost-nav-links a {
color: var(--frost-text-secondary);
text-decoration: none;
font-weight: 500;
font-size: 0.9rem;
padding: 0.4rem 0.9rem;
border-radius: var(--frost-radius-sm);
transition: color 0.2s ease, background 0.2s ease;
}
.frost-nav-links a:hover {
color: var(--frost-text-primary);
background: rgba(255, 255, 255, 0.08);
}
/* ---- Page Container ---- */
.frost-page {
max-width: 1200px;
margin: 0 auto;
padding: 3rem 2rem 4rem;
}
/* ---- Hero Section (Deep Layer) ---- */
.frost-hero {
position: relative;
background: var(--frost-surface-deep);
backdrop-filter: blur(40px) saturate(1.2);
-webkit-backdrop-filter: blur(40px) saturate(1.2);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: var(--frost-radius-lg);
padding: 4rem 3rem;
margin-bottom: 2.5rem;
box-shadow: 0 16px 64px rgba(10, 10, 50, 0.12);
text-align: center;
overflow: hidden;
}
.frost-hero::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.06) 0%,
transparent 50%
);
pointer-events: none;
}
.frost-hero > * {
position: relative;
z-index: 1;
}
.frost-hero h1 {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: clamp(2rem, 5vw, 3.5rem);
font-weight: 800;
color: #FFFFFF;
letter-spacing: -0.02em;
line-height: 1.2;
margin-bottom: 1rem;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);
}
.frost-hero p {
font-size: 1.15rem;
color: var(--frost-text-secondary);
max-width: 600px;
margin: 0 auto 2rem;
line-height: 1.7;
}
.frost-hero-tags {
display: flex;
gap: 0.5rem;
justify-content: center;
flex-wrap: wrap;
}
/* ---- Tags ---- */
.frost-tag {
display: inline-flex;
align-items: center;
padding: 0.3rem 0.85rem;
background: rgba(167, 139, 250, 0.14);
border: 1px solid rgba(167, 139, 250, 0.25);
border-radius: var(--frost-radius-pill);
font-family: 'Space Grotesk', sans-serif;
font-size: 0.78rem;
font-weight: 500;
color: var(--frost-accent-purple);
letter-spacing: 0.02em;
}
.frost-tag--blue {
background: rgba(96, 165, 250, 0.14);
border-color: rgba(96, 165, 250, 0.25);
color: var(--frost-accent-blue);
}
.frost-tag--cyan {
background: rgba(103, 232, 249, 0.10);
border-color: rgba(103, 232, 249, 0.22);
color: var(--frost-accent-cyan);
}
/* ---- Card Grid ---- */
.frost-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
gap: 1.5rem;
margin-bottom: 2.5rem;
}
/* ---- Cards (Surface Layer) ---- */
.frost-card {
position: relative;
background: var(--frost-surface-light);
backdrop-filter: blur(16px) saturate(1.5);
-webkit-backdrop-filter: blur(16px) saturate(1.5);
border: 1px solid var(--frost-border);
border-radius: var(--frost-radius-lg);
padding: 2rem;
box-shadow:
0 4px 16px var(--frost-shadow-diffused),
0 1px 4px rgba(0, 0, 0, 0.06);
transition:
background 0.3s ease,
border-color 0.3s ease,
box-shadow 0.3s ease,
transform 0.3s ease;
overflow: hidden;
}
.frost-card::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.08) 0%,
rgba(255, 255, 255, 0.02) 40%,
transparent 70%
);
pointer-events: none;
transition: opacity 0.3s ease;
}
.frost-card:hover {
background: var(--frost-surface-raised);
border-color: var(--frost-border-bright);
box-shadow:
0 8px 32px rgba(10, 10, 50, 0.20),
0 2px 8px rgba(0, 0, 0, 0.10);
transform: translateY(-2px);
}
.frost-card > * {
position: relative;
z-index: 1;
}
.frost-card h2 {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 1.3rem;
font-weight: 700;
color: var(--frost-text-primary);
margin-bottom: 0.75rem;
letter-spacing: -0.01em;
}
.frost-card p {
color: var(--frost-text-secondary);
font-size: 0.95rem;
line-height: 1.7;
margin-bottom: 1rem;
}
.frost-card .frost-mono {
font-family: 'JetBrains Mono', monospace;
font-size: 0.82rem;
color: var(--frost-accent-cyan);
letter-spacing: 0.02em;
}
/* ---- Content Panel (Mid Layer) ---- */
.frost-content-panel {
position: relative;
background: var(--frost-surface-mid);
backdrop-filter: blur(20px) saturate(1.4);
-webkit-backdrop-filter: blur(20px) saturate(1.4);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: var(--frost-radius-lg);
padding: 2.5rem;
box-shadow: 0 8px 32px rgba(10, 10, 50, 0.12);
margin-bottom: 2.5rem;
overflow: hidden;
}
.frost-content-panel::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.05) 0%,
transparent 40%
);
pointer-events: none;
}
.frost-content-panel > * {
position: relative;
z-index: 1;
}
.frost-content-panel h2 {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 1.5rem;
font-weight: 700;
color: var(--frost-text-primary);
margin-bottom: 1rem;
}
.frost-content-panel p {
color: var(--frost-text-secondary);
margin-bottom: 1rem;
}
/* ---- Buttons ---- */
.frost-button {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.65rem 1.5rem;
background: rgba(96, 165, 250, 0.18);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(96, 165, 250, 0.30);
border-radius: var(--frost-radius-sm);
color: var(--frost-text-primary);
font-family: 'Inter', sans-serif;
font-size: 0.9rem;
font-weight: 500;
cursor: pointer;
text-decoration: none;
transition:
background 0.25s ease,
border-color 0.25s ease,
box-shadow 0.25s ease;
}
.frost-button:hover {
background: rgba(96, 165, 250, 0.28);
border-color: rgba(96, 165, 250, 0.45);
box-shadow: 0 4px 16px rgba(96, 165, 250, 0.15);
}
.frost-button--secondary {
background: var(--frost-surface-mid);
border-color: var(--frost-border);
color: var(--frost-text-secondary);
}
.frost-button--secondary:hover {
background: var(--frost-surface-light);
border-color: var(--frost-border-bright);
color: var(--frost-text-primary);
}
/* ---- Divider ---- */
.frost-divider {
border: none;
height: 1px;
background: linear-gradient(
to right,
transparent 0%,
rgba(255, 255, 255, 0.10) 20%,
rgba(255, 255, 255, 0.10) 80%,
transparent 100%
);
margin: 2rem 0;
}
/* ---- Stats Row ---- */
.frost-stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: 1rem;
margin-bottom: 2.5rem;
}
.frost-stat {
position: relative;
background: var(--frost-surface-mid);
backdrop-filter: blur(20px) saturate(1.3);
-webkit-backdrop-filter: blur(20px) saturate(1.3);
border: 1px solid rgba(255, 255, 255, 0.10);
border-radius: var(--frost-radius-md);
padding: 1.5rem;
text-align: center;
overflow: hidden;
}
.frost-stat::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.04) 0%,
transparent 50%
);
pointer-events: none;
}
.frost-stat > * {
position: relative;
z-index: 1;
}
.frost-stat-value {
font-family: 'Plus Jakarta Sans', sans-serif;
font-size: 2rem;
font-weight: 800;
color: var(--frost-text-primary);
line-height: 1.2;
margin-bottom: 0.25rem;
}
.frost-stat-label {
font-family: 'Space Grotesk', sans-serif;
font-size: 0.75rem;
font-weight: 500;
color: var(--frost-text-muted);
text-transform: uppercase;
letter-spacing: 0.08em;
}
/* ---- Footer ---- */
.frost-footer {
text-align: center;
padding: 2rem;
color: var(--frost-text-muted);
font-size: 0.85rem;
}
/* ---- Utility ---- */
.text-accent-blue { color: var(--frost-accent-blue); }
.text-accent-purple { color: var(--frost-accent-purple); }
.text-accent-cyan { color: var(--frost-accent-cyan); }
/* ---- Responsive ---- */
@media (max-width: 768px) {
.frost-page {
padding: 1.5rem 1rem 3rem;
}
.frost-hero {
padding: 2.5rem 1.5rem;
}
.frost-grid {
grid-template-columns: 1fr;
}
.frost-nav {
padding: 0.7rem 1rem;
}
.frost-nav-links {
gap: 0;
}
.frost-nav-links a {
padding: 0.4rem 0.6rem;
font-size: 0.82rem;
}
.frost-content-panel {
padding: 1.5rem;
}
}
/* ---- Fallback for browsers without backdrop-filter ---- */
@supports not (backdrop-filter: blur(1px)) {
.frost-hero,
.frost-card,
.frost-content-panel,
.frost-nav,
.frost-stat {
background: rgba(30, 25, 60, 0.88);
}
}
</style>
</head>
<body>
<!-- Gradient background -->
<div class="frost-bg"></div>
<!-- Navigation -->
<nav class="frost-nav">
<a href="#" class="frost-nav-brand">Frosted Touch</a>
<ul class="frost-nav-links">
<li><a href="#">Overview</a></li>
<li><a href="#">Features</a></li>
<li><a href="#">Layers</a></li>
<li><a href="#">About</a></li>
</ul>
</nav>
<div class="frost-page">
<!-- Hero (Deep Layer) -->
<section class="frost-hero">
<h1>Through the Frost</h1>
<p>Translucent layers reveal the color beneath. Every surface breathes, every boundary is soft, and depth emerges from light and glass alone.</p>
<div class="frost-hero-tags">
<span class="frost-tag frost-tag--blue">backdrop-filter</span>
<span class="frost-tag">translucent layers</span>
<span class="frost-tag frost-tag--cyan">diffused shadows</span>
</div>
</section>
<!-- Stats Row (Mid Layer) -->
<div class="frost-stats">
<div class="frost-stat">
<div class="frost-stat-value text-accent-blue">4</div>
<div class="frost-stat-label">Depth Layers</div>
</div>
<div class="frost-stat">
<div class="frost-stat-value text-accent-purple">24px</div>
<div class="frost-stat-label">Border Radius</div>
</div>
<div class="frost-stat">
<div class="frost-stat-value text-accent-cyan">16px</div>
<div class="frost-stat-label">Blur Radius</div>
</div>
<div class="frost-stat">
<div class="frost-stat-value text-accent-blue">0.18</div>
<div class="frost-stat-label">Surface Alpha</div>
</div>
</div>
<!-- Card Grid (Surface Layer) -->
<div class="frost-grid">
<div class="frost-card">
<h2>Frosted Panels</h2>
<p>Semi-transparent surfaces blur the vibrant world beneath them. Each layer reveals color while softening detail, creating depth without weight.</p>
<span class="frost-mono">backdrop-filter: blur(16px) saturate(1.4)</span>
</div>
<div class="frost-card">
<h2>Diffused Shadows</h2>
<p>Large spread, low opacity. Shadows are atmospheric halos, not hard edges. They suggest floating glass rather than solid objects.</p>
<span class="frost-mono">box-shadow: 0 8px 32px rgba(10,10,50,0.12)</span>
</div>
<div class="frost-card">
<h2>Luminous Borders</h2>
<p>Thin white borders at low opacity catch the light like glass edges. They define without constraining, glowing faintly against the frosted surface.</p>
<span class="frost-mono">border: 1px solid rgba(255,255,255,0.18)</span>
</div>
</div>
<!-- Content Panel (Mid Layer) -->
<section class="frost-content-panel">
<h2>Layered Depth</h2>
<p>Frosted Touch builds interfaces from translucent layers at multiple depths. The deepest panels carry the heaviest blur and lowest opacity, while surface elements are crisper and brighter. The result is a spatial composition where every element has a clear position in z-space.</p>
<hr class="frost-divider">
<p>The vibrant gradient background is never hidden -- it is the color source for the entire composition, felt through every frosted layer. Without it, the frost panels are just gray boxes. With it, they become glass.</p>
<div style="margin-top: 1.5rem; display: flex; gap: 0.75rem; flex-wrap: wrap;">
<a href="#" class="frost-button">Primary Action</a>
<a href="#" class="frost-button frost-button--secondary">Secondary</a>
</div>
</section>
<!-- Footer -->
<footer class="frost-footer">
<p>Frosted Touch -- refined glassmorphism for 2026 and beyond</p>
</footer>
</div>
</body>
</html>