Design-agency editorial: a single oversized Bodoni Moda display at 7rem, a single ink, an off-white canvas. The signature is the radical scale gap — hero 7rem, body 1rem, nothing in between except a mono eyebrow.
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: "Maison Folio"3description: "Design-agency editorial: a single oversized Bodoni Moda display at 7rem, a single ink, an off-white canvas. The signature is the radical scale gap — hero 7rem, body 1rem, nothing in between except a mono eyebrow."4tags: [editorial, agency, serif, oversized, minimal]5colors:6 primary: "#13110F"7 secondary: "#6E695E"8 tertiary: "#A39989"9 neutral: "#F2EFEA"10 surface: "#FFFFFF"11typography:12 display: "Bodoni Moda"13 body: "Inter Tight"14 mono: "JetBrains Mono"15 scale:16 hero: "7rem / 0.92 / 500 / -0.05em"17 h1: "4rem / 0.98 / 500 / -0.04em"18 h2: "1.625rem / 1.25 / 500 / -0.015em"19 body: "1.0625rem / 1.6 / 400 / 0"20radius:21 sm: 0px22 md: 0px23 lg: 2px24 pill: 9999px25shadows:26 card: none27 button: none28borders:29 card: "1px solid #13110F"30 divider: "#13110F"31buttons:32 primary:33 background: #13110F34 color: #F2EFEA35 border: 1px solid #13110F36 shape: sharp37 padding: 16px 32px38 font: mono / 500 / 0.75rem / 0.12em39 uppercase: true40 secondary:41 background: transparent42 color: #13110F43 border: 1px solid #13110F44 shape: sharp45 padding: 16px 32px46 font: mono / 500 / 0.75rem / 0.12em47 uppercase: true48 outline:49 background: transparent50 color: #13110F51 border: 1px solid #A3998952 shape: sharp53 padding: 15px 31px54 font: mono / 500 / 0.75rem / 0.12em55 uppercase: true56 ghost:57 background: transparent58 color: #13110F59 border: none60 shape: sharp61 padding: 16px 062 font: mono / 500 / 0.75rem / 0.12em63 uppercase: true64 suffix: arrow65 hover: underline66charts:67 variant: "thin-bars"68 stroke_width: 169 gridlines: false70 bar_radius: 0px71 bar_gap: 12px72 highlight: single73 axis_color: "#6E695E"74 palette: ["#13110F"]75fonts_url: "https://fonts.googleapis.com/css2?family=Bodoni+Moda:opsz,wght@6..96,400;6..96,500;6..96,700&family=Inter+Tight:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"76dependencies: ["lucide-react"]77---78 79# Maison Folio80 81## AI Build Instructions82 83> **Read this section before writing any code.** The rules below84> are non-negotiable. Every value used in the UI must come from this85> file's frontmatter — never substitute, approximate, or invent new86> colors, fonts, radii, or shadows. If a value is missing, ask the87> user before adding one.88 89### 1 · Your role90 91You are building UI for a project that has adopted **Maison Folio** as its92design system. Treat `DESIGN.md` as the single source of truth.93Your job is to translate the user's product requirements into94components and pages that look like they were designed by the same95person who authored this file.96 97### 2 · Token compliance98 99- Pull every color, font family, radius, shadow, and spacing value100 from the frontmatter at the top of this file.101- Use semantic roles (e.g. `primary`, `accent`, `muted`) — never102 hard-code hex values that bypass the system.103- When a token can be expressed as a CSS variable, declare it once104 in your global stylesheet and reference it everywhere downstream.105- The Google Fonts `<link>` is provided in the Typography section.106 Add it to `<head>` before any component renders.107 108### 3 · Component recipes109 110Use these recipes verbatim when building the corresponding component.111 112#### Buttons113 114Four variants are defined. Pick one — never blend variants or invent a fifth.115 116- **Primary** — sharp shape, bg `#13110F`, text `#F2EFEA`, border `1px solid #13110F`, padding `16px 32px`, weight `500`, uppercased.117- **Secondary** — sharp shape, text `#13110F`, border `1px solid #13110F`, padding `16px 32px`, weight `500`, uppercased.118- **Outline** — sharp shape, text `#13110F`, border `1px solid #A39989`, padding `15px 31px`, weight `500`, uppercased.119- **Ghost** — sharp shape, text `#13110F`, padding `16px 0`, weight `500`, uppercased.120 121Reach for **primary** as the single dominant CTA per screen.122**Secondary** for the supporting action. **Outline** for tertiary123actions in toolbars. **Ghost** for inline links and table actions.124 125#### Cards126 127- Background: `#FFFFFF`128- Border: `1px solid #13110F`129- Shadow: `none`130- Radius: `radius.lg` (`2px`)131- Internal padding: `20px` for compact cards, `24–28px` for content cards.132 133#### Charts134 135- Bar/line variant: `thin-bars`136- Bar radius: `0px`137- No gridlines — let the bars/lines carry the data.138- Highlight strategy: `single` — emphasize a single bar/point per chart.139- Use the declared palette in order: `#13110F`.140 141#### Typography pairings142 143- **Display (`Bodoni Moda`)** — h1, h2, hero headlines, brand wordmarks.144- **Body (`Inter Tight`)** — paragraphs, labels, button text, form inputs.145- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.146 147### 4 · Hard constraints148 149Never do any of the following without explicit instruction from the user:150 151- Introduce a new color, font, radius, or shadow that isn't declared above.152- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).153- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.154- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.155- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.156 157### 5 · Before you finish — verify158 159Run through this checklist for every screen you produce:160 161- [ ] Every color used appears in the Colors table above.162- [ ] Headlines use the display font; body copy uses the body font.163- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).164- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.165- [ ] Cards and dividers use the declared border + shadow tokens.166- [ ] No values were invented; if you needed something missing, you stopped and asked.167 168---169 170## Overview171Maison Folio is design-agency editorial. One oversized modern serif. One ink. One off-white canvas. The signature is a radical type-scale gap: hero at 7rem, body at 1.0625rem, and nothing in between except a single mono eyebrow line in caps. The whitespace does the rest.172 173For design studios, fashion houses, architecture firms, photography portfolios — anywhere the work itself is the loudest element on the page and the typography needs to be a second voice, not a competitor.174 175## The Scale Gap176Most editorial systems lay down five or six type sizes. Maison Folio uses three:177 178| Role | Font | Size | Weight | Tracking |179|------|------|------|--------|----------|180| Hero | Bodoni Moda | 7rem | 500 | -0.05em / 0.92 |181| H1 | Bodoni Moda | 4rem | 500 | -0.04em / 0.98 |182| H2 | Bodoni Moda | 1.625rem | 500 | -0.015em / 1.25 |183| Body | Inter Tight | 1.0625rem | 400 | 0 / 1.6 |184| Eyebrow | JetBrains Mono | 0.75rem | 500 | 0.12em / uppercase |185 186The 7rem hero with -5% tracking is non-negotiable. Bodoni Moda's high contrast collapses below 4rem; below that size, switch to Inter Tight. Never use the serif for body text — modern serifs are designed for display only.187 188## Color189- **Ink #13110F** — text and CTA. The only chromatic mark.190- **Stone #6E695E** — secondary text, axis labels.191- **Taupe #A39989** — used only in hairline outlines.192- **Linen #F2EFEA** — page canvas with warmth.193- **Paper #FFFFFF** — inverse panels only.194 195## Geometry196- **Radii: 0px throughout.** The serifs need flat edges. Pill exists only for status chips.197- **Section gap: 192px** desktop, 96px mobile. The whitespace IS the design.198- **Asymmetric grid** — 12 columns with intentional offset. Heroes break the grid.199 200## Buttons201Every button uses **JetBrains Mono caps at 0.75rem with 0.12em tracking** — the eyebrow voice carried through to interaction. Sharp corners. No shadow.202- **Primary** — flat ink rectangle.203- **Secondary** — off-white with ink hairline.204- **Outline** — taupe hairline.205- **Ghost** — bare mono caps with arrow suffix and underline on hover.206 207## Cards208Flat off-white panel with a 1px ink hairline. No shadow, no radius. Padding 48px minimum — the negative space is the entire treatment. Inverse cards (ink background, off-white text) appear sparingly for editorial contrast.209 210## Charts & Data211Thin ink bars at 1px width with 12px gaps. No gridlines, no axis decoration. One bar may be highlighted by extending its height — never by changing its color. Numbers set in Bodoni Moda for headline KPIs, in mono for tabular data.212 213## Do's and Don'ts214- ✅ Hold the 7rem hero with -5% tracking. The scale IS the system.215- ✅ One ink only. Never introduce a second chromatic color.216- ✅ Mono caps at 0.12em tracking for every interactive label.217- ✅ Massive section gaps. Whitespace is a first-class element.218- ❌ No Bodoni Moda below 1.625rem — its contrast collapses.219- ❌ No second display family. The serif carries every display role.220- ❌ No rounded corners. Sharp throughout.221- ❌ No drop shadows. Depth comes from scale and negative space only.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 | `#13110F` |235| secondary | `#6E695E` |236| tertiary | `#A39989` |237| neutral | `#F2EFEA` |238| surface | `#FFFFFF` |239 240### Typography241 242- **Display:** Bodoni Moda243- **Body:** Inter Tight244- **Mono:** JetBrains Mono245 246| Role | size / leading / weight / tracking |247|------|------------------------------------|248| Hero | 7rem / 0.92 / 500 / -0.05em |249| H1 | 4rem / 0.98 / 500 / -0.04em |250| H2 | 1.625rem / 1.25 / 500 / -0.015em |251| Body | 1.0625rem / 1.6 / 400 / 0 |252 253### Radius254 255- sm: `0px`256- md: `0px`257- lg: `2px`258- pill: `9999px`259 260### Shadows261 262- **card:** `none`263- **button:** `none`264 265### Borders266 267- **card:** `1px solid #13110F`268- **divider:** `#13110F`269 270### Buttons271 272Four variants, each fully tokenized. The preview renders from these exact values.273 274#### Primary275 276| Property | Value |277|----------|-------|278| shape | `sharp` |279| background | `#13110F` |280| color | `#F2EFEA` |281| border | `1px solid #13110F` |282| padding | `16px 32px` |283| fontFamily | `mono` |284| fontWeight | `500` |285| fontSize | `0.75rem` |286| tracking | `0.12em` |287| uppercase | `true` |288 289#### Secondary290 291| Property | Value |292|----------|-------|293| shape | `sharp` |294| background | `transparent` |295| color | `#13110F` |296| border | `1px solid #13110F` |297| padding | `16px 32px` |298| fontFamily | `mono` |299| fontWeight | `500` |300| fontSize | `0.75rem` |301| tracking | `0.12em` |302| uppercase | `true` |303 304#### Outline305 306| Property | Value |307|----------|-------|308| shape | `sharp` |309| background | `transparent` |310| color | `#13110F` |311| border | `1px solid #A39989` |312| padding | `15px 31px` |313| fontFamily | `mono` |314| fontWeight | `500` |315| fontSize | `0.75rem` |316| tracking | `0.12em` |317| uppercase | `true` |318 319#### Ghost320 321| Property | Value |322|----------|-------|323| shape | `sharp` |324| background | `transparent` |325| color | `#13110F` |326| border | `none` |327| padding | `16px 0` |328| fontFamily | `mono` |329| fontWeight | `500` |330| fontSize | `0.75rem` |331| tracking | `0.12em` |332| uppercase | `true` |333| suffix | `arrow` |334| hoverHint | `underline` |335 336### Charts337 338| Property | Value |339|----------|-------|340| variant | `thin-bars` |341| strokeWidth | `1` |342| gridlines | `false` |343| barRadius | `0px` |344| barGap | `12px` |345| highlight | `single` |346| axisColor | `#6E695E` |347| palette | `#13110F` |348 # 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=Bodoni+Moda:opsz,wght@6..96,400;6..96,500;6..96,700&family=Inter+Tight:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap" />npm install lucide-react// tailwind.config.jsexport default { theme: { extend: { fontFamily: { display: ['"Bodoni Moda"', 'serif'], sans: ['"Inter Tight"', 'sans-serif'], mono: ['"JetBrains Mono"', 'monospace'], }, colors: { primary: '#13110F', secondary: '#6E695E', accent: '#A39989', neutral: '#F2EFEA', surface: '#FFFFFF', }, borderRadius: { sm: '0px', md: '0px', lg: '2px', }, }, },};A multi-stop pastel gradient runs across the page — desaturated lavender, peach, seafoam, cream — every stop at ~25% chroma so it reads as soft sorbet rather than rainbow. Pure paper-white cards, ink text, hairlines. Calm and considered.
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.
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.