light · editorial · sans · cool · structured · premium

Stripe

Editorial fintech polish — light Söhne headlines at weight 300, navy-not-black text, signature `#533afd` purple CTAs.

By webdesignhot · stripe.com
$ npx design-md add stripe
Learn more about the CLI
Compare to…
try on →
1440 × 900
mobile · 390 × 844
Tokens design.md/v1.5
  • bg #ffffff
  • bg-quiet #f8fafd
  • bg-min #ffffff
  • surface #ffffff
  • surface-soft #f6f9fc
  • surface-elev #ffffff
  • bg-brand-dark #1c1e54
  • bg-dark-navy #0d253d
  • text AAA · 17.4 #061b31
  • text-strong #061b31
  • text-soft #50617a
  • text-subdued #64748d
  • text-label #273951
  • text-on-dark #ffffff
  • text-on-dark-muted rgba(255,255,255,0.7)
  • brand AA · 6.2 #533afd
  • brand-hover #4434d4
  • brand-deep #2e2b8c
  • brand-light #665efd
  • brand-tint #e8e9ff
  • brand-soft #b9b9f9
  • brand-bg-hover rgba(83,58,253,0.05)
  • accent-ruby #ea2261
  • accent-magenta #f96bee
  • accent-magenta-soft #ffd7ef
  • accent-info #2874ad
  • border — · 1.2 #e5edf5
  • border-default #d4dee9
  • border-strong AAA · 17.4 #061b31
  • border-purple #b9b9f9
  • border-purple-soft #d6d9fc
  • border-magenta #ffd7ef
  • border-dashed #362baa
  • link #533afd
  • link-hover #4434d4
  • on-brand #ffffff
  • success #15be53
  • success-text #108c3d
  • success-bg rgba(21,190,83,0.2)
  • success-border rgba(21,190,83,0.4)
  • warning #9b6829
  • danger #ea2261
  • shadow-blue rgba(50,50,93,0.25)
  • shadow-deep-blue rgba(3,3,39,0.25)
  • shadow-black rgba(0,0,0,0.1)
  • shadow-ambient rgba(23,23,23,0.08)
  • shadow-soft rgba(23,23,23,0.06)
Typography
Ship faster than ever.
display-hero sohne-var 56px w300 -1.4px
Ship faster than ever.
display-large sohne-var 48px w300 -0.96px
Ship faster than ever.
h1 sohne-var 48px w300 -0.015em
Built for teams that ship.
h2 sohne-var 32px w300 -0.64px
A complete kit
h3-large sohne-var 26px w300 -0.26px
A complete kit
h3 sohne-var 22px w300 -0.22px
The quick brown fox jumps over the lazy dog.
body-large sohne-var 18px w300
The quick brown fox jumps over the lazy dog.
body sohne-var 16px w300
The quick brown fox jumps over the lazy dog.
body-emphasis sohne-var 16px w400
The quick brown fox jumps over the lazy dog.
button sohne-var 16px w400
The quick brown fox jumps over the lazy dog.
button-small sohne-var 14px w400
The quick brown fox jumps over the lazy dog.
link sohne-var 14px w400
OUR DESIGN SYSTEM
caption sohne-var 13px w400
OUR DESIGN SYSTEM
caption-small sohne-var 12px w300
OUR DESIGN SYSTEM
caption-tabular sohne-var 12px w300 -0.36px
npx design-md add linear
code SourceCodePro 12px w500
npx design-md add linear
code-bold SourceCodePro 12px w700
The quick brown fox jumps over the lazy dog.
micro sohne-var 10px w300 0.1px
The quick brown fox jumps over the lazy dog.
micro-tabular sohne-var 10px w300 -0.3px
Spacing
  • step-0 1px
  • step-1 2px
  • step-2 4px
  • step-3 6px
  • step-4 8px
  • step-5 10px
  • step-6 11px
  • step-7 12px
  • step-8 14px
  • step-9 16px
  • step-10 18px
  • step-11 20px
  • step-12 24px
  • step-13 32px
  • step-14 40px
  • step-15 48px
  • step-16 64px
  • step-17 80px
  • step-18 96px
  • step-19 120px
Radius
  • micro 1px
  • sm 4px
  • md 5px
  • lg 6px
  • xl 8px
  • 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

Stripe pioneered the editorial fintech aesthetic — financial-grade trust delivered through magazine typography rather than corporate gloss. Headlines use Söhne variable at weight 300 (light), unusual for a tech company; body text uses the same family. The text colour is #061b31 (deep navy) rather than pure black, softening the editorial feel further. The signature #533afd purple appears only on action surfaces with a tight 4px radius — the conservative geometry signals seriousness, while the saturated purple itself signals modernity. Cool-toned multi-layer shadows reinforce the financial-blue sensibility throughout.

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: Stripe
tagline: Editorial fintech polish — light Söhne headlines at weight 300, navy-not-black text, signature `#533afd` purple CTAs.
author: webdesignhot
source_url: https://stripe.com
spec: design.md/v1.5
quality: curated
featured: true
categories: [fintech, saas]
tags: [light, editorial, sans, cool, structured, premium]
preview_swatch: ['#ffffff', '#533afd', '#061b31']
related: [vercel, linear, mercury]
description: 'Stripe''s marketing site reads like a financial broadsheet — Söhne variable at weight 300 (light) for headlines, navy-not-black body text at `#061b31`, generous white space, and the signature `#533afd` purple reserved for action surfaces with a conservative 4px radius. Multi-layer blue-tinted shadows (`rgba(50,50,93,0.25)`) deliver depth that feels brand-coloured rather than neutral. The most editorial design system in fintech.'

colors:
  bg: '#ffffff'
  bg-quiet: '#f8fafd'
  bg-min: '#ffffff'
  surface: '#ffffff'
  surface-soft: '#f6f9fc'
  surface-elev: '#ffffff'
  bg-brand-dark: '#1c1e54'           # --hds-color-util-brand-900
  bg-dark-navy: '#0d253d'            # --hds-color-core-neutral-975
  text: '#061b31'                     # --hds-color-heading-solid
  text-strong: '#061b31'
  text-soft: '#50617a'
  text-subdued: '#64748d'
  text-label: '#273951'               # --hds-color-input-text-label
  text-on-dark: '#ffffff'
  text-on-dark-muted: 'rgba(255,255,255,0.7)'
  brand: '#533afd'
  brand-hover: '#4434d4'
  brand-deep: '#2e2b8c'               # --hds-color-button-ui-iconHover
  brand-light: '#665efd'              # --hds-color-input-selector-text-range
  brand-tint: '#e8e9ff'
  brand-soft: '#b9b9f9'                # --hds-color-action-bg-subduedHover
  brand-bg-hover: 'rgba(83,58,253,0.05)'
  accent-ruby: '#ea2261'              # --hds-color-accentColorMode-ruby-icon-solid
  accent-magenta: '#f96bee'           # --hds-color-accentColorMode-magenta-icon-gradientMiddle
  accent-magenta-soft: '#ffd7ef'      # --hds-color-util-accent-magenta-100
  accent-info: '#2874ad'
  border: '#e5edf5'
  border-default: '#d4dee9'
  border-strong: '#061b31'
  border-purple: '#b9b9f9'
  border-purple-soft: '#d6d9fc'
  border-magenta: '#ffd7ef'
  border-dashed: '#362baa'
  link: '#533afd'
  link-hover: '#4434d4'
  on-brand: '#ffffff'
  success: '#15be53'
  success-text: '#108c3d'
  success-bg: 'rgba(21,190,83,0.2)'
  success-border: 'rgba(21,190,83,0.4)'
  warning: '#9b6829'                  # --hds-color-core-lemon-500
  danger: '#ea2261'
  shadow-blue: 'rgba(50,50,93,0.25)'  # signature blue-tinted shadow
  shadow-deep-blue: 'rgba(3,3,39,0.25)'
  shadow-black: 'rgba(0,0,0,0.1)'
  shadow-ambient: 'rgba(23,23,23,0.08)'
  shadow-soft: 'rgba(23,23,23,0.06)'

typography:
  display:
    family: 'sohne-var, "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif'
    weights: [300, 400]
    opentype-features: ['ss01']
  body:
    family: 'sohne-var, "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif'
    weights: [300, 400]
    opentype-features: ['ss01', 'tnum']
  mono:
    family: 'SourceCodePro, "SFMono-Regular", ui-monospace, Menlo, Consolas, monospace'
    weights: [400, 500, 700]
  scale:
    display-hero:    { size: 56, weight: 300, lineHeight: 1.03, tracking: '-1.4px',  family: display, opentype: 'ss01' }
    display-large:   { size: 48, weight: 300, lineHeight: 1.15, tracking: '-0.96px', family: display, opentype: 'ss01' }
    h1:              { size: 48, weight: 300, lineHeight: 1.10, tracking: '-0.015em', family: display, opentype: 'ss01' }
    h2:              { size: 32, weight: 300, lineHeight: 1.10, tracking: '-0.64px', family: display, opentype: 'ss01' }
    h3-large:        { size: 26, weight: 300, lineHeight: 1.12, tracking: '-0.26px', family: display, opentype: 'ss01' }
    h3:              { size: 22, weight: 300, lineHeight: 1.10, tracking: '-0.22px', family: display, opentype: 'ss01' }
    body-large:      { size: 18, weight: 300, lineHeight: 1.40, tracking: 'normal',   family: body, opentype: 'ss01' }
    body:            { size: 16, weight: 300, lineHeight: 1.55, tracking: 'normal',   family: body, opentype: 'ss01' }
    body-emphasis:   { size: 16, weight: 400, lineHeight: 1.55, tracking: 'normal',   family: body, opentype: 'ss01' }
    button:          { size: 16, weight: 400, lineHeight: 1.00, tracking: 'normal',   family: body, opentype: 'ss01' }
    button-small:    { size: 14, weight: 400, lineHeight: 1.00, tracking: 'normal',   family: body, opentype: 'ss01' }
    link:            { size: 14, weight: 400, lineHeight: 1.00, tracking: 'normal',   family: body, opentype: 'ss01' }
    caption:         { size: 13, weight: 400, lineHeight: 1.40, tracking: 'normal',   family: body, opentype: 'ss01' }
    caption-small:   { size: 12, weight: 300, lineHeight: 1.33, tracking: 'normal',   family: body, opentype: 'ss01' }
    caption-tabular: { size: 12, weight: 300, lineHeight: 1.33, tracking: '-0.36px', family: body, opentype: 'tnum' }
    micro:           { size: 10, weight: 300, lineHeight: 1.15, tracking: '0.1px',    family: body, opentype: 'ss01' }
    micro-tabular:   { size: 10, weight: 300, lineHeight: 1.15, tracking: '-0.3px',  family: body, opentype: 'tnum' }
    code:            { size: 12, weight: 500, lineHeight: 2.00, tracking: 'normal',   family: mono }
    code-bold:       { size: 12, weight: 700, lineHeight: 2.00, tracking: 'normal',   family: mono }

