All 19 color families with HEX codes, CSS variables and contrast checking. Click any color to copy.
{{ usageExample }}
{{ lastCopied.cssVar }}
Google's Material Design color system includes 19 color families, each with 10 primary shades (50, 100–900) and up to 4 accent shades (A100–A700). It provides a consistent color language for websites and apps. Each color is carefully tuned to work harmoniously in combination and provide sufficient contrast for accessibility.
Download the CSS file with all variables and include it in your project. Then use the colors via CSS Custom Properties like var(--color-md-teal-500). You can also use the HEX codes directly, e.g. color: #009688;. CSS variables have the advantage that you can change colors centrally.
Google's Material Design color system (introduced 2014, refined in Material 2 and Material 3) maps each hue to a 10-step scale from 50 to 900 plus optional accent shades A100, A200, A400, A700. The steps are perceptually graded: 50 is near white, 500 the typical brand saturation, 900 nearly black. The scale was calibrated so each step reads against the next and 500 shades form typical CTA buttons. Compared to Tailwind or Bootstrap, Material differs in higher saturation at the 500 token — Tailwind's 500 is often paler.
Accent shades (A100–A700) are more saturated and less perceptually uniform — they were designed for accent elements like FABs (Floating Action Buttons), selections, and highlights. When building a brand, use 500 as primary, 700 as hover state, and 100 as a light background variant. Accents come in when an element must actively stand out. Important: Material 3 (introduced 2021) is gradually replacing the old system with a dynamic color system using tonal palettes (Primary, Secondary, Tertiary, Surface) computed from a single seed color via HCT (Hue-Chroma-Tone).
The Material palette is defined in sRGB; all hex values are exactly those Google publishes in the spec. The CalcSI design system stores Material colors as CSS variables like --color-md-teal-500 and links them to classic variables like --color-primary. That way the whole brand can be reskinned via a single token change. WCAG compliance is not automatic: mid-range shades (300, 400, 500) often only reach AA Large against white. For body text on brand backgrounds use 700 or 800, or dark text on 50/100.
Material colors are not a finished design, but an extremely solid base. These steps lead from lookup to a production token file.
--surface-base: #FAFAFA (gray 50), card --surface-card: #FFFFFF, elevated --surface-elevated: #FFFFFF with extra shadow. In dark mode: gray 900/800/700.Here is how you combine the Material scales into a consistent token set.
--color-primary: var(--color-md-teal-500); --color-primary-hover: var(--color-md-teal-700); — clean darker hover.color: var(--color-md-gray-900); yields 16.1:1 contrast — easily AAA.--color-success: var(--color-md-green-700);, warning --color-warn: var(--color-md-amber-700);, error --color-error: var(--color-md-red-700); — all accessible against white.background: linear-gradient(135deg, var(--color-md-teal-50), var(--color-md-blue-50)); — very subtle brand wash.--surface-base: var(--color-md-gray-900); --color-text: var(--color-md-gray-100); — robust default that works for 99% of content.The Material palette was defined in sRGB in 2014 — Display-P3 devices show the values slightly more saturated than on older monitors. That is not a bug but the browser's intentional gamut mapping. For maximum precision across devices, document P3 fallbacks separately. Color-blindness friendliness is not guaranteed: some hue pairs (red 500 vs. green 500) are barely distinguishable for deuteranopes — always combine with icons or text labels. Mid-range shades 300/400/500 often only reach AA Large against white; body text must switch to shade 700+ or use dark text on 50/100. The palette is also bounded: 19 hues x 14 shades = 266 colors. That covers standard UI, but complex data visualizations (heatmaps, choropleth maps) additionally need perceptually uniform palettes like Viridis or Cividis. Finally, Material 2 is an older system — Material 3 uses dynamic HCT palettes generated from a seed color. If you stay long-term in Google's ecosystem, evaluate Material 3 instead of 2.
var(--color-primary) instead of a hard-coded hue, one entry is enough: :root { --color-primary: var(--color-md-blue-500); } swaps the whole brand from teal to blue in a single line.