Shadow as identity
The trademark blue-tinted multi-layer shadow lives at
--elev-raised.
Rebinding it to a neutral drop shadow erases Stripe's
atmosphere even when every colour is right.
The reference fixture pastes Stripe's token block into a
single <style>
and renders a recognisable Stripe page without authoring
any additional values — every colour, type size, and
shadow below resolves through var(--*).
var(--*) —
no raw hex, no off-token type.
The trademark blue-tinted multi-layer shadow lives at
--elev-raised.
Rebinding it to a neutral drop shadow erases Stripe's
atmosphere even when every colour is right.
Display sizes run at weight 300 with negative tracking. Stripe's headlines feel like they don't need to shout; weight 600 would erase the brand instantly.
Read the spec →
--accent
appears at most twice per screen — primary CTA and link
colour. Decorative ruby / magenta gradients live in the
hero halo, not on interactive elements.
For new accounts integrating their first payment flow.
Custom pricing for high-volume merchants and platforms.
The monospace face is SourceCodePro
at 12px / weight 500 / line-height 2.00 — generous leading
so payment snippets read like prose, not like terminal
output.
// Create a PaymentIntent on your server. const intent = await stripe.paymentIntents.create({ amount: 4280, currency: "usd", automatic_payment_methods: { enabled: true }, }); // Return the client secret to the browser. res.json({ clientSecret: intent.client_secret });
Focus rings, borders, placeholder colour — all derive
from --accent
and --border.
The submit button reuses .btn-primary
unchanged. The panel itself lifts via the trademark
blue-tinted shadow.