light · sans · structured · cool · soft · spacious

Plaid

Pale blue trust on white, classical Stripe-adjacent type, and a Benjamin-Franklin-as-mascot moment of personality.

By webdesignhot · plaid.com
$ npx design-md add plaid
Learn more about the CLI
Compare to…
try on →
1440 × 900
mobile · 390 × 844
Tokens design.md/v1.5
  • bg #ffffff
  • bg-soft #f7f9fb
  • bg-blue #eaf3ff
  • bg-cream #f3efe6
  • bg-ink #000000
  • surface #f3f5f8
  • surface-soft #fafbfc
  • surface-cream #faf6ed
  • text AAA · 21.0 #000000
  • text-strong #000000
  • text-medium #1a1f29
  • text-muted #4a5568
  • text-soft #7a8390
  • text-faint — · 2.4 #a0a8b3
  • brand AA·LG · 3.8 #0a85ea
  • brand-strong #0066c0
  • brand-deep #003c80
  • brand-soft #dceeff
  • brand-wash rgba(10, 133, 234, 0.08)
  • on-brand #ffffff
  • accent #000000
  • accent-soft rgba(10, 133, 234, 0.08)
  • link #0a85ea
  • link-hover #0066c0
  • selected-bg #eaf3ff
  • disabled #c4cad3
  • border — · 1.3 rgba(0, 0, 0, 0.10)
  • border-strong — · 1.6 rgba(0, 0, 0, 0.20)
  • border-soft rgba(0, 0, 0, 0.06)
  • border-blue rgba(10, 133, 234, 0.30)
  • success-bg #dcf3e3
  • success-text #1f5d3f
  • warning-bg #fff0c5
  • warning-text #7a5e1f
  • danger-bg #fde0e0
  • danger-text #8a2828
  • info-bg #dceeff
  • info-text #003c80
Typography
Ship faster than ever.
display-hero "Plaid Sans" 80px w600 -0.025em
Ship faster than ever.
display "Plaid Sans" 64px w600 -0.02em
Ship faster than ever.
h1 "Plaid Sans" 56px w600 -0.02em
Built for teams that ship.
h2 "Plaid Sans" 44px w600 -0.015em
A complete kit
h3 "Plaid Sans" 32px w600 -0.01em
The quick brown fox jumps over the lazy dog.
quote-pull "Plaid Sans" 28px w500
The quick brown fox jumps over the lazy dog.
h4 "Plaid Sans" 24px w600
The quick brown fox jumps over the lazy dog.
body-large "Plaid Sans" 20px w400
The quick brown fox jumps over the lazy dog.
h5 "Plaid Sans" 18px w600
The quick brown fox jumps over the lazy dog.
body "Plaid Sans" 16px w400
The quick brown fox jumps over the lazy dog.
body-small "Plaid Sans" 14px w400
npx design-md add linear
code "JetBrains Mono" 14px w400
OUR DESIGN SYSTEM
caption "Plaid Sans" 13px w400
OUR DESIGN SYSTEM
caption-tabular "JetBrains Mono" 13px w500
The quick brown fox jumps over the lazy dog.
eyebrow "JetBrains Mono" 12px w500 0.04em
OUR DESIGN SYSTEM
label "JetBrains Mono" 12px w500 0.04em
npx design-md add linear
code-micro "JetBrains Mono" 12px w400
Spacing
  • step-0 4px
  • step-1 8px
  • step-2 12px
  • step-3 16px
  • step-4 20px
  • step-5 24px
  • step-6 32px
  • step-7 40px
  • step-8 48px
  • step-9 64px
  • step-10 80px
  • step-11 96px
  • step-12 128px
  • step-13 160px
Radius
  • micro 2px
  • xs 4px
  • sm 6px
  • md 8px
  • button 8px
  • lg 12px
  • card 12px
  • xl 16px
  • pill 9999px
Components
Text link →
Card preview A complete kit — everything your product needs. Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
New Stable v1.0
Lineage & influences

Plaid's marketing site descends directly from the Stripe-era fintech trust palette: white canvas, near-pure black type, pale-blue panels, single confident action blue. The rendition is quieter and more institutional than today's Stripe — Plaid leans on classical typography (a Plaid-Sans variant of Inter at 500-600, no serif) and 1px / 10% black hairlines rather than gradients. The single moment of personality in an otherwise restrained system is the Benjamin Franklin mascot — an animated, illustrated figure who narrates feature sections from inside a warm cream band `#f3efe6`. That break from cool blue-greys to warm cream is Plaid's signature trick, and it positions Plaid as more consumer-friendly than the Visa/Mastercard infrastructure plays it competes against. The 12px card radius and 8px button radius sit at the modern 2026 SaaS consensus, neither archaic (Mercury's 6px) nor consumer-soft (Wise's full pill).

  • Pale-blue trust palette, single-accent CTA discipline, classical sans typography
  • Black CTA on white canvas with mono micro-labels
  • Mascot-as-narrative-device — Plaid's Franklin echoes that warm-illustration tradition inside a fintech context
  • Cousin in the modern-fintech-restraint lineage; tighter radii (6px) for a more archaic feel
  • Institutional discipline; hairline-only depth strategy
  • Inter / Rasmus Andersson
    DNA reference for Plaid Sans neo-grotesque proportions
Export 4 formats · paste-ready
Tailwind

theme.extend block for tailwind.config.js

tailwind.config.js
CSS variables

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

design.css
DTCG JSON

W3C Design Tokens Community Group format

design.tokens.json
Figma Variables

Importable into Figma → Variables → Import

figma-variables.json
The file
---
name: Plaid
tagline: Pale blue trust on white, classical Stripe-adjacent type, and a Benjamin-Franklin-as-mascot moment of personality.
author: webdesignhot
source_url: https://plaid.com
spec: design.md/v1.5
quality: curated
featured: true
categories: [fintech, dev-tools]
tags: [light, sans, structured, cool, soft, spacious]
preview_swatch: ['#ffffff', '#0a85ea', '#000000']
related: [stripe, vercel, mintlify]
description: 'Plaid''s site uses a pale-blue trust palette — white canvas, near-black ink, a single confident `#0a85ea` action blue, and Inter (or a custom plaid-sans) for both display and body. The aesthetic descends from Stripe''s 2017-era restraint, but Plaid breaks the discipline with one move: an animated Benjamin-Franklin mascot that sits inside an otherwise institutional layout, signalling consumer warmth on a developer-finance product. The system reads as a quieter, more institutional cousin of modern Stripe — 1px / 10% black hairlines, no gradients, no glow, near-pure-black H1 at 64px, mono micro-labels at 12px / 0.04em tracking, and the cream Franklin band as the brand''s singular emotional zone.'

colors:
  # Primary
  bg: '#ffffff'                          # white canvas — trust default
  bg-soft: '#f7f9fb'                     # palest blue-grey panel
  bg-blue: '#eaf3ff'                     # signature pale-blue trust band
  bg-cream: '#f3efe6'                    # warm-cream "Franklin storytelling" band
  bg-ink: '#000000'                      # rare black band for emphasis
  surface: '#f3f5f8'                     # cool-grey card base
  surface-soft: '#fafbfc'                # softer card lift on white
  surface-cream: '#faf6ed'                # quieter cream tint inside Franklin sections
  text: '#000000'                        # near-pure black on white
  text-strong: '#000000'                 # absolute black for hero
  text-medium: '#1a1f29'                 # rare deeper-cool ink
  text-muted: '#4a5568'                  # secondary copy
  text-soft: '#7a8390'                   # captions
  text-faint: '#a0a8b3'                  # disabled, footer microcopy
  # Brand
  brand: '#0a85ea'                       # Plaid action blue — links and accent only
  brand-strong: '#0066c0'                # pressed / hover blue
  brand-deep: '#003c80'                  # rare deep blue for emphasis
  brand-soft: '#dceeff'                  # info wash
  brand-wash: 'rgba(10, 133, 234, 0.08)' # hover-tinted background
  on-brand: '#ffffff'
  # Secondary brand: black (CTA fill)
  accent: '#000000'                      # secondary brand colour is black — CTA fill
  accent-soft: 'rgba(10, 133, 234, 0.08)' # 8% blue tint for chips
  # Interactive
  link: '#0a85ea'                        # action blue links
  link-hover: '#0066c0'                  # pressed
  selected-bg: '#eaf3ff'
  disabled: '#c4cad3'
  # Borders
  border: 'rgba(0, 0, 0, 0.10)'          # 10% black hairline — defining border
  border-strong: 'rgba(0, 0, 0, 0.20)'   # emphasized rule
  border-soft: 'rgba(0, 0, 0, 0.06)'     # quietest separation
  border-blue: 'rgba(10, 133, 234, 0.30)' # brand-tinted divider
  # Semantic
  success-bg: '#dcf3e3'
  success-text: '#1f5d3f'
  warning-bg: '#fff0c5'
  warning-text: '#7a5e1f'
  danger-bg: '#fde0e0'
  danger-text: '#8a2828'
  info-bg: '#dceeff'                     # brand-soft doubles as info
  info-text: '#003c80'

typography:
  display:
    family: '"Plaid Sans", "Inter Display", Inter, "Helvetica Neue", Arial, sans-serif'
    weights: [500, 600, 700]
    opentype-features: ['ss01', 'liga', 'kern']
  body:
    family: '"Plaid Sans", Inter, -apple-system, "Helvetica Neue", Arial, sans-serif'
    weights: [400, 500, 600]
    opentype-features: ['liga', 'kern']
  mono:
    family: '"JetBrains Mono", Menlo, Consolas, "SF Mono", monospace'
    weights: [400, 500]
    opentype-features: ['tnum', 'zero']
  scale:
    display-hero:    { size: 80, weight: 600, lineHeight: 1.05, tracking: '-0.025em', family: display, opentype: 'ss01' }
    display:         { size: 64, weight: 600, lineHeight: 1.05, tracking: '-0.02em', family: display }
    h1:              { size: 56, weight: 600, lineHeight: 1.08, tracking: '-0.02em', family: display }
    h2:              { size: 44, weight: 600, lineHeight: 1.10, tracking: '-0.015em', family: display }
    h3:              { size: 32, weight: 600, lineHeight: 1.20, tracking: '-0.01em', family: display }
    h4:              { size: 24, weight: 600, lineHeight: 1.25, family: display }
    h5:              { size: 18, weight: 600, lineHeight: 1.40, family: display }
    eyebrow:         { size: 12, weight: 500, lineHeight: 1.40, tracking: '0.04em', family: mono, transform: uppercase }
    body-large:      { size: 20, weight: 400, lineHeight: 1.50, family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.50, family: body }
    body-small:      { size: 14, weight: 400, lineHeight: 1.50, family: body }
    caption:         { size: 13, weight: 400, lineHeight: 1.40, family: body }
    caption-tabular: { size: 13, weight: 500, lineHeight: 1.40, family: mono, opentype: 'tnum' }
    label:           { size: 12, weight: 500, lineHeight: 1.30, family: mono, tracking: '0.04em', transform: uppercase }
    code:            { size: 14, weight: 400, lineHeight: 1.55, family: mono, opentype: 'tnum zero' }
    code-micro:      { size: 12, weight: 400, lineHeight: 1.40, family: mono }
    quote-pull:      { size: 28, weight: 500, lineHeight: 1.30, family: display }

radius:
  micro: 2
  xs: 4
  sm: 6
  md: 8
  lg: 12
  xl: 16
  card: 12
  button: 8
  pill: 9999

spacing:
  base: 8
  scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128, 160]

