Bedrock Design System

Color

TL;DR Only use purpose color variables for UI design - never brand colors,Permalink to: TL;DR Only use purpose color variables for UI design - never brand colors,

never hexcodes.


OverviewPermalink to: Overview

Purpose colors are color tokens - color variables available to designers and engineers when designing and developing features. But purpose colors are different from normal color tokens; they have specific purposes, and are not allowed to have a name that refers to any color, hue or tone.

Instead of using color tokens named brand-green and blueberry400 directly on UI components, we use reusable abstractions like --color-controls-border, --color-text-inverted and --color-status-negative.

The purpose colors then map to brand color tokens, like –color-status-positive: var(--wdc-color-kiwi-600);

Why would we want to do this? This makes it easy for the design system team to maintain, and maybe more importantly: change globally. For example, this gives us the ability to deploy other color themes, like dark mode or something entirely different, without having to maintain multiple themes across every single component.

This is why it is important to use the correct purpose colors when designing. If the provided purpose colors don't cover a new use case, we can create a new purpose color.


UsagePermalink to: Usage

When to usePermalink to: When to use

  • UI elements
  • UI Modules
  • Feature designs
  • System Icons must use currentColor, and will in turn inherit the color applied to the parent element.

When not to usePermalink to: When not to use

  • Graphic Icons
  • Driver Icons
  • UI Illustrations
  • Brand design

All can use the Canvas brand palette freely.


StatusPermalink to: Status

The current purpose color system was developed in 2021, when we were tasked with changing the UI colors to match Workday’s Canvas design system(external link).

This meant we had to set up the color system to fit the old Peakon color usage, and retrofit the Canvas colors.

This has resulted in some unfortunate naming, confusing structure, and duplicate purposes.

Naming will be fixed, structure will be redone and duplicates will be deprecated.


Text colorsPermalink to: Text colors

Only use these on text and label elements. Do not apply directly to icons/illustrations/borders/etc. System icons can inherit these if applied to a parent component, eg. an Alert.

Example of the different tones of text colors

HeadlinePermalink to: Headline

Most commonly used text color. Always used on headlines. Always used in controls.

color-text-heading
blackPepper400
hex: #333333

BodyPermalink to: Body

Used on paragraphs. Never used on headlines.

color-text-body
blackPepper300
hex: #494949

HintPermalink to: Hint

Used on paragraphs that is used for tips/hints about an action you can take on the page.

color-text-hint
licorice300
hex: #5e6a75

Text InvertedPermalink to: Text Inverted

Used on ANY text placed on an inverted, dark enough background. Double check whether you are within the WCAG 2.1 AA contrast range.

color-text-inverted
frenchVanilla100
hex: #ffffff

Used in paragraphs to highlight a link with blue - remember that a discreet link with just an underline in a paragraph in also okay.

color-text-link
blueberry400
hex: #076DD1

Text DisabledPermalink to: Text Disabled

Used on labels for disabled controls.

color-text-disabled
licorice100
hex: #a1aab3

BackgroundsPermalink to: Backgrounds

PrimaryPermalink to: Primary

color-bg-primary
soap200
hex: #f0f1f2

Used on all navigation UI elements. Navbar, slidey panel header, savebar, etc.

color-bg-navigation
frenchVanilla100
hex: #ffffff

CardPermalink to: Card

Used on cards and sticks. Do not apply to navigation components.

color-bg-card
frenchVanilla100
hex: #ffffff

SurveyPermalink to: Survey

The survey is much less visually complicated than the dashboard, so we don’t need a tinted color to have contrast to cards and sticks. We did make a special purpose color to be able to support a dark mode that doesn’t necessarily share the same tone as the backgrounds defined above.

color-bg-survey
frenchVanilla100
hex: #ffffff

OverlayPermalink to: Overlay

Used whenever the user triggers a modal, a lightbox or a slidey-panel.

color-bg-overlay
blackPepper600, 60% white
hex: #000000

Status backgroundsPermalink to: Status backgrounds

color-bg-alert
cantaloupe100, 50% white
hex: #FFF7EC
color-bg-success
kiwi100, 50% white
hex: #F6FEEB
color-bg-error
cinnamon100, 30% white
hex: #FFF4F3
color-bg-info
blueberry100, 50% white
hex: #EBF5FE
color-bg-unread
blueberry100, 50% white
hex: #EBF5FE

BorderPermalink to: Border

color-border
soap300
hex: #e8ebed

Our cards used to have a border, due to the lack of drop shadows. Now that we have the drop shadows from Canvas, we’ve removed the outer strokes from cards, but still use the same purpose-color to divide large cards. Also used in drop lists, and to separate sections on white background.

