Real glassmorphism without the cliché. A soft tonal backdrop in cool lavender, surfaces that actually blur the layers behind them, hairline edges in 8% ink, and a single periwinkle accent. The depth is restraint, not decoration.
A complete design system, ready for your AI coding agent. Every primitive, token, and pattern below is generated straight from DESIGN.md — drop the file in your project and ship matching UI in minutes.
Prose-first token file — decisions live next to their reasoning.
Fine micro-scale (1–5px) for pills, editorial scale (12–21px) for the grid.
The system's own radius tokens — sm for chips and inputs, md for buttons, lg for cards, pill for fully-rounded CTAs.
Tokens describe the resting state. A real product needs every interaction state. Hover, focus, active, disabled, loading — all derived from the system's resting tokens.
1---2name: "Prism Glass"3description: "Real glassmorphism without the cliché. A soft tonal backdrop in cool lavender, surfaces that actually blur the layers behind them, hairline edges in 8% ink, and a single periwinkle accent. The depth is restraint, not decoration."4tags: [glass, minimal, premium, modern, soft]5colors:6 primary: "#1a1d2c"7 secondary: "#5a5f73"8 tertiary: "#1a1d2c"9 neutral: "#eef0f7"10 surface: rgba(255,255,255,0.62)11typography:12 display: Manrope13 body: Manrope14 mono: "JetBrains Mono"15 scale:16 hero: "3.75rem / 1.04 / 700 / -0.035em"17 h1: "2.5rem / 1.12 / 700 / -0.025em"18 h2: "1.625rem / 1.25 / 600 / -0.02em"19 body: "1rem / 1.6 / 400 / -0.005em"20radius:21 sm: 10px22 md: 16px23 lg: 22px24 pill: 9999px25shadows:26 card: "rgba(26,29,44,0.06) 0 1px 0 inset, rgba(26,29,44,0.04) 0 2px 12px -4px, rgba(26,29,44,0.06) 0 0 0 1px"27 button: "rgba(108,124,255,0.22) 0 6px 18px -6px"28borders:29 card: "1px solid rgba(26,29,44,0.06)"30 divider: rgba(26,29,44,0.06)31buttons:32 primary:33 background: #6c7cff34 color: #ffffff35 border: none36 shape: pill37 padding: 10px 20px38 font: 600 / 0.875rem39 shadow: rgba(108,124,255,0.22) 0 6px 18px -6px40 secondary:41 background: rgba(255,255,255,0.65)42 color: #1a1d2c43 border: 1px solid rgba(26,29,44,0.08)44 shape: pill45 padding: 10px 20px46 font: 600 / 0.875rem47 outline:48 background: transparent49 color: #1a1d2c50 border: 1px solid rgba(26,29,44,0.14)51 shape: pill52 padding: 10px 20px53 font: 600 / 0.875rem54 ghost:55 background: transparent56 color: #5a5f7357 border: none58 shape: pill59 padding: 10px 16px60 font: 600 / 0.875rem61charts:62 variant: "rounded-bars"63 stroke_width: 1.564 fill_opacity: 0.165 gridlines: false66 bar_gap: 12px67 highlight: single68 dot_marker: true69fonts_url: "https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap"70dependencies: ["lucide-react"]71---72 73# Prism Glass74 75## AI Build Instructions76 77> **Read this section before writing any code.** The rules below78> are non-negotiable. Every value used in the UI must come from this79> file's frontmatter — never substitute, approximate, or invent new80> colors, fonts, radii, or shadows. If a value is missing, ask the81> user before adding one.82 83### 1 · Your role84 85You are building UI for a project that has adopted **Prism Glass** as its86design system. Treat `DESIGN.md` as the single source of truth.87Your job is to translate the user's product requirements into88components and pages that look like they were designed by the same89person who authored this file.90 91### 2 · Token compliance92 93- Pull every color, font family, radius, shadow, and spacing value94 from the frontmatter at the top of this file.95- Use semantic roles (e.g. `primary`, `accent`, `muted`) — never96 hard-code hex values that bypass the system.97- When a token can be expressed as a CSS variable, declare it once98 in your global stylesheet and reference it everywhere downstream.99- The Google Fonts `<link>` is provided in the Typography section.100 Add it to `<head>` before any component renders.101 102### 3 · Component recipes103 104Use these recipes verbatim when building the corresponding component.105 106#### Buttons107 108Four variants are defined. Pick one — never blend variants or invent a fifth.109 110- **Primary** — pill shape, bg `#6c7cff`, text `#ffffff`, padding `10px 20px`, weight `600`, shadow `rgba(108,124,255,0.22) 0 6px 18px -6px`.111- **Secondary** — pill shape, bg `rgba(255,255,255,0.65)`, text `#1a1d2c`, border `1px solid rgba(26,29,44,0.08)`, padding `10px 20px`, weight `600`.112- **Outline** — pill shape, text `#1a1d2c`, border `1px solid rgba(26,29,44,0.14)`, padding `10px 20px`, weight `600`.113- **Ghost** — pill shape, text `#5a5f73`, padding `10px 16px`, weight `600`.114 115Reach for **primary** as the single dominant CTA per screen.116**Secondary** for the supporting action. **Outline** for tertiary117actions in toolbars. **Ghost** for inline links and table actions.118 119#### Cards120 121- Background: `rgba(255,255,255,0.62)`122- Border: `1px solid rgba(26,29,44,0.06)`123- Shadow: `rgba(26,29,44,0.06) 0 1px 0 inset, rgba(26,29,44,0.04) 0 2px 12px -4px, rgba(26,29,44,0.06) 0 0 0 1px`124- Radius: `radius.lg` (`22px`)125- Internal padding: `20px` for compact cards, `24–28px` for content cards.126 127#### Tabs128 129Variant: `pill`. Segmented control inside a tinted track. Active tab gets a filled pill in the accent color.130 131#### Charts132 133- Bar/line variant: `rounded-bars`134- No gridlines — let the bars/lines carry the data.135- Highlight strategy: `single` — emphasize a single bar/point per chart.136 137#### Typography pairings138 139- **Display (`Manrope`)** — h1, h2, hero headlines, brand wordmarks.140- **Body (`Manrope`)** — paragraphs, labels, button text, form inputs.141- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.142 143### 4 · Hard constraints144 145Never do any of the following without explicit instruction from the user:146 147- Introduce a new color, font, radius, or shadow that isn't declared above.148- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).149- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.150- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.151- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.152 153### 5 · Before you finish — verify154 155Run through this checklist for every screen you produce:156 157- [ ] Every color used appears in the Colors table above.158- [ ] Headlines use the display font; body copy uses the body font.159- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).160- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.161- [ ] Cards and dividers use the declared border + shadow tokens.162- [ ] No values were invented; if you needed something missing, you stopped and asked.163 164---165 166## 1. Atmosphere167 168Prism Glass is glassmorphism done with restraint. The backdrop is a soft tonal mesh — cool lavender shading into pale rose, never harsh, never neon — and surfaces sit on top as translucent panes that genuinely blur the layers behind them. Edges are 1px hairlines at 6% ink, never thick borders. The hero CTA is the single periwinkle moment in the entire system.169 170The discipline is in what's omitted: no second accent, no decorative gradients on the surfaces themselves, no glow halos. Glass earns its drama from the backdrop bleeding through, not from chrome.171 172**Signature moves**173- Real `backdrop-filter: blur(28px) saturate(180%)` on every surface — not faked with white at 80%174- Soft tonal mesh backdrop (lavender → pale rose), never a 2-color gradient175- One periwinkle accent (`#6c7cff`), used only on the primary CTA and active pill tab176- Pill shape on every interactive surface — buttons, tabs, badges177- Hairline borders at 6% ink — the glass needs an edge to read178 179## 2. Palette180 181### Surfaces182- **Glass** `rgba(255,255,255,0.62)` over a blurred backdrop — the standard pane183- **Glass Strong** `rgba(255,255,255,0.78)` — for modals and the nav184- **Glass Subtle** `rgba(255,255,255,0.42)` — for inline chips and inputs185 186### Backdrop (apply at body level)187- `radial-gradient(ellipse 80% 50% at 15% 0%, oklch(0.92 0.08 280 / 0.45), transparent 60%)`188- `radial-gradient(ellipse 70% 50% at 85% 10%, oklch(0.92 0.08 340 / 0.32), transparent 60%)`189- Base `#eef0f7`190 191### Ink192- **Ink** `#1a1d2c` — text, headings193- **Ink 60** `#5a5f73` — secondary text194- **Hairline** `rgba(26,29,44,0.06)` — every divider, every glass edge195 196### Accent197- **Periwinkle** `#6c7cff` — primary CTA, active tab198- **Periwinkle Soft** `rgba(108,124,255,0.12)` — focus ring199 200## 3. Typography201 202| Role | Font | Size | Weight | Leading | Tracking |203|------|------|------|--------|---------|----------|204| Hero | Manrope | 60px | 700 | 1.04 | -0.035em |205| H1 | Manrope | 40px | 700 | 1.12 | -0.025em |206| H2 | Manrope | 26px | 600 | 1.25 | -0.02em |207| Body | Manrope | 16px | 400 | 1.6 | -0.005em |208| UI | Manrope | 13px | 600 | 1.4 | 0 |209| Mono / Metric | JetBrains Mono | 12px | 500 | 1.0 | 0.04em uppercase |210 211Manrope across the board — geometric, soft-cornered, calm. Three weights: 400 / 600 / 700.212 213## 4. Buttons214 215### Primary (Periwinkle Pill)216```css217background: #6c7cff;218color: #ffffff;219padding: 10px 20px;220border-radius: 9999px;221box-shadow: rgba(108,124,255,0.22) 0 6px 18px -6px;222```223 224### Secondary (Glass Pill)225- Glass surface (`rgba(255,255,255,0.65)`), backdrop-blur, 1px hairline at 8% ink226- Same pill shape, ink text227 228### Outline & Ghost229- Same pill shape — outline is 1px hairline at 14% ink, ghost has no border at all230 231## 5. Cards232 233Every card is a glass pane:234```css235background: rgba(255,255,255,0.62);236backdrop-filter: blur(28px) saturate(180%);237border: 1px solid rgba(26,29,44,0.06);238box-shadow:239 rgba(26,29,44,0.06) 0 1px 0 inset,240 rgba(26,29,44,0.04) 0 2px 12px -4px;241border-radius: 22px;242```243 244The 1px inset highlight at the top is what sells the glass — without it, the pane reads as flat white-over-color.245 246## 6. Charts247 248Rounded bars (4px corner) with 12px gap. One bar in periwinkle, others in 14% ink. Line charts at 1.5px in periwinkle with a 10% fill underneath, ending in a small dot marker. No gridlines — the glass surface carries the rhythm.249 250## 7. Tabs251 252Pill tabs. Active = periwinkle background, white text. Inactive = no background, ink-secondary text. Hover = 12% periwinkle wash.253 254## 8. Spacing255 256- Base 4px257- Scale: `4, 8, 12, 16, 20, 24, 32, 48, 64, 80`258- Section padding: 80px desktop, 40px mobile — glass needs negative space to breathe259 260## 9. Do's & don'ts261 262✅ **Do**263- Use real `backdrop-filter` with both blur AND saturate — saturation is what makes it feel glass, not opacity264- Hold the backdrop to soft tonal mesh, never a hard 2-color gradient265- Use the periwinkle exactly once per screen — primary CTA OR active tab, not both266- Keep the 1px inset highlight on every card — that is the glass267 268❌ **Don't**269- Stack glass on glass — one pane per layer, never nested270- Use a second accent color — periwinkle alone271- Use sharp corners — every surface is 16-22px or pill272- Skip backdrop-filter and fake it with white opacity — the depth disappears273 274---275 276## Tokens277 278> Generated from the same source the live preview renders from.279> Treat the values below as the contract — never substitute approximations.280 281### Colors282 283| Role | Value |284|-----------|-------|285| primary | `#1a1d2c` |286| secondary | `#5a5f73` |287| tertiary | `#1a1d2c` |288| neutral | `#eef0f7` |289| surface | `rgba(255,255,255,0.62)` |290 291### Typography292 293- **Display:** Manrope294- **Body:** Manrope295- **Mono:** JetBrains Mono296 297| Role | size / leading / weight / tracking |298|------|------------------------------------|299| Hero | 3.75rem / 1.04 / 700 / -0.035em |300| H1 | 2.5rem / 1.12 / 700 / -0.025em |301| H2 | 1.625rem / 1.25 / 600 / -0.02em |302| Body | 1rem / 1.6 / 400 / -0.005em |303 304### Radius305 306- sm: `10px`307- md: `16px`308- lg: `22px`309- pill: `9999px`310 311### Shadows312 313- **card:** `rgba(26,29,44,0.06) 0 1px 0 inset, rgba(26,29,44,0.04) 0 2px 12px -4px, rgba(26,29,44,0.06) 0 0 0 1px`314- **button:** `rgba(108,124,255,0.22) 0 6px 18px -6px`315 316### Borders317 318- **card:** `1px solid rgba(26,29,44,0.06)`319- **divider:** `rgba(26,29,44,0.06)`320 321### Buttons322 323Four variants, each fully tokenized. The preview renders from these exact values.324 325#### Primary326 327| Property | Value |328|----------|-------|329| shape | `pill` |330| background | `#6c7cff` |331| color | `#ffffff` |332| border | `none` |333| padding | `10px 20px` |334| fontWeight | `600` |335| fontSize | `0.875rem` |336| shadow | `rgba(108,124,255,0.22) 0 6px 18px -6px` |337 338#### Secondary339 340| Property | Value |341|----------|-------|342| shape | `pill` |343| background | `rgba(255,255,255,0.65)` |344| color | `#1a1d2c` |345| border | `1px solid rgba(26,29,44,0.08)` |346| padding | `10px 20px` |347| fontWeight | `600` |348| fontSize | `0.875rem` |349 350#### Outline351 352| Property | Value |353|----------|-------|354| shape | `pill` |355| background | `transparent` |356| color | `#1a1d2c` |357| border | `1px solid rgba(26,29,44,0.14)` |358| padding | `10px 20px` |359| fontWeight | `600` |360| fontSize | `0.875rem` |361 362#### Ghost363 364| Property | Value |365|----------|-------|366| shape | `pill` |367| background | `transparent` |368| color | `#5a5f73` |369| border | `none` |370| padding | `10px 16px` |371| fontWeight | `600` |372| fontSize | `0.875rem` |373 374### Charts375 376| Property | Value |377|----------|-------|378| variant | `rounded-bars` |379| strokeWidth | `1.5` |380| fillOpacity | `0.1` |381| gridlines | `false` |382| barGap | `12px` |383| highlight | `single` |384| dotMarker | `true` |385 386---387 388## Pro tokens389 390> Production-fidelity tokens. States, density, motion, elevation,391> content rules and a measured WCAG contract — derived from the392> resting tokens unless explicitly authored.393 394### States395 396#### Button397 398- **hover** — shadow: `0 8px 24px -10px rgba(26, 29, 44, 0.35)`, transform: `translateY(-1px)`, filter: `brightness(1.02)`399- **focus** — outline: `2px solid rgba(26, 29, 44, 0.4)`, outline-offset: `3px`400- **active** — transform: `translateY(0) scale(0.98)`401- **disabled** — opacity: `0.4`, filter: `saturate(0.5)`402- **loading** — opacity: `0.65`403- **selected** — bg: `rgba(26, 29, 44, 0.18)`, color: `#1a1d2c`404 405#### Input406 407- **hover** — bg: `rgba(26, 29, 44, 0.03)`, border: `1px solid rgba(26, 29, 44, 0.4)`408- **focus** — border: `1px solid rgba(26, 29, 44, 0.6)`, shadow: `0 0 0 4px rgba(26, 29, 44, 0.12)`409- **disabled** — opacity: `0.4`410- **error** — border: `1px solid rgba(244,114,182,0.7)`, shadow: `0 0 0 4px rgba(244,114,182,0.15)`411 412#### Card413 414- **hover** — shadow: `0 16px 40px -16px rgba(26, 29, 44, 0.3)`, transform: `translateY(-3px)`415- **selected** — bg: `rgba(26, 29, 44, 0.04)`, border: `1px solid rgba(26, 29, 44, 0.5)`416- **dragging** — transform: `scale(1.03) rotate(-0.8deg)`, opacity: `0.92`417 418#### Tab419 420- **hover** — bg: `rgba(26, 29, 44, 0.08)`, color: `#1a1d2c`421- **focus** — outline: `2px solid rgba(26, 29, 44, 0.4)`, outline-offset: `2px`422- **selected** — bg: `rgba(26, 29, 44, 0.16)`, color: `#1a1d2c`423 424### Density425 426| Mode | padding × | row × | body | radius × | Use for |427|------|-----------|-------|------|----------|---------|428| compact | 0.72 | 0.78 | 0.8125rem | 0.85 | Information-dense — tables, IDEs, dashboards |429| comfortable | 1 | 1 | 0.9375rem | — | Default — most product UI |430| spacious | 1.35 | 1.3 | 1rem | 1.15 | Editorial — marketing, long-form, settings |431 432### Motion433 434**Signature — Soft fade.** Long, gentle transitions with a symmetric easing curve. Motion is calming, never intrusive.435 436```css437transition: all 400ms cubic-bezier(0.45, 0.05, 0.55, 0.95);438```439 440| Token | Value |441|-------|-------|442| duration.instant | `120ms` |443| duration.fast | `240ms` |444| duration.base | `400ms` |445| duration.slow | `600ms` |446| easing.standard | `cubic-bezier(0.45, 0.05, 0.55, 0.95)` |447| easing.decelerate | `cubic-bezier(0.0, 0, 0.2, 1)` |448| easing.accelerate | `cubic-bezier(0.4, 0, 1, 1)` |449| easing.spring | `cubic-bezier(0.45, 1.4, 0.55, 1)` |450 451### Elevation452 453Five-level scale, system-specific recipe.454 455| Level | Shadow | Recipe |456|-------|--------|--------|457| level0 | `none` | Flat — the tone separates, not the shadow. |458| level1 | `0 2px 6px -2px rgba(26, 29, 44, 0.12)` | Soft tinted lift. |459| level2 | `0 8px 24px -10px rgba(26, 29, 44, 0.2)` | Floating card — pastel-tinted shadow. |460| level3 | `0 16px 48px -16px rgba(26, 29, 44, 0.28)` | Sheet — visible tinted glow. |461| level4 | `0 32px 80px -24px rgba(26, 29, 44, 0.4)` | Modal — tinted wash, scrim required. |462 463### Content464 465- **measure:** `64ch` (max line length for body prose)466- **paragraph spacing:** `1.35em`467- **list indent:** `1.5em`468- **list gap:** `0.6em`469- **link:** color `#1a1d2c`, underline `hover`470- **blockquote:** border `2px solid rgba(26, 29, 44, 0.5)`, padding `0.9em 1.2em`471- **code:** background `rgba(26, 29, 44, 0.1)`, color `#1a1d2c`472 473### Accessibility (WCAG 2.1)474 475**Overall:** AA476 477| Pair | Ratio | Required | Grade | Suggested fix |478|------|-------|----------|-------|---------------|479| Body text on surface | 16.72:1 | AA | AAA | — |480| Body text on canvas | 14.68:1 | AA | AAA | — |481| Muted text on surface | 6.33:1 | AA | AA | — |482| Accent on surface | 16.72:1 | AA-Large | AAA | — |483| Accent on canvas | 14.68:1 | AA-Large | AAA | — |484 # CLAUDE.md Reference @DESIGN.md for all styling decisions. Apply tokens strictly — do not introduce colors, fonts, or radii outside the system. When in doubt, prefer the values declared in DESIGN.md frontmatter.<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" />npm install lucide-react// tailwind.config.jsexport default { theme: { extend: { fontFamily: { display: ['"Manrope"', 'serif'], sans: ['"Manrope"', 'sans-serif'], mono: ['"JetBrains Mono"', 'monospace'], }, colors: { primary: '#1a1d2c', secondary: '#5a5f73', accent: '#1a1d2c', neutral: '#eef0f7', surface: 'rgba(255,255,255,0.62)', }, borderRadius: { sm: '10px', md: '16px', lg: '22px', }, }, },};The design.md house style — Source Serif 4 with blue italic accent words, soft pastel mesh background (peach, lavender, mint), translucent glass panes with hairline borders, and a single deep editorial blue pill CTA.
Dark graphite glassmorphism — heavy 48px backdrop blur on near-opaque graphite panes, hairline pewter borders, and brushed-silver text accents. No color, no glow, no aurora. Just clean machined glass over a flat charcoal canvas with subtle metallic gradients on display type.