Design system

Elements

The smallest building blocks. Each element is one HTML tag with one utility class, a Text or Label prop, and colour variants. Elements carry no layout of their own; the component or section around them decides alignment and spacing.

01Text

Seven tag-true text components. Each has one Text prop and three variants: Default, Muted and Accent. Colour is never set on an instance; it comes from the variant or from the section's theme.

Heading H1. Tag h1. Class heading-style-h1.

Default

Muted

Accent

Heading H2. Tag h2. Class heading-style-h2.

Default

Muted

Accent

Heading H3. Tag h3. Class heading-style-h3.

Default

Muted

Accent

Heading H4. Tag h4. Class heading-style-h4.

Default

Muted

Accent

Text Body. Tag p. Class text-style-body.

Default. The quick brown fox jumps over the lazy dog near the riverbank.

Muted. The quick brown fox jumps over the lazy dog near the riverbank.

Accent. The quick brown fox jumps over the lazy dog near the riverbank.

Text Small. Tag p. Class text-style-small.

Default. Small text for captions and meta.

Muted. Small text for captions and meta.

Accent. Small text for captions and meta.

Eyebrow. Tag p. Class text-style-eyebrow.

Default eyebrow

Muted eyebrow

Accent eyebrow

Text Caption. Tag p. Class text-style-caption. 12px. Dates, meta, fine print.

Caption text

Muted caption

Accent caption

Stat Number. Tag p. Class text-style-stat. Montserrat 600, 22px, tabular numerals. Tickers and stat cards.

10,000

7,500

02Buttons

One Button component. Props: Label, Link. Variants: White (default), Reverse, Accent, Text Link Left, Text Link Right, Text Link Center. Fill and text colours come from the Button tokens so the same variant works on both themes.

03Media

Two image elements. Image is a ratio decision: it fills its parent and the variant sets the crop. Avatar is a size decision: fixed, always circular, used wherever a person appears. Both expose Image and Alt props, and both accept CMS bindings.

Image. Tag img. Class image. Props: Image, Alt. Variants: Default, Landscape 16:9, Square, Portrait 4:5.

Default, natural ratio

Clinic team welcoming a patient

Landscape 16:9

Clinic team welcoming a patient

Square 1:1

Clinic team welcoming a patient

Portrait 4:5

Clinic team welcoming a patient

Avatar. Tag img. Class avatar. Props: Image, Alt. Variants: Small 40px, Medium 56px, Large 80px.

Placeholder headshot, smallPlaceholder headshot, mediumPlaceholder headshot, large

Rules

Every image carries alt text through its Alt prop. Photos come from the asset library or a CMS field, never pasted as a background style. Icons are not images: they are inline SVG so they can take the theme colour, and get their own element next.

04Links

Plain inline text links. Muted by default, primary on hover. Not to be confused with the Button element's Text Link variants, which carry an arrow and act as calls to action.

Link. Tag a. Class link. Props: Text, URL. Variants: Small 14px (default), Body 16px, Nav (uppercase, current-page state).

05Logos

A logo is a height decision. The element fixes the height to Size/Logo Height and lets the width follow, so any logo file lines up on a baseline. Used for the brand mark in the navbar and for partner logos in strips.

Logo. Tag img. Class logo. Props: Image, Alt. Variants: Default 28px, Partner 40px muted.

Cherry

Newsletter

06Icons

Inline SVG so every icon takes the current text colour and flips with the theme. Webflow cannot swap an SVG through a prop, so each glyph is its own small component in the Icons group. Size variants only.

Icon. Tag div.icon wrapping an inline svg. Variants: Small 16px, Medium 24px (default), Large 32px.

07Forms

Form controls. Inputs must sit inside a Webflow Form block to publish, so the samples below are wrapped in one. Label, Textarea and Select are added when a page needs them.

Form Input. Tag input. Class form-input. Placeholder, name and type are set per instance in the settings panel. Variants: Default, On Dark (translucent, for hero and CTA bands).

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.