color-border-section
soap500
hex: #ced3d9

Used to separate sections on bg-primary


Button ColorsPermalink to: Button Colors

The button purpose colors are a great example of where the old Peakon brand to Workday transition led to way too many purpose colors. This will be cleaned up.

Read more about how to choose the correct button here

PrimaryPermalink to: Primary

color-btn--primary-bg
blueberry400
hex: #0875e1
color-btn--primary-border
blueberry400
hex: #0875e1
color-btn--primary-text
frenchVanilla100
hex: #ffffff
color-btn--primary-hover-bg
blueberry500
hex: #005cb9
color-btn--primary-active-bg
blueberry600
hex: #004387

SecondaryPermalink to: Secondary

color-btn--secondary-bg
frenchVanilla100
hex: #ffffff
color-btn--secondary-border
blackPepper400
hex: #333333
color-btn--secondary-text
blackPepper400
hex: #333333
color-btn--secondary-hover-bg
blackPepper400
hex: #333333
color-btn--secondary-active-bg
blackPepper500
hex: #1e1e1e

TertiaryPermalink to: Tertiary

color-btn--tertiary-bg
transparent
color-btn--tertiary-border
transparent
color-btn--tertiary-text
blackPepper400
hex: #333333
color-btn--tertiary-hover-bg
soap400
hex: #dfe2e6
color-btn--tertiary-active-bg
soap500
hex: #ced3d9
color-btn--tertiary-active-text
blackPepper500
hex: #1e1e1e

WarningPermalink to: Warning

color-btn--warning-bg
frenchVanilla100
hex: #ffffff
color-btn--warning-border
cinnamon500
hex: #D12B1F
color-btn--warning-text
cinnamon500
hex: #D12B1F
color-btn--warning-hover-bg
cinnamon500, 95% white
hex: #FDF5F4
color-btn--warning-active-bg
cinnamon500, 85% white
hex: #FAE0DE

DangerPermalink to: Danger

color-btn--danger-bg
cinnamon500
hex: #D12B1F
color-btn--danger-border
cinnamon500
hex: #D12B1F
color-btn--danger-text
frenchVanilla100
hex: #ffffff
color-btn--danger-hover-bg
cinnamon600
hex: #a31b12
color-btn--danger-active-bg
cinnamon600
hex: #931810

ControlsPermalink to: Controls

Our form controls share these purpose colors. For example, the inputs, selects, checkboxes, radio buttons, etc. all have the same border, the same background color, the same selected-marker.

color-controls-border
licorice200
hex: #7b858f
color-controls-hover-border
licorice500
hex: #333d47
color-controls-active-border
blueberry400
hex: #0875e1
color-controls-error-border
cinnamon500
hex: #D12B1F
color-controls-validated-border
kiwi500
hex: #537824
color-controls-bg
frenchVanilla100
hex: #ffffff
color-controls-hover-bg
blueberry100, 50% white
hex: #F3F9FE
color-controls--selected-bg
blueberry100
hex: #EBF5FE
color-controls--selected-hover-bg
blueberry100, 60% white
hex: #EFF7FE
color-controls--selected-marker
blueberry400
hex: #0875e1
color-controls--disabled-bg
soap100
hex: #f6f7f8
color-controls--disabled-border
licorice100
hex: #a1aab3
color-controls--danger-bg
cinnamon100
hex: #ffefee
color-controls--alert-bg
cantaloupe100
hex: #ffeed9
color-controls-placeholder-text
blackPepper200
hex: #616161
color-controls-text
blackPepper300
hex: #494949

Focus colorPermalink to: Focus color

These control the focus state. There are 4 different versions of focus indication:

VariantDescription
Blue/White/OuterAround normal controls
White/Blue/InnerWhen focusing inside a list/toggle group
Red/White/OuterAround negative controls like a Delete button
White/Red/InnerWhen focusing inside a list/toggle group on negative options
color-focus-inner
frenchVanilla100
hex: #ffffff
color-focus-outer
blueberry400
hex: #0875e1
color-focus--negative-inner
frenchVanilla100
hex: #ffffff
color-focus--negative-outer
cinnamon500
hex: #D12B1F

Status ColorsPermalink to: Status Colors

Used to indicate statuses. Like On/Off for an attribute, Positive/Alert/Negative for privacy settings on sensitive attributes.

Note: Only relying on color to indicate a status is not enough. For accessibility, we need to be more verbose - not only for color blind users who often can’t tell the difference between red and green, but also blind users with screen readers.

