Examples

Example design.md

Vodafone design.md

https://www.vodafone.com/
Source site

Media & Consumer Tech

Vodafone

vodafone.com

Extracted pattern
Telecom system with monumental uppercase display, scarlet CTAs, and chaptered content bands.
Best for
Telecom products, enterprise services, plan pages, and consumer campaigns.
design.md
---
version: alpha
name: Vodafone
description: "A global telecommunications brand that earns its authority through restraint and scale: the Vodafone speechmark red is deployed with surgical precision — one logo, one CTA, one stat-highlight — while the rest of the surface stays in near-black ink on pure white. Hero headlines explode at fluid clamp sizes with a custom proprietary sans cut at weight 800 and tight -1px tracking, all-uppercase, filling the full viewport width like a broadcast. The decoration system is photography — full-bleed cinematic human portraits — not gradient or illustration. Red is never background; red is always signal."

colors:
  primary: "#e60000"
  on-primary: "#ffffff"
  ink: "#25282b"
  body: "#25282b"
  body-secondary: "#7e7e7e"
  on-dark: "#ffffff"
  hairline: "#d9d9d9"
  canvas: "#ffffff"
  canvas-card: "#ffffff"
  canvas-panel: "#ffffff"
  canvas-card-hover: "#25282b"
  canvas-dark: "#25282b"
  stats-accent: "#e60000"
  orange: "#eb6100"
  yellow: "#fecb00"
  teal: "#00697c"
  plum: "#5e2750"
  purple: "#9c2aa0"
  green: "#008a00"
  error: "#bd0000"
  utility-overlay: "#000000cc"
  display: "#25282b"
  quote: "#25282b"
  pictogram: "#25282b"

typography:
  display-hero:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: "clamp(4.8rem, 1.3585rem + 9.0566vw, 14.4rem)"
    fontWeight: 800
    lineHeight: "clamp(6rem, 3.7774rem + 5.8491vw, 12.2rem)"
    letterSpacing: "-1px"
  display-xl:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 115px
    fontWeight: 800
    lineHeight: 105px
    letterSpacing: "-1px"
  display-lg:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 64px
    fontWeight: 800
    lineHeight: 72px
    letterSpacing: "-1px"
  display-md:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 40px
    fontWeight: 800
    lineHeight: 48px
    letterSpacing: "-1px"
  display-sm:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 24px
    fontWeight: 800
    lineHeight: 32px
    letterSpacing: "normal"
  body-lg:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 20px
    fontWeight: 400
    lineHeight: 30px
  body-md:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 16px
    fontWeight: 400
    lineHeight: 24px
  body-sm:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 14px
    fontWeight: 400
    lineHeight: 20px
  caption:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 12px
    fontWeight: 400
    lineHeight: 16px
  label:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 19px
    fontWeight: 800
    lineHeight: 25px
    letterSpacing: "normal"
  button-md:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 16px
    fontWeight: 800
    lineHeight: 24px
  button-lg:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 24px
    fontWeight: 800
    lineHeight: 32px
  nav-link:
    fontFamily: "Vodafone, Arial, Helvetica, sans-serif"
    fontSize: 16px
    fontWeight: 400
    lineHeight: 24px

rounded:
  none: "0px"
  xs: "4px"
  sm: "6px"
  md: "12px"
  lg: "24px"
  xl: "40px"
  xxl: "60px"
  full: "9999px"

spacing:
  xxs: "4px"
  xs: "8px"
  sm: "11px"
  md: "16px"
  lg: "23px"
  xl: "30px"
  2xl: "44px"
  3xl: "59px"
  4xl: "89px"
  5xl: "120px"
  section: "160px"

