Color

Three layers: a palette of hues, semantic roles that say what a colour is for, and components that read roles only. Every pair meets WCAG 2.2 AA, and every value and ratio on this page is read from the live tokens.

Three layers

  • Palette--comb-palette-hue-step. Raw hues. Never used in a component.
  • Roles--comb-color-*. What a colour means: text, icon, background, surface, border. The only layer components use.
  • ComponentsThe kb- classes. They read roles, so one change to a role moves every screen.

Old names such as --ink-600, --gold-dark and --paper still work. They are aliases to a step or a role, marked deprecated, and new code does not use them.

Palette

Seven hues on a ten-step ramp. The neutral is warm grey cut from the paper hue, so text and paper share a temperature. Steps 700 and up reach 4.5:1 on every surface, 500 and 600 reach 3:1, and white reaches 4.5:1 on every 600.

Neutral

Warm grey, cut from the paper hue so text and paper share a temperature.

  • 0Reading
  • 50Reading
  • 100Reading
  • 200Reading
  • 300Reading
  • 400Reading
  • 500Reading
  • 600Reading
  • 700Reading
  • 800Reading
  • 900Reading
  • 1000Reading

Gold

Brand. Step 400 is the KiBee gold; 600 is the primary fill.

  • 50Reading
  • 100Reading
  • 200Reading
  • 300Reading
  • 400Reading
  • 500Reading
  • 600Reading
  • 700Reading
  • 800Reading
  • 900Reading

Ruby

Danger, breach, destructive.

  • 50Reading
  • 100Reading
  • 200Reading
  • 300Reading
  • 400Reading
  • 500Reading
  • 600Reading
  • 700Reading
  • 800Reading
  • 900Reading

Teal

Success, done, live.

  • 50Reading
  • 100Reading
  • 200Reading
  • 300Reading
  • 400Reading
  • 500Reading
  • 600Reading
  • 700Reading
  • 800Reading
  • 900Reading

Sky

Information, in progress.

  • 50Reading
  • 100Reading
  • 200Reading
  • 300Reading
  • 400Reading
  • 500Reading
  • 600Reading
  • 700Reading
  • 800Reading
  • 900Reading

Amber

Warning. Warm, from the gold and olive family.

  • 50Reading
  • 100Reading
  • 200Reading
  • 300Reading
  • 400Reading
  • 500Reading
  • 600Reading
  • 700Reading
  • 800Reading
  • 900Reading

Olive

Discovery and quiet accents.

  • 50Reading
  • 100Reading
  • 200Reading
  • 300Reading
  • 400Reading
  • 500Reading
  • 600Reading
  • 700Reading
  • 800Reading
  • 900Reading

Text

Every text role reaches 4.5:1 on the surfaces and backgrounds named beside it. Pick by meaning, not by looks.

Text roles
ExampleRoleMeant forContrastUsage
--comb-color-textReadingon surfaceNot measuredBody text and headings.
--comb-color-text-subtleReadingon surfaceNot measuredSecondary text, ghost buttons, tab labels.
--comb-color-text-subtlestReadingon surface-sunkenNot measuredHints, timestamps, placeholders and field help.
--comb-color-text-disabledReadingon surfaceNot measuredDisabled controls only. Exempt from contrast.
--comb-color-text-inverseReadingon bg-neutral-boldNot measuredText on a dark plate.
--comb-color-text-inverse-subtleReadingon bg-neutral-boldNot measuredSecondary text on a dark plate.
--comb-color-text-linkReadingon surfaceNot measuredLinks and text-only actions.
--comb-color-text-link-pressedReadingon surfaceNot measuredA link while it is hovered or pressed.
--comb-color-text-brandReadingon bg-brand-subtleNot measuredBrand-coloured labels on a gold tint.
--comb-color-text-dangerReadingon bg-danger-subtleNot measuredErrors, SLA breach, destructive copy.
--comb-color-text-warningReadingon bg-warning-subtleNot measuredCaution and at-risk states.
--comb-color-text-successReadingon bg-success-subtleNot measuredDone, live, saved.
--comb-color-text-infoReadingon bg-info-subtleNot measuredInformation and in progress.
--comb-color-text-discoveryReadingon bg-discovery-subtleNot measuredNew and discovery.
--comb-color-text-on-boldReadingon bg-brand-boldNot measuredText and icons on any bold fill.
--comb-color-text-on-accentReadingon bg-accentNot measuredText on the gold accent fill.

Icon

Icons and meaningful graphics reach 3:1 on every surface. An icon that carries a state also carries a word.

Icon roles
ExampleRoleMeant forContrastUsage
--comb-color-iconReadingon surfaceNot measuredDefault icons.
--comb-color-icon-subtleReadingon surfaceNot measuredQuiet icons, chevrons, idle dots.
--comb-color-icon-brandReadingon surfaceNot measuredBrand marks and the current item.
--comb-color-icon-dangerReadingon surfaceNot measuredAlarm dots and error icons.
--comb-color-icon-warningReadingon surfaceNot measuredCaution icons.
--comb-color-icon-successReadingon surfaceNot measuredOnline dots and saved ticks.
--comb-color-icon-infoReadingon surfaceNot measuredInformation icons.

Background

Bold fills carry white text and are the only place a status gets loud. Subtle fills carry the matching text role.

