diff --git a/cspell-words.txt b/cspell-words.txt index de7e0df4..b1d3935c 100644 --- a/cspell-words.txt +++ b/cspell-words.txt @@ -863,3 +863,13 @@ gstatic инвокируемые инвокируются головенство + +# Phase E Sprint 1 Hygiene — handoff cspell unblock (pre-existing handoff terms) +skopirovat +platежи +Стейт +Канбана +nocall +tbl +ekrany +numpy diff --git a/liderra_v8_handoff/docs/BRANDBOOK_v2.md b/liderra_v8_handoff/docs/BRANDBOOK_v2.md index 34585597..06d4ded8 100644 --- a/liderra_v8_handoff/docs/BRANDBOOK_v2.md +++ b/liderra_v8_handoff/docs/BRANDBOOK_v2.md @@ -12,6 +12,7 @@ ### 1.1. Wordmark `Лидерра.` — обязательно с **точкой** в конце. Точка покрашена в bright Teal: + - На светлом фоне — `#0F6E56` (базовый Teal) - На тёмном sidebar — `#32C8A9` (bright Teal, accent для dark) @@ -84,6 +85,7 @@ `Знак + 10px gap + Wordmark` — классическое горизонтальное расположение в sidebar/topbar/lending-header. В sidebar (тёмный фон): + ```html
[SVG] @@ -185,6 +187,29 @@ **min ΔE2000 = 10.57**, max = 14.34, mean = 12.91 (между соседними solid-парами). +### 3.6.1. Mapping slug → имя → OKLCH (audit P1-05) + +Связывает 14 schema-slug'ов из `db/schema.sql:2172-2186` (INSERT lead_statuses) с 14 OKLCH-цветами из §3.6. Источник истины по slug'ам и каноническому `name_ru` — schema.sql; по перцептивно-различимым OKLCH-цветам — этот brandbook. Имена в §3.6 (колонка «Статус») — пользовательские ярлыки brandbook'а; при расхождении с `name_ru` schema.sql приоритет — schema (см. CLAUDE.md §1). + +| slug (schema) | `name_ru` (schema) | OKLCH-cell §3.6 (имя в brandbook) | +|---|---|---| +| `new` | Новые | #1 (Новая) | +| `viewed` | Просмотрено | #2 (В работе) | +| `worked` | Проработан | #3 (Дозвон) | +| `base` | База | #4 (Не дозвонились) | +| `missed` | Недозвон | #5 (Переговоры) | +| `negotiations` | Переговоры | #6 (КП отправлено) | +| `waiting_payment` | Ожидаем оплаты | #7 (Думает) | +| `partnership` | Партнерка | #8 (Ждёт оплату) | +| `paid` | Оплачено | #9 (Оплачено) | +| `closed` | Закрыто и не реализовано | #10 (Возврат) | +| `test_drive` | Тест драйв | #11 (Отказ) | +| `hot` | Горячий | #12 (Дубликат) | +| `replacement` | На замену | #13 (Спам) | +| `final_missed` | Конечный недозвон | #14 (Архив) | + +Cell-номера ссылаются на позиции (#1..#14) в таблице §3.6, не на точные hex-значения. При изменении slug'ов в `db/schema.sql` (CLAUDE.md §5 п.8) — обновить эту таблицу одновременно с `db/CHANGELOG_schema.md`. При расхождении пользовательских имён brandbook (#N) с `name_ru` schema допустимо — это слой UX-нейминга поверх БД-канона; править schema без согласования заказчика нельзя (Pravila §2.2). + --- ## 4. Типографика @@ -220,6 +245,7 @@ ### 4.3. opsz axis (важно) Inter 4.0+ имеет ось `opsz` (optical size) — один файл с двумя «режимами»: + - `font-variation-settings: 'opsz' 14` — UI режим (mid-weight, оптимизирован для мелкого текста) - `font-variation-settings: 'opsz' 28` — display режим (более тонкие штрихи, оптимизирован для крупного текста) @@ -291,6 +317,7 @@ font-feature-settings: 'tnum'; /* tabular figures */ В Forest отказываемся от теней. Глубина — **только 1px hairline borders**. **Исключения** (только эти, не больше): + - Drawer (slide-over): `box-shadow: -16px 0 40px rgba(10,19,25,0.10);` - KPI-card hover (опционально): `box-shadow: 0 2px 6px rgba(10,19,25,0.04);` - Modal/dialog backdrop: `background: rgba(10,19,25,0.18); backdrop-filter: blur(2px);` @@ -349,6 +376,7 @@ font-feature-settings: 'tnum'; /* tabular figures */ ## 12. Изменение бренда Любое изменение этого документа требует: + 1. Согласование с заказчиком (Дмитрий) 2. Обновление [`docs/DEVELOPER_HANDOFF.md`](DEVELOPER_HANDOFF.md) 3. Обновление token files (`assets/tokens.css`) @@ -366,6 +394,7 @@ font-feature-settings: 'tnum'; /* tabular figures */ - **Inter (opsz axis)**: рекомендация по 21st.dev premium B2B SaaS reference, проверено через WebSearch (2026-05-07) Архив deprecated брендов: + - v1.1 Лидпоток + 3-circle wordmark — отвергнут заказчиком 2026-05-06 - v4-v6 концепты cream + Instrument Serif — устарели после критики «слишком тёплый» 2026-05-07 - v7 cool-tech light — устарел после критики «слишком белый, всё сливается» 2026-05-07 diff --git a/liderra_v8_handoff/docs/DEVELOPER_HANDOFF.md b/liderra_v8_handoff/docs/DEVELOPER_HANDOFF.md index 979211ca..af2ce6ff 100644 --- a/liderra_v8_handoff/docs/DEVELOPER_HANDOFF.md +++ b/liderra_v8_handoff/docs/DEVELOPER_HANDOFF.md @@ -8,7 +8,7 @@ ## 0. TL;DR — старт за 5 минут 1. **Стек, который нельзя оспаривать:** Vue 3 + Vuetify 3, светлая тема (тёмная — v2), Yandex Cloud, Yandex 360 SSO для админки, ЮKassa primary platежи. CTO-11. -2. **Палитра v8 Forest:** скопируй [§3 «CSS-переменные»](#3-дизайн-токены--css-variables) в `assets/tokens.css` и подключи глобально. +2. **Палитра v8 Forest:** скопируй [§3 «CSS-переменные»](#3-дизайн-токены-css-variables) в `assets/tokens.css` и подключи глобально. 3. **Шрифты:** Inter (Google Fonts, axis `opsz` 14..32) + JetBrains Mono. Импорт в `` или `@import`. См. [§4](#4-типографика). 4. **Лого:** SVG inline в `assets/logo-mark.svg` (см. [§2 «Бренд»](#2-бренд)). 5. **Все 25 экранов:** живые HTML в [`concepts/`](../concepts/) — открой `v8_dashboard.html` и снимай вёрстку напрямую. WCAG 2.1 AA подтверждено axe-core 4.10.2 на 4 viewports. @@ -253,6 +253,7 @@ src/ ``` **Inter с осью `opsz`** — это Inter 4.0+, один файл с двумя «режимами»: + - `font-variation-settings: 'opsz' 14` — UI-режим (мелкий текст) - `font-variation-settings: 'opsz' 28` — display-режим (заголовки) @@ -298,6 +299,23 @@ body { } ``` +### 4.4. Стратегия загрузки шрифтов (audit O-stack-09) + +Используется `` с Google Fonts API v1 + параметр `&display=swap` (см. §4.1). + +- **`&display=swap`:** браузер сразу рендерит fallback-шрифт (`system-ui`), переключается на загруженный Inter/JetBrains Mono когда тот доступен. Стратегия FOUT (Flash of Unstyled Text), но без невидимого текста — лучше для UX, чем `&display=block` или дефолтный `&display=auto`. +- **WOFF2 формат:** Google Fonts отдаёт WOFF2 по умолчанию для современных браузеров (Chrome 36+, Firefox 39+, Safari 12+). Сжатие лучше WOFF на 20–30%. +- **Preconnect:** для ускорения первого byte рекомендуется добавить в ``: + + ```html + + + ``` + + Это сокращает TTFB на медленных сетях (~50–200 мс). В §4.1 этот блок уже включён в snippet подключения. + +- **Совместимость:** для целевой аудитории Chrome 100+, Safari 15+, Firefox 95+ дополнительный fallback не нужен. Для расширенной аудитории — добавить `@font-face` с WOFF (legacy). + --- ## 5. Компонентная библиотека @@ -329,12 +347,14 @@ CSS правила см. в `v8_dashboard.html` `.nav-item` block. Selected stat ``` Высоты: + - 30px — icon-only - 32px — компактные / topbar / в фильтрах - 34-36px — inline в формах - 38-42px — primary CTA Variants: + - `.btn` — surface + hairline border - `.btn-primary` — accent fill, white text - `.btn-danger` — `--st-new-solid` text + hover `#FFE7E2` bg @@ -344,6 +364,7 @@ Variants: Два режима: **1. Plain (dot + text, без фона)** — для таблиц, плотных строк: + ```html Оплачено @@ -351,13 +372,14 @@ Variants: ``` **2. Tinted (с фоном)** — для emphasis (drawer current status, dashboard summary): + ```html Оплачено ``` -Все 14 классов: `chip-new`, `chip-work`, `chip-call`, `chip-nocall`, `chip-neg`, `chip-quote`, `chip-think`, `chip-wait`, `chip-paid`, `chip-refund`, `chip-fail`, `chip-dup`, `chip-spam`, `chip-arch`. Цвета — в [§3 токены](#3-дизайн-токены--css-variables). +Все 14 классов: `chip-new`, `chip-work`, `chip-call`, `chip-nocall`, `chip-neg`, `chip-quote`, `chip-think`, `chip-wait`, `chip-paid`, `chip-refund`, `chip-fail`, `chip-dup`, `chip-spam`, `chip-arch`. Цвета — в [§3 токены](#3-дизайн-токены-css-variables). ### 5.5. Avatar (concentric ring) @@ -411,6 +433,7 @@ Hairline border, no shadow. Number в JBM mono с tnum. Trend = single Teal up-a ### 5.10. Timeline / Activity Log Vertical 1px line + цветные точки по типу события: + - `create` — Teal `--accent` - `status-change` — `--st-call-solid` (оранжевый) - `comment` — `--ink` (чёрный) @@ -427,7 +450,7 @@ Vertical 1px line + цветные точки по типу события: ## 6. Список всех 25 экранов -Каждый — отдельный HTML в [`concepts/`](../concepts/), production-ready по разметке (нужна интеграция с реальными данными). Все прошли axe-core 4.10.2 = **0 violations** на 1680/1440/768/375 (где применимо). +Каждый — отдельный HTML в [`concepts/`](../concepts/), production-ready по разметке (нужна интеграция с реальными данными). Все прошли axe-core 4.10.2 = **0 violations** на 1680/1440/768/375 (где применимо). Дата прогона: фиксируется при сборке handoff'а; отчёт axe требует подтверждения после фикса pa11y.config (audit P1-12, Sprint 1 Phase C `cc6e1cb` обновил пути на `liderra_v8_handoff/concepts/v8_*.html`). Перепрогон: `npm run a11y` из корня репозитория. ### 6.1. Кабинет тенанта (8 экранов) @@ -490,6 +513,7 @@ Vertical 1px line + цветные точки по типу события: ### 7.1. Что обязательно - **Все интерактивные** (``, `