components:
  utility-bar:
    backgroundColor: "{colors.canvas-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.body-sm}"
    padding: "{spacing.xs} {spacing.lg}"

  nav-bar:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.nav-link}"
    height: "80px"
    padding: "{spacing.xs} {spacing.lg}"
    borderBottom: "1px solid {colors.hairline}"

  nav-link:
    textColor: "{colors.ink}"
    typography: "{typography.nav-link}"
    padding: "{spacing.xs} {spacing.md}"

  nav-search-icon:
    textColor: "{colors.ink}"
    rounded: "{rounded.full}"
    padding: "{spacing.xs}"

  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-primary}"
    typography: "{typography.button-md}"
    rounded: "{rounded.none}"
    padding: "{spacing.xs} {spacing.lg}"

  button-primary-lg:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-primary}"
    typography: "{typography.button-lg}"
    rounded: "{rounded.none}"
    padding: "{spacing.sm} {spacing.xl}"

  button-secondary:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.button-md}"
    rounded: "{rounded.none}"
    padding: "{spacing.xs} {spacing.lg}"
    borderColor: "{colors.ink}"

  button-ghost-dark:
    backgroundColor: "transparent"
    textColor: "{colors.on-dark}"
    typography: "{typography.button-md}"
    rounded: "{rounded.none}"
    padding: "{spacing.xs} {spacing.lg}"
    borderColor: "{colors.on-dark}"

  hero-band:
    backgroundColor: "transparent"
    textColor: "{colors.on-dark}"
    typography: "{typography.display-hero}"
    padding: "{spacing.4xl} {spacing.lg}"

  hero-headline-outline:
    textColor: "transparent"
    typography: "{typography.display-hero}"
    description: "First line of the hero headline rendered as outline/stroke text — white stroke on dark photographic backdrop."

  hero-headline-filled:
    textColor: "{colors.on-dark}"
    typography: "{typography.display-hero}"
    description: "Second line of the hero headline rendered as solid white fill — uppercase, full-bleed width."

  hero-body-quote:
    textColor: "{colors.on-dark}"
    typography: "{typography.body-lg}"
    padding: "{spacing.md} {spacing.lg}"
    description: "Lead paragraph beneath hero headline, set off by a left-edge white vertical rule / border-left treatment."

  card-marketing:
    backgroundColor: "{colors.canvas-card}"
    textColor: "{colors.ink}"
    typography: "{typography.body-md}"
    rounded: "{rounded.none}"
    padding: "{spacing.lg}"

  card-marketing-hover:
    backgroundColor: "{colors.canvas-card-hover}"
    textColor: "{colors.on-dark}"
    typography: "{typography.body-md}"
    rounded: "{rounded.none}"
    padding: "{spacing.lg}"

  card-stat:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.display-md}"
    rounded: "{rounded.none}"
    padding: "{spacing.lg}"
    accentColor: "{colors.stats-accent}"

  feature-band:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.display-lg}"
    padding: "{spacing.5xl} {spacing.lg}"

  feature-band-dark:
    backgroundColor: "{colors.canvas-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.display-lg}"
    padding: "{spacing.5xl} {spacing.lg}"

  section-label:
    textColor: "{colors.ink}"
    typography: "{typography.label}"
    description: "All-caps or heavy-weight section eyebrow label used above section headlines."

  footer:
    backgroundColor: "{colors.canvas-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.body-sm}"
    padding: "{spacing.4xl} {spacing.lg}"

  footer-link:
    textColor: "{colors.on-dark}"
    typography: "{typography.body-sm}"

  link-inline:
    textColor: "{colors.primary}"
    typography: "{typography.body-md}"

  badge-utility:
    backgroundColor: "{colors.canvas-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.caption}"
    rounded: "{rounded.xs}"
    padding: "{spacing.xxs} {spacing.xs}"

  form-input:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    borderColor: "{colors.hairline}"
    typography: "{typography.body-md}"
    rounded: "{rounded.none}"
    padding: "{spacing.xs} {spacing.md}"
    height: "48px"

  ex-pricing-tier:
    description: "Default content card with ink hover-flip — canvas surface at rest, dark ink surface on hover."
    backgroundColor: "{colors.canvas-card}"
    textColor: "{colors.ink}"
    borderColor: "{colors.hairline}"
    rounded: "{rounded.none}"
    padding: "{spacing.lg}"

  ex-pricing-tier-featured:
    description: "Featured / highlighted tier — polarity-flipped to canvas-dark surface with on-dark text."
    backgroundColor: "{colors.canvas-dark}"
    textColor: "{colors.on-dark}"
    rounded: "{rounded.none}"
    padding: "{spacing.lg}"

  ex-product-selector:
    description: "Topic/category selector card — used for navigating business vs consumer segments."
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.none}"
    padding: "{spacing.lg}"

  ex-cart-drawer:
    description: "Subscription or plan summary panel — line items per service, not literal e-commerce cart."
    backgroundColor: "{colors.canvas-panel}"
    rounded: "{rounded.none}"
    padding: "{spacing.lg}"
    item-divider: "{colors.hairline}"

  ex-app-shell-row:
    description: "Sidebar or mega-menu nav row. Active state uses brand primary red as left-edge indicator."
    backgroundColor: "{colors.canvas}"
    activeIndicator: "{colors.primary}"
    rounded: "{rounded.none}"
    padding: "{spacing.xs} {spacing.md}"

  ex-data-table-cell:
    description: "Stats or data table — header uses label typography uppercase; body uses body-sm."
    headerBackground: "{colors.canvas-dark}"
    headerTypography: "{typography.label}"
    bodyTypography: "{typography.body-sm}"
    cellPadding: "{spacing.xs} {spacing.md}"
    rowBorder: "{colors.hairline}"

  ex-auth-form-card:
    description: "Sign-in / register card — flat zero-radius card with form-input primitives inside."
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.none}"
    padding: "{spacing.xl}"

  ex-modal-card:
    description: "Modal dialog surface — card-marketing chrome with soft md radius and elevated shadow."
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.md}"
    padding: "{spacing.xl}"

  ex-empty-state-card:
    description: "Empty state frame — generous padding on canvas surface with body-lg caption."
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.none}"
    padding: "{spacing.3xl}"
    captionTypography: "{typography.body-lg}"

  ex-toast:
    description: "Toast notification — flat card with xs radius, body-sm text, ink or primary surface depending on severity."
    backgroundColor: "{colors.canvas}"
    rounded: "{rounded.xs}"
    padding: "{spacing.xs} {spacing.md}"
    typography: "{typography.body-sm}"

