WPDS - Color | Foundations

Table of contents
red
blue
green
orange
teal
gold
mustard
purple
pink
yellow
gray
0
20
40
60
80
100
200
300
400
500
600
700
Note: In the graphic, the number in each color swatch is the contrast against our background color. For accessibility, large text should have at least a 3:1 ratio for AA compliance, and small text should have at least 4.5:1 for AA and 7:1 for AAA compliance. See WCAG for details.
Introduction to Our Color Palette
Our color palette is designed to cater to the diverse needs of our product's design requirements, providing a comprehensive range of colors.
Recommended Usage
While our palette offers a variety of colors suitable for a wide array of applications within our product, we strongly recommend using our theme tokens. These tokens are specifically designed to ensure that colors are applied with the correct intention and assignment, particularly in contexts where light and dark themes are utilized.
How to Reference Color Tokens
Color tokens can be referenced by combining their color group and scale. This system allows for easy identification and application of color values within your projects. For example:
gray100red300teal600
Note: The -static modifier preserves the color token's consistency across light and dark contexts. Its usage should be limited within the scope of our product to maintain design coherence.
Using our tokens in code
When you need to apply colors from the WPDS theme to your components, start by importing the theme object from the WPDS UI kit package. This enables you to use the theme's predefined color values in a type-safe manner, ensuring consistency across your application and adherence to the design system. For example:
import { theme } from "@washingtonpost/wpds-ui-kit"; theme.colors.background //Reference to the token
Theme and Semantic Tokens
Our theme tokens follow a semantic and predictable structure comprising three parts:
- Role: This defines the purpose of the token within the UI.
- Modifier (Optional): This denotes a variant, change, or subset of the role, such as -subtle*.
- State (Optional): This indicates the token's state within the UI.
Definition
subtle*: The subtle modifier ensures that the color token remains the same color across light and dark contexts.
Primary (-hover)
onPrimary
onPrimary-hover
onPrimary-subtle
onPrimary-subtle-hover
Secondary
onSecondary
onSecondary-hover
onSecondary-subtle
onSecondary-subtle-hover
Cta
onCta
onCta-hover
ctaContainer
onCtaContainer
onCtaContainer-hover
onCtaContainer-subtle
onPortal-subtle-hover
Background
onBackground
onBackground-hover
onBackground-subtle
onBackground-subtle-hover
Background-forSurfaces
onBackground
onBackground-hover
onBackground-subtle
onBackground-subtle-hover
Surface
onSurface
onSurface-hover
onSurface-subtle
onSurface-subtle-hover
Surface-highest
onSurface
onSurface-hover
onSurface-subtle
onSurface-subtle-hover
Portal
onPortal
onPortal-hover
onPortal-subtle
onPortal-subtle-hover
errorContainer
onMessage
onMessage-hover
onMessage-subtle
onMessage-subtle-hover
Use error token only for non text elements when used on semantic container
successContainer
onMessage
onMessage-hover
onMessage-subtle
onMessage-subtle-hover
Use success token only for non text elements when used on semantic container
warningContainer
onMessage
onMessage-hover
onMessage-subtle
onMessage-subtle-hover
Use warning token only for non text elements when used on semantic container.
signalContainer
onMessage
onMessage-hover
onMessage-subtle
onMessage-subtle-hover
Use signal token only for non text elements when used on semantic container.
outline
Use outine token for borders on cards
outline-subtle
Use outine-subtle token for borders on cards
Color tokens
| Name | Preview | RGBA | HEX | Description |
|---|---|---|---|---|
| alpha0 | rgba(0, 0, 0, .50) | - | ||
| alpha20 | rgba(0, 0, 0, .45) | - | ||
| alpha40 | rgba(0, 0, 0, .40) | - | ||
| alpha60 | rgba(0, 0, 0, .35) | - | ||
| alpha80 | rgba(0, 0, 0, .30) | - | ||
| alpha100 | rgba(0, 0, 0, .25) | - | ||
| alpha200 | rgba(0, 0, 0, .20) | - | ||
| alpha300 | rgba(0, 0, 0, .15) | - | ||
| alpha400 | rgba(0, 0, 0, .10) | - | ||
| alpha500 | rgba(0, 0, 0, .05) | - | ||
| alpha50 | rgba(0, 0, 0, .50) | Legacy-Token subject to be deprecated use our new alpha tokens | ||
| alpha25 | rgba(0, 0, 0, .05) | Legacy-Token subject to be deprecated use our new alpha tokens | ||
| mustard600 | rgba(251, 241, 221, 1) | - | ||
| mustard500 | rgba(254, 227, 156, 1) | - | ||
| mustard400 | rgba(247, 202, 111, 1) | - | ||
| mustard300 | rgba(235, 179, 71, 1) | - | ||
| mustard200 | rgba(217, 158, 32, 1) | - | ||
| mustard100 | rgba(226, 163, 31, 1) | - | ||
| mustard80 | rgba(193, 139, 0, 1) | - | ||
| mustard60 | rgba(145, 104, 2, 1) | - | ||
| mustard40 | rgba(100, 72, 1, 1) | - | ||
| yellow600 | rgba(253, 250, 219, 1) | - | ||
| yellow100 | rgba(255, 236, 68, 1) | - | ||
| gold600 | rgba(250, 240, 227, 1) | - | ||
| gold500 | rgba(243, 228, 205, 1) | - | ||
| gold400 | rgba(232, 203, 164, 1) | - | ||
| gold300 | rgba(222, 181, 126, 1) | - | ||
| gold200 | rgba(211, 158, 76, 1) | - | ||
| gold100 | rgba(229, 160, 56, 1) | - | ||
| gold80 | rgba(194, 136, 47, 1) | - | ||
| gold60 | rgba(158, 97, 5, 1) | - | ||
| gold40 | rgba(109, 69, 8, 1) | - | ||
| green600 | rgba(238, 249, 234, 1) | - | ||
| green500 | rgba(213, 237, 202, 1) | - | ||
| green400 | rgba(178, 214, 160, 1) | - | ||
| green300 | rgba(145, 192, 120, 1) | - | ||
| green200 | rgba(110, 169, 81, 1) | - | ||
| green100 | rgba(54, 167, 92, 1) | - | ||
| green80 | rgba(73, 147, 39, 1) | - | ||
| green60 | rgba(56, 113, 30, 1) | - | ||
| green40 | rgba(40, 81, 21, 1) | - | ||
| orange600 | rgba(255, 239, 224, 1) | - | ||
| orange500 | rgba(251, 225, 195, 1) | - | ||
| orange400 | rgba(249, 194, 150, 1) | - | ||
| orange300 | rgba(241, 162, 106, 1) | - | ||
| orange200 | rgba(230, 130, 61, 1) | - | ||
| orange100 | rgba(243, 117, 14, 1) | - | ||
| orange80 | rgba(216, 97, 0, 1) | - | ||
| orange60 | rgba(166, 74, 0, 1) | - | ||
| orange40 | rgba(118, 53, 2, 1) | - | ||
| teal600 | rgba(234, 251, 254, 1) | - | ||
| teal500 | rgba(199, 234, 239, 1) | - | ||
| teal400 | rgba(159, 203, 211, 1) | - | ||
| teal300 | rgba(118, 172, 182, 1) | - | ||
| teal200 | rgba(74, 142, 155, 1) | - | ||
| teal100 | rgba(3, 175, 202, 1) | - | ||
| teal80 | rgba(15, 113, 128, 1) | - | ||
| teal60 | rgba(15, 84, 95, 1) | - | ||
| teal40 | rgba(11, 57, 64, 1) | - | ||
| purple600 | rgba(250, 238, 249, 1) | - | ||
| purple500 | rgba(248, 221, 244, 1) | - | ||
| purple400 | rgba(234, 179, 223, 1) | - | ||
| purple300 | rgba(217, 137, 201, 1) | - | ||
| purple200 | rgba(201, 92, 182, 1) | - | ||
| purple100 | rgba(209, 56, 191, 1) | - | ||
| purple80 | rgba(182, 35, 161, 1) | - | ||
| purple60 | rgba(136, 27, 121, 1) | - | ||
| purple40 | rgba(93, 18, 84, 1) | - | ||
| pink600 | rgba(252, 233, 239, 1) | - | ||
| pink500 | rgba(249, 222, 231, 1) | - | ||
| pink400 | rgba(239, 180, 191, 1) | - | ||
| pink300 | rgba(228, 138, 155, 1) | - | ||
| pink200 | rgba(213, 94, 119, 1) | - | ||
| pink100 | rgba(255, 79, 131, 1) | - | ||
| pink80 | rgba(195, 39, 85, 1) | - | ||
| pink60 | rgba(149, 25, 64, 1) | - | ||
| pink40 | rgba(105, 11, 44, 1) | - | ||
| red600 | rgba(253, 231, 231, 1) | - | ||
| red500 | rgba(249, 221, 219, 1) | - | ||
| red400 | rgba(242, 180, 171, 1) | - | ||
| red300 | rgba(229, 138, 124, 1) | - | ||
| red200 | rgba(211, 95, 79, 1) | - | ||
| red100 | rgba(234, 0, 23, 1) | - | ||
| red80 | rgba(190, 44, 37, 1) | - | ||
| red60 | rgba(142, 31, 27, 1) | - | ||
| red40 | rgba(99, 16, 14, 1) | - | ||
| blue600 | rgba(231, 240, 254, 1) | - | ||
| blue500 | rgba(211, 231, 250, 1) | - | ||
| blue400 | rgba(172, 197, 231, 1) | - | ||
| blue300 | rgba(132, 164, 214, 1) | - | ||
| blue200 | rgba(87, 132, 197, 1) | - | ||
| blue100 | rgba(22, 109, 252, 1) | - | ||
| blue80 | rgba(19, 102, 179, 1) | - | ||
| blue60 | rgba(15, 75, 132, 1) | - | ||
| blue40 | rgba(10, 50, 88, 1) | - | ||
| gray700 | rgba(255, 255, 255, 1) | - | ||
| gray600 | rgba(247, 247, 247, 1) | - | ||
| gray500 | rgba(240, 240, 240, 1) | - | ||
| gray400 | rgba(233, 233, 233, 1) | - | ||
| gray300 | rgba(212, 212, 212, 1) | - | ||
| gray200 | rgba(170, 170, 170, 1) | - | ||
| gray100 | rgba(115, 115, 115, 1) | - | ||
| gray80 | rgba(89, 89, 89, 1) | Previously #66666 updated to aim for AAA contrast on target background | ||
| gray60 | rgba(73, 73, 73, 1) | - | ||
| gray40 | rgba(42, 42, 42, 1) | - | ||
| gray20 | rgba(17, 17, 17, 1) | - | ||
| gray0 | rgba(0, 0, 0, 1) | - | ||
| alpha0-static | rgba(0, 0, 0, .65) | - | ||
| alpha20-static | rgba(0, 0, 0, .45) | - | ||
| alpha40-static | rgba(0, 0, 0, .40) | - | ||
| alpha60-static | rgba(0, 0, 0, .35) | - | ||
| alpha80-static | rgba(0, 0, 0, .30) | - | ||
| alpha100-static | rgba(0, 0, 0, .25) | - | ||
| alpha200-static | rgba(0, 0, 0, .20) | - | ||
| alpha300-static | rgba(0, 0, 0, .15) | - | ||
| alpha400-static | rgba(0, 0, 0, .10) | - | ||
| alpha500-static | rgba(0, 0, 0, .05) | - | ||
| alpha50-static | rgba(0, 0, 0, .50) | Legacy-Token subject to be deprecated use our new alpha tokens | ||
| alpha25-static | rgba(0, 0, 0, .05) | Legacy-Token subject to be deprecated use our new alpha tokens | ||
| mustard600-static | rgba(251, 241, 221, 1) | - | ||
| mustard500-static | rgba(254, 227, 156, 1) | - | ||
| mustard400-static | rgba(247, 202, 111, 1) | - | ||
| mustard300-static | rgba(235, 179, 71, 1) | - | ||
| mustard200-static | rgba(217, 158, 32, 1) | - | ||
| mustard100-static | rgba(226, 163, 31, 1) | - | ||
| mustard80-static | rgba(193, 139, 0, 1) | - | ||
| mustard60-static | rgba(145, 104, 2, 1) | - | ||
| mustard40-static | rgba(100, 72, 1, 1) | - | ||
| yellow600-static | rgba(253, 250, 219, 1) | - | ||
| yellow100-static | rgba(255, 236, 68, 1) | - | ||
| gold600-static | rgba(250, 240, 227, 1) | - | ||
| gold500-static | rgba(243, 228, 205, 1) | - | ||
| gold400-static | rgba(232, 203, 164, 1) | - | ||
| gold300-static | rgba(222, 181, 126, 1) | - | ||
| gold200-static | rgba(211, 158, 76, 1) | - | ||
| gold100-static | rgba(229, 160, 56, 1) | - | ||
| gold80-static | rgba(194, 136, 47, 1) | - | ||
| gold60-static | rgba(158, 97, 5, 1) | - | ||
| gold40-static | rgba(109, 69, 8, 1) | - | ||
| green600-static | rgba(238, 249, 234, 1) | - | ||
| green500-static | rgba(213, 237, 202, 1) | - | ||
| green400-static | rgba(178, 214, 160, 1) | - | ||
| green300-static | rgba(145, 192, 120, 1) | - | ||
| green200-static | rgba(110, 169, 81, 1) | - | ||
| green100-static | rgba(54, 167, 92, 1) | - | ||
| green80-static | rgba(73, 147, 39, 1) | - | ||
| green60-static | rgba(56, 113, 30, 1) | - | ||
| green40-static | rgba(40, 81, 21, 1) | - | ||
| orange600-static | rgba(255, 239, 224, 1) | - | ||
| orange500-static | rgba(251, 225, 195, 1) | - | ||
| orange400-static | rgba(249, 194, 150, 1) | - | ||
| orange300-static | rgba(241, 162, 106, 1) | - | ||
| orange200-static | rgba(230, 130, 61, 1) | - | ||
| orange100-static | rgba(243, 117, 14, 1) | - | ||
| orange80-static | rgba(216, 97, 0, 1) | - | ||
| orange60-static | rgba(166, 74, 0, 1) | - | ||
| orange40-static | rgba(118, 53, 2, 1) | - | ||
| teal600-static | rgba(234, 251, 254, 1) | - | ||
| teal500-static | rgba(199, 234, 239, 1) | - | ||
| teal400-static | rgba(159, 203, 211, 1) | - | ||
| teal300-static | rgba(118, 172, 182, 1) | - | ||
| teal200-static | rgba(74, 142, 155, 1) | - | ||
| teal100-static | rgba(3, 175, 202, 1) | - | ||
| teal80-static | rgba(15, 113, 128, 1) | - | ||
| teal60-static | rgba(15, 84, 95, 1) | - | ||
| teal40-static | rgba(11, 57, 64, 1) | - | ||
| purple600-static | rgba(250, 238, 249, 1) | - | ||
| purple500-static | rgba(248, 221, 244, 1) | - | ||
| purple400-static | rgba(234, 179, 223, 1) | - | ||
| purple300-static | rgba(217, 137, 201, 1) | - | ||
| purple200-static | rgba(201, 92, 182, 1) | - | ||
| purple100-static | rgba(209, 56, 191, 1) | - | ||
| purple80-static | rgba(182, 35, 161, 1) | - | ||
| purple60-static | rgba(136, 27, 121, 1) | - | ||
| purple40-static | rgba(93, 18, 84, 1) | - | ||
| pink600-static | rgba(252, 233, 239, 1) | - | ||
| pink500-static | rgba(249, 222, 231, 1) | - | ||
| pink400-static | rgba(239, 180, 191, 1) | - | ||
| pink300-static | rgba(228, 138, 155, 1) | - | ||
| pink200-static | rgba(213, 94, 119, 1) | - | ||
| pink100-static | rgba(255, 79, 131, 1) | - | ||
| pink80-static | rgba(195, 39, 85, 1) | - | ||
| pink60-static | rgba(149, 25, 64, 1) | - | ||
| pink40-static | rgba(105, 11, 44, 1) | - | ||
| red600-static | rgba(253, 231, 231, 1) | - | ||
| red500-static | rgba(249, 221, 219, 1) | - | ||
| red400-static | rgba(242, 180, 171, 1) | - | ||
| red300-static | rgba(229, 138, 124, 1) | - | ||
| red200-static | rgba(211, 95, 79, 1) | - | ||
| red100-static | rgba(234, 0, 23, 1) | - | ||
| red80-static | rgba(190, 44, 37, 1) | - | ||
| red60-static | rgba(142, 31, 27, 1) | - | ||
| red40-static | rgba(99, 16, 14, 1) | - | ||
| blue600-static | rgba(231, 240, 254, 1) | - | ||
| blue500-static | rgba(211, 231, 250, 1) | - | ||
| blue400-static | rgba(172, 197, 231, 1) | - | ||
| blue300-static | rgba(132, 164, 214, 1) | - | ||
| blue200-static | rgba(87, 132, 197, 1) | - | ||
| blue100-static | rgba(22, 109, 252, 1) | - | ||
| blue80-static | rgba(19, 102, 179, 1) | - | ||
| blue60-static | rgba(15, 75, 132, 1) | - | ||
| blue40-static | rgba(10, 50, 88, 1) | - | ||
| gray700-static | rgba(255, 255, 255, 1) | - | ||
| gray600-static | rgba(247, 247, 247, 1) | - | ||
| gray500-static | rgba(240, 240, 240, 1) | - | ||
| gray400-static | rgba(233, 233, 233, 1) | - | ||
| gray300-static | rgba(212, 212, 212, 1) | - | ||
| gray200-static | rgba(170, 170, 170, 1) | - | ||
| gray100-static | rgba(115, 115, 115, 1) | - | ||
| gray80-static | rgba(89, 89, 89, 1) | Previously #66666 updated to aim for AAA contrast on target background | ||
| gray60-static | rgba(73, 73, 73, 1) | - | ||
| gray40-static | rgba(42, 42, 42, 1) | - | ||
| gray20-static | rgba(17, 17, 17, 1) | - | ||
| gray0-static | rgba(0, 0, 0, 1) | - | ||
| errorContainer | rgba(253, 231, 231, 1) | - | ||
| error | rgba(211, 95, 79, 1) | - | ||
| warningContainer | rgba(255, 239, 224, 1) | - | ||
| warning | rgba(230, 130, 61, 1) | - | ||
| successContainer | rgba(238, 249, 234, 1) | - | ||
| success | rgba(73, 147, 39, 1) | - | ||
| signalContainer | rgba(231, 240, 254, 1) | - | ||
| signal | rgba(87, 132, 197, 1) | - | ||
| onMessage-subtle-hover | rgba(89, 89, 89, 1) | - | ||
| onMessage-subtle | rgba(73, 73, 73, 1) | - | ||
| onMessage-hover | rgba(89, 89, 89, 1) | - | ||
| onMessage | rgba(17, 17, 17, 1) | - | ||
| portal | rgba(255, 255, 255, 1) | - | ||
| onPortal-subtle-hover | rgba(115, 115, 115, 1) | - | ||
| onPortal-subtle | rgba(89, 89, 89, 1) | - | ||
| onPortal-hover | rgba(115, 115, 115, 1) | - | ||
| onPortal | rgba(17, 17, 17, 1) | - | ||
| onSurface-subtle-hover | rgba(115, 115, 115, 1) | - | ||
| onSurface-subtle | rgba(89, 89, 89, 1) | - | ||
| onSurface-hover | rgba(115, 115, 115, 1) | - | ||
| onSurface | rgba(17, 17, 17, 1) | - | ||
| surface-highest | rgba(255, 255, 255, 1) | - | ||
| surface | rgba(255, 255, 255, 1) | - | ||
| onBackground-subtle-hover | rgba(115, 115, 115, 1) | - | ||
| onBackground-subtle | rgba(89, 89, 89, 1) | - | ||
| onBackground-hover | rgba(115, 115, 115, 1) | - | ||
| onBackground | rgba(17, 17, 17, 1) | - | ||
| background-forSurfaces | rgba(247, 247, 247, 1) | - | ||
| background | rgba(255, 255, 255, 1) | - | ||
| accessible | rgba(89, 89, 89, 1) | Legacy-Token subject to be deprecated use the appropriate -subtle token | ||
| outline-subtle | rgba(0, 0, 0, .05) | - | ||
| outline | rgba(0, 0, 0, .10) | - | ||
| subtle | rgba(212, 212, 212, 1) | Legacy-Token subject to be deprecated use the outline token | ||
| faint | rgba(233, 233, 233, 1) | Legacy-Token subject to be deprecated use the outline token | ||
| onDisabled | rgba(0, 0, 0, .30) | - | ||
| disabled | rgba(0, 0, 0, .05) | - | ||
| onCtaContainer-subtle-hover | rgba(89, 89, 89, 1) | - | ||
| onCtaContainer-subtle | rgba(73, 73, 73, 1) | - | ||
| onCtaContainer-hover | rgba(89, 89, 89, 1) | - | ||
| onCtaContainer | rgba(17, 17, 17, 1) | - | ||
| ctaContainer | rgba(231, 240, 254, 1) | - | ||
| onCta-hover | - | |||
| onCta | - | |||
| cta-hover | rgba(19, 102, 179, 1) | - | ||
| cta | rgba(22, 109, 252, 1) | - | ||
| onSecondary-subtle-hover | rgba(115, 115, 115, 1) | - | ||
| onSecondary-subtle | rgba(89, 89, 89, 1) | - | ||
| onSecondary-hover | rgba(115, 115, 115, 1) | - | ||
| onSecondary | rgba(17, 17, 17, 1) | - | ||
| secondary-hover | rgba(240, 240, 240, 1) | - | ||
| secondary | rgba(255, 255, 255, 1) | - | ||
| onPrimary-subtle-hover | rgba(170, 170, 170, 1) | - | ||
| onPrimary-subtle | rgba(212, 212, 212, 1) | - | ||
| onPrimary-hover | rgba(170, 170, 170, 1) | - | ||
| onPrimary | rgba(255, 255, 255, 1) | - | ||
| primary-hover | rgba(42, 42, 42, 1) | - | ||
| primary | rgba(17, 17, 17, 1) | - |
ncG1vNJzZmiapZ65pXrWmqqhoZ6cwbC6z6iqrWaTpLpwss6upZ2ZpJ68r7%2BOnKalp6I%3D