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', }, }, },};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 printed quarterly that happens to live on the web. Soft blush-bone surfaces, Fraunces 600 italic display headlines, Geist Mono for marginalia, a single deep plum accent on drop caps and pull-quote bars. Built for journals, newsletters, and slow-content brands that want warmth without preciousness.