---

## Overview

Vodafone's design language operates on a simple, powerful asymmetry: one proprietary typeface, one red, everything else in ink and white. The custom "Vodafone" sans carries every word on the site — from the 115 px hero that fills the entire viewport to the smallest 12 px caption — at weights 400 and 800. There is no midweight, no italic, no decorative face. That constraint gives the system an unusual consistency: you always know you're on a Vodafone surface because the letterforms are invariant.

The hero is the brand's defining gesture. Headlines are set all-uppercase in the custom face at a fluid clamp size that scales from roughly 48 px at mobile to 144 px at ultra-wide. The first line is rendered as an outline/stroke treatment (white stroke, transparent fill) while the second line drops to solid white fill — a typographic trick that layers the letters against the full-bleed portrait photograph behind them without occluding the image entirely. This is the brand's entire decoration system: the photograph IS the background, the type IS the foreground, and no gradient, no illustration, and no colour block intercedes.

Red (`#e60000`) appears exactly where conversion happens — the speechmark logo and the primary CTA button. Everywhere else the palette is near-black ink (`#25282b`) on pure white canvas. The CTA button is deliberately square-cornered (`border-radius: 0`), a conscious departure from the rounded-pill conventions of most consumer tech brands. That zero radius carries authority — this is a telecommunications infrastructure company, not a fintech startup. Card hover states flip polarity: the card surface inverts from white to ink (`#25282b`) with text going white, a confident interaction gesture.

The spacing system is rooted in an 8 px / 11 px dual grid — the 11.3967 px value appearing at high frequency alongside the 8 px standard, suggesting a parallel 4 px base unit with some line-height-derived spacings. Section padding is generous: `89 px` top/bottom on interior bands, `120–160 px` on hero-scale regions, giving the full-bleed photography room to assert itself. The overall effect reads as broadcast media adapted for the web — big, direct, human.

## Colors

### Brand Red
- **Primary** (`{colors.primary}` — `#e60000`): The Vodafone signature red. Used exclusively for the speechmark logo, primary CTA buttons, and stat-highlight numerals. Never used as a surface background at section scale.
- **Error / Deep Red** (`{colors.error}` — `#bd0000`): The pressed / danger variant of the brand red. Used for destructive confirmations and error states.
- **Stats Accent** (`{colors.stats-accent}` — `#e60000`): Same hex as primary; named separately to signal its role as a data-highlight colour in stats modules.

