duply
Preview of Qonto

Qonto

A confident European fintech interface for business banking — bright white canvas paired with deep near-black surfaces (#050505), the custom QontoSans typeface set very large and light, and generously rounded 24px cards. Brand voltage comes from oversized light-weight display headlines, immersive photographic/dark product bands, and a restrained pastel accent family (sky blue, soft violet, cream, mint) used inside product mockups and integration bubbles rather than on primary actions, which stay strictly black-and-white.

---
version: alpha
name: Qonto-design-analysis
description: A confident European fintech interface for business banking — bright white canvas paired with deep near-black surfaces (#050505), the custom QontoSans typeface set very large and light, and generously rounded 24px cards. Brand voltage comes from oversized light-weight display headlines, immersive photographic/dark product bands, and a restrained pastel accent family (sky blue, soft violet, cream, mint) used inside product mockups and integration bubbles rather than on primary actions, which stay strictly black-and-white.

colors:
  canvas: "#ffffff"
  ink: "#000000"
  primary: "#000000"
  surface-dark: "#050505"
  surface-dark-elevated: "#1a1a1a"
  surface-dark-soft: "#1d1d1b"
  surface-soft: "#f5f5f5"
  body: "#636360"
  muted: "#8f8f8f"
  border: "#cccccc"
  border-strong: "#b8b8b8"
  on-dark: "#ffffff"
  accent-blue: "#0099cc"
  accent-blue-bright: "#00b2ff"
  accent-blue-deep: "#3275c4"
  accent-violet: "#bfa6ea"
  accent-violet-soft: "#d5c8ff"
  accent-violet-deep: "#a585db"
  accent-cream: "#fbf0df"
  accent-sand: "#f3d5a3"
  accent-mint: "#9be5da"
  accent-lime: "#faffa4"

typography:
  display-xl:
    fontFamily: "QontoSans, Inter, sans-serif"
    fontSize: 72px
    fontWeight: 700
    lineHeight: 1.111
    letterSpacing: normal
  display-lg:
    fontFamily: "QontoSans, Inter, sans-serif"
    fontSize: 56px
    fontWeight: 600
    lineHeight: 1.143
    letterSpacing: normal
  title:
    fontFamily: "QontoSans, Inter, sans-serif"
    fontSize: 24px
    fontWeight: 600
    lineHeight: 1.333
    letterSpacing: normal
  body:
    fontFamily: "QontoSans, Inter, sans-serif"
    fontSize: 18px
    fontWeight: 300
    lineHeight: 1.333
    letterSpacing: normal
  button:
    fontFamily: "QontoSans, Inter, sans-serif"
    fontSize: 18px
    fontWeight: 400
    lineHeight: 1.333
    letterSpacing: normal

rounded:
  sm: 6px
  md: 8px
  lg: 24px

spacing:
  xxs: 4px
  xs: 8px
  sm: 12px
  md: 16px
  lg: 24px
  xl: 32px
  xxl: 48px
  xxxl: 64px
  section: 80px

components:
  top-nav:
    backgroundColor: "{colors.surface-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.button}"
  promo-banner:
    backgroundColor: "{colors.surface-soft}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    padding: 16px 24px
  badge-new:
    backgroundColor: "{colors.accent-sand}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.md}"
    padding: 4px 12px
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-dark}"
    typography: "{typography.button}"
    rounded: "{rounded.md}"
    padding: 16px 24px
  button-primary-on-dark:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.md}"
    padding: 16px 24px
  button-secondary:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    borderColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.md}"
    padding: 16px 24px
  button-pill-discover:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    borderColor: "{colors.border}"
    typography: "{typography.button}"
    rounded: "{rounded.md}"
    padding: 8px 16px
  card:
    backgroundColor: "{colors.surface-soft}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.lg}"
    padding: 24px
  feature-card-dark:
    backgroundColor: "{colors.surface-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.body}"
    rounded: "{rounded.lg}"
    padding: 24px
  feature-card-light:
    backgroundColor: "{colors.surface-soft}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.lg}"
    padding: 24px
  stat-item:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.body}"
    typography: "{typography.body}"
  integration-bubble:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    rounded: "{rounded.lg}"
  footer:
    backgroundColor: "{colors.surface-soft}"
    textColor: "{colors.body}"
    typography: "{typography.body}"
    padding: 80px
