<!--
ROLE: You are a senior product designer + frontend engineer pair.
TASK: Treat the DESIGN.md below as the SINGLE SOURCE OF TRUTH for visual style.
Every component you produce in this codebase must:
  • Reuse the color tokens declared in YAML frontmatter (no ad-hoc hex values)
  • Use the typography scale (display / h1 / h2 / body / label / mono) verbatim
  • Match the radius scale (button / card / pill) to the named tier
  • Honor the elevation table for shadows
  • Respect the motion section (durations, easings, reduced-motion)
  • Pass the contrast pairs in the accessibility section
INPUT: Project files at ${CWD}.
OUTPUT: Code, not paragraphs. Quote the relevant section number when you cite a token (e.g. "per §3 Typography Rules").
PRINCIPLE: A token used once is a one-off; a token used three times is a system. Prefer system fidelity over local cleverness.
-->

---
name: Harvey
tagline: Counsel-grade dark — warm near-black canvas, custom serif display, ivory CTA, sharp 4px monochrome.
updated_at: 2026-05-29T21:43:33.521Z
published_at: 2026-05-29T21:43:33.521Z
author: webdesignhot
source_url: https://www.harvey.ai
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [ai, saas]
tags: [dark, serif, minimal, warm, monochrome, premium]
preview_swatch: ['#0f0e0d', '#fafaf9', '#ffffff']
related: [anthropic, openai, perplexity]
description: 'Harvey is AI software for legal and professional services, and its site dresses the part — a warm near-black canvas `#0f0e0d`, a custom serif display (`HarveySerifFont`) running headlines at 72px / weight 400, and a custom sans (`HarveySansFont`) carrying body. The system is essentially MONOCHROME WARM: ivory `#fafaf9` is the only accent, used for headlines, the "Request a Demo" CTA, and high-emphasis type on the dark ground. Where consumer AI brands reach for gradients and electric blue, Harvey reaches for the register of a white-shoe law firm rendered in dark mode — restrained serif elegance, sharp 4px corners, and value contrast instead of colour. The warm-dark-plus-ivory-serif pairing IS the identity; there is no second hue.'

lineage:
  summary: 'Harvey transposes the white-shoe law-firm aesthetic into dark mode: a warm near-black canvas, a serif headline for institutional gravitas, a single ivory accent, and sharp 4px corners. It inherits the serif-for-credibility tradition of editorial and institutional brands (close kin to Anthropic''s cream-and-serif, recast dark and stripped of earth tones), Linear''s near-black canvas and hairline-on-dark elevation, and the dark-mode-as-premium register Vercel established for serious software. It deliberately rejects gradient meshes, neon accents, pill-shaped friendliness, and exclamation-point marketing — anything that would undercut professional-services trust. The result is monochrome warm: the warm-dark plus ivory-serif pairing is the entire identity, with no second hue.'
  influences:
    - name: Anthropic
      role: Serif-for-headline confidence and warm-neutral restraint, recast into dark mode
      url: https://www.anthropic.com
    - name: Linear
      role: Near-black canvas, hairline-on-dark elevation, value-contrast depth
      url: https://linear.app
    - name: Vercel
      role: Monochrome dark-mode-premium register for serious software
      url: https://vercel.com
    - name: Klim Type Foundry
      role: DNA reference for the transitional editorial serif weight ladder (Tiempos / Canela)
      url: https://klim.co.nz
    - name: Stripe
      role: Hairline-border restraint and cool-confidence monochrome discipline
      url: https://stripe.com
    - name: Financial Times
      role: Institutional, serif-led, premium-professional editorial register
      url: https://www.ft.com


# 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: brand
colors:
  # Primary
  bg: '#0f0e0d'                          # warm near-black canvas — the defining ground, never pure #000
  text: '#ffffff'                        # pure white body copy on warm-dark
  brand: '#fafaf9'                       # ivory — the only accent; headlines + CTA fill
  on-brand: '#0f0e0d'                    # warm-dark label on the ivory CTA
  # Surface
  surface: '#1a1918'                     # faint warm lift above canvas — cards, panels
  surface-raised: '#242220'             # second elevation tier — popovers, sheets
  overlay-backdrop: 'rgba(0, 0, 0, 0.6)' # --controls-backdrop-color — modal/scrim dim
  # Text scale (warm-neutral ivories descending)
  text-strong: '#fafaf9'                 # ivory — headlines, high-emphasis display
  text-secondary: 'rgba(255, 255, 255, 0.72)' # supporting copy, deck/lede
  text-muted: 'rgba(255, 255, 255, 0.56)'      # captions, metadata, footer
  text-faint: 'rgba(255, 255, 255, 0.40)'      # disabled, placeholder, watermark
  # Interactive
  link: '#fafaf9'                        # ivory links on dark
  link-hover: '#ffffff'                  # brighten to pure white on hover
  selected-bg: 'rgba(250, 250, 249, 0.08)' # hovered/selected row tint
  disabled: 'rgba(255, 255, 255, 0.32)'  # disabled control text
  # Borders (ivory at low alpha — never a separate grey)
  border: 'rgba(255, 255, 255, 0.12)'    # default hairline on dark
  border-strong: 'rgba(255, 255, 255, 0.24)' # emphasized rule, outlined buttons
  border-subtle: 'rgba(255, 255, 255, 0.06)' # quietest division
  # Semantic (kept warm-neutral / desaturated to protect the monochrome register)
  success-bg: 'rgba(122, 158, 122, 0.14)'
  success-text: '#a9c9a9'
  warning-bg: 'rgba(201, 169, 110, 0.14)'
  warning-text: '#d8be93'
  danger-bg: 'rgba(196, 110, 110, 0.14)'
  danger-text: '#e0a3a3'
  info-bg: 'rgba(255, 255, 255, 0.08)'
  info-text: '#fafaf9'

