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.
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: "Linen Press"3description: "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."4tags: [editorial, minimal, premium, warm, modern]5colors:6 primary: "#1d1a16"7 secondary: "#6e6760"8 tertiary: "#1d1a16"9 neutral: "#efe9df"10 surface: "#f7f2e8"11typography:12 display: Fraunces13 body: Inter14 mono: "JetBrains Mono"15 scale:16 hero: "4.25rem / 1 / 400 / -0.03em"17 h1: "2.75rem / 1.08 / 400 / -0.025em"18 h2: "1.75rem / 1.2 / 500 / -0.015em"19 body: "1.0625rem / 1.65 / 400 / -0.005em"20radius:21 sm: 4px22 md: 8px23 lg: 14px24 pill: 9999px25shadows:26 card: "rgba(29,26,22,0.04) 0 1px 2px"27 button: none28borders:29 card: "1px solid rgba(29,26,22,0.08)"30 divider: rgba(29,26,22,0.10)31buttons:32 primary:33 background: #1d1a1634 color: #f7f2e835 border: none36 shape: rounded37 padding: 11px 22px38 font: 500 / 0.875rem39 secondary:40 background: #efe9df41 color: #1d1a1642 border: 1px solid rgba(29,26,22,0.10)43 shape: rounded44 padding: 11px 22px45 font: 500 / 0.875rem46 outline:47 background: transparent48 color: #1d1a1649 border: 1px solid rgba(29,26,22,0.18)50 shape: rounded51 padding: 11px 22px52 font: 500 / 0.875rem53 ghost:54 background: transparent55 color: #6e676056 border: none57 shape: rounded58 padding: 11px 16px59 font: 500 / 0.875rem60charts:61 variant: "thin-bars"62 stroke_width: 1.2563 fill_opacity: 0.0464 gridlines: false65 bar_gap: 14px66 highlight: single67 dot_marker: true68fonts_url: "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"69dependencies: ["lucide-react"]70---71 72# Linen Press73 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 **Linen Press** 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 `#1d1a16`, text `#f7f2e8`, padding `11px 22px`, weight `500`.110- **Secondary** — rounded shape, bg `#efe9df`, text `#1d1a16`, border `1px solid rgba(29,26,22,0.10)`, padding `11px 22px`, weight `500`.111- **Outline** — rounded shape, text `#1d1a16`, border `1px solid rgba(29,26,22,0.18)`, padding `11px 22px`, weight `500`.112- **Ghost** — rounded shape, text `#6e6760`, padding `11px 16px`, 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: `#f7f2e8`121- Border: `1px solid rgba(29,26,22,0.08)`122- Shadow: `rgba(29,26,22,0.04) 0 1px 2px`123- Radius: `radius.lg` (`14px`)124- Internal padding: `20px` for compact cards, `24–28px` for content cards.125 126#### Tabs127 128Variant: `underline`. Flat row of labels. Active tab gets a 2px underline in the accent color — no fill.129 130#### Charts131 132- Bar/line variant: `thin-bars`133- No gridlines — let the bars/lines carry the data.134- Highlight strategy: `single` — emphasize a single bar/point per chart.135 136#### Typography pairings137 138- **Display (`Fraunces`)** — h1, h2, hero headlines, brand wordmarks.139- **Body (`Inter`)** — paragraphs, labels, button text, form inputs.140- **Mono (`JetBrains 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## 1. Atmosphere166 167Linen Press is the quiet end of editorial. Headlines run in Fraunces 400 with optical sizing, set on a warm bone surface (`#f7f2e8`) that reads closer to uncoated paper than to white. Body sits in Inter at 17px on a 1.65 leading. Chrome is hairlines at 8% ink — no shadows, no decorative borders, no gradients. The single accent is a cognac `#a35828` that appears only on the active tab underline and the focus ring. Everything else is ink on bone.168 169The discipline is in the restraint: serif display + sans body, one accent on one element, and surfaces that shift only by hairline.170 171**Signature moves**172- Fraunces 400 with optical sizing for hero — never bold, never italic in the hero173- Warm bone surface `#f7f2e8` — never white, never grey174- Single cognac accent `#a35828` reserved for the active tab underline and focus175- Hairline-only chrome — no shadows on cards176- Underline tabs only — pills feel too playful for this voice177 178## 2. Palette179 180### Surfaces181- **Bone** `#f7f2e8` — page background182- **Bone Lift** `#efe9df` — secondary card surface, secondary button183- **Hairline** `rgba(29,26,22,0.08)` — every divider, every card edge184 185### Ink186- **Ink** `#1d1a16` — text, headings, primary CTA fill187- **Ink 60** `#6e6760` — secondary text188 189### Accent190- **Cognac** `#a35828` — active tab underline, focus ring, chart highlight191- **Cognac Soft** `rgba(163,88,40,0.14)` — hovered tab background192 193## 3. Typography194 195| Role | Font | Size | Weight | Leading | Tracking |196|------|------|------|--------|---------|----------|197| Hero | Fraunces | 68px | 400 | 1.0 | -0.03em |198| H1 | Fraunces | 44px | 400 | 1.08 | -0.025em |199| H2 | Fraunces | 28px | 500 | 1.2 | -0.015em |200| Body | Inter | 17px | 400 | 1.65 | -0.005em |201| UI | Inter | 13px | 500 | 1.4 | 0 |202| Caption | JetBrains Mono | 11px | 500 | 1.0 | 0.10em uppercase |203 204Fraunces only at 400 / 500 — anything heavier breaks the quiet voice. Inter handles all UI weight.205 206## 4. Buttons207 208### Primary (Ink)209```css210background: #1d1a16;211color: #f7f2e8;212padding: 11px 22px;213border-radius: 8px;214font-weight: 500;215```216 217### Secondary (Bone Lift)218- Bone-lift surface, 1px hairline at 10% ink, ink text — same shape, same padding219 220### Outline & Ghost221- Outline: transparent, 1px ink hairline at 18%222- Ghost: no border, ink-secondary, hover underlines223 224## 5. Cards225 226```css227background: #f7f2e8;228border: 1px solid rgba(29,26,22,0.08);229border-radius: 14px;230box-shadow: rgba(29,26,22,0.04) 0 1px 2px;231```232 233That single 1px shadow is the maximum. Featured cards lift to bone-lift surface — no second shadow, no second border.234 235## 6. Charts236 237Thin precise bars (4px wide, 14px gap). One bar in cognac, others in 16% ink. NO gridlines. Line charts at 1.25px ink with a 4% fill, ending in a cognac dot marker. Y-axis labels in JetBrains Mono uppercase 11px.238 239## 7. Tabs240 241Underline only. Active = cognac 1.5px underline, ink text. Inactive = ink-secondary, no underline. Hover = cognac-soft background wash.242 243## 8. Spacing244 245- Base 4px246- Scale: `4, 8, 12, 16, 20, 24, 32, 48, 64, 96`247- Section padding: 96px desktop, 48px mobile248 249## 9. Do's & don'ts250 251✅ **Do**252- Use Fraunces 400 for the hero — the optical-sized weight is the voice253- Hold the bone surface `#f7f2e8` — white kills the warmth254- Reserve cognac for active state + focus + chart highlight only255- Keep chrome to hairlines — shadows break the paper feel256 257❌ **Don't**258- Use Fraunces bold or italic in the hero — too theatrical for this register259- Add a second accent — cognac alone, on three specific surfaces260- Use pill tabs — underline is the only correct treatment261- Add card shadows beyond the 1px hairline lift262 263---264 265## Tokens266 267> Generated from the same source the live preview renders from.268> Treat the values below as the contract — never substitute approximations.269 270### Colors271 272| Role | Value |273|-----------|-------|274| primary | `#1d1a16` |275| secondary | `#6e6760` |276| tertiary | `#1d1a16` |277| neutral | `#efe9df` |278| surface | `#f7f2e8` |279 280### Typography281 282- **Display:** Fraunces283- **Body:** Inter284- **Mono:** JetBrains Mono285 286| Role | size / leading / weight / tracking |287|------|------------------------------------|288| Hero | 4.25rem / 1 / 400 / -0.03em |289| H1 | 2.75rem / 1.08 / 400 / -0.025em |290| H2 | 1.75rem / 1.2 / 500 / -0.015em |291| Body | 1.0625rem / 1.65 / 400 / -0.005em |292 293### Radius294 295- sm: `4px`296- md: `8px`297- lg: `14px`298- pill: `9999px`299 300### Shadows301 302- **card:** `rgba(29,26,22,0.04) 0 1px 2px`303- **button:** `none`304 305### Borders306 307- **card:** `1px solid rgba(29,26,22,0.08)`308- **divider:** `rgba(29,26,22,0.10)`309 310### Buttons311 312Four variants, each fully tokenized. The preview renders from these exact values.313 314#### Primary315 316| Property | Value |317|----------|-------|318| shape | `rounded` |319| background | `#1d1a16` |320| color | `#f7f2e8` |321| border | `none` |322| padding | `11px 22px` |323| fontWeight | `500` |324| fontSize | `0.875rem` |325 326#### Secondary327 328| Property | Value |329|----------|-------|330| shape | `rounded` |331| background | `#efe9df` |332| color | `#1d1a16` |333| border | `1px solid rgba(29,26,22,0.10)` |334| padding | `11px 22px` |335| fontWeight | `500` |336| fontSize | `0.875rem` |337 338#### Outline339 340| Property | Value |341|----------|-------|342| shape | `rounded` |343| background | `transparent` |344| color | `#1d1a16` |345| border | `1px solid rgba(29,26,22,0.18)` |346| padding | `11px 22px` |347| fontWeight | `500` |348| fontSize | `0.875rem` |349 350#### Ghost351 352| Property | Value |353|----------|-------|354| shape | `rounded` |355| background | `transparent` |356| color | `#6e6760` |357| border | `none` |358| padding | `11px 16px` |359| fontWeight | `500` |360| fontSize | `0.875rem` |361 362### Charts363 364| Property | Value |365|----------|-------|366| variant | `thin-bars` |367| strokeWidth | `1.25` |368| fillOpacity | `0.04` |369| gridlines | `false` |370| barGap | `14px` |371| highlight | `single` |372| dotMarker | `true` |373 # 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:opsz,wght@9..144,400;9..144,500;9..144,600&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&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: '#1d1a16', secondary: '#6e6760', accent: '#1d1a16', neutral: '#efe9df', surface: '#f7f2e8', }, borderRadius: { sm: '4px', md: '8px', lg: '14px', }, }, },};Two-color spot print, halftone vibes. Fluorescent pink + ink-black on cream paper, 3px misregistration outlines, hand-cut chunky type.
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.
No chromatic color at all. Five steps of grey on a paper-white canvas, generous 16px radii, oversized whitespace, one humanist sans for everything. The discipline is the brand.
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.