Warm grainy aurora applied with restraint — amber bleeds into coral and softens into violet, with real fractal-noise grain layered on top. Inter throughout, generous bone-white surfaces, and the gradient appears in exactly two places: the primary CTA and the featured hero tile. Everything else stays calm so the bloom carries.
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: "Aurora Haze"3description: "Warm grainy aurora applied with restraint — amber bleeds into coral and softens into violet, with real fractal-noise grain layered on top. Inter throughout, generous bone-white surfaces, and the gradient appears in exactly two places: the primary CTA and the featured hero tile. Everything else stays calm so the bloom carries."4tags: [grainy, gradient, modern, premium, light]5colors:6 primary: "#171419"7 secondary: "#6b6470"8 tertiary: "#ef5a8a"9 neutral: "#fbf8f5"10 surface: "#ffffff"11typography:12 display: Inter13 body: Inter14 mono: "JetBrains Mono"15 scale:16 hero: "4.5rem / 1.02 / 700 / -0.04em"17 h1: "2.75rem / 1.1 / 700 / -0.03em"18 h2: "1.625rem / 1.22 / 600 / -0.018em"19 body: "1.0625rem / 1.6 / 400 / -0.005em"20radius:21 sm: 10px22 md: 16px23 lg: 22px24 pill: 9999px25shadows:26 card: "rgba(23,20,25,0.04) 0 1px 2px, rgba(23,20,25,0.06) 0 14px 36px -16px"27 button: "rgba(240,102,148,0.28) 0 10px 24px -10px, rgba(140,92,255,0.22) 0 6px 18px -8px"28borders:29 card: "1px solid rgba(23,20,25,0.06)"30 divider: rgba(23,20,25,0.08)31buttons:32 primary:33 background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/></svg>"), radial-gradient(ellipse 90% 70% at 12% 88%, #ff8a4c 0%, transparent 55%), radial-gradient(ellipse 70% 80% at 88% 12%, #c47bff 0%, transparent 55%), radial-gradient(ellipse 50% 60% at 55% 50%, #ff6b9b 0%, transparent 60%), linear-gradient(135deg, #ffb27a 0%, #f06694 45%, #8c5cff 100%)34 color: #ffffff35 border: none36 shape: rounded37 padding: 12px 22px38 font: 700 / 0.9375rem39 shadow: rgba(240,102,148,0.28) 0 10px 24px -10px, rgba(140,92,255,0.22) 0 6px 18px -8px40 secondary:41 background: #17141942 color: #fbf8f543 border: none44 shape: rounded45 padding: 12px 22px46 font: 600 / 0.9375rem47 outline:48 background: transparent49 color: #17141950 border: 1px solid rgba(23,20,25,0.16)51 shape: rounded52 padding: 12px 22px53 font: 600 / 0.9375rem54 ghost:55 background: transparent56 color: #6b647057 border: none58 shape: rounded59 padding: 12px 18px60 font: 600 / 0.9375rem61charts:62 variant: "rounded-bars"63 stroke_width: 1.564 fill_opacity: 0.1265 gridlines: false66 bar_gap: 10px67 dot_marker: true68 palette: [rgba(23,20,25,0.10), rgba(23,20,25,0.10), rgba(23,20,25,0.10), "#f06694", rgba(23,20,25,0.10), rgba(23,20,25,0.10), rgba(23,20,25,0.10)]69fonts_url: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap"70dependencies: ["lucide-react"]71---72 73# Aurora Haze74 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 **Aurora Haze** 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 `url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/></svg>"), radial-gradient(ellipse 90% 70% at 12% 88%, #ff8a4c 0%, transparent 55%), radial-gradient(ellipse 70% 80% at 88% 12%, #c47bff 0%, transparent 55%), radial-gradient(ellipse 50% 60% at 55% 50%, #ff6b9b 0%, transparent 60%), linear-gradient(135deg, #ffb27a 0%, #f06694 45%, #8c5cff 100%)`, text `#ffffff`, padding `12px 22px`, weight `700`, shadow `rgba(240,102,148,0.28) 0 10px 24px -10px, rgba(140,92,255,0.22) 0 6px 18px -8px`.111- **Secondary** — rounded shape, bg `#171419`, text `#fbf8f5`, padding `12px 22px`, weight `600`.112- **Outline** — rounded shape, text `#171419`, border `1px solid rgba(23,20,25,0.16)`, padding `12px 22px`, weight `600`.113- **Ghost** — rounded shape, text `#6b6470`, padding `12px 18px`, weight `600`.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: `#ffffff`122- Border: `1px solid rgba(23,20,25,0.06)`123- Shadow: `rgba(23,20,25,0.04) 0 1px 2px, rgba(23,20,25,0.06) 0 14px 36px -16px`124- Radius: `radius.lg` (`22px`)125- Internal padding: `20px` for compact cards, `24–28px` for content cards.126 127#### Tabs128 129Variant: `underline`. Flat row of labels. Active tab gets a 2px underline in the accent color — no fill.130 131#### Charts132 133- Bar/line variant: `rounded-bars`134- No gridlines — let the bars/lines carry the data.135- Use the declared palette in order: `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)`, `#f06694`, `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)`.136 137#### Typography pairings138 139- **Display (`Inter`)** — h1, h2, hero headlines, brand wordmarks.140- **Body (`Inter`)** — paragraphs, labels, button text, form inputs.141- **Mono (`JetBrains Mono`)** — code, eyebrows, metadata, numerals in tables.142 143### 4 · Hard constraints144 145Never do any of the following without explicit instruction from the user:146 147- Introduce a new color, font, radius, or shadow that isn't declared above.148- Mix this system with another (e.g. don't paste in Material or Bootstrap defaults).149- Use generic gradient defaults (purple→blue, peach→pink) — they break the system's voice.150- Reach for emoji icons. Use a consistent icon library and size icons in line with body type.151- Add motion that exceeds the system's restraint — keep transitions short (≤200ms) and subtle.152 153### 5 · Before you finish — verify154 155Run through this checklist for every screen you produce:156 157- [ ] Every color used appears in the Colors table above.158- [ ] Headlines use the display font; body copy uses the body font.159- [ ] Buttons match one of the declared variants exactly (shape, padding, weight).160- [ ] Border-radius values come from `radius.sm` / `radius.md` / `radius.lg` / `radius.pill`.161- [ ] Cards and dividers use the declared border + shadow tokens.162- [ ] No values were invented; if you needed something missing, you stopped and asked.163 164---165 166## 1. Atmosphere167 168Aurora Haze is a calm bone-white surface with one hot moment: a multi-stop grainy aurora gradient that runs amber → coral → soft violet, with real SVG fractal-noise grain layered on top. The gradient lives in exactly two places — the primary CTA and the featured hero tile — so it always reads as a deliberate bloom, never decoration. Inter carries every word at 400/600/700; numbers shift to JetBrains Mono. Surfaces are flat ivory, hairlines at 6% ink, generous white space.169 170The discipline is in placement: the gradient is never repeated on a third surface. Buttons that aren't the CTA fall back to graphite, outline, or ghost. The chart uses muted graphite bars except for one column rendered in coral — the visual rhyme tells you "this is the active value" without copy.171 172**Signature moves**173- Multi-stop grainy gradient (amber → coral → violet) with **real fractal-noise grain** baked in via an inline SVG `feTurbulence` data URI174- Gradient appears exactly twice per screen: primary CTA + featured hero tile175- The **active bar** in the chart picks up the coral stop from the gradient — visual rhyme176- Bone-white surface (`#fbf8f5`), hairlines at 6% ink, no decorative borders177- Inter at every level — display 700, body 400, UI 600178 179## 2. The grainy gradient (copy this exactly)180 181The grain is not a Photoshop filter or a Tailwind class — it is an inline SVG with `feTurbulence` set to `fractalNoise`, baseFrequency `0.9`, two octaves, stitched. The noise layer sits **on top** of a stack of three radial-gradient blooms over a 135° linear base. Stop order matters.182 183```css184background:185 url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)' opacity='0.55'/></svg>"),186 radial-gradient(ellipse 90% 70% at 12% 88%, #ff8a4c 0%, transparent 55%),187 radial-gradient(ellipse 70% 80% at 88% 12%, #c47bff 0%, transparent 55%),188 radial-gradient(ellipse 50% 60% at 55% 50%, #ff6b9b 0%, transparent 60%),189 linear-gradient(135deg, #ffb27a 0%, #f06694 45%, #8c5cff 100%);190```191 192The `feColorMatrix` reduces the noise to alpha-only (no color shift), so the grain darkens the gradient instead of tinting it. The 0.55 opacity is the calibrated value — anything higher reads as "dirty," anything lower disappears on retina screens.193 194### Stop palette195- **Amber bloom** `#ff8a4c` — bottom-left anchor196- **Violet bloom** `#c47bff` — top-right counter-anchor197- **Coral core** `#ff6b9b` — center bloom, 60% reach198- **Linear base** `#ffb27a → #f06694 → #8c5cff` at 135°199 200## 3. Palette201 202### Surface203- **Bone** `#fbf8f5` — page background204- **Snow** `#ffffff` — cards, sheets205 206### Ink207- **Ink** `#171419` — text, headings, secondary CTA fill208- **Ink 55** `#6b6470` — secondary text, mono labels209- **Hairline** `rgba(23,20,25,0.06)` — every divider210 211### Accent (single)212- **Coral** `#ef5a8a` — picked from the gradient's mid stop, used for active tab underline + active chart bar213 214## 4. Typography215 216| Role | Font | Size | Weight | Leading | Tracking |217|------|------|------|--------|---------|----------|218| Hero | Inter | 72px | 700 | 1.02 | -0.04em |219| H1 | Inter | 44px | 700 | 1.10 | -0.03em |220| H2 | Inter | 26px | 600 | 1.22 | -0.018em |221| Body | Inter | 17px | 400 | 1.6 | -0.005em |222| UI / Button | Inter | 15px | 700 | 1.4 | 0 |223| Number | JetBrains Mono | 13px | 500 | 1.0 | 0 |224 225Inter at three weights only — 400, 600, 700. The 800 weight is reserved for the optional oversized gradient KPI inside the featured tile.226 227## 5. Buttons228 229### Primary (Grainy Gradient Box)230A solid box (not a pill) with the full grainy-gradient stack as background, white label, no border. The drop shadow uses two layered colored shadows that pick the coral and violet stops — they bloom under the button like a soft halo.231 232```css233background: /* the full grainy gradient stack from §2 */;234color: #ffffff;235padding: 12px 22px;236border-radius: 16px;237box-shadow:238 rgba(240,102,148,0.28) 0 10px 24px -10px,239 rgba(140,92,255,0.22) 0 6px 18px -8px;240font: 700 15px/1.4 Inter;241```242 243### Secondary (Graphite Box)244Solid ink `#171419`, bone label, same 16px radius, no shadow. The graphite-on-bone pairs cleanly with the gradient without competing.245 246### Outline & Ghost247- Outline: transparent, 1px hairline at 16% ink248- Ghost: no border, ink-55, hover lifts to ink249 250## 6. The Featured tile251 252The featured hero tile uses the **same exact gradient stack** as the primary CTA. White display headline at 32px in Inter 700, label "Featured" in mono at 11px uppercase 0.12em tracking. No badge, no icon — the gradient does the work.253 254## 7. Charts255 256Rounded bars (pill ends), 10px gap. Six bars in graphite at 10% opacity, **one bar in coral** `#f06694` (the gradient's mid stop). The eye reads the coral bar as the active value because it visually rhymes with the CTA — no separate legend needed.257 258## 8. Tabs259 260Underline 1.5px in coral. Inactive tabs in Inter 600 ink-55. Hover lifts to ink. Active = ink + coral underline.261 262## 9. Spacing263 264- Base 4px265- Scale: `4, 8, 12, 16, 20, 24, 32, 48, 64, 96`266- Section padding: 96px desktop, 48px mobile267 268## 10. Do's & don'ts269 270✅ **Do**271- Use the full grainy-gradient stack from §2 verbatim — the noise layer is what makes it expensive272- Apply the gradient exactly twice per screen: primary CTA + featured tile273- Pick the active chart bar from the gradient's coral stop so it rhymes with the CTA274- Layer two colored shadows under the gradient button — coral + violet, low opacity, wide spread275 276❌ **Don't**277- Apply the gradient to a third surface (cards, secondary buttons, headers) — it loses its weight278- Use a 2-stop gradient (e.g. peach → pink) — this system is multi-stop with grain, never the cliché279- Skip the SVG noise layer — without grain the gradient reads as generic280- Use coral anywhere except active states (chart bar, tab underline) — the gradient owns the bloom281 282---283 284## Tokens285 286> Generated from the same source the live preview renders from.287> Treat the values below as the contract — never substitute approximations.288 289### Colors290 291| Role | Value |292|-----------|-------|293| primary | `#171419` |294| secondary | `#6b6470` |295| tertiary | `#ef5a8a` |296| neutral | `#fbf8f5` |297| surface | `#ffffff` |298 299### Typography300 301- **Display:** Inter302- **Body:** Inter303- **Mono:** JetBrains Mono304 305| Role | size / leading / weight / tracking |306|------|------------------------------------|307| Hero | 4.5rem / 1.02 / 700 / -0.04em |308| H1 | 2.75rem / 1.1 / 700 / -0.03em |309| H2 | 1.625rem / 1.22 / 600 / -0.018em |310| Body | 1.0625rem / 1.6 / 400 / -0.005em |311 312### Radius313 314- sm: `10px`315- md: `16px`316- lg: `22px`317- pill: `9999px`318 319### Shadows320 321- **card:** `rgba(23,20,25,0.04) 0 1px 2px, rgba(23,20,25,0.06) 0 14px 36px -16px`322- **button:** `rgba(240,102,148,0.28) 0 10px 24px -10px, rgba(140,92,255,0.22) 0 6px 18px -8px`323 324### Borders325 326- **card:** `1px solid rgba(23,20,25,0.06)`327- **divider:** `rgba(23,20,25,0.08)`328 329### Buttons330 331Four variants, each fully tokenized. The preview renders from these exact values.332 333#### Primary334 335| Property | Value |336|----------|-------|337| shape | `rounded` |338| background | `url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/></svg>"), radial-gradient(ellipse 90% 70% at 12% 88%, #ff8a4c 0%, transparent 55%), radial-gradient(ellipse 70% 80% at 88% 12%, #c47bff 0%, transparent 55%), radial-gradient(ellipse 50% 60% at 55% 50%, #ff6b9b 0%, transparent 60%), linear-gradient(135deg, #ffb27a 0%, #f06694 45%, #8c5cff 100%)` |339| color | `#ffffff` |340| border | `none` |341| padding | `12px 22px` |342| fontWeight | `700` |343| fontSize | `0.9375rem` |344| shadow | `rgba(240,102,148,0.28) 0 10px 24px -10px, rgba(140,92,255,0.22) 0 6px 18px -8px` |345 346#### Secondary347 348| Property | Value |349|----------|-------|350| shape | `rounded` |351| background | `#171419` |352| color | `#fbf8f5` |353| border | `none` |354| padding | `12px 22px` |355| fontWeight | `600` |356| fontSize | `0.9375rem` |357 358#### Outline359 360| Property | Value |361|----------|-------|362| shape | `rounded` |363| background | `transparent` |364| color | `#171419` |365| border | `1px solid rgba(23,20,25,0.16)` |366| padding | `12px 22px` |367| fontWeight | `600` |368| fontSize | `0.9375rem` |369 370#### Ghost371 372| Property | Value |373|----------|-------|374| shape | `rounded` |375| background | `transparent` |376| color | `#6b6470` |377| border | `none` |378| padding | `12px 18px` |379| fontWeight | `600` |380| fontSize | `0.9375rem` |381 382### Charts383 384| Property | Value |385|----------|-------|386| variant | `rounded-bars` |387| strokeWidth | `1.5` |388| fillOpacity | `0.12` |389| gridlines | `false` |390| barGap | `10px` |391| dotMarker | `true` |392| palette | `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)`, `#f06694`, `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)`, `rgba(23,20,25,0.10)` |393 394---395 396## Pro tokens397 398> Production-fidelity tokens. States, density, motion, elevation,399> content rules and a measured WCAG contract — derived from the400> resting tokens unless explicitly authored.401 402### States403 404#### Button405 406- **hover** — shadow: `0 4px 12px -2px rgba(15,23,42,0.18)`, filter: `brightness(0.97)`407- **focus** — outline: `2px solid rgba(239, 90, 138, 0.5)`, outline-offset: `2px`408- **active** — shadow: `0 1px 2px rgba(15,23,42,0.1)`, transform: `scale(0.98)`409- **disabled** — opacity: `0.4`, filter: `saturate(0.5)`410- **loading** — opacity: `0.7`411- **selected** — bg: `#ef5a8a`, color: `#ffffff`412 413#### Input414 415- **hover** — border: `1px solid rgba(239, 90, 138, 0.5)`416- **focus** — border: `1.5px solid #ef5a8a`, shadow: `0 0 0 4px rgba(239, 90, 138, 0.15)`417- **disabled** — bg: `rgba(23, 20, 25, 0.04)`, opacity: `0.4`418- **error** — border: `1.5px solid #DC2626`, shadow: `0 0 0 4px rgba(220,38,38,0.15)`419 420#### Card421 422- **hover** — shadow: `0 12px 28px -12px rgba(15,23,42,0.18)`, transform: `translateY(-2px)`423- **selected** — bg: `rgba(239, 90, 138, 0.04)`, border: `1.5px solid #ef5a8a`424- **dragging** — shadow: `0 20px 48px -16px rgba(15,23,42,0.3)`, transform: `scale(1.02) rotate(-0.5deg)`, opacity: `0.9`425 426#### Tab427 428- **hover** — bg: `rgba(239, 90, 138, 0.06)`, color: `#ef5a8a`429- **focus** — outline: `2px solid rgba(239, 90, 138, 0.5)`, outline-offset: `2px`430- **selected** — color: `#ef5a8a`, border: `0 0 2px 0 solid #ef5a8a`431 432### Density433 434| Mode | padding × | row × | body | radius × | Use for |435|------|-----------|-------|------|----------|---------|436| compact | 0.72 | 0.78 | 0.8125rem | 0.85 | Information-dense — tables, IDEs, dashboards |437| comfortable | 1 | 1 | 0.9375rem | — | Default — most product UI |438| spacious | 1.35 | 1.3 | 1rem | 1.15 | Editorial — marketing, long-form, settings |439 440### Motion441 442**Signature — Quiet ease.** 240 ms ease-out for all standard transitions. Reliable, invisible — motion stays out of the way.443 444```css445transition: all 240ms cubic-bezier(0.4, 0, 0.2, 1);446```447 448| Token | Value |449|-------|-------|450| duration.instant | `80ms` |451| duration.fast | `160ms` |452| duration.base | `240ms` |453| duration.slow | `380ms` |454| easing.standard | `cubic-bezier(0.4, 0, 0.2, 1)` |455| easing.decelerate | `cubic-bezier(0.0, 0, 0.2, 1)` |456| easing.accelerate | `cubic-bezier(0.4, 0, 1, 1)` |457| easing.spring | `cubic-bezier(0.34, 1.4, 0.64, 1)` |458 459### Elevation460 461Five-level scale, system-specific recipe.462 463| Level | Shadow | Recipe |464|-------|--------|--------|465| level0 | `none` | Flat — hairline border separates. |466| level1 | `0 1px 2px rgba(15,23,42,0.06), 0 1px 3px rgba(15,23,42,0.04)` | List rows, resting cards. |467| level2 | `0 4px 12px -2px rgba(15,23,42,0.1), 0 2px 6px rgba(15,23,42,0.06)` | Hover cards, popover. |468| level3 | `0 12px 32px -8px rgba(15,23,42,0.16), 0 4px 12px rgba(15,23,42,0.08)` | Sheets, side panels. |469| level4 | `0 28px 64px -16px rgba(15,23,42,0.28), 0 8px 24px rgba(15,23,42,0.12)` | Modals — scrim required. |470 471### Content472 473- **measure:** `68ch` (max line length for body prose)474- **paragraph spacing:** `1.2em`475- **list indent:** `1.5em`476- **list gap:** `0.5em`477- **link:** color `#ef5a8a`, underline `hover`478- **blockquote:** border `3px solid rgba(239, 90, 138, 0.6)`, padding `0.5em 0 0.5em 1.25em`479- **code:** background `rgba(23, 20, 25, 0.06)`, color `#171419`480 481### Accessibility (WCAG 2.1)482 483**Overall:** AA-Large484 485| Pair | Ratio | Required | Grade | Suggested fix |486|------|-------|----------|-------|---------------|487| Body text on surface | 18.25:1 | AA | AAA | — |488| Body text on canvas | 17.25:1 | AA | AAA | — |489| Muted text on surface | 5.7:1 | AA | AA | — |490| Accent on surface | 3.23:1 | AA-Large | AA-Large | — |491| Accent on canvas | 3.05:1 | AA-Large | AA-Large | — |492 # 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;800&family=JetBrains+Mono:wght@400;500&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: '#171419', secondary: '#6b6470', accent: '#ef5a8a', neutral: '#fbf8f5', surface: '#ffffff', }, borderRadius: { sm: '10px', md: '16px', lg: '22px', }, }, },};A design-studio identity built on asymmetric oversized typography. Cream surfaces, Fraunces at extreme display scale paired with Inter Tight for body, an inked black block reserved for the studio mark and the single primary CTA, and an italic serif accent line that breaks every layout. Built for design agencies, art-direction portfolios, and creative studios that lead with type instead of imagery.
A single beautifully calibrated diagonal gradient runs across the page — cool slate into dusty mauve into champagne mist — while every other element stays restrained ink and hairlines. The gradient is the room.