color-status-positive
kiwi600
hex: #537824
color-status-warning
cantaloupe400
hex: #ffa126
color-status-negative
cinnamon500
hex: #a31b12
color-status-highlight
blueberry400
hex: #0875e1
color-status-highlight-loud
cinnamon600
hex: #a31b12

Conversation ColorsPermalink to: Conversation Colors

The conversation colors are used to tell the difference between a reply, the user's own messages, and notes - an internal discussion feature between managers.

color-conversation-user-bg
blueberry100
hex: #EBF5FE
color-conversation-user-border
blueberry200
hex: #a6d2ff
color-conversation-note-bg
sourLemon100
hex: #fff9e6
color-conversation-note-border
sourLemon300
hex: #ffda61
color-conversation-other-bg
frenchVanilla100
hex: #ffffff
color-conversation-other-border
frenchVanilla300
hex: #d4d4d4

Table ColorsPermalink to: Table Colors

Central colors for our tables. Not all tables need table-row-alt. That’s up to the designer whether it is necessary. Only wide tables are required to have “zebra striping” to help with following rows.

color-table-header
frenchVanilla100
hex: #ffffff
color-table-row
frenchVanilla100
hex: #ffffff
color-table-row-alt
soap100
hex: #f6f7f8
color-table-row--hover
blueberry100, 50% white
hex: #E7F2FD
color-table-border
soap300
hex: #e8ebed

Placeholder ColorsPermalink to: Placeholder Colors

Used for the placeholder avatars shown when the user hasn’t uploaded a profile picture. The 5 color combinations are picked “randomly”, based on a seed taken from the first character in the first name, and the first character in the last name.

Was also used for randomizing segment icon colors, before the rebrand to Workday. Now all segments are the same color.

color-placeholder-bg-1
blueberry200
hex: #a6d2ff
color-placeholder-text-1
blueberry600
hex: #004387
color-placeholder-bg-2
jewel200
hex: #acecf3
color-placeholder-text-2
jewel600
hex: #156973
color-placeholder-bg-3
islandPunch200
hex: #d2befa
color-placeholder-text-3
islandPunch600
hex: #503882
color-placeholder-bg-4
cinnamon200
hex: #fcc9c5
color-placeholder-text-4
cinnamon600
hex: #a31b12
color-placeholder-bg-5
cantaloupe200
hex: #fcd49f
color-placeholder-text-5
licorice400
hex: #4a5561
color-placeholder-bg-segment
blueberry100
hex: #d7eafc
color-placeholder-text-segment
blueberry600
hex: #004387

Score ColorsPermalink to: Score Colors

All green score colors have a blue backup for users with red-green color blindness. See Deuteranopia

color-score-negative
cinnamon500
hex: #a31b12
color-score-neutral
licorice300
hex: #5e6a75
color-score-positive
kiwi600
hex: #537824
color-score-number-detractors
cinnamon500
hex: #D12B1F
color-score-number-promoters
kiwi400
hex: #77bc1f
color-score-number-passives
licorice100
hex: #a1aab3

BenchmarkPermalink to: Benchmark

color-benchmark-bg
soap400
hex: #dfe2e6
color-benchmark-highlight
blackPepper400
hex: #333333

Graphs / Data visualizationPermalink to: Graphs / Data visualization

Used to build the grids behind our charts. Grid Line is for the lighter strokes, and Grid Line Emphasis is for the Axis lines or the zero-line.

color-viz-grid-line
soap400
hex: #dfe2e6
color-viz-grid-line-emphasis
licorice300
hex: #5e6a75
color-viz-graph-bg
frenchVanilla100
hex: #ffffff

The colors below are reserved for score and difference to benchmark related charts. For line charts, color-viz-positive can be used, but for bar charts, color-viz-positive is used for the stroke, and color-viz-positive-fill is used to fill the shape.

color-viz-positive
kiwi500
hex: #609915
color-viz-positive-fill
kiwi500, 50% white
hex: #B0CC8A
color-viz-neutral
licorice100
hex: #a1aab3
color-viz-neutral-fill
licorice100, 50% white
hex: #D0D5D9
color-viz-negative
cinnamon500
hex: #D12B1F
color-viz-negative-fill
cinnamon500, 50% white
hex: #EF9790
color-viz-warning
cantaloupe400
hex: #ffa126
color-viz-warning-fill
cantaloupe200
hex: #fcd49f

Random color visualization colorsPermalink to: Random color visualization colors

These colors are taken directly from Canvas. They are free to be used on any graph that doesn’t have anything to do with driver scores, or if two scores must be compared. Use in pairs, eg. Use color-viz-05 for the fill on the bar chart bar, and color-viz-06 as the stroke.

