Design system & HTML standards

This guide documents the design system used across the Brandkit codebase and sets the HTML standards for building portal pages. It is intended as a working reference: an overview of how the component classes fit together, the markup patterns to follow, and the colours, badges, banners, and buttons available to use.

Use the examples as copy-paste starting points, and prefer the documented classes over ad-hoc styling so portal themes stay consistent and predictable.

Colours Badges Banners Buttons

How the class system works

Every component in this design system is built from up to three layers of class: a base class, a variant class, and optionally one or more modifier classes.

Base class
Sets the structural foundation — layout, spacing, transitions, and interactive states like hover and disabled.
Variant class
Defines the visual intent — colour, fill, and border. For example .button-outline gives a transparent background with a primary-coloured border, while .button-danger gives a semantic red fill.
Modifier class
Changes the shape or layout without affecting colour. .button-pill rounds a button into a pill shape and can be combined with any variant. .button-full-width stretches a button to fill its container.

Buttons have two base classes:

The pattern is always base + variant (+ optional modifier):

<!-- base + variant -->
<a href="#" class="bk-button button-outline">Share</a>

<!-- base + variant + modifier -->
<a href="#" class="bk-button button-outline button-pill">Edit profile</a>
<a href="#" class="bk-button button-danger button-pill">Remove</a>

The same base/variant/modifier pattern applies to badges: .badge is the base, .badge-danger is the variant, and .badge-pill or .badge-filled are modifiers.

Colours

The colour system is exposed as CSS custom properties on :root. Eight semantic families map to the status meanings used across badges, banners, and buttons, each with a base colour plus lighter, mid, and darker steps. The base step is the default; -light suits fills and backgrounds, -mid suits borders and muted accents, and -dark suits text and hover states. Reference them in theme CSS as var(--success), var(--success-light), and so on.

Success

Positive outcome, confirmation, completed states.

SwatchVariableHex
--success-light#eaf6ee
--success-mid#28a745
--success#198754
--success-dark#0f5132

Warning

Caution, pending attention, non-blocking issues.

SwatchVariableHex
--warning-light#fff3eb
--warning-mid#fea362
--warning#e56910
--warning-dark#a54800

Danger

Errors, destructive actions, expired or failed states.

SwatchVariableHex
--danger-light#ffeceb
--danger-mid#f4a8a5
--danger#c9372c
--danger-dark#ae2e24

Info

Informational messages and neutral highlights.

SwatchVariableHex
--info-light#e9f2ff
--info-mid#8ebeff
--info#0969da
--info-dark#0055cc

Neutral

Default UI text, borders, and muted backgrounds.

SwatchVariableHex
--neutral-light#f1f2f4
--neutral-mid#bdc3c7
--neutral#44546f
--neutral-dark#374151

Primary

Brand primary (Brandkit black) for key actions and emphasis.

SwatchVariableHex
--primary-light#f8f8f8
--primary-mid#646464
--primary#000000
--primary-dark#212121

Secondary

Brand secondary (Brandkit purple) for accents and secondary actions.

SwatchVariableHex
--secondary-light#eee7f4
--secondary-mid#c4a8d8
--secondary#8246af
--secondary-dark#5c2d82

Accent

Brand accent (Brandkit yellow) for highlights and call-outs.

SwatchVariableHex
--accent-light#fff8dc
--accent-mid#ffe999
--accent#ffd100
--accent-dark#7a5c00

Badges

Inline status labels. Every badge uses the base badge class plus one colour class. Add modifier classes to change the shape (badge-pill) or fill style (badge-filled). Badges scale with their surrounding text size, so they sit naturally inside headings and body copy.

Colour variants

Eight colour variants are available. Each carries a semantic meaning — match the colour to the status you're communicating.

VariantMeaning
badge-neutralDefault / no particular status
badge-successPositive outcome, active, complete
badge-warningCaution, needs attention
badge-dangerError, expired, destructive state
badge-infoInformational note
badge-primaryBrand primary colour
badge-secondaryBrand secondary colour
badge-accentBrand accent colour

Outline (default)

The eight colour variants in their default outline style.

Neutral Success Warning Danger Info Primary Secondary Accent
<span class="badge badge-neutral">Neutral</span>
<span class="badge badge-success">Success</span>
<span class="badge badge-warning">Warning</span>
<span class="badge badge-danger">Danger</span>
<span class="badge badge-info">Info</span>
<span class="badge badge-primary">Primary</span>
<span class="badge badge-secondary">Secondary</span>
<span class="badge badge-accent">Accent</span>

Pill

Add badge-pill for fully rounded corners.

Neutral Success Warning Danger Info Primary Secondary Accent
<span class="badge badge-success badge-pill">Success</span>

Filled

Add badge-filled for a solid background instead of an outline. Combine with badge-pill for filled pills.

Neutral Success Warning Danger Info Primary Secondary Accent
Neutral Success Warning Danger Info Primary Secondary Accent
<span class="badge badge-success badge-filled">Success</span>
<span class="badge badge-success badge-filled badge-pill">Success</span>