### Surface
- **Canvas** (`{colors.canvas}` — `#ffffff`): The default page and card surface — pure white.
- **Canvas Card** (`{colors.canvas-card}` — `#ffffff`): Explicit card surface token, mirrors canvas. Cards sit at rest on white.
- **Canvas Card Hover** (`{colors.canvas-card-hover}` — `#25282b`): The polarity-flip ink surface that cards reveal on hover. White text on dark ink — the brand's confident interaction signature.
- **Canvas Panel** (`{colors.canvas-panel}` — `#ffffff`): Panel / drawer surface, matching canvas.
- **Canvas Dark** (`{colors.canvas-dark}` — `#25282b`): The near-black ink surface used for the utility bar, footer, and polarity-flipped content bands.

### Text
- **Ink / Body** (`{colors.ink}` — `#25282b`): Every heading and paragraph on light surfaces. The brand's only "black."
- **Body Secondary** (`{colors.body-secondary}` — `#7e7e7e`): Muted secondary text — captions, disclaimers, supporting copy.
- **On Dark** (`{colors.on-dark}` — `#ffffff`): All text rendered on `{colors.canvas-dark}` surfaces — hero copy, footer links, utility bar.
- **Display** (`{colors.display}` — `#25282b`): Semantic alias for display-scale headline colour on light surfaces.
- **Quote** (`{colors.quote}` — `#25282b`): Pull-quote text colour.
- **Pictogram** (`{colors.pictogram}` — `#25282b`): Icon and pictogram fill on light surfaces.
- **Utility Overlay** (`{colors.utility-overlay}` — `#000000cc`): Semi-transparent black used for overlays, scrim layers behind modals and drawers.

### Secondary Palette
The CSS custom properties expose a full secondary palette used across sub-brands and category indicators:
- **Orange** (`{colors.orange}` — `#eb6100`): Secondary-3, used for product-category labelling and alert states.
- **Yellow** (`{colors.yellow}` — `#fecb00`): Secondary-4, used for warning indicators and category highlights.
- **Teal** (`{colors.teal}` — `#00697c`): Secondary-1, used for sustainability and environment-related content.
- **Plum** (`{colors.plum}` — `#5e2750`): Secondary-2, used for Vodafone Foundation and social impact content.
- **Purple** (`{colors.purple}` — `#9c2aa0`): Secondary-6, used for innovation / technology-forward content areas.
- **Green** (`{colors.green}` — `#008a00`): Secondary-5, used for positive status indicators and eco-content.
- **Hairline** (`{colors.hairline}` — `#d9d9d9`): Dividers, card borders, input strokes.

## Typography

### Font Family
The entire site runs on a single proprietary face: **Vodafone** (a custom geometric humanist sans commissioned for the brand). It appears at two weights only: 400 (body) and 800 (display, buttons, labels). There is no 500, no 600, no 700. The absence of intermediate weights is deliberate — it creates a high-contrast typographic rhythm between display and body that reads at broadcast scale.

Open-source substitutes: *Nunito* (800 weight) is the closest geometric with comparable width for display; *Roboto* 400 works as a body substitute. Neither is a precise match — the proprietary face has distinctive letterform details not found in free alternatives.

### Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.display-hero}` | clamp(4.8rem → 14.4rem) | 800 | clamp(6rem → 12.2rem) | -1px | Full-viewport hero headline. Fluid, all-caps, outline + fill split. |
| `{typography.display-xl}` | 115px | 800 | 105px | -1px | Large display at fixed hero scale when fluid clamp is not used. |
| `{typography.display-lg}` | 64px | 800 | 72px | -1px | Section headlines — "Our purpose", "Our company". |
| `{typography.display-md}` | 40px | 800 | 48px | -1px | Card cluster headlines, stats numbers. |
| `{typography.display-sm}` | 24px | 800 | 32px | normal | Sub-section headings, card titles. |
| `{typography.body-lg}` | 20px | 400 | 30px | — | Lead paragraphs — the hero body quote beneath the headline. |
| `{typography.body-md}` | 16px | 400 | 24px | — | Default body paragraph, card body text. |
| `{typography.body-sm}` | 14px | 400 | 20px | — | Secondary body, footer links, nav utility text. |
| `{typography.caption}` | 12px | 400 | 16px | — | Fine print, legal disclaimers, badge labels. |
| `{typography.label}` | 19px | 800 | 25px | normal | Section eyebrow labels and h3-level sub-headings. |
| `{typography.button-md}` | 16px | 800 | 24px | — | Standard CTA button label. |
| `{typography.button-lg}` | 24px | 800 | 32px | — | Hero-scale CTA label ("OUR PURPOSE →"). |
| `{typography.nav-link}` | 16px | 400 | 24px | — | Primary nav link text. |