typography:
  display:
    family: '"HarveySerifFont", "Tiempos Headline", "Canela", Georgia, serif'
    weights: [400, 500]
    opentype-features: ['liga', 'kern']
    note: 'display is SERIF — the legal-broadsheet move that anchors the brand'
  body:
    family: '"HarveySansFont", "Söhne", "Inter", system-ui, -apple-system, sans-serif'
    weights: [400, 500, 600]
    opentype-features: ['liga', 'kern']
  mono:
    family: 'ui-monospace, "SF Mono", "Söhne Mono", Menlo, monospace'
    weights: [400, 500]
    opentype-features: ['tnum', 'zero']
  scale:
    display-hero:    { size: 96, weight: 400, lineHeight: 1.0,  tracking: '-0.02em',  family: display }
    display-lg:      { size: 72, weight: 400, lineHeight: 1.04, tracking: '-0.018em', family: display }
    h1:              { size: 72, weight: 400, lineHeight: 1.05, tracking: '-0.018em', family: display }
    h2:              { size: 48, weight: 400, lineHeight: 1.1,  tracking: '-0.012em', family: display }
    h3:              { size: 32, weight: 500, lineHeight: 1.2,  tracking: '-0.008em', family: display }
    h4:              { size: 24, weight: 500, lineHeight: 1.3,  tracking: '-0.004em', family: display }
    eyebrow:         { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0.08em',   family: body, transform: uppercase }
    body-lg:         { size: 18, 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: 500, lineHeight: 1.4,  tracking: '0.02em',   family: body }
    quote-pull:      { size: 28, weight: 400, lineHeight: 1.3,  tracking: '-0.01em',  family: display, style: italic }
    code:            { size: 14, weight: 400, lineHeight: 1.55, tracking: '0',        family: mono }

radius:
  micro: 2
  sm: 4
  md: 8
  lg: 12
  xl: 16
  pill: 9999

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

layout:
  page-width: 1280
  prose-width: 720
  site-gutter: 'clamp(24px, 5vw, 64px)'
  header-height: 64
  grid-columns: 12
  section-rhythm: '96-160px'

components:
  button-primary:
    background: '#fafaf9'
    text: '#0f0e0d'
    padding: '10px 18px'
    radius: 4
    border: 'none'
    font: 'HarveySansFont 500 / 15px'
    hover-bg: '#ffffff'
    active-bg: '#ebebe9'
    use: 'Primary CTA — ivory fill, warm-dark label. The "Request a Demo" button.'
  button-secondary:
    background: 'transparent'
    text: '#fafaf9'
    padding: '10px 18px'
    radius: 4
    border: '1px solid rgba(255, 255, 255, 0.24)'
    font: 'HarveySansFont 500 / 15px'
    hover-bg: 'rgba(255, 255, 255, 0.08)'
    use: 'Outlined twin — ivory text, hairline border, no fill'
  button-ghost:
    background: 'transparent'
    text: 'rgba(255, 255, 255, 0.72)'
    padding: '10px 14px'
    radius: 4
    border: 'none'
    font: 'HarveySansFont 500 / 15px'
    hover-text: '#fafaf9'
    use: 'Quiet text action — nav links, repeated CTAs'
  button-disabled:
    background: 'rgba(255, 255, 255, 0.08)'
    text: 'rgba(255, 255, 255, 0.32)'
    padding: '10px 18px'
    radius: 4
    border: 'none'
    use: 'Inert state — low-alpha fill, faint label'
  card:
    background: '#1a1918'
    border: '1px solid rgba(255, 255, 255, 0.12)'
    radius: 8
    padding: '24px'
    use: 'Feature tile / case-study panel — faint warm lift on canvas'
  input:
    background: 'rgba(255, 255, 255, 0.04)'
    border: '1px solid rgba(255, 255, 255, 0.16)'
    text: '#ffffff'
    radius: 4
    padding: '10px 14px'
    font: 'HarveySansFont 400 / 15px'
    placeholder-color: 'rgba(255, 255, 255, 0.40)'
    focus-ring: '0 0 0 2px rgba(250, 250, 249, 0.40)'
    use: 'Form fields, demo-request inputs'
  badge:
    background: 'rgba(255, 255, 255, 0.08)'
    text: '#fafaf9'
    padding: '4px 10px'
    radius: 4
    font: 'HarveySansFont 500 / 12px / 0.02em'
    use: 'Category / status pill on dark'
  nav-link:
    background: 'transparent'
    text: 'rgba(255, 255, 255, 0.72)'
    padding: '8px 12px'
    font: 'HarveySansFont 500 / 15px'
    hover-text: '#fafaf9'
    use: 'Top-nav item; brightens to ivory on hover'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  duration-fast: 150
  duration-standard: 240
  duration-slow: 320
  reduced-motion: 'respects prefers-reduced-motion: reduce — transitions become opacity-only, durations halved'

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

shadows:
  none: 'none'
  ambient: 'rgba(0, 0, 0, 0.40) 0 1px 2px'
  standard: 'rgba(0, 0, 0, 0.50) 0 6px 20px -6px'
  elevated: 'rgba(0, 0, 0, 0.60) 0 18px 48px -12px'
  overlay: 'rgba(0, 0, 0, 0.70) 0 32px 80px -20px'
  ring: '0 0 0 2px rgba(250, 250, 249, 0.40)'

accessibility:
  contrast-text-on-bg: 19.3                # #ffffff on #0f0e0d — AAA at all sizes
  contrast-ivory-on-bg: 18.6               # #fafaf9 on #0f0e0d — AAA
  contrast-dark-on-brand: 18.6             # #0f0e0d on #fafaf9 (CTA) — AAA
  contrast-secondary-on-bg: 11.4           # white@72% on #0f0e0d — AAA
  focus-ring: '2px ivory ring at 40% alpha with 2px offset'
  reduced-motion-honored: true
  keyboard-nav: 'visible focus on every interactive surface; tab order matches visual flow'
  prose-line-length: 'capped at 720px (~70 characters) for editorial readability'

dark-mode: 'dark-native — the warm near-black canvas IS the brand; no light variant'
---

## 1. Visual Theme & Atmosphere

Harvey makes AI software for legal and professional services, and the marketing site is calibrated to one job: convincing partners at white-shoe firms that this tool belongs in their world. So it abandons the entire consumer-AI playbook. There is no purple gradient, no electric-blue glow, no chrome-on-black product render. Instead you land on a **warm near-black canvas `#0f0e0d`** — a black with a trace of brown in it, the colour of dark walnut or a leather-bound brief rather than a terminal — and the first thing that resolves is a headline set in a **custom serif** (`HarveySerifFont`) at 72px, weight 400. A serif headline on a warm-dark ground reads as *counsel*, not *startup*. That single pairing carries the whole brand.

The system is, in the most literal sense, **monochrome warm**. There is exactly one accent: ivory `#fafaf9`. It is the colour of the headlines, the colour of the "Request a Demo" button, and the colour of every high-emphasis label. Body copy steps up to pure white `#ffffff` for maximum legibility; everything quieter descends through low-alpha white. No second hue is ever introduced — not a brand blue, not a success green sitting loudly in a toast. The discipline is the point: a firm that bills by the hour does not want a vendor whose website looks like a video game. The restraint signals seriousness.

Type does the work that colour does on other sites. The **serif/sans split** is the load-bearing decision: `HarveySerifFont` for display and editorial moments (headlines, pull-quotes, the occasional oversized stat), `HarveySansFont` for everything functional (body, navigation, buttons, labels). The serif supplies the gravitas and the institutional register; the sans keeps the interface crisp and contemporary so the brand never tips into "old law firm with a Times New Roman PDF." It is the same move Anthropic makes with cream-and-serif, transposed into dark mode and stripped of the earth-tone palette — Harvey keeps only the elegance.

Corners are **sharp**. The CTA radius is a tight 4px; cards and inputs sit at 4–8px. Nothing is pill-shaped, nothing is playfully rounded. The geometry is square-shouldered and precise, the visual equivalent of a well-set legal document. Elevation comes from near-black shadows and faint warm lifts (`#1a1918` cards on the `#0f0e0d` ground), not from glow or colour — depth is rendered the way a darkened room renders depth, in subtractive shades of the same warm black.

Atmospheric vocabulary that captures the feeling: *counsel-grade, warm-dark, leather-and-ivory, serif-gravitas, monochrome-restrained, white-shoe, broadsheet-in-dark-mode, precise, credible, hushed, premium-professional.* Every surface reads as if it were prepared for a managing partner.

**Key Characteristics**
- Warm near-black canvas `#0f0e0d` — a black with brown in it, never pure `#000`
- Custom serif display (`HarveySerifFont`) at 72px / weight 400 — the gravitas signal
- Custom sans body (`HarveySansFont`) — crisp, contemporary, functional
- Strictly **monochrome warm**: ivory `#fafaf9` is the only accent
- Ivory CTA fill (warm-dark label) — the "Request a Demo" button
- Pure white `#ffffff` body for maximum legibility on dark
- Sharp 4px corners — square-shouldered, document-precise geometry
- Value contrast over colour — depth via warm-black shades, not glow
- Borders are ivory at low alpha, never a separate grey
- Professional-services register: credible, restrained, premium

## 2. Color Palette & Roles

### Canvas / Primary

- **bg** `#0f0e0d` — the warm near-black ground; the defining surface. Never substitute pure `#000000` (it would go cold and lose the leather warmth).
- **text** `#ffffff` — pure white body copy; the maximum-legibility default on dark.
- **brand** `#fafaf9` — ivory; the single accent. Headlines, CTA fill, high-emphasis labels.
- **on-brand** `#0f0e0d` — the warm-dark label that sits on the ivory CTA.

### Surface & Elevation

- **surface** `#1a1918` — a faint warm lift above the canvas for cards and panels.
- **surface-raised** `#242220` — second elevation tier for popovers, sheets, sticky bars.
- **overlay-backdrop** `rgba(0, 0, 0, 0.6)` — the live `--controls-backdrop-color`; modal scrim / dim layer.

### Text Scale (warm-neutral, descending)

- **text-strong** `#fafaf9` — ivory; headlines and the highest-emphasis display type.
- **text** `#ffffff` — primary body copy.
- **text-secondary** `rgba(255,255,255,0.72)` — supporting copy, deck/lede paragraphs.
- **text-muted** `rgba(255,255,255,0.56)` — captions, metadata, footer microcopy.
- **text-faint** `rgba(255,255,255,0.40)` — disabled labels, placeholder, watermark.

### Interactive

- **link** `#fafaf9` — ivory links on the dark ground.
- **link-hover** `#ffffff` — brighten to pure white on hover.
- **selected-bg** `rgba(250,250,249,0.08)` — hovered / selected row or menu-item tint.
- **disabled** `rgba(255,255,255,0.32)` — inert control text.

### Borders (ivory at low alpha — never a separate grey)

- **border** `rgba(255,255,255,0.12)` — default hairline on dark.
- **border-strong** `rgba(255,255,255,0.24)` — emphasized rule; outlined-button border.
- **border-subtle** `rgba(255,255,255,0.06)` — quietest division between same-tone surfaces.

### Shadow Colors

Harvey's shadows are **pure-black, not tinted** — on a warm-dark page the most natural depth cue is a deeper black, so shadows run `rgba(0,0,0,0.40)` to `rgba(0,0,0,0.70)`. They appear only on lifted surfaces (popovers, modals, sticky nav); flat sections rely on the faint surface lift (`#1a1918` on `#0f0e0d`) plus a hairline border for separation. No coloured or glow shadows — colour glow would break the monochrome discipline instantly.

### Semantic

The brand protects its monochrome register even in status colours — semantics are **desaturated and warm**, never the loud Material ladder.

- **success** — bg `rgba(122,158,122,0.14)`, text `#a9c9a9` (muted sage).
- **warning** — bg `rgba(201,169,110,0.14)`, text `#d8be93` (muted gold).
- **danger** — bg `rgba(196,110,110,0.14)`, text `#e0a3a3` (muted clay-red).
- **info** — bg `rgba(255,255,255,0.08)`, text `#fafaf9` (just ivory on a tint — the most on-brand choice).

Note the deliberate restraint: the safest "status" colour in this system is no colour at all — an ivory label on a faint white tint. Reach for the muted hues only when meaning *requires* differentiation.

## 3. Typography Rules

### Font Family

- **Display & Editorial**: `"HarveySerifFont", "Tiempos Headline", "Canela", Georgia, serif` — a custom transitional/Didone-adjacent serif used at weight 400–500. **This is the brand's signature** — the gravitas of a legal broadsheet rendered in dark mode.
- **Body & UI**: `"HarveySansFont", "Söhne", "Inter", system-ui, sans-serif` — a custom grotesque-humanist sans for body copy, navigation, buttons, and labels. Crisp and contemporary; keeps the interface from feeling antique.
- **Mono**: `ui-monospace, "SF Mono", "Söhne Mono", Menlo, monospace` — for code, tabular data, and citation references.
- **OpenType features**: `liga` and `kern` always on; `tnum` and `zero` in mono for aligned figures and slashed zero.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Display Hero | HarveySerifFont | 96px | 400 | 1.00 | -0.02em | Oversized landing statement |
| Display Large | HarveySerifFont | 72px | 400 | 1.04 | -0.018em | Section opener at scale |
| H1 | HarveySerifFont | 72px | 400 | 1.05 | -0.018em | Page / hero title (live-probed) |
| H2 | HarveySerifFont | 48px | 400 | 1.10 | -0.012em | Major section heading |
| H3 | HarveySerifFont | 32px | 500 | 1.20 | -0.008em | Sub-section heading |
| H4 | HarveySerifFont | 24px | 500 | 1.30 | -0.004em | Card / block heading |
| Eyebrow | HarveySansFont | 13px | 500 | 1.40 | 0.08em uppercase | Section pre-label |
| Body Large | HarveySansFont | 18px | 400 | 1.60 | 0 | Lede / deck paragraph |
| Body | HarveySansFont | 16px | 400 | 1.60 | 0 | Default body (live-probed) |
| Body Small | HarveySansFont | 14px | 400 | 1.55 | 0 | Captions, sidebars, footnotes |
| Label | HarveySansFont | 13px | 500 | 1.40 | 0 | UI labels, form labels |
| Caption | HarveySansFont | 12px | 500 | 1.40 | 0.02em | Metadata, image captions |
| Pull Quote | HarveySerifFont | 28px | 400 | 1.30 | -0.01em italic | Testimonial / editorial quote |
| Button | HarveySansFont | 15px | 500 | 1.0 | 0 | All button labels |
| Nav Link | HarveySansFont | 15px | 500 | 1.0 | 0 | Top-nav items |
| Code | Mono | 14px | 400 | 1.55 | 0 | Inline + block code |

### Principles

- **Serif display, sans body — non-negotiable.** The serif headline on warm-dark is the entire brand signal. Setting headlines in the sans collapses Harvey into generic dark-mode SaaS.
- **Display weight stays light (400).** Harvey's serif headlines are set at *weight 400*, not bold — the elegance comes from the letterforms and size, not from heft. Resist the instinct to bold a 72px headline.
- **Negative tracking scales with size.** -0.02em at 96px, -0.018em at 72px, easing to ~0 by 24px. Compression at large sizes reads as confident, masthead-grade typesetting.
- **Sans carries all chrome.** Navigation, buttons, labels, eyebrows, form fields, captions — all `HarveySansFont`. Only headlines, pull-quotes, and oversized editorial stats use the serif.
- **Body line-height is generous (1.6).** Professional-services copy is dense and consequential; 1.6 leading keeps long paragraphs readable on the dark ground.
- **Ivory for headlines, white for body.** The two-step value system (`#fafaf9` display / `#ffffff` body) is subtle but deliberate — ivory headlines feel warmer and more editorial; pure-white body maximises legibility.
- **Italics live in the serif only.** Pull-quotes and gentle emphasis use serif italic; the sans never italicises in display.
- **Uppercase eyebrows with wide tracking.** 13px / 500 / 0.08em uppercase eyebrows label sections — the one place tracking goes positive.

## 4. Component Stylings

### Buttons

**Primary (Ivory)**
- Background: `#fafaf9` ivory. Text: `#0f0e0d` warm-dark, HarveySansFont 500 / 15px.
- Padding: `10px 18px`. Radius: `4px`. No border.
- Hover: bg → `#ffffff` (brighten to pure white). Active: bg → `#ebebe9`.
- Use: the primary CTA — *Request a Demo, Get started, Contact sales.* The single ivory moment per viewport.

**Secondary (Outlined)**
- Background: transparent. Text: `#fafaf9` ivory. Border: `1px solid rgba(255,255,255,0.24)`.
- Same padding / radius / font as primary.
- Hover: bg → `rgba(255,255,255,0.08)`; border may brighten to 0.36 alpha.
- Use: twin to primary — *Read the case study, Watch the overview.*

**Ghost (Text)**
- Background: transparent. Text: `rgba(255,255,255,0.72)`. No border.
- Padding: `10px 14px`. Radius: `4px`.
- Hover: text → `#fafaf9` ivory.
- Use: quietest action — nav links, repeated/footer CTAs, "Learn more."

**Disabled**
- Background: `rgba(255,255,255,0.08)`. Text: `rgba(255,255,255,0.32)`. Radius: `4px`. No border, no hover.
- Use: inert state for any of the above.

### Cards

**Feature / Case-Study Card**
- Background: `#1a1918` (faint warm lift). Border: `1px solid rgba(255,255,255,0.12)`. Radius: `8px`. Padding: `24px`.
- Shadow: none at rest — the surface lift plus hairline does the separation.
- Hover: border → `rgba(255,255,255,0.24)`; optional `standard` shadow on interactive cards. Transition `240ms ease-standard`.
- Use: capability tile, customer logo panel, resource/blog index entry.

**Quote Card**
- Background: `#1a1918`. Border: `1px solid rgba(255,255,255,0.12)`. Radius: `8px`. Padding: `32px`.
- Quote in HarveySerifFont 28px / 400 / italic, ivory; attribution in HarveySansFont 14px muted.
- Use: testimonial from a firm or partner.

### Badges, Tags, Pills

**Standard Badge** — bg `rgba(255,255,255,0.08)`, text `#fafaf9` ivory, radius `4px`, padding `4px 10px`, HarveySansFont 500 / 12px / 0.02em tracking. Category labels, "New," section markers.

**Outline Badge** — transparent bg, text `rgba(255,255,255,0.72)`, border `1px solid rgba(255,255,255,0.16)`, radius `4px`. Quieter alternative.

**Status Badge** — uses the desaturated semantic tints (sage / gold / clay-red) with matching low-alpha background; radius `4px`. Reserve for genuine status, not decoration.

### Inputs / Forms

- Background: `rgba(255,255,255,0.04)` (just barely lifted off canvas). Border: `1px solid rgba(255,255,255,0.16)`. Radius: `4px`. Padding: `10px 14px`.
- Font: HarveySansFont 400 / 15px. Placeholder: `rgba(255,255,255,0.40)`.
- Focus: `0 0 0 2px rgba(250,250,249,0.40)` ivory ring; border brightens to `rgba(255,255,255,0.32)`.
- Error: border → `#e0a3a3`, ring → `rgba(196,110,110,0.30)`; helper text in danger-text.
- Label: HarveySansFont 13px / 500 ivory above field; helper caption 12px muted below.

### Navigation

- Header height `64px`. Background `#0f0e0d` (transparent over hero, solid on scroll with a `border-subtle` bottom rule).
- Logo: Harvey wordmark in ivory.
- Nav links: HarveySansFont 500 / 15px, colour `rgba(255,255,255,0.72)`, padding `8px 12px`. Hover → `#fafaf9` ivory.
- Right side: a ghost "Log in" / "Sign in" + the primary ivory "Request a Demo" CTA.
- Mobile: right-aligned hamburger → full-screen sheet; links stack at 18–20px / 500, CTA pinned at the bottom.

## 5. Layout Principles

### Spacing System

- **Base unit**: 4px.
- **Scale**: 4, 8, 12, 16, 24, 32, 48, 64, 96, 128 — a clean 4px-based ladder.
- **Density observation**: Harvey is calm but not as airy as a print-magazine brand — it reads as a *confident enterprise* page. Headlines get room (96–128px above/below) but content blocks sit at a businesslike density appropriate for dense, consequential copy.

### Grid & Container

- **Page max width**: `1280px` — a standard, no-nonsense container width that reads as enterprise rather than editorial-eccentric.
- **Site gutter**: `clamp(24px, 5vw, 64px)`.
- **Grid**: 12 columns with 24px gutters. Hero spans full width; capability rails span 8; sidebars span 4.
- **Hero treatment**: full-bleed warm-dark, 72–96px serif headline, body confined to a ~720px column anchored left.

### Whitespace Philosophy

Whitespace on a dark canvas reads as *gravitas* — the more black around a serif headline, the more weight it carries. Harvey uses generous **96–160px section gutters** between major blocks and lets hero headlines float in surrounding dark, but keeps interior content (feature grids, customer logos, copy blocks) at a practical density. The negative space is warm-dark, so it never feels empty — it feels composed.

### Section Cadence

- Hero (warm-dark, serif headline + ivory CTA) → Trust strip (customer / firm logos in muted ivory) → Capability rail (card grid on canvas) → Editorial / outcomes section (720px serif-headed copy) → Testimonial card → CTA band → Footer.
- Sections separate by spacing alone or by a single `border-subtle` hairline; consecutive dark sections may alternate canvas `#0f0e0d` ↔ surface `#1a1918` for quiet rhythm.

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|---|---|---|
| Micro | 2px | Slim chip corners, decorative dividers |
| Standard (sm) | 4px | **The signature** — buttons, inputs, badges, the CTA |
| Comfortable (md) | 8px | Cards, panels, dropdowns |
| Relaxed (lg) | 12px | Modals, larger callout boxes |
| Featured (xl) | 16px | Oversized feature panels, image frames |
| Pill | 9999px | Avoided — used at most for rare circular avatars |

Harvey's defining radius is the **sharp 4px** on the CTA and form controls, with cards stepping up only to 8px. The system reads square-shouldered and precise. There are effectively no pill shapes — rounding everything would soften the professional-services register the brand depends on. Compound / per-corner radii are not used.

## 7. Depth & Elevation

| Level | Treatment | Use |
|---|---|---|
| 0 | Flat — no shadow, on `#0f0e0d` | Default page surface, hero, body sections |
| 1 | Surface lift `#1a1918` + 1px hairline | Cards, panels, capability tiles |
| 2 | `rgba(0,0,0,0.40) 0 1px 2px` | Sticky nav on scroll |
| 3 | `rgba(0,0,0,0.50) 0 6px 20px -6px` | Hover-lifted cards, dropdowns |
| 4 | `rgba(0,0,0,0.60) 0 18px 48px -12px` | Popovers, menus, sheets |
| 5 | `rgba(0,0,0,0.70) 0 32px 80px -20px` + `rgba(0,0,0,0.6)` backdrop | Modals, dialogs |

### Shadow Philosophy

On a warm near-black canvas, the most honest depth cue is a **deeper black** — so Harvey's shadows are pure-black at increasing opacity rather than tinted or glowing. Most elevation, however, is achieved *without* shadow at all: a faint surface lift (`#1a1918`) plus a `rgba(255,255,255,0.12)` hairline reads as "raised" because the eye perceives the edge and the slightly lighter face. Shadows are reserved for true overlays (popovers, modals), where the `rgba(0,0,0,0.6)` backdrop dims the page behind. The brand never uses coloured glow — a blue or purple halo would shatter the monochrome discipline.

## 8. Interaction & Motion

### Easing Curves

- `ease-standard`: `cubic-bezier(0.4, 0, 0.2, 1)` — default for hover, focus, colour transitions.
- `ease-emphasized`: `cubic-bezier(0.2, 0, 0, 1)` — punchier; used on modal enter and hero reveal.

### Duration Buckets

- **Fast (150ms)** — colour transitions, focus rings, link/nav hovers.
- **Standard (240ms)** — button hover, card hover, dropdown reveal.
- **Slow (320ms)** — modal enter/exit, section fade-in on scroll.

### Per-Component Micro-States

- **Button (primary) hover**: ivory `#fafaf9` → pure white `#ffffff`, 150ms. No lift, no scale — value shift only.
- **Button (secondary/ghost) hover**: background fades in to `rgba(255,255,255,0.08)`; text brightens to ivory.
- **Card hover**: border `0.12` → `0.24` alpha over 240ms; interactive cards may add the `standard` shadow.
- **Link hover**: `rgba(255,255,255,0.72)` → `#fafaf9` over 150ms.
- **Input focus**: 2px ivory ring at 40% alpha fades in over 150ms; border brightens.
- **Nav link active**: subtle ivory underline or full-opacity ivory text.

### Page Transitions

Hero text fades in over 320ms with a small (~16px) translate-up; below-fold sections use `IntersectionObserver` to fade in near 85% viewport at 320ms, opacity-led with minimal translate. The motion register is *settled and quiet* — no bounce, no parallax theatrics.

### Reduced Motion

`@media (prefers-reduced-motion: reduce)` — all transitions become opacity-only, durations halved; translate animations disabled; scroll-linked reveals snap to final state.

## 9. Accessibility & A11y

### Contrast Pairs (computed from live tokens)

- **`#ffffff` text on `#0f0e0d` bg**: ≈19.3:1 — AAA at all sizes (the body default).
- **`#fafaf9` ivory on `#0f0e0d` bg**: ≈18.6:1 — AAA (headlines, links).
- **`#0f0e0d` on `#fafaf9` brand (CTA)**: ≈18.6:1 — AAA (warm-dark label on ivory button).
- **`rgba(255,255,255,0.72)` secondary on `#0f0e0d`**: ≈11.4:1 — AAA (supporting copy).
- **`rgba(255,255,255,0.56)` muted on `#0f0e0d`**: ≈7.6:1 — AAA at body sizes (captions).
- **`rgba(255,255,255,0.40)` faint on `#0f0e0d`**: ≈4.4:1 — AA at large sizes / disabled only; do not use for essential body text.

The warm-dark + ivory pairing is a contrast windfall: nearly every important type pair clears AAA, so the only care needed is keeping low-alpha whites off small essential text.

### Focus Indicators

- Default focus ring: `0 0 0 2px rgba(250,250,249,0.40)` ivory ring with 2px offset.
- Every interactive surface keeps a visible focus state — no `outline: none` without an ivory-ring replacement.

### ARIA Patterns

- **Navigation**: `<nav aria-label="Main">` with a skip-link to main content.
- **Disclosure**: `<button aria-expanded aria-controls>` for FAQ / collapsible blocks.
- **Dialog**: `role="dialog" aria-modal="true" aria-labelledby` with focus trap and Esc-to-close on the demo-request modal.
- **Live regions**: `aria-live="polite"` for form validation messages.

### Keyboard Navigation

- Tab order matches visual flow: skip-link → nav → hero CTA → main → footer.
- All buttons, links, inputs reachable via Tab; the demo modal traps focus until dismissed.
- `Esc` closes modals and dropdowns; arrow keys navigate menus.

### Screen Reader Hints

- Decorative dividers and background flourishes are `aria-hidden="true"`.
- Icon-only buttons carry `aria-label`.
- Customer-logo strip provides text alternatives for each firm.

### Reduced Motion

Honoured globally — all translate/scale animation becomes opacity-only; durations halve.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Use |
|---|---|---|
| Mobile | < 640px | Single column, full-bleed sections, stacked nav sheet |
| Tablet | 640–1024px | 2-column rails, narrower gutters |
| Desktop | 1024–1280px | Full 12-col grid, 720px prose |
| Wide | 1280–1536px | Page locks toward 1280 max, gutters expand |
| Ultra | > 1536px | Container caps; surrounding warm-dark grows |

### Touch Targets

- Minimum tap target: 44×44px.
- Buttons reach ≥44px height on mobile (10px vertical padding + line-height, bumped where needed).
- Nav link tap area honoured at 44×44px even when visual padding is tighter.

### Collapsing Strategy

- **Header**: full nav at ≥1024px; right-aligned hamburger → full-screen sheet below (CTA pinned at the bottom of the sheet).
- **Hero headline**: 96px → 72px → 48px across desktop / tablet / mobile.
- **Capability grid**: 3-up desktop → 2-up tablet → 1-up mobile.
- **Body width**: 720px column → fluid ~90vw on mobile.
- **Section spacing**: 160px → 96px → 64px across sizes.

### Image Behavior

- Imagery and product renders use `aspect-ratio` to prevent layout shift.
- `srcset` 1x/2x for crisp logos and screenshots on the dark ground.
- Lazy-load below-fold media; eager-load hero.
- Dark-mode-native imagery — screenshots and illustrations are prepared on dark so they sit on the canvas without a light card frame.

### Container Queries

Used inside capability cards to swap icon-left vs. icon-top layout when card width crosses ~320px.

## 11. Content & Voice

### Tone

**Credible, precise, professional.** Harvey writes the way a senior associate writes a clear memo — declarative, specific, free of hype. Headlines state capability or outcome plainly; subheads explain mechanism and proof. The register assumes a sophisticated reader (lawyers, professional-services partners) and never condescends or over-sells. Confidence comes from precision, not volume.

### Microcopy Patterns

- **Button verbs**: "Request a Demo," "Contact sales," "Read the case study," "Get started." Never "Sign up free!", never a trailing "→ now".
- **Error messages**: specific and respectful — *"We couldn't submit your request. Check the highlighted fields and try again."* No shame, no exclamation.
- **Success confirmations**: brief and assured — *"Thanks — our team will be in touch."*
- **Loading states**: quiet — *"Submitting…"* — no playful copy.

### Empty States

Explain the state and offer the next step, in plain language: *"No matters yet. Add a workspace to get started."* Avoid apology, mascots, or "Oops!". For a professional-services audience, calm competence beats personality.

### CTA Verb Conventions

- Primary (hero / nav): "Request a Demo," "Contact sales," "Get started"
- Secondary: "Read the case study," "Explore the platform," "Watch the overview"
- Footer: "Read our research," "View security," "See customer stories"

The brand never trades in urgency or scarcity — no countdowns, no "limited spots." Trust is the currency; the voice protects it.

## 12. Dark Mode & Theming

**Dark-native — the warm near-black canvas IS the brand.** Harvey's marketing surface is built dark-first; the warm `#0f0e0d` ground plus ivory serif is the entire identity, not a togglable theme. There is no light-mode marketing variant, and one would be a different brand: the gravitas comes specifically from a serif headline glowing ivory out of warm darkness.

If a downstream surface (a help-centre, a docs site, an embedded widget) ever needed a light companion, the disciplined translation would be: invert to a warm off-white ground (something like `#faf9f7`, *not* pure white), keep headlines in `HarveySerifFont`, set text to the warm-dark `#0f0e0d`, and render the CTA as warm-dark fill with ivory/white label. The serif/sans split, the 4px corners, and the strict monochrome would all carry over — only the value polarity flips. This is not currently shipped; the canonical experience is dark.

## 13. Lineage & Influences

Harvey's design DNA is **the white-shoe law firm transposed into dark mode**. The warm near-black canvas, the serif headline, the single ivory accent, and the sharp corners together quote the visual language of institutional legal and financial brands — leather-bound, monogrammed, understated — rather than the visual language of consumer tech. Where most AI products signal *novelty* (gradients, glow, electric accents), Harvey signals *trust*: the same instinct that makes a law firm's letterhead restrained and a private bank's website quiet.

What it inherits: the serif-for-gravitas tradition of editorial and institutional brands (close kin to Anthropic's cream-and-serif, recast in dark and stripped of the earth-tone palette); Swiss-grade restraint in its tight monochrome system; and the dark-mode-as-premium register that brands like Linear and Vercel established for serious software. What it borrows from contemporaries: Linear's near-black canvas and hairline-on-dark discipline, Anthropic's serif-body confidence, the value-contrast-over-colour depth model. What it rejects, deliberately: gradient meshes, neon or electric accents, pill-shaped friendliness, exclamation-point marketing voice, and any "AI sparkle" iconography — every one of which would undercut the professional-services credibility the brand is engineered to project.

**Named influences:**

- **Anthropic** — serif-for-body/headline confidence and warm-neutral restraint, recast here into dark mode. *https://www.anthropic.com*
- **Linear** — near-black canvas, hairline-on-dark elevation, value-contrast depth. *https://linear.app*
- **Vercel** — monochrome dark-mode-premium register for serious software. *https://vercel.com*
- **Klim Type Foundry** — DNA reference for the transitional/editorial serif weight ladder (Tiempos / Canela family). *https://klim.co.nz*
- **Stripe** — hairline-border restraint and cool-confidence monochrome discipline. *https://stripe.com*
- **The Financial Times** — institutional, serif-led, premium-professional editorial register. *https://www.ft.com*

## 14. Do's and Don'ts

### Do

- **Do** keep the canvas at warm near-black `#0f0e0d` — a black with brown in it, never pure `#000000`.
- **Do** set headlines in `HarveySerifFont` (or Tiempos / Canela fallback) at large sizes and **weight 400** — light, not bold.
- **Do** treat ivory `#fafaf9` as the *only* accent — headlines, the CTA, high-emphasis labels.
- **Do** fill the primary CTA with ivory and a warm-dark label (the "Request a Demo" pattern).
- **Do** set body in pure white `#ffffff` at 1.6 line-height for maximum legibility on dark.
- **Do** keep corners sharp — 4px on buttons/inputs/badges, 8px on cards.
- **Do** build elevation from surface lift (`#1a1918`) + hairline borders, with pure-black shadows for true overlays only.
- **Do** keep semantic colours desaturated and warm so they don't break the monochrome register.
- **Do** use uppercase, wide-tracked (0.08em) sans eyebrows above section headlines.
- **Do** keep the voice precise and credible — memo-grade, never breathless.

### Don't

- **Don't** use pure black `#000000` for the canvas — it goes cold and loses the warm leather quality.
- **Don't** set headlines in the sans, or bold the serif. The light serif headline is the brand.
- **Don't** introduce a second accent hue — no brand blue, no purple, no neon. Monochrome warm is non-negotiable.
- **Don't** use the ivory CTA fill for more than the primary action per viewport.
- **Don't** round things into pills — sharp 4px corners carry the professional register.
- **Don't** add coloured or glow shadows — depth is pure-black and value-led.
- **Don't** drop low-alpha white (< 0.5) onto small essential body text — keep it AA+.
- **Don't** ship gradient meshes, parallax, or "AI sparkle" iconography.
- **Don't** use urgent/scarcity verbs ("Sign up free!", "Limited spots!"). Trust, not pressure.
- **Don't** frame dark-native imagery inside a light card — prepare media on the dark ground.

## 15. Agent Prompt Guide

### Quick Color Reference

```
bg: #0f0e0d            (warm near-black canvas)
text: #ffffff          (body copy)
brand: #fafaf9         (ivory — only accent; headlines + CTA)
on-brand: #0f0e0d      (warm-dark label on ivory CTA)
surface: #1a1918       (card / panel lift)
surface-raised: #242220
text-secondary: rgba(255,255,255,0.72)
text-muted: rgba(255,255,255,0.56)
border: rgba(255,255,255,0.12)
overlay-backdrop: rgba(0,0,0,0.6)
```

### Example Component Prompts

1. **"Create a hero in Harvey style — warm near-black `#0f0e0d` canvas, a 72px headline in a serif (HarveySerifFont / Tiempos fallback) at weight 400 with -0.018em tracking and ivory `#fafaf9` colour, 18px sans deck in white at 1.6 line-height, a single primary CTA filled ivory `#fafaf9` with warm-dark `#0f0e0d` label at 4px radius reading 'Request a Demo', no gradient, no glow."**

2. **"Design a feature card — `#1a1918` background on the dark page, `1px rgba(255,255,255,0.12)` border, 8px radius, 24px padding, 24px serif heading in ivory, 16px sans body in white@72%, no shadow at rest, hover deepens the border to 0.24 alpha."**

3. **"Build a primary nav — 64px header, warm-dark `#0f0e0d` background with a `rgba(255,255,255,0.06)` bottom hairline on scroll, ivory wordmark left, sans links 15px / 500 in white@72% that brighten to ivory `#fafaf9` on hover, right side a ghost 'Log in' plus the ivory 'Request a Demo' CTA."**

4. **"Compose a testimonial card — `#1a1918` panel, 8px radius, 32px padding, the quote in serif (HarveySerifFont) 28px / 400 / italic in ivory, attribution in 14px sans white@56%, no quotation glyphs, no coloured accent."**

5. **"Render a form field set — inputs with `rgba(255,255,255,0.04)` fill, `1px rgba(255,255,255,0.16)` border, 4px radius, white text, placeholder white@40%, a 2px ivory `rgba(250,250,249,0.4)` focus ring; sans 13px ivory labels above, 12px muted helper below."**

6. **"Create a CTA band — full-width warm-dark `#0f0e0d` section, centred 48px serif headline in ivory, one sentence of white@72% sans copy, a single ivory `#fafaf9` 'Request a Demo' button at 4px radius, generous 96–128px vertical padding, strictly monochrome."**

### Iteration Guide

1. **Warm the black.** If the canvas is `#000000`, it's wrong — use warm near-black `#0f0e0d`. The brown undertone is load-bearing.
2. **Serif the headline, lightly.** Switch headlines to a serif at weight 400 (not bold). If they're sans or bold, the gravitas is gone.
3. **Strip every second colour.** Remove any blue/purple/green accent — the only accent is ivory `#fafaf9`. Status colours stay desaturated and warm.
4. **Make the CTA ivory.** Primary button = ivory fill, warm-dark label, 4px radius. One per viewport.
5. **Sharpen the corners.** Pull radii down to 4px on controls, 8px on cards. Kill any pills.
6. **Kill the glow.** Replace any coloured/box glow with pure-black shadow (overlays only) or a surface lift + hairline.
7. **Two-step the whites.** Headlines ivory `#fafaf9`, body pure white `#ffffff`, supporting copy white@72%/56%. Keep low-alpha whites off small essential text.
8. **Calm the copy.** Replace urgent/scarcity verbs with precise, memo-grade phrasing — "Request a Demo," "Read the case study." Trust, not pressure.

---

*Theme-toggle audit: score=0, signals=[dark-native — no light variant offered]*
