Skip to content

Design Tokens

Общие сведения

Проект использует Nuxt UI v3 поверх Tailwind CSS 4. Кастомных дизайн-токенов минимум --- основная палитра и типографика определяются конфигурацией Nuxt UI и переопределениями в CSS.

Цветовая палитра

Настроена в app/app.config.ts:

ts
ui: {
  colors: {
    primary: 'blue',   // Tailwind blue palette
    neutral: 'slate',  // Tailwind slate palette
  }
}
  • primary (blue) --- основной акцентный цвет: кнопки, ссылки, активные элементы, бейджи.
  • neutral (slate) --- фоны, бордеры, текст приглушённых элементов.
  • Семантические цвета (из Nuxt UI): success, warning, error, info --- используются в UBadge, UAlert, UButton.

Дополнительно в коде активно используются CSS-переменные Nuxt UI:

ПеременнаяНазначение
--ui-primaryАкцентный цвет
--ui-textОсновной текст
--ui-text-mutedПриглушённый текст
--ui-text-dimmedМаксимально приглушённый текст
--ui-text-highlightedВыделенный текст (цены)
--ui-bgОсновной фон
--ui-bg-elevatedПриподнятый фон (hover, карточки)
--ui-borderБордер

Типографика

Кастомных шрифтов не подключено --- используется системный стек Tailwind CSS.

Базовый размер шрифта --- стандартные 16px (без переопределений).

SCSS Design Tokens

Типографические токены определены в app/assets/styles/abstracts/_typography.scss и доступны глобально через Vite additionalData:

Размеры шрифтов:

ТокенЗначениеПрименение
$font-size-xs0.75rem (12px)Метки, подсказки, мета-информация
$font-size-sm0.875rem (14px)Основной текст интерфейса
$font-size-base1rem (16px)Базовый размер
$font-size-md1.125rem (18px)Подзаголовки
$font-size-lg1.25rem (20px)Цены в карточках
$font-size-xl1.5rem (24px)Заголовки секций
$font-size-2xl1.875rem (30px)Крупные заголовки
$font-size-3xl2.25rem (36px)Hero-заголовки

Fluid-заголовки (responsive, clamp):

ЭлементMobileDesktopWireframes
h12rem (32px)2.25rem (36px)32–36px
h21.5rem (24px)1.75rem (28px)24–28px
h31.125rem (18px)1.25rem (20px)18–20px

Fluid-размеры задаются через SCSS-функцию fluid-type(), которая генерирует CSS clamp() с автоматическим пересчётом между viewport 320px и 1280px.

Правило: во всех стилях используются только rem единицы и SCSS-функции (px-to-rem(), fluid-type()), никогда px.

SCSS-функции (abstracts)

ФункцияНазначение
px-to-rem($px)Конвертация px в rem (base 16px)
fluid-type($min, $max)CSS clamp() для responsive типографики
strip-unit($value)Убирает единицу измерения

Функции доступны глобально --- Vite инжектирует @use "~/assets/styles/abstracts" as *; в каждый SCSS-контекст.

Tailwind-утилиты (по-прежнему используются в templates)

КлассГде применяется
text-3xl font-boldЗаголовки страниц (h1)
text-2xl font-boldЗаголовки секций (h2)
text-xl font-boldЦены в карточках
text-smОсновной текст в интерфейсе, сообщения чата
text-xsМетки, подсказки, мета-информация, footer-ссылки

Отступы и spacing

SCSS-токены

Определены в app/assets/styles/abstracts/_spacing.scss на основе 8px-сетки:

ТокенЗначение
$spacer-10.25rem (4px)
$spacer-20.5rem (8px)
$spacer-30.75rem (12px)
$spacer-41rem (16px)
$spacer-61.5rem (24px)
$spacer-82rem (32px)
$spacer-123rem (48px)

Tailwind-утилиты

Стандартная система Tailwind CSS (кратные 0.25rem). Типичные значения:

ЗначениеПрименение
gap-1 (0.25rem)Между мелкими элементами (иконка + текст)
gap-2 (0.5rem)Между элементами формы в ряду
gap-3 (0.75rem)Между группами полей
gap-6 (1.5rem)Между секциями формы, sidebar + контент
p-3 / p-4Внутренние отступы карточек
py-3Вертикальные отступы хедера
mb-6Отступ под заголовком страницы

Скругления

КлассПрименение
rounded-lgКарточки, дропдауны, модалки
rounded-2xlПузыри сообщений в чате
rounded-fullАватарки, бейджи непрочитанных
rounded-mdМиниатюры в списке диалогов

Брейкпоинты

Стандартные Tailwind CSS:

ПрефиксШиринаИспользование
sm640pxГоризонтальный layout форм YMM-селектора
md768pxПереключение mobile/desktop навигации, показ sidebar
lg1024pxУвеличение padding контейнера

Тёмная тема

Поддерживается через colorMode в nuxt.config.ts:

ts
colorMode: {
  preference: 'system',
  fallback: 'light',
}

Переключение реализовано компонентом UColorModeButton в хедере. Dark-вариации задаются через Tailwind-префикс dark:.

Иконки

Используются два набора через UIcon, установлены локально (@iconify-json/*):

  • Lucide (i-lucide-*) --- основной набор (search, heart, settings, user, и т.д.)
  • Heroicons (i-heroicons-*) --- дополнительный (photo, users, book-open)

Локализация UI

Nuxt UI использует русскую локаль:

vue
<UApp :locale="ru">

Импортируется из @nuxt/ui/locale.