Один язык.
Весь новый дизайн.
Главная, каталог, карточка набора, витрина и личный кабинет — в общей системе токенов, компонентов и правил.
Основа
Значения здесь читаются из того же файла, который создаёт CSS сайта.
Цвет и смысл
#292a30--mk-color-ink#647386--mk-color-muted#596a80--mk-color-muted-account#8a99ad--mk-color-subtle#f34046--mk-color-brand#c92430--mk-color-action#b9212d--mk-color-action-hover#ffffff--mk-color-white#f8fafc--mk-color-canvas#ffffffed--mk-color-glass-border#d5e1ef88--mk-color-line#28704c--mk-color-success#eff8f3--mk-color-success-bg#805d20--mk-color-warning#fff7e9--mk-color-warning-bg#315e96--mk-color-info#eef5fd--mk-color-info-bg#b9212d--mk-color-danger#fff0f1--mk-color-danger-bg#596a80--mk-color-neutral#eef2f7--mk-color-neutral-bgBrand — цвет логотипа и акцентов. Для мелкого текста и залитых кнопок используйте более тёмный Action: белый текст на нём имеет контраст не ниже 4.5:1.
Типографика
display / 42pxsection / 29pxheading / 24pxinput / 16pxbody / 14pxlabel / 12pxcaption / 11pxСистемный шрифт. Полные названия, перенос длинных строк, табличные цифры для сумм.
Ритм и радиусы
1 / 4px2 / 8px3 / 12px4 / 16px5 / 20px6 / 24px7 / 28px8 / 32px10 / 40px12 / 48pxБазовый шаг 4 px. Между карточками принят отдельный токен 14 px. Разные радиусы сохраняют плотность макетов.
Стекло с понятной иерархией
Материал задаёт поверхность; сетка и бизнес-логика остаются у конкретного блока.
Большая панель
Шапка, секции главной, фильтры. Светлые синие и тёплые блики.
--mk-surface-sectionКарточка каталога
Товары, серии, предложения. Прозрачность 0.47, радиус 28 px.
--mk-surface-cardПанель кабинета
Сводки, заказы, настройки. Более плотный материал, радиус 26 px.
--mk-surface-accountНепрозрачный слой
Сложные формы и резервное отображение без размытия.
--mk-color-whiteДействия
Одно главное действие на блок. Ссылки ведут на страницу, кнопки меняют состояние.
Фокус виден с клавиатуры. У иконок без текста обязательно есть доступное название. На сенсорном экране активная область — не меньше 44 × 44 px.
Ввод и фильтры
Примеры ниже локальные: ввод не отправляет данные и не меняет каталог.
Постоянная подпись остаётся видимой при вводе.
Выбранное значение сохраняется даже при пустой выдаче.
Укажите номер набора.
Объясняйте причину недоступности рядом с полем.
Ошибка связана с полем через aria-describedby; цвет дополняет текст, а не заменяет его.
Состояния и навигация
Загрузка, отсутствие данных и ошибка имеют разные тексты и действия.
По этим условиям ничего не найдено
Попробуйте другую серию или сбросьте один из фильтров.
Вкладки
Содержание вкладки
Стрелки переключают доступные вкладки. Home и End переходят к первой и последней.
Состав набора
Названия вкладок и панелей связаны уникальными идентификаторами, включая несколько экземпляров на странице.
Диалог удерживает фокус, закрывается по Escape и возвращает фокус к кнопке открытия.
Общая библиотека иконок
24 × 24, линия 1.6, скруглённые окончания. HomeIcon и CatalogIcon используют этот же источник.
Весь интерфейс в одной системе
Готовые составные блоки используются на страницах. Не создавайте вторую копию карточки или оболочки.
Категории деталей
catalogОбщий справочник категорий, поиск и алфавит.
app/pages/(catalog)/parts/themes.vueОткрыть пример Детали
catalogКарточки, фильтры и пагинация деталей.
app/pages/(catalog)/parts/index.vueОткрыть пример Минифигурки
catalogОбщий каталог минифигурок и связанных наборов.
app/pages/(catalog)/minifigs/index.vueОткрыть пример Инструкции
catalogПоиск по наборам, электронные инструкции LEGO и печатные предложения.
app/pages/(catalog)/instructions/index.vueОткрыть пример Корзина
homepageПустая корзина, выбор категории, товары и оформление заказа.
app/pages/(user)/cart/index.vueОткрыть пример Серии наборов
catalogИзбранные направления, поиск, алфавит, окно подтем.
app/pages/(catalog)/sets/themes.vueОткрыть пример Каталог наборов
catalogФильтры из URL, плитки/список, пагинация и пустая выдача.
app/pages/(catalog)/sets/index.vueОткрыть пример Карточка набора
catalogПолное имя, фото, состав, предложения, вкладки.
app/pages/(catalog)/sets/[set_num]/index.vueОткрыть пример Витрина магазина
catalogОбложка, профиль и фильтры лотов. Нужен реальный ID открытого магазина.
app/pages/(catalog)/shops/[store_id]/index.vueОткрыть пример Кабинет покупателя
accountБоковое меню, сводки, заказы, коллекция и вишлисты. Нужен вход.
app/layouts/account.vueОткрыть пример Кабинет продавца
accountРоль продавца, лоты, настройки магазина и заказы. Нужен вход.
app/components/account/AccountStoreProducts.vueОткрыть пример Адаптивность
| Контекст | Границы |
|---|---|
| public | narrow: 360 · mobile: 540 · tablet: 750 |
| catalog | narrow: 359 · mobile: 540 · filters: 650 · tablet: 850 |
| account | narrow: 350 · mobile: 600 · tablet: 900 · wide: 1100 |
Сетки используют minmax(0, 1fr), длинные названия переносятся. Карточка товара сохраняет фото через object-fit: contain. Ширины профилей сохранены из принятых макетов.
Как использовать в коде
TypeScript → CSS-токены → базовые компоненты → составные блоки → страницы.
Новая секция в существующем layout
<script setup lang="ts">
import MkButton from '~/components/design-system/MkButton.vue'
import MkSurface from '~/components/design-system/MkSurface.vue'
</script>
<template>
<MkSurface material="section">
<h2>Новая секция</h2>
<MkButton variant="primary">Продолжить</MkButton>
</MkSurface>
</template>Стили уже подключены в homepage, catalog и account. Для отдельного интерфейса используйте layout design-system или импорт design-system.css и корень data-mk-design.
Основа
MkIconMkSurfaceMkBadgeHomeIconCatalogIconДействия и ввод
MkButtonMkIconButtonMkFieldMkSelectMkOptionSelectОбратная связь
MkNoticeMkDialogMkTabsОболочка и навигация
HomeHeaderHomeFooterHomeCartLinkSiteHeaderAccountNavigationLinksAccountMobileNavCatalogBreadcrumbsCatalogPaginationAccountPaginationГлавная
HomeCategoriesHomeRailHomeSelectionHomeProductCardHomeAdvertisingКаталог и магазин
CatalogSetCardCatalogOfferCardCatalogOffersCatalogImageCatalogPurchaseCatalogStatusCatalogDialogCatalogDirectoryCatalogEntryCardCatalogEntryListCatalogEntityDetailCatalogRelatedКабинет
AccountOverviewAccountOrderListAccountOrderStatusAccountOrderItemsAccountOrderTotalsAccountWishlistProductsAccountStoreProductsAccountRoleSwitchAccountStateAccountLogoutAccountPhotoUploadКорзина
CartEmptyCartTotalsDeliverySelectorПравила, которые сохраняют систему
- Новые общие значения добавляйте в shared/design-system/tokens.ts, затем выполняйте pnpm design:tokens и pnpm design:check.
- Подключайте Mk-компоненты явным импортом. Их состояние принадлежит родителю; они не обращаются к API и не знают о пользователе.
- Составные карточки каталога и кабинета сохраняют свои данные и действия. Общая система управляет материалами, визуальными значениями и базовыми элементами.
- Показывайте реальные фото и значения. Неизвестные характеристики обозначайте явно, не заменяйте нулями.
- Проверяйте клавиатуру, ширину 320 px, длинный текст, ошибку запроса и reduced motion. Тёмная тема пока не входит в утверждённый дизайн.