light·minimal·sans·research·sharp

DESIGN.md inspired by Magic

Frontier-research minimalism — white canvas, Aeonik display, Suisse Intl body, near-black ink, one radix-blue accent.

By webdesignhot · magic.dev
$npx @webdesignhot/design-md add magic-dev
Learn more about the CLI
try on →
theme
1440 × 900
mobile · 390 × 844
Tokenswebdesignhot/0.2
  • bg#ffffff
  • surface#ffffff
  • surface-soft#fcfcfd
  • surface-muted#f9f9fb
  • textAAA · 16.4#1c2024
  • text-strong#1c2024
  • text-body#2c2d2f
  • text-muted#60646c
  • text-faintAA·LG · 3.8#80838d
  • text-disabled#8b8d98
  • brandAA·LG · 3.3#0090ff
  • brand-hover#0586f0
  • brand-strong#0d74ce
  • brand-ink#113264
  • on-brand#ffffff
  • link#0d74ce
  • link-hover#0090ff
  • border— · 1.2#e8e8ec
  • border-soft#f0f0f3
  • border-strong— · 1.4#d9d9e0
  • border-translucentrgba(0, 8, 48, 0.094)
  • diff-insert-bg#ecfdee
  • diff-delete-bg#feeced
  • diff-delete-surface#fcf7f8
  • success#2c8849
  • warning#bb6a00
  • danger#c62a44
  • info#0090ff
  • shadow-tintrgba(0, 5, 9, 0.06)
Typography
Ship faster than ever.
display-heroAeonik64pxw400-0.02em
Ship faster than ever.
display-lgAeonik52pxw400-0.018em
Ship faster than ever.
h1Aeonik46pxw400-0.016em
Built for teams that ship.
h2Aeonik34pxw500-0.012em
A complete kit
h3Aeonik26pxw500-0.008em
The quick brown fox jumps over the lazy dog.
h4Aeonik20pxw500-0.004em
The quick brown fox jumps over the lazy dog.
body-lg"Suisse Intl"17.5pxw4000
The quick brown fox jumps over the lazy dog.
body"Suisse Intl"16pxw4000
The quick brown fox jumps over the lazy dog.
eyebrow"Suisse Intl"15.5pxw7000
The quick brown fox jumps over the lazy dog.
button"Suisse Intl"15pxw5000
The quick brown fox jumps over the lazy dog.
body-sm"Suisse Intl"14pxw4000
npx @webdesignhot/design-md add stripe
codeui-monospace13.5pxw4000
OUR DESIGN SYSTEM
label"Suisse Intl"13pxw5000
OUR DESIGN SYSTEM
caption"Suisse Intl"12pxw4000.01em
OUR DESIGN SYSTEM
code-labelui-monospace12pxw5000.02em
Spacing
  • step-00px
  • step-14px
  • step-28px
  • step-312px
  • step-416px
  • step-524px
  • step-632px
  • step-748px
  • step-864px
  • step-996px
  • step-10128px
Radius
  • none0px
  • micro2px
  • sm4px
  • md6px
  • lg8px
  • xl12px
  • pill9999px
Components
Text link →
Card previewA complete kit — everything your product needs.Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
NewStablev1.0
Design roles7/8 mapped · webdesignhot/0.2

Maps the 8 canonical role names to this entry's actual tokens. Use these to plug the design into role-aware tools — shadcn/ui themes, role-aware Tailwind plugins, atelier-lint — without hard-coding token names.

  • backgroundbg
  • foregroundtext
  • primarybrand
  • primary-foregroundon-brand
  • accent
  • mutedtext-muted
  • borderborder
  • ringborder-strong
Lineage & influences

Magic's site is frontier-lab minimalism. The canvas is pure white `#ffffff`, the ink is a cool near-black `#1c2024` (the top step of the Radix gray scale, gray-12), and the entire neutral system is Radix gray 1–12 plus its alpha companions — a deliberate, engineered ramp rather than ad-hoc grays. Display runs in Aeonik, held at weight 400 even at the 46px hero, with negative tracking; body is Suisse Intl at a calm 17.5px, also weight 400. The only chromatic voltage is a single radix blue `#0090ff` (--color-blue-9), and the audit found it used as an accent — links, focus, the odd highlight — never as a filled hero CTA. Corners are sharp (the document body computes 0px radius), depth is hairline-only, and diff/code surfaces carry their own quiet green/red gutter tints. Where most AI-lab marketing reaches for gradients, glow and a loud hero button, Magic does the opposite: white space, restrained type, one blue, and a register that reads like a research note. The two Swiss-Intl/Aeonik families place it squarely in the modern Swiss-grotesque dev-tool lineage — closer to a typeset paper than a SaaS landing page.

  • Geometric grotesque display family — held at weight 400 across the hero and headings for a calm, neutral voice
  • Swiss neo-grotesque body family — running text at 17.5px/400, the quiet workhorse of the page
  • The entire neutral (gray 1–12 + alpha) and accent (blue 1–12) ramp — gray-12 ink, blue-9 brand
  • Paper-white editorial restraint, hairline-only depth, type-led layout with generous whitespace
  • Dev-tool grotesque discipline — sharp neutral surfaces, a single cool accent, minimal chrome
  • Frontier-lab research register — sparse, sober, type-forward pages that read like notes, not pitches
Export4 formats · paste-ready
Tailwind

theme.extend block for tailwind.config.js

tailwind.config.js
CSS variables

:root { --bg, --text, --brand, … } you can paste anywhere

design.css
DTCG JSON

W3C Design Tokens Community Group format

design.tokens.json
Figma Variables

Importable into Figma → Variables → Import

figma-variables.json
Google DESIGN.md

Portable DESIGN.md Alpha core format

design.md
The file
---
name: Magic
tagline: 'Frontier-research minimalism — white canvas, Aeonik display, Suisse Intl body, near-black ink, one radix-blue accent.'
updated_at: 2026-05-29T21:43:38.103Z
published_at: 2026-05-29T21:43:38.103Z
author: webdesignhot
source_url: https://magic.dev
spec: webdesignhot/0.2
profile: catalog
quality: curated
featured: false
categories: [ai, dev-tools]
tags: [light, minimal, sans, research, sharp]
preview_swatch: ['#ffffff', '#0090ff', '#1c2024']
related: []
description: 'Magic builds frontier code-generation models, and the site reads like the lab notebook rather than the launch poster. The canvas is pure white `#ffffff`, the ink is a cool near-black `#1c2024` (Radix gray-12), and the display family is Aeonik — held at weight 400 even at the 46px hero, paired with Suisse Intl for body at a calm 17.5px. The only chromatic voltage is a single radix blue `#0090ff` (--color-blue-9), used as an accent rather than a hero CTA fill — the audit found no colored hero button at all. Corners are sharp (0px radius on the document body), depth is hairline-only, and the whole surface holds a sparse research register: lots of white, very little decoration, type doing nearly all the work.'


# Canonical 8-role aliases (bg / text / brand / border / accent / muted / surface / danger).
# Maps role names to this entry's actual token names so role-aware
# downstream tools resolve `theme.background` → entry's `bg`, etc.
# Auto-generated by scripts/add-aliases.mjs — do not edit manually;
# regenerate after changing color token names.
aliases:
  background: bg
  foreground: text
  primary: brand
  primary-foreground: on-brand
  muted: text-muted
  border: border
  ring: border-strong

themes:
  default: light
  available: [light]
  switch-via: 'none — light-only research surface; no theme toggle present in production'

colors:
  bg: '#ffffff'                  # pure white page canvas
  surface: '#ffffff'            # cards share the canvas — depth via hairline only
  surface-soft: '#fcfcfd'       # Radix gray-1 — faintest tonal break band
  surface-muted: '#f9f9fb'      # Radix gray-2 — alternate quiet band
  text: '#1c2024'               # cool near-black ink (Radix gray-12)
  text-strong: '#1c2024'
  text-body: '#2c2d2f'          # Radix gray-11.5 — running paragraph ink
  text-muted: '#60646c'         # Radix gray-11 — secondary copy, captions (AA on white)
  text-faint: '#80838d'         # Radix gray-10 — low-emphasis hints
  text-disabled: '#8b8d98'      # Radix gray-9 — disabled / placeholder
  brand: '#0090ff'              # radix blue-9 — the single accent; not a hero CTA fill
  brand-hover: '#0586f0'        # radix blue-10 — hover/press step
  brand-strong: '#0d74ce'       # radix blue-11 — AA-safe blue for body-size links
  brand-ink: '#113264'          # radix blue-12 — deepest blue, rare emphasis
  on-brand: '#ffffff'           # white on blue — for the rare filled blue surface
  link: '#0d74ce'               # body-size links use blue-11 (AA), not blue-9
  link-hover: '#0090ff'         # hover lifts to the brand blue-9
  border: '#e8e8ec'             # Radix gray-4 — 1px hairline divider, the primary depth tool
  border-soft: '#f0f0f3'        # Radix gray-3 — lighter divider for nested rows
  border-strong: '#d9d9e0'      # Radix gray-6 — input / focused panel outline
  border-translucent: 'rgba(0, 8, 48, 0.094)'  # Radix gray-a4 — alpha hairline over imagery
  diff-insert-bg: '#ecfdee'     # inserted-line gutter tint inside code/diff blocks
  diff-delete-bg: '#feeced'     # removed-line gutter tint inside code/diff blocks
  diff-delete-surface: '#fcf7f8' # removed-line body tint inside code/diff blocks
  success: '#2c8849'            # quiet green — confirmation states
  warning: '#bb6a00'            # amber — caution states (rare on a research surface)
  danger: '#c62a44'             # red — validation errors, destructive confirms
  info: '#0090ff'              # informational banners reuse the brand blue
  shadow-tint: 'rgba(0, 5, 9, 0.06)'  # cool ink-with-alpha — every shadow is tinted, never pure black

