← All designs
Automotive

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 reservation flows ride a card-based 4-up grid, where each card holds a model render, a name, and a "Learn More" link.

Color Tokens

#1c69d4primary
#0653b6primary-active
#d6d6d6primary-disabled
#262626ink
#3c3c3cbody
#1a1a1abody-strong
#6b6b6bmuted
#9a9a9amuted-soft
#e6e6e6hairline
#cccccchairline-strong

version: alpha name: BMW description: 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 reservation flows ride a card-based 4-up grid, where each card holds a model render, a name, and a "Learn More" link.

colors: 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: display-xl: fontFamily: "'BMW Type Next Latin', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif" fontSize: 64px fontWeight: 700 lineHeight: 1.05 letterSpacing: 0 display-lg: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 48px fontWeight: 700 lineHeight: 1.1 letterSpacing: 0 display-md: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 32px fontWeight: 700 lineHeight: 1.15 letterSpacing: 0 display-sm: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 24px fontWeight: 700 lineHeight: 1.25 letterSpacing: 0 title-lg: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 20px fontWeight: 700 lineHeight: 1.3 letterSpacing: 0 title-md: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 18px fontWeight: 700 lineHeight: 1.4 letterSpacing: 0 title-sm: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 16px fontWeight: 700 lineHeight: 1.4 letterSpacing: 0 body-md: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 16px fontWeight: 300 lineHeight: 1.55 letterSpacing: 0 body-sm: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 14px fontWeight: 300 lineHeight: 1.55 letterSpacing: 0 caption: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 12px fontWeight: 400 lineHeight: 1.4 letterSpacing: 0.5px label-uppercase: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 13px fontWeight: 700 lineHeight: 1.3 letterSpacing: 1.5px textTransform: uppercase button: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 14px fontWeight: 700 lineHeight: 1.0 letterSpacing: 0.5px nav-link: fontFamily: "'BMW Type Next Latin', sans-serif" fontSize: 14px fontWeight: 400 lineHeight: 1.4 letterSpacing: 0.3px

rounded: none: 0px xs: 2px sm: 4px md: 8px lg: 12px pill: 9999px full: 9999px

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