radius:
  micro: 1
  sm: 4
  md: 5
  lg: 6
  xl: 8
  pill: 9999

spacing:
  base: 8
  scale: [1, 2, 4, 6, 8, 10, 11, 12, 14, 16, 18, 20, 24, 32, 40, 48, 64, 80, 96, 120]

layout:
  page-width: 1080
  prose-width: 720
  header-height: 72
  gutter: 24
  section-y: 96

components:
  button-primary:
    background: brand
    text: on-brand
    radius: 4
    padding: '8px 16px'
    font: 'sohne-var 16px / weight 400 / ss01'
    hover: 'background → #4434d4'
    use: 'Start now / Contact sales — high-impact purple at conservative 4px radius'
  button-ghost:
    background: transparent
    text: brand
    border: '1px solid #b9b9f9'
    radius: 4
    padding: '8px 16px'
    hover: 'background → rgba(83,58,253,0.05)'
    use: 'Secondary action paired with primary CTA'
  button-info:
    background: transparent
    text: '#2874ad'
    border: '1px solid rgba(43,145,223,0.2)'
    radius: 4
    use: 'Tertiary info-level action'
  card:
    background: '#ffffff'
    border: '1px solid #e5edf5'
    radius: 6
    shadow: 'rgba(50,50,93,0.25) 0 30px 45px -30px, rgba(0,0,0,0.1) 0 18px 36px -18px'
    use: 'Default content card with signature blue-tinted lift'
  badge-success:
    background: 'rgba(21,190,83,0.2)'
    text: '#108c3d'
    border: '1px solid rgba(21,190,83,0.4)'
    radius: 4
    padding: '1px 6px'
    font: '10px sohne-var weight 300'
  input:
    background: '#ffffff'
    border: '1px solid #e5edf5'
    radius: 4
    label-color: '#273951'
    text-color: '#061b31'
    placeholder: '#64748d'
    focus: '1px solid #533afd, ring 0 0 0 2px rgba(83,58,253,0.2)'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-out: 'cubic-bezier(0, 0, 0.2, 1)'
  duration-fast: 150
  duration-standard: 220
  duration-slow: 320
  hover-lift: 'translate-Y(-1px) + shadow intensify'
  reduced-motion: 'respects prefers-reduced-motion: reduce — opacity-only transitions, no translate, no scale'

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

shadows:
  ambient: 'rgba(23,23,23,0.06) 0 3px 6px'
  soft: 'rgba(23,23,23,0.08) 0 15px 35px'
  standard: 'rgba(0,55,112,0.10) 0 6px 22px, rgba(0,59,137,0.02) 0 4px 8px'
  elevated: 'rgba(50,50,93,0.25) 0 30px 45px -30px, rgba(0,0,0,0.1) 0 18px 36px -18px'
  deep: 'rgba(3,3,39,0.25) 0 14px 21px -14px, rgba(0,0,0,0.1) 0 8px 17px -8px'
  ring: '0 0 0 2px #533afd'

accessibility:
  contrast-text-on-bg: 14.8                 # #061b31 on #ffffff — AAA
  contrast-text-on-brand: 4.6               # #ffffff on #533afd — AA
  contrast-link-on-bg: 6.8                  # #533afd on #ffffff — AA Large
  focus-ring: '2px solid #533afd, 2px offset'
  reduced-motion-honored: true
  keyboard-nav: 'tab order follows DOM; focus ring on all interactive elements; skip-to-content link in header'

lineage:
  summary: |
    Stripe pioneered the editorial fintech aesthetic — financial-grade trust
    delivered through magazine typography rather than corporate gloss. Headlines
    use Söhne variable at weight 300 (light), unusual for a tech company; body
    text uses the same family. The text colour is #061b31 (deep navy) rather
    than pure black, softening the editorial feel further. The signature #533afd
    purple appears only on action surfaces with a tight 4px radius — the
    conservative geometry signals seriousness, while the saturated purple itself
    signals modernity. Cool-toned multi-layer shadows reinforce the financial-blue
    sensibility throughout.
  influences:
    - name: Söhne (Klim Type Foundry)
      role: Headline typeface — editorial serif-replacement sans, used at light weights
      url: https://klim.co.nz/retail-fonts/sohne/
    - name: Bloomberg Terminal / FT Online
      role: Financial-broadsheet colour discipline — navy text on white, purple/blue accent
      url: https://www.bloomberg.com
    - name: Apple SF Pro Display
      role: Type fallback in regions without Söhne licence; sets tracking baseline
      url: https://developer.apple.com/fonts/

dark-mode: optional   # Stripe ships dark-section bands (#1c1e54 brand-dark, #0d253d neutral-975) but no full dark-mode token swap on marketing
---

## 1. Visual Theme & Atmosphere

Stripe's marketing site is the gold standard of editorial fintech — a system that reads simultaneously technical and luxurious, precise and warm. The page opens on a clean white canvas (`#ffffff`) with deep navy headings (`#061b31`) and a signature purple (`#533afd`) that anchors both brand and interaction. This isn't the cold clinical purple of enterprise software; it's a rich saturated violet that reads as confident and premium. The overall impression is of a financial institution redesigned by a world-class type foundry.

The custom Söhne variable typeface is the defining element of Stripe's visual identity. Every text element enables the OpenType `ss01` stylistic set, which modifies character shapes for a distinctly geometric, modern feel. At display sizes (48–56px) Söhne runs at weight `300` — an extraordinarily light weight for headlines that creates an ethereal, almost whispered authority. This is the opposite of the "bold hero headline" convention; Stripe's headlines feel like they don't need to shout. Negative letter-spacing (`-1.4px` at 56px, `-0.96px` at 48px) tightens the text into dense engineered blocks.

What truly distinguishes Stripe is its shadow system. Rather than the flat or single-layer approach of most sites, Stripe uses multi-layer blue-tinted shadows: the signature `rgba(50,50,93,0.25)` combined with `rgba(0,0,0,0.1)` creates depth with a cool, almost atmospheric character — like elements floating in a twilight sky. The blue-gray undertone of the primary shadow ties directly to the navy-purple brand palette, making even elevation feel on-brand.

Cool-toned card shadows (`rgba(0,55,112,0.10)` at 6px / 22px spread) reinforce the financial-blue sensibility throughout. Where Vercel goes black-on-near-white at weight 600 for tech polish, Stripe goes navy-on-pure-white at weight 300 for editorial gravitas. Where Linear builds depth from flat hairlines, Stripe layers branded shadow over neutral shadow for parallax-grade depth.

**Key Characteristics:**
- Söhne variable with OpenType `ss01` on every text element — the stylistic set IS the brand
- Weight `300` as the signature headline weight — light, confident, anti-convention
- Negative letter-spacing at display sizes (`-1.4px` at 56px, progressive relaxation downward)
- Blue-tinted multi-layer shadows using `rgba(50,50,93,0.25)` — elevation that feels brand-coloured
- Deep navy (`#061b31`) headings instead of black — warm, premium, financial-grade
- Conservative border-radius (`4px`–`8px`) — nothing pill-shaped, nothing harsh
- Ruby (`#ea2261`) and magenta (`#f96bee`) accents reserved for gradient and decorative elements
- `SourceCodePro` as the monospace companion for code and technical labels
- `tnum` tabular figures for any number set in financial data tables

## 2. Color Palette & Roles

### Primary

- **Stripe Purple** (`#533afd`): primary brand, CTA backgrounds, link text, interactive highlights. A saturated blue-violet that anchors the entire system.
- **Deep Navy** (`#061b31`) [→ `--hds-color-heading-solid`]: primary heading colour. Not black, not gray — a very dark blue that adds warmth and depth to text.
- **Pure White** (`#ffffff`): page background, card surfaces, button text on dark backgrounds.

### Brand & Dark

- **Brand Dark** (`#1c1e54`) [→ `--hds-color-util-brand-900`]: deep indigo for dark sections, footer backgrounds, immersive brand moments.
- **Dark Navy** (`#0d253d`) [→ `--hds-color-core-neutral-975`]: the darkest neutral — almost-black with a blue undertone for maximum depth without harshness.
- **Bg Quiet** (`#f8fafd`): subtle off-white for alternating section panels.

### Accent

