Каталог собирается из самого прототипа: стили и значки берутся из его файла, поэтому цвета,
шкала и отступы здесь всегда те же, что в продукте. Разметка образцов написана руками — под
каждым стоит адрес класса, чтобы можно было сказать «поправь .chip--muted», а не описывать словами.
Цвета
Токены переворачиваются по теме: переключите её сверху, и образцы поедут сами. Правило:
на брендовом и категорийном фоне знак светлый в светлой теме и тёмный в тёмной — за это
отвечает парный токен --*-ink.
Поверхности
Текст и линии
Типы событий
Бренд и необратимое
Типографика
Кегль и интерлиньяж — одна пара, менять их можно только вместе. Правило контраста:
над текстом S заголовок не мельче H60, над текстом M — не мельче H50.
Заголовочные--f-h20 … --f-h6026/30 заглавие21/26 карточка события18/22 имя в профиле16/20 строка списка14/18 мелкий заголовок
Наборные--f-m10 … --f-xs1015/22 текст по умолчанию15/20 списки и контролы13/18 второстепенный13/16 в плотных блоках11/14 надзаголовок
Отступы и полосы
Лестница: 4 внутри пары, 8 внутри группы, 16 между группами, 24 внешнее поле блока.
Внешнее всегда больше внутреннего. У пары «заголовок и подпись» 4 — но только при нормальном
интерлиньяже подписи: тесную 13/16 под заголовок не ставим вовсе.
Полос две. 78 — содержательная: зона поиска и шапка профиля, её высоту диктует поле ввода.
56 — заголовочная и вкладочная: шапка раздела, вкладки, счётчик станции, шаги создания.
Кнопки
Основная кнопка в паре всегда справа. Красное осталось за необратимым: удалить, сбросить, пожаловаться.
Основная.btn.btn--primary
Тихая.btn.btn--ghost
Контурная.btn.btn--line
Необратимая.btn.btn--danger-solid
Выключенная.btn[disabled]
Пара: основная справа.row > .btn
Мелкая.btn--sm
Текстовая.linkbtn
Чипы и теги
Чип со срезанным углом называет, что это за объект: тип события, станция, ваша роль.
Тег говорит о состоянии или числе — он мельче и без фирменного угла.
Тип события.chip--act / --offer / --findВстречаВещьНаходка
Роль и место.chip--brand / .chip--mutedВы авторКурская~7 мин
Теги.tag / .tag--solidавторвы11 сентября9/10
Поля и контролы выбора
Поле стоит на белом и обведено настоящей рамкой — серая заливка отдана выключенному состоянию.
Обязательные поля идут первыми, необязательные после.
Поле с подписью.field > label + .inputПодсказка под полем
Поиск.searchfield
Выключенное.input[disabled]
Тумблер.switch.is-onСчитать расстояние от меняВыключено — считаем от станции до события
Варианты выбора.opts > .radio.is-on
Карточка типа.typecard.is-on
Сегментед.segctl
Строки и карточки списков
Подсветка строки означает «это открыто рядом», а не «отсюда вы пришли»: она живёт только там,
где список виден одновременно с карточкой.
Карточка ленты.fcard — feedCard
Карточка: открыта рядом.fcard.is-sel
Строка переписки.listrow--chat — viewChats
Строка профиля.listrow--chat — viewProfile
Строка человека.person — viewPeople
Строка-кнопка карточки.author
Обращения сервиса
Всё, что сервис говорит или просит лично у вас, живёт одним слоем: одно место, одно оформление.
Фон контекстный — в карточке белое с рамкой, в канале уведомлений новое залито, прочитанное белое.
Уведомление новое.sysmsg.is-newПодтвердите участиеУтренняя пробежка, темп 6:00завтра, 09:30. Подтвердите за 6 часов до начала14:10
Тост и тост-действие.toast / .toast--bareИзменения сохранены
Полосы экрана
Первая полоса: поиск.panel__top — 78
Вторая полоса: вкладки.tabs — 56
Вторая полоса: счётчик.scoperow — 56
Заголовок группы.eyebrowОпубликовано · 3
Полоса с прокруткой
Общий элемент для любого ряда, который шире экрана: вкладки, лента снимков, переключатели типа.
У краёв растворение — слева, когда начало уехало, справа, когда остался хвост. При наведении мышью
в тех же местах появляются стрелки; шаг стрелки — целая страница, и элемент, обрезанный краем,
переходит на следующую страницу целиком. Стрелки создаёт скрипт, в разметке их нет.
Начало ряда.hscroll.is-end — hscrollEdges
Середина ряда.hscroll.is-start.is-end
Ряд контролов.ctlrow > .ctl — viewMine
Пустые состояния
У пустого экрана всегда есть выход, и единственное действие на нём — основная кнопка.
Ничего нет.emptyЗдесь пока пусто
Нет активных событий с выбранными фильтрами
Ничего не нашлось.emptyНичего не нашлось
Попробуйте другое слово или проверьте фильтры категорий
Карта
Булавки.pin--act / --offer / --find / --mine
Кластер и станция.cluster / .metrodot4
Правила
На брендовом фоне — только светлоеБелый текст и значки на заливке бренда и категорий. В тёмной теме заливки светлеют, и знак на них темнеет парным токеном.
Основная кнопка в паре всегда справаИ в подвалах, и в модальных окнах.
Одно значение — один текстОдин факт называется одинаково везде и считается одним кодом. Разным бывает только оформление, когда у мест разные задачи.
Лестница отступов 4 / 8 / 16 / 24Внешнее поле всегда больше внутренних разрывов. Полосы, заданные числом, обязаны сходиться с содержимым в арифметике.
У шторок и разделов теней нетГраницу держит линия и заливка, а не тень.
Точки в конце нетПодписи и подсказки — не предложения. Вторую фразу-пересказ убираем: если сказанное уже видно на экране, повторять его нечем.
Обязательные поля первымиНеобязательные после. Погашенная кнопка называет, чего не хватает.
Меняешь высоту от действия внутри блока — анимируйРаскрытие и схлопывание идут по высоте, а не рывком.
Формы безличные«Провёл» и «сходила» требуют знать род человека, а мы его не знаем и по имени угадывать не станем.
Подсветка строки означает «открыто рядом»А не «отсюда вы пришли». Список, который сам лежит в цепочке, ничего рядом с собой не показывает.
В архиве чип опознаёт объектПока событие живо — зовёт к действию: «Отдаю» превращается в «Вещь», расстояние уходит, станция остаётся.