dsh-desktop-kit 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +87 -2
- package/client.js +3349 -0
- package/cordis.patch.yml +5 -0
- package/index.js +80 -0
- package/package.json +60 -4
- package/plugins/dsh-gkb-ru-ui/cordis.patch.yml +6 -0
- package/plugins/dsh-gkb-ru-ui/lib/client.js +1083 -0
- package/plugins/dsh-gkb-ru-ui/lib/index.js +142 -0
- package/plugins/dsh-gkb-ru-ui/lib/skills.js +376 -0
- package/plugins/dsh-gkb-ru-ui/package.json +28 -0
- package/plugins/dsh-peak-guard/README.md +70 -0
- package/plugins/dsh-peak-guard/client.js +741 -0
- package/plugins/dsh-peak-guard/cordis.patch.yml +5 -0
- package/plugins/dsh-peak-guard/icon.svg +12 -0
- package/plugins/dsh-peak-guard/index.js +2 -0
- package/plugins/dsh-peak-guard/locale/en.json +6 -0
- package/plugins/dsh-peak-guard/locale/ru.json +6 -0
- package/plugins/dsh-peak-guard/locale/zh.json +6 -0
- package/plugins/dsh-peak-guard/package.json +33 -0
- package/plugins/dsh-profile-transfer/README.md +62 -0
- package/plugins/dsh-profile-transfer/bootstrap/01-INSTALL.cmd +7 -0
- package/plugins/dsh-profile-transfer/bootstrap/README-ARCHIVE.md +54 -0
- package/plugins/dsh-profile-transfer/bootstrap/README-/320/243/320/241/320/242/320/220/320/235/320/236/320/222/320/232/320/220.md +42 -0
- package/plugins/dsh-profile-transfer/bootstrap/install-on-clean-machine.ps1 +119 -0
- package/plugins/dsh-profile-transfer/bootstrap//320/243/320/241/320/242/320/220/320/235/320/236/320/222/320/230/320/242/320/254.cmd +5 -0
- package/plugins/dsh-profile-transfer/client.js +806 -0
- package/plugins/dsh-profile-transfer/cordis.patch.yml +3 -0
- package/plugins/dsh-profile-transfer/icon.svg +13 -0
- package/plugins/dsh-profile-transfer/index.js +375 -0
- package/plugins/dsh-profile-transfer/locale/en.json +6 -0
- package/plugins/dsh-profile-transfer/locale/ru.json +6 -0
- package/plugins/dsh-profile-transfer/locale/zh.json +6 -0
- package/plugins/dsh-profile-transfer/package.json +36 -0
- package/plugins/dsh-profile-transfer/transfer.js +1004 -0
- package/plugins/dsh-project-memory/README.md +71 -0
- package/plugins/dsh-project-memory/cordis.patch.yml +4 -0
- package/plugins/dsh-project-memory/icon.svg +12 -0
- package/plugins/dsh-project-memory/index.js +1240 -0
- package/plugins/dsh-project-memory/locale/en.json +6 -0
- package/plugins/dsh-project-memory/locale/ru.json +6 -0
- package/plugins/dsh-project-memory/locale/zh.json +6 -0
- package/plugins/dsh-project-memory/package.json +26 -0
- package/plugins/dsh-session-move/README.md +67 -0
- package/plugins/dsh-session-move/client.js +719 -0
- package/plugins/dsh-session-move/cordis.patch.yml +5 -0
- package/plugins/dsh-session-move/icon.svg +14 -0
- package/plugins/dsh-session-move/index.js +497 -0
- package/plugins/dsh-session-move/locale/en.json +6 -0
- package/plugins/dsh-session-move/locale/ru.json +6 -0
- package/plugins/dsh-session-move/locale/zh.json +6 -0
- package/plugins/dsh-session-move/package.json +31 -0
- package/skills/code-review-checklist/SKILL.md +37 -0
- package/skills/content-writing/README.md +87 -0
- package/skills/content-writing/SKILL.md +348 -0
- package/skills/content-writing/assets/checklists/fact-check.md +53 -0
- package/skills/content-writing/assets/checklists/publish.md +65 -0
- package/skills/content-writing/assets/checklists/social.md +40 -0
- package/skills/content-writing/assets/templates/article.md +47 -0
- package/skills/content-writing/assets/templates/brief.md +44 -0
- package/skills/content-writing/assets/templates/doctor-card.md +41 -0
- package/skills/content-writing/assets/templates/image-prompts.md +128 -0
- package/skills/content-writing/assets/templates/post-telegram.md +36 -0
- package/skills/content-writing/assets/templates/post-vk.md +42 -0
- package/skills/content-writing/assets/templates/press-release.md +56 -0
- package/skills/content-writing/assets/templates/science-pop-note.md +55 -0
- package/skills/content-writing/assets/templates/service-card.md +46 -0
- package/skills/content-writing/references/anti-ai-style.md +248 -0
- package/skills/content-writing/references/editing.md +185 -0
- package/skills/content-writing/references/fact-checking.md +205 -0
- package/skills/content-writing/references/government-medical.md +246 -0
- package/skills/content-writing/references/images.md +212 -0
- package/skills/content-writing/references/journalism.md +252 -0
- package/skills/content-writing/references/science-popular.md +218 -0
- package/skills/content-writing/references/seo-content.md +172 -0
- package/skills/content-writing/references/social-media.md +253 -0
- package/skills/content-writing/references/templates.md +291 -0
- package/skills/database-safety/SKILL.md +31 -0
- package/skills/debugging-playbook/SKILL.md +39 -0
- package/skills/design-critique/SKILL.md +118 -0
- package/skills/dev-workflow/SKILL.md +41 -0
- package/skills/git-and-ci/SKILL.md +40 -0
- package/skills/pg-upgrade-verify/SKILL.md +48 -0
- package/skills/project-deep-dive/SKILL.md +170 -0
- package/skills/project-deep-dive/references/recon-commands.md +78 -0
- package/skills/project-deep-dive/references/section-templates.md +102 -0
- package/skills/project-memory-maintenance/SKILL.md +170 -0
- package/skills/project-memory-maintenance/references/journal-template.md +48 -0
- package/skills/project-memory-maintenance/references/section-rules.md +57 -0
- package/skills/release-and-deploy/SKILL.md +39 -0
- package/skills/requirements-and-planning/SKILL.md +115 -0
- package/skills/security-review/SKILL.md +36 -0
- package/skills/seo/README.md +60 -0
- package/skills/seo/SKILL.md +329 -0
- package/skills/seo/assets/README.md +66 -0
- package/skills/seo/assets/scripts/LICENSE-playwright-core.txt +202 -0
- package/skills/seo/assets/scripts/README.md +179 -0
- package/skills/seo/assets/scripts/lib/args.mjs +105 -0
- package/skills/seo/assets/scripts/lib/browser.mjs +620 -0
- package/skills/seo/assets/scripts/lib/zip.mjs +191 -0
- package/skills/seo/assets/scripts/seo-audit.mjs +1675 -0
- package/skills/seo/assets/snippets/jsonld-breadcrumb.json +30 -0
- package/skills/seo/assets/snippets/jsonld-faq.json +39 -0
- package/skills/seo/assets/snippets/jsonld-medical-clinic.json +49 -0
- package/skills/seo/assets/snippets/jsonld-medical-webpage.json +33 -0
- package/skills/seo/assets/snippets/jsonld-organization.json +74 -0
- package/skills/seo/assets/snippets/jsonld-physician.json +46 -0
- package/skills/seo/assets/snippets/meta.blade.php +61 -0
- package/skills/seo/assets/snippets/robots.txt +61 -0
- package/skills/seo/assets/snippets/sitemap-urlset-example.xml +72 -0
- package/skills/seo/assets/snippets/sitemap.xml +36 -0
- package/skills/seo/references/audit-checklist.md +305 -0
- package/skills/seo/references/content-seo.md +198 -0
- package/skills/seo/references/eeat-medical.md +217 -0
- package/skills/seo/references/measurement.md +223 -0
- package/skills/seo/references/on-page.md +209 -0
- package/skills/seo/references/stack-recipes.md +693 -0
- package/skills/seo/references/structured-data.md +485 -0
- package/skills/seo/references/technical-seo.md +294 -0
- package/skills/service-desk-conventions/SKILL.md +40 -0
- package/skills/service-desk-db-safety/SKILL.md +52 -0
- package/skills/service-desk-release/SKILL.md +43 -0
- package/skills/service-desk-testing/SKILL.md +47 -0
- package/skills/service-desk-ui/SKILL.md +33 -0
- package/skills/skills-router/SKILL.md +91 -0
- package/skills/testing-strategy/SKILL.md +37 -0
- package/skills/ui-design-system/SKILL.md +45 -0
- package/skills/web-research/SKILL.md +40 -0
- package/skills/wow-design/SKILL.md +168 -0
- package/skills/wow-design/assets/kit/README.md +195 -0
- package/skills/wow-design/assets/kit/assets/css/base.css +158 -0
- package/skills/wow-design/assets/kit/assets/css/components.css +1001 -0
- package/skills/wow-design/assets/kit/assets/css/fonts.css +73 -0
- package/skills/wow-design/assets/kit/assets/css/pages.css +737 -0
- package/skills/wow-design/assets/kit/assets/css/tokens.css +218 -0
- package/skills/wow-design/assets/kit/assets/fonts/LICENSE-golos-text.txt +93 -0
- package/skills/wow-design/assets/kit/assets/fonts/LICENSE-lora.txt +93 -0
- package/skills/wow-design/assets/kit/assets/fonts/LICENSE-unbounded.txt +93 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-700-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-700-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-italic.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-latin-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-latin-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/lora-latin-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-400-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-500-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-600-normal.woff2 +0 -0
- package/skills/wow-design/assets/kit/assets/js/kit.js +550 -0
- package/skills/wow-design/assets/kit/pages/dashboard.html +539 -0
- package/skills/wow-design/assets/kit/pages/hospital.html +430 -0
- package/skills/wow-design/assets/kit/showcase.html +1164 -0
- package/skills/wow-design/assets/scripts/LICENSE-axe-core.txt +362 -0
- package/skills/wow-design/assets/scripts/LICENSE-playwright-core.txt +202 -0
- package/skills/wow-design/assets/scripts/README.md +312 -0
- package/skills/wow-design/assets/scripts/audit.mjs +1200 -0
- package/skills/wow-design/assets/scripts/capture.mjs +337 -0
- package/skills/wow-design/assets/scripts/package.json +30 -0
- package/skills/wow-design/references/anti-patterns.md +249 -0
- package/skills/wow-design/references/critique-rubric.md +259 -0
- package/skills/wow-design/references/design-brief-template.md +46 -0
- package/skills/wow-design/references/inspiration.md +200 -0
- package/skills/wow-design/references/presets.md +96 -0
- package/skills/wow-design/references/principles.md +368 -0
- package/skills/wow-design/references/stack-recipes.md +93 -0
- package/skills/wow-design/references/visual-qa.md +79 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing-strategy
|
|
3
|
+
description: "Универсальная стратегия тестирования — пирамида, герметичность, baseline, E2E/UI, визуальные снапшоты, доступность, CI."
|
|
4
|
+
whenToUse: "Перед любой правкой кода и при выборе, чем и как тестировать; при настройке тестов в новом проекте."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Стратегия тестирования (любой проект)
|
|
9
|
+
|
|
10
|
+
## Пирамида
|
|
11
|
+
1. **Unit** — чистая логика, быстрые, без БД/сети.
|
|
12
|
+
2. **Feature/интеграционные** — HTTP/сценарии, валидация, права; на **той же СУБД, что прод** (герметичная тестовая БД).
|
|
13
|
+
3. **E2E/UI** — Playwright: вход, ключевые сценарии, ошибки форм, кросс-браузерность (минимально — Chromium).
|
|
14
|
+
4. **Визуальные** — скриншоты ключевых экранов (`toHaveScreenshot`), фиксируют регрессии вёрстки.
|
|
15
|
+
5. **Доступность** — axe-core в Playwright: контраст, aria, клавиатура.
|
|
16
|
+
6. **Дымовые (smoke)** — 5–10 быстрых проверок после деплоя.
|
|
17
|
+
|
|
18
|
+
## Правила
|
|
19
|
+
- **Baseline до правки:** зафиксировать число тестов/assertion и падения; после — сравнить (не ухудшилось).
|
|
20
|
+
- **Герметичность:** тесты не зависят от боевого `.env`, внешней сети и текущей даты; БД — отдельная.
|
|
21
|
+
- Тест проверяет **поведение**, а не реализацию; не ходит в приватные методы.
|
|
22
|
+
- Новый баг → сначала воспроизводящий тест (падает), затем фикс (проходит).
|
|
23
|
+
- Flaky-тесты не игнорировать: искать гонку/время/данные, а не повторять.
|
|
24
|
+
- Тесты должны быть быстрыми: без сна, без реальных писем/очередей (mail/queue — fake/array).
|
|
25
|
+
- Отсутствующие необязательные файлы/сервисы — `skip` с внятной причиной, не падение.
|
|
26
|
+
|
|
27
|
+
## Минимум для новой фичи
|
|
28
|
+
- Feature-тест основного сценария + тест прав (админ/пользователь/гость).
|
|
29
|
+
- Тест валидации и граничных случаев.
|
|
30
|
+
- Unit для выделенной логики.
|
|
31
|
+
- E2E/скриншот для UI-изменений.
|
|
32
|
+
|
|
33
|
+
## CI (порядок шагов)
|
|
34
|
+
1. `php -l`/сборка/линтер → 2. статанализ → 3. unit+feature на реальной СУБД → 4. E2E на поднятом стенде → 5. артефакты (скриншоты/логи) при падении.
|
|
35
|
+
|
|
36
|
+
## Отчёт о проверках
|
|
37
|
+
- Что запускал (команды), сколько тестов/assertion, что упало/скипнулось и почему, что проверено руками/скриншотами.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-design-system
|
|
3
|
+
description: "Универсальные правила интерфейса — дизайн-токены, компоненты, состояния, адаптивность, темы, доступность и визуальная проверка."
|
|
4
|
+
whenToUse: "Любая работа с интерфейсом: новая страница, правка вёрстки/стилей, дизайн-апгрейд, проверка UX."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# UI/UX и дизайн-система (универсально)
|
|
9
|
+
|
|
10
|
+
> **Для WOW-уровня** (лендинги, дашборды, брендинг, «сделай красиво», дизайн-апгрейд) сначала загрузи
|
|
11
|
+
> `wow-design` — там арт-направление AURORA, 5 пресетов, дизайн-кит, эталонные страницы и петля
|
|
12
|
+
> скриншот-критики. Для аудита готового UI — `design-critique`. Этот скилл — универсальный минимум.
|
|
13
|
+
|
|
14
|
+
## База
|
|
15
|
+
- **Токены**, а не магические числа: цвета, отступы, радиусы, типографика, тени — в переменных/CSS-токенах.
|
|
16
|
+
- **Компоненты**: кнопки, поля, селекты, бейджи, карточки, таблицы, модалки, уведомления — единый вид и поведение.
|
|
17
|
+
- **Состояния обязательны:** default, hover, focus-visible, active, disabled, loading, empty, error.
|
|
18
|
+
- **Сетка и ритм**: одна шкала отступов (4/8/12/16/24/32), выравнивание, максимум ширины контента.
|
|
19
|
+
- **Типографика**: 2–3 размера основной шкалы, читаемая строка (60–75 символов), понятная иерархия.
|
|
20
|
+
|
|
21
|
+
## UX
|
|
22
|
+
- Один главный сценарий на экран; действия — заметные, в конце пути взгляда.
|
|
23
|
+
- Подписи и подсказки — человеческим языком; ошибки — рядом с полем и с решением.
|
|
24
|
+
- Пустые состояния: объяснить, что здесь будет и что сделать.
|
|
25
|
+
- Не заставлять запоминать: подсказки, значения по умолчанию, автосохранение.
|
|
26
|
+
- Скорость: не блокировать интерфейс, показывать прогресс/скелетоны.
|
|
27
|
+
|
|
28
|
+
## Адаптивность
|
|
29
|
+
- 3 точки: mobile (≤560), tablet (≤960), desktop (>960); проверить 360/390/768/1440.
|
|
30
|
+
- Таблицы — горизонтальный скролл в контейнере, а не «поехавшая» страница; кнопки на mobile — на всю ширину.
|
|
31
|
+
- Тач-цели ≥ 40–44px; не полагаться на hover для важных действий.
|
|
32
|
+
|
|
33
|
+
## Темы и доступность
|
|
34
|
+
- Светлая/тёмная/контрастная: контраст текста ≥ 4.5:1, не «зашивать» цвета в разметку.
|
|
35
|
+
- Keyboard-first: focus-visible, Tab-порядок, Escape закрывает, aria-атрибуты у иконок/модалок.
|
|
36
|
+
- Не только цветом: состояния дублировать текстом/иконкой.
|
|
37
|
+
|
|
38
|
+
## Проверка
|
|
39
|
+
- Playwright-скриншоты ключевых экранов (desktop+mobile, обе темы) «до/после».
|
|
40
|
+
- axe-core: критичные нарушения доступности = 0.
|
|
41
|
+
- Проверить длинные тексты, кириллицу, числа, переполнение, ошибки сети.
|
|
42
|
+
|
|
43
|
+
## «ВАУ» без вреда
|
|
44
|
+
- Спокойная палитра, аккуратные акценты, микроанимации 120–200мс только на действиях.
|
|
45
|
+
- Красота не должна снижать скорость/читаемость; сначала ясность, потом эффекты.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-research
|
|
3
|
+
description: "Живой поиск в интернете в реальном времени: находить актуальные факты, новости, цены, версии, законы и документацию, проверять по источникам и цитировать ссылки."
|
|
4
|
+
whenToUse: "Когда нужны свежие/внешние данные: новости, «что сейчас», цены, версии ПО, изменения законов, документация, конкуренты, проверка факта; а также по просьбе «поищи в интернете»."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Живой веб-поиск (реальное время)
|
|
9
|
+
|
|
10
|
+
## Когда обязательно
|
|
11
|
+
- Вопрос про **сейчас/сегодня/последние** изменения, новости, курсы, цены, релизы, версии, тарифы.
|
|
12
|
+
- Проверка факта, цитаты, даты, имени, закона, медицинской/юридической нормы.
|
|
13
|
+
- Актуальная документация библиотеки/сервиса перед кодом (версии API, breaking changes).
|
|
14
|
+
- Конкуренты/рынок для SEO и контента; свежие исследования для статьи.
|
|
15
|
+
|
|
16
|
+
## Процесс
|
|
17
|
+
1. **Сформулируй 2–4 запроса** (рус/англ; синонимы; официальные термины). Для версий — `site:`/официальный домен.
|
|
18
|
+
2. `web_search` → выбери 2–3 **независимых** источника, начни с официальных (docs, .gov, производитель, крупные СМИ).
|
|
19
|
+
3. `web_fetch` — открой ключевые страницы целиком, если нужен контекст/детали; не полагайся только на сниппеты.
|
|
20
|
+
4. **Сверь** минимум два источника; расхождения — покажи оба и объясни.
|
|
21
|
+
5. Зафиксируй **дату поиска** и дату публикации источника. Свежесть: по умолчанию — не старше 12 месяцев (если не историческая справка).
|
|
22
|
+
6. В ответе — **ссылки markdown** и пометка «актуально на YYYY-MM-DD». Не выдумывай URL/цифры.
|
|
23
|
+
|
|
24
|
+
## Правила достоверности
|
|
25
|
+
- Отличай **факт** от мнения/маркетинга; для медицины/юридических норм — только официальные источники (Минздрав, Росздравнадзор, законы) и осторожные формулировки.
|
|
26
|
+
- Если источник платный/закрыт — так и скажи; не выдавай пересказ за первоисточник.
|
|
27
|
+
- Если поиск не дал результата — честно сообщи и предложи уточнить запрос; не заполняй пробел догадкой.
|
|
28
|
+
- Не используй устаревшие данные без предупреждения; при смене версии/цены — укажи оба значения и даты.
|
|
29
|
+
|
|
30
|
+
## Формат ответа
|
|
31
|
+
1. Короткий вывод (1–3 предложения).
|
|
32
|
+
2. Детали с датами/версиями.
|
|
33
|
+
3. «Источники:» — список ссылок (title + URL), дата публикации, если известна.
|
|
34
|
+
4. «Актуально на: YYYY-MM-DD».
|
|
35
|
+
|
|
36
|
+
## Связка с другими скиллами
|
|
37
|
+
- `content-writing` — факты и цитаты только после `web-research`, со ссылками в черновике.
|
|
38
|
+
- `seo` — свежая семантика/конкуренты/тренды и проверка выдачи.
|
|
39
|
+
- `php-laravel`, `javascript-typescript`, `bitrix-aspro` — сверять версии и API с официальной документацией.
|
|
40
|
+
- `requirements-and-planning` — рыночные/правовые вводные подтверждать источниками.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wow-design
|
|
3
|
+
description: "Дизайн-директор уровня топового web-UI дизайнера: арт-направление, токены, композиция, типографика, петля скриншот-критики. Использовать перед ЛЮБОЙ вёрсткой/дизайном интерфейса."
|
|
4
|
+
whenToUse: "Любая задача, где создаётся или меняется внешний вид интерфейса: новая страница, лендинг, дашборд, форма, компоненты, темы, адаптив, дизайн-апгрейд, «сделай красиво». Загружать ДО первой строки HTML/CSS."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# WOW-DESIGN — дизайн-директор
|
|
9
|
+
|
|
10
|
+
> Ты — старший web-UI дизайнер с 40-летним опытом и безупречным вкусом.
|
|
11
|
+
> Твой результат должен выглядеть дорого и уместно **с первого раза**, а не после десяти правок.
|
|
12
|
+
> Красота здесь — не украшение, а ясность, иерархия и доверие. ВАУ без потери удобства.
|
|
13
|
+
|
|
14
|
+
## 0. КОНТРАКТ (нарушать нельзя)
|
|
15
|
+
|
|
16
|
+
1. **Не начинай вёрстку без арт-направления.** Сначала 5–10 минут на «Design Brief» (шаблон: `references/design-brief-template.md`):
|
|
17
|
+
аудитория, задача экрана, 3 слова настроения, 1–2 референса, 1 анти-референс, палитра/пресет, шрифт, signature-деталь.
|
|
18
|
+
2. **Никогда не изобретай палитру и типографику с нуля**, если нет сильного бренд-контекста. Бери дизайн-кит:
|
|
19
|
+
`assets/kit/` — токены, компоненты, 5 пресетов, локальные шрифты. Адаптируй только акцент/шрифт под бренд.
|
|
20
|
+
3. **Только токены, никаких магических чисел.** Цвета/отступы/радиусы/тени/типографика — из `assets/kit/assets/css/tokens.css`
|
|
21
|
+
(или скопируй переменные в проект). Один акцент + нейтрали + редкая тёплая деталь.
|
|
22
|
+
4. **Петля визуальной проверки обязательна.** Собрал → скриншоты 1440/768/390, light/dark → смотри глазами (`read_image`)
|
|
23
|
+
→ критика по рубрике (`references/critique-rubric.md`) → правки → снова скриншоты. **Минимум 2 итерации.**
|
|
24
|
+
5. **Гейт качества:** средний балл ≥ 4.4/5, ни один критерий < 4; axe без critical/serious; на 390px нет горизонтального
|
|
25
|
+
скролла; тёмная тема проверена; first impression = «премиально», а не «шаблон».
|
|
26
|
+
6. **Отчёт с доказательствами:** скриншоты + краткое обоснование решений (почему такой пресет, шрифт, композиция) +
|
|
27
|
+
что проверено. Без скриншотов работа не считается сданной.
|
|
28
|
+
|
|
29
|
+
## 1. ПРОЦЕСС (7 шагов)
|
|
30
|
+
|
|
31
|
+
### Шаг 1. Арт-направление (до кода)
|
|
32
|
+
Выбери **один** пресет и адаптируй под задачу:
|
|
33
|
+
|
|
34
|
+
| Пресет | Когда | Настроение | Display | Акцент |
|
|
35
|
+
|---|---|---|---|---|
|
|
36
|
+
| `aurora` | клиника, культура, премиум-сервис | тихая роскошь, тепло, доверие | Lora (serif) | изумруд `#0E6E5E` + медь |
|
|
37
|
+
| `graphite` | продукт, SaaS, админки, дашборды | точность, плотность, технологичность | Unbounded | мята `#6EE7C8` / `#0E7C66` |
|
|
38
|
+
| `editorial` | медиа, истории, бренд-лендинги | журнал, характер, крупная типографика | Lora | вермильон `#C8442A` |
|
|
39
|
+
| `warm` | сервис для людей, образование, забота | человечность, мягкость, крем | Lora | терракота `#B85C38` |
|
|
40
|
+
| `swiss` | корпоративный строгий, отчёты, B2B | дисциплина, сетка, контраст | Golos 700 | красный `#E0301E` |
|
|
41
|
+
|
|
42
|
+
Заполни формулу: **3 прилагательных + 1 референс (что крадём) + 1 анти-референс (чего избегаем) + signature-деталь.**
|
|
43
|
+
Signature-деталь — одна запоминающаяся вещь: крупные редакционные цифры, волосяные линии с «засечками», монограммы,
|
|
44
|
+
печать/эмблема, номерные секции, тонкая бумажная текстура, необычный ритм сетки. Ровно одна, не пять.
|
|
45
|
+
|
|
46
|
+
Справочники: `references/principles.md` (76 правил ремесла с числами), `references/presets.md` (пресеты подробно),
|
|
47
|
+
`references/inspiration.md` (32 референса: что украсть/что нет), `references/critique-rubric.md` (рубрика 12×5),
|
|
48
|
+
`references/anti-patterns.md` (42 антипаттерна), `references/stack-recipes.md` (React/Laravel/Bitrix), `references/visual-qa.md`.
|
|
49
|
+
|
|
50
|
+
### Шаг 2. Токены
|
|
51
|
+
Скопируй/подключи `assets/kit/assets/css/tokens.css`, `base.css`, `fonts.css`. Если проект уже имеет свою тему —
|
|
52
|
+
**не ломай её**: замапий свои компоненты на существующие CSS-переменные, добавь недостающие токены, не перекрашивай всё.
|
|
53
|
+
Проверь контраст: текст ≥ 4.5:1, крупный ≥ 3:1, фокус видимый.
|
|
54
|
+
|
|
55
|
+
### Шаг 3. Композиция (до деталей)
|
|
56
|
+
- 12-колоночная сетка, контейнер 1200–1360px, gutter `clamp(20px, 4.5vw, 56px)`.
|
|
57
|
+
- Hero: **асимметрия** 7/5 или 8/4. Kicker (капс 11–12px + линия) → display-H1 (`clamp(3rem, 7vw, 6rem)`) → lead (≤52ch) →
|
|
58
|
+
2 CTA (primary + secondary) → proof-строка (3–4 цифры/факта) → визуальный якорь (типографика/SVG/диаграмма, не сток-фото).
|
|
59
|
+
- Ритм секций: чередуй фон (`bg` / `surface` / `bg-alt`), отступы `clamp(64px, 8vw, 128px)`, волосяные разделители.
|
|
60
|
+
- Карточки — только когда элементов действительно несколько и они равнозначны. Не «стена из трёх одинаковых карточек с иконками».
|
|
61
|
+
- Плотные данные (таблицы, дашборды): строгая сетка, tabular-nums, правые числа, sticky header, hairline-строки.
|
|
62
|
+
|
|
63
|
+
### Шаг 4. Сборка
|
|
64
|
+
- Семантика: `header/nav/main/section/article/footer`, один `h1`, порядок заголовков, `lang="ru"`.
|
|
65
|
+
- Компоненты — из `assets/kit/assets/css/components.css` или собери на тех же токенах. Каждый интерактивный элемент:
|
|
66
|
+
default / hover / focus-visible / active / disabled / loading; формы — error + help + disabled.
|
|
67
|
+
- Иконки — inline SVG, stroke 1.5–1.6, 20/24px, один набор. Никаких эмодзи в UI. У иконок-кнопок — `aria-label`.
|
|
68
|
+
- Контент — живой, конкретный, на языке пользователя. Никаких «Lorem ipsum», «Инновационные решения», «Мы предлагаем».
|
|
69
|
+
|
|
70
|
+
### Шаг 5. Визуальная петля (главное!)
|
|
71
|
+
```
|
|
72
|
+
node <skill>/assets/scripts/capture.mjs <file> --name <page> --out <outdir>
|
|
73
|
+
node <skill>/assets/scripts/audit.mjs <file> --out <outdir>
|
|
74
|
+
```
|
|
75
|
+
Смотри PNG через `read_image`, оценивай по `references/critique-rubric.md`, выписывай 5–10 конкретных правок
|
|
76
|
+
(не «сделать красивее», а «H1 72→88px, уменьшить радиус карточек до 14, убрать тень у статичных карточек, добавить
|
|
77
|
+
воздуха вокруг сетки направлений»). Правишь → переснимаешь. Повторяй, пока гейт не пройден. **Не сдавай первый вариант.**
|
|
78
|
+
|
|
79
|
+
### Шаг 6. Доступность и адаптив
|
|
80
|
+
- 390px: нет горизонтального скролла; таблицы в `.table-wrap`; тач-цели ≥ 40–44px; ничего не обрезано.
|
|
81
|
+
- Клавиатура: Tab-порядок, focus-visible, Escape закрывает модалки, aria-атрибуты.
|
|
82
|
+
- `prefers-reduced-motion` — отключить reveal/hover-анимации.
|
|
83
|
+
- Тёмная тема — отдельная палитра (не инверсия): фон глубже, акцент светлее, тени сильнее, контраст AA.
|
|
84
|
+
|
|
85
|
+
### Шаг 7. Сдача
|
|
86
|
+
Скриншоты (desktop 1440 light/dark, mobile 390, ключевые состояния) + 3–5 строк rationale + как интегрировать
|
|
87
|
+
(какие файлы/токены/классы переиспользовать). Приложи пути к PNG в отчёте.
|
|
88
|
+
|
|
89
|
+
## 2. РЫЧАГИ «ВАУ» (используй 3–5, не все сразу)
|
|
90
|
+
|
|
91
|
+
1. **Типографический контраст:** огромный serif-display + мелкий капс-лейбл с трекингом + спокойный body. 80% впечатления.
|
|
92
|
+
2. **Редакционная сетка:** асимметрия, номерные секции (01/02/03), волосяные линии, поля-воздух.
|
|
93
|
+
3. **Одна смелая деталь:** гигантская цифра/буква, эмблема, вертикальный текст, необычный разделитель — но одна.
|
|
94
|
+
4. **Материальность:** тёплая бумага, лёгкое зерно (2–3%), hairline-бордеры, слоистые тени, без «пластика».
|
|
95
|
+
5. **Точные данные:** SVG-графики, sparklines, таблицы с tabular-nums, моно-цифры — выглядят дорого.
|
|
96
|
+
6. **Микродетали:** offset у подчёркиваний, selection-цвет, аккуратный скроллбар, фокус-кольцо, иконки 1.5px.
|
|
97
|
+
7. **Движение с достоинством:** reveal 700ms `cubic-bezier(.16,1,.3,1)`, stagger 60ms, hover 180ms; без bounce/parallax-цирка.
|
|
98
|
+
8. **Копирайт:** глаголы, конкретика, числа, польза. Заголовок должен продавать результат, а не описывать отдел.
|
|
99
|
+
|
|
100
|
+
## 3. АНТИПАТТЕРНЫ (мгновенно убивают «дорого»)
|
|
101
|
+
|
|
102
|
+
Фиолетово-синие градиенты · 3 одинаковые карточки с иконками · glassmorphism на каждом блоке · эмодзи вместо иконок ·
|
|
103
|
+
радиусы 24–32px у всего · дефолтный Bootstrap/Shadcn-вид без характера · центрированный hero с «блобами» ·
|
|
104
|
+
gradient-text на заголовках · серый текст с контрастом < 4.5 · несогласованные отступы (13/17/22px) · тени «как в 2010» ·
|
|
105
|
+
стоковые улыбающиеся люди · перегруз бейджами/иконками · анимации ради анимаций · «Lorem ipsum» · 16px-везде ·
|
|
106
|
+
карточки с одинаковой иконкой-облачком · карусели, которые никто не листает · модалка на модалке.
|
|
107
|
+
|
|
108
|
+
Полный список с заменами: `references/anti-patterns.md`.
|
|
109
|
+
|
|
110
|
+
## 4. СТЕКИ (не изобретай заново)
|
|
111
|
+
|
|
112
|
+
- **React + Tailwind/Vite:** токены — CSS-переменные в `:root`; Tailwind `@theme` маппится на них; компоненты — в одном
|
|
113
|
+
`components/ui`, состояния через `data-state`; скриншоты через `npm run dev` + capture. Подробнее: `references/stack-recipes.md`.
|
|
114
|
+
- **Laravel Blade:** `resources/views/layouts/app.blade.php` + partials (`components/button.blade.php` и т.п.);
|
|
115
|
+
токены — `resources/css/tokens.css`; не ломай существующие классы; проверяй `npm run build`.
|
|
116
|
+
- **Bitrix/Aspro:** правки — в `local/templates/<template>/` и `custom.css`/`init.php`, не в ядре и не в маркетплейс-шаблоне;
|
|
117
|
+
стили скоупить под контейнер страницы; после правок чистить кэш CSS (`/bitrix/cache/css/...`); проверять на живой странице.
|
|
118
|
+
|
|
119
|
+
Подробные рецепты и подводные камни: `references/stack-recipes.md`.
|
|
120
|
+
|
|
121
|
+
## 5. ЧТО ЛЕЖИТ В КИТЕ
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
assets/kit/
|
|
125
|
+
showcase.html — витрина системы: палитры, типографика, компоненты, состояния, пресеты
|
|
126
|
+
pages/hospital.html — эталон: премиальный лендинг клиники (aurora)
|
|
127
|
+
pages/dashboard.html — эталон: продуктовый дашборд (graphite, light/dark)
|
|
128
|
+
assets/css/ — tokens.css, base.css, fonts.css, components.css
|
|
129
|
+
assets/js/kit.js — тема/пресет, reveal, tabs, modal
|
|
130
|
+
assets/fonts/ — Golos Text, Lora, Unbounded (OFL, локально)
|
|
131
|
+
assets/scripts/
|
|
132
|
+
capture.mjs — скриншоты (desktop/tablet/mobile, light/dark, full page)
|
|
133
|
+
audit.mjs — axe-core + overflow/tap-target/шрифты/консоль
|
|
134
|
+
```
|
|
135
|
+
Как использовать: открой `showcase.html` для эталона; скопируй `tokens.css`/`base.css`/`fonts.css`/`components.css`
|
|
136
|
+
и нужные паттерны страниц в проект; если проекта нет — начни с эталонной страницы, замени контент и бренд-акцент.
|
|
137
|
+
|
|
138
|
+
## 6. ПРОВЕРКА ПЕРЕД СДАЧЕЙ (чек-лист)
|
|
139
|
+
|
|
140
|
+
- [ ] Арт-направление зафиксировано (пресет, 3 слова, референс, signature-деталь).
|
|
141
|
+
- [ ] Первый экран читается за 5 секунд: понятно, что это, для кого и что делать.
|
|
142
|
+
- [ ] Иерархия: 1 главный акцент на экран; взгляд идёт по нужному маршруту.
|
|
143
|
+
- [ ] Типографика: display/body/лейблы различимы, строка 60–72ch, числа табличные.
|
|
144
|
+
- [ ] Воздух: секции дышат, сетка выровнена, ничего не «прилипло».
|
|
145
|
+
- [ ] Состояния всех интерактивных элементов; формы с ошибками и подсказками.
|
|
146
|
+
- [ ] Мобильный 390px, планшет 768px, десктоп 1440px — проверены скриншотами.
|
|
147
|
+
- [ ] Тёмная тема — отдельная палитра, контраст AA.
|
|
148
|
+
- [ ] axe: critical/serious = 0; keyboard/focus проверены.
|
|
149
|
+
- [ ] Нет ни одного пункта из антипаттернов.
|
|
150
|
+
- [ ] Скриншоты приложены, рубрика ≥ 4.4/5 и ни один критерий < 4.
|
|
151
|
+
|
|
152
|
+
## 7. ЕСЛИ ЗАДАЧА — «ПРОСТО ПОПРАВИТЬ» СУЩЕСТВУЮЩИЙ UI
|
|
153
|
+
|
|
154
|
+
Не переписывай всё. Сначала загрузи `design-critique`, сними скриншоты «до», оцени по рубрике, исправь
|
|
155
|
+
**P0-проблемы** (иерархия, контраст, поломки адаптива, состояния), затем P1-полировку. Покажи «до/после».
|
|
156
|
+
Сохраняй существующие классы/структуру, если проект чужой; правки — минимальные и локальные.
|
|
157
|
+
|
|
158
|
+
## 8. ОТЧЁТ (шаблон)
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
## Дизайн: <страница/компонент>
|
|
162
|
+
Арт-направление: <пресет>, <3 слова>, signature: <деталь>
|
|
163
|
+
Что сделано: <3–6 пунктов>
|
|
164
|
+
Скриншоты: <пути>
|
|
165
|
+
Рубрика: <средний балл>, слабые места: <...>
|
|
166
|
+
Проверено: 1440/768/390, light/dark, axe (critical=0), keyboard
|
|
167
|
+
Риски/что дальше: <...>
|
|
168
|
+
```
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# AURORA — дизайн-кит для WOW-UI
|
|
2
|
+
|
|
3
|
+
Дизайн-система для интерфейсов, которые должны выглядеть дорого и уместно **с первого раза**.
|
|
4
|
+
Пять пресетов, две темы, типографика Lora + Golos Text + Unbounded, полный набор компонентов
|
|
5
|
+
и три эталонные страницы. Чистый HTML5 + CSS + vanilla JS: **без сборки, CDN и внешних запросов**.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
projects/design-kit/
|
|
9
|
+
├── showcase.html # витрина дизайн-системы (главный артефакт)
|
|
10
|
+
├── pages/
|
|
11
|
+
│ ├── hospital.html # эталон: премиальный лендинг клиники (aurora)
|
|
12
|
+
│ └── dashboard.html # эталон: Service Desk, product UI (graphite, light/dark)
|
|
13
|
+
├── assets/
|
|
14
|
+
│ ├── css/
|
|
15
|
+
│ │ ├── tokens.css # токены: цвет/типографика/отступы/эффекты (Lead, не менять)
|
|
16
|
+
│ │ ├── fonts.css # @font-face локальных шрифтов (Lead, не менять)
|
|
17
|
+
│ │ ├── base.css # reset, сетка, типографика, утилиты (Lead, не менять)
|
|
18
|
+
│ │ ├── components.css # все компоненты и состояния (этот кит)
|
|
19
|
+
│ │ └── pages.css # стили эталонных страниц и витрины
|
|
20
|
+
│ ├── js/
|
|
21
|
+
│ │ └── kit.js # тема/пресет, reveal, tabs, модалка, меню, toast, демо-состояния
|
|
22
|
+
│ └── fonts/*.woff2 # Golos Text, Lora, Unbounded (OFL)
|
|
23
|
+
├── screenshots/ # скриншоты 1440/390, light/dark + full-page
|
|
24
|
+
└── README.md
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Быстрый старт
|
|
28
|
+
|
|
29
|
+
1. Откройте **`showcase.html` двойным кликом** — всё работает по `file://`, без сервера.
|
|
30
|
+
2. Оттуда — ссылки на `pages/hospital.html` и `pages/dashboard.html`.
|
|
31
|
+
3. Тема переключается кнопкой-«луной/солнцем» в шапке (запоминается в `localStorage`).
|
|
32
|
+
Пресеты на витрине — сегментированный переключатель `Aurora · Graphite · Editorial · Warm · Swiss`.
|
|
33
|
+
4. На эталонных страницах пресет закреплён: клиника — `aurora`, дашборд — `graphite`.
|
|
34
|
+
|
|
35
|
+
## Пресеты и темы
|
|
36
|
+
|
|
37
|
+
Пресет — атрибут `<html data-preset="...">`, тема — `<html data-theme="light|dark">`.
|
|
38
|
+
Все цвета/шрифты/радиусы/тени берутся из `tokens.css`.
|
|
39
|
+
|
|
40
|
+
| Пресет | Когда | Настроение | Display | Акцент |
|
|
41
|
+
|---|---|---|---|---|
|
|
42
|
+
| `aurora` | клиника, культура, премиум-сервис | тихая роскошь, тепло, доверие | Lora | изумруд `#0E6E5E` + медь |
|
|
43
|
+
| `graphite` | продукт, SaaS, дашборды | точность, плотность, контроль | Unbounded | мята/изумруд |
|
|
44
|
+
| `editorial` | медиа, истории, лендинги | журнал, характер | Lora | вермильон |
|
|
45
|
+
| `warm` | сервис для людей, забота | человечность, крем | Lora | терракота |
|
|
46
|
+
| `swiss` | строгий корпоративный, B2B | сетка, контраст | Golos 700 | красный |
|
|
47
|
+
|
|
48
|
+
Под бренд меняются **только** переменные акцента (см. `tokens.css`):
|
|
49
|
+
`--accent`, `--accent-hover`, `--accent-press`, `--accent-soft`, `--accent-ink`, `--accent-contrast`.
|
|
50
|
+
Правило: контраст `--accent` ↔ `--accent-contrast` ≥ 4.5:1; `--accent-ink` — текст на `*-soft`.
|
|
51
|
+
|
|
52
|
+
## Как переиспользовать
|
|
53
|
+
|
|
54
|
+
### 1. Подключите базовые файлы (в этом порядке)
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<link rel="stylesheet" href="assets/css/tokens.css">
|
|
58
|
+
<link rel="stylesheet" href="assets/css/fonts.css">
|
|
59
|
+
<link rel="stylesheet" href="assets/css/base.css">
|
|
60
|
+
<link rel="stylesheet" href="assets/css/components.css">
|
|
61
|
+
<!-- pages.css — только если нужны паттерны эталонных страниц -->
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 2. Размечайте компонентами
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<button class="btn btn--primary">Записаться</button>
|
|
68
|
+
<button class="btn btn--secondary btn--sm">Отмена</button>
|
|
69
|
+
|
|
70
|
+
<div class="field">
|
|
71
|
+
<label class="label" for="phone">Телефон</label>
|
|
72
|
+
<input class="input" id="phone" type="tel" placeholder="+7 (___) ___-__-__">
|
|
73
|
+
<span class="field__hint">Напомним за день до приёма.</span>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<span class="badge badge--success badge--dot">Решена</span>
|
|
77
|
+
<div class="card"><div class="card__body">…</div></div>
|
|
78
|
+
<div class="table-wrap"><table class="table">…</table></div>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Полный каталог классов — в оглавлении `components.css` (18 секций): кнопки, поля и формы,
|
|
82
|
+
бейджи/статусы, карточки/frame, таблицы, tabs, алерты, toast, модалка, меню/dropdown/tooltip,
|
|
83
|
+
крошки/пагинация/segmented, аватары/progress/skeleton/empty/timeline, KPI+sparkline,
|
|
84
|
+
каркас приложения (sidebar/topbar), hero-паттерны, списки и утилиты.
|
|
85
|
+
|
|
86
|
+
### 3. JS (только если нужны интерактивные состояния)
|
|
87
|
+
|
|
88
|
+
```html
|
|
89
|
+
<script src="assets/js/kit.js" defer></script>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Разметка «включает» поведение через data-атрибуты:
|
|
93
|
+
|
|
94
|
+
| Атрибут | Что делает |
|
|
95
|
+
|---|---|
|
|
96
|
+
| `data-theme-toggle` | переключатель светлой/тёмной темы |
|
|
97
|
+
| `data-preset-set="graphite"` | кнопка выбора пресета (на витрине) |
|
|
98
|
+
| `.reveal` + `data-delay="1..5"` | появление при скролле (stagger 60 ms) |
|
|
99
|
+
| `data-tabs` + `role="tab"/"tabpanel"` | tabs с клавиатурой (← → Home End) |
|
|
100
|
+
| `data-modal-open="#id"`, `data-modal-close` | модалка: Escape, focus trap, возврат фокуса |
|
|
101
|
+
| `data-nav-toggle="#nav"` + `.nav-scrim` | мобильное меню/drawer |
|
|
102
|
+
| `data-dropdown` + `data-dropdown-toggle` | dropdown-меню |
|
|
103
|
+
| `data-demo-loading`, `data-demo-toast` | демонстрация loading/toast (витрина) |
|
|
104
|
+
| `data-copy="значение"` | копирование значения в буфер + toast |
|
|
105
|
+
|
|
106
|
+
> **Почему не `<script type="module">`?** `kit.js` написан как ES2022-модуль (без импортов/экспортов),
|
|
107
|
+
> но подключается обычным `defer`-скриптом: Chrome блокирует внешние module-скрипты на `file://`,
|
|
108
|
+
> а страницы кита обязаны открываться двойным кликом. В ESM-проекте достаточно заменить тег на
|
|
109
|
+
> `type="module"` — код менять не нужно.
|
|
110
|
+
|
|
111
|
+
### 4. Иконки
|
|
112
|
+
|
|
113
|
+
Иконки — inline SVG-спрайт в начале `<body>` (stroke 1.6, 24×24), использование:
|
|
114
|
+
`<svg class="icon icon--sm" viewBox="0 0 24 24" aria-hidden="true"><use href="#i-search"/></svg>`.
|
|
115
|
+
Скопируйте нужные `<symbol>` в свою страницу. Никаких эмодзи и внешних иконочных шрифтов.
|
|
116
|
+
|
|
117
|
+
### 5. Токены, а не магические числа
|
|
118
|
+
|
|
119
|
+
Отступы — `--sp-1…--sp-14`, кегли — `--text-*`/`--display-*`, контейнер — `--container*`,
|
|
120
|
+
радиусы — `--radius-*`, тени — `--shadow-*`, движение — `--dur*`/`--ease*`.
|
|
121
|
+
Новые значения добавляйте в `tokens.css` своего проекта, а не в компоненты.
|
|
122
|
+
|
|
123
|
+
## Эталонные страницы
|
|
124
|
+
|
|
125
|
+
### `pages/hospital.html` — aurora
|
|
126
|
+
Utility-бар → sticky-навигация → асимметричный hero 7/5 (serif-H1, «печать» с лицензией,
|
|
127
|
+
proof-строка) → редакционный нумерованный список направлений 01–08 с hover-подсветкой →
|
|
128
|
+
«Путь пациента» (4 шага) → 3 карточки врачей с монограммами → доверие (лицензии/оборудование/
|
|
129
|
+
страховки) → новости → CTA-полоса → футер с юр. информацией. Без фото — только типографика, SVG и монограммы.
|
|
130
|
+
|
|
131
|
+
### `pages/dashboard.html` — graphite
|
|
132
|
+
Тёмный сайдбар 248 px → топбар (крошки, поиск с ⌘K, уведомления, профиль) → 4 KPI со sparkline
|
|
133
|
+
и дельтой → SVG area-график SLA + донат «SLA 94,2 %» → таблица заявок (sticky-заголовок,
|
|
134
|
+
tabular-nums, SLA-таймеры, hover-действия, скролл на мобильном) → лента активности → загрузка смены → пагинация.
|
|
135
|
+
Полноценная светлая и тёмная тема.
|
|
136
|
+
|
|
137
|
+
## Качество и проверки
|
|
138
|
+
|
|
139
|
+
- **axe critical/serious = 0** на всех трёх страницах (WCAG AA по контрасту текста; интерактив ≥ 24 px,
|
|
140
|
+
иконочные кнопки 44 px, focus-visible, aria, reduced-motion).
|
|
141
|
+
- **Нет горизонтального overflow** на 390 px; таблица скроллится внутри контейнера.
|
|
142
|
+
- Шрифты локальные, `document.fonts.status = loaded`; внешних запросов нет.
|
|
143
|
+
- Скриншоты снимаются готовыми инструментами из корня workspace:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
node tools/design-qa/capture.mjs projects/design-kit/showcase.html --name showcase --out projects/design-kit/screenshots
|
|
147
|
+
node tools/design-qa/audit.mjs projects/design-kit/showcase.html --name showcase
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`capture` даёт 6 кадров: desktop 1440×900, tablet 768×1024, mobile 390×844 × light/dark
|
|
151
|
+
(full-page); `--no-full` — только первый экран. `audit` — axe + overflow + тапы + шрифты + консоль.
|
|
152
|
+
|
|
153
|
+
### Скриншоты в `screenshots/`
|
|
154
|
+
- `showcase-1440-light.png`, `showcase-1440-dark.png`, `showcase-390-light.png` — first impression
|
|
155
|
+
- `hospital-1440-light.png`, `hospital-1440-dark.png`, `hospital-390-light.png`
|
|
156
|
+
- `dashboard-1440-light.png`, `dashboard-1440-dark.png`, `dashboard-390-light.png`, `dashboard-390-dark.png`
|
|
157
|
+
- `<page>-desktop|tablet|mobile-light|dark.png` — full-page для каждой страницы (18 файлов)
|
|
158
|
+
|
|
159
|
+
### Самооценка по рубрике (`tmp/design-research/04-critique-rubric.md`)
|
|
160
|
+
|
|
161
|
+
| # | Критерий | Showcase | Hospital | Dashboard |
|
|
162
|
+
|---|---|---|---|---|
|
|
163
|
+
| К1 | Первое впечатление / концепция | 5 | 5 | 5 |
|
|
164
|
+
| К2 | Иерархия и маршрут взгляда | 4 | 5 | 5 |
|
|
165
|
+
| К3 | Типографика | 5 | 5 | 4 |
|
|
166
|
+
| К4 | Цвет и контраст | 4 | 5 | 5 |
|
|
167
|
+
| К5 | Сетка и ритм | 5 | 5 | 5 |
|
|
168
|
+
| К6 | Воздух и плотность | 5 | 5 | 4 |
|
|
169
|
+
| К7 | Компоненты и состояния | 5 | 4 | 5 |
|
|
170
|
+
| К8 | Консистентность | 5 | 5 | 5 |
|
|
171
|
+
| К9 | Детали и полировка | 4 | 4 | 4 |
|
|
172
|
+
| К10 | Адаптив и мобильный | 4 | 4 | 4 |
|
|
173
|
+
| К11 | Доступность | 5 | 5 | 5 |
|
|
174
|
+
| К12 | Оригинальность vs польза | 5 | 4 | 5 |
|
|
175
|
+
| | **Средневзвешенный балл** | **4.67** | **4.78** | **4.69** |
|
|
176
|
+
|
|
177
|
+
Порог DoD (≥ 4.4, ни один критерий < 4) выполнен; axe critical/serious = 0; overflow 390 = 0.
|
|
178
|
+
|
|
179
|
+
## Принципы (не нарушать)
|
|
180
|
+
|
|
181
|
+
- **Типографика — герой.** Display ↔ body ↔ служебный текст: контраст масштабов, строка 60–72 ch,
|
|
182
|
+
табличные цифры, капс-лейблы с трекингом.
|
|
183
|
+
- **Воздух — материал.** Секции 96–128 px, волосяные линии вместо рамок, асимметрия 7/5 и 8/4.
|
|
184
|
+
- **Один акцент.** Цвет работает на иерархию, а не на эффект; семантика статусов дублируется текстом.
|
|
185
|
+
- **Тени слоистые, радиусы по пресету**, не «всё rounded-3xl»; никакого стекла на каждом блоке.
|
|
186
|
+
- **Иконки — только inline SVG 1.5–1.6 px**, без эмодзи; фото и стоки не используются.
|
|
187
|
+
- **Motion 160–260 ms**, один easing, reveal 700 ms; `prefers-reduced-motion` уважается.
|
|
188
|
+
- **Копирайт — живой русский:** глаголы, конкретика, числа. Никаких «Инновационных решений» и Lorem ipsum.
|
|
189
|
+
- **Доступность:** контраст AA, focus-visible, aria, модалка с focus trap, тап-цели ≥ 24 px (иконочные — 44).
|
|
190
|
+
|
|
191
|
+
## Лицензии
|
|
192
|
+
|
|
193
|
+
Шрифты Golos Text, Lora, Unbounded — SIL Open Font License, файлы локальные
|
|
194
|
+
(`assets/fonts/LICENSE-*.txt`). Код кита можно свободно переиспользовать внутри проектов DSH.
|
|
195
|
+
Данные на эталонных страницах — вымышленные (демонстрационные), совпадения случайны.
|