Files
morpheus/docs/ru/design-system.md
Maxim Kalistratov a5744ea60d Initial commit
2026-02-12 21:23:44 +04:00

268 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
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.
# Morpheus — Дизайн-система
## Философия дизайна
### «Ощущается живым, никогда — тяжёлым.»
Morpheus должен ощущаться как самое быстрое приложение на телефоне. Вдохновлено скоростью Telegram,
визуальной отполированностью нативных приложений iOS и характером Discord — но с собственной
идентичностью. Не корпоративный. Не андеграунд. Живой.
## Визуальная идентичность
### Название и символ
- **Morpheus** — пробуждающий, тот кто предлагает выбор
- Символ: абстрактный глаз или форма пилюли — узнаваемость без объяснений
- Символ должен работать в размере 16x16 фавикон и на билборде
### Цветовая система
#### Основная палитра
```plaintext
Morpheus Violet #7C3AED — Основной цвет бренда, CTA, активные состояния
Electric Indigo #4F46E5 — Вторичный, ссылки, интерактивные элементы
```
#### Нейтральная палитра
```plaintext
Void #09090B — Самый тёмный фон (тёмная тема)
Charcoal #18181B — Фон карточек (тёмная тема)
Slate #27272A — Границы, разделители (тёмная тема)
Mist #A1A1AA — Вторичный текст
Cloud #F4F4F5 — Фон карточек (светлая тема)
Snow #FAFAFA — Самый светлый фон (светлая тема)
Pure #FFFFFF — Текст на тёмном, карточки на светлом
```
#### Акцентная палитра (семантическая)
```plaintext
Pulse Green #10B981 — Успех, онлайн, отправлено
Flame Orange #F59E0B — Предупреждение, ожидание
Signal Red #EF4444 — Ошибка, деструктивные действия
Ice Blue #06B6D4 — Информация, ссылки в контексте
```
#### Градиент
```plaintext
Градиент Morpheus: #7C3AED → #4F46E5 → #06B6D4
Применение: экраны онбординга, премиум-бейджи, только «героические» моменты
Никогда на тексте body. Никогда на фонах с текстом поверх.
```
### Тёмная тема — по умолчанию
- Тёмная тема по умолчанию. Светлая полностью поддерживается, но вторична.
- Обоснование: целевая аудитория предпочитает тёмную. Тёмная тема экономит батарею OLED.
- Тёмные фоны используют шкалу Void/Charcoal, никогда чистый #000000 для карточек.
## Типографика
### Набор шрифтов
```plaintext
Основной: Inter (текст интерфейса, body)
Моноширинный: JetBrains Mono (ключи, коды, техническая информация)
Дисплейный: Manrope или Unbounded (заголовки, маркетинг, hero-текст)
```
### Шкала типографики
```plaintext
Display XL: 36px / 40px межстрочный — Только hero-текст
Display: 30px / 36px — Заголовки страниц
Heading 1: 24px / 32px — Заголовки секций
Heading 2: 20px / 28px — Заголовки карточек
Body: 16px / 24px — Стандартный читаемый текст
Body Small: 14px / 20px — Вторичная информация, время
Caption: 12px / 16px — Лейблы, бейджи, метаданные
```
### Использование жирности
```text
Regular (400): Текст body, описания
Medium (500): Лейблы UI, навигация, кнопки
Semibold (600): Заголовки, акценты
Bold (700): Дисплейный текст, только hero-моменты
```
## Отступы и сетка
### Шкала отступов (база 4px)
```text
xs: 4px — Внутренние отступы inline, зазоры иконок
sm: 8px — Тесная группировка
md: 12px — Стандартный внутренний отступ
lg: 16px — Отступ карточек, зазоры секций
xl: 24px — Между секциями
2xl: 32px — Отступы на уровне страницы
3xl: 48px — Крупные разрывы секций
```
### Радиусы скругления
```text
sm: 6px — Кнопки, инпуты, мелкие карточки
md: 10px — Карточки, диалоги
lg: 16px — Крупные карточки, модалы
xl: 24px — Аватары (скруглённый квадрат), карточки фич
full: 9999px — Пиллы, теги, круглые аватары
```
### Сетка
- Mobile-first. Одна колонка по умолчанию.
- Максимальная ширина контента: 640px для лент (читаемость).
- Десктоп: центрированная колонка контента с контекстными сайдбарами.
- Никакого бесконечного горизонтального скролла. Вертикальный — нативный.
## Компоненты
### Кнопки
```text
Primary: Morpheus Violet фон, белый текст, радиус 6px, medium вес
Hover: слегка светлее. Active: слегка темнее.
Secondary: Прозрачный фон, фиолетовый текст, граница 1px фиолетовая
Hover: заливка violet/10
Ghost: Прозрачный фон, mist текст, без границы
Hover: заливка slate
Destructive: Signal Red фон, белый текст (требуется подтверждение)
Размер: По умолчанию 40px высота, компактный 32px, большой 48px
Минимальная зона касания: всегда 44x44px
```
### Карточки
```text
Тёмная тема: Charcoal фон, граница 1px Slate, радиус md
Светлая тема: Pure фон, граница 1px Cloud, радиус md
Возвышение: Тень только при hover (никогда в покое)
Отступ: lg (16px)
```
### Поля ввода
```text
Высота: 44px (удобно для касания)
Граница: 1px Slate, фокус → 2px Morpheus Violet
Фон: Void (тёмная) / Snow (светлая)
Placeholder: цвет Mist
Ошибка: граница Signal Red + текст подсказки ниже
```
### Аватары
```text
Размеры: 24px (inline), 32px (список), 40px (по умолчанию), 64px (профиль), 96px (hero)
Форма: Скруглённый квадрат (радиус xl) — отличает от других платформ
Фолбэк: Генерируемый градиент из хеша публичного ключа (каждый пользователь уникален)
Точка онлайн: Pulse Green, справа внизу, 25% от размера аватара
```
### Навигация
```text
Мобильная: Нижняя панель вкладок, максимум 5 элементов. Хаптик при касании.
Активная вкладка: иконка Morpheus Violet + лейбл
Неактивная: иконка Mist, без лейбла
Десктоп: Левый сайдбар, сворачиваемый. Иконки + лейблы.
Переходы: Горизонтальный слайд между вкладками, вертикальный внутри лент
```
## Анимация и движение
### Принципы
- **Целенаправленная**: каждая анимация что-то сообщает (смена состояния, пространственная связь)
- **Быстрая**: стандартная длительность 150-200мс. Никогда не превышать 300мс для переходов UI.
- **Прерываемая**: ввод пользователя немедленно отменяет любую текущую анимацию
- **Никакой декоративной анимации**: без плавающих частиц, пульсирующих логотипов, фоновых эффектов
### Стандартные кривые
```text
ease-out: cubic-bezier(0.0, 0.0, 0.2, 1) — Элементы входят
ease-in: cubic-bezier(0.4, 0.0, 1, 1) — Элементы выходят
ease-in-out: cubic-bezier(0.4, 0.0, 0.2, 1) — Элементы трансформируются
spring: spring(1, 80, 10) — Игривые взаимодействия (реакции, лайки)
```
### Ключевые анимации
```text
Переход страницы: Горизонтальный слайд, 200мс ease-out
Модал: Scale от 0.95 + fade, 150мс ease-out
Тост/снэкбар: Слайд снизу вверх, 200мс ease-out, автоисчезновение 3с
Pull to refresh: Нативное ощущение, кастомный индикатор с символом Morpheus
Отправка сообщения: Слайд вверх + лёгкий scale, spring easing
Реакция: Pop + взрыв частиц, spring easing (один из немногих «весёлых» моментов)
Скелетон загрузки: Шиммер-градиент, цикл 1.5с (только при реальной загрузке)
```
## Иконографика
### Стиль
- Outlined стиль (не filled) для навигации и UI — обводка 1.5px
- Filled стиль для активных/выбранных состояний
- Базовый размер 24x24, оптически скорректирован для каждой иконки
- Единообразные метафоры: не смешивать material/feather/custom в одном виде
### Нужны кастомные иконки
- Индикатор статуса реле
- Иконка ключа/идентичности (не буквальный ключ — слишком крипто-бро)
- Индикатор шифрования (тонкий, не замок — нормализация, не тревога)
- Morpheus-специфичные действия (напр. «zap» для чаевых при использовании Lightning)
## Тон голоса (UI-тексты)
### Принципы тона
- **Разговорный, но не детский** — «Привет», не «Приветствуем вас, уважаемый пользователь»
- **Прямой** — «Отправить», не «Подтвердить отправку сообщения»
- **Уверенный** — «Ваши сообщения зашифрованы», не «Мы стараемся защитить...»
- **Двуязычный** — UI должен работать на русском и английском с первого дня
- **Без корпоративного языка** — «Что-то пошло не так», не «Произошла непредвиденная ошибка»
### Примеры
```text
Пустое состояние: «Тут пока никого. Будь первым.» (не «Контент отсутствует»)
Ошибка: «Не удалось подключиться. Нажми, чтобы повторить.» (не «Ошибка сети 503»)
Онбординг: «Этот ключ — это ты. Сохрани его в надёжном месте.» (не «Создайте резервную копию ключевой пары»)
Деструктивное: «Удалить навсегда?» (не «Вы уверены, что хотите удалить?»)
```
## Доступность
- Минимальный коэффициент контрастности: 4.5:1 для текста body, 3:1 для крупного текста
- Все интерактивные элементы: минимальная зона касания 44x44px
- Метки screen reader для всех иконок и нетекстовых элементов
- Поддержка Reduce Motion: отключение всей необязательной анимации
- Масштабирование шрифта: поддержка системных настроек размера шрифта (до 200%)
- Информация не передаётся только цветом (всегда дублировать иконкой или текстом)
## Целевые платформы
### Приоритет
1. **Мобильные (iOS + Android)** — React Native или Flutter, нативное ощущение обязательно
2. **Веб (PWA)** — Полный паритет функций, устанавливаемый
3. **Десктоп** — Electron или Tauri обёртка веба, или нативный при наличии ресурсов
### Адаптация к платформам
- Следовать соглашениям платформы для паттернов навигации (iOS свайп назад, Android кнопка назад)
- Нативные share sheets, уведомления, хаптик
- Уважать системную тёмную/светлую тему по умолчанию, разрешить ручное переключение
- Адаптивные лейауты: телефон → планшет → десктоп, не просто масштабированные