---

## Overview

Qonto's marketing surface is a confident European fintech interface for business banking. The system alternates between two register modes: a bright white canvas (`{colors.canvas}`#ffffff) for editorial copy and light feature cards, and deep near-black bands (`{colors.surface-dark}`#050505) that wrap immersive product mockups, photographic heroes, and dark feature grids. The hero itself layers oversized headlines directly over a warm lifestyle photograph (a coffee mug, a phone showing the Qonto app).

The type voice is singular and distinctive: **QontoSans** at every level, but the brand character comes from scale and weight contrast. Display headlines run very large (72px / 56px) while body copy is set unusually **light at weight 300**. The result is editorial and airy — the headline shouts, the supporting text whispers, and the gap between them carries the brand's premium-but-approachable tone.

Action color is strictly monochrome: primary CTAs are black on white (`{colors.primary}`#000000), or inverted to white-on-dark when sitting on photographic / dark hero bands. Qonto never colors its buttons. The pastel accent family — sky blue (`{colors.accent-blue}`), soft violet (`{colors.accent-violet}`), cream (`{colors.accent-cream}`), mint (`{colors.accent-mint}`), lime (`{colors.accent-lime}`) — lives almost entirely inside product UI fragments, integration bubbles, and small illustrative moments, never on the action layer.

**Key Characteristics:**
- White canvas with strictly black-and-white CTAs (`{colors.primary}`#000000). On dark/photo bands the primary inverts to a white button with black text (`{component.button-primary-on-dark}`).
- Custom `QontoSans` typeface throughout — substituted with Inter here. Display headlines set huge (72px/56px) at weight 600–700; body set light at weight 300.
- Generously rounded 24px cards (`{rounded.lg}`) with flat (no-shadow) surfaces — the dominant container shape across all bands.
- Dual register: light bands (`{colors.surface-soft}`#f5f5f5 cards) for editorial sections, and deep near-black bands (`{colors.surface-dark}`#050505) for immersive product feature grids.
- Pastel accents (blue / violet / cream / mint / lime) reserved for product mockups and the circular integration-logo cluster — never on buttons.
- A persistent dismissible promo banner pinned above the nav (`{component.promo-banner}`) carrying a `{component.badge-new}` pill and a `{component.button-pill-discover}`.
- Spacing rhythm climbs in large steps to `{spacing.section}` (80px) between major bands.
- Two small radii (`{rounded.sm}` 6px, `{rounded.md}` 8px) for buttons and tight chrome; one large radius (`{rounded.lg}` 24px) for content cards.

## Colors

### Brand & Action
- **Ink / Primary** (`{colors.ink}` / `{colors.primary}`#000000): The single action and headline color. All primary CTAs, all display type. Qonto's brand is monochrome at the action layer.
- **On Dark** (`{colors.on-dark}`#ffffff): Text and inverted button fill on dark and photographic surfaces.

### Accent (product-fragment only)
Qonto's pastels appear inside product mockups, illustration moments, and the integration-bubble cluster — not on buttons:
- **Sky Blue** (`{colors.accent-blue}`#0099cc), **Bright Blue** (`{colors.accent-blue-bright}`#00b2ff), **Deep Blue** (`{colors.accent-blue-deep}`#3275c4): the most frequent accent — link moments, product chart fills, app chrome.
- **Soft Violet** (`{colors.accent-violet}`#bfa6ea), **Violet Soft** (`{colors.accent-violet-soft}`#d5c8ff), **Violet Deep** (`{colors.accent-violet-deep}`#a585db): illustration and integration-bubble fills.
- **Cream** (`{colors.accent-cream}`#fbf0df), **Sand** (`{colors.accent-sand}`#f3d5a3): warm card / badge tints.
- **Mint** (`{colors.accent-mint}`#9be5da), **Lime** (`{colors.accent-lime}`#faffa4): small chromatic flourishes in product UI.

### Surface
- **Canvas** (`{colors.canvas}`#ffffff): The default page floor.
- **Surface Soft** (`{colors.surface-soft}`#f5f5f5): Light feature cards, promo banner, footer.
- **Surface Dark** (`{colors.surface-dark}`#050505): The near-black immersive bands and dark feature grids — the second register of the system.
- **Surface Dark Elevated** (`{colors.surface-dark-elevated}`#1a1a1a): Nested cards inside dark bands.
- **Surface Dark Soft** (`{colors.surface-dark-soft}`#1d1d1b): Alternate dark surface tone.

### Text
- **Ink** (`{colors.ink}`#000000): Headlines and primary text.
- **Body** (`{colors.body}`#636360): Default running-text color.
- **Muted** (`{colors.muted}`#8f8f8f): Secondary text, captions, fine-print.

### Lines
- **Border** (`{colors.border}`#cccccc): Hairline borders, outline buttons, dividers.
- **Border Strong** (`{colors.border-strong}`#b8b8b8): A heavier divider / outline tone.

## Typography

### Font Family
The system runs **QontoSans** exclusively — a custom geometric sans used for headlines, body, buttons, and UI labels alike. The fallback stack walks `Inter, sans-serif`. QontoSans is proprietary to Qonto and not distributed as a public web font; see the substitute note below.

The brand character is built from **scale and weight contrast within one family**, not from pairing two typefaces:
- Display headlines: weight 600–700, very large (56–72px)
- Body copy: weight 300 (notably light) at 18px
- Buttons: weight 400 at 18px

### Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-xl}` | 72px | 700 | 1.111 | normal | Hero h1 ("Business account. Finance management. Company creation.") |
| `{typography.display-lg}` | 56px | 600 | 1.143 | normal | Section heads ("Your all-in-one business account", "Compliant invoicing, zero effort") |
| `{typography.title}` | 24px | 600 | 1.333 | normal | Card titles, sub-section heads |
| `{typography.body}` | 18px | 300 | 1.333 | normal | Default running-text — set light at weight 300 |
| `{typography.button}` | 18px | 400 | 1.333 | normal | Button labels, nav items |

### Principles
The light body weight (300) is a deliberate brand signature — never set body copy at 400+ or it reads as off-brand and loses the airy editorial feel. Display headlines stay at 600–700 and very large; the dramatic size jump from 72px headline to 18px light body IS the hierarchy. Letter-spacing stays `normal` at every level — QontoSans is drawn for this and needs no tracking adjustment.

### Note on Font Substitutes
QontoSans is a custom proprietary typeface and is **not** shipped here. The closest open-source substitute is **Inter** — set weight 600–700 for display and weight 300 for body to preserve the weight-contrast signature. **Mulish** (a geometric sans with a usable thin weight) is another close alternative. The `fonts_licensed` array came back empty in the measured analysis, but QontoSans is plainly proprietary — treat it as licensed and substitute accordingly.

## Layout

### Spacing System
- **Base unit:** 4px.
- **Tokens:** `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 24px · `{spacing.xl}` 32px · `{spacing.xxl}` 48px · `{spacing.xxxl}` 64px · `{spacing.section}` 80px.
- **Most frequent steps:** 16px and 24px dominate inner spacing (45 and 39 occurrences measured); 48px and 80px carry the band-level rhythm.
- **Section padding:** `{spacing.section}` (80px) between major editorial bands.
- **Card internal padding:** `{spacing.lg}` (24px) inside feature cards.

### Grid & Container
- **Editorial body:** Centered single column with full-bleed photographic and dark bands.
- **Hero:** Headline overlaid bottom-left on a full-bleed lifestyle photograph, with a phone product mockup floating right.
- **Feature grids:** Mixed-size card mosaics — a large dark band holds a 2×2-ish arrangement of cards of varying width (e.g., "Pay", "Get paid", "Financing and Pay later", "Mastercard debit and credit cards").
- **Stat row:** 3-up horizontal stat items ("Made in France", "600,000+ clients", "24/7 human support").
- **Integration cluster:** Circular logo bubbles orbiting a central Qonto mark.
- **Footer:** Multi-column link list on `{colors.surface-soft}`.

### Whitespace Philosophy
Qonto uses large, deliberate whitespace — 80px between bands and large headline sizes create an airy, premium feel. Light feature bands breathe against the heavy near-black product bands, and the alternation between the two registers paces the long-scroll page.

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow, no border | Cards (`{component.card}`), most surfaces — flat 24px-radius blocks |
| Hairline | 1px `{colors.border}` border | Outline buttons, dividers, pill chrome |
| Color-block | Dark band vs. light band | Depth is carried by surface contrast (#050505 vs #ffffff), not shadow |
| Dark-band glow | `rgba(255, 255, 255, 0.08) 0px 0px 20px 0px` | A faint white outer glow used to lift elements inside near-black bands |

The elevation philosophy is **flat and contrast-driven**. The only measured shadow is a subtle 20px white glow used on dark surfaces (a light bloom around dark-band product chrome). On light surfaces, cards carry no shadow at all — the `{colors.surface-soft}` fill and 24px radius do the separating work.

### Decorative Depth
- Photographic hero and lifestyle bands provide their own depth; headlines sit directly over the imagery in `{colors.on-dark}`.
- The integration-bubble cluster floats circular logo chips at varying scale around the central Qonto mark — perceived depth from overlap and size, not shadow.

## Shapes

### Border Radius Scale

| Token | Value | Use |
|---|---|---|
| `{rounded.sm}` | 6px | Tight chrome, small inline controls |
| `{rounded.md}` | 8px | Buttons, pills, badges, integration chips |
| `{rounded.lg}` | 24px | Content cards — the dominant container shape |

### Photography & Geometry
The 24px card radius is the system's signature shape — applied to every feature card and product-mockup container. Hero and full-bleed lifestyle photographs run edge-to-edge with no radius. Avatar and customer photos within testimonial bands crop to rounded rectangles. Integration logos sit in circular / rounded bubbles within the connectivity cluster.

## Components

### Navigation & Banners

**`top-nav`** — Dark bar (`{colors.surface-dark}`) pinned to the top of the page carrying the Qonto wordmark at left, the primary horizontal menu (Business account, Company creation, Financial tools, Credit, Pricing, About us), a language selector (EN), a "Sign in" text link, and a white "Open an account" button at right. Labels use `{typography.button}`.

**`promo-banner`** — A dismissible strip pinned above the nav on `{colors.surface-soft}` with ink text. Carries a `{component.badge-new}` pill, a one-line promotional message, and a `{component.button-pill-discover}`. Closeable via an ✕ at right.

**`badge-new`** — Small "NEW" pill on `{colors.accent-sand}` with ink text, `{typography.body}`, rounded `{rounded.md}`, padding 4px × 12px. (Fill is approximate — see Known Gaps.)

### Buttons

**`button-primary`** — The standard primary CTA on light surfaces. Background `{colors.primary}` (#000000), text `{colors.on-dark}`, type `{typography.button}` (QontoSans 18px / 400), rounded `{rounded.md}`, padding 16px × 24px.

**`button-primary-on-dark`** — The inverted primary used on dark and photographic hero bands (e.g., the hero "Open an account" and the nav button). Background `{colors.canvas}` (white), text `{colors.ink}`, same type / radius / padding as primary.

**`button-secondary`** — Outline button (e.g., "Find the right plan", "Discover our business account"). Transparent background, `{colors.ink}` text, 1px `{colors.ink}` border, rounded `{rounded.md}`, padding 16px × 24px.

**`button-pill-discover`** — Small white pill button used inside the promo banner ("Discover"). Background `{colors.canvas}`, `{colors.ink}` text, 1px `{colors.border}` border, rounded `{rounded.md}`, padding 8px × 16px.

### Cards & Containers

**`card`** — The base container. Background `{colors.surface-soft}`, ink text, rounded `{rounded.lg}` (24px), no shadow, internal padding `{spacing.lg}` (24px).

**`feature-card-dark`** — Feature cards inside the near-black product bands ("Pay", "Get paid", "Financing and Pay later", "Mastercard debit and credit cards"). Background `{colors.surface-dark}` (#050505), text `{colors.on-dark}`, rounded `{rounded.lg}`, padding `{spacing.lg}`. Holds product UI fragments and card imagery.

**`feature-card-light`** — Feature cards in light editorial bands ("Get ready for e-invoicing", "Create unlimited quotes & invoices", "Supplier invoices in one place"). Background `{colors.surface-soft}`, ink text, rounded `{rounded.lg}`, padding `{spacing.lg}`. Holds product UI fragments (invoice-matched chips, supplier-invoice lists).

**`stat-item`** — A horizontal stat block in the 3-up trust row. Transparent on canvas, body-color supporting text, with an icon/avatar and a short claim ("Made in France", "600,000+ clients", "24/7 human support").

**`integration-bubble`** — Circular / rounded logo chips in the connectivity cluster ("Keep all your tools connected"). Background `{colors.canvas}`, rounded `{rounded.lg}`, orbiting a central Qonto mark. Logos shown at native color.

### Footer

**`footer`** — Light footer on `{colors.surface-soft}` closing the page. Multi-column link list (Business account / Financing / Company / Financial tools), body text in `{colors.body}`, `{typography.body}`, vertical padding `{spacing.section}` (80px). Carries the Qonto wordmark and a Trustpilot rating.

## Do's and Don'ts

### Do
- Keep primary CTAs strictly black-and-white. Use `{component.button-primary}` (black on light) and `{component.button-primary-on-dark}` (white on dark) — never color a button.
- Set body copy at QontoSans weight 300. The light body weight is a core brand signature.
- Set display headlines very large (56–72px) at weight 600–700. Lean on the dramatic size jump to body for hierarchy.
- Use the 24px card radius (`{rounded.lg}`) for all content cards. It's the system's defining shape.
- Reserve pastel accents (blue / violet / cream / mint / lime) for product mockups, illustrations, and integration bubbles — never the action layer.
- Alternate light and near-black bands to pace the long-scroll page. The dual register is the rhythm.
- Keep cards flat — no shadow on light surfaces; only the subtle white glow on dark bands.

### Don't
- Don't introduce a colored primary button. Qonto's action layer is monochrome.
- Don't set body text at weight 400+ — it kills the airy editorial voice.
- Don't apply card shadows on light surfaces; depth comes from surface contrast.
- Don't mix radii on cards — 24px is the single content-card radius; 6–8px is for buttons and small chrome only.
- Don't claim to ship QontoSans — substitute with Inter (or Mulish) and preserve the weight contrast.
- Don't add hover state styling beyond what's documented — default and pressed only.

## Responsive Behavior

### Breakpoints

| Name | Width | Key Changes |
|---|---|---|
| Mobile | < 768px | Hamburger nav; hero h1 scales down from 72px; feature mosaics stack 1-up; stat row stacks; integration cluster simplifies; footer columns collapse |
| Tablet | 768–1024px | Nav tightens; feature card mosaics reduce to 2-up; hero photo + mockup reflow |
| Desktop | 1024–1440px | Full horizontal nav; multi-card dark feature mosaic; 3-up stat row |
| Wide | > 1440px | Same as desktop with more outer breathing room; centered max content width |

### Touch Targets
- `{component.button-primary}` carries 16px × 24px padding on 18px text, yielding a comfortable target above 44px.
- `{component.button-pill-discover}` in the promo banner uses 8px × 16px padding — smaller, but acceptable on a dismissible utility strip.
- Nav items use `{typography.button}` (18px) with generous spacing.

### Collapsing Strategy
- Top nav collapses to a hamburger menu on mobile.
- Hero headline reflows over the photograph; the floating phone mockup moves below the copy.
- Dark-band feature mosaics reduce columns rather than shrinking cards.
- The 3-up stat row stacks vertically on mobile.
- Footer link columns wrap to fewer columns at narrow widths.

### Image Behavior
- Full-bleed hero / lifestyle photographs scale and crop to viewport.
- Product UI fragments inside cards retain aspect ratio while the 24px-radius cards resize.
- Integration bubbles rescale and re-cluster around the central Qonto mark.

## Iteration Guide

1. Focus on ONE component at a time. Reference its YAML key directly (`{component.feature-card-dark}`, `{component.button-primary}`).
2. Variants (e.g., `-on-dark`, `-light`) live as separate entries in `components:`.
3. Use `{token.refs}` everywhere — never inline hex.
4. Never document hover. Default and Active/Pressed states only.
5. Keep the action layer monochrome; keep pastels inside product fragments.
6. Body stays QontoSans weight 300; display stays 600–700 and large. The weight contrast does not blur.
7. When in doubt about emphasis: bigger headline before colored anything.

## Known Gaps

- The measured `button-primary` component returned `radius: 0px` and `padding: 0px` — almost certainly a capture artifact (CTAs render as rounded buttons in screenshots). Button radius is documented as `{rounded.md}` (8px, a measured radius value) and padding as 16px × 24px (derived from screenshot ground-truth and the measured spacing ladder); confirm against production CSS.
- QontoSans is proprietary; `fonts_licensed` returned empty but the face is custom — open-source substitutes (Inter, Mulish) are documented in Typography. No QontoSans web font is shipped.
- The `{component.badge-new}` ("NEW") pill fill is approximate — its olive/gold tone falls between measured `{colors.accent-sand}` (#f3d5a3) and `{colors.accent-lime}` (#faffa4); the exact value was not isolated.
- Only one shadow was measured (the dark-band white glow). Light-surface elevation states, focus rings, and pressed-state shadows were not extracted.
- Active/pressed states for buttons were not measured; only default fills are documented.
- Form input, dropdown (language selector), and pricing-table component specs were not isolated from the captured pages.
- Animation and transition timings (testimonial carousel, integration-cluster motion, banner dismissal) are out of scope.
- The exact column structure and link grouping of the footer is inferred from screenshot ground-truth, not measured per-column.

<!-- Documented by duply · real-world design systems as ready-to-use DESIGN.md for AI coding agents · https://duply.ai/qonto/design-md -->

Color Palette

Accent

Neutrals

Typography

display-xl72px · 700 · 1.111
The quick brown fox jumps
display-lg56px · 600 · 1.143
The quick brown fox jumps
title24px · 600 · 1.333
The quick brown fox jumps
body18px · 300 · 1.333
The quick brown fox jumps
button18px · 400 · 1.333
The quick brown fox jumps

Spacing & Shape

Spacing

NameValuePreview
xxs4px
xs8px
sm12px
md16px
lg24px
xl32px
xxl48px
xxxl64px
section80px

Border Radius

NameValuePreview
sm6px
md8px
lg24px

More like this

Build in any
design language

Free to browse. Real design systems, documented as DESIGN.md. New designs land weekly.

Browse the libraryHow it works