Radical two-color: deep indigo and warm bone, nothing else. Cool but editorial — never electric. Considered serif/sans pairing, refined 6px corners, no shadows. Discipline and quiet authority.
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.
Tokens describe the resting state. A real product needs every interaction state. Hover, focus, active, disabled, loading — all derived from the system's resting tokens.
1---2name: "Indigo Bone"3description: "Radical two-color: deep indigo and warm bone, nothing else. Cool but editorial — never electric. Considered serif/sans pairing, refined 6px corners, no shadows. Discipline and quiet authority."4tags: [duotone, editorial, minimal, premium, modern]5colors:6 primary: "#1B2447"7 secondary: "#5A6688"8 tertiary: "#8E97B5"9 neutral: "#F1ECE0"10 surface: "#F8F4EA"11typography:12 display: "Cormorant Garamond"13 body: Inter14 mono: "JetBrains Mono"15 scale:16 hero: "5rem / 1 / 500 / -0.025em"17 h1: "2.875rem / 1.05 / 500 / -0.022em"18 h2: "1.5rem / 1.3 / 500 / -0.012em"19 body: "1.0625rem / 1.7 / 400 / -0.003em"20radius:21 sm: 4px22 md: 6px23 lg: 8px24shadows:25 card: "0 0 0 1px rgba(27, 36, 71, 0.10)"26 button: none27borders:28 card: "1px solid rgba(27, 36, 71, 0.10)"29 divider: "rgba(27, 36, 71, 0.16)"30buttons:31 primary:32 background: #1B244733 color: #F1ECE034 border: 1px solid #1B244735 shape: rounded36 padding: 12px 24px37 font: 500 / 0.9375rem / -0.005em38 secondary:39 background: #F8F4EA40 color: #1B244741 border: 1px solid #1B244742 shape: rounded43 padding: 11px 23px44 font: 500 / 0.9375rem / -0.005em45 outline:46 background: transparent47 color: #1B244748 border: 1px solid rgba(27, 36, 71, 0.30)49 shape: rounded50 padding: 11px 23px51 font: 500 / 0.9375rem / -0.005em52 ghost:53 background: transparent54 color: #5A668855 border: none56 shape: rounded57 padding: 11px 4px58 font: 500 / 0.9375rem / -0.005em59 hover: underline60charts:61 variant: "rounded-bars"62 stroke_width: 263 gridlines: false64 bar_radius: 3px65 bar_gap: 10px66 highlight: all67 axis_color: "#5A6688"68 palette: ["#1B2447", "#5A6688", "#8E97B5"]69fonts_url: "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400&display=swap"70dependencies: ["lucide-react"]71---72 73# Indigo Bone74 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 **Indigo Bone** 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 `#1B2447`, text `#F1ECE0`, border `1px solid #1B2447`, padding `12px 24px`, weight `500`.111- **Secondary** — rounded shape, bg `#F8F4EA`, text `#1B2447`, border `1px solid #1B2447`, padding `11px 23px`, weight `500`.112- **Outline** — rounded shape, text `#1B2447`, border `1px solid rgba(27, 36, 71, 0.30)`, padding `11px 23px`, weight `500`.113- **Ghost** — rounded shape, text `#5A6688`, padding `11px 4px`, 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: `#F8F4EA`122- Border: `1px solid rgba(27, 36, 71, 0.10)`123- Shadow: `0 0 0 1px rgba(27, 36, 71, 0.10)`124- Radius: `radius.lg` (`8px`)125- Internal padding: `20px` for compact cards, `24–28px` for content cards.126 127#### Charts128 129- Bar/line variant: `rounded-bars`130- Bar radius: `3px`131- No gridlines — let the bars/lines carry the data.132- Highlight strategy: `all` — emphasize a single bar/point per chart.133- Use the declared palette in order: `#1B2447`, `#5A6688`, `#8E97B5`.134 135#### Typography pairings136 137- **Display (`Cormorant Garamond`)** — h1, h2, hero headlines, brand wordmarks.138- **Body (`Inter`)** — paragraphs, labels, button text, form inputs.139- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.140 141### 4 · Hard constraints142 143Never do any of the following without explicit instruction from the user:144 145- Introduce a new color, font, radius, or shadow that isn't declared above.146- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).147- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.148- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.149- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.150 151### 5 · Before you finish — verify152 153Run through this checklist for every screen you produce:154 155- [ ] Every color used appears in the Colors table above.156- [ ] Headlines use the display font; body copy uses the body font.157- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).158- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.159- [ ] Cards and dividers use the declared border + shadow tokens.160- [ ] No values were invented; if you needed something missing, you stopped and asked.161 162---163 164## Overview165Indigo Bone is a strict two-color editorial system: **deep indigo and warm bone, nothing else.** No third hue anywhere — not in charts, not in icons, not in shadows. The chart's three "colors" are one hue at three chroma levels.166 167Where Ink & Citron is cool-electric (deep ink + acid citron) and Terra Bone is warm-earthen (terracotta + bone), Indigo Bone sits between them: cool but editorial, never electric. The pairing of high-contrast serif and crisp sans gives it discipline and quiet authority.168 169For literary brands, premium publishers, design-forward financial pages, anything that wants two colors and nothing more.170 171## Color172- **Indigo #1B2447** — the only "dark." Body text, headings, primary fills, hairlines.173- **Faded #5A6688** — same hue at lower chroma. Secondary text, axis labels, second chart bar.174- **Soft #8E97B5** — same hue, even softer. Third chart bar, hover underline.175- **Bone #F1ECE0** — page canvas. Warm. The only neutral.176- **Surface #F8F4EA** — card surface, one notch above bone.177 178The three indigo steps are the same color at three chroma levels — the duotone discipline holds.179 180## Typography181- **Display: Cormorant Garamond 500** at 5rem with -2.5% tracking. Editorial serif.182- **Body: Inter 400** at 1.0625rem with 1.7 leading.183 184| Role | Font | Size | Weight | Tracking |185|------|------|------|--------|----------|186| Hero | Cormorant Garamond | 5rem | 500 | -0.025em |187| H1 | Cormorant Garamond | 2.875rem | 500 | -0.022em |188| H2 | Cormorant Garamond | 1.5rem | 500 | -0.012em |189| Body | Inter | 1.0625rem | 400 | -0.003em / 1.7 |190 191The serif/sans pairing carries the texture. Display always at weight 500 — never bold.192 193## Geometry194- **Radii: 4 / 6 / 8.** Editorial geometry, refined.195- **No shadow.** A 1px indigo hairline at 10% opacity is the only depth signal.196- **Section gap: 128px** desktop, 80px mobile.197 198## Buttons199- **Primary** — solid deep indigo, bone label.200- **Secondary** — bone surface, indigo label, full-opacity indigo hairline.201- **Outline** — bare hairline at 30%.202- **Ghost** — faded indigo label, hover underline.203 204## Cards205Surface bone on canvas, 1px indigo hairline at 10%, 6px corners, **no shadow**. The card depth comes from the hairline alone — adding shadow would introduce a third tonal value and break the duotone.206 207## Charts & Data208Three-bar histogram in three chroma steps of indigo, 3px corner radius, 10px gap, no gridlines. Axis labels in faded indigo. Monochrome by definition.209 210## Do's and Don'ts211- ✅ Two colors only — indigo and bone. Chart chroma steps are the same hue.212- ✅ Hairline is the only depth. No shadows.213- ✅ Serif display + sans body. The pairing is the texture.214- ✅ Display weight 500. Bold breaks the editorial restraint.215- ❌ No third hue. No green, no orange, no grey accent. Ever.216- ❌ No drop shadow. Hairline only.217- ❌ No bold display weight. Cormorant lives at 500.218- ❌ No pill buttons or sharp 0px corners. The system is refined.219 220---221 222## Tokens223 224> Generated from the same source the live preview renders from.225> Treat the values below as the contract — never substitute approximations.226 227### Colors228 229| Role | Value |230|-----------|-------|231| primary | `#1B2447` |232| secondary | `#5A6688` |233| tertiary | `#8E97B5` |234| neutral | `#F1ECE0` |235| surface | `#F8F4EA` |236 237### Typography238 239- **Display:** Cormorant Garamond240- **Body:** Inter241- **Mono:** JetBrains Mono242 243| Role | size / leading / weight / tracking |244|------|------------------------------------|245| Hero | 5rem / 1 / 500 / -0.025em |246| H1 | 2.875rem / 1.05 / 500 / -0.022em |247| H2 | 1.5rem / 1.3 / 500 / -0.012em |248| Body | 1.0625rem / 1.7 / 400 / -0.003em |249 250### Radius251 252- sm: `4px`253- md: `6px`254- lg: `8px`255 256### Shadows257 258- **card:** `0 0 0 1px rgba(27, 36, 71, 0.10)`259- **button:** `none`260 261### Borders262 263- **card:** `1px solid rgba(27, 36, 71, 0.10)`264- **divider:** `rgba(27, 36, 71, 0.16)`265 266### Buttons267 268Four variants, each fully tokenized. The preview renders from these exact values.269 270#### Primary271 272| Property | Value |273|----------|-------|274| shape | `rounded` |275| background | `#1B2447` |276| color | `#F1ECE0` |277| border | `1px solid #1B2447` |278| padding | `12px 24px` |279| fontWeight | `500` |280| fontSize | `0.9375rem` |281| tracking | `-0.005em` |282 283#### Secondary284 285| Property | Value |286|----------|-------|287| shape | `rounded` |288| background | `#F8F4EA` |289| color | `#1B2447` |290| border | `1px solid #1B2447` |291| padding | `11px 23px` |292| fontWeight | `500` |293| fontSize | `0.9375rem` |294| tracking | `-0.005em` |295 296#### Outline297 298| Property | Value |299|----------|-------|300| shape | `rounded` |301| background | `transparent` |302| color | `#1B2447` |303| border | `1px solid rgba(27, 36, 71, 0.30)` |304| padding | `11px 23px` |305| fontWeight | `500` |306| fontSize | `0.9375rem` |307| tracking | `-0.005em` |308 309#### Ghost310 311| Property | Value |312|----------|-------|313| shape | `rounded` |314| background | `transparent` |315| color | `#5A6688` |316| border | `none` |317| padding | `11px 4px` |318| fontWeight | `500` |319| fontSize | `0.9375rem` |320| tracking | `-0.005em` |321| hoverHint | `underline` |322 323### Charts324 325| Property | Value |326|----------|-------|327| variant | `rounded-bars` |328| strokeWidth | `2` |329| gridlines | `false` |330| barRadius | `3px` |331| barGap | `10px` |332| highlight | `all` |333| axisColor | `#5A6688` |334| palette | `#1B2447`, `#5A6688`, `#8E97B5` |335 336---337 338## Pro tokens339 340> Production-fidelity tokens. States, density, motion, elevation,341> content rules and a measured WCAG contract — derived from the342> resting tokens unless explicitly authored.343 344### States345 346#### Button347 348- **hover** — bg: `rgba(142, 151, 181, 0.92)`, shadow: `0 4px 20px -8px rgba(142, 151, 181, 0.4)`349- **focus** — outline: `1.5px solid #8E97B5`, outline-offset: `4px`350- **active** — transform: `translateY(1px)`, filter: `brightness(0.95)`351- **disabled** — opacity: `0.45`352- **loading** — opacity: `0.7`353- **selected** — bg: `#1B2447`, color: `#F8F4EA`354 355#### Input356 357- **hover** — border: `1px solid #1B2447`358- **focus** — border: `1px solid #8E97B5`, shadow: `0 1px 0 0 #8E97B5`359- **disabled** — opacity: `0.45`360- **error** — border: `1px solid #991B1B`, shadow: `0 1px 0 0 #991B1B`361 362#### Card363 364- **hover** — shadow: `0 8px 24px -12px rgba(15,23,42,0.14)`, transform: `translateY(-1px)`365- **selected** — border: `1px solid #1B2447`366 367#### Tab368 369- **hover** — color: `#1B2447`370- **focus** — outline: `1.5px solid #8E97B5`, outline-offset: `3px`371- **selected** — color: `#8E97B5`, border: `0 0 2px 0 solid #8E97B5`372 373### Density374 375| Mode | padding × | row × | body | radius × | Use for |376|------|-----------|-------|------|----------|---------|377| compact | 0.72 | 0.78 | 0.8125rem | 0.85 | Information-dense — tables, IDEs, dashboards |378| comfortable | 1 | 1 | 0.9375rem | — | Default — most product UI |379| spacious | 1.35 | 1.3 | 1rem | 1.15 | Editorial — marketing, long-form, settings |380 381### Motion382 383**Signature — Page turn.** Deliberate, measured motion — like turning a magazine page. Never jerky, never overdone.384 385```css386transition: all 320ms cubic-bezier(0.25, 0.46, 0.45, 0.94);387```388 389| Token | Value |390|-------|-------|391| duration.instant | `80ms` |392| duration.fast | `180ms` |393| duration.base | `320ms` |394| duration.slow | `500ms` |395| easing.standard | `cubic-bezier(0.25, 0.46, 0.45, 0.94)` |396| easing.decelerate | `cubic-bezier(0.0, 0, 0.2, 1)` |397| easing.accelerate | `cubic-bezier(0.4, 0, 1, 1)` |398| easing.spring | `cubic-bezier(0.5, 1.2, 0.6, 1)` |399 400### Elevation401 402Five-level scale, system-specific recipe.403 404| Level | Shadow | Recipe |405|-------|--------|--------|406| level0 | `none` | Hairline only — typical editorial resting state. |407| level1 | `0 1px 2px rgba(15,23,42,0.04)` | Barely visible — list rows, dividers. |408| level2 | `0 8px 24px -12px rgba(15,23,42,0.12)` | Pull-quote, sidebar — soft lift. |409| level3 | `0 16px 40px -16px rgba(15,23,42,0.18)` | Cover story card — clear lift. |410| level4 | `0 32px 80px -24px rgba(15,23,42,0.28)` | Modal — overlays the layout, with scrim. |411 412### Content413 414- **measure:** `60ch` (max line length for body prose)415- **paragraph spacing:** `1.5em`416- **list indent:** `1.75em`417- **list gap:** `0.55em`418- **link:** color `#8E97B5`, underline `always`419- **blockquote:** border `4px solid #8E97B5`, padding `0.4em 0 0.4em 1.5em`420- **code:** background `rgba(27, 36, 71, 0.06)`, color `#1B2447`421 422### Accessibility (WCAG 2.1)423 424**Overall:** FAIL425 426| Pair | Ratio | Required | Grade | Suggested fix |427|------|-------|----------|-------|---------------|428| Body text on surface | 13.76:1 | AA | AAA | — |429| Body text on canvas | 12.82:1 | AA | AAA | — |430| Muted text on surface | 5.18:1 | AA | AA | — |431| Accent on surface | 2.64:1 | AA-Large | FAIL | `#606b92` → 4.76:1 (AA) |432| Accent on canvas | 2.46:1 | AA-Large | FAIL | `#5b678c` → 4.73:1 (AA) |433 # 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=Cormorant+Garamond:wght@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: ['"Cormorant Garamond"', 'serif'], sans: ['"Inter"', 'sans-serif'], mono: ['"JetBrains Mono"', 'monospace'], }, colors: { primary: '#1B2447', secondary: '#5A6688', accent: '#8E97B5', neutral: '#F1ECE0', surface: '#F8F4EA', }, borderRadius: { sm: '4px', md: '6px', lg: '8px', }, }, },};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.
Dark brushed metallic. Anthracite canvas with cool brushed-steel CTAs catching a polished top-edge highlight under directional light. Premium hardware in dark theme — pro tools, audio, automotive.