A near-black dark canvas where one cosmic grainy gradient does all the talking — deep indigo bleeds into magenta and ignites into warm amber, with real fractal-noise grain layered on top. Inter throughout, hairlines at 8% white, and the gradient burns through the primary CTA, the featured hero tile, and the active chart bar. Quiet space, hot bloom.
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: "Nebula Drift"3description: "A near-black dark canvas where one cosmic grainy gradient does all the talking — deep indigo bleeds into magenta and ignites into warm amber, with real fractal-noise grain layered on top. Inter throughout, hairlines at 8% white, and the gradient burns through the primary CTA, the featured hero tile, and the active chart bar. Quiet space, hot bloom."4tags: [grainy, gradient, dark, modern, premium]5colors:6 primary: "#f5f3ff"7 secondary: "#9690b8"8 tertiary: "#e2399a"9 neutral: "#0a0814"10 surface: "#13101f"11typography:12 display: Inter13 body: Inter14 mono: "JetBrains Mono"15 scale:16 hero: "4.75rem / 1 / 700 / -0.04em"17 h1: "2.875rem / 1.08 / 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(0,0,0,0.4) 0 1px 2px, rgba(0,0,0,0.5) 0 18px 44px -18px"27 button: "rgba(226,57,154,0.40) 0 14px 32px -12px, rgba(255,138,61,0.28) 0 8px 22px -10px"28borders:29 card: "1px solid rgba(245,243,255,0.06)"30 divider: rgba(245,243,255,0.08)31buttons:32 primary:33 background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='280' height='280'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.95' 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.5 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/></svg>"), radial-gradient(ellipse 75% 60% at 15% 85%, #ff8a3d 0%, transparent 55%), radial-gradient(ellipse 70% 75% at 85% 18%, #4a3cff 0%, transparent 55%), radial-gradient(ellipse 55% 65% at 58% 50%, #e2399a 0%, transparent 60%), linear-gradient(140deg, #2a1a6c 0%, #c92e8c 50%, #ff8a3d 100%)34 color: #ffffff35 border: none36 shape: rounded37 padding: 13px 24px38 font: 700 / 0.9375rem / -0.01em39 shadow: rgba(226,57,154,0.40) 0 14px 32px -12px, rgba(255,138,61,0.28) 0 8px 22px -10px40 secondary:41 background: rgba(245,243,255,0.08)42 color: #f5f3ff43 border: 1px solid rgba(245,243,255,0.10)44 shape: rounded45 padding: 13px 24px46 font: 600 / 0.9375rem47 outline:48 background: transparent49 color: #f5f3ff50 border: 1px solid rgba(245,243,255,0.18)51 shape: rounded52 padding: 13px 24px53 font: 600 / 0.9375rem54 ghost:55 background: transparent56 color: #9690b857 border: none58 shape: rounded59 padding: 13px 18px60 font: 600 / 0.9375rem61charts:62 variant: "rounded-bars"63 stroke_width: 1.564 fill_opacity: 0.1665 gridlines: false66 bar_gap: 10px67 dot_marker: true68 palette: [rgba(245,243,255,0.10), rgba(245,243,255,0.10), rgba(245,243,255,0.10), rgba(245,243,255,0.10), rgba(245,243,255,0.10), "#e2399a", rgba(245,243,255,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# Nebula Drift74 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 **Nebula Drift** 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='280' height='280'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.95' 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.5 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/></svg>"), radial-gradient(ellipse 75% 60% at 15% 85%, #ff8a3d 0%, transparent 55%), radial-gradient(ellipse 70% 75% at 85% 18%, #4a3cff 0%, transparent 55%), radial-gradient(ellipse 55% 65% at 58% 50%, #e2399a 0%, transparent 60%), linear-gradient(140deg, #2a1a6c 0%, #c92e8c 50%, #ff8a3d 100%)`, text `#ffffff`, padding `13px 24px`, weight `700`, shadow `rgba(226,57,154,0.40) 0 14px 32px -12px, rgba(255,138,61,0.28) 0 8px 22px -10px`.111- **Secondary** — rounded shape, bg `rgba(245,243,255,0.08)`, text `#f5f3ff`, border `1px solid rgba(245,243,255,0.10)`, padding `13px 24px`, weight `600`.112- **Outline** — rounded shape, text `#f5f3ff`, border `1px solid rgba(245,243,255,0.18)`, padding `13px 24px`, weight `600`.113- **Ghost** — rounded shape, text `#9690b8`, padding `13px 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: `#13101f`122- Border: `1px solid rgba(245,243,255,0.06)`123- Shadow: `rgba(0,0,0,0.4) 0 1px 2px, rgba(0,0,0,0.5) 0 18px 44px -18px`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(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `#e2399a`, `rgba(245,243,255,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 168Nebula Drift is a near-black canvas where one cosmic grainy gradient does the work — deep indigo bleeds into magenta and ignites into warm amber, with real SVG fractal-noise grain layered on top. The surface is `#0a0814` (near-black with a faint indigo cast), cards lift to `#13101f`, and the gradient lives in exactly three places: the primary CTA, the featured hero tile, and the active bar of the chart. Inter at 400/600/700 carries every word; numbers in JetBrains Mono.169 170The discipline is **negative space on the dark canvas**. Hairlines at 8% white only — no decorative borders, no glow halos, no second accent. The gradient is the entire color identity.171 172**Signature moves**173- Cosmic three-stop grainy gradient (indigo → magenta → amber bloom) with **real fractal-noise grain** via inline SVG `feTurbulence`174- Near-black canvas (`#0a0814`) with a faint indigo cast — true black would kill the gradient's depth175- Magenta `#e2399a` picked from the gradient mid, used only on active chart bar + tab underline176- Two-color drop shadow under the CTA: magenta + amber, low opacity, wide spread — the bloom escapes the box177- Inter at 700 in 76px display, -0.04em tracking — calm modern grotesk against the bloom178 179## 2. The grainy gradient (copy this exactly)180 181Inline SVG `feTurbulence` at baseFrequency `0.95`, two octaves, stitched. The dark canvas needs a slightly higher noise frequency than the light systems so grain reads through the deeper hues. Three radial blooms over a 140° linear base — indigo anchor bottom-left is replaced by an amber anchor (warm against deep blue), magenta anchors top-right.182 183```css184background:185 url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='280' height='280'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.95' 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.5 0'/></filter><rect width='100%' height='100%' filter='url(%23n)' opacity='0.5'/></svg>"),186 radial-gradient(ellipse 75% 60% at 15% 85%, #ff8a3d 0%, transparent 55%),187 radial-gradient(ellipse 70% 75% at 85% 18%, #4a3cff 0%, transparent 55%),188 radial-gradient(ellipse 55% 65% at 58% 50%, #e2399a 0%, transparent 60%),189 linear-gradient(140deg, #2a1a6c 0%, #c92e8c 50%, #ff8a3d 100%);190```191 192The noise alpha is 0.5 (lower than the light systems) — dark backgrounds amplify grain visually, so less is more.193 194### Stop palette195- **Indigo** `#2a1a6c` / radial `#4a3cff` — top-right counter-anchor196- **Magenta** `#c92e8c` / radial `#e2399a` — center bloom + accent extraction197- **Amber** `#ff8a3d` — bottom-left anchor (warm fights the cold indigo)198 199## 3. Palette200 201### Surface202- **Void** `#0a0814` — page background (near-black with faint indigo cast — never `#000`)203- **Lift** `#13101f` — cards, sheets204- **Edge** `rgba(245,243,255,0.06)` — hairline borders205- **Glass** `rgba(245,243,255,0.08)` — secondary button fill206 207### Ink208- **Star** `#f5f3ff` — text, headings (warm white with violet cast)209- **Star 60** `#9690b8` — secondary text, mono labels210 211### Accent (single)212- **Magenta** `#e2399a` — extracted from the gradient's mid radial, used only on active chart bar + active tab underline213 214## 4. Typography215 216| Role | Font | Size | Weight | Leading | Tracking |217|------|------|------|--------|---------|----------|218| Hero | Inter | 76px | 700 | 1.0 | -0.04em |219| H1 | Inter | 46px | 700 | 1.08 | -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.01em |223| Number | JetBrains Mono | 13px | 500 | 1.0 | 0 |224 225Inter at three weights: 400 / 600 / 700. The 800 weight is reserved for the optional oversized KPI inside the featured tile.226 227## 5. Buttons228 229### Primary (Grainy Gradient Box)230```css231background: /* full gradient stack from §2 */;232color: #ffffff;233padding: 13px 24px;234border-radius: 16px;235box-shadow:236 rgba(226,57,154,0.40) 0 14px 32px -12px,237 rgba(255,138,61,0.28) 0 8px 22px -10px;238font: 700 15px/1.4 Inter;239letter-spacing: -0.01em;240```241 242The two-color shadow (magenta + amber) is the bloom escaping the box — it picks up the gradient's hot stops and lets them hover under the button.243 244### Secondary (Glass)245```css246background: rgba(245,243,255,0.08);247border: 1px solid rgba(245,243,255,0.10);248color: #f5f3ff;249```250 251### Outline & Ghost252- Outline: transparent, 1px hairline at 18% star253- Ghost: no border, star-60, hover lifts to star254 255## 6. The Featured tile256 257The featured hero tile uses the **same** gradient stack. Inside: white display headline at 30px in Inter 700. Mono label "Featured" at 11px uppercase 0.12em tracking, color `rgba(255,255,255,0.78)`.258 259## 7. Charts260 261Rounded bars (pill ends), 10px gap. Six bars at 10% star (warm white). **One bar in magenta** `#e2399a` — the gradient's mid radial. The eye reads the magenta bar as active because it visually rhymes with the CTA's bloom.262 263## 8. Tabs264 265Underline 1.5px in magenta `#e2399a`. Inactive tabs in Inter 600 star-60. Hover lifts to star.266 267## 9. Spacing268 269- Base 4px270- Scale: `4, 8, 12, 16, 20, 24, 32, 48, 64, 96`271- Section padding: 96px desktop, 48px mobile272 273## 10. Do's & don'ts274 275✅ **Do**276- Use the full gradient stack from §2 verbatim — the noise frequency 0.95 is calibrated for the dark canvas277- Apply the gradient exactly three times: CTA, featured tile, active chart bar278- Use `#0a0814` (near-black with indigo cast), never pure `#000` — true black flattens the gradient279- Layer two colored shadows under the CTA: magenta + amber, low opacity, wide spread280 281❌ **Don't**282- Use a 2-stop dark gradient (e.g. purple → blue) — this is multi-stop with grain, never the cliché283- Add a third accent hue — magenta carries every "look here" moment alone284- Apply the gradient to cards, headers, or sidebar — block-level on three surfaces only285- Skip the SVG noise — on a dark canvas the gradient flattens to gradient-stock without it286 287---288 289## Tokens290 291> Generated from the same source the live preview renders from.292> Treat the values below as the contract — never substitute approximations.293 294### Colors295 296| Role | Value |297|-----------|-------|298| primary | `#f5f3ff` |299| secondary | `#9690b8` |300| tertiary | `#e2399a` |301| neutral | `#0a0814` |302| surface | `#13101f` |303 304### Typography305 306- **Display:** Inter307- **Body:** Inter308- **Mono:** JetBrains Mono309 310| Role | size / leading / weight / tracking |311|------|------------------------------------|312| Hero | 4.75rem / 1 / 700 / -0.04em |313| H1 | 2.875rem / 1.08 / 700 / -0.03em |314| H2 | 1.625rem / 1.22 / 600 / -0.018em |315| Body | 1.0625rem / 1.6 / 400 / -0.005em |316 317### Radius318 319- sm: `10px`320- md: `16px`321- lg: `22px`322- pill: `9999px`323 324### Shadows325 326- **card:** `rgba(0,0,0,0.4) 0 1px 2px, rgba(0,0,0,0.5) 0 18px 44px -18px`327- **button:** `rgba(226,57,154,0.40) 0 14px 32px -12px, rgba(255,138,61,0.28) 0 8px 22px -10px`328 329### Borders330 331- **card:** `1px solid rgba(245,243,255,0.06)`332- **divider:** `rgba(245,243,255,0.08)`333 334### Buttons335 336Four variants, each fully tokenized. The preview renders from these exact values.337 338#### Primary339 340| Property | Value |341|----------|-------|342| shape | `rounded` |343| background | `url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='280' height='280'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.95' 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.5 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/></svg>"), radial-gradient(ellipse 75% 60% at 15% 85%, #ff8a3d 0%, transparent 55%), radial-gradient(ellipse 70% 75% at 85% 18%, #4a3cff 0%, transparent 55%), radial-gradient(ellipse 55% 65% at 58% 50%, #e2399a 0%, transparent 60%), linear-gradient(140deg, #2a1a6c 0%, #c92e8c 50%, #ff8a3d 100%)` |344| color | `#ffffff` |345| border | `none` |346| padding | `13px 24px` |347| fontWeight | `700` |348| fontSize | `0.9375rem` |349| tracking | `-0.01em` |350| shadow | `rgba(226,57,154,0.40) 0 14px 32px -12px, rgba(255,138,61,0.28) 0 8px 22px -10px` |351 352#### Secondary353 354| Property | Value |355|----------|-------|356| shape | `rounded` |357| background | `rgba(245,243,255,0.08)` |358| color | `#f5f3ff` |359| border | `1px solid rgba(245,243,255,0.10)` |360| padding | `13px 24px` |361| fontWeight | `600` |362| fontSize | `0.9375rem` |363 364#### Outline365 366| Property | Value |367|----------|-------|368| shape | `rounded` |369| background | `transparent` |370| color | `#f5f3ff` |371| border | `1px solid rgba(245,243,255,0.18)` |372| padding | `13px 24px` |373| fontWeight | `600` |374| fontSize | `0.9375rem` |375 376#### Ghost377 378| Property | Value |379|----------|-------|380| shape | `rounded` |381| background | `transparent` |382| color | `#9690b8` |383| border | `none` |384| padding | `13px 18px` |385| fontWeight | `600` |386| fontSize | `0.9375rem` |387 388### Charts389 390| Property | Value |391|----------|-------|392| variant | `rounded-bars` |393| strokeWidth | `1.5` |394| fillOpacity | `0.16` |395| gridlines | `false` |396| barGap | `10px` |397| dotMarker | `true` |398| palette | `rgba(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `rgba(245,243,255,0.10)`, `#e2399a`, `rgba(245,243,255,0.10)` |399 400---401 402## Pro tokens403 404> Production-fidelity tokens. States, density, motion, elevation,405> content rules and a measured WCAG contract — derived from the406> resting tokens unless explicitly authored.407 408### States409 410#### Button411 412- **hover** — shadow: `0 0 24px -4px rgba(226, 57, 154, 0.5), 0 8px 24px -8px rgba(0,0,0,0.6)`, filter: `brightness(1.1)`413- **focus** — outline: `1.5px solid #e2399a`, outline-offset: `3px`414- **active** — transform: `translateY(1px)`, filter: `brightness(0.92)`415- **disabled** — opacity: `0.35`, filter: `saturate(0.4)`416- **loading** — opacity: `0.6`417- **selected** — bg: `#e2399a`, color: `#0A0A0A`418 419#### Input420 421- **hover** — border: `1px solid rgba(226, 57, 154, 0.5)`422- **focus** — border: `1px solid #e2399a`, shadow: `0 0 0 3px rgba(226, 57, 154, 0.2)`423- **disabled** — opacity: `0.35`424- **error** — border: `1px solid #F87171`, shadow: `0 0 0 3px rgba(248,113,113,0.2)`425 426#### Card427 428- **hover** — shadow: `0 16px 40px -12px rgba(0,0,0,0.7), 0 0 0 1px rgba(226, 57, 154, 0.18)`, transform: `translateY(-2px)`429- **selected** — border: `1px solid #e2399a`, shadow: `0 0 0 1px #e2399a`430- **dragging** — shadow: `0 24px 60px -16px rgba(0,0,0,0.85)`, transform: `scale(1.02)`, opacity: `0.85`431 432#### Tab433 434- **hover** — color: `#e2399a`435- **focus** — outline: `1.5px solid #e2399a`, outline-offset: `2px`436- **selected** — color: `#e2399a`, border: `0 0 1.5px 0 solid #e2399a`437 438### Density439 440| Mode | padding × | row × | body | radius × | Use for |441|------|-----------|-------|------|----------|---------|442| compact | 0.72 | 0.78 | 0.8125rem | 0.85 | Information-dense — tables, IDEs, dashboards |443| comfortable | 1 | 1 | 0.9375rem | — | Default — most product UI |444| spacious | 1.35 | 1.3 | 1rem | 1.15 | Editorial — marketing, long-form, settings |445 446### Motion447 448**Signature — Glide.** Fließende, leicht beschleunigte Übergänge mit Accent-Glow auf hover. Premium-Feeling durch kontrollierte Lichtspiele.449 450```css451transition: all 280ms cubic-bezier(0.32, 0.72, 0, 1);452```453 454| Token | Value |455|-------|-------|456| duration.instant | `100ms` |457| duration.fast | `180ms` |458| duration.base | `280ms` |459| duration.slow | `450ms` |460| easing.standard | `cubic-bezier(0.32, 0.72, 0, 1)` |461| easing.decelerate | `cubic-bezier(0.0, 0, 0.2, 1)` |462| easing.accelerate | `cubic-bezier(0.4, 0, 1, 1)` |463| easing.spring | `cubic-bezier(0.5, 1.25, 0.55, 1)` |464 465### Elevation466 467Five-level scale, system-specific recipe.468 469| Level | Shadow | Recipe |470|-------|--------|--------|471| level0 | `none` | Flat — Hairline mit Accent-Hauch. |472| level1 | `0 2px 4px rgba(0,0,0,0.45)` | Subtle drop — list items. |473| level2 | `0 12px 28px -8px rgba(0,0,0,0.6)` | Popover — vom Canvas gelöst. |474| level3 | `0 20px 48px -12px rgba(0,0,0,0.7), 0 0 32px -8px rgba(226, 57, 154, 0.25)` | Sheet — Accent-Halo. |475| level4 | `0 40px 96px -16px rgba(0,0,0,0.85), 0 0 64px -12px rgba(226, 57, 154, 0.4)` | Modal — voller Accent-Rim, dramatisch. |476 477### Content478 479- **measure:** `66ch` (max line length for body prose)480- **paragraph spacing:** `1.3em`481- **list indent:** `1.5em`482- **list gap:** `0.5em`483- **link:** color `#e2399a`, underline `hover`484- **blockquote:** border `2px solid #e2399a`, padding `0.8em 1.2em`485- **code:** background `rgba(226, 57, 154, 0.12)`, color `#e2399a`486 487### Accessibility (WCAG 2.1)488 489**Overall:** AA490 491| Pair | Ratio | Required | Grade | Suggested fix |492|------|-------|----------|-------|---------------|493| Body text on surface | 17.07:1 | AA | AAA | — |494| Body text on canvas | 18.1:1 | AA | AAA | — |495| Muted text on surface | 6.22:1 | AA | AA | — |496| Accent on surface | 4.71:1 | AA-Large | AA | — |497| Accent on canvas | 5:1 | AA-Large | AA | — |498 # 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: '#f5f3ff', secondary: '#9690b8', accent: '#e2399a', neutral: '#0a0814', surface: '#13101f', }, borderRadius: { sm: '10px', md: '16px', lg: '22px', }, }, },};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.
Two-color spot print, halftone vibes. Fluorescent pink + ink-black on cream paper, 3px misregistration outlines, hand-cut chunky type.