Warm linen canvas with abundant whitespace, gently rounded corners, and a single sage accent. Calm, airy, considered. Nothing shouts.
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: "Soft Linen"3description: "Warm linen canvas with abundant whitespace, gently rounded corners, and a single sage accent. Calm, airy, considered. Nothing shouts."4tags: [minimal, warm, light, premium]5colors:6 primary: "#2A2823"7 secondary: "#8B8678"8 tertiary: "#7A8B6F"9 neutral: "#F6F2EA"10 surface: "#FBF8F2"11typography:12 display: Fraunces13 body: Inter14 mono: "JetBrains Mono"15 scale:16 hero: "4.75rem / 1.05 / 400 / -0.025em"17 h1: "2.75rem / 1.1 / 400 / -0.02em"18 h2: "1.5rem / 1.3 / 500 / -0.01em"19 body: "1.0625rem / 1.65 / 400 / -0.005em"20radius:21 sm: 8px22 md: 12px23 lg: 18px24 pill: 9999px25shadows:26 card: "0 1px 2px rgba(42, 40, 35, 0.04)"27 button: none28borders:29 card: "1px solid rgba(42, 40, 35, 0.08)"30 divider: "rgba(42, 40, 35, 0.06)"31buttons:32 primary:33 background: #2A282334 color: #F6F2EA35 border: 1px solid #2A282336 shape: rounded37 padding: 13px 26px38 font: 500 / 0.9375rem / -0.005em39 secondary:40 background: #FBF8F241 color: #2A282342 border: 1px solid rgba(42, 40, 35, 0.14)43 shape: rounded44 padding: 13px 26px45 font: 500 / 0.9375rem / -0.005em46 outline:47 background: transparent48 color: #7A8B6F49 border: 1px solid #7A8B6F50 shape: rounded51 padding: 12px 24px52 font: 500 / 0.9375rem / -0.005em53 ghost:54 background: transparent55 color: #7A8B6F56 border: none57 shape: rounded58 padding: 11px 6px59 font: 500 / 0.9375rem / -0.005em60 hover: underline61charts:62 variant: line63 stroke_width: 1.7564 gridlines: false65 highlight: last66 dot_marker: true67 axis_color: "#8B8678"68 palette: ["#7A8B6F", "#2A2823", "#8B8678"]69fonts_url: "https://fonts.googleapis.com/css2?family=Fraunces:wght@300;400;500;600&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400&display=swap"70dependencies: ["lucide-react"]71---72 73# Soft Linen74 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 **Soft Linen** 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** — rounded shape, bg `#2A2823`, text `#F6F2EA`, border `1px solid #2A2823`, padding `13px 26px`, weight `500`.111- **Secondary** — rounded shape, bg `#FBF8F2`, text `#2A2823`, border `1px solid rgba(42, 40, 35, 0.14)`, padding `13px 26px`, weight `500`.112- **Outline** — rounded shape, text `#7A8B6F`, border `1px solid #7A8B6F`, padding `12px 24px`, weight `500`.113- **Ghost** — rounded shape, text `#7A8B6F`, padding `11px 6px`, weight `500`.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: `#FBF8F2`122- Border: `1px solid rgba(42, 40, 35, 0.08)`123- Shadow: `0 1px 2px rgba(42, 40, 35, 0.04)`124- Radius: `radius.lg` (`18px`)125- Internal padding: `20px` for compact cards, `24–28px` for content cards.126 127#### Charts128 129- Bar/line variant: `line`130- No gridlines — let the bars/lines carry the data.131- Highlight strategy: `last` — emphasize a single bar/point per chart.132- Use the declared palette in order: `#7A8B6F`, `#2A2823`, `#8B8678`.133 134#### Typography pairings135 136- **Display (`Fraunces`)** — h1, h2, hero headlines, brand wordmarks.137- **Body (`Inter`)** — paragraphs, labels, button text, form inputs.138- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.139 140### 4 · Hard constraints141 142Never do any of the following without explicit instruction from the user:143 144- Introduce a new color, font, radius, or shadow that isn't declared above.145- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).146- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.147- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.148- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.149 150### 5 · Before you finish — verify151 152Run through this checklist for every screen you produce:153 154- [ ] Every color used appears in the Colors table above.155- [ ] Headlines use the display font; body copy uses the body font.156- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).157- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.158- [ ] Cards and dividers use the declared border + shadow tokens.159- [ ] No values were invented; if you needed something missing, you stopped and asked.160 161---162 163## Overview164Soft Linen is the visual language of a quiet morning — warm cream paper, abundant air, and a single quiet sage accent. The system is built around **whitespace as the primary material**: sections breathe at 160px+ vertical rhythm, body copy sits at 1.65 leading, and every surface is a half-shade away from the next. Nothing competes for attention because nothing needs to.165 166This is for product pages that want to feel slow on purpose — wellness brands, considered SaaS, slow-publishing journals, premium hospitality.167 168## Color169- **Charcoal #2A2823** — primary text. Warm enough to never read as cold black on linen.170- **Stone #8B8678** — captions, meta, axis labels.171- **Sage #7A8B6F** — the single accent. Outline buttons, ghost links, chart lines. Used **once or twice per screen**, never as a fill.172- **Linen #F6F2EA** — page canvas. Warm off-white.173- **Surface #FBF8F2** — card stock, a half-shade brighter than the page.174 175**No second accent exists.** Sage carries the entire chromatic load.176 177## Typography178- **Display: Fraunces** at 4.75rem / 400, -2.5% tracking. Warm modern serif with optical-size grace.179- **Body: Inter** at 1.0625rem with **1.65 leading**. The leading is non-negotiable.180 181| Role | Font | Size | Weight | Tracking |182|------|------|------|--------|----------|183| Hero | Fraunces | 4.75rem | 400 | -0.025em |184| H1 | Fraunces | 2.75rem | 400 | -0.02em |185| H2 | Inter | 1.5rem | 500 | -0.01em |186| Body | Inter | 1.0625rem | 400 | -0.005em / 1.65 |187 188## Whitespace Rhythm189Soft Linen is defined by its breathing room. Apply this rhythm:190- **Section gap: 160px** (mobile 96px) between major page sections.191- **Card padding: 32px–40px**. Never below 24px.192- **Heading-to-body gap: 24px** minimum.193- **Inter-paragraph: 16px**.194 195If a section feels comfortable, double its vertical padding. The system is built for over-spacing.196 197## Buttons198All four are gently rounded (12–18px), soft and round but never pill-shaped except for the optional pill variant.199 200- **Primary** — warm charcoal fill, linen label, no shadow. Quiet authority.201- **Secondary** — linen surface with a 14% stone hairline.202- **Outline** — transparent with a 1px sage border. The accent appears here.203- **Ghost** — bare sage label, hover underline.204 205**No drop shadows on buttons.** The form is the gesture.206 207## Cards208Surface tile, **1px stone border at 8%**, a single 1px shadow at 4%. Radius is **18px**. Cards never lift more than that hairline shadow — the page-flat read is the system.209 210## Charts & Data211A single 1.75px sage line over the linen canvas. **No gridlines, no fills.** A small sage dot at the latest reading. Axis labels in stone.212 213## Do's and Don'ts214- ✅ Whitespace is the material. Over-space; never crowd.215- ✅ Fraunces 400 for display — never 600+. Heavy weights kill the warmth.216- ✅ Sage appears once or twice per screen, never as a fill.217- ✅ 1.65 body leading minimum. Reading-first.218- ❌ No drop shadows beyond a 4% hairline.219- ❌ No second accent color. Sage is alone.220- ❌ No tight section padding. The breathing room IS the design.221- ❌ No pill buttons except for chrome — primary is gently rounded, not capsule.222 223---224 225## Tokens226 227> Generated from the same source the live preview renders from.228> Treat the values below as the contract — never substitute approximations.229 230### Colors231 232| Role | Value |233|-----------|-------|234| primary | `#2A2823` |235| secondary | `#8B8678` |236| tertiary | `#7A8B6F` |237| neutral | `#F6F2EA` |238| surface | `#FBF8F2` |239 240### Typography241 242- **Display:** Fraunces243- **Body:** Inter244- **Mono:** JetBrains Mono245 246| Role | size / leading / weight / tracking |247|------|------------------------------------|248| Hero | 4.75rem / 1.05 / 400 / -0.025em |249| H1 | 2.75rem / 1.1 / 400 / -0.02em |250| H2 | 1.5rem / 1.3 / 500 / -0.01em |251| Body | 1.0625rem / 1.65 / 400 / -0.005em |252 253### Radius254 255- sm: `8px`256- md: `12px`257- lg: `18px`258- pill: `9999px`259 260### Shadows261 262- **card:** `0 1px 2px rgba(42, 40, 35, 0.04)`263- **button:** `none`264 265### Borders266 267- **card:** `1px solid rgba(42, 40, 35, 0.08)`268- **divider:** `rgba(42, 40, 35, 0.06)`269 270### Buttons271 272Four variants, each fully tokenized. The preview renders from these exact values.273 274#### Primary275 276| Property | Value |277|----------|-------|278| shape | `rounded` |279| background | `#2A2823` |280| color | `#F6F2EA` |281| border | `1px solid #2A2823` |282| padding | `13px 26px` |283| fontWeight | `500` |284| fontSize | `0.9375rem` |285| tracking | `-0.005em` |286 287#### Secondary288 289| Property | Value |290|----------|-------|291| shape | `rounded` |292| background | `#FBF8F2` |293| color | `#2A2823` |294| border | `1px solid rgba(42, 40, 35, 0.14)` |295| padding | `13px 26px` |296| fontWeight | `500` |297| fontSize | `0.9375rem` |298| tracking | `-0.005em` |299 300#### Outline301 302| Property | Value |303|----------|-------|304| shape | `rounded` |305| background | `transparent` |306| color | `#7A8B6F` |307| border | `1px solid #7A8B6F` |308| padding | `12px 24px` |309| fontWeight | `500` |310| fontSize | `0.9375rem` |311| tracking | `-0.005em` |312 313#### Ghost314 315| Property | Value |316|----------|-------|317| shape | `rounded` |318| background | `transparent` |319| color | `#7A8B6F` |320| border | `none` |321| padding | `11px 6px` |322| fontWeight | `500` |323| fontSize | `0.9375rem` |324| tracking | `-0.005em` |325| hoverHint | `underline` |326 327### Charts328 329| Property | Value |330|----------|-------|331| variant | `line` |332| strokeWidth | `1.75` |333| gridlines | `false` |334| highlight | `last` |335| dotMarker | `true` |336| axisColor | `#8B8678` |337| palette | `#7A8B6F`, `#2A2823`, `#8B8678` |338 # 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=Fraunces:wght@300;400;500;600&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: ['"Fraunces"', 'serif'], sans: ['"Inter"', 'sans-serif'], mono: ['"JetBrains Mono"', 'monospace'], }, colors: { primary: '#2A2823', secondary: '#8B8678', accent: '#7A8B6F', neutral: '#F6F2EA', surface: '#FBF8F2', }, borderRadius: { sm: '8px', md: '12px', lg: '18px', }, }, },};Brushed metal as a quiet design system. Cool grey surfaces with a faint vertical machined gradient, Space Grotesk display, IBM Plex Mono for technical labels, a single warm amber accent that reads like a status LED. Built for hardware companies and infrastructure dashboards.
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.
Warm bone minimalism with a serif voice. Fraunces display headlines paired with Inter body, a single cognac accent reserved for active states, and generous hairline-only chrome. The quiet end of editorial — built for studios, journals, and brands that whisper.
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.