Table of contents
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:
gray100
red300
teal600
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.
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 | ||
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) | - | ||
spark600 | rgba(255, 246, 241, 1) | - | ||
spark500 | rgba(255, 222, 204, 1) | - | ||
spark400 | rgba(255, 191, 173, 1) | - | ||
spark300 | rgba(254, 140, 108, 1) | - | ||
spark200 | rgba(254, 114, 76, 1) | - | ||
spark100 | rgba(254, 78, 29, 1) | - | ||
spark80 | rgba(219, 48, 1, 1) | - | ||
spark60 | rgba(179, 40, 1, 1) | - | ||
spark40 | rgba(80, 18, 0, 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) | - | ||
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) | - | ||
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) | - | ||
yellow600 | rgba(253, 250, 219, 1) | - | ||
yellow100 | rgba(255, 236, 68, 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) | - | ||
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) | - | ||
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) | - | ||
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) | - | ||
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 | ||
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) | - | ||
spark600-static | rgba(255, 246, 241, 1) | - | ||
spark500-static | rgba(255, 222, 204, 1) | - | ||
spark400-static | rgba(255, 191, 173, 1) | - | ||
spark300-static | rgba(254, 140, 108, 1) | - | ||
spark200-static | rgba(254, 114, 76, 1) | - | ||
spark100-static | rgba(254, 78, 29, 1) | - | ||
spark80-static | rgba(219, 48, 1, 1) | - | ||
spark60-static | rgba(179, 40, 1, 1) | - | ||
spark40-static | rgba(80, 18, 0, 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) | - | ||
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) | - | ||
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) | - | ||
yellow600-static | rgba(253, 250, 219, 1) | - | ||
yellow100-static | rgba(255, 236, 68, 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) | - | ||
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) | - | ||
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) | - | ||
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) | - | ||
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) | - | ||
opinions | rgba(254, 78, 29, 1) | - | ||
opinions-hover | rgba(219, 48, 1, 1) | - | ||
onOpinions | - | |||
onOpinions-hover | - | |||
opinionsContainer | rgba(255, 222, 204, 1) | - | ||
onOpinionsContainer | rgba(17, 17, 17, 1) | - | ||
onOpinionsContainer-hover | rgba(0, 0, 0, .50) | - |