- **«Обоснованно» (в контексте этого стандарта)** — по каждому «выбору» (например: `Hug/Fill/Fixed`, wrap/truncate для текста, `Fill/Fit`, `Stretch/Center`) должно быть понятно: **что именно выбрано**, **зачем** и **как это ведёт себя** на min/max диапазона и при длинном контенте. Если выбор может трактоваться по-разному — добавьте аннотацию/комментарий на странице `Responsive / Breakpoints`.
- **Prototype** — интерактивные сценарии и пользовательские флоу
- **Archive / Old** — устаревшие версии (только для истории)
> Примечание: `Responsive / Breakpoints` и `Prototype` **не дублируют** финальные экраны один-в-один. Их задача — объяснить поведение, которое не очевидно из статичных макетов.
### 1.3. Правила нейминга (минимальный стандарт)
- Страницы: `Design / UI`, `Components` и т.д. — одинаково во всех проектах.
- стили (цвета/типографика) с семантическими именами;
- пояснения по адаптивности и «порогам» изменений.
---
## 2. Брейкпоинты и адаптивность
### 2.1. Якорные брейкпоинты (база)
| Версия | Базовая ширина | Диапазон |
|---------|----------------|---------------|
| Mobile | 375 px | 320 – 768 px |
| Tablet | 768 px | 768 – 1024 px |
| Laptop | 1024 px | 1024 – 1440 px|
| Desktop | 1440 px | 1440 – 1920 px|
Требования:
- Каждый брейкпоинт — отдельный **Frame** (Screen Frame).
- Диапазоны рассматриваются как **интервалы ресайза**: макет должен работать от min до max.
-Все брейкпоинты должны быть **логически и визуально связаны**: типографика, сетка, шаги отступов и компоненты должны «эволюционировать», а не пересобираться хаотично.
> Примечание про границы: пересечение на значении 768/1024/1440 трактуется как «порог» — допустимы оба варианта, но в проекте должно быть принято единое правило (например: `Mobile < 768`, `Tablet ≥ 768`).
### 2.2. Когда допустимо менять список брейкпоинтов
Базовый набор можно корректировать **только** при объективной необходимости:
- меняется **навигационный паттерн** (например, горизонтальное меню → бургер);
- в ключевых местах задаются **min/max** (если без этого появляются «переломы» компоновки).
#### 2.5.2. Resizing: Hug / Fill / Fixed
Правила выбора:
- **Контейнеры** (строки, колонки, секции) чаще всего: `Fill container` по ширине.
- **Элементы по контенту** (лейблы, чипсы, иконки): `Hug contents`.
- **Фиксированные размеры** — только для:
- иконок (например, 16/20/24);
- интерактивных областей, где фикс диктуется UX (например, высота кнопки);
- медиа с заданным форм-фактором (но с контролем кропа).
Типичная ошибка: «всё Fixed». Это убивает адаптивность.
#### 2.5.3. Constraints
Constraints применяются там, где Auto Layout не покрывает сценарий (например, декоративные элементы, фоновые иллюстрации, абсолютные позиционирования).
Минимальные правила:
- элемент, который должен «прилипать» к краю контейнера, получает соответствующие привязки (`Left/Right/Top/Bottom`);
- элементы, которые должны масштабироваться пропорционально, используют `Scale` только если это оправдано (иначе деформируется типографика и иконки);
- избегайте смешения: Auto Layout внутри контейнера + хаотичные constraints у детей.
### 2.6. Примеры адаптивного поведения (как описывать)
В странице `Responsive / Breakpoints` для каждой сложной зоны должны быть описаны правила в формате:
- **Что фиксировано** (например, высота хедера 64px)
- **Что скрывается/появляется** (например, вторичный CTA скрывается на mobile)
Пример описания (текстом):
- «Сетка карточек: на Mobile — 1 колонка, на Tablet — 2 колонки, на Laptop/ Desktop — 3 колонки. Карточка имеет min-width 280px, при нехватке места переносится на новую строку (wrap).»
- **Button**: фиксированная высота (например, 40/44/48 по дизайн-системе), ширина `Hug` или `Fill` по контексту, текст не должен вылезать (правила: перенос/обрезка задаются обоснованно).
- локальные «ручные» правки размеров/интервалов поверх стиля недопустимы (кроме редких исключений, зафиксированных правилом);
- разрешены только бесплатные шрифты; предпочтительно использовать **Google Fonts**;
- значения типографики (минимум `font-size` и `line-height`, при необходимости `letter-spacing`) — источник правды в **Variables**;
- адаптация типографики между брейкпоинтами делается через **Modes** в Variables, а не через дублирование текстовых стилей «под каждый брейкпоинт».
### 5.2. Адаптация типографики между брейкпоинтами через Modes
Если типографика меняется между брейкпоинтами, это изменение фиксируется **через Modes** в коллекции Variables.
Обязательная структура:
- есть коллекция Variables для типографики (например: `Typography`);
- в коллекции заведены Modes под брейкпоинты (например: `Mobile`, `Tablet`, `Laptop`, `Desktop` — в точности как принято в проекте);
- для каждого семантического стиля (`H1/H2/Body/...`) определены переменные минимум для:
-`font-size`;
-`line-height`;
- опционально: `letter-spacing` (редко и только обоснованно).
Обязательное правило применения:
- Text Styles используют эти переменные как значения типографики;
-у каждого фрейма экрана выставлен корректный Mode (Mobile/Tablet/Laptop/Desktop), чтобы типографика внутри фрейма соответствовала брейкпоинту;
- любые отличия от токенов (если они вообще допускаются) должны быть подписаны: **что изменено**, **зачем** и **как это ведёт себя** на min/max диапазона и при длинном контенте.