Синтетичний контент. «ОБЕРТ» — вигаданий сервіс, створений нами для показу дизайн-системи. Назви, тексти, цифри й дані в таблицях вигадані. Реальних замовників, відгуків і чужих логотипів на цьому стенді немає.

ОБЕРТ

Дизайн-система · UI/UX · демо-стенд GuardLabs

Три екрани, зібрані з одного набору токенів

Лендинг сервісу, кабінет клієнта й адмінка оператора. Один файл теми на 4 сторінки: 9 кольорових ролей, 10 кроків типографіки, крок сітки 4 px. Змінюєте одне значення — змінюються всі три екрани одразу.

HTML + CSS + JS без бібліотек і конструкторів Світла й темна тема на тих самих ролях 360 px і ширше Без жодного растру — усі знаки й ілюстрації векторні

Кольорові токени

Дві шкали: сирі кольори і ролі

У верстці не зустрічається жодного #hex. Компоненти знають лише ролі: --accent, --surface, --danger. Через це темна тема — це 20 рядків перевизначення ролей, а не другий комплект верстки.

Ролі інтерфейсу

--accent
oklch(.52 .10 162)
Головна дія: основна кнопка, активний пункт, посилання. Контраст із білим 5,26:1.
--accent-soft
oklch(.945 .03 162)
Підкладка активного стану: вибраний пункт меню, підсвічений рядок таблиці.
--accent-2
oklch(.545 .115 78)
Другий акцент — латунь. Ярлики секцій, цифри, підкреслення. Ніколи не для кнопок.
--surface
#ffffff / oklch(.225 .014 95)
Площина картки й таблиці. Тло сторінки — окрема роль --bg, на пів тону тепліше.
--surface-2
oklch(.965 .01 95)
Другий рівень: підвал картки, наведення на рядок, службові поля.
--line / --line-strong
oklch(.905 / .83 .012 95)
Дві межі, не одна: тонка розділяє всередині картки, сильна обводить поле вводу.
--ok
Статус: виконано
Свідомо збігається з кольором бренду: «добре» в цій системі і є фірмовий колір.
--warn
Статус: очікує
Латунна родина. На тексті бейджа береться темний тон — 6,3:1 на своїй підкладці.
--danger
oklch(.56 .17 25)
Глина, не червоний сигнальний: помилка має читатись, а не кричати. 5,09:1 на білому.
--info
oklch(.47 .11 330)
Слива замість синього: синє поле «інформація» на екрані з зеленою дією читається як друга дія.
--focus
Обведення фокуса
Окремий колір, не колір бренду: інакше фокус на зеленій кнопці зникає. 4,83:1 із тлом.
--text / --text-2 / --text-3
15,8 : 7,1 : 4,8
Три рівні тексту, кожен перевірено на контраст. Нижче 4,5:1 у системі немає нічого.

Чому не синій. Синій та індиго — колір за замовчуванням майже кожного згенерованого макета, і замовники цю ознаку вже впізнають. Тут основа — хвойна зелень із теплою латунню, а нейтральні тони зсунуті в тепло (відтінок 95°), щоб сірий не читався як «системний діалог».

Токени типографіки

Десять кроків і два накреслення

Заголовки — Unbounded (українська гарнітура, широкі форми), текст і інтерфейс — Manrope, цифри й технічні підписи — JetBrains Mono. Проміжних розмірів немає: якщо потрібен розмір «між», беруть найближчий крок.

--fs-6xl64 pxОберт
--fs-4xl40 pxЗаголовок секції
--fs-2xl26 pxЗаголовок картки
--fs-xl21 pxПідзаголовок і врізка
--fs-lg18 pxВеликий текст у першому екрані
--fs-md16 pxОсновний текст, міжрядковий 1,6
--fs-sm15 pxЗначення в полях вводу
--fs-xs14 pxІнтерфейс: кнопки, меню, комірки таблиці
--fs-2xs12 pxПідписи полів, підказки, службові рядки
--fs-3xs11 pxБейджі та заголовки колонок

Основний текст не опускається нижче 16 px, довжина рядка обмежена 66 знаками (.measure), міжрядковий у тексті 1,6 — щоб абзац читався, а не проглядався.

Простір, форма, глибина

Сітка 4 px, п'ять радіусів, чотири рівні глибини

Відступи

