Files
sfera/visual-design-rules.md

567 lines
16 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ОБЩИЕ ПРАВИЛА ВИЗУАЛЬНОГО ДИЗАЙНА SFERA
> 📋 **Базовые принципы дизайна системы управления складами и поставками**
---
## 🎨 **1. ЦВЕТОВАЯ СИСТЕМА**
### 1.1 Основная палитра
**PRIMARY COLORS (OKLCH)**:
- **Primary**: `oklch(0.65 0.28 315)` - основной фиолетовый
- **Primary Foreground**: `oklch(0.985 0 0)` - белый текст
- **Secondary**: `oklch(0.94 0.08 315)` - светло-фиолетовый
- **Background**: `oklch(0.98 0.02 320)` - светлый фон
**GLASS SYSTEM**:
- **Base**: `bg-white/10 backdrop-blur border-white/20`
- **Cards**: `bg-white/5 backdrop-blur border-white/10`
- **Buttons**: `glass-button` / `glass-secondary`
### 1.2 Функциональные цвета
**STATUS COLORS**:
- 🟢 **Success**: `green-400/500` - завершенные операции
- 🔴 **Error**: `red-400/500` - ошибки и критичные состояния
- 🟡 **Warning**: `yellow-400/500` - предупреждения
- 🔵 **Info**: `blue-400/500` - информационные сообщения
- 🟣 **Processing**: `purple-400/500` - процессы в работе
**CABINET COLORS**:
- **Селлер**: `blue-400` - синий
- **Фулфилмент**: `purple-400` - фиолетовый
- **Поставщик**: `green-400` - зеленый
- **Логистика**: `orange-400` - оранжевый
### 1.3 Иерархическая цветовая схема
**УРОВНИ ДЕТАЛИЗАЦИИ (для фулфилмента)**:
- 🔵 **Уровень 1 (Магазины)**: уникальные цвета
- ТехноМир: `blue-400/500`
- Стиль и Комфорт: `pink-400/500`
- Зелёный Дом: `emerald-400/500`
- 🟢 **Уровень 2 (Товары)**: `green-500`
- 🟠 **Уровень 3 (Варианты)**: `orange-500`
---
## 🔤 **2. ТИПОГРАФИКА**
### 2.1 Шрифты
**FAMILY**:
- **Sans**: `var(--font-geist-sans)` - основной шрифт
- **Mono**: `var(--font-geist-mono)` - код и техническая информация
### 2.2 Размеры и веса
**HEADINGS**:
- **H1**: `text-3xl font-bold text-white` - заголовки страниц
- **H2**: `text-2xl font-semibold text-white` - секции
- **H3**: `text-xl font-semibold text-white` - подразделы
- **H4**: `text-lg font-medium text-white` - карточки
**BODY TEXT**:
- **Primary**: `text-white` - основной текст
- **Secondary**: `text-white/70` - вспомогательный
- **Muted**: `text-white/60` - дополнительный
- **Disabled**: `text-white/40` - отключенные элементы
**CODE & TECHNICAL**:
- **Code**: `font-mono text-xs text-white/60` - техническая информация
- **Badges**: `text-xs font-medium` - статусы и метки
---
## 🧩 **3. КОМПОНЕНТЫ**
### 3.1 Кнопки
**ВАРИАНТЫ**:
```css
default: bg-primary hover:bg-primary/90
glass: glass-button (основной стиль)
glass-secondary: glass-secondary hover:text-white/90
outline: border hover:bg-accent
ghost: hover:bg-accent/50
destructive: bg-destructive hover:bg-destructive/90
```
**РАЗМЕРЫ**:
- **sm**: `h-8 px-3` - компактные формы
- **default**: `h-9 px-4` - стандартные
- **lg**: `h-10 px-6` - акцентные действия
- **icon**: `size-9` - иконочные кнопки
**ГРАДИЕНТЫ**:
- **Accent**: `bg-gradient-to-r from-purple-600 to-pink-600`
- **Success**: `bg-gradient-to-r from-green-500 to-emerald-500`
- **Info**: `bg-gradient-to-r from-blue-500 to-cyan-500`
### 3.2 Карточки
**БАЗОВЫЕ СТИЛИ**:
```css
glass-card: bg-white/5 backdrop-blur border-white/10
hover: border-white/20 transition-all
interactive: cursor-pointer group
```
**ИНТЕРАКТИВНОСТЬ**:
- **Hover**: `hover:border-white/20 hover:bg-white/10`
- **Scale**: `hover:scale-105 transition-transform`
- **Shadow**: `hover:shadow-xl hover:shadow-purple-500/20`
### 3.3 Формы
**ИНПУТЫ**:
```css
glass-input: backdrop-blur border-white/20
placeholder: placeholder:text-white/50
focus: focus-visible:ring-ring/50
invalid: aria-invalid:border-destructive
```
**СОСТОЯНИЯ**:
- **Default**: `glass-input text-white`
- **Error**: `border-red-500/50 ring-red-500/20`
- **Success**: `border-green-500/50 ring-green-500/20`
- **Disabled**: `opacity-50 pointer-events-none`
---
## ✨ **4. АНИМАЦИИ И ПЕРЕХОДЫ**
### 4.1 Стандартные переходы
**DURATION**:
- **Fast**: `duration-200` - hover эффекты
- **Normal**: `duration-300` - стандартные переходы
- **Slow**: `duration-500` - сложные анимации
**EASING**:
- **Default**: `transition-all` - универсальный
- **Transform**: `transition-transform` - масштабирование
- **Colors**: `transition-colors` - смена цветов
### 4.2 Hover эффекты
**МАСШТАБИРОВАНИЕ**:
```css
hover:scale-105 - легкое увеличение
hover:scale-110 - заметное увеличение
hover:scale-95 - уменьшение при нажатии
hover:-translate-y-1 - поднятие
```
**ЦВЕТОВЫЕ ИЗМЕНЕНИЯ**:
```css
hover:bg-white/10 - осветление фона
hover:text-white - усиление текста
hover:border-white/40 - усиление границ
```
### 4.3 Системные анимации
**LOADING**:
- **Spin**: `animate-spin` - индикаторы загрузки
- **Pulse**: `animate-pulse` - уведомления
- **Bounce**: `animate-bounce` - привлечение внимания
- **Ping**: `animate-ping` - статусы онлайн
---
## 📐 **5. СЕТКИ И ОТСТУПЫ**
### 5.1 Spacing система
**ВНУТРЕННИЕ ОТСТУПЫ**:
- **xs**: `p-2` (8px) - плотные элементы
- **sm**: `p-3` (12px) - компактные карточки
- **md**: `p-4` (16px) - стандартные карточки
- **lg**: `p-6` (24px) - основные секции
- **xl**: `p-8` (32px) - страницы
**ВНЕШНИЕ ОТСТУПЫ**:
- **Между элементами**: `space-y-4` / `gap-4`
- **Между секциями**: `space-y-6` / `gap-6`
- **Между страницами**: `space-y-8`
### 5.2 Responsive сетки
**BREAKPOINTS**:
```css
sm: 640px - мобильные
md: 768px - планшеты
lg: 1024px - десктопы
xl: 1280px - широкие экраны
```
**GRID PATTERNS**:
```css
grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4
grid-cols-2 md:grid-cols-4 lg:grid-cols-6
flex flex-wrap gap-4
```
---
## 🎯 **6. СОСТОЯНИЯ И СТАТУСЫ**
### 6.1 Визуальные индикаторы
**SUCCESS STATES**:
```css
bg-green-500/10 border-green-500/30 text-green-300
CheckCircle - иконка успеха
```
**ERROR STATES**:
```css
bg-red-500/10 border-red-500/30 text-red-300
XCircle - иконка ошибки
```
**WARNING STATES**:
```css
bg-yellow-500/10 border-yellow-500/30 text-yellow-300
AlertTriangle - иконка предупреждения
```
**INFO STATES**:
```css
bg-blue-500/10 border-blue-500/30 text-blue-300
Info - иконка информации
```
### 6.2 Бейджи и метки
**СТАТУСЫ WORKFLOW**:
- **Pending**: `bg-yellow-500/20 text-yellow-300`
- **Approved**: `bg-green-500/20 text-green-300`
- **In Progress**: `bg-blue-500/20 text-blue-300`
- **Completed**: `bg-emerald-500/20 text-emerald-300`
- **Cancelled**: `bg-red-500/20 text-red-300`
---
## 📱 **7. АДАПТИВНОСТЬ**
### 7.1 Mobile-first подход
**ПРИНЦИПЫ**:
- Базовые стили для мобильных
- Прогрессивное улучшение для больших экранов
- Минимальная ширина 320px
- Максимальная производительность
### 7.2 Responsive компоненты
**SIDEBAR**:
```css
Мобильные: overlay sidebar
Планшеты: collapsible sidebar
Десктоп: full sidebar
```
**CARDS**:
```css
Мобильные: 1 колонка
Планшеты: 2 колонки
Десктоп: 3-4 колонки
```
**FORMS**:
```css
Мобильные: stack layout
Планшеты: 2-column layout
Десктоп: optimized layout
```
---
## ♿ **8. ДОСТУПНОСТЬ**
### 8.1 Контрастность
**МИНИМАЛЬНЫЕ ТРЕБОВАНИЯ**:
- Текст на фоне: 4.5:1
- Иконки и элементы: 3:1
- Интерактивные элементы: 4.5:1
**ПРОВЕРКА КОНТРАСТА**:
```css
text-white на bg-white/10
text-white/70 на bg-white/5
text-white/40 на bg-white/10
```
### 8.2 Фокус и навигация
**FOCUS STYLES**:
```css
focus-visible:ring-ring/50 focus-visible:ring-[3px]
focus-visible:border-ring
outline-none
```
**KEYBOARD NAVIGATION**:
- Tab order логичен
- Все интерактивные элементы доступны
- Escape закрывает модалы
- Enter активирует кнопки
---
## 🔧 **9. ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ**
### 9.1 CSS Architecture
**UTILITY-FIRST**:
- Tailwind CSS как основа
- Custom CSS только для уникальных компонентов
- CSS переменные для тем
**NAMING CONVENTIONS**:
```css
glass-card - основные карточки
glass-button - стеклянные кнопки
glass-input - поля ввода
glass-secondary - вторичные элементы
```
### 9.2 Performance
**ОПТИМИЗАЦИЯ**:
- Minimal CSS bundle
- Tree-shaking неиспользуемых стилей
- Critical CSS inline
- Progressive enhancement
**LAZY LOADING**:
- Изображения: `loading="lazy"`
- Компоненты: React.lazy()
- Анимации: только при необходимости
---
## 🎯 **10. ПРАВИЛА ИЕРАРХИИ ТАБОВ**
### 10.1 Принцип отдельного блока табов
**ОБЯЗАТЕЛЬНЫЕ ПРАВИЛА**:
> 1. ТАБЫ ВСЕГДА НАХОДЯТСЯ В ОТДЕЛЬНОМ БЛОКЕ, независимо от количества уровней иерархии
> 2. БЛОК ТАБОВ ИМЕЕТ СТИЛИ КАК У САЙДБАРА
> 3. ТАБЫ ОТДЕЛЕНЫ ОТ РАБОЧЕГО ПРОСТРАНСТВА
**СТИЛИ БЛОКА ТАБОВ**:
```css
bg-white/10 backdrop-blur-xl border border-white/20 rounded-2xl p-6
```
**СТИЛИ РАБОЧЕГО ПРОСТРАНСТВА**:
```css
bg-white/10 backdrop-blur-xl border border-white/20 rounded-2xl
```
**ЗАПРЕЩЕНО**:
- Размещать табы в блоке с другими модулями
- Смешивать табы с основным контентом
- Использовать glass-card вместо правильных стилей сайдбара
- Объединять блок табов с рабочим пространством
### 10.2 Визуальная иерархия
**УРОВЕНЬ 1 (Главные табы)**:
```css
h-11 /* Высота 44px */
bg-white/15 /* Контрастный фон */
border-white/30 /* Яркая граница */
rounded-xl /* Крупное скругление */
font-semibold /* Жирный шрифт */
purple-500/40 /* Интенсивный градиент */
shadow-lg /* Глубокая тень */
```
**УРОВЕНЬ 2 (Подтабы)**:
```css
h-9 /* Высота 36px */
bg-white/8 /* Средний фон */
border-white/20 /* Средняя граница */
rounded-lg /* Среднее скругление */
font-medium /* Средний шрифт */
white/15 /* Простая активация */
ml-4 /* Отступ показывает иерархию */
```
**УРОВЕНЬ 3 (Подподтабы)**:
```css
h-8 /* Высота 32px */
bg-white/5 /* Слабый фон */
border-white/15 /* Деликатная граница */
rounded-md /* Мелкое скругление */
font-normal /* Обычный шрифт */
white/10 /* Слабая активация */
ml-8 /* Больший отступ */
text-white/50 /* Приглушенный текст */
```
### 10.3 Отступы и spacing
**ИЕРАРХИЧЕСКИЕ ОТСТУПЫ**:
- **Уровень 1**: `ml-0` - прижат к краю
- **Уровень 2**: `ml-4` - показывает подчинение
- **Уровень 3**: `ml-8` - максимальная вложенность
**ВЕРТИКАЛЬНЫЕ ОТСТУПЫ**:
- Между уровнями: `space-y-3`
- После TabsList: `mb-3`
- В контенте: `space-y-0` (без лишних отступов)
### 10.4 Размеры элементов
**ПРОГРЕССИВНОЕ УМЕНЬШЕНИЕ**:
- **Высота табов**: 44px → 36px → 32px
- **Размер иконок**: 16px → 12px → 10px
- **Размер текста**: sm → xs → xs
- **Толщина шрифта**: semibold → medium → normal
### 10.5 Цветовая деградация
**КОНТРАСТНОСТЬ**:
- **Уровень 1**: Максимальная (white/15, border-white/30)
- **Уровень 2**: Средняя (white/8, border-white/20)
- **Уровень 3**: Минимальная (white/5, border-white/15)
**АКТИВАЦИЯ**:
- **Уровень 1**: Градиент + тень + border
- **Уровень 2**: Простой фон white/15
- **Уровень 3**: Слабый фон white/10
---
## 📋 **11. ЧЕКЛИСТ ПРИМЕНЕНИЯ**
### 10.1 Перед внедрением компонента
- [ ] Соответствует цветовой палитре системы
- [ ] Использует правильную типографику
- [ ] Имеет корректные состояния (hover, focus, disabled)
- [ ] Адаптивен для всех breakpoints
- [ ] Соответствует требованиям доступности
- [ ] Использует стандартные анимации
- [ ] Оптимизирован для производительности
### 10.2 При создании новых компонентов
- [ ] Базируется на существующих паттернах
- [ ] Совместим с UI Kit системы
- [ ] Документирован в Storybook/UI Kit демо
- [ ] Протестирован на различных устройствах
- [ ] Соответствует принципам дизайн-системы
---
## 🎨 **11. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ**
### 11.1 Базовая карточка
```tsx
<Card className="glass-card border-white/10 hover:border-white/20 transition-all">
<CardHeader>
<CardTitle className="text-white">Заголовок</CardTitle>
<CardDescription className="text-white/70">Описание</CardDescription>
</CardHeader>
<CardContent>
<p className="text-white/80">Содержимое карточки</p>
</CardContent>
</Card>
```
### 11.2 Интерактивная кнопка
```tsx
<Button
variant="glass"
className="hover:scale-105 transition-transform"
onClick={handleClick}
>
<Icon className="h-4 w-4 mr-2" />
Действие
</Button>
```
### 11.3 Форма с валидацией
```tsx
<div className="space-y-2">
<Label className="text-white/90">Поле ввода</Label>
<Input
className="glass-input text-white placeholder:text-white/50"
placeholder="Введите значение..."
/>
{error && <p className="text-red-300 text-xs">{error}</p>}
</div>
```
---
**📊 СТАТУС**: Действующие правила v1.0
**🔄 ОБНОВЛЕНО**: На основе анализа UI Kit системы
**📅 ДАТА**: Основано на текущем состоянии проекта