- **Ruby** (`#ea2261`) [→ `--hds-color-accentColorMode-ruby-icon-solid`]: warm red-pink for icons, alerts, and accent elements. Decorative only — never a button fill.
- **Magenta** (`#f96bee`) [→ `--hds-color-accentColorMode-magenta-icon-gradientMiddle`]: vivid pink-purple for gradient stops and decorative highlights.
- **Magenta Light** (`#ffd7ef`) [→ `--hds-color-util-accent-magenta-100`]: tinted surface for magenta-themed cards.
- **Lemon** (`#9b6829`) [→ `--hds-color-core-lemon-500`]: warning and highlight accent.

### Interactive

- **Link / Primary** (`#533afd`): active and selected element foreground.
- **Purple Hover** (`#4434d4`): pressed and hover on primary buttons.
- **Purple Deep** (`#2e2b8c`) [→ `--hds-color-button-ui-iconHover`]: dark purple for icon hover.
- **Purple Light** (`#b9b9f9`) [→ `--hds-color-action-bg-subduedHover`]: soft lavender for subdued hover backgrounds.
- **Purple Mid** (`#665efd`) [→ `--hds-color-input-selector-text-range`]: range selector and input highlight.

### Neutral Scale

- **Heading** (`#061b31`): primary headings, nav text, strong labels.
- **Label** (`#273951`) [→ `--hds-color-input-text-label`]: form labels, secondary headings.
- **Body** (`#64748d`): secondary text, descriptions, captions.
- **Soft** (`#50617a`): supporting copy on light surfaces.
- **Faint** (`rgba(16,16,16,0.3)`): disabled labels.

### Surface & Borders

- **Border Default** (`#e5edf5`): standard border for cards, dividers, containers.
- **Border Cool** (`#d4dee9`): slightly stronger neutral border.
- **Border Strong** (`#061b31`): dark accent border for high-emphasis cards.
- **Border Purple** (`#b9b9f9`): active/selected state borders on buttons and inputs.
- **Border Soft Purple** (`#d6d9fc`): subtle purple-tinted borders for secondary elements.
- **Border Magenta** (`#ffd7ef`): pink-tinted borders for magenta-themed elements.
- **Border Dashed** (`#362baa`): dashed borders for drop zones and placeholder elements.

### Shadow Colors

- **Shadow Blue** (`rgba(50,50,93,0.25)`): the signature blue-tinted primary shadow. Far layer.
- **Shadow Deep Blue** (`rgba(3,3,39,0.25)`): deeper blue shadow for elevated modals.
- **Shadow Black** (`rgba(0,0,0,0.1)`): secondary neutral layer beneath the branded blue.
- **Shadow Ambient** (`rgba(23,23,23,0.08)`): soft ambient shadow for subtle elevation.
- **Shadow Soft** (`rgba(23,23,23,0.06)`): minimal lift for hover hints.

### Semantic

- **Success** background `rgba(21,190,83,0.2)`, text `#108c3d`, border `rgba(21,190,83,0.4)`.
- **Warning** lemon `#9b6829` text on `rgba(155,104,41,0.12)` background.
- **Danger** ruby `#ea2261` text on `rgba(234,34,97,0.12)` background.
- **Info** purple `#533afd` text on `#e8e9ff` (brand-tint) background.

## 3. Typography Rules

### Font Family

- **Primary**: Söhne variable — Klim Type Foundry's editorial sans, used at light weights.
- **Fallback chain**: `sohne-var, "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif`.
- **Mono companion**: `SourceCodePro`, fallback `SFMono-Regular`, then `ui-monospace`.
- **OpenType features**: `ss01` enabled globally on all Söhne text — non-negotiable. `tnum` for tabular numerals in financial data. The two modes never overlap — a number in a paragraph uses `ss01`, a number in a data table uses `tnum`.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | OT Features | Notes |
|------|------|------|--------|-------------|----------------|-------------|-------|
| Display Hero | Söhne | 56 | 300 | 1.03 | -1.4px | ss01 | Maximum size, whisper-weight authority |
| Display Large | Söhne | 48 | 300 | 1.15 | -0.96px | ss01 | Secondary hero headlines |
| H1 | Söhne | 48 | 300 | 1.10 | -0.015em | ss01 | Page titles |
| H2 / Section | Söhne | 32 | 300 | 1.10 | -0.64px | ss01 | Feature section titles |
| H3 Large | Söhne | 26 | 300 | 1.12 | -0.26px | ss01 | Card headings, sub-sections |
| H3 | Söhne | 22 | 300 | 1.10 | -0.22px | ss01 | Smaller section heads |
| Body Large | Söhne | 18 | 300 | 1.40 | normal | ss01 | Feature descriptions, intro text |
| Body | Söhne | 16 | 300 | 1.55 | normal | ss01 | Standard reading text |
| Body Emphasis | Söhne | 16 | 400 | 1.55 | normal | ss01 | Inline emphasis, bold |
| Button | Söhne | 16 | 400 | 1.00 | normal | ss01 | Primary button text |
| Button Small | Söhne | 14 | 400 | 1.00 | normal | ss01 | Secondary/compact buttons |
| Link / Nav | Söhne | 14 | 400 | 1.00 | normal | ss01 | Navigation links |
| Caption | Söhne | 13 | 400 | 1.40 | normal | ss01 | Small labels, metadata |
| Caption Small | Söhne | 12 | 300 | 1.33 | normal | ss01 | Fine print, timestamps |
| Caption Tabular | Söhne | 12 | 300 | 1.33 | -0.36px | tnum | Financial data, numbers |
| Micro | Söhne | 10 | 300 | 1.15 | 0.1px | ss01 | Tiny labels, axis markers |
| Micro Tabular | Söhne | 10 | 300 | 1.15 | -0.3px | tnum | Chart data, small numbers |
| Code | SourceCodePro | 12 | 500 | 2.00 | normal | — | Code blocks, syntax |
| Code Bold | SourceCodePro | 12 | 700 | 2.00 | normal | — | Bold code, keywords |

### Principles

- **Light weight as signature** — weight `300` at display sizes is Stripe's most distinctive typographic choice. Where others use 600–700 to command attention, Stripe uses lightness as luxury — the text is so confident it doesn't need weight to be authoritative.
- **`ss01` everywhere** — the `ss01` stylistic set is non-negotiable. It modifies specific glyphs (alternate `a`, `g`, `l` forms) to create a more geometric, contemporary feel across all Söhne text.
- **Two OpenType modes, no overlap** — `ss01` for display/body, `tnum` for tabular numerals in financial data. Never both at once.
- **Progressive tracking** — letter-spacing tightens proportionally with size: `-1.4px` at 56px, `-0.96px` at 48px, `-0.64px` at 32px, `-0.26px` at 26px, normal at 16px and below.
- **Two-weight simplicity** — primarily 300 (body and headings) and 400 (UI/buttons). No bold (700) in the primary font.
- **Reading column ~720–800px** — the lighter type weight forces longer line lengths to feel correct, which feeds the editorial rhythm.
- **Mono is conservative** — SourceCodePro at 12px / 500 with a generous 2.00 line height for readability.

## 4. Component Stylings

### Buttons

**Primary Purple**
- Background: `#533afd`
- Text: `#ffffff`
- Padding: `8px 16px` (or `15.5px 24px 16.5px` on hero — asymmetric for optical balance)
- Radius: `4px`
- Font: 16px Söhne weight 400, `ss01`
- Hover: background → `#4434d4`
- Use: primary CTA — "Start now", "Contact sales"

**Ghost / Outlined**
- Background: transparent
- Text: `#533afd`
- Padding: `8px 16px`
- Radius: `4px`
- Border: `1px solid #b9b9f9`
- Font: 16px Söhne weight 400, `ss01`
- Hover: background → `rgba(83,58,253,0.05)`
- Use: secondary action paired with primary CTA

**Transparent Info**
- Background: transparent
- Text: `#2874ad`
- Padding: `8px 16px`
- Radius: `4px`
- Border: `1px solid rgba(43,145,223,0.2)`
- Use: tertiary/info-level action

**Neutral Ghost (disabled)**
- Background: transparent
- Text: `rgba(16,16,16,0.3)`
- Outline: `1px solid #d4dee9`
- Use: disabled or muted action

### Cards & Containers

- Background: `#ffffff`
- Border: `1px solid #e5edf5` (standard) or `1px solid #061b31` (dark accent)
- Radius: `4px` (tight) / `5px` (standard) / `6px` (comfortable) / `8px` (featured)
- Shadow standard: `rgba(0,55,112,0.10) 0 6px 22px, rgba(0,59,137,0.02) 0 4px 8px`
- Shadow elevated: `rgba(50,50,93,0.25) 0 30px 45px -30px, rgba(0,0,0,0.1) 0 18px 36px -18px`
- Hover: shadow intensifies, often adding the blue-tinted layer

### Badges, Tags, Pills

**Neutral Pill**
- Background: `#ffffff`
- Text: `#000000`
- Padding: `0 6px`
- Radius: `4px`
- Border: `1px solid #f6f9fc`
- Font: 11px weight 400

**Success Badge**
- Background: `rgba(21,190,83,0.2)`
- Text: `#108c3d`
- Padding: `1px 6px`
- Radius: `4px`
- Border: `1px solid rgba(21,190,83,0.4)`
- Font: 10px weight 300

**Magenta Decorative Tag**
- Background: `#ffd7ef`
- Text: `#ea2261`
- Border: `1px solid #ffd7ef`
- Use: hero decoration only — never an action

### Inputs & Forms