### Principles
- **All-caps at display scale.** Hero headlines ("EVERYONE. / CONNECTED") are always all-uppercase. This is not optional — it is the brand's broadcast voice.
- **Outline + fill split is the hero device.** First line outline/stroke, second line solid fill. Do not render both lines as solid fill; the outline treatment is the distinctive visual signature.
- **-1px tracking at display.** All display tokens carry a -1px letter-spacing. At 115 px scale this is barely perceptible, but it tightens the letterforms into a dense block. Never letter-space positively at display sizes.
- **Weight 800 only for emphasis.** Buttons, headlines, labels. Body and secondary copy stay at weight 400. The binary contrast is the system.
- **No italic, no oblique.** The Vodafone face is used upright at all times in the captured surfaces.

## Layout

### Spacing System
- **Base unit**: 4 px, with an overlapping 8 px / 11.4 px dual grid derived from line-height cascades.
- **Tokens**: `{spacing.xxs}` 4 px · `{spacing.xs}` 8 px · `{spacing.sm}` 11 px · `{spacing.md}` 16 px · `{spacing.lg}` 23 px · `{spacing.xl}` 30 px · `{spacing.2xl}` 44 px · `{spacing.3xl}` 59 px · `{spacing.4xl}` 89 px · `{spacing.5xl}` 120 px · `{spacing.section}` 160 px.
- **Section padding**: interior content bands use `{spacing.4xl}` (89 px) top/bottom. Hero-scale bands use `{spacing.5xl}` to `{spacing.section}` to give photography room to breathe.
- **Card interior**: `{spacing.lg}` (23 px) default; tighter at `{spacing.md}` for dense grids.
- **Inline gap**: nav link rows and button clusters use `{spacing.xs}` to `{spacing.md}` between siblings.

### Grid & Container
- **Max width**: approximately 1280–1400 px; content centres with horizontal gutters of `{spacing.lg}` on desktop, `{spacing.md}` on mobile.
- **Column patterns**:
  - Hero: full-bleed photograph with overlaid type — no column grid, the type wraps to the viewport.
  - Feature card row: 3-up or 4-up at desktop, collapsing to 1-up at mobile.
  - Stats band: 2-up or 3-up stat cards with a left-side red numeral.
  - Utility bar: single full-width row with right-aligned subsidiary nav links.

### Whitespace Philosophy
Photography IS the whitespace equivalent. The full-bleed hero portrait commands the entire viewport — no padding squeezes it, no container clips it. Interior sections use generous vertical spacing so the page breathes between discrete content blocks. Cards are square-cornered and flush-edged; their breathing room comes from the grid gutter, not interior padding inflation. The overall cadence is: large open bands, tight cards within them.

### Responsive Strategy

#### Breakpoints

| Name | Width | Key Changes |
|---|---|---|
| Mobile | < 600px | Hero type scales down to 4.8rem minimum; nav collapses to hamburger; card grids drop to 1-up. |
| Tablet | 600–960px | 2-up card grids; nav remains horizontal with fewer visible links. |
| Desktop | 960–1280px | Full 3-up / 4-up card grids; hero at full fluid scale. |
| Wide | ≥ 1280px | Container caps; hero type approaches 14.4rem maximum. |

#### Touch Targets
The primary CTA button ("OUR PURPOSE →") renders at approximately 48 px tall — meeting WCAG minimum touch target at all breakpoints. Square-cornered buttons inflate their tap area via padding rather than radius increase.

#### Collapsing Strategy
- **Nav**: full horizontal link row at desktop; hamburger menu at mobile.
- **Hero**: photography stays full-bleed at all breakpoints; type scales fluidly via clamp; outline/fill headline split is preserved at all sizes.
- **Card grids**: 4-up → 2-up → 1-up; zero-radius cards maintain their shape.
- **Stats band**: 3-up → 1-up; red numeral accent is always preserved.

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Level 0 — Flat | No shadow, no border. | Full-bleed hero photography bands and footer. |
| Level 1 — Hairline | `0 0 0 1px {colors.hairline}` border. | Default card chrome on white canvas — the edge that separates card from page. |
| Level 2 — Subtle Drop | `0px 2px 8px rgba(0,0,0,0.08)` | Slightly elevated interactive cards on hover states. |
| Level 3 — Panel | `0px 4px 16px rgba(0,0,0,0.12)` | Mega-menu / dropdown panel surfaces. |
| Level 4 — Modal | `0px 8px 32px rgba(0,0,0,0.16)` | Modal dialog and drawer surfaces. |