color-viz-01
watermelon200
hex: #b7edde
color-viz-02
watermelon300
hex: #65ccaf
color-viz-03
blueberry200
hex: #a6d2ff
color-viz-04
blueberry300
hex: #40a0ff
color-viz-05
pomegranate200
hex: #ffbdd6
color-viz-06
pomegranate300
hex: #ff5c9a
color-viz-07
cantaloupe200
hex: #fcd49f
color-viz-08
cantaloupe400
hex: #ffa126
color-viz-09
jewel200
hex: #acecf3
color-viz-10
jewel300
hex: #44c8d7
color-viz-11
sourLemon200
hex: #ffecab
color-viz-12
sourLemon400
hex: #ffc629
color-viz-13
islandPunch200
hex: #d2befa
color-viz-14
islandPunch400
hex: #8660d1
color-viz-15
chiliMango200
hex: #ffc7ab
color-viz-16
mango400
hex: #ff671b

Employee dashboard & GrowPermalink to: Employee dashboard & Grow

color-employee-self
blueberry200
hex: #a6d2ff
color-employee-self-outer
blueberry300
hex: #40a0ff
color-employee-team
islandPunch200
hex: #d2befa
color-employee-team-outer
islandPunch400
hex: #8660d1
color-employee-circle
islandPunch400
hex: #d2befa
color-employee-circle-outer
islandPunch400
hex: #8660d1
color-employee-company
pomegranate200
hex: #ffbdd6
color-employee-company-outer
pomegranate300
hex: #ff5c9a

Score Number ColorsPermalink to: Score Number Colors


Score rangesPermalink to: Score ranges

The 21 steps in the score ranges are calculated automatically, and prebaked as hexcodes.

We use math to calculate the final colors by mixing white with the negative and positive color.

AveragePermalink to: Average

Currently used on the Heatmap when the score-toggle is set to Average. This range is offset as any score below 7.0 is considered negative and any score above 8.0 is considered positive. 21 steps, 15th and 16th (7.0-8.0) is neutral/white.

color-score-avg-01
chiliMango300
hex: #ff9b69
color-score-avg-02
chiliMango300, 9% white
hex: #FFA476
color-score-avg-03
chiliMango300, 16% white
hex: #FFAB81
color-score-avg-04
chiliMango300, 23% white
hex: #FFB28C
color-score-avg-05
chiliMango300, 30% white
hex: #FFB996
color-score-avg-06
chiliMango300, 37% white
hex: #FFC0A1
color-score-avg-07
chiliMango300, 44% white
hex: #FFC7AB
color-score-avg-08
chiliMango300, 51% white
hex: #FFCEB6
color-score-avg-09
chiliMango300, 58% white
hex: #FFD5C0
color-score-avg-10
chiliMango300, 65% white
hex: #FFDCCB
color-score-avg-11
chiliMango300, 72% white
hex: #FFE3D5
color-score-avg-12
chiliMango300, 79% white
hex: #FFEAE0
color-score-avg-13
chiliMango300, 86% white
hex: #FFF1EA
color-score-avg-14
chiliMango300, 93% white
hex: #FFF8F4
color-score-avg-15
frenchVanilla100
hex: #ffffff
color-score-avg-16
frenchVanilla100
hex: #ffffff
color-score-avg-17
kiwi400, 80% white
hex: #E4F2D2
color-score-avg-18
kiwi400, 60% white
hex: #C9E4A5
color-score-avg-19
kiwi400, 40% white
hex: #ADD779
color-score-avg-20
kiwi400, 20% white
hex: #92C94C
color-score-avg-21
kiwi400
hex: #77bc1f

NPSPermalink to: NPS

Currently used on the Heatmap when the score-toggle is set to NPS 21 steps, 9th-13th (5 middle steps) is neutral/white.

color-score-nps-01
chiliMango300
hex: #ff9b69
color-score-nps-02
chiliMango300, 13% white
hex: #FFA87D
color-score-nps-03
chiliMango300, 25% white
hex: #FFB48F
color-score-nps-04
chiliMango300, 33% white
hex: #FFBC9B
color-score-nps-05
chiliMango300, 50% white
hex: #FFCDB4
color-score-nps-06
chiliMango300, 63% white
hex: #FFDAC8
color-score-nps-07
chiliMango300, 75% white
hex: #FFE6DA
color-score-nps-08
chiliMango300, 88% white
hex: #FFF3ED
color-score-nps-09
frenchVanilla100
hex: #ffffff
color-score-nps-10
frenchVanilla100
hex: #ffffff
color-score-nps-11
frenchVanilla100
hex: #ffffff
color-score-nps-12
frenchVanilla100
hex: #ffffff
color-score-nps-13
frenchVanilla100
hex: #ffffff
color-score-nps-14
kiwi400, 93% white
hex: #EFF7E4
color-score-nps-15
kiwi400, 75% white
hex: #DDEEC7
color-score-nps-16
kiwi400, 63% white
hex: #CDE6AC
color-score-nps-17
kiwi400, 50% white
hex: #BBDE8F
color-score-nps-18
kiwi400, 33% white
hex: #A4D269
color-score-nps-19
kiwi400, 25% white
hex: #99CD57
color-score-nps-20
kiwi400, 13% white
hex: #89C53C
color-score-nps-21
kiwi400
hex: #77bc1f