layout:
  page-width: 1200
  prose-width: 720
  site-gutter: 'clamp(24px, 4vw, 56px)'
  header-height: 72
  grid-columns: 12
  section-rhythm: '96-128px'

components:
  button-primary:
    background: '#000000'
    text: '#ffffff'
    padding: '12px 20px'
    radius: 8
    border: '1px solid #000000'
    font: 'Plaid Sans 500 / 15px'
    hover-bg: '#1a1f29'
    active-bg: '#000000'
    use: 'Primary CTA — black-on-white, the institutional fintech move. *Get started, Talk to sales, Try Plaid.*'
  button-secondary:
    background: '#ffffff'
    text: '#000000'
    padding: '12px 20px'
    radius: 8
    border: '1px solid rgba(0, 0, 0, 0.10)'
    font: 'Plaid Sans 500 / 15px'
    hover-bg: '#f7f9fb'
    use: 'Outlined twin — same shape, hairline border. *Read more, Watch demo.*'
  button-tertiary:
    background: 'transparent'
    text: '#000000'
    padding: '12px 16px'
    radius: 8
    border: '1px solid rgba(0, 0, 0, 0.06)'
    font: 'Plaid Sans 500 / 15px'
    hover-bg: 'rgba(0, 0, 0, 0.03)'
    use: 'Quietest action — repeated CTAs, footer links.'
  button-link:
    background: 'transparent'
    text: '#0a85ea'
    padding: '0'
    radius: 0
    font: 'Plaid Sans 500 / 16px'
    underline: true
    hover-text: '#0066c0'
    use: 'Inline action blue — developer documentation references, citation links.'
  card:
    background: '#ffffff'
    border: '1px solid rgba(0, 0, 0, 0.10)'
    radius: 12
    padding: '32px'
    use: 'Feature tile, capability card, pricing block — flat white on coloured panel.'
  card-blue:
    background: '#eaf3ff'
    border: 'none'
    radius: 12
    padding: '32px'
    use: 'Pale-blue trust panel — full-bleed signature section.'
  card-cream:
    background: '#f3efe6'
    border: 'none'
    radius: 12
    padding: '40px 32px'
    use: 'Cream Franklin band — illustration-heavy, the brand''s emotional zone.'
  input:
    background: '#ffffff'
    border: '1px solid rgba(0, 0, 0, 0.20)'
    radius: 8
    padding: '12px 16px'
    font: 'Plaid Sans 400 / 16px'
    placeholder-color: '#7a8390'
    focus-ring: '0 0 0 2px rgba(10, 133, 234, 0.40)'
    focus-border: '#0a85ea'
    use: 'Form fields, search, contact-sales inputs.'
  badge-eyebrow:
    background: 'transparent'
    text: '#4a5568'
    padding: '0'
    radius: 0
    font: 'JetBrains Mono 500 / 12px / uppercase / 0.04em tracking'
    use: 'Section eyebrow — mono micro-label, no chrome.'
  badge-blue:
    background: 'rgba(10, 133, 234, 0.08)'
    text: '#003c80'
    padding: '4px 10px'
    radius: 4
    font: 'Plaid Sans 500 / 12px'
    use: 'Subtle blue-tinted status pill on white card.'
  nav-link:
    background: 'transparent'
    text: '#000000'
    padding: '8px 12px'
    font: 'Plaid Sans 500 / 15px'
    hover-text: '#0a85ea'
    use: 'Header nav — black with action-blue hover.'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-institutional: 'cubic-bezier(0.32, 0.72, 0, 1)'
  duration-fast: 100
  duration-standard: 180
  duration-slow: 280
  duration-page: 400
  reduced-motion: 'respects prefers-reduced-motion: reduce — Franklin animations halt at first frame, transitions become opacity-only, durations halved'

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

shadows:
  none: 'none'
  ambient: 'rgba(0, 0, 30, 0.04) 0 1px 3px'
  standard: 'rgba(0, 0, 30, 0.06) 0 4px 12px'
  elevated: 'rgba(0, 0, 30, 0.08) 0 12px 32px -8px, rgba(0, 0, 30, 0.04) 0 4px 8px'
  cool: 'rgba(10, 30, 60, 0.10) 0 16px 40px -16px'
  ring: '0 0 0 2px rgba(10, 133, 234, 0.40)'

accessibility:
  contrast-text-on-bg: 21.0               # #000 on #fff — AAA at all sizes
  contrast-text-on-brand: 4.5             # #ffffff on #0a85ea — AA at body sizes
  contrast-text-on-cta-bg: 21.0           # #ffffff on #000 — AAA
  contrast-link-on-bg: 4.6                # #0a85ea on #ffffff — AA at body sizes
  contrast-text-muted-on-bg: 8.6          # #4a5568 on #ffffff — AAA at body
  focus-ring: '2px solid rgba(10, 133, 234, 0.40) with 2px offset'
  reduced-motion-honored: true
  keyboard-nav: 'visible focus on every interactive surface; tab order matches visual flow; Franklin mascot is decorative and aria-hidden'
  prose-line-length: 'capped at 720px (~70 characters) for institutional readability'
  franklin-mascot: 'decorative animation marked aria-hidden; pauses on prefers-reduced-motion; never carries content meaning'