Scaling with text size

Badges inherit the font size of their context, so they pair cleanly with headings and body text.

Heading 1 New

Heading 2 Draft

Heading 3 Active

Paragraph Expired

Small text Info
<h1>Heading 1 <span class="badge badge-primary badge-pill">New</span></h1>
<p>Paragraph <span class="badge badge-danger">Expired</span></p>

Dot badges

A minimal status indicator — a coloured dot with no label. Use badge-dot plus a colour class, which can be followed by descriptive text.

Neutral Success Warning Danger Info Primary Secondary Accent
<span class="badge-dot badge-success"></span> Success
<span class="badge-dot badge-danger"></span> Danger

Banners

Full-width message blocks for page-level feedback or notices. Apply the colour class directly to a <div>. Use <strong> inside to emphasise the message type.

Text banners

This is an info message. Something to be aware of.
This is a success message. Everything went well.
This is a warning message. Proceed with caution.
This is a danger message. Action required.
This is a neutral message. Something to note.
This is a primary message. Brandkit black.
This is a secondary message. Brandkit purple.
This is an accent message. Brandkit yellow.
<div class="info">This is an <strong>info</strong> message. Something to be aware of.</div>
<div class="success">This is a <strong>success</strong> message. Everything went well.</div>
<div class="warning">This is a <strong>warning</strong> message. Proceed with caution.</div>
<div class="danger">This is a <strong>danger</strong> message. Action required.</div>
<div class="neutral">This is a <strong>neutral</strong> message. Something to note.</div>
<div class="primary">This is a <strong>primary</strong> message. Brandkit black.</div>
<div class="secondary">This is a <strong>secondary</strong> message. Brandkit purple.</div>
<div class="accent">This is an <strong>accent</strong> message. Brandkit yellow.</div>

Text colours

Utility classes for colouring inline or block text to match status meaning.

text-success

text-info

text-warning

text-danger

<p class="text-success">text-success</p>
<p class="text-info">text-info</p>
<p class="text-warning">text-warning</p>
<p class="text-danger">text-danger</p>

These can be combined with banners — for example, in these trial banner examples.

Your trial ends in 7 days. Upgrade now
Your trial has expired. Upgrade now
<div class="info trial-banner text-info">Your trial ends in 7 days. <a href="#">Upgrade now</a></div>
<div class="danger trial-banner text-danger">Your trial has expired. <a href="#">Upgrade now</a></div>

Buttons

Buttons share a common base class plus one variant class. Primary actions use .button as their base; all other variants use .bk-button. Buttons are rendered as <a href> link elements with the component classes applied.

All variants

The full set of button styles shown together. Pick the variant that matches the action's importance and intent.

Normal (legacy) Primary Outline Secondary Cancel Danger Link
<!-- legacy -->
<a href="#" class="button normal-button">Normal</a>
<a href="#" class="bk-button button-primary">Primary</a>
<a href="#" class="bk-button button-outline">Outline</a>
<a href="#" class="bk-button button-secondary">Secondary</a>
<a href="#" class="bk-button button-cancel">Cancel</a>
<a href="#" class="bk-button button-danger">Danger</a>
<a href="#" class="bk-button button-link">Link</a>

When to use each variant

VariantUse forExamples
normal-button or button-primaryThe single most important action on a page or sectionDownload, Add to basket
button-outlineSecondary actions alongside a primary actionShare, Save, Back to search
button-pillStandalone actions that suit a softer, rounded lookEdit profile
button-secondaryBrand-coloured secondary actions
button-cancelDismissing or backing out of a flowCancel, Skip, Back
button-dangerIrreversible or destructive actions, often with a confirmation dialogDelete, Remove, Disconnect
button-linkLow-emphasis actions inline with text

Disabled

Add the disabled attribute to any button.

Normal Outline Pill Secondary Cancel Danger
<a href="#" class="button normal-button" disabled aria-disabled="true">Normal</a>
<a href="#" class="bk-button button-outline" disabled aria-disabled="true">Outline</a>

Full width

Add the button-full-width modifier to stretch a button to its container's width.

Full width Full width outline
<a href="#" class="button normal-button button-full-width">Full width</a>
<a href="#" class="bk-button button-outline button-full-width">Full width outline</a>

Pill buttons

The button-pill modifier combines with any base + variant pairing. The pattern is always bk-button + variant class + button-pill.

Edit profile Remove Download
<!-- Outline pill (most common) -->
<a href="#" class="bk-button button-outline button-pill">Edit profile</a>

<!-- Danger pill -->
<a href="#" class="bk-button button-danger button-pill">Remove</a>

<!-- Primary pill -->
<a href="#" class="bk-button button-primary button-pill">Download</a>

GET STARTED TODAY

Your brand deserves
a better home.

Trusted by brands since 1994 - Free trial available.

Book a demo