The brand favours surface-colour contrast (white card / ink hover-flip) as its primary depth cue rather than shadow layering. Shadows are used sparingly — when they appear, they are single-offset, not stacked. The polarity-flip hover interaction is the brand's distinctive elevation gesture.

### Decorative Depth
- **Full-bleed photography as atmospheric backdrop**: the hero portrait occupies 100 vw × 100 vh; type overlays it with the outline/fill split. The photograph is the brand's entire decorative system at hero scale.
- **Ink polarity-flip as section depth**: switching from white canvas to `{colors.canvas-dark}` ink is the primary inter-section depth cue — used in the utility bar, footer, and dark-band sections.
- **Card hover inversion**: white-to-ink flip on hover is the brand's signature interactive depth gesture, signalling interactivity without a shadow.

## Components

### Buttons

**`button-primary`** — the canonical Vodafone red square-cornered CTA button.
- Background `{colors.primary}`, text `{colors.on-primary}`, label in `{typography.button-md}`, padding `{spacing.xs} {spacing.lg}`, shape `{rounded.none}` (0 px radius). The zero radius is non-negotiable — it is a brand identity marker, not a default.

**`button-primary-lg`** — the hero-scale red CTA ("OUR PURPOSE →").
- Background `{colors.primary}`, text `{colors.on-primary}`, label in `{typography.button-lg}` (24 px / 800), same zero radius. Arrow icon appended as part of the label.

**`button-secondary`** — white button with ink border, light-surface contexts.
- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}` border, label in `{typography.button-md}`, shape `{rounded.none}`.

**`button-ghost-dark`** — transparent button with white border on dark/photographic surfaces.
- Background `transparent`, text `{colors.on-dark}`, white border, label in `{typography.button-md}`, shape `{rounded.none}`.

### Navigation

**`utility-bar`** — the slim top bar above the main nav.
- Background `{colors.canvas-dark}` (near-black `#25282b`), text `{colors.on-dark}`, links in `{typography.body-sm}` — "Vodafone Business / Vodafone Foundation / Our sites ▾". Anchors the page with an ink band before the white nav.

**`nav-bar`** — the main horizontal navigation.
- Background `{colors.canvas}`, text `{colors.ink}`, height 80 px, padding `{spacing.xs} {spacing.lg}`. Left: red speechmark logo SVG. Centre: primary nav links in `{typography.nav-link}`. Right: search icon.

**`nav-link`** — individual nav link items.
- Text `{colors.ink}`, typography `{typography.nav-link}`, padding `{spacing.xs} {spacing.md}`. No visible radius at rest; underline or colour shift on hover.

**`nav-search-icon`** — the circular search icon button at the right of the nav bar.
- Text `{colors.ink}`, shape `{rounded.full}`, padding `{spacing.xs}`.

### Hero & Bands

**`hero-band`** — full-viewport cinematic band with photography backdrop and type overlay.
- Background: transparent (photography sits beneath), text `{colors.on-dark}`, padding `{spacing.4xl} {spacing.lg}`. Contains `hero-headline-outline`, `hero-headline-filled`, `hero-body-quote`, and `button-primary-lg`.

**`hero-headline-outline`** — first line of the hero headline, rendered as white stroke on transparent fill.
- Typography `{typography.display-hero}`, all-uppercase, visible only as outline against the photograph. The brand's most distinctive single typographic gesture.

**`hero-headline-filled`** — second line of the hero headline, rendered as solid white fill.
- Typography `{typography.display-hero}`, all-uppercase, solid `{colors.on-dark}` fill.

**`hero-body-quote`** — the lead paragraph beneath the hero headline.
- Typography `{typography.body-lg}`, color `{colors.on-dark}`, left-edge white vertical rule (border-left decoration), padding `{spacing.md} {spacing.lg}`.

