KKUONIDesign System

Foundations

Spacing

The 4 px base unit, the nine-step scale, and the rules that give every Kuoni layout its sense of calm and proportion.

Good spacing is invisible. A traveller browsing holidays should feel a sense of ease and openness, not count pixels. That ease comes from one decision made once: every gap, padding and margin is a multiple of 4 px. The result is a rhythm that ties every component together even when they were built by different people at different times.

The scale has nine steps — from the 4 px gap between an icon and its label to the 96 px breathing room inside a full-bleed hero section. Use only these nine values. One-off values like 5 px, 13 px or 19 px break the rhythm in ways that are small individually but cumulative across a full page.


Visual scale

Each bar below is exactly as wide as its spacing value. The token and rem equivalent sit to the right.

space.14px0.25remIcon-to-label gap, tight badge padding, border offset.
space.28px0.5remChip and badge internal padding, dense list item gap.
space.312px0.75remButton padding (vertical), compact input gap, tab padding (vertical).
space.416px1remCard padding (minimum), form field gap, grid gap (minimum).
space.624px1.5remCard padding (comfortable), grid gap (standard), section internal top.
space.832px2remBetween card groups, large internal section spacing.
space.1248px3remMajor section vertical separator, bottom of page-level components.
space.1664px4remBetween major page sections on desktop.
space.2496px6remHero section vertical padding (desktop), full-bleed section breathing room.

Token reference

TokenpxremTailwindTypical use
space.14 px0.25 remp-1 / gap-1Icon-to-label, badge internal, border offset
space.28 px0.5 remp-2 / gap-2Chip padding, dense list item gap, small button gap
space.312 px0.75 remp-3 / gap-3Button padding vertical, compact input, tab vertical
space.416 px1 remp-4 / gap-4Card padding minimum, form field gap, grid gap min
space.624 px1.5 remp-6 / gap-6Card padding comfortable, grid gap standard
space.832 px2 remp-8 / gap-8Between card groups, section internal top padding
space.1248 px3 remp-12 / gap-12Major section separator, component bottom
space.1664 px4 remp-16 / gap-16Between major page sections on desktop
space.2496 px6 remp-24 / gap-24Hero section padding, full-bleed breathing room

When to use each step

4 px — the atomic unit

The smallest value in the scale. Used only where two things need to feel attached rather than separate: the gap between a check icon and its label text, the space between a badge background and its border. If you find yourself reaching for 4 px between two distinct components, you probably want 8 px.

8 px — tight internal spacing

The inner padding of small components: chips, filter checkboxes, icon buttons. The gap between items in a dense navigation list. 8 px feels tight on purpose — it groups tightly-related elements without crowding them.

12 px — compact control spacing

Button padding (vertical direction), the gap between stacked form inputs in a compact layout, tab vertical padding. The step where things start to feel comfortably tappable (a 12 px top + 12 px bottom + 16 px type = 40 px minimum tap target).

16 px — the baseline

The default margin when in doubt. If something feels too tight but 24 px feels too loose, 16 px is almost always the answer. Card padding minimum, form field vertical gap, grid gap minimum on mobile. The step that feels neutral — neither tight nor generous.

24 px — generous and readable

The step that makes layouts breathe. Card internal padding on desktop, standard grid gap between cards, spacing between a heading and its first paragraph. If you use 16 px and the layout feels cramped, step up to 24 px before reaching for anything in between.

32 px — between groups

Used to separate visually distinct groups within a section: between the "Accommodation" block and the "Flights" block on a holiday card, or between the header of a collapsible and its expanded content. 32 px says "these two things are related but distinct".

48 px — section separator

The vertical space between major content sections within a page: between the hero and the first card grid, between a grid and a contact module. Enough space to signal a new topic without requiring a horizontal rule.

64 px — page rhythm

Between major page sections on desktop viewports. At this size the spacing itself communicates that you have moved to a genuinely different part of the page. Below tablet width, drop 64 px to 48 px.

96 px — hero breathing room

The padding inside full-bleed hero sections where a large destination image meets the page edge. This amount of space lets the image breathe and prevents text from feeling pinned to the edge. On mobile, reduce to 48 px.


Component examples

Card: internal padding

A standard Kuoni holiday card uses space.6 (24 px) for horizontal and vertical padding on all four sides. The gap between the meta row (destination tag, star rating) and the price block uses space.4 (16 px). Icon-to-text alignment inside the meta row uses space.1 (4 px).

Image · 288 × 144 px
Indian Ocean·5 Stars

Soneva Fushi, Maldives

7 nights · Full board

from

£4,250

per person

Spacing breakdown for this card:

  • Content padding: space.6 (24 px) all sides
  • Meta row to title: space.4 (16 px)
  • Title to body copy: space.1 (4 px)
  • Body copy to price block: space.4 (16 px)
  • Inside meta row (separator dots): space.1 (4 px)

List items: gap between entries

Stacked items in a vertical list (itinerary days, included extras, filter options) use space.4 (16 px) between them. Dense filter checkboxes use space.2 (8 px). Navigation links inside the sidebar use space.1 (4 px).

Kenya
Tanzania
South Africa
Morocco
Rwanda

Spacing in this list:

  • Item vertical padding: space.4 (16 px) top + bottom = 32 px touch target
  • Icon-to-label gap: space.2 (8 px)
  • List horizontal padding: space.4 (16 px)

Page margins

Content on desktop sits inside a max-width container (1280 px) with space.6 (24 px) gutters on each side. At tablet width the gutter stays at space.6 (24 px). On mobile the gutter drops to space.4 (16 px) to maximise the reading width without the content touching the screen edge.

16 px gutter

Content area

16 px gutter
ViewportGutterContent max-width
Mobile (< 768 px)space.4 16 px100%
Tablet (768–1024 px)space.6 24 px100%
Desktop (> 1024 px)space.6 24 px1280 px
Reading column (docs)space.10 40 px860 px

Usage

Do

Use only the nine scale steps. When in doubt, reach for the next step up rather than splitting the difference.

Every gap is a token — consistent and refactorable.

Don't

Use one-off values like 10 px, 14 px, 20 px, or 36 px — even once.

Off-scale values break the rhythm silently.

Do

Tighten spacing between things that belong together (icon + label at 4 px) and widen it between things that are independent (card groups at 32 px).

Use spacing to communicate relationship.

Don't

Apply the same spacing value between every element regardless of relationship.

Identical spacing makes everything feel equally related.

Do

Reduce 96 px to 48 px and 64 px to 48 px on mobile viewports to keep content compact on small screens.

Scale down on mobile — don't copy desktop spacing.

Don't

Use desktop spacing values unchanged on mobile.

96 px padding on a 375 px screen leaves almost no content room.