- Border: `1px solid #e5edf5`
- Radius: `4px`
- Focus: `1px solid #533afd` plus 2px ring `rgba(83,58,253,0.2)`
- Label: `#273951`, 14px Söhne weight 400, `ss01`
- Text: `#061b31`, 16px Söhne weight 400
- Placeholder: `#64748d`
- Error: border `#ea2261`, helper `#ea2261` 13px

### Navigation

- White sticky header with backdrop-filter `blur(12px)` over a translucent `rgba(255,255,255,0.7)`
- Brand logotype left-aligned in `#061b31`
- Links: Söhne 14px weight 400, `#061b31` text with `ss01`
- Container radius: `6px`
- CTA: purple `#533afd` button right-aligned ("Sign in", "Start now")
- Mobile: hamburger toggle with 6px radius

### Dark Brand Section

- Background: `#1c1e54`
- Heading: 32px Söhne weight 300, `-0.64px` tracking, white, `ss01`
- Body: 16px weight 300, `rgba(255,255,255,0.7)`
- Inner cards: `rgba(255,255,255,0.1)` border, 6px radius

### Decorative Elements

- **Dashed borders** — `1px dashed #362baa` (purple) for placeholder/drop zones; `1px dashed #ffd7ef` (magenta) for decorative.
- **Gradient accents** — ruby-to-magenta (`#ea2261` → `#f96bee`) for hero decorations only.

## 5. Layout Principles

### Spacing System

- Base unit: `8px`
- Scale: `1, 2, 4, 6, 8, 10, 11, 12, 14, 16, 18, 20, 24, 32, 40, 48, 64, 80, 96, 120`
- Density observation: dense at the small end (every 2px from 4–12), reflecting precision-oriented UI for financial data. Generous beyond 24px for chrome.

### Grid & Container

- Max content width: `~1080px` (header up to `1264px` for nav)
- Hero: centred single-column with generous padding, lightweight headlines
- Feature sections: 2–3 column grids
- Full-width dark sections (`#1c1e54`) for brand immersion
- Code/dashboard previews as contained cards with blue-tinted shadows
- Asymmetric hero grids common — content left, animated demo right

### Whitespace Philosophy

- **Precision spacing** — every gap is a deliberate typographic choice, not vast emptiness.
- **Dense data, generous chrome** — financial tables tightly packed, UI chrome generously spaced. Like a well-organised spreadsheet in a beautiful frame.
- **Section gutters** at 80–120px depending on density.

### Section Cadence

- White → dark `#1c1e54` → white alternation prevents monotony without arbitrary colour
- Brand-band pattern places the dark section as a deliberate emotional pause every 3–4 white sections

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|------|-------|-----|
| Micro | 1px | Fine-grained elements, subtle rounding |
| Standard | 4px | Buttons, inputs, badges — the workhorse |
| Comfortable | 5px | Standard card containers |
| Relaxed | 6px | Navigation, larger interactive elements |
| Large | 8px | Featured cards, hero elements |
| Pill | 9999px | Avatars only — never CTAs |

Compound radii: `0 0 6px 6px` for bottom-rounded containers (tab panels, dropdown footers).

The system has no pills or `9999px` radii on action surfaces; that geometry is reserved for badges and avatar circles. The conservative geometry signals seriousness; the saturated purple itself signals modernity.

## 7. Depth & Elevation

| Level | Treatment | Use |
|-------|-----------|-----|
| 0 — Flat | No shadow | Page background, inline text |
| 1 — Ambient | `rgba(23,23,23,0.06) 0 3px 6px` | Subtle card lift, hover hints |
| 2 — Standard | `rgba(0,55,112,0.10) 0 6px 22px, rgba(0,59,137,0.02) 0 4px 8px` | Standard cards, content panels |
| 3 — Elevated | `rgba(50,50,93,0.25) 0 30px 45px -30px, rgba(0,0,0,0.1) 0 18px 36px -18px` | Featured cards, dropdowns, popovers |
| 4 — Deep | `rgba(3,3,39,0.25) 0 14px 21px -14px, rgba(0,0,0,0.1) 0 8px 17px -8px` | Modals, floating panels |
| 5 — Ring | `2px solid #533afd` outline | Keyboard focus ring |

**Shadow Philosophy** — Stripe's shadow system is built on chromatic depth. Where most design systems use neutral gray, Stripe's primary shadow (`rgba(50,50,93,0.25)`) is a deep blue-gray that echoes the navy-purple palette. This creates shadows that don't just add depth — they add brand atmosphere. The multi-layer approach pairs blue-tinted shadow with a pure black secondary at a different offset, creating parallax-like depth where the branded shadow sits farther from the element and the neutral shadow sits closer. Negative spread values (`-30px`, `-18px`) keep elevation vertical and controlled.

## 8. Interaction & Motion

### Easing Curves

- **Standard** `cubic-bezier(0.4, 0, 0.2, 1)` — default for most state transitions
- **Emphasized** `cubic-bezier(0.2, 0, 0, 1)` — for hero entrance animations
- **Out** `cubic-bezier(0, 0, 0.2, 1)` — exits and dismissals

### Duration Buckets

- Fast: `150ms` — colour swaps, hover ring fades
- Standard: `220ms` — button hover, card lift, dropdown open
- Slow: `320ms` — modal entrance, hero reveals

### Per-Component Micro-States

- **Button hover** — background colour shift (`220ms` standard ease) + subtle `translate-Y(-1px)`. Shadow does NOT intensify on buttons.
- **Card hover** — shadow intensifies from Standard (Level 2) to Elevated (Level 3) over `220ms`. No translate.
- **Link hover** — underline `text-decoration` appears, never colour change. Underline animates from 0 to 100% width over `150ms`.
- **Input focus** — border `#e5edf5` → `#533afd` plus 2px ring `rgba(83,58,253,0.2)` over `150ms`.
- **Dropdown open** — opacity 0→1 + `translate-Y(-4px)` over `220ms` emphasized ease.

### Page Transitions

- Marketing pages use no client-side transitions; standard browser navigation. Heavy demo modules fade in over `320ms` once in viewport via Intersection Observer.

### Reduced Motion Strategy

- `@media (prefers-reduced-motion: reduce)` — all transitions degrade to opacity-only, `120ms` linear. Translate, scale, and rotate are removed. Auto-playing hero animations are paused.

## 9. Accessibility & A11y

### Contrast Pairs

- `#061b31` body on `#ffffff` bg — **14.8:1** (AAA at body sizes)
- `#64748d` body on `#ffffff` bg — **4.6:1** (AA at body sizes)
- `#ffffff` text on `#533afd` brand — **4.6:1** (AA at body sizes; AA Large at 18px+)
- `#533afd` link on `#ffffff` bg — **6.8:1** (AA Large)
- `#108c3d` success text on `rgba(21,190,83,0.2)` — **4.7:1** (AA)
- `#ffffff` body on `#1c1e54` brand-dark — **15.2:1** (AAA)

### Focus Indicators

- Default focus ring: `2px solid #533afd` with `2px` offset (transparent gap)
- On dark sections: ring colour becomes `#b9b9f9` (purple-light) for contrast
- Inputs use a 2px purple ring inset rather than offset

### ARIA Patterns

- **Combobox** — `role="combobox"` with `aria-expanded`, `aria-controls` to listbox id
- **Dialog** — `role="dialog"` `aria-modal="true"` with focus trap and `aria-labelledby` pointing to title
- **Listbox** — `role="listbox"` with `aria-activedescendant` for keyboard selection
- **Tab panels** — `role="tablist"` / `role="tab"` / `role="tabpanel"` with arrow-key navigation

### Keyboard Navigation

- Tab order follows DOM source order; no `tabindex` overrides except `-1` for offscreen
- Skip-to-content link in header (visible on focus only)
- All interactive elements reachable via Tab
- `Esc` closes dropdowns, modals, popovers
- Arrow keys navigate within tablists, comboboxes, and menubars

### Screen Reader Hints

- Icons inside buttons get `aria-hidden="true"` when paired with visible text
- Icon-only buttons get `aria-label` matching tooltip
- Live regions (`aria-live="polite"`) for inline form validation
- `aria-describedby` for helper text under inputs

### Reduced Motion

- Honoured via `prefers-reduced-motion: reduce` — all non-essential animation removed; opacity-only fades retained for state legibility.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |
|------|-------|-------------|
| Mobile | <640px | Single column, reduced heading sizes, stacked cards |
| Tablet | 640–1024px | 2-column grids, moderate padding |
| Desktop | 1024–1280px | Full layout, 3-column feature grids |
| Wide | ≥1280px | Centred content with generous margins |

### Touch Targets

- Buttons use comfortable padding (`8px–16px` vertical) with a `44×44px` effective hit area
- Navigation links 14px with `12–16px` horizontal spacing for tap forgiveness
- Badges have minimum `6px` horizontal padding

### Collapsing Strategy

- Hero: `56px` display → `32px` mobile, weight 300 maintained
- Navigation: horizontal links + CTA → hamburger toggle
- Feature cards: 3-column → 2-column → single column stacked
- Dark brand sections maintain full-width treatment, internal padding reduces from 96px to 48px
- Financial data tables: horizontal scroll on mobile — never stacked
- Section spacing: `64px+` → `40px` on mobile

### Image Behavior

- Dashboard/product screenshots maintain blue-tinted shadow at all sizes
- Hero gradient decorations simplify on mobile (single layer instead of layered)
- Code blocks maintain `SourceCodePro` treatment, may horizontally scroll
- Card images maintain consistent `4–6px` border-radius

### Container Queries

- Cards within feature grid use container queries to switch from horizontal to stacked layout when their container drops below 360px — independent of viewport.

## 11. Content & Voice

### Tone

