Коли команда вперше сідає будувати дизайн-токени, майже завжди відбувається одне й те саме: хтось відкриває Figma Variables, створює кілька кольорів типу button/primary/background і вважає, що токени готові. Це не токени — це захардкоджені значення з гарними назвами.

Справжня архітектура токенів складається з трьох шарів, і важливо розуміти, для чого кожен існує.

Три шари: primitive → semantic → component

Primitive-токени — це сирі значення без контексту. Вони описують "що є", але не "де використовується". Наприклад: color/blue/500: #3B82F6, color/gray/100: #F3F4F6, spacing/4: 16px. Primitive-токени ніколи не використовуються напряму в компонентах.

Semantic-токени — це посилання на primitives з контекстуальним значенням. Наприклад: color/background/primary: {color/blue/500}, color/text/muted: {color/gray/400}. Саме цей шар дає можливість зробити темну тему: ви просто змінюєте значення semantic-токена, а не переписуєте всі компоненти.

Component-токени — опціональний третій шар для компонентів з особливою логікою. Наприклад: button/primary/background: {color/background/primary}. Потрібен тоді, коли один компонент має свої унікальні варіації, які не описуються semantic-рівнем.

Правило: якщо ваш semantic-токен вказує безпосередньо на hex-значення — у вас немає primitive-шару. Якщо ваш компонент вказує безпосередньо на hex — у вас немає жодного шару.

Як назвати primitive-токени

Найчастіша помилка — давати примітивам семантичні назви. Не треба color/brand/primary на рівні primitive. Треба color/lime/400. Primitive описує колір, а не його призначення.

Рекомендована структура назви: category / scale / step. Для кольорів: color/{hue}/{step}, де step — число від 50 до 950 або 100 до 900 (Tailwind-підхід). Для spacing: spacing/{multiplier}, де multiplier — крок сітки (4, 8, 12, 16...).

Чому не можна починати з семантики

Якщо у вас немає primitive-шару, при зміні брендового кольору доведеться оновлювати десятки semantic-токенів вручну. З primitives — ви змінюєте одне значення, і всі посилання оновлюються автоматично.

Друга проблема — темна тема. Без primitives реалізувати dark mode без дублювання всіх токенів практично неможливо. З правильною архітектурою — це питання годин, а не тижнів.

Як почати: мінімальний набір primitives

  • Кольори: мінімум 2 кольори бренду × 9 ступенів, нейтральна шкала (gray) × 9 ступенів, semantic кольори (success, error, warning, info) × 3 ступені
  • Spacing: кратно 4px або 8px — від 2px до 64px
  • Typography: font-size, line-height, font-weight, letter-spacing — окремими шкалами
  • Border radius: від 0 до full (999px)
  • Shadow: sm, md, lg, xl

Практичний крок: почніть з кольорової шкали

Візьміть свій брендовий колір. Згенеруйте шкалу з 9–11 ступенів (найсвітліший 50, найтемніший 950). Зробіть це для кожного кольору бренду і для нейтрального gray. Це і є ваш перший primitive-шар. Далі — маппінг на semantic.


Правильна архітектура токенів — фундамент, який вирішує 80% проблем масштабування дизайн-системи наперед.