DESIGN.md · Analysis

Stripe

stripe.com · 7 Sept 2026 · 47 colors · sohne-var, 'SF Pro Display', sans-serif, SourceCodePro, monospace

Stripe

Stripe is a financial infrastructure platform enabling businesses to accept payments, build flexible billing models, and manage global commerce at scale. The design system reflects a bold, gradient-forward aesthetic that conveys growth, innovation, and technical sophistication.

Colors

surface#ffffff
surface-dim#f8fafd
surface-bright#ffffff
surface-container-lowest#f8fafd
surface-container-low#f0f4f9
surface-container#e5edf5
surface-container-high#d4dee9
surface-container-highest#c0cad8
on-surface#181818
on-surface-variant#424770
inverse-surface#1a1a2e
inverse-on-surface#f0f4f9
outline#9966ff
outline-variant#d0d0d0
surface-tint#533afd
primary#533afd
on-primary#ffffff
primary-container#635bff
on-primary-container#ffffff
inverse-primary#9966ff
secondary#ff6118
on-secondary#ffffff
secondary-container#ffc299
on-secondary-container#181818
tertiary#ffd601
on-tertiary#181818
tertiary-container#ffe066
on-tertiary-container#181818
error#ea2261
on-error#ffffff
error-container#f44bcc
on-error-container#ffffff
primary-fixed#9966ff
primary-fixed-dim#635bff
on-primary-fixed#ffffff
on-primary-fixed-variant#533afd
secondary-fixed#ff6118
secondary-fixed-dim#fc5
on-secondary-fixed#ffffff
on-secondary-fixed-variant#ff6118
tertiary-fixed#ffd601
tertiary-fixed-dim#ffc299
on-tertiary-fixed#181818
on-tertiary-fixed-variant#ffd601
background#ffffff
on-background#181818
surface-variant#e5edf5

Typography

display
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 60px · fontWeight: 300 · lineHeight: 68px · letterSpacing: -0.02em
headline-lg
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 48px · fontWeight: 300 · lineHeight: 56px · letterSpacing: -0.015em
headline-md
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 32px · fontWeight: 400 · lineHeight: 40px · letterSpacing: -0.01em
title-lg
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 24px · fontWeight: 500 · lineHeight: 32px · letterSpacing: 0em
body-lg
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 18px · fontWeight: 400 · lineHeight: 28px · letterSpacing: 0em
body-md
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 16px · fontWeight: 400 · lineHeight: 24px · letterSpacing: 0em
label-md
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 14px · fontWeight: 500 · lineHeight: 20px · letterSpacing: 0.01em
label-sm
fontFamily: sohne-var, 'SF Pro Display', sans-serif · fontSize: 12px · fontWeight: 500 · lineHeight: 16px · letterSpacing: 0.02em
code-md
fontFamily: SourceCodePro, monospace · fontSize: 14px · fontWeight: 500 · lineHeight: 20px · letterSpacing: 0em

Design guidance

Overview

Stripe's design system embodies a **Gradient-Forward Maximalism** aesthetic—a bold departure from austere fintech conventions. The brand celebrates color, motion, and visual energy while maintaining technical precision and trustworthiness. The UI uses vibrant, multi-hued gradients (blues, purples, oranges, pinks) as primary visual anchors, signaling innovation and growth. The palette transitions from cool purples (#533afd, #9966ff) through warm oranges (#ff6118, #ffd601) to hot pinks (#ea2261, #f44bcc), creating a sense of dynamic momentum. This aesthetic serves businesses of all sizes—from startups to enterprises—conveying that financial infrastructure can be both powerful and approachable.

The brand voice is confident, direct, and optimistic without being breathless. Stripe speaks to builders: precise, technical, action-oriented. Vocabulary favors concrete nouns ("payments," "transactions," "revenue models") over abstractions. The tone avoids hype; instead, it emphasizes capability and scale. Example sentence in Stripe's voice: "Accept payments from 195 countries, settle in 135 currencies, and scale from your first transaction to your billionth—all through a single API."

Colors

Stripe's color system is built on a **vibrant primary accent** (#533afd, a saturated indigo-violet) paired with a warm secondary gradient palette. Primary (#533afd) is the signature CTA color, used on all high-priority buttons ("Get started"), links, and interactive focus states. It conveys trust and technical sophistication. Secondary colors—orange (#ff6118), yellow (#ffd601), and hot pink (#ea2261)—are deployed in hero gradients, decorative blobs, and accent highlights to communicate energy and growth. The surface stack is deliberately light: white (#ffffff) for cards and containers, with subtle grays (#f8fafd, #e5edf5, #d4dee9) for depth and hierarchy. Text defaults to near-black (#181818) for maximum readability. Gradients are the brand's signature visual device: the hero background an

Typography