Confident, technical, editorially restrained. The voice assumes the reader is intelligent and busy — Stripe never explains payments to its audience, it explains what's new about Stripe's approach. Headlines are short, declarative, often single-sentence claims that read like magazine standfirsts. Body copy is generous but never marketing-thick.

### Microcopy Patterns

- **Button verbs** — `Start now`, `Contact sales`, `Sign in`, `Read docs`. Never `Click here`, never `Get started today`.
- **Error message recipe** — `What went wrong + What to do next`. Example: "Card declined. Try a different payment method or contact your bank."
- **Success confirmations** — past-tense, terse: `Payment received`, `Account created`, `Webhook delivered`.
- **Inline validation** — appears under field, ruby-coloured, 13px Söhne 400.

### Empty States

- Direct: `No transactions yet` followed by primary CTA `Create test charge` and a link `Read the docs`.
- No mascots, no apologetic copy, no "Looks like…".
- Explanatory paragraph at 16px / 300 weight, body slate `#64748d`.

### CTA Verb Conventions

- Primary: `Start now`, `Start with Stripe`, `Contact sales`
- Secondary: `Read docs`, `See pricing`, `Watch demo`
- Tertiary: `Learn more →` (with right-arrow glyph)

## 12. Dark Mode & Theming

Stripe ships **dark-section bands** (`#1c1e54` brand-dark, `#0d253d` neutral-975) inside an otherwise light marketing surface — but does NOT offer a full dark-mode token swap on stripe.com. The dashboard product has a full dark theme; the marketing site does not.

When in a dark band:
- Background: `#1c1e54`
- Text: `#ffffff` for headings, `rgba(255,255,255,0.7)` for body
- Borders: `rgba(255,255,255,0.1)`
- Cards: `rgba(255,255,255,0.06)` background with `rgba(255,255,255,0.1)` border
- CTA: same `#533afd` purple — colour does not flip
- Code blocks invert: `#0d253d` background, `#e6e9f1` text

Implementations targeting Stripe-flavour can offer a full dark mode by mapping:
- `bg` `#ffffff` → `#0d253d`
- `text` `#061b31` → `#f6f9fc`
- `surface` `#ffffff` → `#1c1e54`
- `border` `#e5edf5` → `rgba(255,255,255,0.1)`
- `brand` `#533afd` stays — colour is brand-locked

## 13. Lineage & Influences

Stripe pioneered the editorial fintech aesthetic — financial-grade trust delivered through magazine typography rather than blue-suit corporate gloss. Headlines use Söhne variable at weight `300` (light), unusual for a tech company; body text uses the same family. The text colour is `#061b31` (deep navy) rather than pure black, softening the editorial feel further. The signature `#533afd` purple appears only on action surfaces with a tight `4px` radius — the conservative geometry signals seriousness, while the saturated purple itself signals modernity. Cool-toned shadows reinforce the financial-blue sensibility throughout.

Where Vercel goes black-on-near-white at weight 600 for tech polish, Stripe goes navy-on-pure-white at weight 300 for editorial gravitas. Where Linear builds depth from flat hairlines, Stripe layers branded shadow over neutral shadow for parallax-grade depth. Where Square commits to monochrome ink, Stripe commits to the smallest possible chromatic accent (one purple) and treats it as scarce.

The lineage runs through Klim Type Foundry's editorial typeface tradition, Bloomberg/FT's financial-broadsheet colour discipline (navy text on white, blue accent), and Apple's SF Pro Display tracking baseline. Stripe rejects the gradient maximalism of mid-2010s SaaS, the playful pastel of Brex, and the corporate-blue conservatism of legacy banks.

**Named influences:**
- Söhne (Klim Type Foundry) — headline typeface, editorial serif-replacement sans
- Bloomberg Terminal / FT Online — financial-broadsheet colour discipline
- Apple SF Pro Display — type fallback and tracking baseline

## 14. Do's and Don'ts

### Do

- Use Söhne variable with `ss01` on every text element — the stylistic set IS the brand
- Use weight `300` for all headlines and body text — lightness is the signature
- Apply blue-tinted shadows (`rgba(50,50,93,0.25)`) for all elevated elements
- Use `#061b31` (deep navy) for headings instead of `#000000` — the warmth matters
- Keep border-radius between `4px–8px` — conservative rounding is intentional
- Use `tnum` for any tabular/financial number display
- Layer shadows: blue-tinted far + neutral close for depth parallax
- Use `#533afd` purple as the primary interactive/CTA colour
- Cap reading width around 720–800px — light type needs longer measure
- Use SourceCodePro at 12/500 with 2.00 line-height for code blocks
- Reserve dark `#1c1e54` bands as deliberate emotional pauses every 3–4 white sections
- Pair primary purple button with ghost outlined secondary — never two filled buttons

### Don't

- Don't use weight 600–700 for Söhne headlines — weight 300 is the brand voice
- Don't use large border-radius (`12px+`, pill shapes) on cards or buttons — Stripe is conservative
- Don't use neutral gray shadows — always tint with blue
- Don't skip `ss01` on any Söhne text — the alternate glyphs define the personality
- Don't use pure black `#000000` for headings — always `#061b31` deep navy
- Don't use warm accent colours (orange, yellow) for interactive elements — purple is primary
- Don't apply positive letter-spacing at display sizes — Stripe tracks tight
- Don't use the magenta/ruby accents for buttons or links — they're decorative/gradient only
- Don't swap Söhne for Inter without changing the weight scheme — Inter at 300 reads anemic
- Don't apply pure-black shadows — the cool navy hint keeps the system editorial rather than corporate-blue
- Don't introduce a secondary fill colour on CTAs — purple is the only action colour
- Don't add gradient overlays to UI — gradients are hero-decoration only

## 15. Agent Prompt Guide

### Quick Color Reference

- Primary CTA: Stripe Purple `#533afd`
- CTA Hover: Purple Dark `#4434d4`
- Background: Pure White `#ffffff`
- Heading text: Deep Navy `#061b31`
- Body text: Slate `#64748d`
- Label text: Dark Slate `#273951`
- Border: Soft Blue `#e5edf5`
- Link: Stripe Purple `#533afd`
- Dark section: Brand Dark `#1c1e54`
- Success: `rgba(21,190,83,0.2)` bg / `#108c3d` text
- Accent decorative: Ruby `#ea2261`, Magenta `#f96bee`

### Example Component Prompts

- "Create a hero section on white background. Headline at 48px Söhne weight 300, line-height 1.15, letter-spacing -0.96px, color `#061b31`, font-feature-settings 'ss01'. Subtitle at 18px weight 300, line-height 1.40, color `#64748d`. Purple CTA button (`#533afd`, 4px radius, 8px 16px padding, white text) plus ghost button (transparent, 1px solid `#b9b9f9`, `#533afd` text, 4px radius)."
- "Design a card: white background, 1px solid `#e5edf5` border, 6px radius. Shadow: `rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px`. Title at 22px Söhne weight 300, letter-spacing -0.22px, color `#061b31`, 'ss01'. Body at 16px weight 300, `#64748d`."
- "Build a success badge: `rgba(21,190,83,0.2)` background, `#108c3d` text, 4px radius, 1px 6px padding, 10px Söhne weight 300, border `1px solid rgba(21,190,83,0.4)`."
- "Create navigation: white sticky header with backdrop-filter `blur(12px)`. Söhne 14px weight 400 for links, `#061b31` text, 'ss01'. Purple CTA 'Start now' right-aligned (`#533afd` bg, white text, 4px radius). Nav container 6px radius."
- "Design a dark brand section: `#1c1e54` background, white text. Headline 32px Söhne weight 300, letter-spacing -0.64px, 'ss01'. Body 16px weight 300, `rgba(255,255,255,0.7)`. Cards inside use `rgba(255,255,255,0.1)` border with 6px radius."
- "Build a financial data table: tabular figures via `font-feature-settings: 'tnum'`, 12px Söhne weight 300, line-height 1.33, letter-spacing -0.36px. Numerics right-aligned, labels left-aligned. Hairline `#e5edf5` rules between rows, no zebra striping."

### Iteration Guide

1. Always enable `font-feature-settings: "ss01"` on Söhne text — this is the brand's typographic DNA
2. Weight `300` is the default; use `400` only for buttons/links/navigation
3. Shadow formula: `rgba(50,50,93,0.25) 0 Y1 B1 -S1, rgba(0,0,0,0.1) 0 Y2 B2 -S2` where Y1/B1 are larger (far shadow) and Y2/B2 are smaller (near shadow)
4. Heading colour is `#061b31` (deep navy), body is `#64748d` (slate), labels are `#273951` (dark slate)
5. Border-radius stays in the `4px–8px` range — never pill shapes or large rounding on action surfaces
6. Use `tnum` for any numbers in tables, charts, or financial displays
7. Dark sections use `#1c1e54` — not black, not gray, but a deep branded indigo
8. SourceCodePro for code at `12px/500` with `2.00` line-height (very generous for readability)
Prose

1. Visual Theme & Atmosphere