Difference to XPermalink to: Difference to X

Currently used on the Heatmap when viewing in “Difference to Benchmark” or “Difference to round”. 21 steps, 11th (middle step) is neutral/white.

color-score-diff-01
chiliMango300
hex: #ff9b69
color-score-diff-02
chiliMango300, 10% white
hex: #FFA578
color-score-diff-03
chiliMango300, 20% white
hex: #FFAF87
color-score-diff-04
chiliMango300, 30% white
hex: #FFB996
color-score-diff-05
chiliMango300, 40% white
hex: #FFC3A5
color-score-diff-06
chiliMango300, 50% white
hex: #FFCDB4
color-score-diff-07
chiliMango300, 60% white
hex: #FFD7C3
color-score-diff-08
chiliMango300, 70% white
hex: #FFE1D2
color-score-diff-09
chiliMango300, 80% white
hex: #FFEBE1
color-score-diff-10
chiliMango300, 90% white
hex: #FFF5F0
color-score-diff-11
frenchVanilla100
hex: #ffffff
color-score-diff-12
kiwi400, 90% white
hex: #F1F8E9
color-score-diff-13
kiwi400, 80% white
hex: #E4F2D2
color-score-diff-14
kiwi400, 70% white
hex: #D6EBBC
color-score-diff-15
kiwi400, 60% white
hex: #C9E4A5
color-score-diff-16
kiwi400, 50% white
hex: #BBDE8F
color-score-diff-17
kiwi400, 40% white
hex: #ADD779
color-score-diff-18
kiwi400, 30% white
hex: #A0D062
color-score-diff-19
kiwi400, 20% white
hex: #92C94C
color-score-diff-20
kiwi400, 10% white
hex: #85C335
color-score-diff-21
kiwi400
hex: #77bc1f

Brand ColorsPermalink to: Brand Colors

Currently we have one set of brand colors: Workday Canvas All Colors(external link)

There are way more than we actually use in the Peakon UI. To save some complexity, we will remove the unused color variables from the Bedrock package, and from Figma, so we only use a subset of the Workday colors.


DecorationPermalink to: Decoration

Icon colorsPermalink to: Icon colors

Used when the only purpose of the system icon is to be decorative - most system icons inherit the text color from the component.

color-icon-decorative
licorice200
hex: #7b858f

GradientsPermalink to: Gradients

We currently only use one gradient, which is based of the Workday Canvas color 'Blueberry'.

--color-bg-theme-gradient


AccessibilityPermalink to: Accessibility

The purpose colors have been selected carefully to be WCAG 2.1 AA Contrast compliant(external link) when combined in the intended way. If you create a new purpose color, make sure that it will have adequate contrast to the background(s).

DeuteranopiaPermalink to: Deuteranopia

The most common form of color blindness is red-green blindness. This means that users find it hard to distinguish between red and green. Since this these are the colors we use to distinguish between positive and negative, an alternative color is necessary.

For this reason, we have a set of overrides that change all our relevant green colours to blue. These overrides are applied when data-theme*="deuteranopia" is set on the document HTML tag.


ContributingPermalink to: Contributing

As a designer, creating a new purpose color is not hard, but it requires some steps to roll out correctly.

Getting it into the Bedrock package is simple, but has many steps, and can be blocked by other Bedrock updates, so start this process as early as possible.

  • Check if the purpose already is covered.
    • If it is, but you don’t like how it looks or if you’re improving a UI pattern, talk to the Design Systems team about changing it globally, or splitting the purpose. Given that many purpose colors are shared across components, expect exhaustive questions.
    • If it is not covered, talk to the Design Systems team. Expect questions about scalability, and reusability.
  • Once it’s determined that a new purpose color is required, rolling it out in Figma is instant.
  • Next step is for the engineers on the Design Systems team to include the new color in the Bedrock Package.
  • Enjoy.

It is highly encouraged to not create a purpose color that uses a hex code/RGB value directly. It should map to a brand palette color.