Stripe Design System Breakdown
A Stripe design system breakdown: sohne-var at weight 300, deep navy over purple, blue-tinted layered shadows — the fintech look decoded for AI coding agents.
Stripe manages a contradiction most fintech brands fail at: an interface that feels simultaneously technical and luxurious. Ask an agent for "a fintech landing page" and you get navy, a sans-serif, and trust badges. Ask it to follow the actual mechanics documented in this Stripe design system breakdown — whisper-light display type, blue-tinted shadows, one saturated violet doing all the accent work — and the output starts reading premium. The token-level reference is in our Stripe design md; this is the annotated tour.
The palette: navy ink, violet voltage
Stripe's canvas is plain white, but text is never black. Headings use a deep navy #061B31 — dark enough for AAA contrast, warm enough to feel financial rather than clinical. Body copy sits at slate #64748D. The brand anchor is Stripe purple #635BFF/#533AFD: CTAs, links, interactive highlights, and essentially nothing else.
Around that core, accents appear in controlled bursts: ruby #EA2261 and magenta #F96BEE fuel the famous gradient meshes, and a dark indigo #1C1E54 carries footer and immersive sections. The lesson for a design file: Stripe has more colors than Vercel but the same discipline — every hue has a named job, and the gradient colors never leak into UI chrome.
Typography: the weight-300 power move
The defining choice in any Stripe design system breakdown is display type at font-weight 300. Headlines in the custom sohne-var variable font run 48–56px at a weight most systems reserve for captions, with negative tracking (-1.4px at 56px) pulling the light strokes into dense blocks. The effect is confidence — headlines that don't need to shout.
Two supporting details agents routinely miss:
- OpenType stylistic set
ss01is enabled globally, subtly reshaping letterforms; it's why copied hex values alone never quite look like Stripe. - Tabular numerals (
tnum) for any financial figure, so columns of amounts align.
If you can't license sohne-var, the transferable rule is "display type light, tracked tight": Inter at 300 with -0.03em tracking gets you most of the way.
h1 {
font-family: 'sohne-var', 'Inter', sans-serif;
font-weight: 300;
font-size: 56px;
letter-spacing: -1.4px;
font-feature-settings: 'ss01';
}
Shadows: elevation with a brand tint
Most sites shadow with pure black alpha. Stripe tints elevation with its own palette: the signature recipe layers rgba(50, 50, 93, 0.25) — a blue-gray drawn from the navy — over a soft rgba(0, 0, 0, 0.1). Cards feel like they float in a twilight atmosphere that matches the brand instead of sitting under a generic gray cloud.
box-shadow:
rgba(50, 50, 93, 0.25) 0 13px 27px -5px,
rgba(0, 0, 0, 0.1) 0 8px 16px -8px;
This is one of the highest-leverage rules to encode in a DESIGN.md: tinted, multi-layer shadows are cheap to specify, hard for an agent to invent, and instantly recognizable.
Radius and structure
Stripe stays conservative where trends go round: border-radius runs 4–8px, nothing pill-shaped except pills. Sections alternate white canvas with the gradient mesh moments, and the grid is classic 12-column with generous gutters. Code blocks — Stripe is a developer product — use SourceCodePro on the dark indigo, treated as first-class design surfaces rather than gray afterthoughts.
What transfers to your product
Copy the mechanics:
- Never-black text — pick an ink with your brand's undertone (navy for trust, warm gray for consumer).
- One saturated accent owning every interactive moment.
- Tinted multi-layer shadows derived from your ink color.
- Light display weights with negative tracking when you want premium-technical.
- Decorative color quarantined to hero/gradient zones, never in controls.
Skip the literal cloning — sohne-var is licensed, and the purple is trademark-adjacent Stripe equity. The full Stripe design md marks which tokens are structural and which are brand-specific.
Feeding it to an agent
Check the file into your repo, reference it from CLAUDE.md or .cursor/rules, and scope prompts to one surface at a time — the same loop we document for Claude Code and Cursor. A Stripe design system breakdown is only useful to a model when it arrives as checkable constraints; that's exactly what the DESIGN.md format is for. To build the equivalent contract from your own site's real styles, run it through the generator — paste the URL, get the file.