The audit found problems on all four levels: theme, palette, semantics and components.
One name, four brands
The palette used one set of names for all brands: strawberry, banana, kiwi, teal, rose, halva. The names were invented for one brand. In the alfa or rasp mode the same name pointed to a completely different color. Adding a brand meant stretching its colors over someone else’s names and explaining to the team why banana isn’t yellow.
The palette stored the brand, not colors
Switching the palette mode only swapped hex values. Everything else that makes a brand stayed the same for all four:
- spacing, padding and gaps
- sizes of buttons, icons and inputs
- corner radius
- typography
- shadows, elevation and blur
- density: compact and comfortable
Hardcoded semantics
The palette held only solid hex values without alpha. Transparent colors lived elsewhere, with their hex written in by hand. When a brand color changed, the palette updated and the transparent tokens didn’t. There was no single source of truth. On top of that, semantic tokens were named after colors, like rose or teal, instead of what they mean.
Too many modes
Color was spread over five collections, each with its own modes:
CollectionTokensModes
theme862light / dark
palette709tutu / alfa / rasp / yandex
contrast128low / high
content36on low / on high
state6default / hover / active / focus