components: top-nav: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.nav-link}" height: 64px button-primary: backgroundColor: "{colors.primary}" textColor: "{colors.on-primary}" typography: "{typography.button}" rounded: "{rounded.none}" padding: 14px 32px height: 48px button-primary-active: backgroundColor: "{colors.primary-active}" textColor: "{colors.on-primary}" rounded: "{rounded.none}" button-primary-disabled: backgroundColor: "{colors.primary-disabled}" textColor: "{colors.muted}" rounded: "{rounded.none}" button-secondary: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.button}" rounded: "{rounded.none}" padding: 13px 31px height: 48px button-secondary-on-dark: backgroundColor: transparent textColor: "{colors.on-dark}" typography: "{typography.button}" rounded: "{rounded.none}" padding: 13px 31px button-text-link: backgroundColor: transparent textColor: "{colors.ink}" typography: "{typography.label-uppercase}" text-link: backgroundColor: transparent textColor: "{colors.ink}" typography: "{typography.body-md}" hero-band-dark: backgroundColor: "{colors.surface-dark}" textColor: "{colors.on-dark}" typography: "{typography.display-xl}" padding: 80px hero-photo-band: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.display-lg}" padding: 80px model-card: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.title-md}" rounded: "{rounded.none}" padding: 24px model-card-photo: backgroundColor: "{colors.surface-card}" rounded: "{rounded.none}" feature-photo-card: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.title-md}" rounded: "{rounded.none}" padding: 24px spec-cell: backgroundColor: transparent textColor: "{colors.ink}" typography: "{typography.display-sm}" rounded: "{rounded.none}" padding: 24px inventory-card: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.title-sm}" rounded: "{rounded.none}" padding: 16px filter-chip: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.caption}" rounded: "{rounded.none}" padding: 8px 14px filter-chip-active: backgroundColor: "{colors.ink}" textColor: "{colors.on-dark}" rounded: "{rounded.none}" configurator-option-tile: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.none}" padding: 16px 24px configurator-option-tile-selected: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" rounded: "{rounded.none}" padding: 15px 23px text-input: backgroundColor: "{colors.canvas}" textColor: "{colors.ink}" typography: "{typography.body-md}" rounded: "{rounded.none}" padding: 14px 16px height: 48px cookie-consent-card: backgroundColor: "{colors.canvas}" textColor: "{colors.body}" typography: "{typography.body-sm}" rounded: "{rounded.none}" padding: 24px category-tab: backgroundColor: transparent textColor: "{colors.muted}" typography: "{typography.label-uppercase}" rounded: "{rounded.none}" category-tab-active: backgroundColor: transparent textColor: "{colors.ink}" typography: "{typography.label-uppercase}" rounded: "{rounded.none}" m-stripe-divider: backgroundColor: transparent rounded: "{rounded.none}" cta-band-photo: backgroundColor: "{colors.surface-dark}" textColor: "{colors.on-dark}" typography: "{typography.display-md}" padding: 80px footer: backgroundColor: "{colors.surface-soft}" textColor: "{colors.body}" typography: "{typography.body-sm}" padding: 64px

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:

  • Light {colors.canvas} is the base surface; dark navy {colors.surface-dark} appears only inside hero bands — page rhythm relies on contrast.
  • BMW corporate blue ({colors.primary} — #1c69d4) acts as the single primary action color.
  • BMW Type Next Latin: weight 700 display against weight 300 body is the signature.
  • Buttons are rectangular, 0px radius — corporate dialect, distinct from M's sportier radii.
  • Model cards run as 4-up or 5-up grids with no hairline border or only minimal border — just white plate + photo + title.
  • Photography (model renders) sits in environment, no shadow — depth comes entirely from color-block contrast.
  • M tricolor stripe appears only in M-model contexts — not part of the corporate language.
  • Section rhythm holds at {spacing.section} (80px) for every major band.

Colors

Brand & Accent

  • BMW Blue (Primary) ({colors.primary} — #1c69d4): The single brand action color. All primary CTAs, "Learn More" link prefixes (blue text), nav-link active state. Press shifts to {colors.primary-active} (#0653b6).
  • M Blue Light ({colors.m-blue-light} — #0066b1) + M Blue Dark ({colors.m-blue-dark} — #1c69d4) + M Red ({colors.m-red} — #e22718): The M tricolor stripe — appears on the corporate site only on M-model pages and the "M" badge. Never as CTA colors.

Surface

  • Canvas ({colors.canvas} — #ffffff): The default page surface.
  • Surface Soft ({colors.surface-soft} — #f7f7f7): Soft grey for the footer and sub-navigation bands.
  • Surface Card ({colors.surface-card} — #fafafa): The light plate behind a model card's photo block.
  • Surface Strong ({colors.surface-strong} — #ebebeb): A slightly heavier grey used as a section divider.
  • Surface Dark ({colors.surface-dark} — #1a2129): Dark navy for hero bands and large dark CTAs. Not pure black — carries a warm undertone.
  • Surface Dark Elevated ({colors.surface-dark-elevated} — #262e38): One step lighter, used for nested cards on top of the dark hero.

Hairlines

  • Hairline ({colors.hairline} — #e6e6e6): The 1px divider — input outline, configurator card outline, table separator.
  • Hairline Strong ({colors.hairline-strong} — #cccccc): A more visible 1px outline — disabled secondary buttons, emphasized table border.

Text

  • Ink ({colors.ink} — #262626): All display and primary text. Not pure black — soft against photography.
  • Body ({colors.body} — #3c3c3c): Default running text.
  • Body Strong ({colors.body-strong} — #1a1a1a): Emphasized paragraphs and lead text.
  • Muted ({colors.muted} — #6b6b6b): Footer links, breadcrumbs, captions.
  • Muted Soft ({colors.muted-soft} — #9a9a9a): Disabled text, fine-print legal.
  • On Primary ({colors.on-primary} — #ffffff): White text on a blue button.
  • On Dark ({colors.on-dark} — #ffffff): White text on a dark hero band.
  • On Dark Soft ({colors.on-dark-soft} — #bbbbbb): A slightly muted white for secondary text on dark bands.

Semantic

  • Success ({colors.success} — #22c55e): Confirmation messages and "available" indicators.
  • Warning ({colors.warning} — #f59e0b): Warning callouts.
  • Error ({colors.error} — #dc2626): Validation errors.

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:

  • BMW Type Next Latin (700) → display headlines, button labels, nav links
  • BMW Type Next Latin Light (300) → paragraphs, descriptive copy
  • BMW Type Next Latin (400) → caption, neutral nav-link contexts

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

TokenSizeWeightLine HeightLetter SpacingUse
{typography.display-xl}64px7001.050Hero h1 ("iX3", model name)
{typography.display-lg}48px7001.10Section heads
{typography.display-md}32px7001.150Sub-section heads
{typography.display-sm}24px7001.250CTA-band headlines
{typography.title-lg}20px7001.30Card group titles
{typography.title-md}18px7001.40Model card title, intro paragraphs
{typography.title-sm}16px7001.40Inventory card title, list label
{typography.body-md}16px300 (Light)1.550Default body — BMW Type Next Latin Light
{typography.body-sm}14px300 (Light)1.550Footer body, fine-print
{typography.caption}12px4001.40.5pxPhoto captions, meta
{typography.label-uppercase}13px7001.31.5px"LEARN MORE" inline links, category tabs
{typography.button}14px7001.00.5pxStandard CTA button label
{typography.nav-link}14px4001.40.3pxTop-nav menu items

Principles

  • The 700/300 contrast is the editorial signature. Weight 500 is absent from the system.
  • No negative letter-spacing — BMW Type Next Latin works on a wide body, so tracking stays at default. Apple/Cal.com-style tightening reads off-brand here.
  • UPPERCASE inline links — "LEARN MORE"-style CTAs run uppercase with 1.5px tracking. The "machined precision" voice.
  • Weight 400 lives in a narrow lane — only caption and nav-link, both neutral utility roles.

Note on Font Substitutes

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

  • Inter (variable) — close match at weight 700/300. Leave letter-spacing at 0.0em.
  • Saira Condensed — for a slightly more compressed BMW Type feel.

Layout

Spacing System

  • Base unit: 8px.
  • Tokens: {spacing.xxs} 4px · {spacing.xs} 8px · {spacing.sm} 12px · {spacing.md} 16px · {spacing.lg} 24px · {spacing.xl} 32px · {spacing.xxl} 48px · {spacing.section} 80px.
  • Section padding: {spacing.section} (80px) for every major editorial band.
  • Card internal padding: {spacing.lg} (24px) for model and feature cards.

Grid & Container

  • Max content width: ~1440px center-aligned.
  • Editorial body: A single 12-column grid.
  • Model card grids: 4-up or 5-up at desktop, 2-up at tablet, 1-up on mobile.
  • Configurator inventory grids: 3-up filter row + 4-up vehicle cards, dense layout.

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

LevelTreatmentUse
FlatNo shadow, no borderBody, top nav, footer, hero bands
Soft hairline1px {colors.hairline} borderConfigurator option tile, table divider
Card surface{colors.surface-card} background — no shadowModel card photo plate
PhotographicEdge-to-edge photographyHero 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

  • 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. Not part of the main corporate flow.
  • Photographic depth — full-bleed vehicle photography (lighting + subject) does the work chrome would otherwise do.

Shapes

Border Radius Scale

TokenValueUse
{rounded.none}0pxEvery button, card, input, configurator chip — the dominant radius
{rounded.xs}2pxVery small badges, very rare
{rounded.sm}4pxSmall inline button (rare)
{rounded.md}8pxMobile-only collapse cards (rare)
{rounded.lg}12pxVery rare — modal/dialog corners
{rounded.pill}9999pxFilter 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

  • Hero photography is full-bleed at 16:9 or 21:9 cinematic ratio.
  • Model card photos sit at 16:10, edge-to-edge with {rounded.none} corners.
  • Configurator vehicle renders sit on a white studio background, full silhouette visible.

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

  • Sit every page on {colors.canvas} (pure white); reserve {colors.surface-dark} for hero bands only.
  • Pair primary CTAs with {colors.primary} (BMW Blue) + {colors.on-primary} white text + {rounded.none} 0px corners — the corporate signature.
  • Set display headlines in BMW Type Next Latin 700 and body in Light 300. The contrast is non-negotiable.
  • Use UPPERCASE letter-spaced links like "LEARN MORE" as inline CTAs.
  • Place the model card photo on {colors.surface-card} with the title beneath — the standard BMW corporate pattern.
  • Hold section rhythm at {spacing.section} (80px) — tighter than BMW M's 96px.
  • Reserve the M tricolor stripe for M-model contexts and motorsport dividers.

Don't

  • Don't add a brand color other than blue — BMW Blue is the only primary action color.
  • Don't use pill or rounded buttons — {rounded.none} (0px) rectangular IS the brand button.
  • Don't drop display weight to 500 — the system uses 700 / 400 / 300; 500 is absent.
  • Don't bold body type — Light 300 is the BMW corporate editorial voice.
  • Don't add drop shadows to cards — depth comes from photo + color-block contrast.
  • Don't repeat the same surface mode across two consecutive bands — light → dark hero → light → light feature → dark CTA → light footer rotation is required.
  • Don't use the M tricolor stripe as a CTA fill — divider/accent role only.
  • Don't mix languages in a single page — UI language must stay consistent.

Responsive Behavior

Breakpoints

NameWidthKey Changes
Mobile< 768pxHamburger nav; hero h1 64→40px; model card grid 1-up; configurator filter chips 2-up; footer 4 col → 1 col
Tablet768–1024pxTop nav narrows, secondary menu hides under "More"; model card 2-up; inventory 2-up
Desktop1024–1440pxFull top-nav; 4-up or 5-up model card grid; inventory 3-up; full configurator UI
Wide> 1440pxSame as desktop, content fixed at 1440px; gutters absorb the rest

Touch Targets

  • {component.button-primary} minimum 48 × 48px — above WCAG AAA (44 × 44).
  • {component.text-input} height 48px.
  • Category tabs run with 12px vertical padding, giving an effective tap area > 44px.

Collapsing Strategy

  • The top nav collapses to a hamburger below 768px; the menu opens as a full-screen sheet.
  • The hero band's internal layout drops to a single column.
  • Model card grid 4-up/5-up → 2-up → 1-up.
  • The configurator filter chip row scrolls horizontally on mobile.
  • The M tricolor stripe stays at 4px height across every breakpoint.

Image Behavior

  • Model renders scale at every breakpoint while preserving native aspect ratios.
  • Hero photography may shift to a more vertical crop on mobile (art direction).
  • Inventory vehicle photos may move from 16:9 to 4:3 on mobile.

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

  • BMW Type Next Latin is licensed to BMW and not published as a public web font; Inter at weights 700/300 is documented as the substitute.
  • Animation and transition timings (configurator color swap, model card hover-reveal) are out of scope here.
  • Form validation states beyond {component.text-input} focus were not extracted — error/success states would need a dedicated form page.
  • The dealer inventory sub-domain shares typography and color with the main corporate site; only UI density rises (filters, tables, prices).
  • A cookie consent overlay can occlude part of the hero — the lead hero band content may not be fully captured.
  • The M tricolor stripe appears infrequently on this corporate site; full motorsport context lives on the BMW M site.