← Back to all designs

BMW

BMW's corporate site — distinct from BMW M's motorsport-bombastic variant, this is a measured and settled corporate-automotive interface. On a light (cream-tinted white) canvas, BMW corporate blue (#1c69d4) carries every primary CTA; dark navy hero bands frame model photography. BMW Type Next Latin sets the entire hierarchy on two weights — heavy 700 display and Light 300 body. Configuration and r

Homepage Example

Welcome to BMW

A modern, elegant design system built for the digital age. Clean lines, thoughtful spacing, and purposeful color choices define every interaction.

Get Started Learn More

Pixel Perfect

Every element is carefully crafted to ensure consistency across all platforms and devices.

Design Tokens

A comprehensive token system that makes scaling and maintaining your design effortless.

Built for Teams

Collaborate seamlessly with designers and developers using a shared design language.

Color Palette (25)

primary#1c69d4
primary-active#0653b6
primary-disabled#d6d6d6
ink#262626
body#3c3c3c
body-strong#1a1a1a
muted#6b6b6b
muted-soft#9a9a9a
hairline#e6e6e6
hairline-strong#cccccc
canvas#ffffff
surface-soft#f7f7f7
surface-card#fafafa
surface-strong#ebebeb
surface-dark#1a2129
surface-dark-elevated#262e38
on-primary#ffffff
on-dark#ffffff
on-dark-soft#bbbbbb
m-blue-light#0066b1
m-blue-dark#1c69d4
m-red#e22718
success#22c55e
warning#f59e0b
error#dc2626

Typography (13)

BMW
display-xl64px · weight 700
BMW
display-lg48px · weight 700
BMW
display-md32px · weight 700
BMW
display-sm24px · weight 700
BMW
title-lg20px · weight 700
BMW
title-md18px · weight 700
BMW
title-sm16px · weight 700
BMW
body-md16px · weight 300
BMW
body-sm14px · weight 300
BMW
caption12px · weight 400
BMW
label-uppercase13px · weight 700
BMW
button14px · weight 700
BMW
nav-link14px · weight 400

Components (26)

top-nav
top-nav
button-primary
button-primary
button-primary-active
button-primary-active
button-primary-disabled
button-primary-disabled
button-secondary
button-secondary
button-secondary-on-dark
button-secondary-on-dark
button-text-link
button-text-link
text-link
text-link
hero-band-dark
hero-band-dark
hero-photo-band
hero-photo-band
model-card
model-card
model-card-photo
model-card-photo
feature-photo-card
feature-photo-card
spec-cell
spec-cell
inventory-card
inventory-card
filter-chip
filter-chip
filter-chip-active
filter-chip-active
configurator-option-tile
configurator-option-tile
configurator-option-tile-selected
configurator-option-tile-selected
text-input
text-input
cookie-consent-card
cookie-consent-card
category-tab
category-tab
category-tab-active
category-tab-active
m-stripe-divider
m-stripe-divider
cta-band-photo
cta-band-photo
footer
footer

Border Radius

none (0px)
xs (2px)
sm (4px)
md (8px)
lg (12px)
pill (9999px)
full (9999px)

Design Philosophy

Overview

BMW's corporate site carries a far more **measured, corporate-automotive** interface than its motorsport-bombastic cousin BMW M. The atmosphere is light: `{colors.canvas}` (#ffffff) is the base surface, `{colors.surface-card}` (#fafafa) carries the soft-grey card plates, and dark navy `{colors.surface-dark}` (#1a2129) appears only inside hero bands — one per page, framing the lead model render.

Type runs BMW's licensed **BMW Type Next Latin** at two weights: heavy 700 (display + button + nav) and Light 300 (body + secondary copy). That contrast — heavy display next to thin paragraph — is the editorial signature, channeling the brand's "European-engineered" voice. Weight 500 is deliberately absent; weight 400 only appears on caption and nav-link in neutral utility contexts.

The brand action color, **BMW corporate blue** (`{colors.primary}` — #1c69d4), works alone across every primary CTA — buttons are **rectangular, 0px corner**, with white type. The site rotates a blue-button + dark-navy-hero combination across page rhythm. The M tricolor stripe (`{colors.m-blue-light}` → `{colors.m-blue-dark}` → `{colors.m-red}`) only appears in motorsport contexts and as M-model badges/dividers — never in the corporate site's main language.

The configuration and reservation flows add a dealer-side inventory UI on top of the same system — filter chips, model cards, price tables — but typography and color stay identical; only density goes up.

**Key Characteristics:**

Colors

Brand & Accent

Surface

Hairlines

Text

Semantic

Typography

Font Family

The system runs **BMW Type Next Latin** in two cuts: regular (display + UI labels) and **BMW Type Next Latin Light** (body + secondary copy). Fallback stack: `system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`.

The display/body split is functional:

This three-way split mirrors BMW M's — corporate and the M sub-brand share the same typographic DNA; only the weight/size ratios differ.

Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |

|---|---|---|---|---|---|

| `{typography.display-xl}` | 64px | 700 | 1.05 | 0 | Hero h1 ("iX3", model name) |

| `{typography.display-lg}` | 48px | 700 | 1.1 | 0 | Section heads |

| `{typography.display-md}` | 32px | 700 | 1.15 | 0 | Sub-section heads |

| `{typography.display-sm}` | 24px | 700 | 1.25 | 0 | CTA-band headlines |

| `{typography.title-lg}` | 20px | 700 | 1.3 | 0 | Card group titles |

| `{typography.title-md}` | 18px | 700 | 1.4 | 0 | Model card title, intro paragraphs |

| `{typography.title-sm}` | 16px | 700 | 1.4 | 0 | Inventory card title, list label |

| `{typography.body-md}` | 16px | 300 (Light) | 1.55 | 0 | Default body — BMW Type Next Latin Light |

| `{typography.body-sm}` | 14px | 300 (Light) | 1.55 | 0 | Footer body, fine-print |

| `{typography.caption}` | 12px | 400 | 1.4 | 0.5px | Photo captions, meta |

| `{typography.label-uppercase}` | 13px | 700 | 1.3 | 1.5px | "LEARN MORE" inline links, category tabs |

| `{typography.button}` | 14px | 700 | 1.0 | 0.5px | Standard CTA button label |

| `{typography.nav-link}` | 14px | 400 | 1.4 | 0.3px | Top-nav menu items |

Principles

Note on Font Substitutes

BMW Type Next Latin is a licensed BMW typeface. Open-source alternatives:

Layout

Spacing System

Grid & Container

Whitespace Philosophy

BMW's whitespace strategy is tighter than BMW M's motorsport-aerated grenadier — the corporate side is more utility-driven. Section rhythm is 80px (not M's 96px). Card padding is 24px (not M's 32px). The page is denser, more dealership-functional.

Elevation & Depth

| Level | Treatment | Use |

|---|---|---|

| Flat | No shadow, no border | Body, top nav, footer, hero bands |

| Soft hairline | 1px `{colors.hairline}` border | Configurator option tile, table divider |

| Card surface | `{colors.surface-card}` background — no shadow | Model card photo plate |

| Photographic | Edge-to-edge photography | Hero band, model renders |

The system never uses a drop shadow. Depth comes entirely from (a) color-block contrast (light canvas vs dark hero) and (b) photographic subject + lighting.

Decorative Depth

Shapes

Border Radius Scale

| Token | Value | Use |

|---|---|---|

| `{rounded.none}` | 0px | Every button, card, input, configurator chip — the dominant radius |

| `{rounded.xs}` | 2px | Very small badges, very rare |

| `{rounded.sm}` | 4px | Small inline button (rare) |

| `{rounded.md}` | 8px | Mobile-only collapse cards (rare) |

| `{rounded.lg}` | 12px | Very rare — modal/dialog corners |

| `{rounded.pill}` | 9999px | Filter chips in some contexts (rare) |

| `{rounded.full}` | 9999px / 50% | Avatar, circular icon button |

The radius hierarchy is binary: **rectangular for everything, circular only for icon buttons.** A clear departure from the soft-cornered SaaS dialect of Apple or Cal.com — closer to BMW corporate-automotive's "engineered precision" voice.

Photography Geometry

Components

Top Navigation

**`top-nav`** — A white sticky nav bar pinned to the top of the page. 64px tall, `{colors.canvas}` background. Left: BMW circular badge logo; center: primary horizontal menu (Models, Next Generation, Pre-Owned, Dealers, Test Drive); right: cart icon, language picker, profile. Menu items render in `{typography.nav-link}` (14px / 400 / 0.3px tracking).

Buttons

**`button-primary`** — The signature primary CTA. Background `{colors.primary}` (BMW Blue #1c69d4), text `{colors.on-primary}`, type `{typography.button}` (BMW Type Next Latin 14px / 700 / 0.5px tracking), padding 14px × 32px, height 48px, rounded `{rounded.none}` (0px — rectangular). Press state: `button-primary-active` shifts to `{colors.primary-active}`.

**`button-secondary`** — A white button with a hairline outline. Background `{colors.canvas}`, text `{colors.ink}`, 1px `{colors.hairline-strong}` border, same padding + height + radius.

**`button-secondary-on-dark`** — Used over a dark hero band. Background transparent, text `{colors.on-dark}`, 1px `{colors.on-dark}` border, same rectangular shape.

**`button-text-link`** — An inline UPPERCASE letter-spaced link. No background, text `{colors.ink}`, type `{typography.label-uppercase}` (13px / 700 / 1.5px tracking). Reads as "LEARN MORE", terminated by a `›` chevron.

**`text-link`** — An inline link inside body copy. `{colors.ink}` text, no underline by default; underlines per context.

Cards & Containers

**`hero-band-dark`** — Full-width dark navy hero. Background `{colors.surface-dark}`, text `{colors.on-dark}`, vertical padding `{spacing.section}` (80px). Centered: model name in `{typography.display-xl}` (64px / 700) + sub-headline + vehicle render (right-aligned or below). A single `{component.button-primary}` (blue) or `{component.button-secondary-on-dark}`.

**`hero-photo-band`** — A light-canvas model showcase band. Background `{colors.canvas}`, text `{colors.ink}`. The vehicle render takes the wide area; right or below, a headline + two link CTAs + sub-tagline.

**`model-card`** — Used in 4-up or 5-up model card grids on the homepage ("BMW iX3", "BMW iX", "BMW 5 Series"). Background `{colors.canvas}`, rounded `{rounded.none}`, padding `{spacing.lg}` (24px). Contents: model render at the top (`{component.model-card-photo}` on `{colors.surface-card}`), model name in `{typography.title-md}` (18px / 700) below, a one-line tagline in `{typography.body-sm}` (14px / 300), and a `{component.button-text-link}` ("LEARN MORE ›").

**`model-card-photo`** — The card's photo plate. Background `{colors.surface-card}` (#fafafa — soft grey), rounded `{rounded.none}`, vehicle render in full silhouette. Zero padding — the photo runs edge-to-edge.

**`feature-photo-card`** — A feature/lifestyle card. Background `{colors.canvas}`, padding `{spacing.lg}`. 16:9 photo at the top, `{typography.title-md}` headline + body excerpt below.

**`spec-cell`** — A technical spec cell (model detail page). Transparent background, separated by hairline dividers. Value on top (`{typography.display-sm}` 24px / 700), label below (`{typography.label-uppercase}`).

Inventory & Configurator

**`inventory-card`** — One card per vehicle on the dealer inventory page. Background `{colors.canvas}`, padding `{spacing.md}` (16px), rounded `{rounded.none}`. Vehicle photo on top, model + variant name + price + "View" link below.

**`filter-chip`** + **`filter-chip-active`** — Inventory filter chips (model, year, price range). Inactive: background `{colors.canvas}`, 1px `{colors.hairline-strong}` border, text `{colors.ink}`, type `{typography.caption}`. Active: background `{colors.ink}`, text `{colors.on-dark}`. Padding 8px × 14px, radius `{rounded.none}`.

**`configurator-option-tile`** + **`configurator-option-tile-selected`** — Configurator selection cell (color, wheels, upholstery). Inactive: background `{colors.canvas}`, 1px hairline. Selected: 2px `{colors.primary}` border. Padding 16px × 24px, radius `{rounded.none}`.

Inputs & Forms

**`text-input`** — Standard text input. Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-md}`, rounded `{rounded.none}` (0px), padding 14px × 16px, height 48px, 1px hairline border. On focus, the border thickens to ink.

**`cookie-consent-card`** — Cookie banner. Background `{colors.canvas}`, 1px hairline, padding `{spacing.lg}` (24px), `{typography.body-sm}` (14px / 300 — Light even in legal copy).

Tabs / Tags

**`category-tab`** + **`category-tab-active`** — Category sub-nav. Inactive: transparent + `{colors.muted}` UPPERCASE label. Active: transparent + `{colors.ink}` UPPERCASE label + 2px ink underline. 12px vertical padding, no horizontal radius.

Brand Signature

**`m-stripe-divider`** — A 4px-tall horizontal tricolor stripe (`{colors.m-blue-light}` → `{colors.m-blue-dark}` → `{colors.m-red}`). Only in M-model contexts, motorsport badges, or as an M-related section divider. Absent from the corporate main flow; on M-model detail pages and the M Performance badge it plays an inline divider role.

CTA / Footer

**`cta-band-photo`** — A pre-footer "Discover the New iX3"-style band. Background `{colors.surface-dark}` with a full-bleed vehicle photo. Centered headline in `{typography.display-md}` (32px / 700) + a single `{component.button-secondary-on-dark}`. 80px padding.

**`footer`** — The closing soft-grey footer. Background `{colors.surface-soft}` (#f7f7f7 — not pure white — soft grey), text `{colors.body}`. A 4-column link list: Models / Services / Dealers / About. Vertical padding 64px. Below, a copyright line in `{typography.body-sm}` with `{colors.muted}`.

Do's and Don'ts

Do

Don't

Responsive Behavior

Breakpoints

| Name | Width | Key Changes |

|---|---|---|

| Mobile | < 768px | Hamburger nav; hero h1 64→40px; model card grid 1-up; configurator filter chips 2-up; footer 4 col → 1 col |

| Tablet | 768–1024px | Top nav narrows, secondary menu hides under "More"; model card 2-up; inventory 2-up |

| Desktop | 1024–1440px | Full top-nav; 4-up or 5-up model card grid; inventory 3-up; full configurator UI |

| Wide | > 1440px | Same as desktop, content fixed at 1440px; gutters absorb the rest |

Touch Targets

Collapsing Strategy

Image Behavior

Iteration Guide

1. Focus on a single component. Reference its YAML key directly (`{component.model-card}`, `{component.button-primary}`).

2. New components default to `{rounded.none}` (0px). Use `{rounded.full}` only for circular icon buttons.

3. Variants (`-active`, `-disabled`, `-selected`) live as separate entries inside the `components:` block.

4. `{token.refs}` everywhere — never inline hex.

5. Hover state is never documented. Only Default and Active/Pressed states.

6. Display headlines stay BMW Type Next Latin 700; body stays Light 300; the trio is fixed.

7. Keep UI strings in a single language — match the locale of the page.

Known Gaps