AI

Harvey

Harvey AI – Legal Precision Dark

bespoke-serif-display-herowarm-neutral monochrome paletteshadow-free flat elevationcinematic full-bleed photographylegal-authority typographic hierarchy

Harvey's design system is a high-contrast, editorial-grade identity built for the legal AI market. It pairs a bespoke serif display font (HarveySerifFont) with a proprietary sans (HarveySansFont) against a near-black/warm-ivory palette. The hero is cinematic — full-bleed photography with a dark overlay and large serif headline — while the rest of the page uses a structured warm-neutral system. No shadows are used; hierarchy is achieved through typographic contrast, color inversion, and spatial rhythm on an 8px base grid. The overall tone is authoritative, restrained, and premium.

9Colors
11Type styles
11Spacing
2Radii

Colors

Surface

Ivory Surfacebackground
Primary page background, text on dark surfaces, inverse text
Near Black Secondarybackground
Secondary background surfaces, hover state for primary background
Light Warm Graybackground
Subtle surface tint, gray-100 token

Text

Ink Blacktext
Primary background (dark sections), primary text on light, button fills, borders on focus
Pure Whitetext
Text and borders in header/footer on dark backgrounds, ring offset
Warm Mid Graytext
Muted/secondary text, form input borders, select icons
Deep Warm Graytext
Footer text, form text color

Border

Stone Grayborder
Secondary text, borders, surface dividers
Dark Charcoalborder
Disabled text, primary border, secondary hover background

Typography

Hero headline — largest display text on the page
The quick brown fox jumps
HarveySerifFont72px · 400 · 75.6px · -0.9px
Section headings, large feature titles
The quick brown fox jumps
HarveySerifFont48px · 400 · 50.4px · -0.48px
Sub-section headings, card titles in serif
The quick brown fox jumps
HarveySerifFont32px · 500 · 33.6px · -0.32px
Large sans headings, stat callouts
The quick brown fox jumps
HarveySansFont32px · 500 · 35.2px · -0.32px
Smaller serif display text, pull quotes
The quick brown fox jumps
HarveySerifFont28px · 400 · 39.2px
Subheadings, intro paragraphs in sans
The quick brown fox jumps
HarveySansFont20px · 400 · 26px
Emphasized subheadings
The quick brown fox jumps
HarveySansFont20px · 500 · 26px
Primary body copy, nav links, general UI text
The quick brown fox jumps
HarveySansFont16px · 400 · 24px
UI labels, button text, navigation items
The quick brown fox jumps
HarveySansFont14px · 500 · 18.2px
Compact labels with slight negative tracking
The quick brown fox jumps
HarveySansFont14px · 500 · 18.2px · -0.14px
Secondary body text, captions, footnotes
The quick brown fox jumps
HarveySansFont14px · 400 · 18.2px

Fonts

HarveySerifFontCustom
HarveySansFontCustom

Spacing & Shape

Spacing

xs
4px
sm
8px
md
12px
base
16px
lg
24px
xl
32px
nav-padding
32px
2xl
64px
top-page-spacing
66px
3xl
128px
4xl
160px

Border Radius

sm4px
md8px
---
version: alpha
name: "Harvey AI – Legal Precision Dark"
description: "Typography baseline relies on HarveySerifFont for hero headline — largest display text on the page."
colors:
  ivory-surface: "#fafaf9"
  light-warm-gray: "#f2f1f0"
  near-black-secondary: "#1f1d1a"
  deep-warm-gray: "#706d66"
  ink-black: "#0f0e0d"
  pure-white: "#ffffff"
  warm-mid-gray: "#8f8b85"
  dark-charcoal: "#33312c"
  stone-gray: "#cccac6"
typography:
  display-hero:
    fontFamily: "HarveySerifFont"
    fontSize: "72px"
    fontWeight: "400"
    lineHeight: "75.6px"
    letterSpacing: "-0.9px"
  display-large:
    fontFamily: "HarveySerifFont"
    fontSize: "48px"
    fontWeight: "400"
    lineHeight: "50.4px"
    letterSpacing: "-0.48px"
  display-medium:
    fontFamily: "HarveySerifFont"
    fontSize: "32px"
    fontWeight: "500"
    lineHeight: "33.6px"
    letterSpacing: "-0.32px"
  display-small:
    fontFamily: "HarveySerifFont"
    fontSize: "28px"
    fontWeight: "400"
    lineHeight: "39.2px"
  body-base:
    fontFamily: "HarveySansFont"
    fontSize: "16px"
    fontWeight: "400"
    lineHeight: "24px"
  label-medium:
    fontFamily: "HarveySansFont"
    fontSize: "14px"
    fontWeight: "500"
    lineHeight: "18.2px"
  label-tracked:
    fontFamily: "HarveySansFont"
    fontSize: "14px"
    fontWeight: "500"
    lineHeight: "18.2px"
    letterSpacing: "-0.14px"
  body-small:
    fontFamily: "HarveySansFont"
    fontSize: "14px"
    fontWeight: "400"
    lineHeight: "18.2px"
  subheading-sans:
    fontFamily: "HarveySansFont"
    fontSize: "20px"
    fontWeight: "400"
    lineHeight: "26px"
  subheading-sans-medium:
    fontFamily: "HarveySansFont"
    fontSize: "20px"
    fontWeight: "500"
    lineHeight: "26px"
  sans-large:
    fontFamily: "HarveySansFont"
    fontSize: "32px"
    fontWeight: "500"
    lineHeight: "35.2px"
    letterSpacing: "-0.32px"
