Color
Semantic color tokens for surfaces, text, icons, borders, and status indicators.Overview
Colors are semantic: tokens describe purpose, not appearance. Every color adapts automatically between light and dark modes via CSS light-dark(). Themes override the resolved values, so your code never references raw hex colors.
Surface Colors
Layered surface hierarchy: body → surface → card → popover. Each level sits visually above the previous one.
| Token | Value |
|---|---|
| --color-accent | #262626 / #e7e7e7 |
| --color-accent-muted | #f1f1f1 / #262626 |
| --color-on-accent | #ffffff / #1b1b1b |
| --color-neutral | #0000000F / #FFFFFF1A |
| --color-background-surface | #ffffff / #262626 |
| --color-background-body | #f1f1f1 / #1b1b1b |
| --color-overlay | #00000080 / #000000CC |
| --color-overlay-hover | #0000000D / #FFFFFF0D |
| --color-overlay-pressed | #0000001A / #FFFFFF1A |
| --color-background-muted | #f1f1f1 / #1b1b1b |
| --color-text-primary | #1b1b1b / #f1f1f1 |
| --color-text-secondary | #525252 / #9e9e9e |
| --color-text-disabled | #a3a3a3 / #525252 |
| --color-text-accent | #262626 / #e7e7e7 |
| --color-on-dark | #ffffff |
| --color-on-light | #1b1b1b |
| --color-icon-accent | #262626 / #e7e7e7 |
| --color-icon-primary | #1b1b1b / #f1f1f1 |
| --color-icon-secondary | #777777 / #9e9e9e |
| --color-icon-disabled | #a3a3a3 / #525252 |
| --color-background-card | #ffffff / #1b1b1b |
| --color-background-popover | #ffffff / #1b1b1b |
| --color-background-inverted | #0A1317 / #FFFFFF |
| --color-background-error-inverted | #AA071E / #E3193B |
| --color-success | #005711 / #c0dec0 |
| --color-success-muted | #bde0bd / #94c9953D |
| --color-on-success | #ffffff / #1b1b1b |
| --color-error | #76000c / #f9d4d0 |
| --color-error-muted | #fdc5bf / #f2a0993D |
| --color-on-error | #ffffff / #1b1b1b |
| --color-warning | #584400 / #f1d27c |
| --color-warning-muted | #f8e1a2 / #e1b3003D |
| --color-on-warning | #1b1b1b |
| --color-border | #00000014 / #FFFFFF1A |
| --color-border-emphasized | #777777 |
| --color-skeleton | #e2e2e2 / #525252 |
| --color-track | #CCD3DB / #5A5E66 |
| --color-shadow | #0000001A / #0000004D |
| --color-tint-hover | black / white |
| --color-background-blue | #b8d7ff / #87bcff3D |
| --color-border-blue | #a0caff / #529fff |
| --color-icon-blue | #00458c / #87bcff |
| --color-text-blue | #00458c / #b8d7ff |
| --color-background-cyan | #a3e0ef / #64c9e13D |
| --color-border-cyan | #7cd6eb / #00b1ce |
| --color-icon-cyan | #00505f / #64c9e1 |
| --color-text-cyan | #00505f / #acdeeb |
| --color-background-gray | #e2e2e2 / var(--color-neutral) |
| --color-border-gray | #c6c6c6 / #262626 |
| --color-icon-gray | #525252 / #9e9e9e |
| --color-text-gray | #262626 / #e7e7e7 |
| --color-background-green | #bde0bd / #94c9953D |
| --color-border-green | #a5d6a5 / #62b466 |
| --color-icon-green | #005711 / #94c995 |
| --color-text-green | #005711 / #c0dec0 |
| --color-background-orange | #f5cca4 / #e8aa6d3D |
| --color-border-orange | #f3ba82 / #df8600 |
| --color-icon-orange | #673a00 / #e8aa6d |
| --color-text-orange | #673a00 / #f1cdac |
| --color-background-pink | #f6c5d6 / #e8a0bc3D |
| --color-border-pink | #f3b0c9 / #df77a2 |
| --color-icon-pink | #82014b / #e8a0bc |
| --color-text-pink | #82014b / #f1c7d6 |
| --color-background-purple | #e7c8ed / #d3a6de3D |
| --color-border-purple | #dfb5e9 / #c380d3 |
| --color-icon-purple | #6a1b7b / #d3a6de |
| --color-text-purple | #6a1b7b / #e4caea |
| --color-background-red | #fdc5bf / #f2a0993D |
| --color-border-red | #fcb0a9 / #ec746e |
| --color-icon-red | #8a0011 / #f2a099 |
| --color-text-red | #76000c / #f9d4d0 |
| --color-background-teal | #a6e3d6 / #68cebb3D |
| --color-border-teal | #80dac9 / #00b7a1 |
| --color-icon-teal | #005348 / #68cebb |
| --color-text-teal | #005348 / #ade1d6 |
| --color-background-yellow | #f8e1a2 / #e1b3003D |
| --color-border-yellow | #f1c000 / #c09800 |
| --color-icon-yellow | #584400 / #e1b300 |
| --color-text-yellow | #584400 / #f1d27c |
| --color-syntax-keyword | #6a1b7b / #e4caea |
| --color-syntax-string | #005711 / #c0dec0 |
| --color-syntax-comment | #737373 / #a3a3a3 |
| --color-syntax-number | #673a00 / #f1cdac |
| --color-syntax-function | #00458c / #b8d7ff |
| --color-syntax-type | #6a1b7b / #e4caea |
| --color-syntax-variable | #171717 / #e5e5e5 |
| --color-syntax-operator | #737373 / #a3a3a3 |
| --color-syntax-constant | #673a00 / #f1cdac |
| --color-syntax-tag | #8a0011 / #f7c7c2 |
| --color-syntax-attribute | #584400 / #f1d27c |
| --color-syntax-property | #005348 / #ade1d6 |
| --color-syntax-punctuation | #6e6e6e / #a0a0a0 |
| --color-syntax-background | #fafafa / #0a0a0a |
| --color-data-categorical-blue | #0171E3 |
| --color-data-categorical-orange | #EB6E00 |
| --color-data-categorical-purple | #6B1EFD |
| --color-data-categorical-green | #0B991F |
| --color-data-categorical-pink | #F351C0 |
| --color-data-categorical-cyan | #0171A4 |
| --color-data-categorical-red | #F5394F |
| --color-data-categorical-teal | #08A3A3 |
| --color-data-categorical-brown | #965E03 |
| --color-data-categorical-indigo | #6F8AFF |
| --color-data-neutral | #8494A3 / #8C939B |
| --color-data-blue-5 | #02165E |
| --color-data-blue-4 | #004CBC |
| --color-data-blue-3 | #2694FE |
| --color-data-blue-2 | #78BEFF |
| --color-data-blue-1 | #DBECFF |
| --color-data-shamrock-5 | #0B603D |
| --color-data-shamrock-4 | #138546 |
| --color-data-shamrock-3 | #24BB5E |
| --color-data-shamrock-2 | #8EF7AA |
| --color-data-shamrock-1 | #D6FEE4 |
| --color-data-orange-5 | #A13F04 |
| --color-data-orange-4 | #D66100 |
| --color-data-orange-3 | #FD9537 |
| --color-data-orange-2 | #FDB876 |
| --color-data-orange-1 | #FFE6CF |
| --color-data-pink-5 | #8E1073 |
| --color-data-pink-4 | #D123A1 |
| --color-data-pink-3 | #F989D3 |
| --color-data-pink-2 | #FEADE3 |
| --color-data-pink-1 | #FCE3F4 |
| --color-data-purple-5 | #3E0697 |
| --color-data-purple-4 | #6B1EFD |
| --color-data-purple-3 | #9081FF |
| --color-data-purple-2 | #B3B0FE |
| --color-data-purple-1 | #E8E8FB |
| --color-data-red-5 | #9D0519 |
| --color-data-red-4 | #D31130 |
| --color-data-red-3 | #FB7D87 |
| --color-data-red-2 | #FFB2B8 |
| --color-data-red-1 | #FEE4E6 |
| --color-data-teal-5 | #08767D |
| --color-data-teal-4 | #0C9293 |
| --color-data-teal-3 | #0DB7AF |
| --color-data-teal-2 | #6CE6D8 |
| --color-data-teal-1 | #D7FCF8 |
| --color-data-yellow-5 | #8A5001 |
| --color-data-yellow-4 | #D69804 |
| --color-data-yellow-3 | #FBCE03 |
| --color-data-yellow-2 | #FCEC85 |
| --color-data-yellow-1 | #FDF6BA |
| --color-data-gray-5 | #25363F / #333338 |
| --color-data-gray-4 | #5D6C7B / #666A72 |
| --color-data-gray-3 | #AFB9C4 / #B2B8BE |
| --color-data-gray-2 | #CCD3DB / #D0D3D6 |
| --color-data-gray-1 | #F1F4F7 / #F2F4F6 |
| --color-brand |
Usage
Applying color tokens
tsximport * as stylex from '@stylexjs/stylex';import {colorVars} from '@astryxdesign/core/theme/tokens.stylex';const styles = stylex.create({container: {backgroundColor: colorVars['--color-background-surface'],color: colorVars['--color-text-primary'],borderColor: colorVars['--color-border'],},accent: {color: colorVars['--color-text-accent'],},});
Best Practices
| Guidance | Practices |
|---|---|
| Do | Use semantic tokens (--color-text-primary) instead of raw hex values. |
| Do | Rely on the surface hierarchy (body → surface → card → popover) for layering. |
| Do | Use status colors (success, error, warning) only for their semantic meaning. |
| Don't | Hardcode hex values, since they won't adapt to dark mode or custom themes. |
| Don't | Mix accent colors with status colors in the same context. |
| Don't | Use --color-on-accent on non-accent backgrounds. |