KKUONIDesign System

Components

Destination Card

Stable

Destination cards are the primary listing unit for browsable holidays. They appear in grids, carousels and country lists throughout kuoni.co.uk.

Purpose

Destination cards let travellers browse holidays by place. They appear wherever a grid of destinations is presented — the homepage featured destinations section, the /destinations/ listing page, and region sub-pages like /destinations/africa/.

Destination cards are always links. The entire card surface is interactive — never nest additional interactive elements (buttons, secondary links) inside a destination card.

Usage

Reach for DestinationCard when the browsing unit is a place — a country, region, or island group — rather than a bookable product. When the unit is a specific holiday package, hotel, or itinerary, use TripCard or AccommodationCard instead, which carry pricing and availability rather than editorial description.

Three visual variants exist because the card appears in fundamentally different contexts:

  • Featured — editorial, image-forward. Used for hero destination slots, carousels, and marquee placement. The image does the work; the title rides the gradient.
  • Standard — the workhorse thumbnail. Used in 3- and 4-column grids where multiple destinations are compared at a glance.
  • Text — no image. Used in country-level lists where the user is already inside a region (e.g. the Africa country list) and images would repeat or clutter.

Anatomy

  1. 1
    ImageAspect ratio 3:2. Object-fit cover. Scales slightly on hover for a subtle depth cue.
  2. 2
    Region tagOptional. 11px uppercase letter-spaced label above the title. Provides geographic context in mixed-region grids.
  3. 3
    TitleDestination name. 16–20px semibold. On featured variant, overlaid on the gradient; on standard, below the image.
  4. 4
    DescriptionOptional 1–2 sentence summary. 14px grey. Clamped to 2 lines on standard; unclamped below image on featured.
  5. 5
    Explore linkTeal text link "Explore →". Appears below description. The entire card is also a link — this is a secondary affordance.
  6. 6
    Card containerRounded corners (8px), subtle border, light shadow that lifts on hover (scale 1.01 + deeper shadow).

Variants

Large 3:2 image fills the card. A dark-to-transparent gradient covers the bottom third; the destination name and optional region tag sit on the gradient in white text. A description can appear below the image in a white content area.

When to use: Hero destination slots, homepage featured destinations carousel, editorial "Pick of the week" placements. One featured card per visible viewport is enough — more than two competing featured cards compete for attention.

Do

Use featured for a single marquee destination at the top of a section or page.

One featured card per section focuses the eye on the editorial choice.

Don't

Place more than one featured card in the same row or section.

Multiple featured cards compete — no single destination stands out.


Standard

Thumbnail image stacked above metadata. The default and most common variant. Works in responsive grids from 2-up on mobile to 4-up on large desktop.

When to use: Any grid or carousel listing. The default — reach for this variant unless you have a specific reason for featured or text.

Do

Use the standard variant for grids — it balances image impact with textual information at a scannable size.

Image fills the 3:2 ratio; title and description provide context below.

Don't

Use the standard variant without an image prop — use the text variant instead.

Without an image the card loses its primary emotional hook.


Text

No image. Title + short descriptor + teal "Explore →" link. Used in region-level country lists where images would repeat (every card would show a savannah or a beach and become indistinguishable).

When to use: Country lists inside a region page (e.g. all countries in Africa on /destinations/africa/). Also appropriate inside a mega-menu for destination links.

States

Default

Card shows at rest with a light shadow (0 2px 8px rgba(0,0,0,0.08)). The image is static and the "Explore →" link is teal but not underlined.

Hover

The shadow deepens, the card lifts slightly (scale(1.01)), the image zooms fractionally (scale(1.03)), and the "Explore →" link gains an underline. All transitions are 200ms ease.

The hover effect communicates interactivity without an explicit button — the card itself is the CTA.

Grid layout

Standard destination cards sit in responsive grids. Use a consistent number of columns per breakpoint:

BreakpointColumnsGap
Mobile (below 768px)1 or 216px
Tablet (768–1024px)2–316px
Desktop (above 1024px)3–424px

Best practices

Do

Keep the title to the destination name only — 'Kenya', not 'Explore Kenya'.

Destination names are short and self-explanatory; descriptions add value.

Don't

Start the title with a verb: 'Discover Morocco', 'Visit Kenya'.

The 'Explore' link already signals the action; the title repeats it.

Do

Use the text variant when cards are in a list inside a region that already provides image context.

Text variant in a list stays legible when all items share the same region.

Don't

Use thumbnail images that all look the same (sunset on beach) without visual variety across cards.

Every card looks identical — the user cannot distinguish between destinations at a glance.

Props

PropTypeDefaultDescription
title*stringDestination name. Displayed as the primary heading of the card.
href*stringURL the card links to. The entire card surface is an <a> tag pointing to this URL.
variant'featured' | 'standard' | 'text''standard'Visual layout. featured=large image with gradient overlay; standard=thumbnail + metadata; text=no image.
image{ src: string; alt: string }Image object. Required for featured and standard variants; ignored for text variant.
descriptionstring1–2 sentence description of the destination. Clamped to 2 lines on standard variant.
tagstringRegion or category label shown above the title. e.g. "Indian Ocean", "East Africa". Renders in 11px uppercase.
classNamestringAdditional Tailwind classes on the root element.

Accessibility

The entire card is an <a> tag. This means:

  • Tab navigation moves to the whole card (not individual sub-elements)
  • Screen readers announce the link and read all text content inside it in document order
  • The destination name is read first, then the description, then "Explore →"

Image alt text

The alt text on the image must describe the scene, not just name the destination. The destination name is already in the title prop — repeating it in alt creates redundancy.

{/* ✅ Descriptive */}
<DestinationCard
  image={{ alt: 'Elephants crossing the Maasai Mara at sunset' }}
  title="Kenya"
/>

{/* ❌ Redundant */}
<DestinationCard
  image={{ alt: 'Kenya' }}
  title="Kenya"
/>

Gradient overlay

The image gradient and the decorative "Explore →" arrow are aria-hidden. The link text readable by screen readers comes from the title, optional description, and the visible "Explore →" text (which is not hidden — only the arrow character is decorative).

Keyboard

  • Tab → focuses the card (the outer <a>)
  • Enter → follows the link
  • No nested focusable elements — the "Explore →" text is not a separate link
  • TripCard — use when the browsing unit is a bookable holiday package rather than a destination.
  • AccommodationCard — use for a specific hotel or property rather than a place.
  • Card — the generic base card; DestinationCard is a specialised variant for destination browsing.