rounded:
  sm: "4px"
  md: "8px"
spacing:
  xs: "4px"
  sm: "8px"
  md: "12px"
  base: "16px"
  lg: "24px"
  xl: "32px"
  2xl: "64px"
  3xl: "128px"
  4xl: "160px"
  nav-padding: "32px"
  top-page-spacing: "66px"
---

## Overview

Typography baseline relies on HarveySerifFont for hero headline — largest display text on the page.

This system uses a 8px base grid with scale values 4, 8, 12, 16, 24, 32, 64, 128, 160.

**Signature traits:**
- Core token rhythm: Token evidence indicates consistent color, spacing, and radius rhythm across visible UI.

## Colors

The palette uses 9 validated color tokens across 1 theme profile. Semantic roles stay attached to observed usage so generation agents can choose accents without inventing new color meaning.

**Semantic naming:**
- **surface-background** maps to `ivory-surface`: Role "background" is grounded by usage context "Primary page background, text on dark surfaces, inverse text".
- **action-text** maps to `ink-black`: Role "text" is grounded by usage context "Primary background (dark sections), primary text on light, button fills, borders on focus".
- **surface-text** maps to `pure-white`: Role "text" is grounded by usage context "Text and borders in header/footer on dark backgrounds, ring offset".
- **surface-border** maps to `stone-gray`: Role "border" is grounded by usage context "Secondary text, borders, surface dividers".

