DESIGN.md inspired by Magic
Frontier-research minimalism — white canvas, Aeonik display, Suisse Intl body, near-black ink, one radix-blue accent.
Compare to…
- 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)
- 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
- none
0px - micro
2px - sm
4px - md
6px - lg
8px - xl
12px - pill
9999px
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
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
theme.extend block for tailwind.config.js
:root { --bg, --text, --brand, … } you can paste anywhere
W3C Design Tokens Community Group format
Importable into Figma → Variables → Import
---
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.*
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
#e8e8ecborders, 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,ligaenabled 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.02emat hero down to-0.004emat 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
#fcfcfdband 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→#2c2d2fover 120ms. - Card hover: border deepens from
#e8e8ecto#d9d9e0, or a faint#fcfcfdrow 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"witharia-expanded+aria-controlson any search field. - Dialog:
role="dialog"+aria-modal="true"+ focus trap on modals. - Navigation:
navlandmark witharia-label; current page markedaria-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.02emhero →-0.004emh4); body stays neutral. - Do set body in Suisse Intl at 17.5px/400 with a 1.6 line height.
- Do treat
#0090ffblue-9 as an accent — links, focus, highlights — not a hero CTA fill. - Do use blue-11
#0d74cefor body-size links so contrast clears AA (4.77). - Do carry the primary action with ink-on-white
#1c2024since 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
#0090ffblue-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
#ffffffcanvas, 46px Aeonik h1 at weight 400 with-0.016emtracking, 17.5px Suisse Intl body subhead in#2c2d2f, and an ink#1c2024text or button action — NO colored hero button. Abundant whitespace, sharp edges, no gradient. -
“Design a card in the Magic style” — White
#ffffffbackground (shares the canvas), 1px#e8e8ecborder, 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
#1c2024background, white text, 6px radius,10px 18pxpadding, 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#0090ffand 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
#f0f0f3dividers, Aeonik title at 20/500, muted#60646cmetadata 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
#fcfcfdground, 1px#e8e8ecborder, 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
- Start with pure white
#ffffff. Never tint the canvas — the white is the brand. - Set type before layout. Aeonik display at weight 400 with negative tracking; Suisse Intl body at 17.5px/400.
- Keep the accent scarce.
#0090ffis an accent only — links, focus, highlights. There is no colored hero button. - For any body-size link or small blue text, switch to blue-11
#0d74ceso contrast clears AA. - Carry the primary action with ink-on-white
#1c2024, not chroma. - Sharpen the corners — 0px edges, 6px buttons, 8px cards. No pills, no soft rounding.
- Use hairline depth — 1px
#e8e8ecborders, no drop shadows on cards. - 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.
Drop magic-dev into your project, then ship the actual sections in an afternoon.
npx @webdesignhot/design-md add magic-dev npx agentkit init --design magic-dev