Approachable minimalism on warm white. Compressed Inter at -2.125px, whisper borders, multi-layer 4-stack shadows, and a single saturated blue 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.
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: "Warm Canvas"3description: "Approachable minimalism on warm white. Compressed Inter at -2.125px, whisper borders, multi-layer 4-stack shadows, and a single saturated blue accent."4tags: [minimal, warm, productivity, saas]5colors:6 primary: "#000000"7 secondary: "#615d59"8 tertiary: "#0075de"9 neutral: "#ffffff"10 surface: "#ffffff"11typography:12 display: Inter13 body: Inter14 mono: "JetBrains Mono"15 scale:16 hero: "4rem / 1 / 700 / -2.125px"17 h1: "3rem / 1 / 700 / -1.5px"18 h2: "1.625rem / 1.23 / 700 / -0.625px"19 body: "1rem / 1.5 / 400 / 0"20radius:21 sm: 4px22 md: 8px23 lg: 12px24 pill: 9999px25shadows:26 card: "rgba(0,0,0,0.04) 0 4px 18px, rgba(0,0,0,0.027) 0 2.025px 7.85px, rgba(0,0,0,0.02) 0 0.8px 2.93px, rgba(0,0,0,0.01) 0 0.175px 1.04px"27 button: "rgba(0,117,222,0.15) 0 4px 12px"28borders:29 card: "1px solid rgba(0,0,0,0.1)"30 divider: rgba(0,0,0,0.1)31buttons:32 primary:33 background: #2F2F2F34 color: #FFFFFF35 border: none36 shape: rounded37 padding: 8px 16px38 font: 500 / 0.875rem39 secondary:40 background: #F7F6F341 color: #2F2F2F42 border: 1px solid #E9E5DC43 shape: rounded44 padding: 8px 16px45 font: 500 / 0.875rem46 outline:47 background: transparent48 color: #2F2F2F49 border: 1px solid #2F2F2F50 shape: rounded51 padding: 8px 16px52 font: 500 / 0.875rem53 ghost:54 background: transparent55 color: #78767356 border: none57 shape: rounded58 padding: 8px 12px59 font: 500 / 0.875rem60charts:61 variant: stepped62 stroke_width: 263 fill_opacity: 0.1264 gridlines: true65 bar_gap: 0px66 highlight: single67 dot_marker: false68fonts_url: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400&display=swap"69dependencies: ["lucide-react"]70---71 72# Warm Canvas73 74## AI Build Instructions75 76> **Read this section before writing any code.** The rules below77> are non-negotiable. Every value used in the UI must come from this78> file's frontmatter — never substitute, approximate, or invent new79> colors, fonts, radii, or shadows. If a value is missing, ask the80> user before adding one.81 82### 1 · Your role83 84You are building UI for a project that has adopted **Warm Canvas** as its85design system. Treat `DESIGN.md` as the single source of truth.86Your job is to translate the user's product requirements into87components and pages that look like they were designed by the same88person who authored this file.89 90### 2 · Token compliance91 92- Pull every color, font family, radius, shadow, and spacing value93 from the frontmatter at the top of this file.94- Use semantic roles (e.g. `primary`, `accent`, `muted`) — never95 hard-code hex values that bypass the system.96- When a token can be expressed as a CSS variable, declare it once97 in your global stylesheet and reference it everywhere downstream.98- The Google Fonts `<link>` is provided in the Typography section.99 Add it to `<head>` before any component renders.100 101### 3 · Component recipes102 103Use these recipes verbatim when building the corresponding component.104 105#### Buttons106 107Four variants are defined. Pick one — never blend variants or invent a fifth.108 109- **Primary** — rounded shape, bg `#2F2F2F`, text `#FFFFFF`, padding `8px 16px`, weight `500`.110- **Secondary** — rounded shape, bg `#F7F6F3`, text `#2F2F2F`, border `1px solid #E9E5DC`, padding `8px 16px`, weight `500`.111- **Outline** — rounded shape, text `#2F2F2F`, border `1px solid #2F2F2F`, padding `8px 16px`, weight `500`.112- **Ghost** — rounded shape, text `#787673`, padding `8px 12px`, weight `500`.113 114Reach for **primary** as the single dominant CTA per screen.115**Secondary** for the supporting action. **Outline** for tertiary116actions in toolbars. **Ghost** for inline links and table actions.117 118#### Cards119 120- Background: `#ffffff`121- Border: `1px solid rgba(0,0,0,0.1)`122- Shadow: `rgba(0,0,0,0.04) 0 4px 18px, rgba(0,0,0,0.027) 0 2.025px 7.85px, rgba(0,0,0,0.02) 0 0.8px 2.93px, rgba(0,0,0,0.01) 0 0.175px 1.04px`123- Radius: `radius.lg` (`12px`)124- Internal padding: `20px` for compact cards, `24–28px` for content cards.125 126#### Charts127 128- Bar/line variant: `stepped`129- Highlight strategy: `single` — emphasize a single bar/point per chart.130 131#### Typography pairings132 133- **Display (`Inter`)** — h1, h2, hero headlines, brand wordmarks.134- **Body (`Inter`)** — paragraphs, labels, button text, form inputs.135- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.136 137### 4 · Hard constraints138 139Never do any of the following without explicit instruction from the user:140 141- Introduce a new color, font, radius, or shadow that isn't declared above.142- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).143- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.144- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.145- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.146 147### 5 · Before you finish — verify148 149Run through this checklist for every screen you produce:150 151- [ ] Every color used appears in the Colors table above.152- [ ] Headlines use the display font; body copy uses the body font.153- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).154- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.155- [ ] Cards and dividers use the declared border + shadow tokens.156- [ ] No values were invented; if you needed something missing, you stopped and asked.157 158---159 160## 1. Atmosphere161 162Warm Canvas embodies the philosophy of a great workspace: a blank canvas that gets out of your way. The system is built on warm neutrals rather than cold grays — distinctly approachable minimalism that feels like quality paper rather than sterile glass. The page background is pure white (`#ffffff`) but the text isn't pure black — it sits at `rgba(0,0,0,0.95)`, softening the read imperceptibly. The warm gray scale (`#f6f5f4`, `#31302e`, `#615d59`, `#a39e98`) carries subtle yellow-brown undertones, giving the interface a tactile, almost analog warmth.163 164A modified geometric sans is the backbone of the system. At display sizes (64px) it uses aggressive negative letter-spacing (-2.125px), creating headlines that feel compressed and precise. The weight range is broader than typical: 400 for body, 500 for UI, 600 for semi-bold labels, 700 for display headings. OpenType features `"lnum"` and `"locl"` are enabled on larger text, adding sophistication that rewards close reading.165 166What makes Warm Canvas distinctive is its **border philosophy**. Rather than heavy borders or shadows, it uses ultra-thin `1px solid rgba(0,0,0,0.1)` — borders that exist as whispers, barely perceptible division lines that create structure without weight. The shadow system is equally restrained: multi-layer 4-stack with cumulative opacity never exceeding 0.05, depth that's felt rather than seen.167 168**Signature moves**169- Compressed sans at -2.125px tracking on 64px display170- Warm neutrals: yellow-brown undertones throughout (`#f6f5f4` warm white, `#31302e` warm dark)171- Near-black text via `rgba(0,0,0,0.95)` — micro-warmth172- Whisper borders: `1px solid rgba(0,0,0,0.1)` — barely there173- Multi-layer 4-stack shadows with sub-0.05 opacity174- Single saturated blue accent (`#0075de`) — the only color in core UI chrome175- Pill badges (9999px) with tinted blue background for status176 177## 2. Palette178 179### Primary180- **Near Black** `rgba(0,0,0,0.95)` — text, headings181- **Pure White** `#ffffff` — page, cards182- **Canvas Blue** `#0075de` — CTA, links, single saturated accent183 184### Warm Neutrals185- Warm White `#f6f5f4` — section alternation186- Warm Dark `#31302e` — dark surface187- Warm Gray 500 `#615d59` — secondary text188- Warm Gray 300 `#a39e98` — placeholders, disabled189 190### Semantic191- Teal `#2a9d99` — success192- Green `#1aae39` — completion193- Orange `#dd5b00` — warning194- Pink `#ff64c8` — decorative195 196### Interactive197- Active `#005bab` — pressed198- Focus `#097fe8` — ring199- Badge bg `#f2f9ff`, text `#097fe8`200 201## 3. Typography202 203| Role | Size | Weight | Leading | Tracking |204|------|------|--------|---------|----------|205| Display Hero | 64px | 700 | 1.00 | -2.125px |206| Display 2 | 54px | 700 | 1.04 | -1.875px |207| Section | 48px | 700 | 1.00 | -1.5px |208| Sub-heading L | 40px | 700 | 1.50 | normal |209| Sub-heading | 26px | 700 | 1.23 | -0.625px |210| Card title | 22px | 700 | 1.27 | -0.25px |211| Body L | 20px | 600 | 1.40 | -0.125px |212| Body | 16px | 400 | 1.50 | normal |213| Nav | 15px | 600 | 1.33 | normal |214| Badge | 12px | 600 | 1.33 | +0.125px |215 216**Four-weight system.** 400 (read), 500 (interact), 600 (emphasize), 700 (announce). Tracking compresses with size and relaxes at body. Badges are the only positive-tracking text.217 218## 4. Buttons219 220### Primary Blue221```css222background: #0075de;223color: #ffffff;224padding: 8px 16px;225border-radius: 4px;226```227Hover `#005bab`. Active scale(0.9).228 229### Secondary Translucent230- Background `rgba(0,0,0,0.05)`, text near-black231- 4px radius, scale(1.05) on hover232 233### Pill Badge234- Background `#f2f9ff`, text `#097fe8`235- 9999px radius, 4px 8px padding, 12px weight 600236 237## 5. Cards238 239- Background: `#ffffff`240- Border: `1px solid rgba(0,0,0,0.1)` (whisper)241- Radius: 12px standard, 16px featured242- Shadow: 4-layer stack, max opacity 0.04243 244## 6. Charts245 246**Stepped charts.** Bars are flush (no gap) with a thin top accent line, giving an organic, blocky productivity-tool feel. Gridlines are dashed at 14% opacity. Line charts use a 2px stroke with subtle 12% area fill — no end-dot.247 248## 7. Spacing249 250- Base: 8px251- Scale: `2, 3, 4, 5, 6, 7, 8, 11, 12, 14, 16, 24, 32`252- Section vertical: 64–120px253 254## 8. Depth & elevation255 256| Level | Treatment | Use |257|-------|-----------|-----|258| 0 | None | Page, text |259| 1 | Whisper border `1px solid rgba(0,0,0,0.1)` | Cards, dividers |260| 2 | 4-stack shadow (max 0.04) | Content cards |261| 3 | 5-stack shadow (max 0.05, 52px blur) | Modals, hero |262 263**Layered, ambient, embedded.** Multiple layers with extremely low individual opacity accumulate into soft natural-looking elevation — elements feel embedded in the page, not floating above it.264 265## 9. Do's & don'ts266 267✅ **Do**268- Use warm neutrals exclusively — yellow-brown undertones269- Compress display tracking to -2.125px at 64px270- Use whisper borders at `rgba(0,0,0,0.1)` — never heavier271- Layer 4–5 shadows with sub-0.05 individual opacity272- Reserve canvas blue (`#0075de`) for CTAs and links273 274❌ **Don't**275- Use blue-gray neutrals — kills the warmth276- Apply pill radius to cards — pill is for badges only277- Use heavy single shadows — multi-layer ambient only278- Introduce more saturated colors in core chrome279- Use bold (`#000000`) — `rgba(0,0,0,0.95)` only280 281---282 283## Tokens284 285> Generated from the same source the live preview renders from.286> Treat the values below as the contract — never substitute approximations.287 288### Colors289 290| Role | Value |291|-----------|-------|292| primary | `#000000` |293| secondary | `#615d59` |294| tertiary | `#0075de` |295| neutral | `#ffffff` |296| surface | `#ffffff` |297 298### Typography299 300- **Display:** Inter301- **Body:** Inter302- **Mono:** JetBrains Mono303 304| Role | size / leading / weight / tracking |305|------|------------------------------------|306| Hero | 4rem / 1 / 700 / -2.125px |307| H1 | 3rem / 1 / 700 / -1.5px |308| H2 | 1.625rem / 1.23 / 700 / -0.625px |309| Body | 1rem / 1.5 / 400 / 0 |310 311### Radius312 313- sm: `4px`314- md: `8px`315- lg: `12px`316- pill: `9999px`317 318### Shadows319 320- **card:** `rgba(0,0,0,0.04) 0 4px 18px, rgba(0,0,0,0.027) 0 2.025px 7.85px, rgba(0,0,0,0.02) 0 0.8px 2.93px, rgba(0,0,0,0.01) 0 0.175px 1.04px`321- **button:** `rgba(0,117,222,0.15) 0 4px 12px`322 323### Borders324 325- **card:** `1px solid rgba(0,0,0,0.1)`326- **divider:** `rgba(0,0,0,0.1)`327 328### Buttons329 330Four variants, each fully tokenized. The preview renders from these exact values.331 332#### Primary333 334| Property | Value |335|----------|-------|336| shape | `rounded` |337| background | `#2F2F2F` |338| color | `#FFFFFF` |339| border | `none` |340| padding | `8px 16px` |341| fontWeight | `500` |342| fontSize | `0.875rem` |343 344#### Secondary345 346| Property | Value |347|----------|-------|348| shape | `rounded` |349| background | `#F7F6F3` |350| color | `#2F2F2F` |351| border | `1px solid #E9E5DC` |352| padding | `8px 16px` |353| fontWeight | `500` |354| fontSize | `0.875rem` |355 356#### Outline357 358| Property | Value |359|----------|-------|360| shape | `rounded` |361| background | `transparent` |362| color | `#2F2F2F` |363| border | `1px solid #2F2F2F` |364| padding | `8px 16px` |365| fontWeight | `500` |366| fontSize | `0.875rem` |367 368#### Ghost369 370| Property | Value |371|----------|-------|372| shape | `rounded` |373| background | `transparent` |374| color | `#787673` |375| border | `none` |376| padding | `8px 12px` |377| fontWeight | `500` |378| fontSize | `0.875rem` |379 380### Charts381 382| Property | Value |383|----------|-------|384| variant | `stepped` |385| strokeWidth | `2` |386| fillOpacity | `0.12` |387| gridlines | `true` |388| barGap | `0px` |389| highlight | `single` |390| dotMarker | `false` |391 # 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:wght@400;500;600;700&family=JetBrains+Mono:wght@400&display=swap" />npm install lucide-react// tailwind.config.jsexport default { theme: { extend: { fontFamily: { display: ['"Inter"', 'serif'], sans: ['"Inter"', 'sans-serif'], mono: ['"JetBrains Mono"', 'monospace'], }, colors: { primary: '#000000', secondary: '#615d59', accent: '#0075de', neutral: '#ffffff', surface: '#ffffff', }, borderRadius: { sm: '4px', md: '8px', lg: '12px', }, }, },};Design-agency oversized grotesque. 8rem condensed display sans with -5% tracking — the type itself is the layout. Off-white canvas, one molten-orange accent, hairline grid, asymmetric columns. Hits hard the moment it loads.
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.
Emerald on near-black. Monospace developer aesthetic with thin borders.
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.