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
Compare to…
try on →
theme
1440 × 900
mobile · 390 × 844
Tokens webdesignhot/0.1
  • bg #ffffff
  • surface #ffffff
  • surface-soft #fcfcfd
  • surface-muted #f9f9fb
  • text AAA · 16.4 #1c2024
  • text-strong #1c2024
  • text-body #2c2d2f
  • text-muted #60646c
  • text-faint AA·LG · 3.8 #80838d
  • text-disabled #8b8d98
  • brand AA·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-translucent rgba(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-tint rgba(0, 5, 9, 0.06)
Typography
Ship faster than ever.
display-hero Aeonik 64px w400 -0.02em
Ship faster than ever.
display-lg Aeonik 52px w400 -0.018em
Ship faster than ever.
h1 Aeonik 46px w400 -0.016em
Built for teams that ship.
h2 Aeonik 34px w500 -0.012em
A complete kit
h3 Aeonik 26px w500 -0.008em
The quick brown fox jumps over the lazy dog.
h4 Aeonik 20px w500 -0.004em
The quick brown fox jumps over the lazy dog.
body-lg "Suisse Intl" 17.5px w400 0
The quick brown fox jumps over the lazy dog.
body "Suisse Intl" 16px w400 0
The quick brown fox jumps over the lazy dog.
eyebrow "Suisse Intl" 15.5px w700 0
The quick brown fox jumps over the lazy dog.
button "Suisse Intl" 15px w500 0
The quick brown fox jumps over the lazy dog.
body-sm "Suisse Intl" 14px w400 0
npx @webdesignhot/design-md add stripe
code ui-monospace 13.5px w400 0
OUR DESIGN SYSTEM
label "Suisse Intl" 13px w500 0
OUR DESIGN SYSTEM
caption "Suisse Intl" 12px w400 0.01em
OUR DESIGN SYSTEM
code-label ui-monospace 12px w500 0.02em
Spacing
  • step-0 0px
  • step-1 4px
  • step-2 8px
  • step-3 12px
  • step-4 16px
  • step-5 24px
  • step-6 32px
  • step-7 48px
  • step-8 64px
  • step-9 96px
  • step-10 128px
Radius
  • none 0px
  • micro 2px
  • sm 4px
  • md 6px
  • lg 8px
  • xl 12px
  • pill 9999px
Components
Text link →
Card preview A complete kit — everything your product needs. Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
New Stable v1.0
Design roles 7/8 mapped · webdesignhot/0.1

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.

  • background bg
  • foreground text
  • primary brand
  • primary-foreground on-brand
  • accent
  • muted text-muted
  • border border
  • ring border-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
Export 4 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
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.1
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

RoleFontSizeWeightLine HeightLetter SpacingNotes
display-heroAeonik644001.04-0.02emLargest hero, top of homepage
display-lgAeonik524001.06-0.018emSection-opening display
h1Aeonik464001.08-0.016emPage h1 — calm 400 weight (live: 46.4px)
h2Aeonik345001.15-0.012emSection heads
h3Aeonik265001.22-0.008emSub-section heads
h4Aeonik205001.30-0.004emCard group titles
eyebrowSuisse Intl15.57001.300Bold mini-label / kicker (live: 15.5px/700)
body-lgSuisse Intl17.54001.600Default running body (live: 17.5px/400)
bodySuisse Intl164001.600Dense paragraph copy
body-smSuisse Intl144001.550Footer body, fine print
labelSuisse Intl135001.400Form labels, badge text
captionSuisse Intl124001.400.01emFigure / photo captions
buttonSuisse Intl155001.000Button labels
codemono13.54001.550Default code / diff block
code-labelmono125001.400.02emCode-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

TokenValueTierUse
none0pxSharpDocument body, dividers, many edges (live body radius = 0)
micro2pxMicroTiny inline chips
sm4pxStandardBadges, tags
md6pxComfortableButtons, inputs — the interactive default
lg8pxRelaxedCards, code blocks
xl12pxLargeLarger feature shells (rare)
pill9999pxPillAvatars, 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

LevelTreatmentUse
0 — Flat#ffffff canvasBody regions, footer
1 — Card#ffffff + 1px #e8e8ec hairlineFeature / research cards, code blocks
2 — Ambient#ffffff + hairline + rgba(0, 5, 9, 0.04) 0 1px 2pxSubtle lift on a hovered card
3 — Elevated#ffffff + hairline + rgba(0, 5, 9, 0.10) 0 12px 32pxDropdowns, 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

PairRatioWCAG
#1c2024 ink on #ffffff16.39AAA at all sizes
#2c2d2f body ink on #ffffff14.0+AAA at body
#60646c muted on #ffffff5.94AA at body
#0d74ce link (blue-11) on #ffffff4.77AA at body
#0090ff brand (blue-9) on #ffffff3.26UI / large text only — NOT AA body
#ffffff on #1c2024 ink button16.39AAA at all sizes
#80838d faint (gray-10) on #ffffff3.78UI / 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

BreakpointRangeKey Changes
Mobile< 640pxHero h1 46→30px; feature grid 1-up; nav hamburger; section padding 48–64px
Tablet640–1024pxHero h1 ~38px; feature grid 2-up; section padding 64px
Desktop1024–1280pxFull hero h1 46px; feature grid 3-up; section padding 96px
Wide> 1280pxContent 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