Stripe’s marketing site is the gold standard of editorial fintech — a system that reads simultaneously technical and luxurious, precise and warm. The page opens on a clean white canvas (#ffffff) with deep navy headings (#061b31) and a signature purple (#533afd) that anchors both brand and interaction. This isn’t the cold clinical purple of enterprise software; it’s a rich saturated violet that reads as confident and premium. The overall impression is of a financial institution redesigned by a world-class type foundry.

The custom Söhne variable typeface is the defining element of Stripe’s visual identity. Every text element enables the OpenType ss01 stylistic set, which modifies character shapes for a distinctly geometric, modern feel. At display sizes (48–56px) Söhne runs at weight 300 — an extraordinarily light weight for headlines that creates an ethereal, almost whispered authority. This is the opposite of the “bold hero headline” convention; Stripe’s headlines feel like they don’t need to shout. Negative letter-spacing (-1.4px at 56px, -0.96px at 48px) tightens the text into dense engineered blocks.

What truly distinguishes Stripe is its shadow system. Rather than the flat or single-layer approach of most sites, Stripe uses multi-layer blue-tinted shadows: the signature rgba(50,50,93,0.25) combined with rgba(0,0,0,0.1) creates depth with a cool, almost atmospheric character — like elements floating in a twilight sky. The blue-gray undertone of the primary shadow ties directly to the navy-purple brand palette, making even elevation feel on-brand.

Cool-toned card shadows (rgba(0,55,112,0.10) at 6px / 22px spread) reinforce the financial-blue sensibility throughout. Where Vercel goes black-on-near-white at weight 600 for tech polish, Stripe goes navy-on-pure-white at weight 300 for editorial gravitas. Where Linear builds depth from flat hairlines, Stripe layers branded shadow over neutral shadow for parallax-grade depth.

Key Characteristics:

  • Söhne variable with OpenType ss01 on every text element — the stylistic set IS the brand
  • Weight 300 as the signature headline weight — light, confident, anti-convention
  • Negative letter-spacing at display sizes (-1.4px at 56px, progressive relaxation downward)
  • Blue-tinted multi-layer shadows using rgba(50,50,93,0.25) — elevation that feels brand-coloured
  • Deep navy (#061b31) headings instead of black — warm, premium, financial-grade
  • Conservative border-radius (4px8px) — nothing pill-shaped, nothing harsh
  • Ruby (#ea2261) and magenta (#f96bee) accents reserved for gradient and decorative elements
  • SourceCodePro as the monospace companion for code and technical labels
  • tnum tabular figures for any number set in financial data tables

2. Color Palette & Roles

Primary

  • Stripe Purple (#533afd): primary brand, CTA backgrounds, link text, interactive highlights. A saturated blue-violet that anchors the entire system.
  • Deep Navy (#061b31) [→ --hds-color-heading-solid]: primary heading colour. Not black, not gray — a very dark blue that adds warmth and depth to text.
  • Pure White (#ffffff): page background, card surfaces, button text on dark backgrounds.

Brand & Dark

  • Brand Dark (#1c1e54) [→ --hds-color-util-brand-900]: deep indigo for dark sections, footer backgrounds, immersive brand moments.
  • Dark Navy (#0d253d) [→ --hds-color-core-neutral-975]: the darkest neutral — almost-black with a blue undertone for maximum depth without harshness.
  • Bg Quiet (#f8fafd): subtle off-white for alternating section panels.

Accent

  • Ruby (#ea2261) [→ --hds-color-accentColorMode-ruby-icon-solid]: warm red-pink for icons, alerts, and accent elements. Decorative only — never a button fill.
  • Magenta (#f96bee) [→ --hds-color-accentColorMode-magenta-icon-gradientMiddle]: vivid pink-purple for gradient stops and decorative highlights.
  • Magenta Light (#ffd7ef) [→ --hds-color-util-accent-magenta-100]: tinted surface for magenta-themed cards.
  • Lemon (#9b6829) [→ --hds-color-core-lemon-500]: warning and highlight accent.

Interactive

  • Link / Primary (#533afd): active and selected element foreground.
  • Purple Hover (#4434d4): pressed and hover on primary buttons.
  • Purple Deep (#2e2b8c) [→ --hds-color-button-ui-iconHover]: dark purple for icon hover.
  • Purple Light (#b9b9f9) [→ --hds-color-action-bg-subduedHover]: soft lavender for subdued hover backgrounds.
  • Purple Mid (#665efd) [→ --hds-color-input-selector-text-range]: range selector and input highlight.

Neutral Scale

  • Heading (#061b31): primary headings, nav text, strong labels.
  • Label (#273951) [→ --hds-color-input-text-label]: form labels, secondary headings.
  • Body (#64748d): secondary text, descriptions, captions.
  • Soft (#50617a): supporting copy on light surfaces.
  • Faint (rgba(16,16,16,0.3)): disabled labels.

Surface & Borders

  • Border Default (#e5edf5): standard border for cards, dividers, containers.
  • Border Cool (#d4dee9): slightly stronger neutral border.
  • Border Strong (#061b31): dark accent border for high-emphasis cards.
  • Border Purple (#b9b9f9): active/selected state borders on buttons and inputs.
  • Border Soft Purple (#d6d9fc): subtle purple-tinted borders for secondary elements.
  • Border Magenta (#ffd7ef): pink-tinted borders for magenta-themed elements.
  • Border Dashed (#362baa): dashed borders for drop zones and placeholder elements.

Shadow Colors

  • Shadow Blue (rgba(50,50,93,0.25)): the signature blue-tinted primary shadow. Far layer.
  • Shadow Deep Blue (rgba(3,3,39,0.25)): deeper blue shadow for elevated modals.
  • Shadow Black (rgba(0,0,0,0.1)): secondary neutral layer beneath the branded blue.
  • Shadow Ambient (rgba(23,23,23,0.08)): soft ambient shadow for subtle elevation.
  • Shadow Soft (rgba(23,23,23,0.06)): minimal lift for hover hints.

Semantic

  • Success background rgba(21,190,83,0.2), text #108c3d, border rgba(21,190,83,0.4).
  • Warning lemon #9b6829 text on rgba(155,104,41,0.12) background.
  • Danger ruby #ea2261 text on rgba(234,34,97,0.12) background.
  • Info purple #533afd text on #e8e9ff (brand-tint) background.

3. Typography Rules

Font Family

  • Primary: Söhne variable — Klim Type Foundry’s editorial sans, used at light weights.
  • Fallback chain: sohne-var, "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif.
  • Mono companion: SourceCodePro, fallback SFMono-Regular, then ui-monospace.
  • OpenType features: ss01 enabled globally on all Söhne text — non-negotiable. tnum for tabular numerals in financial data. The two modes never overlap — a number in a paragraph uses ss01, a number in a data table uses tnum.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingOT FeaturesNotes
Display HeroSöhne563001.03-1.4pxss01Maximum size, whisper-weight authority
Display LargeSöhne483001.15-0.96pxss01Secondary hero headlines
H1Söhne483001.10-0.015emss01Page titles
H2 / SectionSöhne323001.10-0.64pxss01Feature section titles
H3 LargeSöhne263001.12-0.26pxss01Card headings, sub-sections
H3Söhne223001.10-0.22pxss01Smaller section heads
Body LargeSöhne183001.40normalss01Feature descriptions, intro text
BodySöhne163001.55normalss01Standard reading text
Body EmphasisSöhne164001.55normalss01Inline emphasis, bold
ButtonSöhne164001.00normalss01Primary button text
Button SmallSöhne144001.00normalss01Secondary/compact buttons
Link / NavSöhne144001.00normalss01Navigation links
CaptionSöhne134001.40normalss01Small labels, metadata
Caption SmallSöhne123001.33normalss01Fine print, timestamps
Caption TabularSöhne123001.33-0.36pxtnumFinancial data, numbers
MicroSöhne103001.150.1pxss01Tiny labels, axis markers
Micro TabularSöhne103001.15-0.3pxtnumChart data, small numbers
CodeSourceCodePro125002.00normalCode blocks, syntax
Code BoldSourceCodePro127002.00normalBold code, keywords

Principles

  • Light weight as signature — weight 300 at display sizes is Stripe’s most distinctive typographic choice. Where others use 600–700 to command attention, Stripe uses lightness as luxury — the text is so confident it doesn’t need weight to be authoritative.
  • ss01 everywhere — the ss01 stylistic set is non-negotiable. It modifies specific glyphs (alternate a, g, l forms) to create a more geometric, contemporary feel across all Söhne text.
  • Two OpenType modes, no overlapss01 for display/body, tnum for tabular numerals in financial data. Never both at once.
  • Progressive tracking — letter-spacing tightens proportionally with size: -1.4px at 56px, -0.96px at 48px, -0.64px at 32px, -0.26px at 26px, normal at 16px and below.
  • Two-weight simplicity — primarily 300 (body and headings) and 400 (UI/buttons). No bold (700) in the primary font.
  • Reading column ~720–800px — the lighter type weight forces longer line lengths to feel correct, which feeds the editorial rhythm.
  • Mono is conservative — SourceCodePro at 12px / 500 with a generous 2.00 line height for readability.

4. Component Stylings

Buttons

Primary Purple

  • Background: #533afd
  • Text: #ffffff
  • Padding: 8px 16px (or 15.5px 24px 16.5px on hero — asymmetric for optical balance)
  • Radius: 4px
  • Font: 16px Söhne weight 400, ss01
  • Hover: background → #4434d4
  • Use: primary CTA — “Start now”, “Contact sales”

Ghost / Outlined

  • Background: transparent
  • Text: #533afd
  • Padding: 8px 16px
  • Radius: 4px
  • Border: 1px solid #b9b9f9
  • Font: 16px Söhne weight 400, ss01
  • Hover: background → rgba(83,58,253,0.05)
  • Use: secondary action paired with primary CTA

Transparent Info

  • Background: transparent
  • Text: #2874ad
  • Padding: 8px 16px
  • Radius: 4px
  • Border: 1px solid rgba(43,145,223,0.2)
  • Use: tertiary/info-level action

Neutral Ghost (disabled)

  • Background: transparent
  • Text: rgba(16,16,16,0.3)
  • Outline: 1px solid #d4dee9
  • Use: disabled or muted action

Cards & Containers

  • Background: #ffffff
  • Border: 1px solid #e5edf5 (standard) or 1px solid #061b31 (dark accent)
  • Radius: 4px (tight) / 5px (standard) / 6px (comfortable) / 8px (featured)
  • Shadow standard: rgba(0,55,112,0.10) 0 6px 22px, rgba(0,59,137,0.02) 0 4px 8px
  • Shadow elevated: rgba(50,50,93,0.25) 0 30px 45px -30px, rgba(0,0,0,0.1) 0 18px 36px -18px
  • Hover: shadow intensifies, often adding the blue-tinted layer

Badges, Tags, Pills

Neutral Pill

  • Background: #ffffff
  • Text: #000000
  • Padding: 0 6px
  • Radius: 4px
  • Border: 1px solid #f6f9fc
  • Font: 11px weight 400

Success Badge

  • Background: rgba(21,190,83,0.2)
  • Text: #108c3d
  • Padding: 1px 6px
  • Radius: 4px
  • Border: 1px solid rgba(21,190,83,0.4)
  • Font: 10px weight 300

Magenta Decorative Tag

  • Background: #ffd7ef
  • Text: #ea2261
  • Border: 1px solid #ffd7ef
  • Use: hero decoration only — never an action

Inputs & Forms

  • Border: 1px solid #e5edf5
  • Radius: 4px
  • Focus: 1px solid #533afd plus 2px ring rgba(83,58,253,0.2)
  • Label: #273951, 14px Söhne weight 400, ss01
  • Text: #061b31, 16px Söhne weight 400
  • Placeholder: #64748d
  • Error: border #ea2261, helper #ea2261 13px
  • White sticky header with backdrop-filter blur(12px) over a translucent rgba(255,255,255,0.7)
  • Brand logotype left-aligned in #061b31
  • Links: Söhne 14px weight 400, #061b31 text with ss01
  • Container radius: 6px
  • CTA: purple #533afd button right-aligned (“Sign in”, “Start now”)
  • Mobile: hamburger toggle with 6px radius

Dark Brand Section

  • Background: #1c1e54
  • Heading: 32px Söhne weight 300, -0.64px tracking, white, ss01
  • Body: 16px weight 300, rgba(255,255,255,0.7)
  • Inner cards: rgba(255,255,255,0.1) border, 6px radius

Decorative Elements

  • Dashed borders1px dashed #362baa (purple) for placeholder/drop zones; 1px dashed #ffd7ef (magenta) for decorative.
  • Gradient accents — ruby-to-magenta (#ea2261#f96bee) for hero decorations only.

5. Layout Principles

Spacing System

  • Base unit: 8px
  • Scale: 1, 2, 4, 6, 8, 10, 11, 12, 14, 16, 18, 20, 24, 32, 40, 48, 64, 80, 96, 120
  • Density observation: dense at the small end (every 2px from 4–12), reflecting precision-oriented UI for financial data. Generous beyond 24px for chrome.

Grid & Container

  • Max content width: ~1080px (header up to 1264px for nav)
  • Hero: centred single-column with generous padding, lightweight headlines
  • Feature sections: 2–3 column grids
  • Full-width dark sections (#1c1e54) for brand immersion
  • Code/dashboard previews as contained cards with blue-tinted shadows
  • Asymmetric hero grids common — content left, animated demo right

Whitespace Philosophy

  • Precision spacing — every gap is a deliberate typographic choice, not vast emptiness.
  • Dense data, generous chrome — financial tables tightly packed, UI chrome generously spaced. Like a well-organised spreadsheet in a beautiful frame.
  • Section gutters at 80–120px depending on density.

Section Cadence

  • White → dark #1c1e54 → white alternation prevents monotony without arbitrary colour
  • Brand-band pattern places the dark section as a deliberate emotional pause every 3–4 white sections

6. Shapes & Radius Scale

TierValueUse
Micro1pxFine-grained elements, subtle rounding
Standard4pxButtons, inputs, badges — the workhorse
Comfortable5pxStandard card containers
Relaxed6pxNavigation, larger interactive elements
Large8pxFeatured cards, hero elements
Pill9999pxAvatars only — never CTAs

Compound radii: 0 0 6px 6px for bottom-rounded containers (tab panels, dropdown footers).

The system has no pills or 9999px radii on action surfaces; that geometry is reserved for badges and avatar circles. The conservative geometry signals seriousness; the saturated purple itself signals modernity.

7. Depth & Elevation

LevelTreatmentUse
0 — FlatNo shadowPage background, inline text
1 — Ambientrgba(23,23,23,0.06) 0 3px 6pxSubtle card lift, hover hints
2 — Standardrgba(0,55,112,0.10) 0 6px 22px, rgba(0,59,137,0.02) 0 4px 8pxStandard cards, content panels
3 — Elevatedrgba(50,50,93,0.25) 0 30px 45px -30px, rgba(0,0,0,0.1) 0 18px 36px -18pxFeatured cards, dropdowns, popovers
4 — Deeprgba(3,3,39,0.25) 0 14px 21px -14px, rgba(0,0,0,0.1) 0 8px 17px -8pxModals, floating panels
5 — Ring2px solid #533afd outlineKeyboard focus ring

Shadow Philosophy — Stripe’s shadow system is built on chromatic depth. Where most design systems use neutral gray, Stripe’s primary shadow (rgba(50,50,93,0.25)) is a deep blue-gray that echoes the navy-purple palette. This creates shadows that don’t just add depth — they add brand atmosphere. The multi-layer approach pairs blue-tinted shadow with a pure black secondary at a different offset, creating parallax-like depth where the branded shadow sits farther from the element and the neutral shadow sits closer. Negative spread values (-30px, -18px) keep elevation vertical and controlled.

8. Interaction & Motion

Easing Curves

  • Standard cubic-bezier(0.4, 0, 0.2, 1) — default for most state transitions
  • Emphasized cubic-bezier(0.2, 0, 0, 1) — for hero entrance animations
  • Out cubic-bezier(0, 0, 0.2, 1) — exits and dismissals

Duration Buckets

  • Fast: 150ms — colour swaps, hover ring fades
  • Standard: 220ms — button hover, card lift, dropdown open
  • Slow: 320ms — modal entrance, hero reveals

Per-Component Micro-States

  • Button hover — background colour shift (220ms standard ease) + subtle translate-Y(-1px). Shadow does NOT intensify on buttons.
  • Card hover — shadow intensifies from Standard (Level 2) to Elevated (Level 3) over 220ms. No translate.
  • Link hover — underline text-decoration appears, never colour change. Underline animates from 0 to 100% width over 150ms.
  • Input focus — border #e5edf5#533afd plus 2px ring rgba(83,58,253,0.2) over 150ms.
  • Dropdown open — opacity 0→1 + translate-Y(-4px) over 220ms emphasized ease.

Page Transitions

  • Marketing pages use no client-side transitions; standard browser navigation. Heavy demo modules fade in over 320ms once in viewport via Intersection Observer.

Reduced Motion Strategy

  • @media (prefers-reduced-motion: reduce) — all transitions degrade to opacity-only, 120ms linear. Translate, scale, and rotate are removed. Auto-playing hero animations are paused.

9. Accessibility & A11y

Contrast Pairs

  • #061b31 body on #ffffff bg — 14.8:1 (AAA at body sizes)
  • #64748d body on #ffffff bg — 4.6:1 (AA at body sizes)
  • #ffffff text on #533afd brand — 4.6:1 (AA at body sizes; AA Large at 18px+)
  • #533afd link on #ffffff bg — 6.8:1 (AA Large)
  • #108c3d success text on rgba(21,190,83,0.2)4.7:1 (AA)
  • #ffffff body on #1c1e54 brand-dark — 15.2:1 (AAA)

Focus Indicators

  • Default focus ring: 2px solid #533afd with 2px offset (transparent gap)
  • On dark sections: ring colour becomes #b9b9f9 (purple-light) for contrast
  • Inputs use a 2px purple ring inset rather than offset

ARIA Patterns

  • Comboboxrole="combobox" with aria-expanded, aria-controls to listbox id
  • Dialogrole="dialog" aria-modal="true" with focus trap and aria-labelledby pointing to title
  • Listboxrole="listbox" with aria-activedescendant for keyboard selection
  • Tab panelsrole="tablist" / role="tab" / role="tabpanel" with arrow-key navigation

Keyboard Navigation

  • Tab order follows DOM source order; no tabindex overrides except -1 for offscreen
  • Skip-to-content link in header (visible on focus only)
  • All interactive elements reachable via Tab
  • Esc closes dropdowns, modals, popovers
  • Arrow keys navigate within tablists, comboboxes, and menubars

Screen Reader Hints

  • Icons inside buttons get aria-hidden="true" when paired with visible text
  • Icon-only buttons get aria-label matching tooltip
  • Live regions (aria-live="polite") for inline form validation
  • aria-describedby for helper text under inputs

Reduced Motion

  • Honoured via prefers-reduced-motion: reduce — all non-essential animation removed; opacity-only fades retained for state legibility.

10. Responsive Behavior

Breakpoints

NameWidthKey Changes
Mobile<640pxSingle column, reduced heading sizes, stacked cards
Tablet640–1024px2-column grids, moderate padding
Desktop1024–1280pxFull layout, 3-column feature grids
Wide≥1280pxCentred content with generous margins

Touch Targets

  • Buttons use comfortable padding (8px–16px vertical) with a 44×44px effective hit area
  • Navigation links 14px with 12–16px horizontal spacing for tap forgiveness
  • Badges have minimum 6px horizontal padding

Collapsing Strategy

  • Hero: 56px display → 32px mobile, weight 300 maintained
  • Navigation: horizontal links + CTA → hamburger toggle
  • Feature cards: 3-column → 2-column → single column stacked
  • Dark brand sections maintain full-width treatment, internal padding reduces from 96px to 48px
  • Financial data tables: horizontal scroll on mobile — never stacked
  • Section spacing: 64px+40px on mobile

Image Behavior

  • Dashboard/product screenshots maintain blue-tinted shadow at all sizes
  • Hero gradient decorations simplify on mobile (single layer instead of layered)
  • Code blocks maintain SourceCodePro treatment, may horizontally scroll
  • Card images maintain consistent 4–6px border-radius

Container Queries

  • Cards within feature grid use container queries to switch from horizontal to stacked layout when their container drops below 360px — independent of viewport.

11. Content & Voice

Tone

Confident, technical, editorially restrained. The voice assumes the reader is intelligent and busy — Stripe never explains payments to its audience, it explains what’s new about Stripe’s approach. Headlines are short, declarative, often single-sentence claims that read like magazine standfirsts. Body copy is generous but never marketing-thick.

Microcopy Patterns

  • Button verbsStart now, Contact sales, Sign in, Read docs. Never Click here, never Get started today.
  • Error message recipeWhat went wrong + What to do next. Example: “Card declined. Try a different payment method or contact your bank.”
  • Success confirmations — past-tense, terse: Payment received, Account created, Webhook delivered.
  • Inline validation — appears under field, ruby-coloured, 13px Söhne 400.

Empty States

  • Direct: No transactions yet followed by primary CTA Create test charge and a link Read the docs.
  • No mascots, no apologetic copy, no “Looks like…”.
  • Explanatory paragraph at 16px / 300 weight, body slate #64748d.

CTA Verb Conventions

  • Primary: Start now, Start with Stripe, Contact sales
  • Secondary: Read docs, See pricing, Watch demo
  • Tertiary: Learn more → (with right-arrow glyph)

12. Dark Mode & Theming

Stripe ships dark-section bands (#1c1e54 brand-dark, #0d253d neutral-975) inside an otherwise light marketing surface — but does NOT offer a full dark-mode token swap on stripe.com. The dashboard product has a full dark theme; the marketing site does not.

When in a dark band:

  • Background: #1c1e54
  • Text: #ffffff for headings, rgba(255,255,255,0.7) for body
  • Borders: rgba(255,255,255,0.1)
  • Cards: rgba(255,255,255,0.06) background with rgba(255,255,255,0.1) border
  • CTA: same #533afd purple — colour does not flip
  • Code blocks invert: #0d253d background, #e6e9f1 text

Implementations targeting Stripe-flavour can offer a full dark mode by mapping:

  • bg #ffffff#0d253d
  • text #061b31#f6f9fc
  • surface #ffffff#1c1e54
  • border #e5edf5rgba(255,255,255,0.1)
  • brand #533afd stays — colour is brand-locked

13. Lineage & Influences

Stripe pioneered the editorial fintech aesthetic — financial-grade trust delivered through magazine typography rather than blue-suit corporate gloss. Headlines use Söhne variable at weight 300 (light), unusual for a tech company; body text uses the same family. The text colour is #061b31 (deep navy) rather than pure black, softening the editorial feel further. The signature #533afd purple appears only on action surfaces with a tight 4px radius — the conservative geometry signals seriousness, while the saturated purple itself signals modernity. Cool-toned shadows reinforce the financial-blue sensibility throughout.

Where Vercel goes black-on-near-white at weight 600 for tech polish, Stripe goes navy-on-pure-white at weight 300 for editorial gravitas. Where Linear builds depth from flat hairlines, Stripe layers branded shadow over neutral shadow for parallax-grade depth. Where Square commits to monochrome ink, Stripe commits to the smallest possible chromatic accent (one purple) and treats it as scarce.

The lineage runs through Klim Type Foundry’s editorial typeface tradition, Bloomberg/FT’s financial-broadsheet colour discipline (navy text on white, blue accent), and Apple’s SF Pro Display tracking baseline. Stripe rejects the gradient maximalism of mid-2010s SaaS, the playful pastel of Brex, and the corporate-blue conservatism of legacy banks.

Named influences:

  • Söhne (Klim Type Foundry) — headline typeface, editorial serif-replacement sans
  • Bloomberg Terminal / FT Online — financial-broadsheet colour discipline
  • Apple SF Pro Display — type fallback and tracking baseline

14. Do’s and Don’ts

Do

  • Use Söhne variable with ss01 on every text element — the stylistic set IS the brand
  • Use weight 300 for all headlines and body text — lightness is the signature
  • Apply blue-tinted shadows (rgba(50,50,93,0.25)) for all elevated elements
  • Use #061b31 (deep navy) for headings instead of #000000 — the warmth matters
  • Keep border-radius between 4px–8px — conservative rounding is intentional
  • Use tnum for any tabular/financial number display
  • Layer shadows: blue-tinted far + neutral close for depth parallax
  • Use #533afd purple as the primary interactive/CTA colour
  • Cap reading width around 720–800px — light type needs longer measure
  • Use SourceCodePro at 12/500 with 2.00 line-height for code blocks
  • Reserve dark #1c1e54 bands as deliberate emotional pauses every 3–4 white sections
  • Pair primary purple button with ghost outlined secondary — never two filled buttons

Don’t

  • Don’t use weight 600–700 for Söhne headlines — weight 300 is the brand voice
  • Don’t use large border-radius (12px+, pill shapes) on cards or buttons — Stripe is conservative
  • Don’t use neutral gray shadows — always tint with blue
  • Don’t skip ss01 on any Söhne text — the alternate glyphs define the personality
  • Don’t use pure black #000000 for headings — always #061b31 deep navy
  • Don’t use warm accent colours (orange, yellow) for interactive elements — purple is primary
  • Don’t apply positive letter-spacing at display sizes — Stripe tracks tight
  • Don’t use the magenta/ruby accents for buttons or links — they’re decorative/gradient only
  • Don’t swap Söhne for Inter without changing the weight scheme — Inter at 300 reads anemic
  • Don’t apply pure-black shadows — the cool navy hint keeps the system editorial rather than corporate-blue
  • Don’t introduce a secondary fill colour on CTAs — purple is the only action colour
  • Don’t add gradient overlays to UI — gradients are hero-decoration only

15. Agent Prompt Guide

Quick Color Reference

  • Primary CTA: Stripe Purple #533afd
  • CTA Hover: Purple Dark #4434d4
  • Background: Pure White #ffffff
  • Heading text: Deep Navy #061b31
  • Body text: Slate #64748d
  • Label text: Dark Slate #273951
  • Border: Soft Blue #e5edf5
  • Link: Stripe Purple #533afd
  • Dark section: Brand Dark #1c1e54
  • Success: rgba(21,190,83,0.2) bg / #108c3d text
  • Accent decorative: Ruby #ea2261, Magenta #f96bee

Example Component Prompts

  • “Create a hero section on white background. Headline at 48px Söhne weight 300, line-height 1.15, letter-spacing -0.96px, color #061b31, font-feature-settings ‘ss01’. Subtitle at 18px weight 300, line-height 1.40, color #64748d. Purple CTA button (#533afd, 4px radius, 8px 16px padding, white text) plus ghost button (transparent, 1px solid #b9b9f9, #533afd text, 4px radius).”
  • “Design a card: white background, 1px solid #e5edf5 border, 6px radius. Shadow: rgba(50,50,93,0.25) 0px 30px 45px -30px, rgba(0,0,0,0.1) 0px 18px 36px -18px. Title at 22px Söhne weight 300, letter-spacing -0.22px, color #061b31, ‘ss01’. Body at 16px weight 300, #64748d.”
  • “Build a success badge: rgba(21,190,83,0.2) background, #108c3d text, 4px radius, 1px 6px padding, 10px Söhne weight 300, border 1px solid rgba(21,190,83,0.4).”
  • “Create navigation: white sticky header with backdrop-filter blur(12px). Söhne 14px weight 400 for links, #061b31 text, ‘ss01’. Purple CTA ‘Start now’ right-aligned (#533afd bg, white text, 4px radius). Nav container 6px radius.”
  • “Design a dark brand section: #1c1e54 background, white text. Headline 32px Söhne weight 300, letter-spacing -0.64px, ‘ss01’. Body 16px weight 300, rgba(255,255,255,0.7). Cards inside use rgba(255,255,255,0.1) border with 6px radius.”
  • “Build a financial data table: tabular figures via font-feature-settings: 'tnum', 12px Söhne weight 300, line-height 1.33, letter-spacing -0.36px. Numerics right-aligned, labels left-aligned. Hairline #e5edf5 rules between rows, no zebra striping.”

Iteration Guide

  1. Always enable font-feature-settings: "ss01" on Söhne text — this is the brand’s typographic DNA
  2. Weight 300 is the default; use 400 only for buttons/links/navigation
  3. Shadow formula: rgba(50,50,93,0.25) 0 Y1 B1 -S1, rgba(0,0,0,0.1) 0 Y2 B2 -S2 where Y1/B1 are larger (far shadow) and Y2/B2 are smaller (near shadow)
  4. Heading colour is #061b31 (deep navy), body is #64748d (slate), labels are #273951 (dark slate)
  5. Border-radius stays in the 4px–8px range — never pill shapes or large rounding on action surfaces
  6. Use tnum for any numbers in tables, charts, or financial displays
  7. Dark sections use #1c1e54 — not black, not gray, but a deep branded indigo
  8. SourceCodePro for code at 12px/500 with 2.00 line-height (very generous for readability)
Ship with this

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

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