---
version: alpha
name: Revolut-design-analysis
description: |
Revolut's marketing surfaces pair a stark black canvas with the brand's
cobalt-violet (`#494fdf`) and a wide accent palette of deep, fully-saturated
product colours — teal, light-blue, deep pink, light-green, warning orange.
The system reads as fintech-meets-product-brochure: oversized 80px–136px
Aeonik Pro display headlines, generous whitespace, photography-led hero
bands, and full-width product mockups (cards, phones, terminals) shown as
hero objects inside near-black sections. Most surfaces are either black or
off-white; pill-shaped buttons and rounded-12/20px content cards carry the
consumer-financial-app feel without crossing into playful territory.
colors:
primary: "#494fdf"
primary-bright: "#4f55f1"
primary-deep: "#3a40c4"
on-primary: "#ffffff"
ink: "#191c1f"
body: "#1f2226"
charcoal: "#3a3d40"
mute: "#505a63"
ash: "#5c5e60"
stone: "#8d969e"
faint: "#c9c9cd"
on-dark: "#ffffff"
on-dark-mute: "rgba(255,255,255,0.72)"
canvas-light: "#ffffff"
canvas-dark: "#000000"
surface-soft: "#f4f4f4"
surface-card: "#ffffff"
surface-deep: "#0a0a0a"
surface-elevated: "#16181a"
hairline-light: "#e2e2e7"
hairline-dark: "rgba(255,255,255,0.12)"
hairline-strong: "#191c1f"
divider-soft: "rgba(255,255,255,0.06)"
accent-teal: "#00a87e"
accent-blue-link: "#376cd5"
accent-light-blue: "#007bc2"
accent-light-green: "#428619"
accent-green-text: "#006400"
accent-yellow: "#b09000"
accent-warning: "#ec7e00"
accent-pink: "#e61e49"
accent-danger: "#e23b4a"
accent-deep-red: "#8b0000"
accent-brown: "#936d62"
link: "#376cd5"
typography:
display-xxl:
fontFamily: Aeonik Pro
fontSize: 136px
fontWeight: 500
lineHeight: 1.0
letterSpacing: -2.72px
display-xl:
fontFamily: Aeonik Pro
fontSize: 80px
fontWeight: 500
lineHeight: 1.0
letterSpacing: -0.8px
display-lg:
fontFamily: Aeonik Pro
fontSize: 48px
fontWeight: 500
lineHeight: 1.21
letterSpacing: -0.48px
display-md:
fontFamily: Aeonik Pro
fontSize: 40px
fontWeight: 500
lineHeight: 1.2
letterSpacing: -0.4px
heading-lg:
fontFamily: Aeonik Pro
fontSize: 32px
fontWeight: 500
lineHeight: 1.19
letterSpacing: -0.32px
heading-md:
fontFamily: Aeonik Pro
fontSize: 24px
fontWeight: 500
lineHeight: 1.33
letterSpacing: 0
heading-sm:
fontFamily: Aeonik Pro
fontSize: 20px
fontWeight: 500
lineHeight: 1.4
letterSpacing: 0
body-lg:
fontFamily: Inter
fontSize: 18px
fontWeight: 400
lineHeight: 1.56
letterSpacing: -0.09px
body-md:
fontFamily: Inter
fontSize: 16px
fontWeight: 400
lineHeight: 1.5
letterSpacing: 0.24px
body-md-bold:
fontFamily: Inter
fontSize: 16px
fontWeight: 600
lineHeight: 1.5
letterSpacing: 0.16px
body-sm:
fontFamily: Inter
fontSize: 14px
fontWeight: 400
lineHeight: 1.43
button-lg:
fontFamily: Aeonik Pro
fontSize: 20px
fontWeight: 500
lineHeight: 1.4
button-md:
fontFamily: Inter
fontSize: 16px
fontWeight: 600
lineHeight: 1.5
letterSpacing: 0.24px
button-sm:
fontFamily: Inter
fontSize: 14px
fontWeight: 600
lineHeight: 1.43
caption:
fontFamily: Inter
fontSize: 13px
fontWeight: 400
lineHeight: 1.4
link-emph:
fontFamily: Inter
fontSize: 16px
fontWeight: 700
lineHeight: 1.5
letterSpacing: 0.24px
rounded:
none: 0px
sm: 8px
md: 12px
lg: 20px
xl: 28px
full: 9999px
spacing:
xxs: 4px
xs: 6px
sm: 8px
md: 14px
lg: 16px
xl: 24px
xxl: 32px
xxxl: 48px
block: 80px
section: 88px
band: 120px
components:
button-primary:
backgroundColor: "{colors.canvas-light}"
textColor: "{colors.canvas-dark}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 14px 28px
height: 48px
button-primary-pressed:
backgroundColor: "{colors.faint}"
textColor: "{colors.canvas-dark}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
button-dark:
backgroundColor: "{colors.canvas-dark}"
textColor: "{colors.on-dark}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 14px 28px
height: 48px
button-soft:
backgroundColor: "{colors.surface-soft}"
textColor: "{colors.ink}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 14px 28px
height: 48px
button-outline-light:
backgroundColor: "{colors.canvas-light}"
textColor: "{colors.ink}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 13px 27px
height: 48px
button-outline-dark:
backgroundColor: "{colors.canvas-dark}"
textColor: "{colors.on-dark}"
typography: "{typography.button-md}"
rounded: "{rounded.full}"
padding: 13px 27px
height: 48px
button-pill-sm:
backgroundColor: "{colors.surface-soft}"
textColor: "{colors.ink}"
typography: "{typography.button-sm}"
rounded: "{rounded.full}"
padding: 8px 16px
height: 36px
text-input:
backgroundColor: "{colors.canvas-light}"
textColor: "{colors.ink}"
typography: "{typography.body-md}"
rounded: "{rounded.md}"
padding: 14px 16px
height: 56px
hero-band-dark:
backgroundColor: "{colors.canvas-dark}"
textColor: "{colors.on-dark}"
typography: "{typography.display-xxl}"
rounded: "{rounded.none}"
padding: 88px 24px
hero-band-photo:
backgroundColor: "{colors.canvas-dark}"
textColor: "{colors.on-dark}"
typography: "{typography.display-xl}"
rounded: "{rounded.none}"
padding: 0
feature-card-light:
backgroundColor: "{colors.canvas-light}"
textColor: "{colors.ink}"
typography: "{typography.body-md}"
rounded: "{rounded.lg}"
padding: 32px
feature-card-dark:
backgroundColor: "{colors.surface-elevated}"
textColor: "{colors.on-dark}"
typography: "{typography.body-md}"
rounded: "{rounded.lg}"
padding: 32px
plan-card:
backgroundColor: "{colors.surface-elevated}"
textColor: "{colors.on-dark}"
typography: "{typography.body-md}"
rounded: "{rounded.lg}"
padding: 32px
plan-card-featured:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.body-md}"
rounded: "{rounded.lg}"
padding: 32px
product-mockup:
backgroundColor: "{colors.canvas-dark}"
textColor: "{colors.on-dark}"
rounded: "{rounded.xl}"
padding: 48px
download-tile:
backgroundColor: "{colors.surface-soft}"
textColor: "{colors.ink}"
typography: "{typography.body-sm}"
rounded: "{rounded.md}"
padding: 12px 20px
height: 56px
badge-tag:
backgroundColor: "{colors.surface-soft}"
textColor: "{colors.ink}"
typography: "{typography.caption}"
rounded: "{rounded.full}"
padding: 4px 12px
badge-feature:
backgroundColor: "{colors.primary}"
textColor: "{colors.on-primary}"
typography: "{typography.caption}"
rounded: "{rounded.full}"
padding: 4px 12px
nav-bar:
backgroundColor: "{colors.canvas-dark}"
textColor: "{colors.on-dark}"
typography: "{typography.button-md}"
rounded: "{rounded.none}"
height: 64px
sub-nav-pill:
backgroundColor: "{colors.surface-elevated}"
textColor: "{colors.on-dark}"
typography: "{typography.button-sm}"
rounded: "{rounded.full}"
padding: 8px 16px
footer:
backgroundColor: "{colors.canvas-dark}"
textColor: "{colors.on-dark-mute}"
typography: "{typography.body-sm}"
rounded: "{rounded.none}"
padding: 80px 24px
---
Overview
Section 01Revolut's marketing canvas operates in a high-contrast two-mode system: a
**near-black storytelling canvas** (`{colors.canvas-dark}` — `#000000`)
that hosts hero bands, product mockups, and the planning section, alternating
with **white catalogue bands** (`{colors.canvas-light}` — `#ffffff`) that
host comparison tables, FAQ rows, and download tiles. The two modes switch
in full-bleed bands rather than soft transitions; sections slam against each
other to create the magazine-spread rhythm the brand is known for.
The display typography is **Aeonik Pro at weight 500**, used at sizes from
20px to 136px. The flagship hero ("Banking & Beyond", "Join the 70+ million
using Revolut") sits at 80–136px with `lineHeight: 1.0` and tight negative
letter-spacing. Body type is **Inter** at weight 400 — open-source,
no-nonsense, paired with positive tracking (`0.24px`) on UI labels for
slightly more mechanical precision.
The brand accent is `{colors.primary}` (`#494fdf`) — a saturated cobalt
violet — but it appears scarcely on marketing surfaces. The actual primary
CTA on the hero is the **white pill on black** ("Choose your subscription"),
and the cobalt violet is reserved for featured plan cards, secondary CTAs in
white sections, and the brand glyph itself. A wide secondary palette of deep
teal, light-blue, deep-pink, light-green, warning orange, and yellow appears
inside product mockups and feature illustrations — never as button surfaces.
**Key Characteristics:**
Colors
Section 02Brand & Accent
Section 03Surface
Section 04Text
Section 05Semantic
Section 06Typography
Section 07Font Family
Section 08Revolut ships a two-family stack:
When Aeonik Pro cannot be licensed, **Inter Display**, **General Sans**, or **Söhne** are credible substitutes — all share the warm geometric character. Apply -1% letter-spacing on display sizes to match the original tightness.
Hierarchy
Section 09| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-xxl}` | 136px | 500 | 1.0 | -2.72px | The flagship hero ("Banking & Beyond"). One per page. |
| `{typography.display-xl}` | 80px | 500 | 1.0 | -0.8px | Section openers ("Join the 70+ million using Revolut"). |
| `{typography.display-lg}` | 48px | 500 | 1.21 | -0.48px | Sub-section titles. |
| `{typography.display-md}` | 40px | 500 | 1.2 | -0.4px | Feature card titles. |
| `{typography.heading-lg}` | 32px | 500 | 1.19 | -0.32px | Plan card titles. |
| `{typography.heading-md}` | 24px | 500 | 1.33 | 0 | Section sub-titles. |
| `{typography.heading-sm}` | 20px | 500 | 1.4 | 0 | List headers, prominent labels. |
| `{typography.body-lg}` | 18px | 400 | 1.56 | -0.09px | Marketing prose. |
| `{typography.body-md}` | 16px | 400 | 1.5 | 0.24px | Default body. |
| `{typography.body-md-bold}` | 16px | 600 | 1.5 | 0.16px | Emphatic body. |
| `{typography.body-sm}` | 14px | 400 | 1.43 | 0 | Captions, metadata. |
| `{typography.button-lg}` | 20px | 500 | 1.4 | 0 | Hero CTAs (Aeonik Pro). |
| `{typography.button-md}` | 16px | 600 | 1.5 | 0.24px | Default button label. |
| `{typography.button-sm}` | 14px | 600 | 1.43 | 0 | Pill chips, sub-nav. |
| `{typography.caption}` | 13px | 400 | 1.4 | 0 | Footer disclosure, regulatory text. |
| `{typography.link-emph}` | 16px | 700 | 1.5 | 0.24px | Emphatic inline link in dark mode. |
Principles
Section 010Note on Font Substitutes
Section 011When Aeonik Pro is unavailable, clamp display `lineHeight` to 1.0 explicitly and apply -1% letter-spacing on display sizes. Inter Display, General Sans, or Söhne will read closest to the original. Inter is open-source and should be used directly.
Layout
Section 012Spacing System
Section 013Grid & Container
Section 014Whitespace Philosophy
Section 015Elevation & Depth
Section 016| Level | Treatment | Use |
|---|---|---|
| 0 — flat | No shadow, no border | Default canvas bands (light or dark), full-bleed hero. |
| 1 — surface card | `{colors.surface-card}` (white) on `{colors.surface-soft}` band | Feature cards inside light bands. |
| 2 — surface elevated dark | `{colors.surface-elevated}` (`#16181a`) on `{colors.canvas-dark}` | Plan cards inside the planning section. |
| 3 — featured surface | `{colors.primary}` on `{colors.canvas-dark}` | Featured plan card (cobalt violet inversion). |
| 4 — product mockup | Full-bleed photo asset | Hero phone / card / terminal mockup bands. |
The system has **no traditional drop-shadow language**. Surfaces register depth via colour-blocking (light → dark band switches) and surface-luminance shifts (`{colors.canvas-dark}` → `{colors.surface-elevated}`). Photography mockups carry their own depth from the asset itself.
Decorative Depth
Section 017Shapes
Section 018Border Radius Scale
Section 019| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Hero bands, full-bleed sections, footer. |
| `{rounded.sm}` | 8px | Inline tags, small chips. |
| `{rounded.md}` | 12px | Form inputs, download tiles. |
| `{rounded.lg}` | 20px | Feature cards, plan cards. |
| `{rounded.xl}` | 28px | Product mockup containers. |
| `{rounded.full}` | 9999px | Buttons, pills, badges, tabs. |
Photography Geometry
Section 020Components
Section 021Buttons
Section 022**`button-primary`** — white CTA on dark
**`button-dark`** — dark CTA on light
**`button-soft`** — soft surface CTA
**`button-outline-light`** — outlined CTA on light
**`button-outline-dark`** — outlined CTA on dark
**`button-pill-sm`** — small pill chip
Cards & Containers
Section 023**`hero-band-dark`** — full-bleed dark hero
**`hero-band-photo`** — photo-led hero
**`feature-card-light`** — feature card on white
**`feature-card-dark`** — feature card on dark
**`plan-card`** — subscription plan card
**`plan-card-featured`** — featured plan card
**`product-mockup`** — full-bleed product asset
**`download-tile`** — app store download tile
Inputs & Forms
Section 024**`text-input`** — default input
Navigation
Section 025**`nav-bar`** — top nav (desktop)
**`nav-bar`** (mobile)
**`sub-nav-pill`** — sub-nav chip
Signature Components
Section 026**`badge-tag`** — neutral tag
**`badge-feature`** — feature highlight badge
**`footer`** — global footer
Do's and Don'ts
Section 027Do
Section 028Don't
Section 029Responsive Behavior
Section 030Breakpoints
Section 031| Name | Width | Key Changes |
|---|---|---|
| Desktop XL | ≥ 1440px | 4-up plan grid, full-bleed product mockup bands, max content 1200. |
| Desktop | 1280–1439px | Container shrinks; xl side padding. |
| Tablet Large | 1024–1279px | Plan grid 4-up; feature grid 3-up. |
| Tablet | 768–1023px | Plan grid 2-up; feature grid 2-up. |
| Mobile Large | 426–767px | Plan grid 1-up; feature grid 1-up; nav collapses to hamburger; hero `display-xxl` clamps to 64px. |
| Mobile | ≤ 425px | All grids 1-up; hero clamps to 48px; section padding `{spacing.section}` collapses to 64px. |
Touch Targets
Section 032Collapsing Strategy
Section 033Image Behavior
Section 034Iteration Guide
Section 0351. Focus on ONE component at a time. Most surfaces share the `{colors.canvas-dark}` / `{colors.canvas-light}` pair with `{rounded.full}` for buttons and `{rounded.lg}` for cards.
2. Reference component names and tokens directly (`{colors.primary}`, `{component.plan-card-featured}`, `{rounded.lg}`) — do not paraphrase.
3. Run `npx @google/design.md lint DESIGN.md` after edits; orphaned-tokens warnings will catch unused entries.
4. Add new variants as separate entries (`-pressed`, `-featured`, `-disabled`) — do not bury them in prose.
5. Default body type to `{typography.body-md}` (Inter 400 with positive tracking); reach for `{typography.body-md-bold}` only on emphasis.
6. Keep `{colors.primary}` scarce — if more than one cobalt-violet element appears per viewport, ask whether one should drop to `{component.plan-card}` (`{colors.surface-elevated}`) instead.