typography:
  display:
    family: 'Aeonik, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif'
    weights: [400, 500, 600]
    opentype: ['kern', 'liga']
  body:
    family: '"Suisse Intl", system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif'
    weights: [400, 500, 600, 700]
    opentype: ['kern', 'liga']
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace'
    weights: [400, 500]
  scale:
    display-hero:    { size: 64, weight: 400, lineHeight: 1.04, tracking: '-0.02em',  family: display }
    display-lg:      { size: 52, weight: 400, lineHeight: 1.06, tracking: '-0.018em', family: display }
    h1:              { size: 46, weight: 400, lineHeight: 1.08, tracking: '-0.016em', family: display }
    h2:              { size: 34, weight: 500, lineHeight: 1.15, tracking: '-0.012em', family: display }
    h3:              { size: 26, weight: 500, lineHeight: 1.22, tracking: '-0.008em', family: display }
    h4:              { size: 20, weight: 500, lineHeight: 1.3,  tracking: '-0.004em', family: display }
    eyebrow:         { size: 15.5, weight: 700, lineHeight: 1.3, tracking: '0',       family: body }
    body-lg:         { size: 17.5, weight: 400, lineHeight: 1.6, tracking: '0',       family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.6,  tracking: '0',        family: body }
    body-sm:         { size: 14, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    label:           { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    caption:         { size: 12, weight: 400, lineHeight: 1.4,  tracking: '0.01em',   family: body }
    button:          { size: 15, weight: 500, lineHeight: 1.0,  tracking: '0',        family: body }
    code:            { size: 13.5, weight: 400, lineHeight: 1.55, tracking: '0',      family: mono }
    code-label:      { size: 12, weight: 500, lineHeight: 1.4,  tracking: '0.02em',   family: mono }

radius:
  none: 0
  micro: 2
  sm: 4
  md: 6
  lg: 8
  xl: 12
  pill: 9999

spacing:
  base: 4
  scale: [0, 4, 8, 12, 16, 24, 32, 48, 64, 96, 128]

layout:
  page-width: 1200
  prose-width: 680
  header-height: 64

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-out: 'cubic-bezier(0, 0, 0.2, 1)'
  duration-fast: 120
  duration-standard: 200
  duration-slow: 320
  reduced-motion: 'respects prefers-reduced-motion: reduce — transitions collapse to opacity-only'

breakpoints:
  mobile: 640
  tablet: 1024
  desktop: 1280
  wide: 1536

shadows:
  none: 'none — depth comes from 1px hairline + white-canvas contrast'
  ambient: 'rgba(0, 5, 9, 0.04) 0 1px 2px'
  standard: 'rgba(0, 5, 9, 0.06) 0 4px 16px'
  elevated: 'rgba(0, 5, 9, 0.10) 0 12px 32px'
  ring: '0 0 0 2px rgba(0, 144, 255, 0.45)'

accessibility:
  contrast-text-on-bg: 16.39        # #1c2024 on #ffffff — AAA at all sizes
  contrast-body-on-bg: 5.94         # #60646c muted on #ffffff — AA at body
  contrast-link-on-bg: 4.77         # #0d74ce blue-11 on #ffffff — AA at body
  contrast-brand-on-bg: 3.26        # #0090ff blue-9 on #ffffff — UI/large only, NOT AA body
  focus-ring: '2px solid #0090ff with 2px offset on #ffffff'
  reduced-motion-honored: true
  keyboard-nav: 'tab order follows visual order; visible focus ring on every interactive element'

components:
  button-primary:
    background: '#1c2024'
    text: '#ffffff'
    radius: 6
    padding: '10px 18px'
    height: 40
    font: button
    hover: 'background #2c2d2f; no transform'
    use: 'primary action — ink-on-white, the page has no colored hero CTA so ink carries it'
  button-secondary:
    background: '#ffffff'
    text: '#1c2024'
    border: '1px solid #d9d9e0'
    radius: 6
    padding: '9px 17px'
    height: 40
    font: button
    hover: 'background #fcfcfd; border #cdced6'
    use: 'secondary action — bordered ghost on white'
  button-ghost:
    background: 'transparent'
    text: '#1c2024'
    radius: 6
    padding: '9px 14px'
    font: button
    hover: 'background rgba(0, 8, 48, 0.094)'
    use: 'tertiary text-only action in dense rows / nav'
  button-link:
    background: 'transparent'
    text: '#0d74ce'
    radius: 0
    padding: '0'
    font: button
    hover: 'text #0090ff; underline appears'
    use: 'inline blue text action — the closest thing to a brand-colored button'
  card:
    background: '#ffffff'
    text: '#1c2024'
    border: '1px solid #e8e8ec'
    radius: 8
    padding: 24
    shadow: 'none — hairline + white-canvas contrast'
    use: 'feature card / research entry / index row'
  input:
    background: '#ffffff'
    text: '#1c2024'
    border: '1px solid #d9d9e0'
    radius: 6
    padding: '10px 14px'
    height: 40
    focus: 'border #0090ff; ring 0 0 0 2px rgba(0, 144, 255, 0.20)'
    use: 'email / search / form input'
  badge:
    background: '#f0f0f3'
    text: '#60646c'
    radius: 4
    padding: '3px 8px'
    font: label
    use: 'NEW / RESEARCH / status tag — quiet gray, sharp corners'
  badge-accent:
    background: '#e7f4fe'
    text: '#0d74ce'
    radius: 4
    padding: '3px 8px'
    font: label
    use: 'accented tag — pale blue-3 ground, blue-11 text'
  nav-link:
    background: 'transparent'
    text: '#1c2024'
    font: button
    padding: '8px 12px'
    hover: 'text #0090ff'
    use: 'top-nav menu items'

dark-mode: none

lineage:
  summary: |
    Magic's site is frontier-lab minimalism. The canvas is pure
    white `#ffffff`, the ink is a cool near-black `#1c2024` (the top
    step of the Radix gray scale, gray-12), and the entire neutral
    system is Radix gray 1–12 plus its alpha companions — a deliberate,
    engineered ramp rather than ad-hoc grays. Display runs in Aeonik,
    held at weight 400 even at the 46px hero, with negative tracking;
    body is Suisse Intl at a calm 17.5px, also weight 400. The only
    chromatic voltage is a single radix blue `#0090ff` (--color-blue-9),
    and the audit found it used as an accent — links, focus, the odd
    highlight — never as a filled hero CTA. Corners are sharp (the
    document body computes 0px radius), depth is hairline-only, and
    diff/code surfaces carry their own quiet green/red gutter tints.
    Where most AI-lab marketing reaches for gradients, glow and a loud
    hero button, Magic does the opposite: white space, restrained type,
    one blue, and a register that reads like a research note. The two
    Swiss-Intl/Aeonik families place it squarely in the modern
    Swiss-grotesque dev-tool lineage — closer to a typeset paper than
    a SaaS landing page.
  influences:
    - name: 'Aeonik'
      role: 'Geometric grotesque display family — held at weight 400 across the hero and headings for a calm, neutral voice'
      url: 'https://cstmfonts.com/aeonik'
    - name: 'Suisse Intl'
      role: 'Swiss neo-grotesque body family — running text at 17.5px/400, the quiet workhorse of the page'
      url: 'https://www.swisstypefaces.com/fonts/suisse/'
    - name: 'Radix Colors'
      role: 'The entire neutral (gray 1–12 + alpha) and accent (blue 1–12) ramp — gray-12 ink, blue-9 brand'
      url: 'https://www.radix-ui.com/colors'
    - name: 'Stripe Press'
      role: 'Paper-white editorial restraint, hairline-only depth, type-led layout with generous whitespace'
      url: 'https://press.stripe.com'
    - name: 'Linear'
      role: 'Dev-tool grotesque discipline — sharp neutral surfaces, a single cool accent, minimal chrome'
      url: 'https://linear.app'
    - name: 'Anthropic Research'
      role: 'Frontier-lab research register — sparse, sober, type-forward pages that read like notes, not pitches'
      url: 'https://www.anthropic.com/research'
---

## 1. Visual Theme & Atmosphere

Magic builds frontier code-generation models, and the marketing
surface is tuned to read like the lab's notebook rather than its
launch poster. The canvas is pure white `#ffffff` — no cream, no
tint, no gradient wash — and the ink is `#1c2024`, a cool near-black
that is literally the top step of the Radix gray scale (gray-12).
The whole neutral system underneath is Radix gray 1 through 12 plus
the alpha companions, which means every divider, every muted caption,
every faint hint is a considered step on an engineered ramp rather
than an ad-hoc gray. The effect is sober and precise.

The display family is Aeonik, a geometric grotesque, and the most
telling decision is that it is held at weight **400** even at the
46px hero. Where nearly every AI-lab site reaches for 600/700 to
shout, Magic lets a regular-weight grotesque carry the headline with
negative tracking (`-0.016em` at h1). Body is Suisse Intl — a Swiss
neo-grotesque — at a calm 17.5px, also weight 400, with a generous
1.6 line height. The one place weight jumps is the small eyebrow /
sub-label (15.5px at weight 700), which acts as a typographic
punctuation mark inside the otherwise even-weight field.

The single chromatic voltage is a radix blue `#0090ff` — Radix
blue-9, `hsl(206, 100%, 50%)`. Critically, the audit found **no
colored hero CTA**: the page does not lean on a big blue button.
The blue shows up as an accent — links (in its AA-safe blue-11 step
`#0d74ce` at body size), focus rings, the occasional highlight — and
otherwise the page is ink-on-white. Primary actions, where they
exist, are carried by ink `#1c2024` on white, not by chroma.

Corners are sharp. The document body computes a 0px radius, and the
radius ladder stays tight (6–8px on the few rounded elements). Depth
is hairline-only: a 1px Radix gray-4 `#e8e8ec` border does the work
that a drop shadow does elsewhere, and the rare shadow is cool-tinted
(`rgba(0, 5, 9, alpha)`) rather than pure black. Even the code and
diff surfaces are restrained — quiet green `#ecfdee` and red `#feeced`
gutter tints, nothing saturated.

Reading the page feels like reading a typeset research note:
abundant white space, restrained type, one blue, and almost no
decoration. The type does nearly all of the work, and the sparseness
is the message — this is a lab confident enough to under-design.

**Key Characteristics:**
- Pure white canvas `#ffffff` — never tinted, never gradient-washed.
- Cool near-black ink `#1c2024` — Radix gray-12, not pure black.
- Aeonik display held at weight 400 even at the 46px hero.
- Suisse Intl body at 17.5px/400 with calm 1.6 line height.
- Single accent: radix blue `#0090ff` (blue-9) — used as accent, not hero CTA.
- No colored hero button — primary action is ink-on-white.
- Body-size links use AA-safe blue-11 `#0d74ce`, not blue-9.
- Entire neutral ramp is Radix gray 1–12 + alpha companions.
- Sharp corners (0px body radius; 6–8px on the few rounded elements).
- Hairline-only depth — 1px `#e8e8ec` borders, cool-tinted shadows.
- Sparse research register — whitespace-led, decoration-minimal.

## 2. Color Palette & Roles

### Canvas / Surface

- **Background** (`#ffffff`) [→ body bg]: pure white page canvas. Cards share it; depth is hairline, not fill.
- **Surface** (`#ffffff`): cards and panels sit on the same white as the page — separation comes from a 1px border.
- **Surface Soft** (`#fcfcfd`) [→ --color-gray-1]: faintest tonal break for an alternate band.
- **Surface Muted** (`#f9f9fb`) [→ --color-gray-2]: second quiet band, e.g. table zebra or footer ground.

### Text

- **Text** (`#1c2024`) [→ --color-gray-12]: cool near-black ink. Carries display and body alike — AAA on white.
- **Text Body** (`#2c2d2f`) [→ --color-gray-11.5]: long-form running paragraph ink, a hair softer than gray-12.
- **Text Muted** (`#60646c`) [→ --color-gray-11]: secondary copy, captions, metadata — AA at body on white.
- **Text Faint** (`#80838d`) [→ --color-gray-10]: low-emphasis hints (large/UI only).
- **Text Disabled** (`#8b8d98`) [→ --color-gray-9]: disabled labels and placeholder text.

### Brand / Accent

- **Brand** (`#0090ff`) [→ --color-blue-9]: the single accent. UI accent, focus, highlights — not a filled hero CTA. UI/large contrast only.
- **Brand Hover** (`#0586f0`) [→ --color-blue-10]: hover / press step on interactive blue.
- **Brand Strong** (`#0d74ce`) [→ --color-blue-11]: the AA-safe blue for body-size text and links on white.
- **Brand Ink** (`#113264`) [→ --color-blue-12]: deepest blue, rare heavy emphasis on pale blue grounds.

### Interactive

- **Link** (`#0d74ce`): body-size links default to blue-11 for AA contrast — never raw blue-9.
- **Link Hover** (`#0090ff`): hover lifts to brand blue-9; underline appears.
- **Focus Ring** (`rgba(0, 144, 255, 0.45)`): blue focus ring on every interactive element.

### Borders

- **Border** (`#e8e8ec`) [→ --color-gray-4]: 1px hairline divider — the system's primary depth tool.
- **Border Soft** (`#f0f0f3`) [→ --color-gray-3]: lighter divider for nested rows and table lines.
- **Border Strong** (`#d9d9e0`) [→ --color-gray-6]: input outlines and stronger panel edges.
- **Border Translucent** (`rgba(0, 8, 48, 0.094)`) [→ --color-gray-a4]: alpha hairline for overlays on imagery.

### Code & Diff

- **Diff Insert BG** (`#ecfdee`): inserted-line gutter tint inside code / diff blocks.
- **Diff Delete BG** (`#feeced`): removed-line gutter tint inside code / diff blocks.
- **Diff Delete Surface** (`#fcf7f8`): removed-line body tint, softer than the gutter.

### Shadow

- **Shadow Tint** (`rgba(0, 5, 9, 0.06)`): every shadow is cool ink-with-alpha, never pure black — keeps the neutral cool.

### Semantic

- **Success** (`#2c8849`): quiet green — confirmation states, success toasts.
- **Warning** (`#bb6a00`): amber — caution states (rare on a research surface).
- **Danger** (`#c62a44`): red — validation errors, destructive confirms.
- **Info** (`#0090ff`): informational banners reuse the brand blue.

## 3. Typography Rules

### Font Family

- **Display:** `Aeonik, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif`. Aeonik is a geometric grotesque held at weight 400 across the hero and headings — neutral, calm, slightly mechanical apertures.
- **Body:** `"Suisse Intl", system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif`. Suisse Intl is a Swiss neo-grotesque — the running-text workhorse at 17.5px/400.
- **Mono:** `ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace`. System mono on code and diff surfaces; no licensed mono shipped.
- **OpenType features:** `kern`, `liga` enabled site-wide.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| display-hero | Aeonik | 64 | 400 | 1.04 | -0.02em | Largest hero, top of homepage |
| display-lg | Aeonik | 52 | 400 | 1.06 | -0.018em | Section-opening display |
| h1 | Aeonik | 46 | 400 | 1.08 | -0.016em | Page h1 — calm 400 weight (live: 46.4px) |
| h2 | Aeonik | 34 | 500 | 1.15 | -0.012em | Section heads |
| h3 | Aeonik | 26 | 500 | 1.22 | -0.008em | Sub-section heads |
| h4 | Aeonik | 20 | 500 | 1.30 | -0.004em | Card group titles |
| eyebrow | Suisse Intl | 15.5 | 700 | 1.30 | 0 | Bold mini-label / kicker (live: 15.5px/700) |
| body-lg | Suisse Intl | 17.5 | 400 | 1.60 | 0 | Default running body (live: 17.5px/400) |
| body | Suisse Intl | 16 | 400 | 1.60 | 0 | Dense paragraph copy |
| body-sm | Suisse Intl | 14 | 400 | 1.55 | 0 | Footer body, fine print |
| label | Suisse Intl | 13 | 500 | 1.40 | 0 | Form labels, badge text |
| caption | Suisse Intl | 12 | 400 | 1.40 | 0.01em | Figure / photo captions |
| button | Suisse Intl | 15 | 500 | 1.00 | 0 | Button labels |
| code | mono | 13.5 | 400 | 1.55 | 0 | Default code / diff block |
| code-label | mono | 12 | 500 | 1.40 | 0.02em | Code-block filename header |

### Principles

- **Display stays at weight 400.** Aeonik carries the 46px hero at regular weight; the calm, neutral voice depends on refusing 600/700 at headline scale.
- **Negative tracking on display only.** Range is roughly `-0.02em` at hero down to `-0.004em` at h4. Body holds at neutral tracking.
- **One bold note: the eyebrow.** The single place weight jumps to 700 is the 15.5px sub-label — it punctuates the otherwise even-weight field.
- **Two-family contract.** Aeonik for display, Suisse Intl for body — both Swiss-grotesque, so the page reads as one coherent typographic voice with a quiet display/body distinction.
- **Body breathes at 1.6.** Suisse Intl running text uses a generous line height to keep the research register readable in long passages.
- **Open-source substitutes.** Inter at 400 with `-1%` tracking approximates Aeonik for cloned implementations; Inter or Helvetica Neue stand in for Suisse Intl.
- **No bold body copy.** Emphasis comes from the eyebrow weight or the blue link color, never from setting paragraph text to 700.

## 4. Component Stylings

### Buttons

**Primary (Ink)** — Background `#1c2024`, text `#ffffff`, 6px radius, padding `10px 18px`, height 40px, button font (15/500). Hover lifts to `#2c2d2f` with no transform. **Use:** the primary action. Because the page has no colored hero CTA, ink-on-white carries the strongest button.

**Secondary (Bordered)** — Background `#ffffff`, text `#1c2024`, 1px `#d9d9e0` border, 6px radius, padding `9px 17px`. Hover: background `#fcfcfd`, border deepens to `#cdced6`. **Use:** secondary action beside the ink primary.

**Ghost** — Background transparent, text `#1c2024`, 6px radius, padding `9px 14px`. Hover background `rgba(0, 8, 48, 0.094)` (gray-a4). **Use:** tertiary text-only action inside dense rows and the nav.

**Link (Blue text)** — Transparent, text `#0d74ce` (blue-11), no padding, square. Hover shifts to brand blue `#0090ff` and reveals an underline. **Use:** inline text action — the closest the system gets to a brand-colored button.

### Cards

**Feature / Research Card** — Background `#ffffff` (shares the canvas), 1px `#e8e8ec` border, 8px radius, padding 24px. **No shadow** — depth is the hairline plus white-canvas contrast. Heading in Aeonik 20/500, body in Suisse Intl 16/400.

**Index Row** — A borderless variant: 1px `#f0f0f3` (gray-3) divider between rows, no card fill. Used for research lists and link indexes. Hover tints the row with `#fcfcfd`.

### Badges & Tags

**Badge (Neutral)** — Background `#f0f0f3` (gray-3), text `#60646c` (gray-11), 4px radius, padding `3px 8px`, label font (13/500). Sharp-ish corners, not pills. **Use:** NEW / RESEARCH / status tags.

**Badge (Accent)** — Background `#e7f4fe` (blue-3), text `#0d74ce` (blue-11), 4px radius, padding `3px 8px`. **Use:** accented status tag where a touch of blue is warranted.

### Inputs & Forms

**Text Input** — Background `#ffffff`, 1px `#d9d9e0` border, 6px radius, padding `10px 14px`, height 40px, body 16/400. Focus: border `#0090ff`, ring `0 0 0 2px rgba(0, 144, 255, 0.20)`. Placeholder in `#8b8d98` (gray-9). **Use:** email / search / contact form.

### Navigation

**Top Nav** — Background `#ffffff` (matches canvas), 64px height, optional 1px `#e8e8ec` bottom hairline on scroll. Layout: Magic wordmark left, sparse horizontal menu, single ink or ghost action right. No colored CTA in the nav.

**Nav Link** — Transparent background, ink `#1c2024` text, button font (15/500), `8px 12px` padding. Hover shifts text to brand blue `#0090ff`.

### Code Block

**Code / Diff Surface** — `#ffffff` or `#fcfcfd` ground, 1px `#e8e8ec` border, 8px radius, system mono 13.5/400. Inserted lines tint `#ecfdee`, removed lines `#feeced` (gutter) / `#fcf7f8` (body). Filename header in code-label mono (12/500/0.02em).

## 5. Layout Principles

### Spacing System

- **Base unit:** 4px.
- **Scale:** 0 / 4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 / 96 / 128.
- **Section padding:** 64–96px standard; up to 128px between major regions.
- **Density:** generous, research-note pacing — whitespace is the dominant element on every screen.

### Grid & Container

- **Max content width:** ~1200px.
- **Prose width:** ~680px — narrow measure for long-form research reading.
- **Feature grids:** 2-up for splits, 3-up for benefit rows; collapse on narrower viewports.
- **Footer:** multi-column at desktop, ink wordmark plus quiet gray links.

### Whitespace Philosophy

White space is the primary design material. Headlines sit alone with
ample margin; sections are separated by air rather than rules or
bands. The page resists filling the canvas — emptiness reads as
confidence, and the single blue accent only registers because so
little else competes with it.

### Section Cadence

- White hero (ink h1, body subhead, ink or ghost action) → white research / feature band → optional faint `#fcfcfd` band for a quiet break → white CTA region → white footer.
- No dark sections, no gradient bands, no colored hero. The whole page stays white with hairline separation.

## 6. Shapes & Radius Scale

| Token | Value | Tier | Use |
|---|---|---|---|
| none | 0px | Sharp | Document body, dividers, many edges (live body radius = 0) |
| micro | 2px | Micro | Tiny inline chips |
| sm | 4px | Standard | Badges, tags |
| md | 6px | Comfortable | Buttons, inputs — the interactive default |
| lg | 8px | Relaxed | Cards, code blocks |
| xl | 12px | Large | Larger feature shells (rare) |
| pill | 9999px | Pill | Avatars, the rare round element |

The defining shape note is **sharpness**: the document body computes
a 0px radius, and rounded elements stay tight (6px buttons, 8px
cards). Aeonik's geometric grotesque forms echo the rectilinear
edges — flat baselines, even apertures — so the type and the shape
language agree. There is no soft, pill-heavy SaaS rounding here.

## 7. Depth & Elevation

| Level | Treatment | Use |
|---|---|---|
| 0 — Flat | `#ffffff` canvas | Body regions, footer |
| 1 — Card | `#ffffff` + 1px `#e8e8ec` hairline | Feature / research cards, code blocks |
| 2 — Ambient | `#ffffff` + hairline + `rgba(0, 5, 9, 0.04) 0 1px 2px` | Subtle lift on a hovered card |
| 3 — Elevated | `#ffffff` + hairline + `rgba(0, 5, 9, 0.10) 0 12px 32px` | Dropdowns, popovers (rare) |

### Shadow Philosophy

The system uses **hairline-only depth** as its default — every card
relies on a 1px `#e8e8ec` (gray-4) border, and shadows appear only on
transient floating UI like dropdowns. When a shadow is used it is
cool ink-with-alpha (`rgba(0, 5, 9, alpha)`), never neutral black, so
elevation keeps the cool character of the gray ramp. On a pure-white
canvas, contrast and a single hairline read as cleanly as a drop
shadow would — and far more quietly, which suits the research tone.

## 8. Interaction & Motion

### Easing & Duration

- **ease-standard:** `cubic-bezier(0.4, 0, 0.2, 1)` — material-style; most UI transitions.
- **ease-out:** `cubic-bezier(0, 0, 0.2, 1)` — content fading in from below.
- **duration-fast:** 120ms — color shifts on hover (links, nav, buttons).
- **duration-standard:** 200ms — opacity / border transitions on cards.
- **duration-slow:** 320ms — larger reveals (rare).

### Per-Component Micro-States

- **Button hover:** color shift only, no transform. Ink primary `#1c2024` → `#2c2d2f` over 120ms.
- **Card hover:** border deepens from `#e8e8ec` to `#d9d9e0`, or a faint `#fcfcfd` row tint. No shadow jump. 200ms.
- **Link hover:** blue-11 `#0d74ce` → brand blue `#0090ff`, underline appears. 120ms.
- **Input focus:** border shifts to `#0090ff`, blue ring fades in over 120ms.
- **Nav link hover:** ink → brand blue `#0090ff`. 120ms.

### Page Transitions

The page is largely static from first paint — no autoplaying hero,
no scroll-jacking. Sections may fade in from below on first scroll
(ease-out, 200–320ms), but nothing animates continuously. The
stillness is part of the research register.

### Reduced Motion

Respects `prefers-reduced-motion: reduce`. When set, all transitions
collapse to opacity-only, scroll-reveal fades are disabled (content
appears immediately), and hover color shifts are retained because
they carry meaning, not decoration.

## 9. Accessibility & A11y

### Contrast Pairs

| Pair | Ratio | WCAG |
|---|---|---|
| `#1c2024` ink on `#ffffff` | 16.39 | AAA at all sizes |
| `#2c2d2f` body ink on `#ffffff` | 14.0+ | AAA at body |
| `#60646c` muted on `#ffffff` | 5.94 | AA at body |
| `#0d74ce` link (blue-11) on `#ffffff` | 4.77 | AA at body |
| `#0090ff` brand (blue-9) on `#ffffff` | 3.26 | UI / large text only — NOT AA body |
| `#ffffff` on `#1c2024` ink button | 16.39 | AAA at all sizes |
| `#80838d` faint (gray-10) on `#ffffff` | 3.78 | UI / large only |

The critical rule: **`#0090ff` blue-9 only clears 3.26 on white**, so
it is valid for UI elements, icons and large display text, but body
links and small text must use blue-11 `#0d74ce` (4.77, AA).

### Focus Indicators

2px solid `#0090ff` focus ring with 2px offset on the white canvas.
Applied to every interactive element — buttons, links, inputs, nav.
Never `outline: none` without an equivalent replacement.

### ARIA Patterns

- **Combobox:** `role="combobox"` with `aria-expanded` + `aria-controls` on any search field.
- **Dialog:** `role="dialog"` + `aria-modal="true"` + focus trap on modals.
- **Navigation:** `nav` landmark with `aria-label`; current page marked `aria-current="page"`.

### Keyboard Nav

- Tab order follows visual order strictly.
- Skip-link present in the header, visible on focus.
- Escape closes modals and popovers; arrow keys move within menus.

### Screen Reader

- Decorative imagery and code mockups marked `aria-hidden="true"`.
- Diff blocks expose inserted/removed lines via hidden labels, not color alone.
- Icon-only actions carry a visually-hidden text label.

### Reduced Motion

Honored — see §8.

## 10. Responsive Behavior

| Breakpoint | Range | Key Changes |
|---|---|---|
| Mobile | < 640px | Hero h1 46→30px; feature grid 1-up; nav hamburger; section padding 48–64px |
| Tablet | 640–1024px | Hero h1 ~38px; feature grid 2-up; section padding 64px |
| Desktop | 1024–1280px | Full hero h1 46px; feature grid 3-up; section padding 96px |
| Wide | > 1280px | Content caps at 1200px; prose caps at 680px |

### Touch Targets

- Primary / secondary buttons: 40px height — padded internally to a comfortable tap target.
- Nav links: 32px visual, padded to a 44px tap zone on mobile.
- Inputs: 40px height; spacing increases on touch viewports.

### Collapsing Strategy

- Top nav switches to a hamburger below ~768px.
- Feature grid: 3-up → 2-up → 1-up.
- Code blocks: horizontal scroll preserved (no wrap) so code stays readable.
- Multi-column footer stacks to a single column on mobile.

### Image Behavior

Product / research figures use `srcset` for 1x/2x. Diagrams sit on the
white canvas with a 1px hairline frame; no rounded raster cards.

### Container Queries

Used where cards reflow independently of the viewport — feature grids
inside a constrained column swap to a stacked layout based on the
card's own width.

## 11. Content & Voice

### Tone

Sober, precise, research-forward. Magic's voice sounds like a frontier
lab describing its work to peers — declarative sentences, no hype, no
exclamation marks, no emoji. Copy reads like a note from the team, not
a sales pitch. Claims are specific and quantified where possible.

### Microcopy Patterns

- **Button verbs:** "Read the research", "Get in touch", "Join us", "Learn more". Plain, infinitive, no urgency punctuation.
- **Error recipe:** `[What failed] — [Why] — [What to do]`. Example: "Couldn't send. Your message was empty. Add a note and try again."
- **Success confirmations:** terse — "Sent", "Saved", "Subscribed". No exclamation.
- **Empty states:** describe the mechanism, not the feeling. "No results. Try a different query."

### CTA Verb Conventions

- Primary: "Read the research", "Get in touch", "Join us".
- Secondary: "Learn more", "View the paper".
- Avoid: "Sign up now!", "Get started free", "Join the revolution", "Supercharge your...".

### Empty States

Empty and loading states stay minimal — a single line of muted gray-11
text on white, no illustration. The blank space is consistent with the
rest of the page rather than dressed up.

## 12. Dark Mode & Theming

Magic's site is **light-only**. The audit found no theme toggle and no
dark companion — the pure-white canvas is the brand. There is no
`prefers-color-scheme` dark override in production.

If a dark variant were ever derived, it should invert through the same
Radix ramp rather than switching palettes: `bg` → Radix gray-1 dark
(`#111113`), `text` → Radix gray-12 dark (`#eeeef0`), borders → Radix
gray-4 dark, and the brand blue `#0090ff` retained (its blue-9 step
holds AA against a dark ground). But this is hypothetical — ship
light-only to match production.

## 13. Lineage & Influences

Magic sits at the intersection of three traditions: **Swiss grotesque
type discipline** (Aeonik display, Suisse Intl body — both
neo-grotesque faces), **frontier-lab research minimalism** (sober,
type-led pages that read like notes rather than pitches), and
**engineered color systems** (the entire neutral and accent ramp is
Radix Colors — gray 1–12 for neutrals, blue 1–12 for the accent). It
rejects the AI-lab orthodoxy of gradients, glow, dark hero sections
and a big colored CTA. There is no hero button at all; primary action
is ink-on-white, and the lone blue `#0090ff` is an accent, not a fill.

The deepest signal is restraint. Where most code-tool marketing fills
the canvas, Magic empties it — whitespace, two grotesque families held
mostly at weight 400, sharp corners, hairline depth, one blue. The
Radix foundation means the grays are not improvised: gray-12 ink,
gray-11 muted, gray-4 borders are all exact steps on a published ramp,
which gives the neutral field its even, engineered calm.

**Named influences:**

- **Aeonik** — geometric grotesque display, held at weight 400 across the hero.
- **Suisse Intl** — Swiss neo-grotesque body, the running-text workhorse.
- **Radix Colors** — the full neutral (gray) and accent (blue) ramp under the page.
- **Stripe Press** — paper-white editorial restraint, hairline-only depth.
- **Linear** — dev-tool grotesque discipline, single cool accent, minimal chrome.
- **Anthropic Research** — frontier-lab research register, sparse and type-forward.

## 14. Do's and Don'ts

### Do

- **Do** anchor the canvas at pure white `#ffffff` — no cream, no tint, no gradient.
- **Do** keep ink at `#1c2024` (Radix gray-12) — a cool near-black, not pure black.
- **Do** hold Aeonik display at weight 400 even at the 46px hero. The calm voice depends on it.
- **Do** apply negative tracking on display only (`-0.02em` hero → `-0.004em` h4); body stays neutral.
- **Do** set body in Suisse Intl at 17.5px/400 with a 1.6 line height.
- **Do** treat `#0090ff` blue-9 as an accent — links, focus, highlights — not a hero CTA fill.
- **Do** use blue-11 `#0d74ce` for body-size links so contrast clears AA (4.77).
- **Do** carry the primary action with ink-on-white `#1c2024` since there is no colored hero button.
- **Do** rely on hairline-only depth — 1px `#e8e8ec` (gray-4) borders carry every card.
- **Do** keep corners sharp — 0px on edges, 6px buttons, 8px cards.
- **Do** source neutrals and the accent from the Radix ramp (gray 1–12, blue 1–12).
- **Do** let whitespace dominate — empty space reads as confidence.

### Don't

- **Don't** introduce a second accent color. The single radix blue is the only chroma.
- **Don't** use `#0090ff` blue-9 for body-size text or small links — it only clears 3.26 on white.
- **Don't** add a big colored hero CTA. The audit found none; primary action is ink-on-white.
- **Don't** set display to bold weights (600/700) at headline scale. Aeonik stays at 400.
- **Don't** add drop shadows to cards. Hairlines + white-canvas contrast carry depth.
- **Don't** round corners heavily. This is a sharp system — no pill buttons, no soft SaaS cards.
- **Don't** tint the canvas. White is the brand; cream or gray-washed backgrounds break it.
- **Don't** improvise grays. Use the Radix gray steps so the neutral field stays engineered and even.
- **Don't** add gradients, glow, or dark hero bands. The page is flat white throughout.
- **Don't** use exclamation marks, emoji, or hype verbs in copy. The register is research-sober.
- **Don't** ship a dark mode to match production — the site is light-only.
- **Don't** fill the canvas. Resist the urge to decorate; the sparseness is the design.

## 15. Agent Prompt Guide

### Quick Color Reference

```
Background:    #ffffff
Surface:       #ffffff
Surface Soft:  #fcfcfd
Text:          #1c2024
Body Text:     #2c2d2f
Muted Text:    #60646c
Brand (accent):#0090ff
Brand Strong:  #0d74ce   (use for body-size links — AA)
Brand Hover:   #0586f0
Border:        #e8e8ec
Border Strong: #d9d9e0
Danger:        #c62a44
```

### Example Component Prompts

- **"Create a hero section in the Magic style"** — Pure white `#ffffff` canvas, 46px Aeonik h1 at weight 400 with `-0.016em` tracking, 17.5px Suisse Intl body subhead in `#2c2d2f`, and an ink `#1c2024` text or button action — NO colored hero button. Abundant whitespace, sharp edges, no gradient.

- **"Design a card in the Magic style"** — White `#ffffff` background (shares the canvas), 1px `#e8e8ec` border, 8px radius, 24px padding, no shadow. Heading in Aeonik 20/500, body in Suisse Intl 16/400. Hover: border deepens to `#d9d9e0`.

- **"Build a primary button in the Magic style"** — Ink `#1c2024` background, white text, 6px radius, `10px 18px` padding, 40px height, Suisse Intl 15/500. Hover: `#2c2d2f`. No transform, no shadow.

- **"Style an inline link in the Magic style"** — Text in blue-11 `#0d74ce` (AA on white). Hover: shift to brand blue `#0090ff` and reveal an underline. Never use raw blue-9 for body-size link text.

- **"Make a research / index list in the Magic style"** — Borderless rows separated by 1px `#f0f0f3` dividers, Aeonik title at 20/500, muted `#60646c` metadata in Suisse Intl 14/400. Hover tints the row `#fcfcfd`. No card fills, no shadows.

- **"Render a code / diff block in the Magic style"** — White or `#fcfcfd` ground, 1px `#e8e8ec` border, 8px radius, system mono 13.5/400. Inserted lines tint `#ecfdee`, removed lines `#feeced`. Filename header in mono 12/500/0.02em uppercase.

### Iteration Guide

1. Start with pure white `#ffffff`. Never tint the canvas — the white is the brand.
2. Set type before layout. Aeonik display at weight 400 with negative tracking; Suisse Intl body at 17.5px/400.
3. Keep the accent scarce. `#0090ff` is an accent only — links, focus, highlights. There is no colored hero button.
4. For any body-size link or small blue text, switch to blue-11 `#0d74ce` so contrast clears AA.
5. Carry the primary action with ink-on-white `#1c2024`, not chroma.
6. Sharpen the corners — 0px edges, 6px buttons, 8px cards. No pills, no soft rounding.
7. Use hairline depth — 1px `#e8e8ec` borders, no drop shadows on cards.
8. Add whitespace until it feels almost too empty, then stop. The sparse research register is the goal.

*Theme-toggle audit: score=0, signals=[none] — light-only, confirmed against live probe.*
Prose

1. Visual Theme & Atmosphere

Magic builds frontier code-generation models, and the marketing surface is tuned to read like the lab’s notebook rather than its launch poster. The canvas is pure white #ffffff — no cream, no tint, no gradient wash — and the ink is #1c2024, a cool near-black that is literally the top step of the Radix gray scale (gray-12). The whole neutral system underneath is Radix gray 1 through 12 plus the alpha companions, which means every divider, every muted caption, every faint hint is a considered step on an engineered ramp rather than an ad-hoc gray. The effect is sober and precise.

The display family is Aeonik, a geometric grotesque, and the most telling decision is that it is held at weight 400 even at the 46px hero. Where nearly every AI-lab site reaches for 600/700 to shout, Magic lets a regular-weight grotesque carry the headline with negative tracking (-0.016em at h1). Body is Suisse Intl — a Swiss neo-grotesque — at a calm 17.5px, also weight 400, with a generous 1.6 line height. The one place weight jumps is the small eyebrow / sub-label (15.5px at weight 700), which acts as a typographic punctuation mark inside the otherwise even-weight field.

The single chromatic voltage is a radix blue #0090ff — Radix blue-9, hsl(206, 100%, 50%). Critically, the audit found no colored hero CTA: the page does not lean on a big blue button. The blue shows up as an accent — links (in its AA-safe blue-11 step #0d74ce at body size), focus rings, the occasional highlight — and otherwise the page is ink-on-white. Primary actions, where they exist, are carried by ink #1c2024 on white, not by chroma.

Corners are sharp. The document body computes a 0px radius, and the radius ladder stays tight (6–8px on the few rounded elements). Depth is hairline-only: a 1px Radix gray-4 #e8e8ec border does the work that a drop shadow does elsewhere, and the rare shadow is cool-tinted (rgba(0, 5, 9, alpha)) rather than pure black. Even the code and diff surfaces are restrained — quiet green #ecfdee and red #feeced gutter tints, nothing saturated.

Reading the page feels like reading a typeset research note: abundant white space, restrained type, one blue, and almost no decoration. The type does nearly all of the work, and the sparseness is the message — this is a lab confident enough to under-design.

Key Characteristics:

  • Pure white canvas #ffffff — never tinted, never gradient-washed.
  • Cool near-black ink #1c2024 — Radix gray-12, not pure black.
  • Aeonik display held at weight 400 even at the 46px hero.
  • Suisse Intl body at 17.5px/400 with calm 1.6 line height.
  • Single accent: radix blue #0090ff (blue-9) — used as accent, not hero CTA.
  • No colored hero button — primary action is ink-on-white.
  • Body-size links use AA-safe blue-11 #0d74ce, not blue-9.
  • Entire neutral ramp is Radix gray 1–12 + alpha companions.
  • Sharp corners (0px body radius; 6–8px on the few rounded elements).
  • Hairline-only depth — 1px #e8e8ec borders, cool-tinted shadows.
  • Sparse research register — whitespace-led, decoration-minimal.

2. Color Palette & Roles

Canvas / Surface

  • Background (#ffffff) [→ body bg]: pure white page canvas. Cards share it; depth is hairline, not fill.
  • Surface (#ffffff): cards and panels sit on the same white as the page — separation comes from a 1px border.
  • Surface Soft (#fcfcfd) [→ –color-gray-1]: faintest tonal break for an alternate band.
  • Surface Muted (#f9f9fb) [→ –color-gray-2]: second quiet band, e.g. table zebra or footer ground.

Text

  • Text (#1c2024) [→ –color-gray-12]: cool near-black ink. Carries display and body alike — AAA on white.
  • Text Body (#2c2d2f) [→ –color-gray-11.5]: long-form running paragraph ink, a hair softer than gray-12.
  • Text Muted (#60646c) [→ –color-gray-11]: secondary copy, captions, metadata — AA at body on white.
  • Text Faint (#80838d) [→ –color-gray-10]: low-emphasis hints (large/UI only).
  • Text Disabled (#8b8d98) [→ –color-gray-9]: disabled labels and placeholder text.

Brand / Accent

  • Brand (#0090ff) [→ –color-blue-9]: the single accent. UI accent, focus, highlights — not a filled hero CTA. UI/large contrast only.
  • Brand Hover (#0586f0) [→ –color-blue-10]: hover / press step on interactive blue.
  • Brand Strong (#0d74ce) [→ –color-blue-11]: the AA-safe blue for body-size text and links on white.
  • Brand Ink (#113264) [→ –color-blue-12]: deepest blue, rare heavy emphasis on pale blue grounds.

Interactive

  • Link (#0d74ce): body-size links default to blue-11 for AA contrast — never raw blue-9.
  • Link Hover (#0090ff): hover lifts to brand blue-9; underline appears.
  • Focus Ring (rgba(0, 144, 255, 0.45)): blue focus ring on every interactive element.

Borders

  • Border (#e8e8ec) [→ –color-gray-4]: 1px hairline divider — the system’s primary depth tool.
  • Border Soft (#f0f0f3) [→ –color-gray-3]: lighter divider for nested rows and table lines.
  • Border Strong (#d9d9e0) [→ –color-gray-6]: input outlines and stronger panel edges.
  • Border Translucent (rgba(0, 8, 48, 0.094)) [→ –color-gray-a4]: alpha hairline for overlays on imagery.

Code & Diff

  • Diff Insert BG (#ecfdee): inserted-line gutter tint inside code / diff blocks.
  • Diff Delete BG (#feeced): removed-line gutter tint inside code / diff blocks.
  • Diff Delete Surface (#fcf7f8): removed-line body tint, softer than the gutter.

Shadow

  • Shadow Tint (rgba(0, 5, 9, 0.06)): every shadow is cool ink-with-alpha, never pure black — keeps the neutral cool.

Semantic

  • Success (#2c8849): quiet green — confirmation states, success toasts.
  • Warning (#bb6a00): amber — caution states (rare on a research surface).
  • Danger (#c62a44): red — validation errors, destructive confirms.
  • Info (#0090ff): informational banners reuse the brand blue.

3. Typography Rules

Font Family

  • Display: Aeonik, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif. Aeonik is a geometric grotesque held at weight 400 across the hero and headings — neutral, calm, slightly mechanical apertures.
  • Body: "Suisse Intl", system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif. Suisse Intl is a Swiss neo-grotesque — the running-text workhorse at 17.5px/400.
  • Mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace. System mono on code and diff surfaces; no licensed mono shipped.
  • OpenType features: kern, liga enabled site-wide.

Hierarchy

Role Font Size Weight Line Height Letter Spacing Notes
display-hero Aeonik 64 400 1.04 -0.02em Largest hero, top of homepage
display-lg Aeonik 52 400 1.06 -0.018em Section-opening display
h1 Aeonik 46 400 1.08 -0.016em Page h1 — calm 400 weight (live: 46.4px)
h2 Aeonik 34 500 1.15 -0.012em Section heads
h3 Aeonik 26 500 1.22 -0.008em Sub-section heads
h4 Aeonik 20 500 1.30 -0.004em Card group titles
eyebrow Suisse Intl 15.5 700 1.30 0 Bold mini-label / kicker (live: 15.5px/700)
body-lg Suisse Intl 17.5 400 1.60 0 Default running body (live: 17.5px/400)
body Suisse Intl 16 400 1.60 0 Dense paragraph copy
body-sm Suisse Intl 14 400 1.55 0 Footer body, fine print
label Suisse Intl 13 500 1.40 0 Form labels, badge text
caption Suisse Intl 12 400 1.40 0.01em Figure / photo captions
button Suisse Intl 15 500 1.00 0 Button labels
code mono 13.5 400 1.55 0 Default code / diff block
code-label mono 12 500 1.40 0.02em Code-block filename header

Principles

  • Display stays at weight 400. Aeonik carries the 46px hero at regular weight; the calm, neutral voice depends on refusing 600/700 at headline scale.
  • Negative tracking on display only. Range is roughly -0.02em at hero down to -0.004em at h4. Body holds at neutral tracking.
  • One bold note: the eyebrow. The single place weight jumps to 700 is the 15.5px sub-label — it punctuates the otherwise even-weight field.
  • Two-family contract. Aeonik for display, Suisse Intl for body — both Swiss-grotesque, so the page reads as one coherent typographic voice with a quiet display/body distinction.
  • Body breathes at 1.6. Suisse Intl running text uses a generous line height to keep the research register readable in long passages.
  • Open-source substitutes. Inter at 400 with -1% tracking approximates Aeonik for cloned implementations; Inter or Helvetica Neue stand in for Suisse Intl.
  • No bold body copy. Emphasis comes from the eyebrow weight or the blue link color, never from setting paragraph text to 700.

4. Component Stylings

Buttons

Primary (Ink) — Background #1c2024, text #ffffff, 6px radius, padding 10px 18px, height 40px, button font (15/500). Hover lifts to #2c2d2f with no transform. Use: the primary action. Because the page has no colored hero CTA, ink-on-white carries the strongest button.

Secondary (Bordered) — Background #ffffff, text #1c2024, 1px #d9d9e0 border, 6px radius, padding 9px 17px. Hover: background #fcfcfd, border deepens to #cdced6. Use: secondary action beside the ink primary.

Ghost — Background transparent, text #1c2024, 6px radius, padding 9px 14px. Hover background rgba(0, 8, 48, 0.094) (gray-a4). Use: tertiary text-only action inside dense rows and the nav.

Link (Blue text) — Transparent, text #0d74ce (blue-11), no padding, square. Hover shifts to brand blue #0090ff and reveals an underline. Use: inline text action — the closest the system gets to a brand-colored button.

Cards

Feature / Research Card — Background #ffffff (shares the canvas), 1px #e8e8ec border, 8px radius, padding 24px. No shadow — depth is the hairline plus white-canvas contrast. Heading in Aeonik 20/500, body in Suisse Intl 16/400.

Index Row — A borderless variant: 1px #f0f0f3 (gray-3) divider between rows, no card fill. Used for research lists and link indexes. Hover tints the row with #fcfcfd.

Badges & Tags

Badge (Neutral) — Background #f0f0f3 (gray-3), text #60646c (gray-11), 4px radius, padding 3px 8px, label font (13/500). Sharp-ish corners, not pills. Use: NEW / RESEARCH / status tags.

Badge (Accent) — Background #e7f4fe (blue-3), text #0d74ce (blue-11), 4px radius, padding 3px 8px. Use: accented status tag where a touch of blue is warranted.

Inputs & Forms

Text Input — Background #ffffff, 1px #d9d9e0 border, 6px radius, padding 10px 14px, height 40px, body 16/400. Focus: border #0090ff, ring 0 0 0 2px rgba(0, 144, 255, 0.20). Placeholder in #8b8d98 (gray-9). Use: email / search / contact form.

Top Nav — Background #ffffff (matches canvas), 64px height, optional 1px #e8e8ec bottom hairline on scroll. Layout: Magic wordmark left, sparse horizontal menu, single ink or ghost action right. No colored CTA in the nav.

Nav Link — Transparent background, ink #1c2024 text, button font (15/500), 8px 12px padding. Hover shifts text to brand blue #0090ff.

Code Block

Code / Diff Surface#ffffff or #fcfcfd ground, 1px #e8e8ec border, 8px radius, system mono 13.5/400. Inserted lines tint #ecfdee, removed lines #feeced (gutter) / #fcf7f8 (body). Filename header in code-label mono (12/500/0.02em).

5. Layout Principles

Spacing System

  • Base unit: 4px.
  • Scale: 0 / 4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 / 96 / 128.
  • Section padding: 64–96px standard; up to 128px between major regions.
  • Density: generous, research-note pacing — whitespace is the dominant element on every screen.

Grid & Container

  • Max content width: ~1200px.
  • Prose width: ~680px — narrow measure for long-form research reading.
  • Feature grids: 2-up for splits, 3-up for benefit rows; collapse on narrower viewports.
  • Footer: multi-column at desktop, ink wordmark plus quiet gray links.

Whitespace Philosophy

White space is the primary design material. Headlines sit alone with ample margin; sections are separated by air rather than rules or bands. The page resists filling the canvas — emptiness reads as confidence, and the single blue accent only registers because so little else competes with it.

Section Cadence

  • White hero (ink h1, body subhead, ink or ghost action) → white research / feature band → optional faint #fcfcfd band for a quiet break → white CTA region → white footer.
  • No dark sections, no gradient bands, no colored hero. The whole page stays white with hairline separation.

6. Shapes & Radius Scale

Token Value Tier Use
none 0px Sharp Document body, dividers, many edges (live body radius = 0)
micro 2px Micro Tiny inline chips
sm 4px Standard Badges, tags
md 6px Comfortable Buttons, inputs — the interactive default
lg 8px Relaxed Cards, code blocks
xl 12px Large Larger feature shells (rare)
pill 9999px Pill Avatars, the rare round element

The defining shape note is sharpness: the document body computes a 0px radius, and rounded elements stay tight (6px buttons, 8px cards). Aeonik’s geometric grotesque forms echo the rectilinear edges — flat baselines, even apertures — so the type and the shape language agree. There is no soft, pill-heavy SaaS rounding here.

7. Depth & Elevation

Level Treatment Use
0 — Flat #ffffff canvas Body regions, footer
1 — Card #ffffff + 1px #e8e8ec hairline Feature / research cards, code blocks
2 — Ambient #ffffff + hairline + rgba(0, 5, 9, 0.04) 0 1px 2px Subtle lift on a hovered card
3 — Elevated #ffffff + hairline + rgba(0, 5, 9, 0.10) 0 12px 32px Dropdowns, popovers (rare)

Shadow Philosophy

The system uses hairline-only depth as its default — every card relies on a 1px #e8e8ec (gray-4) border, and shadows appear only on transient floating UI like dropdowns. When a shadow is used it is cool ink-with-alpha (rgba(0, 5, 9, alpha)), never neutral black, so elevation keeps the cool character of the gray ramp. On a pure-white canvas, contrast and a single hairline read as cleanly as a drop shadow would — and far more quietly, which suits the research tone.

8. Interaction & Motion

Easing & Duration

  • ease-standard: cubic-bezier(0.4, 0, 0.2, 1) — material-style; most UI transitions.
  • ease-out: cubic-bezier(0, 0, 0.2, 1) — content fading in from below.
  • duration-fast: 120ms — color shifts on hover (links, nav, buttons).
  • duration-standard: 200ms — opacity / border transitions on cards.
  • duration-slow: 320ms — larger reveals (rare).

Per-Component Micro-States

  • Button hover: color shift only, no transform. Ink primary #1c2024#2c2d2f over 120ms.
  • Card hover: border deepens from #e8e8ec to #d9d9e0, or a faint #fcfcfd row tint. No shadow jump. 200ms.
  • Link hover: blue-11 #0d74ce → brand blue #0090ff, underline appears. 120ms.
  • Input focus: border shifts to #0090ff, blue ring fades in over 120ms.
  • Nav link hover: ink → brand blue #0090ff. 120ms.

Page Transitions

The page is largely static from first paint — no autoplaying hero, no scroll-jacking. Sections may fade in from below on first scroll (ease-out, 200–320ms), but nothing animates continuously. The stillness is part of the research register.

Reduced Motion

Respects prefers-reduced-motion: reduce. When set, all transitions collapse to opacity-only, scroll-reveal fades are disabled (content appears immediately), and hover color shifts are retained because they carry meaning, not decoration.

9. Accessibility & A11y

Contrast Pairs

Pair Ratio WCAG
#1c2024 ink on #ffffff 16.39 AAA at all sizes
#2c2d2f body ink on #ffffff 14.0+ AAA at body
#60646c muted on #ffffff 5.94 AA at body
#0d74ce link (blue-11) on #ffffff 4.77 AA at body
#0090ff brand (blue-9) on #ffffff 3.26 UI / large text only — NOT AA body
#ffffff on #1c2024 ink button 16.39 AAA at all sizes
#80838d faint (gray-10) on #ffffff 3.78 UI / large only

The critical rule: #0090ff blue-9 only clears 3.26 on white, so it is valid for UI elements, icons and large display text, but body links and small text must use blue-11 #0d74ce (4.77, AA).

Focus Indicators

2px solid #0090ff focus ring with 2px offset on the white canvas. Applied to every interactive element — buttons, links, inputs, nav. Never outline: none without an equivalent replacement.

ARIA Patterns

  • Combobox: role="combobox" with aria-expanded + aria-controls on any search field.
  • Dialog: role="dialog" + aria-modal="true" + focus trap on modals.
  • Navigation: nav landmark with aria-label; current page marked aria-current="page".

Keyboard Nav

  • Tab order follows visual order strictly.
  • Skip-link present in the header, visible on focus.
  • Escape closes modals and popovers; arrow keys move within menus.

Screen Reader

  • Decorative imagery and code mockups marked aria-hidden="true".
  • Diff blocks expose inserted/removed lines via hidden labels, not color alone.
  • Icon-only actions carry a visually-hidden text label.

Reduced Motion

Honored — see §8.

10. Responsive Behavior

Breakpoint Range Key Changes
Mobile < 640px Hero h1 46→30px; feature grid 1-up; nav hamburger; section padding 48–64px
Tablet 640–1024px Hero h1 ~38px; feature grid 2-up; section padding 64px
Desktop 1024–1280px Full hero h1 46px; feature grid 3-up; section padding 96px
Wide > 1280px Content caps at 1200px; prose caps at 680px

Touch Targets

  • Primary / secondary buttons: 40px height — padded internally to a comfortable tap target.
  • Nav links: 32px visual, padded to a 44px tap zone on mobile.
  • Inputs: 40px height; spacing increases on touch viewports.

Collapsing Strategy

  • Top nav switches to a hamburger below ~768px.
  • Feature grid: 3-up → 2-up → 1-up.
  • Code blocks: horizontal scroll preserved (no wrap) so code stays readable.
  • Multi-column footer stacks to a single column on mobile.

Image Behavior

Product / research figures use srcset for 1x/2x. Diagrams sit on the white canvas with a 1px hairline frame; no rounded raster cards.

Container Queries

Used where cards reflow independently of the viewport — feature grids inside a constrained column swap to a stacked layout based on the card’s own width.

11. Content & Voice

Tone

Sober, precise, research-forward. Magic’s voice sounds like a frontier lab describing its work to peers — declarative sentences, no hype, no exclamation marks, no emoji. Copy reads like a note from the team, not a sales pitch. Claims are specific and quantified where possible.

Microcopy Patterns

  • Button verbs: “Read the research”, “Get in touch”, “Join us”, “Learn more”. Plain, infinitive, no urgency punctuation.
  • Error recipe: [What failed] — [Why] — [What to do]. Example: “Couldn’t send. Your message was empty. Add a note and try again.”
  • Success confirmations: terse — “Sent”, “Saved”, “Subscribed”. No exclamation.
  • Empty states: describe the mechanism, not the feeling. “No results. Try a different query.”

CTA Verb Conventions

  • Primary: “Read the research”, “Get in touch”, “Join us”.
  • Secondary: “Learn more”, “View the paper”.
  • Avoid: “Sign up now!”, “Get started free”, “Join the revolution”, “Supercharge your…”.

Empty States

Empty and loading states stay minimal — a single line of muted gray-11 text on white, no illustration. The blank space is consistent with the rest of the page rather than dressed up.

12. Dark Mode & Theming

Magic’s site is light-only. The audit found no theme toggle and no dark companion — the pure-white canvas is the brand. There is no prefers-color-scheme dark override in production.

If a dark variant were ever derived, it should invert through the same Radix ramp rather than switching palettes: bg → Radix gray-1 dark (#111113), text → Radix gray-12 dark (#eeeef0), borders → Radix gray-4 dark, and the brand blue #0090ff retained (its blue-9 step holds AA against a dark ground). But this is hypothetical — ship light-only to match production.

13. Lineage & Influences

Magic sits at the intersection of three traditions: Swiss grotesque type discipline (Aeonik display, Suisse Intl body — both neo-grotesque faces), frontier-lab research minimalism (sober, type-led pages that read like notes rather than pitches), and engineered color systems (the entire neutral and accent ramp is Radix Colors — gray 1–12 for neutrals, blue 1–12 for the accent). It rejects the AI-lab orthodoxy of gradients, glow, dark hero sections and a big colored CTA. There is no hero button at all; primary action is ink-on-white, and the lone blue #0090ff is an accent, not a fill.

The deepest signal is restraint. Where most code-tool marketing fills the canvas, Magic empties it — whitespace, two grotesque families held mostly at weight 400, sharp corners, hairline depth, one blue. The Radix foundation means the grays are not improvised: gray-12 ink, gray-11 muted, gray-4 borders are all exact steps on a published ramp, which gives the neutral field its even, engineered calm.

Named influences:

  • Aeonik — geometric grotesque display, held at weight 400 across the hero.
  • Suisse Intl — Swiss neo-grotesque body, the running-text workhorse.
  • Radix Colors — the full neutral (gray) and accent (blue) ramp under the page.
  • Stripe Press — paper-white editorial restraint, hairline-only depth.
  • Linear — dev-tool grotesque discipline, single cool accent, minimal chrome.
  • Anthropic Research — frontier-lab research register, sparse and type-forward.

14. Do’s and Don’ts

Do

  • Do anchor the canvas at pure white #ffffff — no cream, no tint, no gradient.
  • Do keep ink at #1c2024 (Radix gray-12) — a cool near-black, not pure black.
  • Do hold Aeonik display at weight 400 even at the 46px hero. The calm voice depends on it.
  • Do apply negative tracking on display only (-0.02em hero → -0.004em h4); body stays neutral.
  • Do set body in Suisse Intl at 17.5px/400 with a 1.6 line height.
  • Do treat #0090ff blue-9 as an accent — links, focus, highlights — not a hero CTA fill.
  • Do use blue-11 #0d74ce for body-size links so contrast clears AA (4.77).
  • Do carry the primary action with ink-on-white #1c2024 since there is no colored hero button.
  • Do rely on hairline-only depth — 1px #e8e8ec (gray-4) borders carry every card.
  • Do keep corners sharp — 0px on edges, 6px buttons, 8px cards.
  • Do source neutrals and the accent from the Radix ramp (gray 1–12, blue 1–12).
  • Do let whitespace dominate — empty space reads as confidence.

Don’t

  • Don’t introduce a second accent color. The single radix blue is the only chroma.
  • Don’t use #0090ff blue-9 for body-size text or small links — it only clears 3.26 on white.
  • Don’t add a big colored hero CTA. The audit found none; primary action is ink-on-white.
  • Don’t set display to bold weights (600/700) at headline scale. Aeonik stays at 400.
  • Don’t add drop shadows to cards. Hairlines + white-canvas contrast carry depth.
  • Don’t round corners heavily. This is a sharp system — no pill buttons, no soft SaaS cards.
  • Don’t tint the canvas. White is the brand; cream or gray-washed backgrounds break it.
  • Don’t improvise grays. Use the Radix gray steps so the neutral field stays engineered and even.
  • Don’t add gradients, glow, or dark hero bands. The page is flat white throughout.
  • Don’t use exclamation marks, emoji, or hype verbs in copy. The register is research-sober.
  • Don’t ship a dark mode to match production — the site is light-only.
  • Don’t fill the canvas. Resist the urge to decorate; the sparseness is the design.

15. Agent Prompt Guide

Quick Color Reference

Background:    #ffffff
Surface:       #ffffff
Surface Soft:  #fcfcfd
Text:          #1c2024
Body Text:     #2c2d2f
Muted Text:    #60646c
Brand (accent):#0090ff
Brand Strong:  #0d74ce   (use for body-size links — AA)
Brand Hover:   #0586f0
Border:        #e8e8ec
Border Strong: #d9d9e0
Danger:        #c62a44

Example Component Prompts

  • “Create a hero section in the Magic style” — Pure white #ffffff canvas, 46px Aeonik h1 at weight 400 with -0.016em tracking, 17.5px Suisse Intl body subhead in #2c2d2f, and an ink #1c2024 text or button action — NO colored hero button. Abundant whitespace, sharp edges, no gradient.

  • “Design a card in the Magic style” — White #ffffff background (shares the canvas), 1px #e8e8ec border, 8px radius, 24px padding, no shadow. Heading in Aeonik 20/500, body in Suisse Intl 16/400. Hover: border deepens to #d9d9e0.

  • “Build a primary button in the Magic style” — Ink #1c2024 background, white text, 6px radius, 10px 18px padding, 40px height, Suisse Intl 15/500. Hover: #2c2d2f. No transform, no shadow.

  • “Style an inline link in the Magic style” — Text in blue-11 #0d74ce (AA on white). Hover: shift to brand blue #0090ff and reveal an underline. Never use raw blue-9 for body-size link text.

  • “Make a research / index list in the Magic style” — Borderless rows separated by 1px #f0f0f3 dividers, Aeonik title at 20/500, muted #60646c metadata in Suisse Intl 14/400. Hover tints the row #fcfcfd. No card fills, no shadows.

  • “Render a code / diff block in the Magic style” — White or #fcfcfd ground, 1px #e8e8ec border, 8px radius, system mono 13.5/400. Inserted lines tint #ecfdee, removed lines #feeced. Filename header in mono 12/500/0.02em uppercase.

Iteration Guide

  1. Start with pure white #ffffff. Never tint the canvas — the white is the brand.
  2. Set type before layout. Aeonik display at weight 400 with negative tracking; Suisse Intl body at 17.5px/400.
  3. Keep the accent scarce. #0090ff is an accent only — links, focus, highlights. There is no colored hero button.
  4. For any body-size link or small blue text, switch to blue-11 #0d74ce so contrast clears AA.
  5. Carry the primary action with ink-on-white #1c2024, not chroma.
  6. Sharpen the corners — 0px edges, 6px buttons, 8px cards. No pills, no soft rounding.
  7. Use hairline depth — 1px #e8e8ec borders, no drop shadows on cards.
  8. Add whitespace until it feels almost too empty, then stop. The sparse research register is the goal.

Theme-toggle audit: score=0, signals=[none] — light-only, confirmed against live probe.

Ship with this

Drop magic-dev into your project, then ship the actual sections in an afternoon.

1 · install design
npx @webdesignhot/design-md add magic-dev
2 · ship landing page
npx agentkit init --design magic-dev
How AgentKit reads DESIGN.md