lineage:
  summary: |
    Plaid's marketing site descends directly from the Stripe-era
    fintech trust palette: white canvas, near-pure black type,
    pale-blue panels, single confident action blue. The rendition is
    quieter and more institutional than today's Stripe — Plaid leans
    on classical typography (a Plaid-Sans variant of Inter at 500-600,
    no serif) and 1px / 10% black hairlines rather than gradients.
    The single moment of personality in an otherwise restrained
    system is the Benjamin Franklin mascot — an animated, illustrated
    figure who narrates feature sections from inside a warm cream
    band `#f3efe6`. That break from cool blue-greys to warm cream is
    Plaid's signature trick, and it positions Plaid as more
    consumer-friendly than the Visa/Mastercard infrastructure plays
    it competes against. The 12px card radius and 8px button radius
    sit at the modern 2026 SaaS consensus, neither archaic (Mercury's
    6px) nor consumer-soft (Wise's full pill).
  influences:
    - name: Stripe (2017-2019 era)
      role: Pale-blue trust palette, single-accent CTA discipline, classical sans typography
      url: https://stripe.com
    - name: Vercel
      role: Black CTA on white canvas with mono micro-labels
      url: https://vercel.com
    - name: Mailchimp / Slack illustrations
      role: Mascot-as-narrative-device — Plaid's Franklin echoes that warm-illustration tradition inside a fintech context
      url: https://mailchimp.com
    - name: Mercury
      role: Cousin in the modern-fintech-restraint lineage; tighter radii (6px) for a more archaic feel
      url: https://mercury.com
    - name: Linear
      role: Institutional discipline; hairline-only depth strategy
      url: https://linear.app
    - name: Inter / Rasmus Andersson
      role: DNA reference for Plaid Sans neo-grotesque proportions

dark-mode: null                           # marketing surface is light-only; no dark variant offered
---

## 1. Visual Theme & Atmosphere

Plaid's homepage is the trust-fintech archetype, refined. White canvas, black H1, pale-blue trust panels, a single confident `#0a85ea` link blue, and 10%-black hairlines doing the structural work. Where contemporary Stripe reaches for chromatic gradient, animated grids, and 3D meshes, Plaid stays with the older Stripe-era restraint — near-pure black on white, single-accent blue, generous whitespace, hairline rules. The page reads as *infrastructure* rather than *campaign*: the visual register is closer to a primary-bank annual report than to a Y Combinator pitch deck, and the discipline is the point.

The single moment of personality in this otherwise institutional layout is the **Benjamin Franklin mascot** — an illustrated, gently-animated figure who narrates feature sections from inside warm-cream `#f3efe6` bands. That mascot is the brand's emotional signature: cool-blue-and-white precision broken once per page by a hand-drawn historical figure with subtle motion. The break from cool greys into warm cream — and from typographic restraint into character animation — is what differentiates Plaid from the otherwise-similar Stripe-trust-palette competitors. It positions Plaid as more *consumer-friendly* than the Visa/Mastercard infrastructure plays it competes against without abandoning the developer-credibility surface.

Typographically, Plaid runs **one family across the entire site** — a custom Plaid Sans (an Inter-class neo-grotesque) at 500–600 weight for both display and body. There is no serif anywhere on the marketing surface. H1 holds at 56–64px with negative tracking; body is the same family at 16px on a 24px line; mono micro-labels appear at 12px with 0.04em tracking as eyebrow text. The typographic discipline reinforces the institutional tone — no mixed faces, no decorative weights, no ornamental italics.

The CTA convention is decisive: **the action blue `#0a85ea` is reserved for links and accent, never as a primary button fill**. Primary buttons are *black-on-white* (`#000000` bg, `#ffffff` text, 8px radius). That distinction — blue for inline action, black for page-level commitment — is one of Plaid's signature design rules and the easiest way to break the brand if you ignore it.

Atmospheric vocabulary that captures the feeling: *primary-bank, hairline-only, pale-blue-trust, near-pure-black-on-white, mono-micro-eyebrow, Franklin-cream-band, Stripe-2017, institutional-quiet, no-gradient-ever, structural-not-decorative.* The brand reads as if it were laid out by a CFO with taste.

**Key Characteristics**
- White `#ffffff` canvas — the trust default, never substituted
- **Action blue `#0a85ea` for links only** — never a primary button fill
- Primary CTA is **black-on-white** (`#000000` / `#ffffff` / 8px radius)
- Pale-blue `#eaf3ff` trust panels alternating with white sections
- **Cream Franklin band `#f3efe6`** — the brand's singular emotional zone
- 10%-black hairlines (`rgba(0, 0, 0, 0.10)`) — every border, every divider
- No shadows, no gradients, no glow — flat-and-hairline discipline
- Single typeface across site (Plaid Sans / Inter) — no serif
- Mono micro-labels at 12px / 0.04em tracking as section eyebrows
- 12px card radius, 8px button radius — modern but not consumer-soft
- Animated Benjamin Franklin mascot — illustrated, decorative, signature

## 2. Color Palette & Roles

### Primary

- **bg** `#ffffff` — white canvas; the trust default, never substituted on body surfaces.
- **bg-soft** `#f7f9fb` — palest blue-grey panel, a quieter alternation between white sections.
- **text** `#000000` — near-pure black, no opacity softening. Plaid keeps body type at full strength.
- **cta-bg** `#000000` — primary CTA fill; the brand's deliberate institutional move.
- **on-cta** `#ffffff` — pure white label on black; maximum value contrast.

### Brand & Accent

- **brand** `#0a85ea` — Plaid action blue. **Used for links and inline action only — never as a primary button fill.**
- **brand-strong** `#0066c0` — pressed / hover state.
- **brand-deep** `#003c80` — rare deep blue for emphasis or info text.
- **brand-soft** `#dceeff` — info wash, soft pill backgrounds.
- **brand-wash** `rgba(10, 133, 234, 0.08)` — hover tint for blue-themed surfaces.
- **accent** `#000000` — secondary brand colour is *black*, not a second hue. The CTA itself uses black, not blue.

### Sectional Bands

- **bg-blue** `#eaf3ff` — signature pale-blue trust band; appears 1–2× per page.
- **bg-cream** `#f3efe6` — warm-cream Franklin storytelling band; the brand's emotional zone.
- **bg-ink** `#000000` — rare full-black band reserved for hero statements (e.g. trust statistics, security claims).

### Interactive

- **link** `#0a85ea` — action blue, with underline by default in body.
- **link-hover** `#0066c0` — deeper pressed blue.
- **selected-bg** `#eaf3ff` — pale-blue selection wash.
- **disabled** `#c4cad3` — cool-grey muted.

### Neutral Scale

- **text-strong** `#000000` — near-pure black, the headline ink.
- **text-medium** `#1a1f29` — deeper-cool variant for high-emphasis copy.
- **text-muted** `#4a5568` — secondary copy, metadata.
- **text-soft** `#7a8390` — captions, helper text.
- **text-faint** `#a0a8b3` — disabled labels, footer microcopy.

### Surface & Borders

- **surface-0 (page)** — `#ffffff` white canvas.
- **surface-1 (panel)** — `#f7f9fb` palest blue-grey.
- **surface-2 (card)** — `#ffffff` white card on coloured panel; or `#f3f5f8` cool-grey card on white.
- **surface-cream** — `#faf6ed` quieter cream tint inside Franklin sections.
- **border** `rgba(0, 0, 0, 0.10)` — 10%-black hairline, the brand's defining border.
- **border-strong** `rgba(0, 0, 0, 0.20)` — emphasized rule, hover deepening.
- **border-soft** `rgba(0, 0, 0, 0.06)` — quietest separation.
- **border-blue** `rgba(10, 133, 234, 0.30)` — rare brand-tinted divider on blue surfaces.

### Shadow Colors

Plaid's shadows are **cool-tinted and sparse**. The brand prefers hairline borders to drop shadows on every content surface — cards lift via 1px borders rather than elevation. When shadows do appear (modals, popover layers, the floating Plaid Link consent dialog), they're tinted with low-opacity cool blue (`rgba(0, 0, 30, 0.04)` to `0.08`), never neutral grey, and never warm. The cool tint reinforces the trust-palette temperature.

### Semantic

- **success** — bg `#dcf3e3`, text `#1f5d3f`, border `rgba(74, 122, 91, 0.30)`.
- **warning** — bg `#fff0c5`, text `#7a5e1f`, border `rgba(180, 145, 60, 0.30)`.
- **danger** — bg `#fde0e0`, text `#8a2828`, border `rgba(180, 50, 50, 0.30)`.
- **info** — bg `#dceeff` (brand-soft), text `#003c80`, border `rgba(10, 133, 234, 0.30)`.

The semantic palette is calm and institutional — no fluorescent warning yellow, no neon green-success. Every semantic colour stays within the cool-and-warm-cream temperature range of the brand.

## 3. Typography Rules

### Font Family

- **Display & UI**: `"Plaid Sans", "Inter Display", Inter, "Helvetica Neue", Arial, sans-serif` — custom Plaid Sans is an Inter-class neo-grotesque cut for Plaid's house. Falls back gracefully to Inter or Helvetica Neue on slow connections.
- **Body**: same family, weight 400/500/600.
- **Mono**: `"JetBrains Mono", Menlo, Consolas, "SF Mono", monospace` — used for eyebrow micro-labels (12px / 0.04em tracking / uppercase) and code blocks in developer documentation.
- **No serif anywhere on the marketing surface.**
- **OpenType features**: `liga` and `kern` always on; `tnum` and `zero` (slashed zero) in mono for tabular alignment; `ss01` for stylistic alternate at display sizes.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | OT Features | Notes |
|---|---|---|---|---|---|---|---|
| Display Hero | Plaid Sans | 80px | 600 | 1.05 | -0.025em | ss01 liga | Homepage hero ceiling — rare |
| Display | Plaid Sans | 64px | 600 | 1.05 | -0.02em | ss01 | Section intro at scale |
| H1 | Plaid Sans | 56px | 600 | 1.08 | -0.02em | liga | Page title — restrained vs Brex 72 |
| H2 | Plaid Sans | 44px | 600 | 1.10 | -0.015em | liga | Major section |
| H3 | Plaid Sans | 32px | 600 | 1.20 | -0.01em | — | Sub-section |
| H4 | Plaid Sans | 24px | 600 | 1.25 | normal | — | Card heading |
| H5 | Plaid Sans | 18px | 600 | 1.40 | normal | — | Inline emphasis |
| Eyebrow | JetBrains Mono | 12px | 500 | 1.40 | 0.04em | uppercase | Mono micro-label — signature |
| Body Large | Plaid Sans | 20px | 400 | 1.50 | normal | — | Lede paragraph |
| Body | Plaid Sans | 16px | 400 | 1.50 | normal | — | Default body |
| Body Small | Plaid Sans | 14px | 400 | 1.50 | normal | — | Compact copy |
| Caption | Plaid Sans | 13px | 400 | 1.40 | normal | — | Image captions |
| Caption Tabular | JetBrains Mono | 13px | 500 | 1.40 | normal | tnum | Stats, transaction lists |
| Label | JetBrains Mono | 12px | 500 | 1.30 | 0.04em | uppercase | UI labels, section dividers |
| Pull Quote | Plaid Sans | 28px | 500 | 1.30 | normal | — | Testimonial pull-quote |
| Code | JetBrains Mono | 14px | 400 | 1.55 | normal | tnum zero | Inline + block |
| Code Micro | JetBrains Mono | 12px | 400 | 1.40 | normal | — | API endpoint refs |

### Principles

- **One typeface, full system.** Plaid Sans + JetBrains Mono is the entire family. No serif, no decorative face. The mono is reserved for eyebrows, labels, and code — every other context uses Plaid Sans.
- **Weight 600 is the headline ceiling.** Plaid never reaches for 700 or 800. The institutional register requires restraint; weight 600 reads as confident, not shouting.
- **H1 caps at 56–64px.** Brex hits 72; Ramp hits 80; Plaid plays it quieter at 56, hitting 64 only on rare hero statements. The size restraint is a deliberate institutional gesture.
- **Negative tracking scales with size.** -0.025em at 80px, -0.02em at 56–64px, -0.015em at 44px, -0.01em at 32px, normal below. Standard broadsheet compression.
- **Mono eyebrow as section signature.** The 12px / 0.04em / uppercase JetBrains Mono micro-label is the brand's most distinctive typographic move — every section opens with one.
- **Body width capped at 720px** even on a 1200px page — institutional reading column.
- **Tabular figures everywhere numbers matter.** `tnum` discipline in mono so stats, transaction lists, and code line numbers align cleanly.
- **No italic in display.** Italics are reserved for body emphasis only. Display type is upright, the institutional voice is calm.

## 4. Component Stylings

### Buttons

**Primary (Black-on-White)**
- Background: `#000000` near-pure black.
- Text: `#ffffff` pure white, Plaid Sans 500 / 15px.
- Padding: `12px 20px`. Radius: `8px`. Border: `1px solid #000000`.
- Hover: bg → `#1a1f29`; transition `180ms ease-standard`.
- Active: bg → `#000000` (depressed micro-shift).
- Use: Primary CTA — *Get started, Talk to sales, Try Plaid.* The institutional fintech move.

**Secondary (Outlined)**
- Background: `#ffffff`. Text: `#000000`. Border: `1px solid rgba(0, 0, 0, 0.10)`.
- Same padding, radius, font as primary.
- Hover: bg → `#f7f9fb`.
- Use: Twin to primary — *Read more, Watch demo, Read the docs.*

**Tertiary (Quietest)**
- Background: transparent. Text: `#000000`. Border: `1px solid rgba(0, 0, 0, 0.06)`.
- Hover: bg → `rgba(0, 0, 0, 0.03)`.
- Use: Footer links, repeated in-section CTAs.

**Link (Inline Action Blue)**
- Background: transparent. Text: `#0a85ea` Plaid action blue, underlined.
- Padding: 0. Font: Plaid Sans 500 / 16px.
- Hover: text → `#0066c0`.
- Use: Inline CTAs — *"learn more →", "see the docs"*. The action blue's primary home.

### Cards

**Feature Card (White on Panel)**
- Background: `#ffffff`. Border: `1px solid rgba(0, 0, 0, 0.10)`. Radius: `12px`. Padding: `32px`.
- Shadow: none — 1px hairline border alone.
- Hover: border → `rgba(0, 0, 0, 0.20)`; transition `180ms`.
- Use: Capability tile, pricing block, feature explanation.

**Blue Trust Panel (Sectional)**
- Background: `#eaf3ff`. Border: none. Radius: `12px` (or full-bleed).
- Padding: `48px` to `96px` depending on context.
- Use: Trust statement, security stat, "Plaid moves \$X trillion / year" type sectional.

**Cream Franklin Card (Sectional)**
- Background: `#f3efe6`. Border: none. Radius: `12px` (or full-bleed).
- Padding: `40px 32px`.
- Use: Illustrated Franklin scenes — the brand's emotional zone. Always paired with character animation.

### Badges, Tags, Pills

**Mono Eyebrow Label** — bg transparent, text `#4a5568`, padding 0, radius 0, font `JetBrains Mono 500 / 12px / 0.04em / uppercase`. The brand's most distinctive typographic chrome.

**Blue Status Pill** — bg `rgba(10, 133, 234, 0.08)`, text `#003c80`, radius `4px`, padding `4px 10px`. Subtle blue-tinted status on white card.

**Earth-Tone Status (Semantic)** — bg from semantic palette (success / warning / danger / info), radius `4px`, padding `4px 10px`. Calm, institutional, no fluorescents.

### Inputs / Forms

- Background: `#ffffff`. Border: `1px solid rgba(0, 0, 0, 0.20)`. Radius: `8px`. Padding: `12px 16px`.
- Font: Plaid Sans 400 / 16px. Placeholder: `#7a8390`.
- Focus: `0 0 0 2px rgba(10, 133, 234, 0.40)` ring, border → `#0a85ea`. Transition 100ms.
- Error: border → `#8a2828`, ring → `rgba(180, 50, 50, 0.30)`.
- Helper: caption 13px text-soft below.

### Navigation

- Header height `72px`. Background `#ffffff` (transparent on hero scrolling).
- Logo: Plaid wordmark left-aligned, black.
- Nav links: Plaid Sans 500 / 15px, colour `#000000`, padding `8px 12px`. Hover → `#0a85ea` action blue; underline appears under active link.
- Right-side CTA pair: tertiary "Sign in" + primary black "Get started".
- Mobile: full-screen sheet, links stack at 18px / 500 with 24px gap.

### Optional Components

**Pull Quote** — Plaid Sans 28px / 500, text-medium, with a 3px action-blue left rule. Reserved for customer-testimonial sections.

**Code Block (Developer Docs)** — JetBrains Mono 14px, bg `#f7f9fb`, radius `8px`, padding `16px 20px`, border `rgba(0, 0, 0, 0.10)`. Inline code: same font, bg `rgba(0, 0, 0, 0.04)`, padding `2px 6px`, radius `4px`.

**Tooltip** — bg `#000000`, text `#ffffff`, radius `6px`, padding `8px 12px`, font `Plaid Sans 500 / 13px`.

**Modal** — bg `#ffffff`, radius `16px`, shadow `rgba(0, 0, 30, 0.08) 0 12px 32px -8px`, max-width `560px`. Cool overlay backdrop at 50% opacity.

**Plaid Link Modal (Product UI)** — branded consent dialog with bank-logo grid, action-blue primary button, hairline-bordered list rows. The product UI's signature surface.

**Toast** — bg `#000000`, text `#ffffff`, radius `8px`, padding `12px 20px`. Black-on-white inverted to match the CTA family.

## 5. Layout Principles

### Spacing System

- **Base unit**: 8px — the standard institutional rhythm.
- **Scale**: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128, 160 — modular, generous at the upper end.
- **Density observation**: Plaid runs *medium-density* — denser than Anthropic's editorial layout but lighter than tech-heavy SaaS. Section padding sits at 96–128px vertical; intra-section spacing uses 16–32px.

### Grid & Container

- **Page max width**: `1200px` — moderate, primary-bank proportions.
- **Site gutter**: `clamp(24px, 4vw, 56px)` — comfortable on desktop, accommodating on mobile.
- **Grid**: 12 columns with 24px gutters. Hero blocks span full width; capability rails span 8 columns; supporting sidebars span 4.
- **Hero treatment**: full-bleed white, 56–64px headline left-aligned, body confined to a 720px column anchored left of centre.
- **Capability rail**: 3-up cards on desktop, 2-up on tablet, 1-up on mobile.

### Whitespace Philosophy

The whitespace is *institutional clearance*. Plaid leaves more empty space than necessary, and that calculated emptiness is the brand's claim to gravity. Section gutters run **96–128px** between major blocks; minor blocks sit on 48–64px gaps; intra-section spacing uses 16–32px. The page never crowds; the page never extends; the page reads as an annual report's interior layout.

### Section Cadence

- Hero (white) → Mono-eyebrow + H1 + lede + dual CTA → Blue trust panel (`#eaf3ff`) with stat — Capability rail (3-up white cards on `#f7f9fb`) → Cream Franklin band (`#f3efe6` with illustrated character animation) → Pricing or trust-detail (white) → Footer (`#ffffff` with `rgba(0, 0, 0, 0.10)` top border).
- The cream Franklin band appears once or twice per page — never more, or its emotional weight dilutes.
- Pages alternate cool-blue → warm-cream → white in a deliberate sectional rhythm.
- Layouts are **left-aligned** by default; centred layouts are reserved for testimonial pull-quotes and rare hero statements.

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|---|---|---|
| Micro | 2px | Decorative dividers, slim chip corners |
| XS | 4px | Status pills, inline tags, semantic badges |
| Small (sm) | 6px | Tooltip corners, code-inline pills |
| Comfortable (md) | 8px | **Buttons, inputs, dropdowns** — the dominant interactive radius |
| Relaxed (lg) | 12px | **Cards** — feature tiles, pricing blocks, capability cards |
| Featured (xl) | 16px | Modals, large editorial callouts |
| Pill | 9999px | Reserved for status chips and tags only |

The signature radii are **8px** on buttons / inputs and **12px** on cards. Plaid sits at the modern 2026 SaaS consensus — neither archaic (Mercury's 6px) nor consumer-soft (Wise's full-pill buttons). The discipline is deliberate: **softer radii would shift Plaid toward consumer brand; harder radii toward legacy finance**. The 8/12 pairing is the mid-point that signals *modern institutional trust*.

## 7. Depth & Elevation

| Level | Treatment | Use |
|---|---|---|
| 0 | Flat — no shadow | Default page surface, hero, body sections |
| 1 | 1px hairline border (`rgba(0, 0, 0, 0.10)`) | Cards, buttons, inputs — the dominant elevation |
| 2 | `rgba(0, 0, 30, 0.04) 0 1px 3px` | Sticky nav (rare), dropdown menus |
| 3 | `rgba(0, 0, 30, 0.06) 0 4px 12px` | Hover-lifted cards in product UI; rare on marketing |
| 4 | `rgba(0, 0, 30, 0.08) 0 12px 32px -8px` | Plaid Link modal, popover layers |
| 5 | `rgba(0, 0, 30, 0.08) 0 24px 64px -16px` | Marketing modals, dialogs |

### Shadow Philosophy

Plaid's depth is **hairline-and-flat**, *not elevation*. The defining elevation move is **1px / 10% black border** rather than a drop shadow. Cards on white are bordered, not shadowed; cards on coloured panels (pale-blue, cream) are flat-and-borderless. Drop shadows appear only on overlay layers (modals, popovers, the Plaid Link consent dialog) and are tinted cool-blue (`rgba(0, 0, 30, ...)`) to reinforce the trust temperature. The brand never uses warm or neutral shadows — that would crack the cool-institutional posture. There is no glassmorphism, no glow, no gradient. The discipline is the brand asset.

## 8. Interaction & Motion

### Easing Curves

- `ease-standard`: `cubic-bezier(0.4, 0, 0.2, 1)` — Material-style; default for hover, focus, colour transitions.
- `ease-emphasized`: `cubic-bezier(0.2, 0, 0, 1)` — punchier exit; modal enter, hero reveal.
- `ease-institutional`: `cubic-bezier(0.32, 0.72, 0, 1)` — slow-out, fast-settle; used on Franklin animation cycles.

### Duration Buckets

- **Fast (100ms)** — colour transitions, focus rings, link hovers.
- **Standard (180ms)** — button hover, card hover, dropdown reveal.
- **Slow (280ms)** — modal enter/exit, page-section fade-in.
- **Page (400ms)** — route transitions, hero reveal sequences.

Plaid's motion is **subtler and faster** than tech-startup defaults — the institutional posture demands restraint. No 800ms grand reveals; no spring-bounce; no parallax.

### Per-Component Micro-States

- **Button hover (black primary)**: bg `#000000` → `#1a1f29` over 180ms. No lift, no scale.
- **Button hover (outlined secondary)**: bg `#ffffff` → `#f7f9fb`; border stays at 0.10.
- **Card hover**: border deepens from `rgba(0, 0, 0, 0.10)` to `rgba(0, 0, 0, 0.20)` over 180ms; no shadow change.
- **Link hover (action blue)**: text `#0a85ea` → `#0066c0` over 100ms; underline thickens 1px → 2px.
- **Input focus**: 2px action-blue ring fades in over 100ms; border `rgba(0, 0, 0, 0.20)` → `#0a85ea`.
- **Nav link hover**: colour shift to `#0a85ea`.
- **Franklin mascot**: gentle 4–6 second loop animation (eyebrow raise, hand wave, head turn). Pauses on `prefers-reduced-motion`.

### Page Transitions

Hero text fades in over 400ms with a 12px translate-up; below-fold sections use `IntersectionObserver` triggered at 70% viewport, 280ms duration, opacity-only. The Franklin scenes never auto-play with attention-grabbing motion — they cycle gently in their cream bands.

### Reduced Motion

`@media (prefers-reduced-motion: reduce)` — all transitions become opacity-only, durations halved. **Franklin mascot animations pause at the first frame** (the figure remains visible but motionless). Translate animations disabled entirely; scroll-linked reveals snap to final state. The brand respects motion preferences as a first-class a11y concern, especially because the mascot animation is the most motion-heavy element on the site.

## 9. Accessibility & A11y

### Contrast Pairs

- **`#000000` text on `#ffffff` bg**: 21.0:1 — AAA at all sizes (maximum contrast).
- **`#4a5568` text-muted on `#ffffff` bg**: 8.6:1 — AAA at body sizes.
- **`#7a8390` text-soft on `#ffffff` bg**: 4.4:1 — AA at large sizes only.
- **`#ffffff` text on `#000000` CTA**: 21.0:1 — AAA.
- **`#0a85ea` link on `#ffffff` bg**: 4.6:1 — AA at body sizes; underline reinforces.
- **`#003c80` text on `#dceeff` info bg**: 9.4:1 — AAA.
- **`#000000` text on `#eaf3ff` blue panel**: 18.6:1 — AAA.
- **`#000000` text on `#f3efe6` cream panel**: 18.4:1 — AAA.

### Focus Indicators

- Default focus ring: `0 0 0 2px rgba(10, 133, 234, 0.40)` with 2px offset on white pages.
- Inputs: ring + border colour shift to `#0a85ea`.
- On dark surfaces (rare): `0 0 0 2px #ffffff`.
- All interactive surfaces have visible focus states — no `outline: none` without a replacement.

### ARIA Patterns

- **Navigation**: `<nav aria-label="Main">` with skip-link to main content.
- **Disclosure**: `<button aria-expanded aria-controls>` for collapsible sections in pricing tables.
- **Dialog**: `role="dialog" aria-modal="true" aria-labelledby` with focus trap and Esc-to-close.
- **Plaid Link consent dialog**: `role="dialog" aria-modal="true"` with bank list as `<ul role="listbox">`.
- **Live regions**: `aria-live="polite"` for form validation messages.
- **Franklin mascot**: `aria-hidden="true"` — decorative animation never carries content meaning.

### Keyboard Navigation

- Tab order matches visual flow: skip-link → nav → hero CTA → main content → footer.
- All buttons, links, inputs reachable via Tab.
- Modals trap focus inside until dismissed.
- `Esc` closes modals and dropdowns.
- Plaid Link consent dialog: Arrow keys navigate the bank list; Enter selects; Esc closes.

### Screen Reader Hints

- Decorative illustrations (Franklin mascot, abstract trust graphics) marked `aria-hidden="true"`.
- Icon-only buttons have `aria-label`.
- Stat callouts include hidden context: "Plaid moves \$2 trillion per year" reads as full sentence rather than just "$2T".
- Mono eyebrow labels (`API Reference`, `Quickstart`) are visible text, not pseudo-content.

### Reduced Motion

Honoured via the global media query. Franklin mascot animations halt at first frame; transitions become opacity-only; durations halved. The brand never requires motion to convey information.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Use |
|---|---|---|
| Mobile | < 640px | Single column, full-bleed sections, hamburger nav |
| Tablet | 640–1024px | 2-column rails, narrower gutters, condensed hero |
| Desktop | 1024–1280px | Full 12-col grid, 720px prose column |
| Wide | 1280–1440px | Site max width hits at 1200px |
| Ultra | > 1440px | Page locks to 1200, gutters expand symmetrically |

### Touch Targets

- Minimum tap target: 44×44px (WCAG AAA).
- Buttons: 44px minimum height on mobile (12px vertical padding × 2 + line-height accommodates).
- Nav link tap area: 44×44px even when visual padding is smaller.
- Plaid Link bank-list rows: 56px minimum on mobile for thumb-friendly selection.

### Collapsing Strategy

- **Header**: full nav at ≥1024px; hamburger sheet below.
- **Hero**: 64px headline → 48px → 36px across desktop / tablet / mobile.
- **Capability grid**: 3-up at desktop, 2-up at tablet, 1-up at mobile.
- **Body width**: 720px → fluid 92vw at mobile.
- **Section spacing**: 128px → 80px → 56px across sizes.
- **Franklin band**: full-bleed cream on all sizes; mascot scales proportionally.

### Image Behavior

- Illustrations (Franklin scenes, capability hero art) use `srcset` with 1x/2x for retina.
- Hero imagery uses `aspect-ratio` to prevent layout shift.
- Lazy-loading on below-fold images; eager on hero.
- SVG illustrations preferred for crisp rendering at any size.

### Container Queries

Used inside capability cards to switch layout when card width crosses 360px (icon-left vs. icon-top).

## 11. Content & Voice

### Tone

**Institutional, precise, dryly confident.** Plaid writes like a primary bank's communications team — full sentences, technical specificity, no hype, no exclamation points, no emoji. Statistics are stated plainly: "Plaid powers 12,000+ apps." Headlines describe outcomes ("Connect financial accounts in seconds"); subheads explain mechanism. The brand sounds like infrastructure rather than software.

### Microcopy Patterns

- **Button verbs**: "Get started," "Talk to sales," "Read the docs," "Try Plaid Link," "Watch demo," "View pricing." Never "Sign up free!" or "Get instant access →".
- **Error messages**: "We couldn't connect to your bank. Try again, or [contact support]." Specific, no shame, no apologetic exclamation.
- **Success confirmations**: "Connected." "Account linked." Brief, declarative, present-tense.
- **Loading states**: "Connecting…" "Verifying account…" "Encrypting…" — process-aware, security-flavoured.
- **Trust statements**: Numerical and specific. "AES-256 encryption", "SOC 2 Type II certified", "Used by 1 in 4 Americans with a bank account."

### Empty States

What they say: explain the empty state and offer the next step. *"No connections yet. Add your first account to begin."* *"Your transaction history is empty."*
What they don't say: "Oops!", "Sorry!", any apologetic exclamation. Empty states are functional notes, not failures.

### CTA Verb Conventions

- Primary on hero: "Get started," "Talk to sales," "Try Plaid Link"
- Secondary: "Read the docs," "Watch demo," "View pricing"
- Footer: "Read our research," "Browse the API," "View status"

The brand never uses "Sign up free!" or "Get instant access today!" — the tone is institutional and unhurried. Plaid never trades in scarcity, never uses time-pressure CTAs, never countdowns. The Franklin mascot occasionally narrates with first-person voice ("Hi, I'm Ben") inside the cream band — that's the only first-person moment on the site, and it's a deliberate emotional break from the otherwise impersonal institutional voice.

## 12. Dark Mode & Theming

**Light-only — no dark variant offered on the marketing surface.** The white canvas, near-black ink, and pale-blue trust palette are the brand's defining institutional posture; a dark mode would require re-keying the entire system — including the Franklin cream band, which doesn't translate to dark — and would collapse the trust register that distinguishes Plaid from consumer-fintech competitors.

The product UI (Plaid Dashboard, the Plaid Link consent dialog) handles its own theming and supports a partial dark variant for developers, but that variant is documented separately. The marketing site at `plaid.com` is intentionally light-only across all viewports and times of day.

If a downstream surface ever needs a dark companion, the rules would be: keep the action blue at full saturation (`#0a85ea` is one of the rare blues that holds at AA contrast on both white *and* deep navy), drop the cream Franklin band entirely (no warm-on-dark equivalent works), and swap white for a deep institutional navy `#0a1530` rather than pure black. But this is not currently shipped.

## 13. Lineage & Influences

Plaid's marketing site descends directly from the **Stripe-era fintech trust palette**: white canvas, near-pure-black type, pale-blue panels, single confident action blue. The rendition is quieter and more institutional than today's Stripe — Plaid leans on classical typography (a Plaid-Sans variant of Inter at 500–600, no serif) and 1px / 10% black hairlines rather than gradients.

The single moment of personality in an otherwise restrained system is the Benjamin Franklin mascot — an animated, illustrated figure who narrates feature sections from inside a warm cream band `#f3efe6`. That break from cool blue-greys to warm cream is Plaid's signature trick, and it positions Plaid as more *consumer-friendly* than the Visa/Mastercard infrastructure plays it competes against. The 12px card radius and 8px button radius sit at the modern 2026 SaaS consensus, neither archaic (Mercury's 6px) nor consumer-soft (Wise's full pill).

What it inherits: **Stripe-2017 trust palette discipline** (pale-blue + white + black + single accent blue), **Inter-class neo-grotesque** typography, **hairline elevation** as the default. What it borrows from contemporaries: Vercel's black CTA on white canvas with mono micro-labels, Mailchimp/Slack's mascot-as-narrative-device tradition, Linear's institutional restraint. What it rejects: gradient meshes, neon accents, hero animations beyond the Franklin scene, AI-tech iconography, the consumer-app rounded-corner softness.

**Named influences:**

- **Stripe (2017–2019 era)** — Pale-blue trust palette, single-accent CTA discipline, classical sans typography. *https://stripe.com*
- **Vercel** — Black CTA on white canvas with mono micro-labels. *https://vercel.com*
- **Mailchimp / Slack illustrations** — Mascot-as-narrative-device — Plaid's Franklin echoes that warm-illustration tradition inside a fintech context. *https://mailchimp.com*
- **Mercury** — Cousin in the modern-fintech-restraint lineage; Mercury runs slightly tighter radii (6px) for a more archaic feel. *https://mercury.com*
- **Linear** — Institutional discipline; hairline-only depth strategy.
- **Inter / Rasmus Andersson** — DNA reference for Plaid Sans neo-grotesque proportions.

## 14. Do's and Don'ts

### Do

- **Do** keep the action CTA black (`#000000` / `#ffffff` / 8px radius), not blue — the `#0a85ea` is reserved for links and accent, never as a primary fill.
- **Do** use the cream Franklin band (`#f3efe6`) as the brand's only warm zone; pale blue handles cool-trust sections.
- **Do** keep type fully sans — Plaid does not use serif anywhere on the marketing site.
- **Do** open every section with a mono eyebrow label (12px / 0.04em / uppercase JetBrains Mono in `#4a5568`).
- **Do** use 1px / 10% black hairlines (`rgba(0, 0, 0, 0.10)`) for borders — never thicker rules, never coloured borders on standard cards.
- **Do** cap H1 at 56–64px — restrained vs Brex 72 or Ramp 80, the institutional gesture.
- **Do** alternate white → pale-blue → cream → white for sectional rhythm.
- **Do** lift cards via 1px hairline border, never via drop shadow.
- **Do** mark the Franklin mascot `aria-hidden="true"` and pause animation on `prefers-reduced-motion`.
- **Do** keep all motion subtle (≤280ms) and respect motion preferences as a first-class a11y concern.

### Don't

- **Don't** introduce gradients, glassmorphism, or glow — Plaid's discipline is hairline-and-flat.
- **Don't** swap the H1 size larger than 64px; the restraint is a deliberate institutional gesture.
- **Don't** centre layouts; left-aligned grid is the brand's classical posture.
- **Don't** fill primary buttons with action blue. Black-on-white CTA is non-negotiable.
- **Don't** use serif typography. Plaid is fully sans.
- **Don't** stack multiple Franklin bands per page — the mascot is precious; one scene per page.
- **Don't** introduce a second brand colour. Action blue + black is the entire palette; don't add a green-success or orange-accent.
- **Don't** use exclamation marks, emoji, or "Get started today!" urgency. The voice is institutional.
- **Don't** apply warm-toned shadows. Plaid's shadows are cool-tinted (`rgba(0, 0, 30, ...)`) when they appear at all.
- **Don't** round buttons to 9999px. The 8px button radius is the modern-institutional move; full pills shift Plaid into consumer-app territory.

## 15. Agent Prompt Guide

### Quick Color Reference

```
bg: #ffffff
bg-soft: #f7f9fb
bg-blue: #eaf3ff
bg-cream: #f3efe6
text: #000000
text-muted: #4a5568
brand: #0a85ea
brand-soft: #dceeff
cta-bg: #000000
cta-text: #ffffff
border: rgba(0, 0, 0, 0.10)
```

### Example Component Prompts

1. **"Create a Plaid-style hero — white `#ffffff` canvas, mono eyebrow label `API REFERENCE` in JetBrains Mono 12px / 0.04em / uppercase / `#4a5568`, 56px Plaid Sans 600 H1 in pure black with -0.02em tracking, 20px Plaid Sans 400 lede, dual CTA: black `#000000` primary + outlined `rgba(0, 0, 0, 0.10)` secondary at 8px radius. No gradient, no shadow, left-aligned."**

2. **"Design a feature card — white `#ffffff` background, 12px radius, 1px `rgba(0, 0, 0, 0.10)` hairline border (not shadow), 32px interior padding, 24px Plaid Sans 600 heading, 16px Plaid Sans 400 body, link in `#0a85ea` action blue with underline. Hover: border deepens to `rgba(0, 0, 0, 0.20)`."**

3. **"Build a pale-blue trust panel — full-bleed `#eaf3ff` background, 96px vertical padding, mono eyebrow label `TRUST` in `#4a5568`, 44px Plaid Sans 600 stat heading in pure black, 20px supporting copy in `#4a5568`, no border, no shadow."**

4. **"Compose a cream Franklin band — full-bleed `#f3efe6` background, 80px vertical padding, illustrated Benjamin Franklin character anchored left (aria-hidden, animation pauses on prefers-reduced-motion), 32px Plaid Sans 600 heading right-column, 16px Plaid Sans 400 body, single primary CTA. The brand's emotional zone — one per page only."**

5. **"Render a developer code block — JetBrains Mono 14px, `#f7f9fb` background, 8px radius, 1px `rgba(0, 0, 0, 0.10)` border, 16px / 20px padding, syntax highlighting in muted institutional palette (no neon). Inline code: same font, 4px radius, `rgba(0, 0, 0, 0.04)` background."**

6. **"Create the primary nav — 72px header height, white `#ffffff` background, Plaid wordmark left-aligned in pure black, links 15px Plaid Sans 500 in `#000000` with `#0a85ea` action-blue hover. Right-aligned tertiary 'Sign in' + black-on-white primary 'Get started' at 8px radius."**

### Iteration Guide

1. **Black CTA, blue link.** If the primary button is action-blue-filled, change it to black-on-white. The action blue lives in links only.
2. **Hairline, not shadow.** Replace any drop-shadow on cards with a `1px solid rgba(0, 0, 0, 0.10)` border. Plaid's depth is hairline-flat.
3. **Drop the gradient.** Any mesh, conic, or radial gradient is wrong — replace with flat white, pale-blue panel, or cream Franklin band.
4. **Cap the H1.** If the headline is over 64px, scale it down. Plaid's institutional restraint demands ≤56–64px.
5. **Mono eyebrow.** Add a `JetBrains Mono 12px / uppercase / 0.04em` micro-label above every section heading. It's the brand's typographic signature.
6. **Drop the serif.** If any heading is in serif, change it to Plaid Sans. The brand is fully sans.
7. **Left-align.** Centre layouts shift Plaid toward consumer-app register. Default to left-aligned.
8. **Calm the verbs.** Replace "Sign up free!" with "Get started"; replace "Try now →" with "Try Plaid Link". The voice is institutional, never urgent.
Prose

1. Visual Theme & Atmosphere

Plaid’s homepage is the trust-fintech archetype, refined. White canvas, black H1, pale-blue trust panels, a single confident #0a85ea link blue, and 10%-black hairlines doing the structural work. Where contemporary Stripe reaches for chromatic gradient, animated grids, and 3D meshes, Plaid stays with the older Stripe-era restraint — near-pure black on white, single-accent blue, generous whitespace, hairline rules. The page reads as infrastructure rather than campaign: the visual register is closer to a primary-bank annual report than to a Y Combinator pitch deck, and the discipline is the point.

The single moment of personality in this otherwise institutional layout is the Benjamin Franklin mascot — an illustrated, gently-animated figure who narrates feature sections from inside warm-cream #f3efe6 bands. That mascot is the brand’s emotional signature: cool-blue-and-white precision broken once per page by a hand-drawn historical figure with subtle motion. The break from cool greys into warm cream — and from typographic restraint into character animation — is what differentiates Plaid from the otherwise-similar Stripe-trust-palette competitors. It positions Plaid as more consumer-friendly than the Visa/Mastercard infrastructure plays it competes against without abandoning the developer-credibility surface.

Typographically, Plaid runs one family across the entire site — a custom Plaid Sans (an Inter-class neo-grotesque) at 500–600 weight for both display and body. There is no serif anywhere on the marketing surface. H1 holds at 56–64px with negative tracking; body is the same family at 16px on a 24px line; mono micro-labels appear at 12px with 0.04em tracking as eyebrow text. The typographic discipline reinforces the institutional tone — no mixed faces, no decorative weights, no ornamental italics.

The CTA convention is decisive: the action blue #0a85ea is reserved for links and accent, never as a primary button fill. Primary buttons are black-on-white (#000000 bg, #ffffff text, 8px radius). That distinction — blue for inline action, black for page-level commitment — is one of Plaid’s signature design rules and the easiest way to break the brand if you ignore it.

Atmospheric vocabulary that captures the feeling: primary-bank, hairline-only, pale-blue-trust, near-pure-black-on-white, mono-micro-eyebrow, Franklin-cream-band, Stripe-2017, institutional-quiet, no-gradient-ever, structural-not-decorative. The brand reads as if it were laid out by a CFO with taste.

Key Characteristics

  • White #ffffff canvas — the trust default, never substituted
  • Action blue #0a85ea for links only — never a primary button fill
  • Primary CTA is black-on-white (#000000 / #ffffff / 8px radius)
  • Pale-blue #eaf3ff trust panels alternating with white sections
  • Cream Franklin band #f3efe6 — the brand’s singular emotional zone
  • 10%-black hairlines (rgba(0, 0, 0, 0.10)) — every border, every divider
  • No shadows, no gradients, no glow — flat-and-hairline discipline
  • Single typeface across site (Plaid Sans / Inter) — no serif
  • Mono micro-labels at 12px / 0.04em tracking as section eyebrows
  • 12px card radius, 8px button radius — modern but not consumer-soft
  • Animated Benjamin Franklin mascot — illustrated, decorative, signature

2. Color Palette & Roles

Primary

  • bg #ffffff — white canvas; the trust default, never substituted on body surfaces.
  • bg-soft #f7f9fb — palest blue-grey panel, a quieter alternation between white sections.
  • text #000000 — near-pure black, no opacity softening. Plaid keeps body type at full strength.
  • cta-bg #000000 — primary CTA fill; the brand’s deliberate institutional move.
  • on-cta #ffffff — pure white label on black; maximum value contrast.

Brand & Accent

  • brand #0a85ea — Plaid action blue. Used for links and inline action only — never as a primary button fill.
  • brand-strong #0066c0 — pressed / hover state.
  • brand-deep #003c80 — rare deep blue for emphasis or info text.
  • brand-soft #dceeff — info wash, soft pill backgrounds.
  • brand-wash rgba(10, 133, 234, 0.08) — hover tint for blue-themed surfaces.
  • accent #000000 — secondary brand colour is black, not a second hue. The CTA itself uses black, not blue.

Sectional Bands

  • bg-blue #eaf3ff — signature pale-blue trust band; appears 1–2× per page.
  • bg-cream #f3efe6 — warm-cream Franklin storytelling band; the brand’s emotional zone.
  • bg-ink #000000 — rare full-black band reserved for hero statements (e.g. trust statistics, security claims).

Interactive

  • link #0a85ea — action blue, with underline by default in body.
  • link-hover #0066c0 — deeper pressed blue.
  • selected-bg #eaf3ff — pale-blue selection wash.
  • disabled #c4cad3 — cool-grey muted.

Neutral Scale

  • text-strong #000000 — near-pure black, the headline ink.
  • text-medium #1a1f29 — deeper-cool variant for high-emphasis copy.
  • text-muted #4a5568 — secondary copy, metadata.
  • text-soft #7a8390 — captions, helper text.
  • text-faint #a0a8b3 — disabled labels, footer microcopy.

Surface & Borders

  • surface-0 (page)#ffffff white canvas.
  • surface-1 (panel)#f7f9fb palest blue-grey.
  • surface-2 (card)#ffffff white card on coloured panel; or #f3f5f8 cool-grey card on white.
  • surface-cream#faf6ed quieter cream tint inside Franklin sections.
  • border rgba(0, 0, 0, 0.10) — 10%-black hairline, the brand’s defining border.
  • border-strong rgba(0, 0, 0, 0.20) — emphasized rule, hover deepening.
  • border-soft rgba(0, 0, 0, 0.06) — quietest separation.
  • border-blue rgba(10, 133, 234, 0.30) — rare brand-tinted divider on blue surfaces.

Shadow Colors

Plaid’s shadows are cool-tinted and sparse. The brand prefers hairline borders to drop shadows on every content surface — cards lift via 1px borders rather than elevation. When shadows do appear (modals, popover layers, the floating Plaid Link consent dialog), they’re tinted with low-opacity cool blue (rgba(0, 0, 30, 0.04) to 0.08), never neutral grey, and never warm. The cool tint reinforces the trust-palette temperature.

Semantic

  • success — bg #dcf3e3, text #1f5d3f, border rgba(74, 122, 91, 0.30).
  • warning — bg #fff0c5, text #7a5e1f, border rgba(180, 145, 60, 0.30).
  • danger — bg #fde0e0, text #8a2828, border rgba(180, 50, 50, 0.30).
  • info — bg #dceeff (brand-soft), text #003c80, border rgba(10, 133, 234, 0.30).

The semantic palette is calm and institutional — no fluorescent warning yellow, no neon green-success. Every semantic colour stays within the cool-and-warm-cream temperature range of the brand.

3. Typography Rules

Font Family

  • Display & UI: "Plaid Sans", "Inter Display", Inter, "Helvetica Neue", Arial, sans-serif — custom Plaid Sans is an Inter-class neo-grotesque cut for Plaid’s house. Falls back gracefully to Inter or Helvetica Neue on slow connections.
  • Body: same family, weight 400/500/600.
  • Mono: "JetBrains Mono", Menlo, Consolas, "SF Mono", monospace — used for eyebrow micro-labels (12px / 0.04em tracking / uppercase) and code blocks in developer documentation.
  • No serif anywhere on the marketing surface.
  • OpenType features: liga and kern always on; tnum and zero (slashed zero) in mono for tabular alignment; ss01 for stylistic alternate at display sizes.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingOT FeaturesNotes
Display HeroPlaid Sans80px6001.05-0.025emss01 ligaHomepage hero ceiling — rare
DisplayPlaid Sans64px6001.05-0.02emss01Section intro at scale
H1Plaid Sans56px6001.08-0.02emligaPage title — restrained vs Brex 72
H2Plaid Sans44px6001.10-0.015emligaMajor section
H3Plaid Sans32px6001.20-0.01emSub-section
H4Plaid Sans24px6001.25normalCard heading
H5Plaid Sans18px6001.40normalInline emphasis
EyebrowJetBrains Mono12px5001.400.04emuppercaseMono micro-label — signature
Body LargePlaid Sans20px4001.50normalLede paragraph
BodyPlaid Sans16px4001.50normalDefault body
Body SmallPlaid Sans14px4001.50normalCompact copy
CaptionPlaid Sans13px4001.40normalImage captions
Caption TabularJetBrains Mono13px5001.40normaltnumStats, transaction lists
LabelJetBrains Mono12px5001.300.04emuppercaseUI labels, section dividers
Pull QuotePlaid Sans28px5001.30normalTestimonial pull-quote
CodeJetBrains Mono14px4001.55normaltnum zeroInline + block
Code MicroJetBrains Mono12px4001.40normalAPI endpoint refs

Principles

  • One typeface, full system. Plaid Sans + JetBrains Mono is the entire family. No serif, no decorative face. The mono is reserved for eyebrows, labels, and code — every other context uses Plaid Sans.
  • Weight 600 is the headline ceiling. Plaid never reaches for 700 or 800. The institutional register requires restraint; weight 600 reads as confident, not shouting.
  • H1 caps at 56–64px. Brex hits 72; Ramp hits 80; Plaid plays it quieter at 56, hitting 64 only on rare hero statements. The size restraint is a deliberate institutional gesture.
  • Negative tracking scales with size. -0.025em at 80px, -0.02em at 56–64px, -0.015em at 44px, -0.01em at 32px, normal below. Standard broadsheet compression.
  • Mono eyebrow as section signature. The 12px / 0.04em / uppercase JetBrains Mono micro-label is the brand’s most distinctive typographic move — every section opens with one.
  • Body width capped at 720px even on a 1200px page — institutional reading column.
  • Tabular figures everywhere numbers matter. tnum discipline in mono so stats, transaction lists, and code line numbers align cleanly.
  • No italic in display. Italics are reserved for body emphasis only. Display type is upright, the institutional voice is calm.

4. Component Stylings

Buttons

Primary (Black-on-White)

  • Background: #000000 near-pure black.
  • Text: #ffffff pure white, Plaid Sans 500 / 15px.
  • Padding: 12px 20px. Radius: 8px. Border: 1px solid #000000.
  • Hover: bg → #1a1f29; transition 180ms ease-standard.
  • Active: bg → #000000 (depressed micro-shift).
  • Use: Primary CTA — Get started, Talk to sales, Try Plaid. The institutional fintech move.

Secondary (Outlined)

  • Background: #ffffff. Text: #000000. Border: 1px solid rgba(0, 0, 0, 0.10).
  • Same padding, radius, font as primary.
  • Hover: bg → #f7f9fb.
  • Use: Twin to primary — Read more, Watch demo, Read the docs.

Tertiary (Quietest)

  • Background: transparent. Text: #000000. Border: 1px solid rgba(0, 0, 0, 0.06).
  • Hover: bg → rgba(0, 0, 0, 0.03).
  • Use: Footer links, repeated in-section CTAs.

Link (Inline Action Blue)

  • Background: transparent. Text: #0a85ea Plaid action blue, underlined.
  • Padding: 0. Font: Plaid Sans 500 / 16px.
  • Hover: text → #0066c0.
  • Use: Inline CTAs — “learn more →”, “see the docs”. The action blue’s primary home.

Cards

Feature Card (White on Panel)

  • Background: #ffffff. Border: 1px solid rgba(0, 0, 0, 0.10). Radius: 12px. Padding: 32px.
  • Shadow: none — 1px hairline border alone.
  • Hover: border → rgba(0, 0, 0, 0.20); transition 180ms.
  • Use: Capability tile, pricing block, feature explanation.

Blue Trust Panel (Sectional)

  • Background: #eaf3ff. Border: none. Radius: 12px (or full-bleed).
  • Padding: 48px to 96px depending on context.
  • Use: Trust statement, security stat, “Plaid moves $X trillion / year” type sectional.

Cream Franklin Card (Sectional)

  • Background: #f3efe6. Border: none. Radius: 12px (or full-bleed).
  • Padding: 40px 32px.
  • Use: Illustrated Franklin scenes — the brand’s emotional zone. Always paired with character animation.

Badges, Tags, Pills

Mono Eyebrow Label — bg transparent, text #4a5568, padding 0, radius 0, font JetBrains Mono 500 / 12px / 0.04em / uppercase. The brand’s most distinctive typographic chrome.

Blue Status Pill — bg rgba(10, 133, 234, 0.08), text #003c80, radius 4px, padding 4px 10px. Subtle blue-tinted status on white card.

Earth-Tone Status (Semantic) — bg from semantic palette (success / warning / danger / info), radius 4px, padding 4px 10px. Calm, institutional, no fluorescents.

Inputs / Forms

  • Background: #ffffff. Border: 1px solid rgba(0, 0, 0, 0.20). Radius: 8px. Padding: 12px 16px.
  • Font: Plaid Sans 400 / 16px. Placeholder: #7a8390.
  • Focus: 0 0 0 2px rgba(10, 133, 234, 0.40) ring, border → #0a85ea. Transition 100ms.
  • Error: border → #8a2828, ring → rgba(180, 50, 50, 0.30).
  • Helper: caption 13px text-soft below.
  • Header height 72px. Background #ffffff (transparent on hero scrolling).
  • Logo: Plaid wordmark left-aligned, black.
  • Nav links: Plaid Sans 500 / 15px, colour #000000, padding 8px 12px. Hover → #0a85ea action blue; underline appears under active link.
  • Right-side CTA pair: tertiary “Sign in” + primary black “Get started”.
  • Mobile: full-screen sheet, links stack at 18px / 500 with 24px gap.

Optional Components

Pull Quote — Plaid Sans 28px / 500, text-medium, with a 3px action-blue left rule. Reserved for customer-testimonial sections.

Code Block (Developer Docs) — JetBrains Mono 14px, bg #f7f9fb, radius 8px, padding 16px 20px, border rgba(0, 0, 0, 0.10). Inline code: same font, bg rgba(0, 0, 0, 0.04), padding 2px 6px, radius 4px.

Tooltip — bg #000000, text #ffffff, radius 6px, padding 8px 12px, font Plaid Sans 500 / 13px.

Modal — bg #ffffff, radius 16px, shadow rgba(0, 0, 30, 0.08) 0 12px 32px -8px, max-width 560px. Cool overlay backdrop at 50% opacity.

Plaid Link Modal (Product UI) — branded consent dialog with bank-logo grid, action-blue primary button, hairline-bordered list rows. The product UI’s signature surface.

Toast — bg #000000, text #ffffff, radius 8px, padding 12px 20px. Black-on-white inverted to match the CTA family.

5. Layout Principles

Spacing System

  • Base unit: 8px — the standard institutional rhythm.
  • Scale: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128, 160 — modular, generous at the upper end.
  • Density observation: Plaid runs medium-density — denser than Anthropic’s editorial layout but lighter than tech-heavy SaaS. Section padding sits at 96–128px vertical; intra-section spacing uses 16–32px.

Grid & Container

  • Page max width: 1200px — moderate, primary-bank proportions.
  • Site gutter: clamp(24px, 4vw, 56px) — comfortable on desktop, accommodating on mobile.
  • Grid: 12 columns with 24px gutters. Hero blocks span full width; capability rails span 8 columns; supporting sidebars span 4.
  • Hero treatment: full-bleed white, 56–64px headline left-aligned, body confined to a 720px column anchored left of centre.
  • Capability rail: 3-up cards on desktop, 2-up on tablet, 1-up on mobile.

Whitespace Philosophy

The whitespace is institutional clearance. Plaid leaves more empty space than necessary, and that calculated emptiness is the brand’s claim to gravity. Section gutters run 96–128px between major blocks; minor blocks sit on 48–64px gaps; intra-section spacing uses 16–32px. The page never crowds; the page never extends; the page reads as an annual report’s interior layout.

Section Cadence

  • Hero (white) → Mono-eyebrow + H1 + lede + dual CTA → Blue trust panel (#eaf3ff) with stat — Capability rail (3-up white cards on #f7f9fb) → Cream Franklin band (#f3efe6 with illustrated character animation) → Pricing or trust-detail (white) → Footer (#ffffff with rgba(0, 0, 0, 0.10) top border).
  • The cream Franklin band appears once or twice per page — never more, or its emotional weight dilutes.
  • Pages alternate cool-blue → warm-cream → white in a deliberate sectional rhythm.
  • Layouts are left-aligned by default; centred layouts are reserved for testimonial pull-quotes and rare hero statements.

6. Shapes & Radius Scale

TierValueUse
Micro2pxDecorative dividers, slim chip corners
XS4pxStatus pills, inline tags, semantic badges
Small (sm)6pxTooltip corners, code-inline pills
Comfortable (md)8pxButtons, inputs, dropdowns — the dominant interactive radius
Relaxed (lg)12pxCards — feature tiles, pricing blocks, capability cards
Featured (xl)16pxModals, large editorial callouts
Pill9999pxReserved for status chips and tags only

The signature radii are 8px on buttons / inputs and 12px on cards. Plaid sits at the modern 2026 SaaS consensus — neither archaic (Mercury’s 6px) nor consumer-soft (Wise’s full-pill buttons). The discipline is deliberate: softer radii would shift Plaid toward consumer brand; harder radii toward legacy finance. The 8/12 pairing is the mid-point that signals modern institutional trust.

7. Depth & Elevation

LevelTreatmentUse
0Flat — no shadowDefault page surface, hero, body sections
11px hairline border (rgba(0, 0, 0, 0.10))Cards, buttons, inputs — the dominant elevation
2rgba(0, 0, 30, 0.04) 0 1px 3pxSticky nav (rare), dropdown menus
3rgba(0, 0, 30, 0.06) 0 4px 12pxHover-lifted cards in product UI; rare on marketing
4rgba(0, 0, 30, 0.08) 0 12px 32px -8pxPlaid Link modal, popover layers
5rgba(0, 0, 30, 0.08) 0 24px 64px -16pxMarketing modals, dialogs

Shadow Philosophy

Plaid’s depth is hairline-and-flat, not elevation. The defining elevation move is 1px / 10% black border rather than a drop shadow. Cards on white are bordered, not shadowed; cards on coloured panels (pale-blue, cream) are flat-and-borderless. Drop shadows appear only on overlay layers (modals, popovers, the Plaid Link consent dialog) and are tinted cool-blue (rgba(0, 0, 30, ...)) to reinforce the trust temperature. The brand never uses warm or neutral shadows — that would crack the cool-institutional posture. There is no glassmorphism, no glow, no gradient. The discipline is the brand asset.

8. Interaction & Motion

Easing Curves

  • ease-standard: cubic-bezier(0.4, 0, 0.2, 1) — Material-style; default for hover, focus, colour transitions.
  • ease-emphasized: cubic-bezier(0.2, 0, 0, 1) — punchier exit; modal enter, hero reveal.
  • ease-institutional: cubic-bezier(0.32, 0.72, 0, 1) — slow-out, fast-settle; used on Franklin animation cycles.

Duration Buckets

  • Fast (100ms) — colour transitions, focus rings, link hovers.
  • Standard (180ms) — button hover, card hover, dropdown reveal.
  • Slow (280ms) — modal enter/exit, page-section fade-in.
  • Page (400ms) — route transitions, hero reveal sequences.

Plaid’s motion is subtler and faster than tech-startup defaults — the institutional posture demands restraint. No 800ms grand reveals; no spring-bounce; no parallax.

Per-Component Micro-States

  • Button hover (black primary): bg #000000#1a1f29 over 180ms. No lift, no scale.
  • Button hover (outlined secondary): bg #ffffff#f7f9fb; border stays at 0.10.
  • Card hover: border deepens from rgba(0, 0, 0, 0.10) to rgba(0, 0, 0, 0.20) over 180ms; no shadow change.
  • Link hover (action blue): text #0a85ea#0066c0 over 100ms; underline thickens 1px → 2px.
  • Input focus: 2px action-blue ring fades in over 100ms; border rgba(0, 0, 0, 0.20)#0a85ea.
  • Nav link hover: colour shift to #0a85ea.
  • Franklin mascot: gentle 4–6 second loop animation (eyebrow raise, hand wave, head turn). Pauses on prefers-reduced-motion.

Page Transitions

Hero text fades in over 400ms with a 12px translate-up; below-fold sections use IntersectionObserver triggered at 70% viewport, 280ms duration, opacity-only. The Franklin scenes never auto-play with attention-grabbing motion — they cycle gently in their cream bands.

Reduced Motion

@media (prefers-reduced-motion: reduce) — all transitions become opacity-only, durations halved. Franklin mascot animations pause at the first frame (the figure remains visible but motionless). Translate animations disabled entirely; scroll-linked reveals snap to final state. The brand respects motion preferences as a first-class a11y concern, especially because the mascot animation is the most motion-heavy element on the site.

9. Accessibility & A11y

Contrast Pairs

  • #000000 text on #ffffff bg: 21.0:1 — AAA at all sizes (maximum contrast).
  • #4a5568 text-muted on #ffffff bg: 8.6:1 — AAA at body sizes.
  • #7a8390 text-soft on #ffffff bg: 4.4:1 — AA at large sizes only.
  • #ffffff text on #000000 CTA: 21.0:1 — AAA.
  • #0a85ea link on #ffffff bg: 4.6:1 — AA at body sizes; underline reinforces.
  • #003c80 text on #dceeff info bg: 9.4:1 — AAA.
  • #000000 text on #eaf3ff blue panel: 18.6:1 — AAA.
  • #000000 text on #f3efe6 cream panel: 18.4:1 — AAA.

Focus Indicators

  • Default focus ring: 0 0 0 2px rgba(10, 133, 234, 0.40) with 2px offset on white pages.
  • Inputs: ring + border colour shift to #0a85ea.
  • On dark surfaces (rare): 0 0 0 2px #ffffff.
  • All interactive surfaces have visible focus states — no outline: none without a replacement.

ARIA Patterns

  • Navigation: <nav aria-label="Main"> with skip-link to main content.
  • Disclosure: <button aria-expanded aria-controls> for collapsible sections in pricing tables.
  • Dialog: role="dialog" aria-modal="true" aria-labelledby with focus trap and Esc-to-close.
  • Plaid Link consent dialog: role="dialog" aria-modal="true" with bank list as <ul role="listbox">.
  • Live regions: aria-live="polite" for form validation messages.
  • Franklin mascot: aria-hidden="true" — decorative animation never carries content meaning.

Keyboard Navigation

  • Tab order matches visual flow: skip-link → nav → hero CTA → main content → footer.
  • All buttons, links, inputs reachable via Tab.
  • Modals trap focus inside until dismissed.
  • Esc closes modals and dropdowns.
  • Plaid Link consent dialog: Arrow keys navigate the bank list; Enter selects; Esc closes.

Screen Reader Hints

  • Decorative illustrations (Franklin mascot, abstract trust graphics) marked aria-hidden="true".
  • Icon-only buttons have aria-label.
  • Stat callouts include hidden context: “Plaid moves $2 trillion per year” reads as full sentence rather than just “$2T”.
  • Mono eyebrow labels (API Reference, Quickstart) are visible text, not pseudo-content.

Reduced Motion

Honoured via the global media query. Franklin mascot animations halt at first frame; transitions become opacity-only; durations halved. The brand never requires motion to convey information.

10. Responsive Behavior

Breakpoints

NameWidthUse
Mobile< 640pxSingle column, full-bleed sections, hamburger nav
Tablet640–1024px2-column rails, narrower gutters, condensed hero
Desktop1024–1280pxFull 12-col grid, 720px prose column
Wide1280–1440pxSite max width hits at 1200px
Ultra> 1440pxPage locks to 1200, gutters expand symmetrically

Touch Targets

  • Minimum tap target: 44×44px (WCAG AAA).
  • Buttons: 44px minimum height on mobile (12px vertical padding × 2 + line-height accommodates).
  • Nav link tap area: 44×44px even when visual padding is smaller.
  • Plaid Link bank-list rows: 56px minimum on mobile for thumb-friendly selection.

Collapsing Strategy

  • Header: full nav at ≥1024px; hamburger sheet below.
  • Hero: 64px headline → 48px → 36px across desktop / tablet / mobile.
  • Capability grid: 3-up at desktop, 2-up at tablet, 1-up at mobile.
  • Body width: 720px → fluid 92vw at mobile.
  • Section spacing: 128px → 80px → 56px across sizes.
  • Franklin band: full-bleed cream on all sizes; mascot scales proportionally.

Image Behavior

  • Illustrations (Franklin scenes, capability hero art) use srcset with 1x/2x for retina.
  • Hero imagery uses aspect-ratio to prevent layout shift.
  • Lazy-loading on below-fold images; eager on hero.
  • SVG illustrations preferred for crisp rendering at any size.

Container Queries

Used inside capability cards to switch layout when card width crosses 360px (icon-left vs. icon-top).

11. Content & Voice

Tone

Institutional, precise, dryly confident. Plaid writes like a primary bank’s communications team — full sentences, technical specificity, no hype, no exclamation points, no emoji. Statistics are stated plainly: “Plaid powers 12,000+ apps.” Headlines describe outcomes (“Connect financial accounts in seconds”); subheads explain mechanism. The brand sounds like infrastructure rather than software.

Microcopy Patterns

  • Button verbs: “Get started,” “Talk to sales,” “Read the docs,” “Try Plaid Link,” “Watch demo,” “View pricing.” Never “Sign up free!” or “Get instant access →”.
  • Error messages: “We couldn’t connect to your bank. Try again, or [contact support].” Specific, no shame, no apologetic exclamation.
  • Success confirmations: “Connected.” “Account linked.” Brief, declarative, present-tense.
  • Loading states: “Connecting…” “Verifying account…” “Encrypting…” — process-aware, security-flavoured.
  • Trust statements: Numerical and specific. “AES-256 encryption”, “SOC 2 Type II certified”, “Used by 1 in 4 Americans with a bank account.”

Empty States

What they say: explain the empty state and offer the next step. “No connections yet. Add your first account to begin.” “Your transaction history is empty.” What they don’t say: “Oops!”, “Sorry!”, any apologetic exclamation. Empty states are functional notes, not failures.

CTA Verb Conventions

  • Primary on hero: “Get started,” “Talk to sales,” “Try Plaid Link”
  • Secondary: “Read the docs,” “Watch demo,” “View pricing”
  • Footer: “Read our research,” “Browse the API,” “View status”

The brand never uses “Sign up free!” or “Get instant access today!” — the tone is institutional and unhurried. Plaid never trades in scarcity, never uses time-pressure CTAs, never countdowns. The Franklin mascot occasionally narrates with first-person voice (“Hi, I’m Ben”) inside the cream band — that’s the only first-person moment on the site, and it’s a deliberate emotional break from the otherwise impersonal institutional voice.

12. Dark Mode & Theming

Light-only — no dark variant offered on the marketing surface. The white canvas, near-black ink, and pale-blue trust palette are the brand’s defining institutional posture; a dark mode would require re-keying the entire system — including the Franklin cream band, which doesn’t translate to dark — and would collapse the trust register that distinguishes Plaid from consumer-fintech competitors.

The product UI (Plaid Dashboard, the Plaid Link consent dialog) handles its own theming and supports a partial dark variant for developers, but that variant is documented separately. The marketing site at plaid.com is intentionally light-only across all viewports and times of day.

If a downstream surface ever needs a dark companion, the rules would be: keep the action blue at full saturation (#0a85ea is one of the rare blues that holds at AA contrast on both white and deep navy), drop the cream Franklin band entirely (no warm-on-dark equivalent works), and swap white for a deep institutional navy #0a1530 rather than pure black. But this is not currently shipped.

13. Lineage & Influences

Plaid’s marketing site descends directly from the Stripe-era fintech trust palette: white canvas, near-pure-black type, pale-blue panels, single confident action blue. The rendition is quieter and more institutional than today’s Stripe — Plaid leans on classical typography (a Plaid-Sans variant of Inter at 500–600, no serif) and 1px / 10% black hairlines rather than gradients.

The single moment of personality in an otherwise restrained system is the Benjamin Franklin mascot — an animated, illustrated figure who narrates feature sections from inside a warm cream band #f3efe6. That break from cool blue-greys to warm cream is Plaid’s signature trick, and it positions Plaid as more consumer-friendly than the Visa/Mastercard infrastructure plays it competes against. The 12px card radius and 8px button radius sit at the modern 2026 SaaS consensus, neither archaic (Mercury’s 6px) nor consumer-soft (Wise’s full pill).

What it inherits: Stripe-2017 trust palette discipline (pale-blue + white + black + single accent blue), Inter-class neo-grotesque typography, hairline elevation as the default. What it borrows from contemporaries: Vercel’s black CTA on white canvas with mono micro-labels, Mailchimp/Slack’s mascot-as-narrative-device tradition, Linear’s institutional restraint. What it rejects: gradient meshes, neon accents, hero animations beyond the Franklin scene, AI-tech iconography, the consumer-app rounded-corner softness.

Named influences:

  • Stripe (2017–2019 era) — Pale-blue trust palette, single-accent CTA discipline, classical sans typography. https://stripe.com
  • Vercel — Black CTA on white canvas with mono micro-labels. https://vercel.com
  • Mailchimp / Slack illustrations — Mascot-as-narrative-device — Plaid’s Franklin echoes that warm-illustration tradition inside a fintech context. https://mailchimp.com
  • Mercury — Cousin in the modern-fintech-restraint lineage; Mercury runs slightly tighter radii (6px) for a more archaic feel. https://mercury.com
  • Linear — Institutional discipline; hairline-only depth strategy.
  • Inter / Rasmus Andersson — DNA reference for Plaid Sans neo-grotesque proportions.

14. Do’s and Don’ts

Do

  • Do keep the action CTA black (#000000 / #ffffff / 8px radius), not blue — the #0a85ea is reserved for links and accent, never as a primary fill.
  • Do use the cream Franklin band (#f3efe6) as the brand’s only warm zone; pale blue handles cool-trust sections.
  • Do keep type fully sans — Plaid does not use serif anywhere on the marketing site.
  • Do open every section with a mono eyebrow label (12px / 0.04em / uppercase JetBrains Mono in #4a5568).
  • Do use 1px / 10% black hairlines (rgba(0, 0, 0, 0.10)) for borders — never thicker rules, never coloured borders on standard cards.
  • Do cap H1 at 56–64px — restrained vs Brex 72 or Ramp 80, the institutional gesture.
  • Do alternate white → pale-blue → cream → white for sectional rhythm.
  • Do lift cards via 1px hairline border, never via drop shadow.
  • Do mark the Franklin mascot aria-hidden="true" and pause animation on prefers-reduced-motion.
  • Do keep all motion subtle (≤280ms) and respect motion preferences as a first-class a11y concern.

Don’t

  • Don’t introduce gradients, glassmorphism, or glow — Plaid’s discipline is hairline-and-flat.
  • Don’t swap the H1 size larger than 64px; the restraint is a deliberate institutional gesture.
  • Don’t centre layouts; left-aligned grid is the brand’s classical posture.
  • Don’t fill primary buttons with action blue. Black-on-white CTA is non-negotiable.
  • Don’t use serif typography. Plaid is fully sans.
  • Don’t stack multiple Franklin bands per page — the mascot is precious; one scene per page.
  • Don’t introduce a second brand colour. Action blue + black is the entire palette; don’t add a green-success or orange-accent.
  • Don’t use exclamation marks, emoji, or “Get started today!” urgency. The voice is institutional.
  • Don’t apply warm-toned shadows. Plaid’s shadows are cool-tinted (rgba(0, 0, 30, ...)) when they appear at all.
  • Don’t round buttons to 9999px. The 8px button radius is the modern-institutional move; full pills shift Plaid into consumer-app territory.

15. Agent Prompt Guide

Quick Color Reference

bg: #ffffff
bg-soft: #f7f9fb
bg-blue: #eaf3ff
bg-cream: #f3efe6
text: #000000
text-muted: #4a5568
brand: #0a85ea
brand-soft: #dceeff
cta-bg: #000000
cta-text: #ffffff
border: rgba(0, 0, 0, 0.10)

Example Component Prompts

  1. “Create a Plaid-style hero — white #ffffff canvas, mono eyebrow label API REFERENCE in JetBrains Mono 12px / 0.04em / uppercase / #4a5568, 56px Plaid Sans 600 H1 in pure black with -0.02em tracking, 20px Plaid Sans 400 lede, dual CTA: black #000000 primary + outlined rgba(0, 0, 0, 0.10) secondary at 8px radius. No gradient, no shadow, left-aligned.”

  2. “Design a feature card — white #ffffff background, 12px radius, 1px rgba(0, 0, 0, 0.10) hairline border (not shadow), 32px interior padding, 24px Plaid Sans 600 heading, 16px Plaid Sans 400 body, link in #0a85ea action blue with underline. Hover: border deepens to rgba(0, 0, 0, 0.20).”

  3. “Build a pale-blue trust panel — full-bleed #eaf3ff background, 96px vertical padding, mono eyebrow label TRUST in #4a5568, 44px Plaid Sans 600 stat heading in pure black, 20px supporting copy in #4a5568, no border, no shadow.”

  4. “Compose a cream Franklin band — full-bleed #f3efe6 background, 80px vertical padding, illustrated Benjamin Franklin character anchored left (aria-hidden, animation pauses on prefers-reduced-motion), 32px Plaid Sans 600 heading right-column, 16px Plaid Sans 400 body, single primary CTA. The brand’s emotional zone — one per page only.”

  5. “Render a developer code block — JetBrains Mono 14px, #f7f9fb background, 8px radius, 1px rgba(0, 0, 0, 0.10) border, 16px / 20px padding, syntax highlighting in muted institutional palette (no neon). Inline code: same font, 4px radius, rgba(0, 0, 0, 0.04) background.”

  6. “Create the primary nav — 72px header height, white #ffffff background, Plaid wordmark left-aligned in pure black, links 15px Plaid Sans 500 in #000000 with #0a85ea action-blue hover. Right-aligned tertiary ‘Sign in’ + black-on-white primary ‘Get started’ at 8px radius.”

Iteration Guide

  1. Black CTA, blue link. If the primary button is action-blue-filled, change it to black-on-white. The action blue lives in links only.
  2. Hairline, not shadow. Replace any drop-shadow on cards with a 1px solid rgba(0, 0, 0, 0.10) border. Plaid’s depth is hairline-flat.
  3. Drop the gradient. Any mesh, conic, or radial gradient is wrong — replace with flat white, pale-blue panel, or cream Franklin band.
  4. Cap the H1. If the headline is over 64px, scale it down. Plaid’s institutional restraint demands ≤56–64px.
  5. Mono eyebrow. Add a JetBrains Mono 12px / uppercase / 0.04em micro-label above every section heading. It’s the brand’s typographic signature.
  6. Drop the serif. If any heading is in serif, change it to Plaid Sans. The brand is fully sans.
  7. Left-align. Centre layouts shift Plaid toward consumer-app register. Default to left-aligned.
  8. Calm the verbs. Replace “Sign up free!” with “Get started”; replace “Try now →” with “Try Plaid Link”. The voice is institutional, never urgent.
Ship with this

Drop plaid into your project, then ship the actual sections in an afternoon.

1 · install design
npx design-md add plaid
2 · ship landing page
npx agentkit init --design plaid
How AgentKit reads DESIGN.md
You might also like