Новая заметка
Черновик сохранён в истории страницы.
code6 · единая дизайн-система «Federal»
Как сделать code6?
Все наши сервисы живут в разных технологиях, но должны опознаваться как один продукт. Обеспечивается это не одинаковой вёрсткой, а общими именами токенов, одним шрифтом, одним набором иконок и едиными правилами применения.
| Вариант | Файл и класс | Когда применяется | Минимум |
|---|---|---|---|
| Основной | code6_logo · c6LogoFullSymbol |
Шапки сайтов, презентации, обложки, промо, интро | 120 px |
| Сокращённый | code6_logo-short · c6LogoShortSymbol |
Узкие шапки, соцсети, оверлеи | 96 px |
| Знак | code6_logo-mark · c6MarkLeadSymbol, c6MarkTrailSymbol |
Фавикон, иконка приложения, водяной знак, индикатор загрузки | 16 px |
| Маскот Кодик | mascot-full-body, mascot-head, mascot-glasses ·
c6Mascot
|
Дружелюбные состояния. Логотип не заменяет | 64 px |
Файлы всех вариантов в цветном, белом и одноцветном исполнении лежат в папке ассетов code6.
Допустимые подложки: белая, светлое полотно, --c6ColorBlack и --c6ColorBlue. На
--c6ColorRed логотип не размещается: красный означает ошибку, и на нём логотип читается как
сбой системы.
На изображении логотип ставится в чистой зоне кадра либо поверх затемняющей подложки. Используется только одноцветный белый вариант: цветные части на пёстром кадре теряют читаемость.
Логотип встраивается как SVG и перекрашивается токенами вместе со схемой. PNG используется только там, где мы не управляем разметкой, например — письма и сторонние площадки.
Монохром нужен там, где цвет задаётся внешними условиями или фирменная палитра мешает читаемости.
Пунктир — минимальное свободное поле: высота знака «6» с каждой из четырёх сторон.
| Поле | Значение |
|---|---|
| Шаг сетки | 16 — толщина всех штрихов. Все зазоры кратны ему |
| Межбуквенный зазор | 32 — два шага |
| Зазор между знаком и словом | 64 — четыре шага, вдвое больше межбуквенного |
| Минимум на экране | 120 px основной, 96 px сокращённый, 16 px знак |
| Минимум в печати | 30 мм по ширине для основного |
| Формат | Инлайновый SVG в разметке. PNG — только там, где разметку не контролируем |
| Перекраска | Токенами --c6LogoInk, --c6LogoLead, --c6LogoTrail. Значения
fill в файле не правятся
|
| Написание названия | code6.ru приоритетно, допустимы code6 и код6. Всегда со строчной
буквы. Других написаний нет |
| Канон и алиас | В заголовках и метаданных латинское написание, кириллическое рядом в скобках |
Префикс c6 |
Язык кода: токены, классы, имена файлов. Именем бренда не является |
| Шрифт логотипа | Atlantis International. В интерфейсе не применяется |
Экстренные огни и знак являются главными двигающимися символами. Паттерн вспышек повторяет настоящую мигалку: синяя сторона даёт две короткие вспышки, затем две даёт красная. Это не декоративный пульс, а узнаваемый ритм — он опознаётся боковым зрением и работает даже в четырёх пикселях высоты.
Основной вариант огней. Ставится над шапкой, над первым экраном или разделителем перед важным блоком там, где нужно подчеркнуть причастность бренда.
На светлом
На чёрном — свечение сильнее
Компактный вариант для строки статуса, к которой нужно особое внимание: идёт ивент, трансляция в эфире. Рядом обязателен текст — сами по себе точки значения не несут.
Брендовый индикатор первой загрузки поверхности, заставки или перехода между крупными разделами.
Два размытых пятна по краям с анимацией-дыханием. Для первого экрана и пустых состояний. Под текстом допустимо только в таком виде: мягкое размытие и умеренная непрозрачность не мешают читать.
Здесь всё решают люди
Отбор проходит каждый
Логотип поднимается на восемь пикселей и проявляется, следом под ним включаются огни. Порядок важен: сначала знак, потом мигалка — иначе внимание уходит на движение, а не на бренд.
Самый узнаваемый индикатор из возможных: это не абстрактное кольцо, а собственный знак. Применяется там, где спиннер выглядел бы безлико — первая загрузка поверхности, полноэкранное брендовое состояние, заставка, передача/получение служебных данных.
Сигнал
Индикатор процесса. Вариант по умолчанию
Дыхание
Заставки и загрузка медиа
Мигалка
Только ивенты и эфиры
Знак в строке ставится размером 20 px: это совпадает с межстрочным интервалом основного текста, и строка не увеличивается в высоте.
| Правило | Значение |
|---|---|
| Частота | Не более 2.5 вспышек в секунду |
| Порядок цвета | Синий ведёт, красный отвечает. Обратный порядок не применяется ни в одном варианте |
| Количество | Один анимированный элемент бренда на экран. Огни и знак рядом не сочетаются |
| Свойства анимации | У знака меняется только непрозрачность половин, геометрия неподвижна. У логотипа допустимы
opacity, translate и равномерный scale
|
| Под текстом | Только фоновое свечение |
| Сигнал | Индикатор процесса: первая загрузка, запрос, ожидание ответа. Вариант знака по умолчанию |
| Дыхание | Заставки и пустые состояния. В шапку не ставится: медленно пульсирующий логотип читается как незавершённая загрузка |
| Мигалка | Только событие и эфир, не постоянным элементом интерфейса |
| Доступность | aria-hidden="true" и role="presentation". Смысл несёт текст, не анимация |
Кодик отвечает за дружелюбные состояния: пустые экраны, приветствия, ожидание, подсказки и мягкие ошибки без вины пользователя. Версии не закреплены за типами экранов — это варианты для событий и соответсвующего тона.
Спокойное парение
Ускоренное парение
| Правило | Значение |
|---|---|
| Маскот и логотип | Кодик логотип не заменяет и рядом с ним в одной связке не ставится |
| Очки | Версия в очках — для успешных событий и советующего тона. Обычная версия базовая |
| Где маскота нет | Экраны отказа, истечения срока и блокировки. Там тон сухой, и милый персонаж читается как насмешка |
| Количество | Один маскот на экран. Минимальный размер 64 px |
Четыре цвета. Чёрный и белый являются основными, синий отвечает за действия, красный — за акцент и предупреждение.
Чёрный
--c6ColorBlack · #0F0F0F
Белый
--c6ColorWhite · #FFFFFF
Синий
--c6ColorBlue · #1B6FE0
Красный
--c6ColorRed · #C8102E
Синий связан с действием, переходом или активным процессом. Статусы описывают результат или состояние: единая палитра имеет единый смысл на всех поверхностях.
| Токен | Светлая | Тёмная | Значение |
|---|---|---|---|
--c6ActionFill |
#1B6FE0
|
#4A93FF
|
Главное действие, активный выбор, заполнение прогресса |
--c6ActionInk |
#1560C8
|
#6BA7FF
|
Ссылки и текстовые действия |
--c6StatusWaiting |
#B8791A
|
#E0A33C
|
Ожидание, срок на исходе, ресурс заканчивается |
--c6StatusSuccess |
#037A58
|
#1FC08E
|
Одобрено, пройдено, успешно, набор открыт |
--c6StatusDanger |
#C8102E
|
#FF6B75
|
Ошибка, отказ, блокировка |
--c6StatusPro |
#7A3EA1
|
#B98AE0
|
Платные механики: приоритет, объединения, эксклюзивные функции |
--c6TextPrimary, цветом текста становится --c6SurfaceRaised — и никак иначе.
Токен --c6TextOnInverse здесь не подходит: он про тёмную плашку подвала, которая тёмная в обеих
схемах, поэтому в тёмной схеме даст белое по белому.--c6ActionFill — для кнопок,
активных переключателей и прогресса. --c6ActionInk — для ссылок и текстовых действий.| Токен | Светлая | Тёмная | Назначение |
|---|---|---|---|
--c6SurfaceCanvas |
#F1F3F7
|
#131A24
|
Полотно страницы |
--c6SurfaceRaised |
#FFFFFF
|
#1A2130
|
Карточки и панели: всегда светлее полотна |
--c6SurfaceSunken |
#F7F8FC
|
#141B25
|
Поля ввода, блоки кода |
--c6SurfaceInverse |
#212936
|
#0C1119
|
Подвал, плашки медиа |
--c6TextPrimary |
#212936
|
#E8ECF3
|
Заголовки и основной текст |
--c6TextSecondary |
#5C6377
|
#A2ACBD
|
Абзацы и описания |
--c6TextFaint |
#667085
|
#8A94A6
|
Подписи и метаданные |
--c6TextDisabled |
#8A91A3
|
#6E7A8C
|
Выключенные элементы и неактивные иконки. Текстом не бывает |
--c6BorderDefault |
#E1E5EE
|
#28313F
|
Границы карточек и секций |
Цвет помогает опознать департамент и живёт только в шапке карточки, полосе, маркере списка или бейдже с аббревиатурой. Карточка остаётся нейтральной, ссылки внутри синие.
Три ступени на каждый департамент: Dark, основная и Light. Оттенок и цветность
взяты из набора максимально различимых цветов.
CIV · --c6DepartmentCiv
LSPD / LSSD · --c6DepartmentLspd
SAHP · --c6DepartmentSahp
LSCoFD · --c6DepartmentFd
FIB · --c6DepartmentFib
DOT · --c6DepartmentDot
DISP · --c6DepartmentDisp
Коммуникации · --c6RoleComms
FTO · --c6RoleFto
Ранг — порядковая ось рядом с департаментами и ролями. Департамент отвечает на вопрос «где человек состоит», ранг отвечает на вопрос «насколько высоко поднялся». Поэтому ранг не получает собственный оттенок: вся шкала идёт одной рампой от нейтрали к золоту.
Соседние ранги похожи намеренно. Чип ранга всегда содержит название, а цвет только усиливает положение на шкале.
Crook · 0-49
Runner · 50-99
Player · 100-299
Hustler · 300-799
OG · 800-1499
Kingpin · 1500-2499
Boss · 2500+
| Ранг | Порог | Dark | Main | Light | Текст на Main |
|---|---|---|---|---|---|
| Crook | 0-49 | --c6TierCrookDark |
--c6TierCrook |
--c6TierCrookLight |
белый |
| Runner | 50-99 | --c6TierRunnerDark |
--c6TierRunner |
--c6TierRunnerLight |
белый |
| Player | 100-299 | --c6TierPlayerDark |
--c6TierPlayer |
--c6TierPlayerLight |
белый |
| Hustler | 300-799 | --c6TierHustlerDark |
--c6TierHustler |
--c6TierHustlerLight |
чёрный |
| OG | 800-1499 | --c6TierOgDark |
--c6TierOg |
--c6TierOgLight |
чёрный |
| Kingpin | 1500-2499 | --c6TierKingpinDark |
--c6TierKingpin |
--c6TierKingpinLight |
чёрный |
| Boss | 2500+ | --c6TierBossDark |
--c6TierBoss |
--c6TierBossLight |
чёрный |
| Правило | Значение |
|---|---|
| Форма | Ранг отображается чипом с названием: c6TierChip c6TierHustler. Чип без текста не используется
|
| Имя | Один ключ на сущность. Класс выводится как c6Tier{Key}, метка может меняться свободно |
| Порядок | Хранится только нижний порог. Верхняя граница выводится из следующего порога |
| Рядом с департаментом | Департамент — полоса или бейдж с аббревиатурой, ранг — чип с названием. Одинаковой формой не бывают |
| Затухание | Рейтинг может падать при бездействии, поэтому ранг формулируется как текущее состояние, не как награда |
| Правило | Значение |
|---|---|
| Где живёт цвет | Шапка карточки, полоса, маркер списка или бейдж. В коммуникации — цвет названия роли, секции или имени. В основном тексте, ссылках и кнопках не используется |
| Столкновения | Ни одно значение не совпадает с семантическим токеном и не лежит рядом с ним |
| Слитые департаменты | LSPD и LSSD в US — один департамент. --c6DepartmentLssd оставлен алиасом на
--c6DepartmentLspd
|
| Текст на плашке | У каждой ступени свой токен: --c6Department{X}DarkInk,
--c6Department{X}Ink и --c6Department{X}LightInk. Для ролей используется тот
же шаблон под префиксом --c6Role*
|
| Тёмная схема | Значения не переопределяются: ступени лежат в средней светлоте и работают на обеих схемах |
Inter Variable — единственный интерфейсный шрифт на всех поверхностях. Переменное начертание даёт весь диапазон толщин одним файлом и оптический размер, за счёт которого мелкий текст остаётся читаемым, а крупный выглядит уместным. Atlantis International — только логотип и вордмарк.
@font-face {
font-family: "Inter";
src: url("/fonts/InterVariable.woff2") format("woff2-variations");
font-weight: 100 900;
font-display: swap;
}
Девять ступеней. Крупные адаптивны через clamp() и не требуют брейкпоинтов, мелкие фиксированы:
уменьшать их на мобильном нельзя. Micro совпадает по размеру с Caption и отличается весом и разрядкой.
| Токен | Десктоп | Мобильный | Интерлиньяж | Вес | Где |
|---|---|---|---|---|---|
--c6FontSizeDisplay |
40 | 30 | 1.12 | 600 | Первый экран |
--c6FontSizeH1 |
32 | 26 | 1.18 | 600 | Заголовок страницы |
--c6FontSizeH2 |
24 | 21 | 1.25 | 600 | Заголовок блока |
--c6FontSizeH3 |
19 | 17 | 1.35 | 600 | Заголовок карточки |
--c6FontSizeLead |
17 | 17 | 1.6 | 400 | Подводка под заголовком |
--c6FontSizeBody |
15 | 15 | 1.6 | 400 | Основной текст, кнопки |
--c6FontSizeSmall |
13 | 13 | 1.55 | 400 | Текст в карточках, ссылки |
--c6FontSizeCaption |
12 | 12 | 1.5 | 400 | Подписи, метаданные |
--c6FontSizeMicro |
12 | 12 | 1.45 | 500 | Надзаголовки, капслок |
Здесь всё решают люди
Заголовок страницы
Заголовок блока
Заголовок карточки
Подводка под заголовком — 17 px, вторичный цвет
Основной текст интерфейса
Текст внутри карточек и списков
Подписи, даты, счётчики
Надзаголовок секции
7KQ2MX4B1P — только для кодов и ключей
| Правило | Значение |
|---|---|
| Минимальный размер | 12 px. Ниже нельзя нигде, включая подписи и сноски |
| Основной текст на мобильном | Не меньше 15 px. Уменьшение на узком экране запрещено |
| Цель нажатия | Не меньше 44 × 44 px, включая ссылки в плотных списках |
| Крупные кегли | Через clamp(): размер плавно меняется с шириной экрана, не выходя за минимум и максимум.
Отдельные брейкпоинты под каждый размер и голые vw не применяются |
| Веса | 400 — текст, 500 — интерфейс и микро, 600 — заголовки. 300 и тоньше не применяются: на тёмной схеме разваливаются |
| Длина строки | Не нормируется. Строка может быть любой длины, если содержимое остаётся внутри контейнера и не создаёт горизонтальный скролл страницы |
| Горизонтальный скролл | Скролл страницы отсутствует на любой ширине от 320 px. Для широких таблиц допустим локальный скролл внутри таблицы |
Lucide — единственный иконочный пак. Смешивать паки нельзя: разные стили заметны даже неподготовленному глазу и читаются как небрежность. Одна иконка означает одно и то же во всех продуктах.
| Правило | Значение |
|---|---|
| Интерфейсные размеры | 14, 16, 18, 20 и 24 px — кнопки, поля, меню, таблицы, статусы |
| Крупные размеры | 32, 40 и 48 px — пустые состояния, крупные карточки, экраны ошибок, онбординг |
| Соответствие тексту | 16 px к компактному тексту, 18–20 px к основному, 20–24 px к крупным элементам |
| Толщина обводки | 2 по умолчанию, 1.75 для 24 px, 1.5 для 32 px и выше |
| Формат | SVG. Иконочные шрифты не применяются |
| Цвет | Всегда currentColor. Собственного цвета у иконки нет |
| Доступность | Декоративная иконка получает aria-hidden="true". Если иконка — единственное содержимое
элемента управления, элемент получает доступное текстовое имя |
Базой берётся шкала Bootstrap. Она покрывает почти все случаи утилитами и избавляет от самодельных отступов,
которые расходятся между страницами. Расстояния задаются в разметке: p-4, px-lg-5,
g-3, gap-2, mt-3. Токены --c6Space* нужны там, где утилита
неприменима — внутри компонента.
| Токен | Утилита | Значение | Где применяется |
|---|---|---|---|
--c6Space1 |
1 |
4 px | Между иконкой и подписью, внутри чипа |
--c6Space2 |
2 |
8 px | Между строками карточки, gap в списках чипов |
--c6Space3 |
3 |
16 px | Между карточками в ряду, отступ абзаца |
--c6Space4 |
4 |
24 px | Поля карточек и секций на мобильном |
--c6Space5 |
5 |
48 px | Поля секций на десктопе |
| Правило | Значение |
|---|---|
| Секция | p-4 p-lg-5 — 24 px на мобильном, 48 px на десктопе |
| Карточка | p-3, крупная — p-4 |
| Ряды | row и g-3. Собственные grid-контейнеры только там, где Bootstrap не может
выразить раскладку |
| Вертикальный ритм | Отступ между блоками кратен 8. Значения вне шкалы не вводятся |
| Порядок утилит | Раскладка, отступы, оформление: d-flex justify-content-between align-items-center px-4 py-3
|
Радиус — часть плотности интерфейса, а не украшение. В продукте используются четыре токена, и новый радиус не заводится под отдельную карточку или кнопку.
| Токен | Значение | Где применяется |
|---|---|---|
--c6RadiusSm |
8 px | Образцы, чипы без статуса, компактные вложенные элементы, маленькие превью |
--c6RadiusMd |
10 px | Кнопки, поля ввода, медиа-рамки, интерактивные элементы среднего размера |
--c6RadiusLg |
12 px | Карточки, панели, крупные демонстрационные блоки |
--c6RadiusPill |
20 px | Статусные плашки и элементы, которые по форме должны читаться как капсула |
| Правило | Значение |
|---|---|
| Один уровень — один радиус | Соседние карточки, превью и панели одного уровня используют один токен. Нельзя смешивать 8,
10 и 12 внутри одного набора
|
| Вложенность | Вложенный элемент получает радиус на шаг меньше родителя: карточка --c6RadiusLg, внутреннее
медиа --c6RadiusMd, мелкий чип --c6RadiusSm |
| Pill | --c6RadiusPill используется только там, где вытянутая форма несёт смысл: статус, бейдж,
короткий выбор. Обычные кнопки pill не становятся |
| Микрорадиусы | Значения меньше 8 px допустимы только для технических форм: полосы прогресса, точки, линии огней, скелетные строки. Новые поверхности ими не оформляются |
| Круг | 50% используется только для круглых иконок, точек и аватарных форм. Это не замена
--c6RadiusPill
|
Обязательный минимум и правила применения. Базовые компоненты не переопределяются на уровне отдельных продуктов: различаться могут содержание, компоновка и сценарий, но не визуальные роли и состояния.
Базовая карточка
Объединяет связанное содержимое и отделяет его от фона страницы.
Выделенная карточка
Применяется, когда блоку нужен повышенный визуальный приоритет. Синяя рамка не означает, что вся карточка является действием.
Любой компонент обязан выдерживать длинный текст, код, никнейм, ссылку и технический идентификатор без горизонтального переполнения страницы. Базовое поведение — переносить. Усечение включается только там, где полный текст можно открыть или восстановить.
| Случай | Правило | Почему |
|---|---|---|
| Неразрывная строка | overflow-wrap: anywhere на текстовом контейнере |
Коды, ссылки, никнеймы и пути не содержат пробелов, браузеру нужно разрешить аварийный перенос |
| Flex или grid | min-width: 0 на текстовом потомке и ячейках сетки |
Иначе элемент считает ширину содержимого минимальной и выталкивает соседей из контейнера |
| Таблица или код | Горизонтальный скролл у явного контейнера | Структурные данные и форматированный код нельзя ломать переносами, если от этого теряется смысл |
| Класс | Когда применяется |
|---|---|
c6TextNoWrap |
Короткая атомарная метка, дата, время, число с единицей измерения. Не использовать для длинных ID |
c6TextTruncate |
Одна строка с многоточием, когда полный текст доступен в соседнем экране, tooltip или раскрытии |
c6TextClamp2, c6TextClamp3 |
Превью заголовков и описаний в карточках. Не использовать для ошибок, инструкций и юридически значимых текстов |
Перенос без пробелов
7KQ2MX4B1P-9F3D-4A21-B7E8
Осознанное усечение
Фраза офицера дорожного патруля запустила волну беспорядков в округе и стала началом длинного события
| Нельзя | Причина |
|---|---|
Ставить overflow: hidden на карточку ради защиты |
Так скрываются фокус, подсказки, выпадающие элементы и настоящие ошибки раскладки |
| Усекать коды, статусы и сообщения об ошибках | Пользователь не может принять решение по неполному значению |
| Делать кнопку или бейдж бесконечно однострочным | На мобильном длинная локализация вытолкнет соседние элементы за экран |
Уведомление — временное сообщение о том, что только что произошло поверх содержимого. Оно не описывает состояние объекта и не заменяет его: если сообщение нужно перечитать позже, это запись в списке или строка в карточке.
Новая заметка
Черновик сохранён в истории страницы.
Steam привязан
Аккаунт готов к подаче заявки.
Проверяем данные
Ответ может занять несколько секунд.
Не удалось сохранить
Проверьте соединение и повторите.
Приоритет обновлён
Платная механика отмечается фиолетовым тоном.
<div class="c6AlertRegion" id="c6AlertRegionPolite" role="status" aria-live="polite" aria-atomic="false"></div> <div class="c6AlertRegion" id="c6AlertRegionAssertive" role="alert" aria-live="assertive" aria-atomic="false"></div>
c6AlertStack.show({
tone: 'success',
title: 'Steam привязан',
text: 'Аккаунт готов к подаче заявки.'
});
c6AlertStack.show({
tone: 'danger',
title: 'Не удалось сохранить',
text: 'Проверьте соединение и повторите.',
action: { label: 'Повторить', onSelect: () => saveApplication() }
});
| Правило | Значение |
|---|---|
| Срок жизни | 5 секунд для обычных, 7 секунд для ожидания и платных механик. Ошибка не гаснет сама |
| Видимых одновременно | Не больше трёх. Остальные сворачиваются в счётчик, а не удаляются молча |
| Доступность | Спокойные сообщения идут в polite-область, ошибки — в assertive-область |
| Длина | Два предложения — предел. Дальше нужна страница, карточка или строка списка |
| Тень | --c6ShadowOverlay применяется только к всплывающим слоям: уведомлениям, поповерам и модальным
окнам |
Динамического содержимого в продуктах больше, чем статического: счётчики опрашиваются с интервалом, позиции обновляются на глазах, статусы меняются постоянно. Состояние загрузки — один из штатных видов блока, и выглядеть оно должно так же продуманно, как готовый экран.
Геометрия скелета обязана совпадать с геометрией готового блока. Если после подстановки содержимого страница дёрнулась, скелет сделан неправильно и лучше бы там стоял спиннер.
В плотных таблицах скелет ставится внутрь настоящих ячеек: тогда ширины колонок держит сама таблица и после загрузки ничего не перестраивается.
| Код | Департамент | Статус | Время |
|---|---|---|---|
Три размера. Кольцо берёт цвет границы, дуга — currentColor, поэтому спиннер одинаково работает на
карточке, в кнопке и на тёмной плашке без переопределений.
Подпись не удаляется, а скрывается: ширина кнопки не меняется, соседние элементы не сдвигаются. Повторное
нажатие блокируется через disabled, pointer-events остаётся визуальным дополнением.
Тонкая полоса под шапкой на время перехода или тяжёлого запроса. В отличие от бегущего отблеска, здесь только синий: это процесс, а не взаимодействие с брендом.
Рамка держит размер и показывает подложку скелета, изображение появляется по событию загрузки с плавным проявлением и без сдвигов раскладки.
До загрузки
После загрузки