Кожен відступ кратний 4. Довільних чисел на кшталт 13 px чи 27 px у системі немає — саме через них верстка «пливе» між екранами.

4
8
12
16
24
32
48
64

Радіуси

Правило вкладення: внутрішній елемент завжди має менший радіус, ніж контейнер. Поле (8) всередині картки (16) — а не навпаки.

4
8
12
16
повний

Тіні

Тіні не сірі, а кольору тексту з прозорістю — на теплому тлі сіра тінь виглядає брудною. У темній темі це окремі значення з чорним, бо просто «зробити темніше» там не працює.

--sh-1
картка у спокої
--sh-2
наведення
--sh-3
спливні панелі
--sh-4
модальне вікно

Компоненти

Те, з чого зібрані всі три екрани

Кнопки

Мінімальна висота 44 px — розмір, у який людина влучає пальцем без промаху. Малий варіант 34 px допускається лише всередині рядка таблиці.

Статуси

Виконано Очікує Скасовано Чернетка Архів

У кожного бейджа є крапка кольору й слово. Колір ніколи не є єдиною ознакою статусу — інакше екран не читає той, хто не розрізняє червоне й зелене.

Фільтри

Поля

Підказка стоїть під полем, а не всередині нього.
Кількість має бути більшою за нуль

Службові повідомлення

Замовлення збережено. Номер призначено автоматично.

Не вдалося зберегти: склад недоступний. Спробуйте ще раз за хвилину.

Рішення й причини

Чому система влаштована саме так

Найчастіше замовника лякає не сам вигляд, а відчуття, що макет зроблено навмання. Тому кожне рішення нижче має причину, яку можна перевірити на екрані.

Питання 1

Чому тема — окремий файл

Уся тема живе в theme.css. Верстка не знає жодного кольору напряму, тому темна тема, зміна фірмового кольору чи другий бренд — це правка одного файлу, а не пошук по всіх сторінках. Перевірити просто: перемикач у шапці не підвантажує другу таблицю стилів.

Питання 2

Чому два рівні токенів

Сирі кольори (--pine-500) не використовуються у верстці — лише ролі (--accent). Через це «зробити акцент теплішим» не ламає статуси, а «змінити колір помилки» не зачіпає кнопку. Один рівень токенів завжди рано чи пізно злипається.

Питання 3

Чому фокус має власний колір

Якщо обведення фокуса пофарбувати у фірмовий колір, воно зникне саме там, де найпотрібніше — на фірмовій кнопці. Тут фокус — латунний, він видимий і на зеленому, і на білому, і на темному.

Питання 4

Чому крок сітки 4 px

Крок 8 занадто грубий для дрібних елементів (бейджі, іконки в рядку), крок 2 не дає жодної дисципліни. 4 — компроміс, у якому дизайнер і верстальник називають однакові числа й макет збігається з кодом без «підганяння на око».

Питання 5

Чому стани важливіші за головний вигляд

Порожній список, завантаження й помилка — те, що бачить кожен новий користувач у перший день, і те, що найчастіше відсутнє в макеті. У кабінеті ці три стани показані окремими кнопками — їх можна увімкнути й подивитися.

Питання 6

Чому в темній темі не просто «інвертовано»

Інверсія дає брудні кольори й важкі тіні. Тут у темній темі свої значення: акцент світлішає (щоб контрастувати з темним тлом), тіні стають чорнішими, м'які підкладки — темними. Ролі ті самі, значення інші.

Перевикористання

Один набір файлів на будь-яку кількість екранів

design-system-uiux/
├── theme.css     токени: колір, простір, шрифт, радіус, тінь
├── ui.css        компоненти: кнопки, поля, картки, таблиця, модалка
├── ui.js         тема, іконки, тости, модальні вікна, вкладки
├── index.html    ця обкладинка
├── landing.html  екран 1 — лендинг
├── cabinet.html  екран 2 — кабінет
└── admin.html    екран 3 — адмінка

Четвертий екран додається як ще один HTML-файл із тими самими трьома підключеннями. Нових стилів при цьому не пишуть — беруть наявні класи.

Перевірка на місці

Натисніть — і фірмовий колір зміниться на всій сторінці: у кнопках, посиланнях, бейджах, підсвітках. Жодного рядка верстки при цьому не змінено, переписано лише чотири значення ролі.

Виконано Звичайне посилання

Це і є відповідь на питання «а якщо ми потім захочемо інший колір».