**`feature-band`** — white interior section band.
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.5xl} {spacing.lg}`. Section headline in `{typography.display-lg}`.

**`feature-band-dark`** — ink-surface interior section band.
- Background `{colors.canvas-dark}`, text `{colors.on-dark}`, padding `{spacing.5xl} {spacing.lg}`.

### Cards

**`card-marketing`** — standard marketing content card at rest.
- Background `{colors.canvas-card}`, text `{colors.ink}`, padding `{spacing.lg}`, shape `{rounded.none}`. Carries Level 1 hairline border.

**`card-marketing-hover`** — card on hover / active state (polarity-flipped).
- Background `{colors.canvas-card-hover}` (ink), text `{colors.on-dark}`, padding `{spacing.lg}`, shape `{rounded.none}`.

**`card-stat`** — the statistics module card.
- Background `{colors.canvas}`, text `{colors.ink}`, numeral in `{typography.display-md}` coloured `{colors.stats-accent}` (red), padding `{spacing.lg}`, shape `{rounded.none}`.

### Utilities

**`section-label`** — the heavy-weight section eyebrow label above section headlines.
- Text `{colors.ink}`, typography `{typography.label}` (19 px / 800).

**`link-inline`** — inline body-copy links.
- Text `{colors.primary}` (red), typography `{typography.body-md}`.

**`badge-utility`** — small utility badge / tag.
- Background `{colors.canvas-dark}`, text `{colors.on-dark}`, typography `{typography.caption}`, shape `{rounded.xs}` 4 px, padding `{spacing.xxs} {spacing.xs}`.

**`form-input`** — text input field.
- Background `{colors.canvas}`, text `{colors.ink}`, border `1px solid {colors.hairline}`, typography `{typography.body-md}`, shape `{rounded.none}` (zero radius, matching button system), height 48 px, padding `{spacing.xs} {spacing.md}`.

**`footer`** — the bottom navigation band.
- Background `{colors.canvas-dark}`, text `{colors.on-dark}`, typography `{typography.body-sm}`, padding `{spacing.4xl} {spacing.lg}`. Column headers in `{typography.label}` (800 weight); link rows in `{typography.body-sm}` 400.

**`footer-link`** — individual footer nav links.
- Text `{colors.on-dark}`, typography `{typography.body-sm}`.

## Do's and Don'ts

### Do
- Reserve `{colors.primary}` (`#e60000`) for the logo, primary CTAs, and stat-highlight numerals only. Red earns its impact through scarcity.
- Use `{rounded.none}` (0 px) on all buttons and form inputs. The square corner is a brand identity marker, not a gap in the design system.
- Set hero headlines all-uppercase with the outline/fill split — first line outline, second line filled white. Both lines must use `{typography.display-hero}` at the fluid clamp scale.
- Use the proprietary Vodafone face at weight 800 for all display, label, and button copy; weight 400 for all body and secondary text. No intermediate weights.
- Apply -1px letter-spacing at all display token sizes. Tighter tracking at large sizes is part of the broadcast voice.
- Use full-bleed portrait photography as the hero's entire decorative system. The photograph is the brand; do not overlay gradients, illustrations, or colour blocks on it.
- Flip card surfaces from white to ink (`{colors.canvas-card-hover}`) on hover. This polarity inversion is the brand's signature interactive gesture.
- Set body quotes and lead paragraphs beneath hero headlines with a left-edge vertical rule decoration.

### Don't
- Don't round button corners. A pill or even a 4 px radius on a Vodafone button is a brand violation — zero radius only.
- Don't use red as a section background. Red is never a surface; it is always a signal.
- Don't introduce intermediate font weights (500, 600, 700). The binary 400/800 contrast is the system; midweights dilute it.
- Don't letter-space display headlines positively. Negative or neutral only.
- Don't render hero headlines in mixed case. All-uppercase is mandatory at display scale.
- Don't miniaturise the photography crop. Full-bleed is the only sanctioned treatment for hero photography.
- Don't use the secondary palette colours (teal, plum, purple, orange, yellow, green) as primary interactive elements. They are category indicators and should appear in content contexts only.
- Don't use italic or oblique type. The Vodafone face is set upright at all times.
- Don't apply heavy drop-shadows to cards. Hairline borders and polarity-flip hover states are the elevation system; deep shadows read as foreign to the brand.
Preview from tokens
AI-enriched
This independent example is based on publicly observable design signals from vodafone.com. Brand marks are shown only to identify the source site. No affiliation, sponsorship, or endorsement is implied.