69 lines
2.6 KiB
Markdown
69 lines
2.6 KiB
Markdown
# 03. Тема и дизайн-система
|
||
|
||
## Назначение
|
||
Тема задает визуальные токены бренда tenant: цвета, типографику, радиусы, тени и базовые параметры визуальной консистентности.
|
||
|
||
## Поведение системы
|
||
- Theme токены загружаются из bootstrap.json.
|
||
- Frontend применяет токены через CSS-переменные.
|
||
- Компоненты и виджеты используют только токены, а не hardcoded brand-значения.
|
||
|
||
## Обязательные свойства JSON
|
||
- theme.themeId
|
||
- theme.palette.primary
|
||
- theme.palette.textPrimary
|
||
- theme.palette.backgroundPrimary
|
||
- theme.typography.primaryFontFamily
|
||
- theme.typography.baseFontSize
|
||
|
||
## Опциональные свойства JSON
|
||
- theme.palette.secondary
|
||
- theme.palette.accent
|
||
- theme.borderRadiusScale
|
||
- theme.shadows
|
||
- theme.iconSet
|
||
- theme.mode
|
||
|
||
## Строгие правила
|
||
- Нельзя хардкодить tenant-цвета в компонентах.
|
||
- Нельзя задавать типографику вне theme токенов для брендовых элементов.
|
||
- Нельзя смешивать несколько themeId одновременно для одной витрины.
|
||
- При отсутствии опционального токена используется системный fallback.
|
||
|
||
## Пример theme JSON
|
||
```json
|
||
{
|
||
"theme": {
|
||
"themeId": "novo-light",
|
||
"mode": "light",
|
||
"palette": {
|
||
"primary": "#2F6E5D",
|
||
"secondary": "#8FA9A2",
|
||
"accent": "#B9D9CF",
|
||
"textPrimary": "#1F322D",
|
||
"backgroundPrimary": "#FFFFFF"
|
||
},
|
||
"typography": {
|
||
"primaryFontFamily": "DM Sans, sans-serif",
|
||
"headingFontFamily": "DM Sans, sans-serif",
|
||
"baseFontSize": 16
|
||
},
|
||
"borderRadiusScale": {
|
||
"sm": "8px",
|
||
"md": "12px",
|
||
"lg": "16px"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## Ответственность Frontend
|
||
- Маппить токены в CSS custom properties.
|
||
- Применять fallback токены для опциональных полей.
|
||
- Обеспечивать визуальную консистентность между страницами и виджетами.
|
||
|
||
## Ответственность Backend
|
||
- Выдавать валидный theme объект для каждого tenant.
|
||
- Контролировать полноту обязательных токенов.
|
||
- Поддерживать совместимость theme-контракта между версиями.
|