Design Tokens
Shopware Composable Frontends provides a curated set of color design tokens defined as UnoCSS theme colors. They follow a Material-style naming scheme and serve as the foundation for consistent color usage across all Frontends projects and templates.
Templates like the Vue Starter Template and its extended variant consume these tokens out of the box.
Naming convention
Every token name follows the pattern <category>-<role>[-<variant>].
| Category | Purpose | Examples |
|---|---|---|
brand | Primary, secondary, and tertiary brand colours with hover/pressed states | brand-primary, brand-on-secondary |
surface | Backgrounds, containers, and their foreground (on-*) counterparts | surface-surface-container-high, surface-on-surface |
outline | Borders and dividers | outline-outline, outline-outline-focus |
states | Semantic feedback colours — info, success, warning, error | states-error, states-on-warning-container |
fixed | Colours that do not change between themes | fixed-fixed-on-image |
other | Miscellaneous — sale badges, shadows | other-sale, other-shadow |
overlay | Semi-transparent dark/light overlays | overlay-dark-high, overlay-light-low |
Usage
Because the tokens are registered as Uno theme.colors, they work with every color utility:
<div class="bg-brand-primary text-brand-on-primary">
Primary button
</div>
<p class="text-states-error">Something went wrong.</p>
<div class="border border-outline-outline rounded-md">
Card with outline border
</div>
<div class="bg-overlay-dark-high">
Dark overlay at 50 % opacity
</div>Customising tokens
Override or extend tokens in your project's uno.config.ts:
theme: {
colors: {
"brand-primary": "#123456", // overwrite an existing token
"custom-accent": "#FF00FF", // add a new token
},
}The documentation keeps a copy of the token map in apps/docs/.vitepress/data/design-tokens-colors.ts (aligned with templates/vue-starter-template/uno.config.ts theme.colors). Use the export button below to grab the full snippet ready to paste into your Uno config.
Token reference
Click a swatch to change its color. Copy or download includes your edits.
Brand
brand-on-primary#FFFFFFbg-brand-on-primarybrand-on-secondary#3A276Abg-brand-on-secondarybrand-on-tertiary#1D1B20bg-brand-on-tertiarybrand-primary#543B95bg-brand-primarybrand-primary-hover#45317Abg-brand-primary-hoverbrand-primary-pressed#45317Abg-brand-primary-pressedbrand-secondary#E1D5FFbg-brand-secondarybrand-secondary-hover#D0BCFCbg-brand-secondary-hoverbrand-secondary-pressed#D0BCFCbg-brand-secondary-pressedbrand-tertiary#F1F1F1bg-brand-tertiarybrand-tertiary-hover#E3E3E3bg-brand-tertiary-hoverbrand-tertiary-pressed#E3E3E3bg-brand-tertiary-pressedSurface
surface-background#FFFFFFbg-surface-backgroundsurface-inverse-on-surface#FFFFFFbg-surface-inverse-on-surfacesurface-inverse-surface#322F35bg-surface-inverse-surfacesurface-on-background#1D1B20bg-surface-on-backgroundsurface-on-surface#1D1B20bg-surface-on-surfacesurface-on-surface-disabled#9893A6bg-surface-on-surface-disabledsurface-on-surface-primary#3A276Abg-surface-on-surface-primarysurface-on-surface-variant#696470bg-surface-on-surface-variantsurface-surface#FFFFFFbg-surface-surfacesurface-surface-container#F3EDF7bg-surface-surface-containersurface-surface-container-high#ECE6F0bg-surface-surface-container-highsurface-surface-container-highest#E6E0E9bg-surface-surface-container-highestsurface-surface-container-low#F7F2FAbg-surface-surface-container-lowsurface-surface-container-lowest#FFFFFFbg-surface-surface-container-lowestsurface-surface-disabled#E8E8E8bg-surface-surface-disabledsurface-surface-primary#D0BCFFbg-surface-surface-primarysurface-surface-variant#FBF6FFbg-surface-surface-variantOutline
outline-outline#79747Ebg-outline-outlineoutline-outline-disabled#9893A6bg-outline-outline-disabledoutline-outline-focus#1722F9bg-outline-outline-focusoutline-outline-primary#543B95bg-outline-outline-primaryoutline-outline-variant#CAC4D0bg-outline-outline-variantStates
states-error#D12D24bg-states-errorstates-error-container#F9DEDCbg-states-error-containerstates-error-hover#AB251Dbg-states-error-hoverstates-error-pressed#AB251Dbg-states-error-pressedstates-info#0288D1bg-states-infostates-info-container#BBE7FFbg-states-info-containerstates-info-hover#0275B4bg-states-info-hoverstates-info-pressed#0275B4bg-states-info-pressedstates-on-error#FFFFFFbg-states-on-errorstates-on-error-container#852221bg-states-on-error-containerstates-on-info#FFFFFFbg-states-on-infostates-on-info-container#013957bg-states-on-info-containerstates-on-success#FFFFFFbg-states-on-successstates-on-success-container#09480Cbg-states-on-success-containerstates-on-warning#FFFFFFbg-states-on-warningstates-on-warning-container#874400bg-states-on-warning-containerstates-success#15B31Cbg-states-successstates-success-container#C9FFCBbg-states-success-containerstates-success-hover#108C16bg-states-success-hoverstates-success-pressed#108C16bg-states-success-pressedstates-warning#F57C00bg-states-warningstates-warning-container#FFE1C2bg-states-warning-containerstates-warning-hover#C26200bg-states-warning-hoverstates-warning-pressed#C26200bg-states-warning-pressedFixed
fixed-fixed-on-image#FFFFFFbg-fixed-fixed-on-imageOther
other-sale#D12D24bg-other-saleother-shadow#000000bg-other-shadowOverlay
overlay-darkrgba(0, 0, 0, 0.30000001192092896)bg-overlay-darkoverlay-dark-highrgba(0, 0, 0, 0.5)bg-overlay-dark-highoverlay-dark-highestrgba(0, 0, 0, 0.75)bg-overlay-dark-highestoverlay-dark-lowrgba(0, 0, 0, 0.11999999731779099)bg-overlay-dark-lowoverlay-dark-lowestrgba(0, 0, 0, 0.07999999821186066)bg-overlay-dark-lowestoverlay-lightrgba(255, 255, 255, 0.25)bg-overlay-lightoverlay-light-highrgba(255, 255, 255, 0.5)bg-overlay-light-highoverlay-light-highestrgba(255, 255, 255, 0.75)bg-overlay-light-highestoverlay-light-lowrgba(255, 255, 255, 0.11999999731779099)bg-overlay-light-lowoverlay-light-lowestrgba(255, 255, 255, 0.07999999821186066)bg-overlay-light-lowest