Числа, которые обновляются сами: свободные места, позиция в очереди, счётчик людей на сервере. Их нельзя заменять скелетом при каждом опросе — значение подсвечивается ровно в момент изменения.
Попробуйте
Свободно мест: 56
Если ответ не пришёл, значение не прячется и не обнуляется. Блок приглушается, рядом появляется отметка времени последнего успешного обновления.
56 мест
Обновляется каждую минуту
Данные от 21:04, связь потеряна
| Правило | Значение |
|---|---|
| Порог показа | Индикатор не появляется первые 200 мс. Мелькание раздражает сильнее, чем ожидание |
| Минимальная жизнь | Показанный индикатор держится не меньше 400 мс, иначе он мигнёт и исчезнет |
| Совпадение геометрии | Скелет повторяет размеры готового содержимого. Сдвиг раскладки после загрузки — ошибка |
| Ширина скелета | Модификаторами c6SkeletonWide*, не атрибутом style |
| Загрузка, пустой результат и ошибка | Три разных состояния. Во время запроса — загрузка, после успешного пустого ответа — пустое состояние, при неудачном — ошибка |
| Повторный опрос | Не заменяет содержимое скелетом. Меняется только само значение |
| Ошибка опроса | Старое значение остаётся, блок приглушается, появляется отметка времени |
| Бренд против спиннера | Отблеск и знак — первая загрузка поверхности, заставки, крупные переходы. Отправка формы и загрузка отдельного блока — синий спиннер, скелет или локальная подсветка |
| Индикатор навигации | Запускается по факту перехода, а не по клику: отменённый клик, модальное окно и переключение схемы его не включают |
| Повторный запуск | Каждый новый переход перезапускает анимацию с нулевого кадра. Повторное добавление класса само по себе её не перезапускает — нужен принудительный пересчёт раскладки |
| Остановка | Гасит индикатор только последний запрос. Ранний ответ не снимает индикатор более позднего перехода |
Контейнер для всего, что написала модель: ответы ассистента, автоматические сводки, предварительные оценки, суммаризация, реплики NPC, ситуационные подсказки. Три обязательных признака — штриховая кромка, маркер происхождения и подпись с моделью и временем.
По номеру 7KQ2MX4B1P найдено три записи: остановка на трассе 12 сентября, протокол о превышении 14 сентября, вызов эвакуатора 15 сентября.
Совпадений по розыску нет.
Сводка составлена автоматически и может содержать ошибки. Проверяйте важную информацию.
По номеру 7KQ2MX4B1P найдено три записи: остановка на трассе 12 сентября
| Правило | Значение |
|---|---|
| Обязательные признаки | Штриховая кромка, маркер, подпись с моделью и временем. Ни один не опускается |
| Никогда не как человеческое | Сгенерированный текст не оформляется так же, как написанный участником или администрацией |
| Цвет | Не берёт ни один статусный оттенок. Синий допустим только в индикаторе процесса |
| Анимация | Только во время генерации. После завершения блок статичен |
| Смена состояния | Снятие класса не меняет геометрию: блок не смещается в момент завершения |
| Оговорка | Там, где на основе текста принимают решения, внизу стоит строка об автоматическом происхождении |
| Вложенность | Блок не вкладывается в другой такой же. Несколько ответов — несколько блоков подряд |
Часть сервисов тёмные по своей природе: одни показывают фоновое видео и рендеры, другие имитируют служебную систему, в которую смотрят часами. Другие светлые: там читают длинные тексты и принимают решения. Требовать от всех одной схемы бессмысленно, требовать одинаковых токенов обязательно.
| Поверхность | Схема | Особенности |
|---|---|---|
| Форум | тёмная | Фоновое видео и рендеры, высокая плотность контента |
| База знаний Docs | обе, светлая по умолчанию | Длинные тексты, переключатель схемы у пользователя |
| Игровые сервисы | тёмная | Прогресс, рейтинги, статусы, длительные сессии |
| Приём | обе, светлая по умолчанию | Воронка состояний, которая должна быть консистентной |
| Лендинги и медиа | по задаче | Обязательны шрифт, иконки и палитра |
Federal — имя дизайн-системы, но не технический namespace. В коде всё живёт под единым префиксом
c6: базовые значения, семантические токены и компоненты.
| Слой | Префикс | Отвечает на вопрос | Примеры |
|---|---|---|---|
| Базовые значения и шкалы | --c6Color*, --c6Department*, --c6Space*, --c6Radius*,
--c6FontSize*, --c6Motion*
|
Какое это значение? | --c6ColorBlue, --c6DepartmentLssd, --c6Space4 |
| Семантические роли | --c6Surface*, --c6Text*, --c6Border*, --c6Action*,
--c6Status*, --c6Logo*, --c6Light*, --c6Mark*
|
Для чего это используется? | --c6SurfaceCanvas, --c6TextPrimary, --c6ActionFill |
| Компонент | c6 |
Где применяется? | c6ButtonPrimary, c6StatusPillWaiting, c6DepartmentBandSahp |
:root {
--c6ColorBlue: #1B6FE0; /* базовое значение */
--c6ActionFill: var(--c6ColorBlue); /* семантический токен */
}
.c6ButtonPrimary { /* компонент читает семантику */
background: var(--c6ActionFill);
}
card, btn, row, badge. Любой наш класс без префикса рано или
поздно столкнётся с их обновлением. Префикс снимает вопрос навсегда и делает видимым, где в разметке наш
компонент, а где утилита фреймворка.
c6-tokens.css и Bootstrap.c6, отступы задавать утилитами Bootstrap.c6.Переход делается фазами, каждая заканчивается рабочим состоянием. Старые переменные не удаляются сразу, а переопределяются через новые — тогда продукт переезжает одним шагом и ничего не разваливается.
:root {
--oldBrandPrimary: var(--c6ActionFill);
--oldTextMuted: var(--c6TextSecondary);
}
Такой мост для переноса живёт до последней фазы и удаляется вместе со старыми именами.
Постоянная ссылка на файлы токенов (переменных CSS):
<link rel="stylesheet" href="https://code6.ru/docs/assets/c6-tokens.css">
Приведи проект к дизайн-системе code6. Источник правды: https://code6.ru/brand https://code6.ru/docs/assets/c6-tokens.css https://code6.ru/docs/assets/brand/ Версия бренд-документа: c6-brand-v2026-07-31 Перед началом: — найти на странице meta[name="c6-brand-version"] — продолжать только если content равен c6-brand-v2026-07-31 Обязательно: — подключить c6-tokens.css, не копировать значения — Inter Variable, иконки Lucide, отступы утилитами Bootstrap — классы компонентов с префиксом c6 — обе схемы работают, переключение атрибутом data-theme Запрещено: — менять раскладку, тексты и бизнес-логику — вводить новые цвета — атрибут style и строки стилей из JS Вернуть: список изменённых файлов, таблицу контраста по всем парам в обеих схемах, список открытых вопросов.
Действуют во всех разделах и не повторяются в частных таблицах.
| Правило | Значение |
|---|---|
| Снижение движения | При prefers-reduced-motion анимации останавливаются, элементы остаются в статичном читаемом
виде. Ни один компонент не теряет смысл без движения |
| Цвет не один | Цвет ускоряет опознание, но информацию несёт текст. Элемент, различимый только по цвету, не добавляется в проект |
| Токен вместо значения | Любой цвет, размер и отступ берётся из токена. Единственное исключение — примеры в этом документе |
| Отличия этой страницы от продукта | Документ показывает варианты рядом и потому нарушает собственные правила «один элемент огней на экран» и «один анимированный знак на экран». В продукте они соблюдаются |
| Основной критерий проверки | Компонент, перенесённый с одной поверхности на другую, не должен требовать правки цветов. Если требует — где-то остался хардкод вместо токена |
| Правило | Значение |
|---|---|
| Регистр | camelCase для переменных, функций, ключей объектов, CSS-токенов и классов |
| Имена | Полные слова. departmentIndex, а не di |
| Сокращения | Только общепринятые: id, url, css |
| Комментарии | Там, где логика неочевидна или может быть понята двояко |
| Обфускация | В исходниках не применяется. Минификация — задача сборки |
| Функции | Одна функция — одна ответственность. Сборка разметки отдельно от логики состояния. Похожие функции объединяются, а не дублируются |
| Правило | Значение |
|---|---|
| Инлайн-стили | В продуктовой разметке и переносимых примерах не применяются. Ни атрибутом style, ни строкой
стиля из JS |
| Динамические значения | Через класс-модификатор или CSS-переменную на элементе:
element.style.setProperty('--c6ProgressValue', '53%'), не через сборку строки CSS
|
| Группировка | Токены объявляются в начале файла, остальной CSS группируется по компонентам. В начале блока компонента перечисляются используемые токены |
| Порядок разделов | Совпадает с порядком разделов страницы и объявлен в шапке файла |
| Адаптивы | Медиазапрос компонента лежит рядом с компонентом, а не в общей секции в конце файла |
| Хардкод цвета | Не применяется. Любой цвет — только токен |
| Утилиты против CSS | Сначала утилита Bootstrap в разметке, свой класс — если утилит не хватает |
Текст — часть интерфейса: он определяет, что пользователь понимает, какие действия замечает и какие решения может принять. Информация раскрывается по мере необходимости: сначала главное действие и текущее состояние, затем пояснения, условия и подробности.
| Показываем | Не показываем |
|---|---|
| Статусы, даты, коды, сроки | Причины отказа |
| Позицию в очереди и скорость обработки | Обещания сроков проверки |
| Требования и стоп-факторы | Советы по подготовке и разбор ошибок |
| Названия шагов отбора | Внутренние процедуры |
| Характер департаментов | Устройство служб изнутри |
Сдержанность касается раскрытия информации, а не интонации. «В этот раз не получилось» — нормально. «Вот что стоит подтянуть» — нет. Детали о раскрытии информации — в правилах code6.