### Text Scale
- **Deep Warm Gray** (#706d66): Footer text, form text color. Role: text. {authored: rgb(112, 109, 102), space: rgb}
- **Ink Black** (#0f0e0d): Primary background (dark sections), primary text on light, button fills, borders on focus. Role: text. {authored: rgb(15, 14, 13), space: rgb}
- **Pure White** (#ffffff): Text and borders in header/footer on dark backgrounds, ring offset. Role: text. {authored: rgb(255, 255, 255), space: rgb}
- **Warm Mid Gray** (#8f8b85): Muted/secondary text, form input borders, select icons. Role: text. {authored: rgb(143, 139, 133), space: rgb}

### Interactive
- **Dark Charcoal** (#33312c): Disabled text, primary border, secondary hover background. Role: border. {authored: rgb(51, 49, 44), space: rgb}
- **Stone Gray** (#cccac6): Secondary text, borders, surface dividers. Role: border. {authored: rgb(204, 202, 198), space: rgb}

### Surface & Shadows
- **Ivory Surface** (#fafaf9): Primary page background, text on dark surfaces, inverse text. Role: background. {authored: rgb(250, 250, 249), space: rgb}
- **Light Warm Gray** (#f2f1f0): Subtle surface tint, gray-100 token. Role: background. {authored: rgb(242, 241, 240), space: rgb}
- **Near Black Secondary** (#1f1d1a): Secondary background surfaces, hover state for primary background. Role: background. {authored: rgb(31, 29, 26), space: rgb}

## Typography

Typography uses HarveySerifFont, HarveySansFont across extracted hierarchy roles. Keep hierarchy mapped to these token rows before adding decorative type styles.

Mixes HarveySerifFont and HarveySansFont for visual contrast. Weight range spans regular, medium. Sizes range from 14px to 72px.

### Font Roles
- **Headline Font**: HarveySerifFont
- **Body Font**: HarveySerifFont

### Type Scale Evidence
| Role | Font | Size | Weight | Line Height | Letter Spacing | Stack / Features | Notes |
|------|------|------|--------|-------------|----------------|------------------|-------|
| Hero headline — largest display text on the page | HarveySerifFont | 72px | 400 | 75.6px | -0.9px | HarveySerifFont, HarveySerifFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif; features: "calt", "liga" | Extracted token |
| Section headings, large feature titles | HarveySerifFont | 48px | 400 | 50.4px | -0.48px | HarveySerifFont, HarveySerifFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif; features: "calt", "liga" | Extracted token |
| Sub-section headings, card titles in serif | HarveySerifFont | 32px | 500 | 33.6px | -0.32px | HarveySerifFont, HarveySerifFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif; features: "calt", "liga" | Extracted token |
| Smaller serif display text, pull quotes | HarveySerifFont | 28px | 400 | 39.2px | normal | HarveySerifFont, HarveySerifFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif; features: "calt", "liga" | Extracted token |
| Primary body copy, nav links, general UI text | HarveySansFont | 16px | 400 | 24px | normal | HarveySansFont, HarveySansFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif | Extracted token |
| UI labels, button text, navigation items | HarveySansFont | 14px | 500 | 18.2px | normal | HarveySansFont, HarveySansFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif | Extracted token |
| Compact labels with slight negative tracking | HarveySansFont | 14px | 500 | 18.2px | -0.14px | HarveySansFont, HarveySansFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif | Extracted token |
| Secondary body text, captions, footnotes | HarveySansFont | 14px | 400 | 18.2px | normal | HarveySansFont, HarveySansFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif | Extracted token |
| Subheadings, intro paragraphs in sans | HarveySansFont | 20px | 400 | 26px | normal | HarveySansFont, HarveySansFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif | Extracted token |
| Emphasized subheadings | HarveySansFont | 20px | 500 | 26px | normal | HarveySansFont, HarveySansFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif | Extracted token |
| Large sans headings, stat callouts | HarveySansFont | 32px | 500 | 35.2px | -0.32px | HarveySansFont, HarveySansFont Fallback, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open Sans, Helvetica Neue, sans-serif, sans-serif | Extracted token |

## Layout

Responsive system uses 3 breakpoint tier(s): mobile, tablet, desktop.

### Responsive Strategy
- **mobile (<= 640px)**: Constrain layout for small viewports and prioritize vertical stacking.
- **tablet (>= 768px)**: Increase spacing and column structure for medium-width viewports.
- **desktop (>= 1106px)**: Expand layout density and horizontal composition for wide viewports.

### Spacing System
| Token | Value | Px | Notes |
|------|-------|----|-------|
| xs | 4px | 4 | Mapped to --spacing-xs |
| sm | 8px | 8 | Extracted spacing token |
| md | 12px | 12 | Extracted spacing token |
| base | 16px | 16 | Extracted spacing token |
| lg | 24px | 24 | Extracted spacing token |
| xl | 32px | 32 | Extracted spacing token |
| 2xl | 64px | 64 | Mapped to --spacing-xl |
| top-page-spacing | 66px | 66 | Mapped to --spacing-top-page-spacing |
| 3xl | 128px | 128 | Mapped to --spacing-2xl |
| 4xl | 160px | 160 | Extracted spacing token |

## Elevation & Depth

Keep depth flat unless validated shadow or interaction evidence appears in the extraction payload. Do not invent shadows beyond this evidence boundary.

### Shadow Evidence
| Shadow Token | Layers | Details |
|--------------|--------|---------|
| n/a | 0 | No validated shadow payload |

### Interaction Signals
| Theme | Signal | Evidence |
|-------|--------|----------|
| Light | backdrop-filter | blur(15px) ; blur(16px) ; blur(20px) |
| Light | outline-color | rgb(250, 250, 249) ; rgb(15, 14, 13) ; rgb(255, 255, 255) |
| Light | outline-width | 3px |
| Light | outline-offset | 0px |
| Light | transform | matrix(1, 0, 0, 1, 0, 0) ; matrix(1, 0, 0, 1, -1247.95, 0) ; matrix(1, 0, 0, 1, -303.407, 0) |

## Shapes

Shape language maps directly to rounded tokens. Keep component corners consistent with the role mapping below before introducing bespoke geometry.

### Radius Roles
| Token | Value | Px | Role Mapping |
|------|-------|----|--------------|
| sm | 4px | 4 | Subtle corner |
| md | 8px | 8 | Control corner |

### Geometry Evidence
| Radius Token | Shape | Units |
|--------------|-------|-------|
| sm | 4px | px |
| md | 8px | px |

## Components

(none detected)

## Do's and Don'ts

Guardrails protect Core token rhythm without adding unsupported visual claims.

| Do | Don't |
|----|---------|
| Do maintain consistent spacing using the base grid | Don't make unsupported claims about absent visual features |
| Do maintain WCAG AA contrast ratios (4.5:1 for normal text) | Don't mix rounded and sharp corners in the same view |
| Do use the primary color only for the single most important action per screen |  |
| Do verify evidence before writing new design-system guidance |  |

## Responsive Evidence

### Breakpoints
| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <= 640px | (max-width: 640px) |
| Tablet | >= 768px | (min-width: 768px) |
| Desktop | >= 1106px | (min-width: 1106px) |
| Breakpoint 4 | Unknown | (prefers-reduced-motion: reduce) |

## Agent Prompt Guide

### Example Component Prompts
- Create button component using validated primary color role and spacing tokens.
- Create card component with mapped radius role and evidence-backed elevation.
- Create form input component using inferred typography hierarchy and border roles.

### Iteration Guide
1. Start with extracted palette and typography roles only.
2. Map spacing and radius directly from token tables before visual polish.
3. Apply component patterns one section at a time and compare against source intent.
4. Keep elevation claims tied to explicit evidence in output.
5. Iterate with smallest diffs and re-check section hierarchy after each change.
Design Extractor

Turn any website into a structured design spec that AI coding agents can use to build pixel-perfect UI.

© 2026 Design Extractor. All rights reserved.