Stripe's type system prioritizes clarity and hierarchy through weight and scale rather than serif/sans-serif contrast. The typeface is **sohne-var** (a custom variable font from Stripe's design system), paired with **SourceCodePro** for code blocks. Display and headline levels use light weights (300–400) at large sizes (48–60px) to convey confidence and breathing room; body text sits at 16px with 400 weight for legibility. The system includes 8 levels: display (60px, 300 weight), headline-lg (48px, 300 weight), headline-md (32px, 400 weight), title-lg (24px, 500 weight), body-lg (18px, 400 weight), body-md (16px, 400 weight), label-md (14px, 500 weight), and label-sm (12px, 500 weight). Letter-spacing is minimal (–0.02em to 0.02em) to maintain tightness and sophistication. On small labels

Layout

Stripe employs a **fluid, content-driven grid** with a max-width of 1280px and a 12-column layout. The page rhythm is generous: section padding uses the lg spacing token (40px) on mobile, scaling to xl (64px) on desktop, creating breathing room between hero, feature sections, and footer. The gutter (24px) is applied consistently to all container margins. Hero sections span full-width with asymmetric layouts—text on the left, gradient blobs on the right—to create visual tension and guide the eye. Cards and containers use md spacing (24px) for internal padding. The layout philosophy prioritizes white space and asymmetry: sections are not always centered; content often aligns to the left or right, with decorative elements (gradients, blobs) occupying the opposite side. This creates a sense of

Elevation & Depth

Stripe uses **subtle, layered shadows** to create depth without heaviness. The elevation system has three levels: (1) **sm** (0 1px 2px rgba(0, 0, 0, 0.06)) for subtle borders and dividers; (2) **md** (0 3px 8px rgba(0, 0, 0, 0.15)) for standard cards and dropdowns; (3) **lg** (0 30px 60px -50px rgba(0, 0, 0, 0.1), 0 30px 60px -10px rgba(50, 50, 93, 0.25)) for modals and elevated surfaces. Cards use md elevation by default and transition to lg on hover. Buttons do not use shadows; instead, they rely on color contrast and border-radius (4px) for definition. Dropdowns and select panels use md sh

Shapes

Stripe's shape language is **Technical Minimalism**—sharp, precise, and functional. Border-radius follows a strict scale: sm (3px) for small UI elements like badges and select options, DEFAULT (4px) for buttons and inputs, md (8px) for cards and containers, lg (12px) for larger modals, xl (16px) for hero sections and feature cards, and full (9999px) for circular avatars and pill-shaped badges. The 4px default radius is the most frequent, appearing on all primary buttons, input fields, and dropdown panels. This creates a consistent, slightly softened aesthetic that feels modern without being ov

Components

Action Elements

**Buttons** are the primary interaction mechanism. Primary buttons use backgroundColor: {colors.primary} (#533afd), textColor: white, padding: 15px 24px, height: 48px, rounded: 4px, and typography: label-md (14px, 500 weight). On hover, the background transitions to {colors.primary-fixed-dim} (#635bff) with a 150ms ease-out timing function. Secondary buttons invert the color scheme: white background with a 1px border at {colors.outline-variant} (#d0d0d0), primary text, and the same padding and height. On hover, the background shifts to {colors.surface-container-low} (#f0f4f9). Tertiary (ghost) buttons have transparent backgrounds and primary text; on hover, they gain a subtle background at {colors.surface-container-high} (#d4dee9). All buttons use cursor: pointer and t

Do's and Don'ts

**Do**

  • Do use the primary color (#533afd) exclusively for high-priority CTAs and interactive focus states—never dilute it with secondary uses.
  • Do apply gradient blobs (blue → purple → orange → pink) as decorative hero elements to convey motion and growth; they are signature brand assets.
  • Do maintain the 4px border-radius default on buttons and inputs for a technical, precise appearance; reserve 8px+ for larger containers.
  • Do use the lg spacing token (40px) for section separation on desktop to create generous white space and visual breathing room.
  • Do apply the md shadow (0 3px 8px rgba(0, 0, 0, 0.15)) to cards and dropdowns; elevate to lg on hover with a 200ms transition.
  • Do use sohne-var at light weights (300–400) for headlines to convey confidence and sophistication; reserve 500+ weight for labels and emphasis.

**Don't**

  • Don't use secondary colors (#ff6118, #ffd601, #ea2261) on body text or interactive elements; reserve them for decorative gradients and accent highlights only.
  • Don't apply rounded corners larger than 4px to buttons—this softens the technical precision that defines the brand.
  • Don't use pure black (#000000) or pure white (#ffffff) for text; use #181818 for dark text and #ffffff for light text to maintain brand consistency.
  • Don't apply shadows heavier than lg (0 30px 60px) to any element; Stripe's elevation is subtle and refined, never dramatic.
  • Don't mix sohne-var with system fonts (Arial, Helvetica) in the same component; always specify the full font stack: sohne-var, 'SF Pro Display', sans-serif.
  • Don't use the outline color (#9966ff) for anything other than focus rings and interactive states; it is not a primary or secondary brand color.