Tonal elevation, dynamic-color purple primary, full-rounded buttons, Roboto Flex throughout. Faithful to the modern tonal-surface spec — generous, accessible, dependable for product UI.
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: "Lumen Material"3description: "Tonal elevation, dynamic-color purple primary, full-rounded buttons, Roboto Flex throughout. Faithful to the modern tonal-surface spec — generous, accessible, dependable for product UI."4tags: [saas, material, playful, minimal, modern]5colors:6 primary: "#1D1B20"7 secondary: "#79747E"8 tertiary: "#6750A4"9 neutral: "#F7F2FA"10 surface: "#FEF7FF"11typography:12 display: "Roboto Flex"13 body: "Roboto Flex"14 mono: "Roboto Mono"15 scale:16 hero: "3.5625rem / 1.12 / 400 / -0.015em"17 h1: "2rem / 1.25 / 400 / 0"18 h2: "1.375rem / 1.27 / 500 / 0"19 body: "1rem / 1.5 / 400 / 0.03125em"20radius:21 sm: 8px22 md: 12px23 lg: 16px24 pill: 9999px25shadows:26 card: "0 1px 2px rgba(0, 0, 0, 0.30), 0 1px 3px 1px rgba(0, 0, 0, 0.15)"27 button: "0 1px 3px rgba(0, 0, 0, 0.30), 0 4px 8px 3px rgba(0, 0, 0, 0.15)"28borders:29 card: "1px solid #CAC4D0"30 divider: "#CAC4D0"31buttons:32 primary:33 background: #6750A434 color: #FFFFFF35 border: none36 shape: pill37 padding: 10px 24px38 font: body / 500 / 0.875rem / 0.00714em39 shadow: 0 1px 2px rgba(0, 0, 0, 0.30), 0 1px 3px 1px rgba(0, 0, 0, 0.15)40 hover: lift41 secondary:42 background: #E8DEF843 color: #1D192B44 border: none45 shape: pill46 padding: 10px 24px47 font: body / 500 / 0.875rem / 0.00714em48 outline:49 background: transparent50 color: #6750A451 border: 1px solid #79747E52 shape: pill53 padding: 9px 24px54 font: body / 500 / 0.875rem / 0.00714em55 ghost:56 background: transparent57 color: #6750A458 border: none59 shape: pill60 padding: 10px 12px61 font: body / 500 / 0.875rem / 0.00714em62 hover: glow63charts:64 variant: "rounded-bars"65 gridlines: true66 bar_radius: 4px67 bar_gap: 12px68 highlight: single69 axis_color: "#79747E"70 palette: ["#6750A4", "#625B71", "#7D5260"]71fonts_url: "https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,400;8..144,500;8..144,600;8..144,700&family=Roboto+Mono:wght@400;500&display=swap"72dependencies: ["lucide-react"]73---74 75# Lumen Material76 77## AI Build Instructions78 79> **Read this section before writing any code.** The rules below80> are non-negotiable. Every value used in the UI must come from this81> file's frontmatter — never substitute, approximate, or invent new82> colors, fonts, radii, or shadows. If a value is missing, ask the83> user before adding one.84 85### 1 · Your role86 87You are building UI for a project that has adopted **Lumen Material** as its88design system. Treat `DESIGN.md` as the single source of truth.89Your job is to translate the user's product requirements into90components and pages that look like they were designed by the same91person who authored this file.92 93### 2 · Token compliance94 95- Pull every color, font family, radius, shadow, and spacing value96 from the frontmatter at the top of this file.97- Use semantic roles (e.g. `primary`, `accent`, `muted`) — never98 hard-code hex values that bypass the system.99- When a token can be expressed as a CSS variable, declare it once100 in your global stylesheet and reference it everywhere downstream.101- The Google Fonts `<link>` is provided in the Typography section.102 Add it to `<head>` before any component renders.103 104### 3 · Component recipes105 106Use these recipes verbatim when building the corresponding component.107 108#### Buttons109 110Four variants are defined. Pick one — never blend variants or invent a fifth.111 112- **Primary** — pill shape, bg `#6750A4`, text `#FFFFFF`, padding `10px 24px`, weight `500`, shadow `0 1px 2px rgba(0, 0, 0, 0.30), 0 1px 3px 1px rgba(0, 0, 0, 0.15)`.113- **Secondary** — pill shape, bg `#E8DEF8`, text `#1D192B`, padding `10px 24px`, weight `500`.114- **Outline** — pill shape, text `#6750A4`, border `1px solid #79747E`, padding `9px 24px`, weight `500`.115- **Ghost** — pill shape, text `#6750A4`, padding `10px 12px`, weight `500`.116 117Reach for **primary** as the single dominant CTA per screen.118**Secondary** for the supporting action. **Outline** for tertiary119actions in toolbars. **Ghost** for inline links and table actions.120 121#### Cards122 123- Background: `#FEF7FF`124- Border: `1px solid #CAC4D0`125- Shadow: `0 1px 2px rgba(0, 0, 0, 0.30), 0 1px 3px 1px rgba(0, 0, 0, 0.15)`126- Radius: `radius.lg` (`16px`)127- Internal padding: `20px` for compact cards, `24–28px` for content cards.128 129#### Charts130 131- Bar/line variant: `rounded-bars`132- Bar radius: `4px`133- Highlight strategy: `single` — emphasize a single bar/point per chart.134- Use the declared palette in order: `#6750A4`, `#625B71`, `#7D5260`.135 136#### Typography pairings137 138- **Display (`Roboto Flex`)** — h1, h2, hero headlines, brand wordmarks.139- **Body (`Roboto Flex`)** — paragraphs, labels, button text, form inputs.140- **Mono (`Roboto Mono`)** — code, eyebrows, metadata, numerals in tables.141 142### 4 · Hard constraints143 144Never do any of the following without explicit instruction from the user:145 146- Introduce a new color, font, radius, or shadow that isn't declared above.147- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).148- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.149- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.150- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.151 152### 5 · Before you finish — verify153 154Run through this checklist for every screen you produce:155 156- [ ] Every color used appears in the Colors table above.157- [ ] Headlines use the display font; body copy uses the body font.158- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).159- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.160- [ ] Cards and dividers use the declared border + shadow tokens.161- [ ] No values were invented; if you needed something missing, you stopped and asked.162 163---164 165## Overview166Lumen Material is a faithful implementation of the modern tonal-elevation product spec. It uses dynamic-color purple **#6750A4** as the primary, tonal surface containers for elevation (instead of opacity overlays), full-rounded **9999px** buttons, and **Roboto Flex** as the single typeface across display and body. Cards rest on a tonal hierarchy — `surface` for the base, `surface-container-low` for the page canvas, with a 1px `outline-variant` hairline.167 168This is a system designed for product UI: it is generous, dependable, and accessible by construction. State layers, label-large typography, and 40px touch targets all match the spec.169 170## Color (tonal palette)171The system is built on the seven-role color spec. Surface tones replace the old opacity-overlay elevation model.172 173| Role | Token | Hex |174|------|-------|-----|175| Primary | `primary` | `#6750A4` |176| On-Primary | `on-primary` | `#FFFFFF` |177| Primary Container | `primary-container` | `#EADDFF` |178| On-Primary Container | `on-primary-container` | `#21005D` |179| Secondary | `secondary` | `#625B71` |180| Secondary Container | `secondary-container` | `#E8DEF8` |181| On-Secondary Container | `on-secondary-container` | `#1D192B` |182| Surface | `surface` | `#FEF7FF` |183| Surface Container Low | `surface-container-low` | `#F7F2FA` |184| On-Surface | `on-surface` | `#1D1B20` |185| Outline | `outline` | `#79747E` |186| Outline Variant | `outline-variant` | `#CAC4D0` |187 188## Typography189**Roboto Flex** at every level. The type scale follows the published display/headline/title/body roles.190 191| Role | Size | Weight | Leading | Tracking |192|------|------|--------|---------|----------|193| Display Large | 3.5625rem | 400 | 1.12 | -0.015em |194| Headline Large | 2rem | 400 | 1.25 | 0 |195| Title Large | 1.375rem | 500 | 1.27 | 0 |196| Body Large | 1rem | 400 | 1.50 | +0.03125em |197| Label Large | 0.875rem | 500 | 1.43 | +0.00714em |198 199Display and headline run at **weight 400** — the spec is intentionally light at the top of the scale.200 201## Shape202- **Small:** 8px (chips, dense buttons)203- **Medium:** 12px (cards, sheets)204- **Large:** 16px (dialogs, large cards)205- **Full:** 9999px (buttons, FAB)206 207Buttons are **pills**. Cards are **12px medium**. Sharp corners are out of system.208 209## Elevation (tonal)210The system uses tonal surface colors for elevation rather than opacity overlays. Six elevation levels exist; the resting card uses Level 1.211 212- **Level 0:** `surface` — flat213- **Level 1:** key shadow `0 1px 2px rgba(0,0,0,0.30)` + ambient `0 1px 3px 1px rgba(0,0,0,0.15)`214- **Level 3:** `0 1px 3px rgba(0,0,0,0.30), 0 4px 8px 3px rgba(0,0,0,0.15)` — used on filled buttons and floating actions215 216## Buttons217Five canonical variants exist in the spec; this system ships four:218 219- **Filled** (primary) — purple background, white ink, level-1 shadow, full-rounded. The default high-emphasis CTA.220- **Filled tonal** (secondary) — `secondary-container` fill #E8DEF8 with on-secondary-container ink #1D192B. No shadow. Use when filled would compete with another primary.221- **Outlined** — 1px `outline` border #79747E, primary-color label. Medium emphasis.222- **Text** (ghost) — bare label in primary color with state-layer hover. Lowest emphasis, used inline.223 224All four are **full-rounded pills** (9999px). Touch height 40px. Label-large typography (14/500/+0.7px tracking).225 226## Charts & Data227Rounded bars (4px corner radius), 12px gap, primary color with faint `outline-variant` gridlines. The spec leans on subtle gridlines — they help with scan, they don't dominate. Axis labels in `outline` #79747E.228 229## State Layers230Interactive elements carry an 8% / 12% / 16% state layer for hover / focus / pressed in their own ink color. Implement as a translucent overlay, not as a separate fill — the underlying token color must remain readable.231 232## Do's and Don'ts233- ✅ Use tonal surface containers for elevation. Never use opacity overlays.234- ✅ Full-rounded pills for all buttons. 9999px is the spec.235- ✅ Keep Roboto Flex for both display and body — single-typeface clarity is intentional.236- ✅ Use `outline-variant` #CAC4D0 for hairline borders, never `outline` #79747E (that's for emphasis).237- ✅ Apply label-large typography on buttons (14/500/+0.7px). Don't shrink it.238- ❌ No sharp corners on buttons or cards. 8px is the floor.239- ❌ No bold display headlines — weight 400 is correct at hero size.240- ❌ Don't use the primary purple as a body color. It is for action and brand identity.241- ❌ Don't add drop-shadows beyond the published elevation levels.242 243---244 245## Tokens246 247> Generated from the same source the live preview renders from.248> Treat the values below as the contract — never substitute approximations.249 250### Colors251 252| Role | Value |253|-----------|-------|254| primary | `#1D1B20` |255| secondary | `#79747E` |256| tertiary | `#6750A4` |257| neutral | `#F7F2FA` |258| surface | `#FEF7FF` |259 260### Typography261 262- **Display:** Roboto Flex263- **Body:** Roboto Flex264- **Mono:** Roboto Mono265 266| Role | size / leading / weight / tracking |267|------|------------------------------------|268| Hero | 3.5625rem / 1.12 / 400 / -0.015em |269| H1 | 2rem / 1.25 / 400 / 0 |270| H2 | 1.375rem / 1.27 / 500 / 0 |271| Body | 1rem / 1.5 / 400 / 0.03125em |272 273### Radius274 275- sm: `8px`276- md: `12px`277- lg: `16px`278- pill: `9999px`279 280### Shadows281 282- **card:** `0 1px 2px rgba(0, 0, 0, 0.30), 0 1px 3px 1px rgba(0, 0, 0, 0.15)`283- **button:** `0 1px 3px rgba(0, 0, 0, 0.30), 0 4px 8px 3px rgba(0, 0, 0, 0.15)`284 285### Borders286 287- **card:** `1px solid #CAC4D0`288- **divider:** `#CAC4D0`289 290### Buttons291 292Four variants, each fully tokenized. The preview renders from these exact values.293 294#### Primary295 296| Property | Value |297|----------|-------|298| shape | `pill` |299| background | `#6750A4` |300| color | `#FFFFFF` |301| border | `none` |302| padding | `10px 24px` |303| fontFamily | `body` |304| fontWeight | `500` |305| fontSize | `0.875rem` |306| tracking | `0.00714em` |307| shadow | `0 1px 2px rgba(0, 0, 0, 0.30), 0 1px 3px 1px rgba(0, 0, 0, 0.15)` |308| hoverHint | `lift` |309 310#### Secondary311 312| Property | Value |313|----------|-------|314| shape | `pill` |315| background | `#E8DEF8` |316| color | `#1D192B` |317| border | `none` |318| padding | `10px 24px` |319| fontFamily | `body` |320| fontWeight | `500` |321| fontSize | `0.875rem` |322| tracking | `0.00714em` |323 324#### Outline325 326| Property | Value |327|----------|-------|328| shape | `pill` |329| background | `transparent` |330| color | `#6750A4` |331| border | `1px solid #79747E` |332| padding | `9px 24px` |333| fontFamily | `body` |334| fontWeight | `500` |335| fontSize | `0.875rem` |336| tracking | `0.00714em` |337 338#### Ghost339 340| Property | Value |341|----------|-------|342| shape | `pill` |343| background | `transparent` |344| color | `#6750A4` |345| border | `none` |346| padding | `10px 12px` |347| fontFamily | `body` |348| fontWeight | `500` |349| fontSize | `0.875rem` |350| tracking | `0.00714em` |351| hoverHint | `glow` |352 353### Charts354 355| Property | Value |356|----------|-------|357| variant | `rounded-bars` |358| gridlines | `true` |359| barRadius | `4px` |360| barGap | `12px` |361| highlight | `single` |362| axisColor | `#79747E` |363| palette | `#6750A4`, `#625B71`, `#7D5260` |364 # 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=Roboto+Flex:opsz,wght@8..144,400;8..144,500;8..144,600;8..144,700&family=Roboto+Mono:wght@400;500&display=swap" />npm install lucide-react// tailwind.config.jsexport default { theme: { extend: { fontFamily: { display: ['"Roboto Flex"', 'serif'], sans: ['"Roboto Flex"', 'sans-serif'], mono: ['"Roboto Mono"', 'monospace'], }, colors: { primary: '#1D1B20', secondary: '#79747E', accent: '#6750A4', neutral: '#F7F2FA', surface: '#FEF7FF', }, borderRadius: { sm: '8px', md: '12px', lg: '16px', }, }, },};A precision dark dev-tool surface. Near-black background, every divider a single 1px hairline at 8% white, Inter Display for headings and Geist Mono for IDs and timestamps with tabular-nums, a single electric mint accent reserved for active status pills and the primary CTA. Built for infrastructure dashboards, observability tools, and developer-platform marketing pages where the chrome itself reads as a precision instrument.
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.
Mid-tone soft glass. Warm dusty-sand canvas with a peach-and-rose aurora behind; cards float as cream-tinted frosted panes with 26px backdrop-blur and a faint inset top highlight. The mid-tone is the system.
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.