DESIGN.md@claude/skills/visualize/design-systems/glassmorphism · git:20261007.b0c13a7 · 2026-10-07 · sha256 5cac2cf9c2676f1a
DESIGN.md@claude/skills/visualize/design-systems/glassmorphism git:20261007.b0c13a7A
Immutable. This exact content never changes and is served at /api/v1/blob/5cac2cf9c2676f1a.
---
name: Glassmorphism
description: Backdrop-filter blur on semi-transparent surfaces stacked over a vibrant background gradient. Cool palette (violet-cyan), light-canonical, modern marketing register. Surfaces carry alpha; the page beneath them is what the glass refracts.
# Surfaces deliberately carry alpha — the "glass" reads only when the
# background it sits over is non-uniform (gradient mesh, image, or
# coloured wash). The preview template provides a default mesh; real
# artifacts using glassmorphism are expected to supply their own
# coloured backdrop. OKLCH with alpha component on translucent slots.
canonical-canvas: light
selection:
mood: [brand-system, technical]
tone: [confident, polished]
formality: medium
density: medium
canonical_canvas: light
best_for: |
Use for balanced artifacts that need a confident, polished register with brand-system, technical visual cues. Strongest when the reference can preserve its light canonical canvas instead of forcing the opposite polarity.
avoid_for: |
Avoid when the source material asks for a sharply different emotional register, density profile, or canvas polarity.
colors:
background: "oklch(0.96 0.020 240)"
foreground: "oklch(0.22 0.025 250)"
card: "oklch(0.99 0.005 240 / 0.55)"
card-foreground: "oklch(0.22 0.025 250)"
popover: "oklch(0.99 0.005 240 / 0.55)"
popover-foreground: "oklch(0.22 0.025 250)"
primary: "oklch(0.55 0.22 275)"
primary-foreground: "oklch(0.99 0 0)"
secondary: "oklch(0.95 0.020 200 / 0.50)"
secondary-foreground: "oklch(0.22 0.025 250)"
muted: "oklch(0.94 0.015 240 / 0.50)"
muted-foreground: "oklch(0.48 0.025 245)"
accent: "oklch(0.70 0.18 195)"
accent-foreground: "oklch(0.22 0.025 250)"
destructive: "oklch(0.58 0.22 25)"
destructive-foreground: "oklch(0.99 0 0)"
border: "oklch(0.85 0.020 240 / 0.45)"
input: "oklch(0.85 0.020 240 / 0.45)"
ring: "oklch(0.55 0.22 275)"
chart-1: "oklch(0.62 0.22 275)"
chart-2: "oklch(0.68 0.20 220)"
chart-3: "oklch(0.72 0.18 195)"
chart-4: "oklch(0.70 0.20 320)"
chart-5: "oklch(0.65 0.18 160)"
sidebar: "oklch(0.95 0.015 240 / 0.55)"
sidebar-foreground: "oklch(0.22 0.025 250)"
sidebar-primary: "oklch(0.55 0.22 275)"
sidebar-primary-foreground: "oklch(0.99 0 0)"
sidebar-accent: "oklch(0.70 0.18 195)"
sidebar-accent-foreground: "oklch(0.22 0.025 250)"
sidebar-border: "oklch(0.85 0.020 240 / 0.45)"
sidebar-ring: "oklch(0.55 0.22 275)"
typography:
display:
fontFamily: "var(--font-sans)"
fontSize: "clamp(2.25rem, 5.5vw, 3.5rem)"
fontWeight: 600
lineHeight: 1.1
letterSpacing: "-0.02em"
heading:
fontFamily: "var(--font-sans)"
fontSize: "1.75rem"
fontWeight: 500
lineHeight: 1.2
title:
fontFamily: "var(--font-sans)"
fontSize: "1.125rem"
fontWeight: 500
lineHeight: 1.3
body:
fontFamily: "var(--font-sans)"
fontSize: "15px"
fontWeight: 400
lineHeight: 1.6
label:
fontFamily: "var(--font-sans)"
fontSize: "0.8125rem"
fontWeight: 500
letterSpacing: "0.02em"
mono:
fontFamily: "var(--font-mono)"
fontSize: "0.875rem"
fontWeight: 400
rounded:
sm: "0.5rem"
md: "0.875rem"
lg: "1.25rem"
xl: "1.75rem"
components:
button-primary:
backgroundColor: "{colors.primary}"
textColor: "{colors.primary-foreground}"
typography: "{typography.label}"
rounded: "{rounded.md}"
padding: "0.625rem 1.25rem"
button-secondary:
backgroundColor: "{colors.secondary}"
textColor: "{colors.secondary-foreground}"
typography: "{typography.label}"
rounded: "{rounded.md}"
padding: "0.625rem 1.25rem"
card:
backgroundColor: "{colors.card}"
textColor: "{colors.card-foreground}"
rounded: "{rounded.lg}"
padding: "1.75rem"
input-text:
backgroundColor: "{colors.background}"
textColor: "{colors.foreground}"
rounded: "{rounded.md}"
padding: "0.625rem 1rem"
nav-link:
textColor: "{colors.foreground}"
typography: "{typography.label}"
nav-link-hover:
textColor: "{colors.primary}"
spacing:
xs: "0.5rem"
sm: "0.75rem"
md: "1.25rem"
lg: "2rem"
xl: "3rem"
---
# Design System: Glassmorphism
## 1. Overview: Glass Over Colour
**Creative North Star: "The Backdrop is the Brand"**
Glassmorphism is visualize's translucent-surface register. The defining mechanism is `backdrop-filter: blur()` on semi-transparent cards over a vibrant non-uniform background — a gradient mesh, an image, a coloured wash. The glass reads as glass *only because* the colour beneath it refracts through; on a solid background it collapses into a flat semi-transparent rectangle and the identity disappears.
Use Glassmorphism for marketing landing pages, product hero sections, premium SaaS announcements, AI-tool launch surfaces — content where the visual register is "polished, modern, layered." Not for long-form prose (the gradient backdrop competes for attention), not for technical documentation (the polish reads as marketing), not for dashboards (the blur cost on many surfaces is performance-prohibitive at scale).
**Key Characteristics:**
- Surface tokens carry alpha (`oklch(... / 0.55)` on `--card`, `--popover`, `--sidebar`; `oklch(... / 0.45)` on `--border` and `--input`).
- Backdrop is the responsibility of the artifact: every template using Glassmorphism must provide a coloured / gradient / image backdrop on `body` or a wrapper. The preview template ships a default mesh as an example.
- `--primary` is vivid violet-blue (hue 275) — the modern-web standard accent register paired against cyan accent (hue 195).
- Generous radius (`--radius-lg` = 1.25rem; `--radius-xl` = 1.75rem) — soft glass corners are part of the read.
- Typography is contemporary sans at modest weights — heavy display would fight the soft glass.
## 2. Colors: Cool Palette, Translucent Surfaces
A cool-leaning palette anchored on hue 240 (cool neutral) and pulled toward 275 (violet-blue primary) and 195 (cyan accent). Light-canonical; the dark register exists but glass-on-dark reads as "smoked glass" rather than the canonical clear-glass-on-bright register.
### Surfaces (with alpha)
- **Background** (`oklch(0.96 0.020 240)`): The base canvas. Solid (no alpha). Tinted cool — the preview template overlays a gradient mesh on top.
- **Card** (`oklch(0.99 0.005 240 / 0.55)`): Glass surface. 55% opaque white with a slight cool cast. `backdrop-filter: blur(20px)` applied at component level.
- **Border** (`oklch(0.85 0.020 240 / 0.45)`): Translucent borders that read as the edge of glass. Hairline 1px.
### Accents
- **Violet-blue Primary** (`oklch(0.55 0.22 275)`): The brand voltage. CTAs, focus rings, glow-shadow base.
- **Cyan Accent** (`oklch(0.70 0.18 195)`): The cool counterpart. Inline highlights, badges, "active state" indicators.
### Named Rules
**The Backdrop-Required Rule.** Glassmorphism only reads as glass when the page beneath it is non-uniform. Every artifact using Glassmorphism must supply a backdrop (gradient mesh, image, photographic background). The preview ships a default mesh; production templates must override or inherit.
**The Backdrop-Filter-On-Surfaces-Only Rule.** Apply `backdrop-filter: blur()` to `--card`, `--popover`, `--sidebar` surfaces — never to text. Blurred text becomes unreadable.
**The Two-Tone Accent Rule.** Violet-blue primary + cyan accent are the system's identity. A third high-chroma accent collapses the glass register into generic-tech.
## 3. Typography
**Display Font:** system sans (`var(--font-sans)`)
**Body Font:** system sans
**Mono Font:** system mono
Contemporary sans at modest weights (display 600, heading 500, body 400). The glass register asks the type to recede so the layered surfaces can do the work; heavy display would fight the soft, polished feel.
## 4. Elevation: Blur, Not Shadow
Replace depth shadows with `backdrop-filter: blur()`. Cards lift off the background by refracting it, not by casting a shadow downward. A subtle `box-shadow: 0 1px 0 rgba(255,255,255,0.5) inset` on top edges adds a "highlight" that completes the glass illusion.
## 5. Components
### Cards
- **Background:** `var(--card)` (translucent white with backdrop-filter).
- **Border:** Hairline `var(--border)` (translucent edge).
- **Backdrop filter:** `blur(24px) saturate(120%)`.
- **Inner highlight:** `box-shadow: inset 0 1px 0 rgba(255,255,255,0.6)`.
### Buttons
- **Primary:** Violet-blue fill, white text, soft `--radius-md`.
- **Glass:** Translucent fill (same alpha pattern as cards), backdrop blur, primary border on hover.
## 6. Do's and Don'ts
### Do:
- **Do** supply a colourful backdrop (gradient mesh, image) on every Glassmorphism artifact. The glass needs something to refract.
- **Do** apply `backdrop-filter: blur()` to surfaces, not text.
- **Do** keep accents to violet-blue + cyan. Two-tone is the identity.
- **Do** use generous radius. Soft corners are part of the read.
### Don't:
- **Don't** use Glassmorphism for long-form prose. The backdrop competes for attention.
- **Don't** stack glass on glass on glass (three+ layers). Beyond two layers, the blur degrades to mud.
- **Don't** apply `backdrop-filter` to small UI like badges. Performance + visual mush.
- **Don't** use solid surfaces with this register — that's not glass, that's frosted plastic.