Единая система для SaaS-продукта Golova и всей экосистемы связанных продуктов. Три уровня токенов — примитивы → семантика → компоненты — так изменения палитры не ломают компоненты, собранные поверх неё.
Структура: css/tokens.css — примитивы и семантические токены
(цвет, шрифты, отступы, радиусы, тени), css/components.css — компоненты
поверх токенов, включая полный набор форм. fonts/ и logos/ —
фирменные ассеты. Шрифты: Roboto Flex — весь UI-текст, PragmataPro — только
логотип и декоративные акценты.
Философия дизайна
Golova — профессиональная B2B SaaS-платформа для компаний, занимающихся арендой AV-оборудования и техническим обеспечением мероприятий. Каждый экран должен в первую очередь помогать быстро выполнять ежедневные рабочие задачи.
Интерфейс должен ощущаться как
- инженерный;
- профессиональный;
- насыщенный информацией;
- спокойный и надежный;
- ориентированный на ежедневную работу.
Избегаем
- игрового или стартапного стиля;
- больших карточек без необходимости;
- градиентов и декоративных иллюстраций;
- тяжелых теней;
- чрезмерного количества пустого пространства.
Визуальный язык
- минимализм и плоский интерфейс;
- тонкие разделители вместо толстых рамок;
- практически без теней;
- скругления только там, где они нужны;
- иерархия строится типографикой, а не цветами.
Логотип
Логотип используется как рабочий брендовый идентификатор внутри B2B-интерфейса. По умолчанию выбираем полный логотип, знак используем только там, где полная версия физически не помещается.
Logo Sizes
Четыре рабочих размера закрывают интерфейс, документацию и брендовые материалы.
Logo Variants
Допустимые версии логотипа. Не создаем новые варианты под отдельные экраны.
Основной вариант. Используется почти всегда: приложение, документы, настройки, onboarding.
Только знак: favicon, мобильная навигация, аватар продукта, квадратные области.
Черный/графитовый вариант для светлого фона. Базовый цвет: #2B2B2B.
Для темных интерфейсов. Черные SVG-локапы инвертируются через .on-dark.
Цвет #4976F4. Использовать редко: брендовые материалы и маркетинг, не как основной логотип внутри приложения.
Продуктовый лок для конкретного продукта экосистемы: шапка продукта, письма, счета.
Minimum Size
Ниже 20 px текстовая часть становится нечитаемой. Для меньших областей используем Symbol.
Safe Area
Вокруг логотипа оставляем пространство не меньше высоты символа или 8 px, что больше.
В продукте используем Full Logo размера S 24 px. В плотных местах переходим на Symbol, а не ужимаем полный логотип ниже минимума.
Не растягиваем, не меняем пропорции, не добавляем тени или градиенты, не перекрашиваем текст отдельно от знака.
White-версию используем на темных интерфейсах; Blue — только в брендовых и маркетинговых материалах.
Не используем цветные версии без необходимости и не меняем шрифт логотипа.
fonts/PragmataProMono-Regular.woff2.
Веб-лицензия FSD: один сайт, лимит 10 000 просмотров/мес. Загружен только Regular.
Цвет
Трёхуровневая модель: примитивы задают физические значения, семантика называет их по роли в интерфейсе, компоненты используют только семантику — никогда не примитивы напрямую.
Collection 1 · Primitive / Neutral
Базовая графитовая шкала. Шаги неравномерные (90→80→70→50→30→20→0) — так и задумано.
Collection 2 · Primitive / Brand
Основные и их soft-варианты (10% opacity) для подложек.
Collection 3 · Semantic
Роль → примитив. Компоненты ссылаются только на эти имена.
warning/* токена — он нужен минимум для звезды рейтинга
в карточке товара. Сейчас используется локальный placeholder #F5A623, не входящий
в официальные коллекции. Стоит добавить brand/warning в Collection 2, когда будете
расширять палитру.
Применение цветов
Как семантика ложится на конкретные UI-паттерны.
Текст
Фоны
Границы
Состояния
Кнопки
Темная тема
Темная версия строится тем же способом, что и светлая: примитивы → семантика → компоненты.
Компоненты не получают отдельные dark-классы; меняются значения семантических токенов через
.theme-dark или [data-theme="dark"].
Primitive / Dark Surface
Отдельная шкала темных поверхностей нужна, чтобы не ломать существующую neutral-шкалу.
Semantic Mapping
Названия токенов не меняются между темами; меняются только значения.
Text
Background
Border
State
Рабочий экран в темной теме
Плотный B2B-интерфейс: минимум декора, видимые разделители, спокойная иерархия.
Темная тема меняет только semantic/component tokens. Разметка компонента остается такой же, как в светлой теме.
Не создаем отдельные классы вроде .button-dark и не хардкодим цвета в компонентах.
Типографика
Roboto Flex — весь интерфейсный текст (переменный шрифт, гибкие насыщенности). PragmataPro — только логотип и декоративные акценты, не для чтения.
Отступы
Шкала на базе 4px.
Скругления
Система в целом угловатая. Формы — самые острые: 4px флэт, без исключений (кроме переключателя-свитча — он физическая пилюля по смыслу).
Тени
Незаметны в покое, раскрываются на интерактиве. Focus/error-ring — отдельные токены для полей форм.
Бейджи и теги
Табы
<div class="tabs">
<button class="tab active">Все</button>
<button class="tab">В аренде</button>
<button class="tab">Резерв</button>
</div>
Формы
Полный набор форм-компонентов на базе переменных Golova. Все контролы — 4px радиус
(--radius-form), фокус — рамка border/focus + мягкое кольцо
shadow-focus-ring, ошибка — border/error + shadow-error-ring.
<label class="field">
<span class="field-label">Название компании <span class="req">*</span></span>
<input class="ctrl" type="text" placeholder="ООО Ромашка">
<span class="field-hint">Юридическое или рабочее название клиента.</span>
</label>
Модалки
Три сценария под самые частые действия у сложных таблиц/деревьев: форма-редактор строки, подтверждение удаления, настройка видимости колонок. Структура одинаковая: заголовок с подписью и крестиком → тело (скроллится само, если контента много) → футер с действиями, прижатыми вправо.
Редактировать позицию
Спецификация · Звуковое оборудование — аренда
<div class="modal">
<div class="modal-header">
<div>
<h3>Редактировать позицию</h3>
<p>Изменения применятся к текущей строке.</p>
</div>
<button class="btn btn-sm btn-icon-only btn-ghost modal-close" aria-label="Закрыть">
<i class="bi bi-x-lg"></i>
</button>
</div>
<div class="modal-body">...</div>
<div class="modal-footer">
<button class="btn btn-md btn-secondary">Отмена</button>
<button class="btn btn-md btn-primary">Сохранить</button>
</div>
</div>
Удалить 44 позиции?
Раздел «Звуковое оборудование — аренда» будет удалён из спецификации вместе со всеми вложенными строками. Это действие необратимо.
Параметры таблицы
Видимость и порядок колонок
Заголовок модалки — краткий, подпись под ним уточняет контекст (где именно мы редактируем). Крестик закрытия — всегда круглый ghost справа.
Не ставим danger-действие первым/слева в футере — порядок всегда: второстепенное слева, главное (в т.ч. деструктивное) справа.
Карточка товара
<article class="pcard">
<div class="img">
<span class="badge badge-neutral">Продажа б/у</span>
<div class="fav">♥</div>
фото товара
</div>
<div class="body">
<h3 class="title">Акустическая система Yamaha DXR12</h3>
<p class="price">8 500 ₽ <span class="kit-flag"><i></i>Комплект</span></p>
<div class="seller"><span class="star">★</span> 4.9 · Pro Sound</div>
<div class="loc">Москва · самовывоз</div>
<button class="cta">Подробнее</button>
</div>
</article>
Developer Handoff
Этот раздел нужен разработчикам и ИИ-агентам, которые собирают прототипы или переносят паттерны в продукт. Источник истины остается в токенах, компонентах и правилах витрины.
Runtime CSS
css/tokens.css и css/components.css подключаются напрямую в HTML-прототип.
Machine Tokens
tokens.json можно читать агентам, скриптам, Figma-плагинам и будущему экспорту токенов.
AI Instructions
AI_USAGE.md — короткий контракт для Claude Code, Codex и других агентов.
Copy Snippets
Базовые HTML-snippets лежат рядом с кнопками, табами, формами, модалками и карточкой товара.
Где взять файлы
Разработчик или ИИ-агент может взять файлы из репозитория или скачать прямо из этой статической витрины.
Downloads
Работает при открытии через static server или из репозитория.
Минимальный prompt для ИИ-агента
Можно вставить в Claude Code перед созданием прототипа Golova.
Перед началом прочитай AI_USAGE.md, tokens.json, css/tokens.css и css/components.css.
Собери прототип Golova как плотный B2B SaaS/ERP экран.
Используй существующие CSS variables и component classes.
Не хардкодь цвета, не делай лендинг, не используй градиенты и декоративные иллюстрации.
Поддержи светлую и темную тему через data-theme="dark".
Как использовать
Компоненты ссылаются только на семантические токены (text/*, bg/*...), никогда напрямую на neutral/* или brand/*.
Не хардкодим hex в компонентах и не создаём новые цвета «по ощущению» — сначала примитив, потом семантика.
Все поля форм — 4px радиус, без исключений. Это единообразный, узнаваемо угловатый язык форм.
Не скругляем формы под общий radius-lg карточек — формы концептуально более острые, чем контейнеры.