Dark glass. Deep midnight canvas with a faint indigo-violet aurora behind; cards float as smoked glass panes with 32px backdrop-blur and a faint inset top highlight. Depth and theater without going gaudy.
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.
1---2name: "Obsidian Glass"3description: "Dark glass. Deep midnight canvas with a faint indigo-violet aurora behind; cards float as smoked glass panes with 32px backdrop-blur and a faint inset top highlight. Depth and theater without going gaudy."4tags: [glass, dark, premium, minimal, modern]5colors:6 primary: "#ECEDF2"7 secondary: "#9298B0"8 tertiary: "#8B95FF"9 neutral: "#0B0C14"10 surface: "#13141E"11typography:12 display: "Inter Tight"13 body: Inter14 mono: "JetBrains Mono"15 scale:16 hero: "4.5rem / 1.05 / 600 / -0.035em"17 h1: "2.625rem / 1.1 / 600 / -0.03em"18 h2: "1.5rem / 1.3 / 600 / -0.015em"19 body: "1rem / 1.65 / 400 / -0.005em"20radius:21 sm: 12px22 md: 18px23 lg: 24px24 pill: 9999px25shadows:26 card: "0 32px 80px -32px rgba(0, 0, 0, 0.55), 0 2px 8px -4px rgba(0, 0, 0, 0.30)"27 button: "0 12px 32px -16px rgba(139, 149, 255, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.18)"28borders:29 card: "1px solid rgba(255, 255, 255, 0.10)"30 divider: "rgba(255, 255, 255, 0.08)"31glass:32 surface: "rgba(255, 255, 255, 0.06)"33 blur: 32px34 saturate: 180%35 border: "1px solid rgba(255, 255, 255, 0.10)"36 shadow: "0 32px 80px -32px rgba(0, 0, 0, 0.55), 0 2px 8px -4px rgba(0, 0, 0, 0.30)"37 inner_highlight: "inset 0 1px 0 rgba(255, 255, 255, 0.12)"38 backdrop: "radial-gradient(at 14% 18%, rgba(99, 102, 241, 0.32) 0px, transparent 45%), radial-gradient(at 86% 14%, rgba(139, 92, 246, 0.26) 0px, transparent 50%), radial-gradient(at 78% 88%, rgba(59, 130, 246, 0.22) 0px, transparent 55%)"39buttons:40 primary:41 background: linear-gradient(180deg, #9DA6FF 0%, #6E7BFF 100%)42 color: #0B0C1443 border: 1px solid rgba(255, 255, 255, 0.20)44 shape: pill45 padding: 12px 24px46 font: 600 / 0.9375rem / -0.005em47 shadow: 0 12px 32px -16px rgba(139, 149, 255, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.35)48 secondary:49 background: rgba(255, 255, 255, 0.06)50 color: #ECEDF251 border: 1px solid rgba(255, 255, 255, 0.12)52 shape: pill53 padding: 12px 24px54 font: 500 / 0.9375rem / -0.005em55 backdrop_blur: 20px56 backdrop_saturate: 180%57 outline:58 background: transparent59 color: #ECEDF260 border: 1px solid rgba(255, 255, 255, 0.18)61 shape: pill62 padding: 11px 22px63 font: 500 / 0.9375rem / -0.005em64 ghost:65 background: transparent66 color: #9298B067 border: none68 shape: pill69 padding: 11px 6px70 font: 500 / 0.9375rem / -0.005em71 hover: underline72charts:73 variant: area74 stroke_width: 275 fill_opacity: 0.2276 gridlines: false77 highlight: last78 dot_marker: true79 axis_color: "#9298B0"80 palette: ["#8B95FF", "#A5ADFF", "#C9CEFF"]81fonts_url: "https://fonts.googleapis.com/css2?family=Inter+Tight:wght@400;500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400&display=swap"82dependencies: ["lucide-react"]83---84 85# Obsidian Glass86 87## AI Build Instructions88 89> **Read this section before writing any code.** The rules below90> are non-negotiable. Every value used in the UI must come from this91> file's frontmatter — never substitute, approximate, or invent new92> colors, fonts, radii, or shadows. If a value is missing, ask the93> user before adding one.94 95### 1 · Your role96 97You are building UI for a project that has adopted **Obsidian Glass** as its98design system. Treat `DESIGN.md` as the single source of truth.99Your job is to translate the user's product requirements into100components and pages that look like they were designed by the same101person who authored this file.102 103### 2 · Token compliance104 105- Pull every color, font family, radius, shadow, and spacing value106 from the frontmatter at the top of this file.107- Use semantic roles (e.g. `primary`, `accent`, `muted`) — never108 hard-code hex values that bypass the system.109- When a token can be expressed as a CSS variable, declare it once110 in your global stylesheet and reference it everywhere downstream.111- The Google Fonts `<link>` is provided in the Typography section.112 Add it to `<head>` before any component renders.113 114### 3 · Component recipes115 116Use these recipes verbatim when building the corresponding component.117 118#### Buttons119 120Four variants are defined. Pick one — never blend variants or invent a fifth.121 122- **Primary** — pill shape, bg `linear-gradient(180deg, #9DA6FF 0%, #6E7BFF 100%)`, text `#0B0C14`, border `1px solid rgba(255, 255, 255, 0.20)`, padding `12px 24px`, weight `600`, shadow `0 12px 32px -16px rgba(139, 149, 255, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.35)`.123- **Secondary** — pill shape, bg `rgba(255, 255, 255, 0.06)`, text `#ECEDF2`, border `1px solid rgba(255, 255, 255, 0.12)`, padding `12px 24px`, weight `500`.124- **Outline** — pill shape, text `#ECEDF2`, border `1px solid rgba(255, 255, 255, 0.18)`, padding `11px 22px`, weight `500`.125- **Ghost** — pill shape, text `#9298B0`, padding `11px 6px`, weight `500`.126 127Reach for **primary** as the single dominant CTA per screen.128**Secondary** for the supporting action. **Outline** for tertiary129actions in toolbars. **Ghost** for inline links and table actions.130 131#### Cards132 133- Background: `#13141E`134- Border: `1px solid rgba(255, 255, 255, 0.10)`135- Shadow: `0 32px 80px -32px rgba(0, 0, 0, 0.55), 0 2px 8px -4px rgba(0, 0, 0, 0.30)`136- Radius: `radius.lg` (`24px`)137- Internal padding: `20px` for compact cards, `24–28px` for content cards.138 139> This system ships a **glass treatment** — see the Glass token table.140> Apply `backdrop-filter: blur(32px)` to translucent panes.141> The page must have a backdrop (gradient mesh / blurred orbs) for glass to refract.142 143#### Charts144 145- Bar/line variant: `area`146- No gridlines — let the bars/lines carry the data.147- Highlight strategy: `last` — emphasize a single bar/point per chart.148- Use the declared palette in order: `#8B95FF`, `#A5ADFF`, `#C9CEFF`.149 150#### Typography pairings151 152- **Display (`Inter Tight`)** — h1, h2, hero headlines, brand wordmarks.153- **Body (`Inter`)** — paragraphs, labels, button text, form inputs.154- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.155 156### 4 · Hard constraints157 158Never do any of the following without explicit instruction from the user:159 160- Introduce a new color, font, radius, or shadow that isn't declared above.161- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).162- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.163- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.164- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.165 166### 5 · Before you finish — verify167 168Run through this checklist for every screen you produce:169 170- [ ] Every color used appears in the Colors table above.171- [ ] Headlines use the display font; body copy uses the body font.172- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).173- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.174- [ ] Cards and dividers use the declared border + shadow tokens.175- [ ] No values were invented; if you needed something missing, you stopped and asked.176 177---178 179## Overview180Obsidian Glass is dark glass. The page sits on a deep midnight canvas with a faint indigo-violet aurora — three soft radial blobs in indigo, violet, and blue — painted into the background. Cards float above the aurora as smoked glass panes: 32px backdrop-blur, 6% white surface, 1px white-alpha hairline, and a faint inset top highlight that reads as a top-edge gloss in the dark.181 182The glass is the entire system. Type, color, buttons — all calibrated to let the smoked panes do the work. Built for night-mode AI tools, premium dashboards, music and media platforms, anything that wants depth and theater without going gaudy.183 184## The Smoked Glass Recipe185Cards are not "dark with a shadow." They are smoked glass over a chromatic backdrop:186 187```css188.obsidian-pane {189 background: rgba(255, 255, 255, 0.06);190 backdrop-filter: blur(32px) saturate(180%);191 -webkit-backdrop-filter: blur(32px) saturate(180%);192 border: 1px solid rgba(255, 255, 255, 0.10);193 box-shadow:194 inset 0 1px 0 rgba(255, 255, 255, 0.12),195 0 32px 80px -32px rgba(0, 0, 0, 0.55),196 0 2px 8px -4px rgba(0, 0, 0, 0.30);197 border-radius: 24px;198}199```200 201The page MUST have the indigo-violet aurora behind it for the glass to mean anything:202 203```css204body {205 background:206 radial-gradient(at 14% 18%, rgba(99,102,241,0.32) 0, transparent 45%),207 radial-gradient(at 86% 14%, rgba(139,92,246,0.26) 0, transparent 50%),208 radial-gradient(at 78% 88%, rgba(59,130,246,0.22) 0, transparent 55%),209 #0B0C14;210}211```212 213Without the aurora, the glass collapses to "dark grey with a border." The two are inseparable.214 215## Color216- **Moonlight #ECEDF2** — primary text.217- **Lavender-grey #9298B0** — secondary text, axis labels.218- **Periwinkle #8B95FF** — the only chromatic accent. Primary CTA, link hover, chart line.219- **Midnight #0B0C14** — page canvas.220- **Smoked glass #FFFFFF @ 6%** — card surface (translucent over the aurora).221 222The aurora uses three soft tints of indigo / violet / blue — never anything warm.223 224## Typography225- **Display: Inter Tight 600** at 4.5rem with -3.5% tracking.226- **Body: Inter 400** at 1rem with 1.65 leading.227 228| Role | Font | Size | Weight | Tracking |229|------|------|------|--------|----------|230| Hero | Inter Tight | 4.5rem | 600 | -0.035em |231| H1 | Inter Tight | 2.625rem | 600 | -0.03em |232| H2 | Inter Tight | 1.5rem | 600 | -0.015em |233| Body | Inter | 1rem | 400 | -0.005em / 1.65 |234 235## Geometry236- **Radii: 12 / 18 / 24.** Glass needs generous corners to read as a pane.237- **Pill buttons** for primary + secondary.238- **Section gap: 120px** desktop, 72px mobile. The aurora needs room to breathe.239 240## Buttons241- **Primary** — vertical periwinkle gradient with an inner top-edge gloss. Pill, midnight label at 600.242- **Secondary** — smoked glass pill (the same recipe as cards, scaled down). Backdrop-blur 20px.243- **Outline** — bare hairline pill at 18% white.244- **Ghost** — bare lavender-grey label, hover underline.245 246## Cards247Smoked glass panes — see the recipe above. Radius 24px. Padding 32px minimum. Cards never sit flush; always 24-32px gap so the aurora reads between them.248 249## Charts & Data250Periwinkle area chart, 2px stroke, 22% fill opacity, no gridlines. End-of-line dot. The chart sits inside a glass card, never on the bare midnight.251 252## Do's and Don'ts253- ✅ The indigo-violet aurora is mandatory. Without it the glass dies.254- ✅ Cards always include the inner top-edge highlight at 12% — that's what reads as polished pane in the dark.255- ✅ One chromatic accent only — periwinkle. Everything else is moonlight/lavender-grey.256- ✅ Generous radii (18-24px). Glass at sharp corners reads as plastic.257- ❌ No warm tints in the aurora. The system is strictly cool.258- ❌ No solid dark cards. If a card isn't smoked glass, it's not in the system.259- ❌ No hard drop shadows beyond the soft black ambient.260- ❌ No second chromatic accent. Periwinkle is the only chroma allowed.261 262---263 264## Tokens265 266> Generated from the same source the live preview renders from.267> Treat the values below as the contract — never substitute approximations.268 269### Colors270 271| Role | Value |272|-----------|-------|273| primary | `#ECEDF2` |274| secondary | `#9298B0` |275| tertiary | `#8B95FF` |276| neutral | `#0B0C14` |277| surface | `#13141E` |278 279### Typography280 281- **Display:** Inter Tight282- **Body:** Inter283- **Mono:** JetBrains Mono284 285| Role | size / leading / weight / tracking |286|------|------------------------------------|287| Hero | 4.5rem / 1.05 / 600 / -0.035em |288| H1 | 2.625rem / 1.1 / 600 / -0.03em |289| H2 | 1.5rem / 1.3 / 600 / -0.015em |290| Body | 1rem / 1.65 / 400 / -0.005em |291 292### Radius293 294- sm: `12px`295- md: `18px`296- lg: `24px`297- pill: `9999px`298 299### Shadows300 301- **card:** `0 32px 80px -32px rgba(0, 0, 0, 0.55), 0 2px 8px -4px rgba(0, 0, 0, 0.30)`302- **button:** `0 12px 32px -16px rgba(139, 149, 255, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.18)`303 304### Borders305 306- **card:** `1px solid rgba(255, 255, 255, 0.10)`307- **divider:** `rgba(255, 255, 255, 0.08)`308 309### Glass310 311Translucent panes with backdrop-filter — the preview renders cards from these exact values.312 313| Property | Value |314|----------|-------|315| surface | `rgba(255, 255, 255, 0.06)` |316| blur | `32px` |317| saturate | `180%` |318| border | `1px solid rgba(255, 255, 255, 0.10)` |319| shadow | `0 32px 80px -32px rgba(0, 0, 0, 0.55), 0 2px 8px -4px rgba(0, 0, 0, 0.30)` |320| innerHighlight | `inset 0 1px 0 rgba(255, 255, 255, 0.12)` |321| backdrop | `radial-gradient(at 14% 18%, rgba(99, 102, 241, 0.32) 0px, transparent 45%), radial-gradient(at 86% 14%, rgba(139, 92, 246, 0.26) 0px, transparent 50%), radial-gradient(at 78% 88%, rgba(59, 130, 246, 0.22) 0px, transparent 55%)` |322 323### Buttons324 325Four variants, each fully tokenized. The preview renders from these exact values.326 327#### Primary328 329| Property | Value |330|----------|-------|331| shape | `pill` |332| background | `linear-gradient(180deg, #9DA6FF 0%, #6E7BFF 100%)` |333| color | `#0B0C14` |334| border | `1px solid rgba(255, 255, 255, 0.20)` |335| padding | `12px 24px` |336| fontWeight | `600` |337| fontSize | `0.9375rem` |338| tracking | `-0.005em` |339| shadow | `0 12px 32px -16px rgba(139, 149, 255, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.35)` |340 341#### Secondary342 343| Property | Value |344|----------|-------|345| shape | `pill` |346| background | `rgba(255, 255, 255, 0.06)` |347| color | `#ECEDF2` |348| border | `1px solid rgba(255, 255, 255, 0.12)` |349| padding | `12px 24px` |350| fontWeight | `500` |351| fontSize | `0.9375rem` |352| tracking | `-0.005em` |353| backdropBlur | `20px` |354| backdropSaturate | `180%` |355 356#### Outline357 358| Property | Value |359|----------|-------|360| shape | `pill` |361| background | `transparent` |362| color | `#ECEDF2` |363| border | `1px solid rgba(255, 255, 255, 0.18)` |364| padding | `11px 22px` |365| fontWeight | `500` |366| fontSize | `0.9375rem` |367| tracking | `-0.005em` |368 369#### Ghost370 371| Property | Value |372|----------|-------|373| shape | `pill` |374| background | `transparent` |375| color | `#9298B0` |376| border | `none` |377| padding | `11px 6px` |378| fontWeight | `500` |379| fontSize | `0.9375rem` |380| tracking | `-0.005em` |381| hoverHint | `underline` |382 383### Charts384 385| Property | Value |386|----------|-------|387| variant | `area` |388| strokeWidth | `2` |389| fillOpacity | `0.22` |390| gridlines | `false` |391| highlight | `last` |392| dotMarker | `true` |393| axisColor | `#9298B0` |394| palette | `#8B95FF`, `#A5ADFF`, `#C9CEFF` |395 # 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=Inter+Tight:wght@400;500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400&display=swap" />npm install lucide-react// tailwind.config.jsexport default { theme: { extend: { fontFamily: { display: ['"Inter Tight"', 'serif'], sans: ['"Inter"', 'sans-serif'], mono: ['"JetBrains Mono"', 'monospace'], }, colors: { primary: '#ECEDF2', secondary: '#9298B0', accent: '#8B95FF', neutral: '#0B0C14', surface: '#13141E', }, borderRadius: { sm: '12px', md: '18px', lg: '24px', }, }, },};A low-sun grainy gradient that runs deep ember to marigold with real fractal-noise grain. Cream surface, Inter Tight display in heavy 800, generous slabs of negative space, and the gradient burns through exactly the primary CTA, the featured tile, and the active chart bar. A warm, restrained bloom — never sunset cliché.
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.
Luxury productivity. Deep purple hero against pristine white, non-standard variable weight 460/540, ultra-tight 0.96 leading, warm cream CTAs, lavender as the only accent.
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.