Background roles
ExampleRoleMeant forContrastUsage
--comb-color-bg-neutralReadingwith textNot measuredNeutral lozenges and badges.
--comb-color-bg-neutral-hoveredReadingwith textNot measuredNeutral fill while hovered.
--comb-color-bg-neutral-boldReadingwith text-inverseNot measuredDark plates and tooltips.
--comb-color-bg-brand-boldReadingwith text-on-boldNot measuredThe one primary action.
--comb-color-bg-brand-bold-hoveredReadingwith text-on-boldNot measuredPrimary while hovered.
--comb-color-bg-brand-bold-pressedReadingwith text-on-boldNot measuredPrimary while pressed.
--comb-color-bg-brand-subtleReadingwith text-brandNot measuredGold lozenges and current rows.
--comb-color-bg-accentReadingwith text-on-accentNot measuredThe gold fill: bars, highlights, avatars.
--comb-color-bg-selectedReadingwith textNot measuredSelected rows and chips.
--comb-color-bg-selected-boldReadingwith text-on-boldNot measuredA selected control that fills.
--comb-color-bg-disabledReadingwith text-disabledNot measuredA disabled control.
--comb-color-bg-danger-boldReadingwith text-on-boldNot measuredThe danger button and alarm badge.
--comb-color-bg-danger-bold-hoveredReadingwith text-on-boldNot measuredDanger while hovered.
--comb-color-bg-danger-subtleReadingwith text-dangerNot measuredBreach lozenges and error notices.
--comb-color-bg-warning-subtleReadingwith text-warningNot measuredCaution lozenges and notices.
--comb-color-bg-success-subtleReadingwith text-successNot measuredDone lozenges and notices.
--comb-color-bg-info-subtleReadingwith text-infoNot measuredIn-progress lozenges and notices.
--comb-color-bg-discovery-subtleReadingwith text-discoveryNot measuredNew and discovery.
--comb-color-bg-success-boldReadingwith text-on-boldNot measuredA filled success state.
--comb-color-bg-info-boldReadingwith text-on-boldNot measuredA filled information state.
--comb-color-bg-warning-boldReadingwith text-on-boldNot measuredA filled caution state.
--comb-color-bg-discovery-boldReadingwith text-on-boldNot measuredA filled discovery state.
--comb-color-bg-control-offReadingwith surface-overlayNot measuredThe off track of a switch, with its white knob.
--comb-color-bg-inputReadingwith textNot measuredField fill.
--comb-color-bg-input-hoveredReadingwith textNot measuredField fill while hovered.

Surface

Surfaces are opaque, so a text ratio is the same wherever the plate sits. The page ground is surface; plates are raised; menus and dialogs are overlay.

Surface roles
ExampleRoleMeant forContrastUsage
--comb-color-surfaceReadingwith textNot measuredThe console ground.
--comb-color-surface-sunkenReadingwith textNot measuredRails, board columns and wells.
--comb-color-surface-raisedReadingwith textNot measuredPlates and cards.
--comb-color-surface-overlayReadingwith textNot measuredMenus, popovers and dialogs.
--comb-color-surface-hoveredReadingwith textNot measuredA surface row while hovered.

Border

Borders that identify a control or a state reach 3:1. Hairlines that only divide are decoration and say so.

Border roles
ExampleRoleMeant forContrastUsage
--comb-color-borderReadingon surfaceNot measuredHairlines between areas.
--comb-color-border-subtleReadingon surfaceNot measuredThe quietest divider.
--comb-color-border-boldReadingon surfaceNot measuredHover edges and strong dividers.
--comb-color-border-inputReadingon surfaceNot measuredField, select and checkbox edges.
--comb-color-border-focusedReadingon surfaceNot measuredThe focus ring, on every surface.
--comb-color-border-brandReadingon surfaceNot measuredBrand-coloured outlines.
--comb-color-border-selectedReadingon surfaceNot measuredThe edge of a selected row or chip.
--comb-color-border-dangerReadingon surfaceNot measuredError outlines.
--comb-color-border-warningReadingon surfaceNot measuredCaution outlines.
--comb-color-border-successReadingon surfaceNot measuredSuccess outlines.
--comb-color-border-infoReadingon surfaceNot measuredInformation outlines.

Map and storefront sets

Two dark grounds exist inside the console: the visitors map and the plugin storefront hero. Their inks are only for those grounds.

Map and storefront sets tokens
ExampleTokenValueContrastUsage
Map ink--comb-map-inkReadingNot measuredText on the visitors map.
Map muted--comb-map-mutedReadingNot measuredSecondary text on the map.
Map hint--comb-map-hintReadingNot measuredHints on the map.
Hero text--comb-hero-textReadingNot measuredStorefront hero copy.
Hero gold--comb-hero-goldReadingNot measuredStorefront hero accent.
Hero gold light--comb-hero-gold-lightReadingNot measuredStorefront hero highlight.

Using color

Each role is measured against the role it is meant for. Surfaces are opaque, so a ratio is the same wherever a plate sits. Ratios are rounded down, so a pair never reads as passing when it does not. A sample whose pair is weak is announced as an image with its ratio in its name, never as text.

  • Pass Text roles reach 4.5:1. Icons, control edges and the focus ring reach 3:1.
  • Exempt Disabled controls and decorative hairlines have no minimum, and never carry meaning alone.
  • Fail A role that falls below its minimum. The test suite fails before it ships.

Do and don't

Gold once per view

A gold fill marks the main action, and a view has one. When two actions compete, one of them becomes secondary. Gold text is never set on paper: links use the link role, which is the dark end of gold.

DoGive the view one gold action on the trailing edge, and make the rest secondary or ghost.
Don'tPut two gold buttons side by side. The person has to stop and work out which one matters.

Roles, not steps

Write color: var(--comb-color-text-danger), not a ruby step or --ruby-dark. The role already holds the contrast, and it can be retuned in one place.

One meaning per colour

ResolvedBreached, 2h over
DoKeep teal for done and ruby for a breach or handoff, and say the state in words.
BillingVIP
Don'tColour a label people made up. Labels are tags, and tags carry no colour meaning.