dsh-desktop-kit 0.0.0-stage → 2.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.
Files changed (269) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -2
  3. package/client.js +4101 -0
  4. package/cordis.patch.yml +5 -0
  5. package/docs/ARCHITECTURE.md +114 -0
  6. package/docs/COMPATIBILITY.md +61 -0
  7. package/docs/INSTALL.md +84 -0
  8. package/docs/PRIVACY.md +50 -0
  9. package/docs/ROADMAP.md +57 -0
  10. package/docs/TOKENS.md +118 -0
  11. package/docs/TROUBLESHOOTING.md +68 -0
  12. package/docs/images/hero.png +0 -0
  13. package/index.js +84 -0
  14. package/package.json +70 -4
  15. package/plugins/dsh-gkb-ru-ui/cordis.patch.yml +6 -0
  16. package/plugins/dsh-gkb-ru-ui/lib/client.js +1331 -0
  17. package/plugins/dsh-gkb-ru-ui/lib/index.js +186 -0
  18. package/plugins/dsh-gkb-ru-ui/lib/skills.js +570 -0
  19. package/plugins/dsh-gkb-ru-ui/package.json +28 -0
  20. package/plugins/dsh-gkb-ru-ui/screenshots/01-home-tiles-1440-light.png +0 -0
  21. package/plugins/dsh-gkb-ru-ui/screenshots/02-skills-1440-light.png +0 -0
  22. package/plugins/dsh-gkb-ru-ui/screenshots/03-skills-editor-1440-light.png +0 -0
  23. package/plugins/dsh-gkb-ru-ui/screenshots/04-skills-1440-dark.png +0 -0
  24. package/plugins/dsh-gkb-ru-ui/screenshots/05-skills-390-light.png +0 -0
  25. package/plugins/dsh-gkb-ru-ui/screenshots/06-home-tiles-1440-dark.png +0 -0
  26. package/plugins/dsh-peak-guard/README.md +70 -0
  27. package/plugins/dsh-peak-guard/client.js +741 -0
  28. package/plugins/dsh-peak-guard/cordis.patch.yml +5 -0
  29. package/plugins/dsh-peak-guard/icon.svg +12 -0
  30. package/plugins/dsh-peak-guard/index.js +2 -0
  31. package/plugins/dsh-peak-guard/locale/en.json +6 -0
  32. package/plugins/dsh-peak-guard/locale/ru.json +6 -0
  33. package/plugins/dsh-peak-guard/locale/zh.json +6 -0
  34. package/plugins/dsh-peak-guard/package.json +33 -0
  35. package/plugins/dsh-peak-guard/screenshots/01-real-time-peak-start.png +0 -0
  36. package/plugins/dsh-peak-guard/screenshots/02-real-time-peak-end.png +0 -0
  37. package/plugins/dsh-peak-guard/screenshots/03-peak-card-1440-light.png +0 -0
  38. package/plugins/dsh-peak-guard/screenshots/04-peak-card-1440-dark.png +0 -0
  39. package/plugins/dsh-peak-guard/screenshots/05-peak-card-390-light.png +0 -0
  40. package/plugins/dsh-peak-guard/screenshots/05-peak-card-768-light.png +0 -0
  41. package/plugins/dsh-peak-guard/screenshots/06-peak-card-390-light.png +0 -0
  42. package/plugins/dsh-peak-guard/screenshots/07-live-preview-check.png +0 -0
  43. package/plugins/dsh-peak-guard/screenshots/07-pre-peak-1440-light.png +0 -0
  44. package/plugins/dsh-peak-guard/screenshots/08-peak-start-1440-light.png +0 -0
  45. package/plugins/dsh-peak-guard/screenshots/09-peak-end-1440-light.png +0 -0
  46. package/plugins/dsh-peak-guard/screenshots/10-pre-peak-card-1440-light.png +0 -0
  47. package/plugins/dsh-peak-guard/screenshots/11-pre-peak-card-1440-dark.png +0 -0
  48. package/plugins/dsh-peak-guard/screenshots/12-pre-peak-card-390-light.png +0 -0
  49. package/plugins/dsh-peak-guard/screenshots/qa-report.json +74 -0
  50. package/plugins/dsh-profile-transfer/README.md +62 -0
  51. package/plugins/dsh-profile-transfer/bootstrap/01-INSTALL.cmd +7 -0
  52. package/plugins/dsh-profile-transfer/bootstrap/README-ARCHIVE.md +54 -0
  53. 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
  54. package/plugins/dsh-profile-transfer/bootstrap/install-on-clean-machine.ps1 +119 -0
  55. 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
  56. package/plugins/dsh-profile-transfer/client.js +806 -0
  57. package/plugins/dsh-profile-transfer/cordis.patch.yml +3 -0
  58. package/plugins/dsh-profile-transfer/icon.svg +13 -0
  59. package/plugins/dsh-profile-transfer/index.js +375 -0
  60. package/plugins/dsh-profile-transfer/locale/en.json +6 -0
  61. package/plugins/dsh-profile-transfer/locale/ru.json +6 -0
  62. package/plugins/dsh-profile-transfer/locale/zh.json +6 -0
  63. package/plugins/dsh-profile-transfer/package.json +36 -0
  64. package/plugins/dsh-profile-transfer/screenshots/01-settings-transfer-1440-light.png +0 -0
  65. package/plugins/dsh-profile-transfer/screenshots/02-settings-transfer-preview-1440-light.png +0 -0
  66. package/plugins/dsh-profile-transfer/screenshots/03-settings-transfer-1440-dark.png +0 -0
  67. package/plugins/dsh-profile-transfer/screenshots/04-settings-transfer-390-light.png +0 -0
  68. package/plugins/dsh-profile-transfer/screenshots/05-settings-transfer-768-light.png +0 -0
  69. package/plugins/dsh-profile-transfer/screenshots/06-settings-transfer-390-dark.png +0 -0
  70. package/plugins/dsh-profile-transfer/screenshots/07-settings-transfer-export-result.png +0 -0
  71. package/plugins/dsh-profile-transfer/screenshots/08-settings-transfer-workspaces-1440-light.png +0 -0
  72. package/plugins/dsh-profile-transfer/screenshots/09-settings-transfer-workspaces-1440-dark.png +0 -0
  73. package/plugins/dsh-profile-transfer/screenshots/10-settings-transfer-workspaces-390-light.png +0 -0
  74. package/plugins/dsh-profile-transfer/transfer.js +1004 -0
  75. package/plugins/dsh-project-memory/README.md +71 -0
  76. package/plugins/dsh-project-memory/cordis.patch.yml +4 -0
  77. package/plugins/dsh-project-memory/icon.svg +12 -0
  78. package/plugins/dsh-project-memory/index.js +1240 -0
  79. package/plugins/dsh-project-memory/locale/en.json +6 -0
  80. package/plugins/dsh-project-memory/locale/ru.json +6 -0
  81. package/plugins/dsh-project-memory/locale/zh.json +6 -0
  82. package/plugins/dsh-project-memory/package.json +26 -0
  83. package/plugins/dsh-session-move/README.md +67 -0
  84. package/plugins/dsh-session-move/client.js +719 -0
  85. package/plugins/dsh-session-move/cordis.patch.yml +5 -0
  86. package/plugins/dsh-session-move/icon.svg +14 -0
  87. package/plugins/dsh-session-move/index.js +497 -0
  88. package/plugins/dsh-session-move/locale/en.json +6 -0
  89. package/plugins/dsh-session-move/locale/ru.json +6 -0
  90. package/plugins/dsh-session-move/locale/zh.json +6 -0
  91. package/plugins/dsh-session-move/package.json +31 -0
  92. package/plugins/dsh-session-move/screenshots/01-row-menu-1440-light.png +0 -0
  93. package/plugins/dsh-session-move/screenshots/02-dialog-1440-light.png +0 -0
  94. package/plugins/dsh-session-move/screenshots/03-dialog-390-light.png +0 -0
  95. package/plugins/dsh-session-move/screenshots/04-dialog-1440-dark.png +0 -0
  96. package/plugins/dsh-session-move/screenshots/05-drag-highlight-1440-light.png +0 -0
  97. package/plugins/dsh-session-move/screenshots/06-drop-ungrouped-highlight.png +0 -0
  98. package/plugins/dsh-session-move/screenshots/07-after-drop-ungrouped.png +0 -0
  99. package/plugins/dsh-session-move/screenshots/08-move-dialog.png +0 -0
  100. package/plugins/dsh-session-move/screenshots/09-moved-to-second-workspace.png +0 -0
  101. package/plugins/dsh-session-move/screenshots/qa-report.json +62 -0
  102. package/plugins/dsh-skill-autopilot/cordis.patch.yml +3 -0
  103. package/plugins/dsh-skill-autopilot/index.js +444 -0
  104. package/plugins/dsh-skill-autopilot/package.json +19 -0
  105. package/plugins/dsh-token-lab/cordis.patch.yml +3 -0
  106. package/plugins/dsh-token-lab/lib/client.js +504 -0
  107. package/plugins/dsh-token-lab/lib/index.js +275 -0
  108. package/plugins/dsh-token-lab/package.json +26 -0
  109. package/plugins/dsh-token-lab/screenshots/01-token-lab-1440-light.png +0 -0
  110. package/plugins/dsh-token-lab/screenshots/02-token-lab-1440-dark.png +0 -0
  111. package/skills/code-review-checklist/SKILL.md +55 -0
  112. package/skills/content-writing/README.md +87 -0
  113. package/skills/content-writing/SKILL.md +85 -0
  114. package/skills/content-writing/assets/checklists/fact-check.md +53 -0
  115. package/skills/content-writing/assets/checklists/publish.md +65 -0
  116. package/skills/content-writing/assets/checklists/social.md +40 -0
  117. package/skills/content-writing/assets/templates/article.md +47 -0
  118. package/skills/content-writing/assets/templates/brief.md +44 -0
  119. package/skills/content-writing/assets/templates/doctor-card.md +41 -0
  120. package/skills/content-writing/assets/templates/image-prompts.md +128 -0
  121. package/skills/content-writing/assets/templates/post-telegram.md +36 -0
  122. package/skills/content-writing/assets/templates/post-vk.md +42 -0
  123. package/skills/content-writing/assets/templates/press-release.md +56 -0
  124. package/skills/content-writing/assets/templates/science-pop-note.md +55 -0
  125. package/skills/content-writing/assets/templates/service-card.md +46 -0
  126. package/skills/content-writing/references/anti-ai-style.md +248 -0
  127. package/skills/content-writing/references/editing.md +185 -0
  128. package/skills/content-writing/references/fact-checking.md +205 -0
  129. package/skills/content-writing/references/government-medical.md +246 -0
  130. package/skills/content-writing/references/images.md +212 -0
  131. package/skills/content-writing/references/journalism.md +252 -0
  132. package/skills/content-writing/references/process.md +123 -0
  133. package/skills/content-writing/references/quick-recipes.md +99 -0
  134. package/skills/content-writing/references/rules.md +85 -0
  135. package/skills/content-writing/references/science-popular.md +218 -0
  136. package/skills/content-writing/references/seo-content.md +172 -0
  137. package/skills/content-writing/references/social-media.md +253 -0
  138. package/skills/content-writing/references/sources.md +49 -0
  139. package/skills/content-writing/references/templates.md +291 -0
  140. package/skills/context-economy/SKILL.md +60 -0
  141. package/skills/context-economy/references/long-session.md +35 -0
  142. package/skills/context-economy/references/token-math.md +42 -0
  143. package/skills/context-economy/references/tool-recipes.md +34 -0
  144. package/skills/database-safety/SKILL.md +47 -0
  145. package/skills/debugging-playbook/SKILL.md +42 -0
  146. package/skills/design-critique/SKILL.md +65 -0
  147. package/skills/design-critique/references/a11y.md +25 -0
  148. package/skills/design-critique/references/diagnoses.md +33 -0
  149. package/skills/design-critique/references/quick-tests.md +30 -0
  150. package/skills/design-critique/references/report-template.md +63 -0
  151. package/skills/design-critique/references/rubric-fast.md +73 -0
  152. package/skills/dev-workflow/SKILL.md +48 -0
  153. package/skills/dev-workflow/references/definition-of-done.md +44 -0
  154. package/skills/dev-workflow/references/memory-and-boundaries.md +31 -0
  155. package/skills/dev-workflow/references/stages.md +67 -0
  156. package/skills/git-and-ci/SKILL.md +60 -0
  157. package/skills/pg-upgrade-verify/SKILL.md +67 -0
  158. package/skills/project-deep-dive/SKILL.md +45 -0
  159. package/skills/project-deep-dive/references/recon-commands.md +90 -0
  160. package/skills/project-deep-dive/references/section-templates.md +104 -0
  161. package/skills/project-deep-dive/references/tool-and-process.md +86 -0
  162. package/skills/project-memory-maintenance/SKILL.md +55 -0
  163. package/skills/project-memory-maintenance/references/api-and-checklist.md +99 -0
  164. package/skills/project-memory-maintenance/references/journal-template.md +50 -0
  165. package/skills/project-memory-maintenance/references/section-rules.md +59 -0
  166. package/skills/release-and-deploy/SKILL.md +53 -0
  167. package/skills/requirements-and-planning/SKILL.md +49 -0
  168. package/skills/requirements-and-planning/references/antipatterns-and-checklist.md +20 -0
  169. package/skills/requirements-and-planning/references/process-steps.md +52 -0
  170. package/skills/requirements-and-planning/references/templates-and-estimates.md +29 -0
  171. package/skills/security-review/SKILL.md +40 -0
  172. package/skills/seo/README.md +60 -0
  173. package/skills/seo/SKILL.md +77 -0
  174. package/skills/seo/assets/README.md +66 -0
  175. package/skills/seo/assets/scripts/LICENSE-playwright-core.txt +202 -0
  176. package/skills/seo/assets/scripts/README.md +179 -0
  177. package/skills/seo/assets/scripts/lib/args.mjs +105 -0
  178. package/skills/seo/assets/scripts/lib/browser.mjs +620 -0
  179. package/skills/seo/assets/scripts/lib/zip.mjs +191 -0
  180. package/skills/seo/assets/scripts/seo-audit.mjs +1675 -0
  181. package/skills/seo/assets/snippets/jsonld-breadcrumb.json +30 -0
  182. package/skills/seo/assets/snippets/jsonld-faq.json +39 -0
  183. package/skills/seo/assets/snippets/jsonld-medical-clinic.json +49 -0
  184. package/skills/seo/assets/snippets/jsonld-medical-webpage.json +33 -0
  185. package/skills/seo/assets/snippets/jsonld-organization.json +74 -0
  186. package/skills/seo/assets/snippets/jsonld-physician.json +46 -0
  187. package/skills/seo/assets/snippets/meta.blade.php +61 -0
  188. package/skills/seo/assets/snippets/robots.txt +61 -0
  189. package/skills/seo/assets/snippets/sitemap-urlset-example.xml +72 -0
  190. package/skills/seo/assets/snippets/sitemap.xml +36 -0
  191. package/skills/seo/references/antipatterns.md +66 -0
  192. package/skills/seo/references/audit-checklist.md +319 -0
  193. package/skills/seo/references/content-seo.md +204 -0
  194. package/skills/seo/references/eeat-medical.md +219 -0
  195. package/skills/seo/references/measurement.md +250 -0
  196. package/skills/seo/references/on-page.md +214 -0
  197. package/skills/seo/references/page-templates.md +56 -0
  198. package/skills/seo/references/stack-recipes.md +695 -0
  199. package/skills/seo/references/structured-data.md +487 -0
  200. package/skills/seo/references/technical-seo.md +296 -0
  201. package/skills/service-desk-conventions/SKILL.md +52 -0
  202. package/skills/service-desk-db-safety/SKILL.md +63 -0
  203. package/skills/service-desk-release/SKILL.md +61 -0
  204. package/skills/service-desk-testing/SKILL.md +61 -0
  205. package/skills/service-desk-ui/SKILL.md +52 -0
  206. package/skills/skills-router/SKILL.md +53 -0
  207. package/skills/skills-router/references/applying-skills.md +25 -0
  208. package/skills/skills-router/references/routing-matrix.md +52 -0
  209. package/skills/testing-strategy/SKILL.md +52 -0
  210. package/skills/ui-design-system/SKILL.md +50 -0
  211. package/skills/ui-design-system/references/accessibility-and-responsive.md +50 -0
  212. package/skills/ui-design-system/references/tokens-and-components.md +67 -0
  213. package/skills/ui-design-system/references/visual-qa.md +44 -0
  214. package/skills/web-research/SKILL.md +47 -0
  215. package/skills/web-research/references/answer-and-citations.md +60 -0
  216. package/skills/web-research/references/query-recipes.md +44 -0
  217. package/skills/wow-design/SKILL.md +89 -0
  218. package/skills/wow-design/assets/kit/README.md +195 -0
  219. package/skills/wow-design/assets/kit/assets/css/base.css +158 -0
  220. package/skills/wow-design/assets/kit/assets/css/components.css +1001 -0
  221. package/skills/wow-design/assets/kit/assets/css/fonts.css +73 -0
  222. package/skills/wow-design/assets/kit/assets/css/pages.css +737 -0
  223. package/skills/wow-design/assets/kit/assets/css/tokens.css +218 -0
  224. package/skills/wow-design/assets/kit/assets/fonts/LICENSE-golos-text.txt +93 -0
  225. package/skills/wow-design/assets/kit/assets/fonts/LICENSE-lora.txt +93 -0
  226. package/skills/wow-design/assets/kit/assets/fonts/LICENSE-unbounded.txt +93 -0
  227. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-400-normal.woff2 +0 -0
  228. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-500-normal.woff2 +0 -0
  229. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-600-normal.woff2 +0 -0
  230. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-700-normal.woff2 +0 -0
  231. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-400-normal.woff2 +0 -0
  232. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-500-normal.woff2 +0 -0
  233. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-600-normal.woff2 +0 -0
  234. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-700-normal.woff2 +0 -0
  235. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-italic.woff2 +0 -0
  236. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-normal.woff2 +0 -0
  237. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-500-normal.woff2 +0 -0
  238. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-600-normal.woff2 +0 -0
  239. package/skills/wow-design/assets/kit/assets/fonts/lora-latin-400-normal.woff2 +0 -0
  240. package/skills/wow-design/assets/kit/assets/fonts/lora-latin-500-normal.woff2 +0 -0
  241. package/skills/wow-design/assets/kit/assets/fonts/lora-latin-600-normal.woff2 +0 -0
  242. package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-400-normal.woff2 +0 -0
  243. package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-500-normal.woff2 +0 -0
  244. package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-600-normal.woff2 +0 -0
  245. package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-400-normal.woff2 +0 -0
  246. package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-500-normal.woff2 +0 -0
  247. package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-600-normal.woff2 +0 -0
  248. package/skills/wow-design/assets/kit/assets/js/kit.js +550 -0
  249. package/skills/wow-design/assets/kit/pages/dashboard.html +539 -0
  250. package/skills/wow-design/assets/kit/pages/hospital.html +430 -0
  251. package/skills/wow-design/assets/kit/showcase.html +1164 -0
  252. package/skills/wow-design/assets/scripts/LICENSE-axe-core.txt +362 -0
  253. package/skills/wow-design/assets/scripts/LICENSE-playwright-core.txt +202 -0
  254. package/skills/wow-design/assets/scripts/README.md +312 -0
  255. package/skills/wow-design/assets/scripts/audit.mjs +1200 -0
  256. package/skills/wow-design/assets/scripts/capture.mjs +337 -0
  257. package/skills/wow-design/assets/scripts/package.json +30 -0
  258. package/skills/wow-design/references/anti-patterns.md +252 -0
  259. package/skills/wow-design/references/critique-rubric.md +262 -0
  260. package/skills/wow-design/references/design-brief-template.md +48 -0
  261. package/skills/wow-design/references/inspiration.md +203 -0
  262. package/skills/wow-design/references/presets.md +99 -0
  263. package/skills/wow-design/references/principles.md +371 -0
  264. package/skills/wow-design/references/quick-presets.md +50 -0
  265. package/skills/wow-design/references/report-template.md +21 -0
  266. package/skills/wow-design/references/stack-recipes.md +96 -0
  267. package/skills/wow-design/references/visual-qa.md +82 -0
  268. package/skills/wow-design/references/wow-levers.md +43 -0
  269. package/tools/skill-cost.mjs +76 -0
@@ -0,0 +1,99 @@
1
+ # Пресеты AURORA — как выбрать и как настроить
2
+
3
+ > Часть навыка wow-design. ≈2.7k токенов. Читать, когда: выбираешь пресет и настраиваешь
4
+ > палитру/композицию под бренд.
5
+
6
+ > Все пресеты уже реализованы в `assets/kit/assets/css/tokens.css`: переключаются атрибутом
7
+ > `<html data-preset="...">`, тема — `<html data-theme="light|dark">`.
8
+ > Не создавай новый визуальный язык без причины — выбери пресет и адаптируй акцент/шрифт под бренд.
9
+
10
+ ## Как выбрать за 60 секунд
11
+ 1. Кто пользователь и что важно? (доверие / скорость / плотность / эмоция / статус)
12
+ 2. Это «бренд-история» (лендинг, клиника, культура) или «рабочий инструмент» (дашборд, кабинет)?
13
+ 3. Есть ли бренд-цвета? Если да — акцент берём из бренда, остальное из ближайшего пресета.
14
+ 4. Нужна ли тёмная тема по умолчанию? (product/DevOps — да → `graphite`)
15
+
16
+ ---
17
+
18
+ ## 1. `aurora` — премиальная клиника / культура / сервис
19
+ - **Настроение:** тихая роскошь, человечность, доверие, «дорого, но не кричит».
20
+ - **Кому:** медицина, wellness, образование, премиум-услуги, бренд-лендинги.
21
+ - **Палитра (light):** бумага `#F4F1EA`, поверхность `#FFFFFF`, чернила `#14181A`, изумруд `#0E6E5E`,
22
+ медь `#B36A43`, линии `#DCD6CA`.
23
+ - **Палитра (dark):** фон `#0B0F0F`, поверхность `#121718`, мята `#5AD2B7`, медь `#E09A70`.
24
+ - **Шрифты:** display — **Lora** (serif, 500), body — **Golos Text**.
25
+ - **Формы:** радиус карточек 14px, контролов 10px, волосяные линии, слоистые тени.
26
+ - **Signature-элементы:** крупные редакционные цифры, печать/эмблема, монограммы вместо фото,
27
+ капс-надзаголовки с линией, тонкая бумажная текстура.
28
+ - **Композиция hero:** 7/5, слева kicker → H1 в 2–3 строки → lead → 2 CTA; справа — «документ/печать»
29
+ или вертикальная колонка цифр на волосяной сетке.
30
+ - **Do:** много воздуха, спокойный тон, один изумрудный акцент, медь только в деталях.
31
+ - **Don't:** яркие градиенты, неон, стоковые фото улыбающихся врачей, «медицинский синий» по умолчанию.
32
+
33
+ ## 2. `graphite` — продукт / SaaS / дашборд / админка
34
+ - **Настроение:** точность, плотность, технологичность, контроль.
35
+ - **Кому:** Service Desk, CRM, аналитика, dev-tools, панели управления.
36
+ - **Палитра (light):** фон `#F4F6F5`, поверхность `#FFFFFF`, чернила `#0F1414`, акцент `#0E7C66`,
37
+ мятный `#6EE7C8` для тёмной.
38
+ - **Палитра (dark):** фон `#080B0B`, поверхность `#0F1414`, мята `#6EE7C8`, линии `#1F2926`.
39
+ - **Шрифты:** display — **Unbounded** (осторожно, 1–2 места), body — **Golos Text**, цифры — tabular.
40
+ - **Формы:** радиусы 4–11px, плотные отступы, границы вместо теней, аккуратные hover-состояния.
41
+ - **Signature-элементы:** KPI-цифры с дельтой и sparkline, sticky-таблица, командная строка ⌘K,
42
+ тонкая сетка графиков, статус-точки.
43
+ - **Композиция:** сайдбар 240–260px, топбар 64px, контентная сетка 12 колонок, 8px ритм, таблицы
44
+ с правыми числами, панель активности справа.
45
+ - **Do:** данные прежде декора, состояния всего, читаемые таблицы, tabular-nums, один акцент.
46
+ - **Don't:** огромные радиусы, «карточки ради карточек», тени поверх данных, пестрота статусов.
47
+
48
+ ## 3. `editorial` — медиа / истории / бренд-лендинг
49
+ - **Настроение:** журнал, характер, смелость, крупная типографика.
50
+ - **Кому:** новости, блог, культура, портфолио, лендинг с историей.
51
+ - **Палитра (light):** бумага `#F8F5EF`, чернила `#171310`, вермильон `#C8442A`, линии `#DCD4C7`.
52
+ - **Палитра (dark):** фон `#121110`, поверхность `#1A1613`, коралл `#F06A4D`.
53
+ - **Шрифты:** display — **Lora** с крупным кеглем, body — Golos Text; допустим italic для цитат.
54
+ - **Формы:** почти прямоугольные (2–5px), жирные волосяные линии, много чёрного текста.
55
+ - **Signature-элементы:** гигантские заголовки (clamp 3–6rem), номерные рубрики, drop cap в первом
56
+ абзаце, цитаты на всю ширину, асимметричные фото-блоки (в нашем случае — типографические).
57
+ - **Do:** контраст масштабов, строгая сетка, смелые переносы, крупные отступы между секциями.
58
+ - **Don't:** мелкие заголовки, «SaaS-карточки», пастель, всё центрировать.
59
+
60
+ ## 4. `warm` — человечный сервис / забота / образование
61
+ - **Настроение:** тепло, спокойствие, дружелюбие, «свои люди».
62
+ - **Кому:** школы/курсы, детские сервисы, ЗОЖ, соцпроекты, сервис для сотрудников.
63
+ - **Палитра (light):** крем `#FBF5EC`, чернила `#241B14`, терракота `#B85C38`, шалфей `#6C7A5B`.
64
+ - **Палитра (dark):** фон `#14100D`, поверхность `#1D1712`, акцент `#E8835C`.
65
+ - **Шрифты:** display — Lora, body — Golos Text.
66
+ - **Формы:** крупные радиусы 12–24px (осознанно мягко), скруглённые иконки, тёплые тени.
67
+ - **Signature-элементы:** мягкие плашки-акценты, рукописные подчёркивания (SVG), крупные эмпатичные
68
+ цитаты, фото-иллюстрации (если есть контент), «шаги» с крупными номерами.
69
+ - **Do:** дружелюбный copy, округлость, тёплый фон, простые формы.
70
+ - **Don't:** корпоративный холод, острые углы, кислотные цвета, перегруз данными.
71
+
72
+ ## 5. `swiss` — строгий корпоративный / B2B / отчёты
73
+ - **Настроение:** дисциплина, ясность, сдержанность, точность.
74
+ - **Кому:** банки/страхование, промышленность, госуслуги, документы, отчёты.
75
+ - **Палитра (light):** белый `#FFFFFF`, чёрный `#0E0E0E`, сигнальный красный `#E0301E`, серые линии.
76
+ - **Палитра (dark):** фон `#0D0D0D`, поверхность `#151515`, акцент `#FF5B47`.
77
+ - **Шрифты:** display — **Golos Text** 700 с плотным трекингом, body — Golos Text.
78
+ - **Формы:** радиусы 1–4px, жёсткая сетка, минимум декора, максимум выравнивания.
79
+ - **Signature-элементы:** толстые линии-разделители, номера секций, таблицы, крупные цифры,
80
+ красные акценты только на действиях и статусах.
81
+ - **Do:** строгая сетка, монохром + один красный, крупные поля, читаемые таблицы.
82
+ - **Don't:** декор, тени, мягкие радиусы, пастель, «игривые» иллюстрации.
83
+
84
+ ---
85
+
86
+ ## Адаптация под бренд (если есть фирменные цвета)
87
+ Меняй **только** эти переменные, остальное оставь из пресета:
88
+ ```css
89
+ :root{
90
+ --accent:#<бренд>; /* основной акцент */
91
+ --accent-hover:#<темнее>;
92
+ --accent-press:#<ещё темнее>;
93
+ --accent-soft:#<очень светлый тон акцента>;
94
+ --accent-ink:#<тёмный тон для текста на soft>;
95
+ --accent-contrast:#<текст на акценте: белый или тёмный>;
96
+ }
97
+ ```
98
+ Правила: контраст `accent` ↔ `accent-contrast` ≥ 4.5:1; `accent-soft` — это фон для бейджей/подсветок,
99
+ текст на нём — `accent-ink`; не использовать акцент для больших заливок, только для действий/статусов/линий.
@@ -0,0 +1,371 @@
1
+ # 01 · Принципы ремесла — 76 правил
2
+
3
+ > Часть навыка wow-design. ≈11.5k токенов. Читать, когда: нужны точные числа ремесла — сетка,
4
+ > типографика, цвет, тени, motion, состояния, адаптив, доступность.
5
+
6
+ > Рабочий документ для системы WOW-дизайна (DSH). Читать перед вёрсткой и во время критики.
7
+ > Каждое правило — **что делать → как → типичная ошибка**. Все значения совместимы с токенами
8
+ > AURORA (`assets/kit/assets/css/tokens.css`): отступы `--sp-*`, типографика `--text-*`,
9
+ > строка `--measure`, движение `--dur*`/`--ease*`, фокус `--focus-ring`, радиусы `--radius-*`.
10
+ > Опирается на практику Linear, Stripe, Vercel, Apple, Airbnb, Raycast, Framer, Notion, Aesop
11
+ > и крупных клиник (Mayo, Cleveland, Charité, One Medical) — своими словами, без цитат.
12
+
13
+ ## A. Иерархия и композиция
14
+
15
+ **P01. Один главный акцент на экран.** Взгляд должен иметь одну точку притяжения — заголовок или primary-CTA.
16
+ → Как: primary-кнопка одна на секцию; всё остальное — secondary/ghost; акцентный цвет ≤10% площади.
17
+ ✗ Ошибка: две равные яркие кнопки в hero — пользователь не знает, куда нажать.
18
+
19
+ **P02. Не больше трёх уровней иерархии.** Primary (H1/CTA) → secondary (подзаголовок, lead) → tertiary (подписи, мета).
20
+ → Как: различие по размеру ≥1.25×, по контрасту — ink → ink-2 → muted; не 5 «почти одинаковых» уровней.
21
+ ✗ Ошибка: все тексты 16–18px, различаются только жирностью — «серая каша».
22
+
23
+ **P03. Контраст масштабов обязателен.** Display 56–96px против служебного 11–13px; body 16–18px.
24
+ → Как: AURORA `--display-l/xl` + `.eyebrow` (11–12px, трекинг .14em); не «всё 16px».
25
+ ✗ Ошибка: H1 32px и body 18px — заголовок не звучит, страница выглядит как документ.
26
+
27
+ **P04. Маршрут взгляда проектируется, а не получается.** Z-паттерн для лендинга, F/скан для текста; CTA — в конце маршрута.
28
+ → Как: kicker → H1 → lead → 2 CTA → proof-цифры → визуальный якорь; каждую секцию начинать с левого верхнего угла.
29
+ ✗ Ошибка: CTA спрятан в середине текста, а главный акцент — декоративная картинка.
30
+
31
+ **P05. Асимметрия вместо 50/50.** Пропорции 7/5 или 8/4 дают «редакционность»; идеальная симметрия — только для форм и модалок.
32
+ → Как: `grid-template-columns:minmax(0,7fr) minmax(0,5fr)`; текст 5–6 колонок, визуал 6–7.
33
+ ✗ Ошибка: hero 50/50 с двумя одинаковыми половинами — выглядит как шаблон.
34
+
35
+ **P06. Близость сильнее рамок.** Элементы одной группы ближе друг к другу, чем к соседним группам.
36
+ → Как: внутри группы 8–16px, между группами 32–64px; убрать рамку, если хватает воздуха.
37
+ ✗ Ошибка: карточки с рамкой и одинаковым отступом внутри и снаружи — границы групп не читаются.
38
+
39
+ **P07. Одна signature-деталь.** Запоминается одна вещь: крупные редакционные цифры, номерные секции, монограмма, вертикальный лейбл, необычный разделитель.
40
+ → Как: выбрать 1 деталь и повторить в 2–3 местах; всё остальное — спокойно.
41
+ ✗ Ошибка: пять «фишек» сразу (градиент + блоб + стекло + 3D + карусель) — визуальный шум.
42
+
43
+ ## B. Типографика
44
+
45
+ **P08. Только модульная шкала.** Размеры берутся из ряда, а не «на глаз».
46
+ → Как: `--text-2xs…--text-5xl` (11/12/14/16/17/20/24/30/36/44) + display clamp; коэффициент 1.125–1.25 для UI, 1.25–1.333 для лендинга.
47
+ ✗ Ошибка: 13/15/17/19/23px — непредсказуемый ритм и «дрожащая» иерархия.
48
+
49
+ **P09. Body не меньше 16px.** На мобильном 16–18px; 14–15px допустимо только в плотном продуктовом UI (таблицы, сайдбар).
50
+ → Как: `font-size:var(--text-md)` (16px), на мобиле не уменьшать; line-length контролировать через `--measure`.
51
+ ✗ Ошибка: 14px body и 12px подписи на лендинге — читается как «мелкий шрифт в договоре».
52
+
53
+ **P10. Интерлиньяж по роли текста.** Body 1.5–1.65; заголовки 1.05–1.2; display 0.95–1.05; мелкий текст 1.4+.
54
+ → Как: `--lh-relaxed:1.65` для body, `--lh-tight:1.05` для H1; крупный serif требует больше воздуха (+0.02).
55
+ ✗ Ошибка: line-height 1.2 у абзаца — строки слипаются; 1.8 у заголовка — заголовок «рассыпается».
56
+
57
+ **P11. Длина строки 60–72ch.** Комфортный диапазон 45–75 знаков; lead — ≤52ch; подписи — ≤48ch.
58
+ → Как: `max-width:var(--measure)` (66ch) для body, `--measure-narrow` (48ch) для лидов; не задавать фиксированный px.
59
+ ✗ Ошибка: текст на всю ширину 1360px — глаз теряет строку, чтение падает.
60
+
61
+ **P12. Трекинг зависит от размера.** Крупный display: −0.015…−0.03em; body: −0.006em; капс-лейблы: +0.08…+0.14em.
62
+ → Как: `--display-tracking` в пресетах; `.eyebrow{letter-spacing:.14em}`; не трекать body положительно.
63
+ ✗ Ошибка: letter-spacing .1em у body — текст «рассыпается», особенно на кириллице.
64
+
65
+ **P13. 2–3 начертания максимум.** Обычно display + body; третий — моно для кода/ID.
66
+ → Как: 400/500/600 для текста; 700 — только в swiss-пресете; не использовать 300 на светлом фоне.
67
+ ✗ Ошибка: пять жирностей и три семейства на одном экране.
68
+
69
+ **P14. Заголовки балансируются, абзацы — нет.** `text-wrap:balance` для H1–H2, `pretty` для body; без висячих предлогов и «сирот».
70
+ → Как: `h1,h2{text-wrap:balance}`; в управляемом контенте — `&nbsp;` после коротких предлогов; не использовать `<br>` для «красоты».
71
+ ✗ Ошибка: в H1 последняя строка — одно слово; в абзаце одинокая строка на всю ширину.
72
+
73
+ **P15. Числа — табличные.** В таблицах, таймерах, KPI, ценах: `font-variant-numeric:tabular-nums`.
74
+ → Как: `.tnum{font-variant-numeric:tabular-nums}`; моно (`--font-mono`) для ID, кодов, ⌘K-подсказок.
75
+ ✗ Ошибка: пропорциональные цифры — колонки «пляшут», дельты не выравниваются.
76
+
77
+ **P16. Пары шрифтов — по контрасту, не по сходству.** Serif display + гротеск body (AURORA); либо один гротеск в двух ролях.
78
+ → Как: Lora/Unbounded для display, Golos Text для body; не скрещивать два похожих геометр-гротеска.
79
+ ✗ Ошибка: два похожих sans в заголовке и тексте — выглядит как ошибка, а не приём.
80
+
81
+ **P17. Капс — только для коротких лейблов.** До 3 слов: надзаголовок, категория, табличный заголовок; не для абзацев.
82
+ → Как: `.eyebrow`/`.caps` — 11–12px, вес 600, трекинг .12–.14em, цвет muted.
83
+ ✗ Ошибка: длинный заголовок капсом — читается по буквам и выглядит дёшево.
84
+
85
+ **P18. Соседние уровни шкалы различимы.** Отношение размеров ≥1.2×, иначе уровень не читается.
86
+ → Как: 16→20→24→30→36; не ставить 16 и 17 рядом как разные уровни.
87
+ ✗ Ошибка: 18px H3 и 16px body — иерархия почти не видна.
88
+
89
+ **P19. Кириллица требует проверки.** Тестировать «ё, й, Щ, Д, Ж», кавычки-ёлочки, длинные слова; не переносить латинские типографские приёмы слепо.
90
+ → Как: `lang="ru"`, `«ёлочки»`, длинное тире, неразрывный пробел перед единицами; проверить переносы в узких колонках.
91
+ ✗ Ошибка: латинские кавычки и дефис вместо тире; «рваться» слова в заголовке.
92
+
93
+ ## C. Цвет
94
+
95
+ **P20. Правило 60-30-10.** 60% — нейтральный фон, 30% — поверхности и текст, 10% — акцент.
96
+ → Как: фон `--bg`, панели `--surface/--bg-alt`, акцент — только кнопки, ссылки, активные состояния, 1–2 акцента на экран.
97
+ ✗ Ошибка: акцентные блоки на 30–40% площади — «пёстро» и дёшево.
98
+
99
+ **P21. Один акцент + нейтрали + редкий тёплый тон.** В AURORA второй тон — медь (`--copper`), ≤2% площади: линия, цифра, хайлайт.
100
+ → Как: медь для деталей, не для кнопок; не вводить третий акцент «для красоты».
101
+ ✗ Ошибка: четыре цвета-акцента в одном интерфейсе, каждый «важный».
102
+
103
+ **P22. Оттенки генерируются в OKLCH.** Hover/press — сдвиг светлоты L на ±0.04–0.06 при той же хроме; не «подбирать hex на глаз».
104
+ → Как: `oklch()`/`color-mix(in oklab, …)`; в токенах уже есть пары `--accent/-hover/-press`.
105
+ ✗ Ошибка: hover-цвет случайно уходит в другой оттенок (изумруд → бирюза → синий).
106
+
107
+ **P23. Контраст — порог, а не вкус.** Текст ≥4.5:1; крупный (≥24px или ≥18.66px bold) ≥3:1; иконки/границы контролов ≥3:1.
108
+ → Как: проверять пары WebAIM Contrast Checker; не «серый на сером»; `--faint` — только декор.
109
+ ✗ Ошибка: подписи `--faint` на `--bg` (2.35:1) — формально «видно», фактически нечитаемо.
110
+
111
+ **P24. Не только цветом.** Статус дублируется текстом, иконкой или формой: «Ошибка» + иконка + цвет, не только красный.
112
+ → Как: badge = точка/иконка + подпись; в таблицах статус текстом, цвет — фоном; проверить grayscale.
113
+ ✗ Ошибка: красная/зелёная точка без подписи — не работает для 8% мужчин и в ч/б.
114
+
115
+ **P25. Поверхности отделяются светлотой, а не только тенью.** Разница L между `--bg` и `--surface` 3–6%; в тёмной теме — светлее с уровнем.
116
+ → Как: `--bg:#F4F1EA` → `--surface:#FFFFFF`; `--surface-2` для вложенных панелей; hairline по краю.
117
+ ✗ Ошибка: белая карточка на белом фоне без границы — «парит» непонятно где.
118
+
119
+ **P26. Акцент — для действия, не для декора.** Ссылки — `--accent-ink` (контрастнее), крупные акцентные заливки — только CTA/активные состояния.
120
+ → Как: в editorial/warm-пресетах `--accent` как мелкий текст даёт 4.19–4.47:1 — для ссылок брать `--accent-ink`.
121
+ ✗ Ошибка: акцентный цвет у всех заголовков — акцент перестаёт быть акцентом.
122
+
123
+ **P27. Семантика статусов фиксирована.** success/warning/danger/info + soft-фон; не менять значение цвета между экранами.
124
+ → Как: пары `--danger`/`--danger-soft`, `--success`/`--success-soft`; иконка + текст + цвет.
125
+ ✗ Ошибка: «предупреждение» оранжевым на одном экране и синим на другом.
126
+
127
+ **P28. Grayscale-тест.** Убрать цвет: иерархия, границы, статусы должны остаться понятными.
128
+ → Как: DevTools → Rendering → Grayscale (или фильтр `grayscale(1)`); если всё «слиплось» — добавить контраст/линии/вес.
129
+ ✗ Ошибка: единственное различие блоков — цвет фона; в ч/б страница превращается в кашу.
130
+
131
+ ## D. Сетка, воздух, выравнивание, оптика
132
+
133
+ **P29. 12 колонок, контейнер 1200–1360.** Gutter `clamp(20px,4.5vw,56px)`, контент — в `--container`/`--container-wide`.
134
+ → Как: `.container`/`.container-wide` из base.css; не задавать max-width вручную на каждой секции.
135
+ ✗ Ошибка: 5 разных ширин контента на одной странице — левый край «гуляет».
136
+
137
+ **P30. Одна шкала отступов.** Только `--sp-*`: 4/8/12/16/24/32/48/64/96/128; никаких 13/17/22/27px.
138
+ → Как: `gap:var(--sp-5)`, `padding-block:var(--section-y)`; если нужного нет — брать соседний токен, не выдумывать.
139
+ ✗ Ошибка: «на глаз» 18px здесь, 22px там — страница выглядит неаккуратной без явной причины.
140
+
141
+ **P31. Вертикальный ритм секций.** Desktop 96–140px, mobile 56–72px; между заголовком и контентом — 24–40px.
142
+ → Как: `--section-y:clamp(64px,8vw,128px)`; чередовать фон секций (`bg`/`surface`/`bg-alt`), а не рамки.
143
+ ✗ Ошибка: одинаковые 24px между всеми блоками — нет «дыхания» и группировки.
144
+
145
+ **P32. Воздух важнее рамок.** Сомневаешься — убери border и добавь padding.
146
+ → Как: 24–32px внутри карточки, 48–64px между блоками; рамка только когда нужна граница данных (таблица).
147
+ ✗ Ошибка: каждая карточка в рамке и с тенью — «сетка клеток», а не композиция.
148
+
149
+ **P33. Выравнивание по оптике, а не по математике.** Иконки — по оптическому центру строки, кавычки — выступают за поле, буллеты — висят в отступе.
150
+ → Как: `transform:translateY(1px)` для иконки 20px в строке 16px; `hanging-punctuation` где поддерживается; visually center в круге.
151
+ ✗ Ошибка: иконка «на 2px ниже» текста — заметно на всех кнопках.
152
+
153
+ **P34. Оптические поправки типографики.** Крупный display: чуть плотнее трекинг и меньше line-height; serif — на 1–2% больше воздуха; цифры — выровнены по базовой линии.
154
+ → Как: `--display-tracking` −0.018em, `--lh-tight`; для Lora H1 допускать line-height 1.02–1.06.
155
+ ✗ Ошибка: одинаковые line-height и tracking у 14px и 96px — крупный текст «разваливается».
156
+
157
+ **P35. Выравнивание по одной из линий.** Каждый элемент выровнен по левому краю колонки, центру или правому краю чисел; «почти выровнено» запрещено.
158
+ → Как: grid + `align-items`, а не margin-left; правые числа в таблицах; центр — только для коротких блоков.
159
+ ✗ Ошибка: три карточки с разной высотой заголовков и «плавающими» кнопками.
160
+
161
+ **P36. Hairline вместо рамок.** Разделители 1px `--line` (в dark — `--line`), для групп — только горизонтальные линии, не «коробки».
162
+ → Как: `.rule{border-top:var(--hairline)}`; в таблицах — линии строк, без вертикальной сетки.
163
+ ✗ Ошибка: сетка 1px со всех сторон — интерфейс выглядит как Excel 2003.
164
+
165
+ ## E. Глубина
166
+
167
+ **P37. Сначала бордер, потом тень.** Тень означает реальный уровень: dropdown, modal, sticky-элемент; статичная карточка — hairline.
168
+ → Как: карточки — `border:var(--hairline)`; меню/модалки — `--shadow-md/lg`; не «тень на всём».
169
+ ✗ Ошибка: 20 карточек с одинаковой большой тенью — «пластиковый» вид и потеря уровней.
170
+
171
+ **P38. Слоистые тени из 2 слоёв.** Малый offset + большой blur с низкой alpha; без чёрного 30–50%.
172
+ → Как: `--shadow-sm/md/lg` из tokens.css; светлая тема — rgb(20 24 26 / .06–.35), тёмная — глубже.
173
+ ✗ Ошибка: `box-shadow:0 0 30px rgba(0,0,0,.5)` — «тень из 2010».
174
+
175
+ **P39. Два уровня теней максимум.** Один для всплывающих, один для модальных; остальное — границы и фон.
176
+ → Как: не смешивать 6 разных теней; в тёмной теме усилить alpha, а не размытие.
177
+ ✗ Ошибка: тени разной силы на соседних компонентах — «грязь» под элементами.
178
+
179
+ **P40. Радиус по смыслу.** Контролы 8–12px, карточки 12–18px, модалки 16–20px, pill — только теги/чипы/аватары.
180
+ → Как: `--radius-control` (8–12), `--radius-card` (11–18), `--radius-pill` для бейджей; не всё 24–32px.
181
+ ✗ Ошибка: «rounded-3xl» на кнопках, полях и карточках — AI-шаблонный вид.
182
+
183
+ **P41. Фокус — кольцо, не тень.** 2px акцент + offset 2–3px, видимый на любом фоне.
184
+ → Как: `:focus-visible{outline:2px solid var(--accent);outline-offset:3px}` или `box-shadow:var(--focus-ring)`.
185
+ ✗ Ошибка: `outline:none` без замены — клавиатурная навигация «слепая».
186
+
187
+ ## F. Motion
188
+
189
+ **P42. Длительность по типу действия.** 120–180ms — micro (hover, кнопки), 180–260ms — UI (табы, выпадашки), 280–400ms — overlay (модалки), 500–700ms — reveal при скролле.
190
+ → Как: `--dur-fast`/`--dur`/`--dur-slow`/`--dur-reveal`; длиннее 400ms — только один раз при появлении секции.
191
+ ✗ Ошибка: 600ms hover на кнопке — интерфейс «тормозит»; 80ms — движение не читается.
192
+
193
+ **P43. Один easing на интерфейс.** Стандарт — `cubic-bezier(.2,.7,.2,1)`; вход — ease-out, выход — ease-in.
194
+ → Как: `--ease`, `--ease-out`; не смешивать bounce/elastic с деловым UI.
195
+ ✗ Ошибка: у каждого компонента свой easing — движение «дёрганое».
196
+
197
+ **P44. Анимировать transform и opacity.** Не width/height/top/left — они дёргают layout.
198
+ → Как: `translateY(12px)` + `opacity`; для раскрытия — `grid-template-rows` или scale, но аккуратно.
199
+ ✗ Ошибка: анимация `height:auto` — скачки контента и лаги на мобильном.
200
+
201
+ **P45. Reveal — сдержанный.** translateY 12–16px, opacity 0→1, stagger 60–80ms, не больше 4–6 элементов; повторно не проигрывать.
202
+ → Как: `.reveal` + `IntersectionObserver`, `data-delay` 1–5; отключать в reduced-motion.
203
+ ✗ Ошибка: каждый абзац «влетает» с поворотом и задержкой 1.5s — цирк и ожидание.
204
+
205
+ **P46. Никаких бесконечных и декоративных анимаций.** Движение только в ответ на действие или появление контента.
206
+ → Как: hover — фон/сдвиг 1–2px/цвет; не крутить фоновые градиенты, не «дышать» логотипом.
207
+ ✗ Ошибка: пульсирующие блобы и бегущие полоски — отвлекают и жгут батарею.
208
+
209
+ **P47. prefers-reduced-motion — обязательно.** Отключить reveal, hover-сдвиги, parallax; scroll-behavior:auto.
210
+ → Как: media-query из base.css уже есть; проверить, что контент виден без JS-анимации.
211
+ ✗ Ошибка: при reduced-motion секции остаются с `opacity:0` — контент пропадает.
212
+
213
+ ## G. Иконки, изображения, иллюстрации
214
+
215
+ **P48. Один набор иконок.** Inline SVG, stroke 1.5–1.6, размеры 20/24, скругления концов; эмодзи в UI запрещены.
216
+ → Как: общий `<symbol>`-спрайт или повторяющийся паттерн; `stroke-linecap:round`, `stroke-linejoin:round`.
217
+ ✗ Ошибка: смесь эмодзи, иконок с разной толщиной и «иконок-облачков» из разных наборов.
218
+
219
+ **P49. Иконка не заменяет текст.** В навигации и CTA — подпись; icon-only — только для очевидных действий (закрыть, поиск) с `aria-label`.
220
+ → Как: `<button aria-label="Закрыть">…<svg aria-hidden="true">`; декоративные иконки — `aria-hidden`.
221
+ ✗ Ошибка: ряд непонятных иконок без подписей; скринридер читает «button».
222
+
223
+ **P50. Изображения с фиксированными пропорциями.** 4:5, 3:2, 16:9, 1:1; `object-fit:cover`; `width/height` или `aspect-ratio` против layout shift.
224
+ → Как: `aspect-ratio:16/9` + `object-fit:cover`; alt описывает смысл, декоративное — `alt=""`.
225
+ ✗ Ошибка: фото «прыгает» при загрузке; alt = «image1.jpg».
226
+
227
+ **P51. Визуал строится из типографики и геометрии.** В AURORA нет внешних фото: SVG-диаграммы, монограммы, крупные цифры, номерные секции, бумажное зерно 2–3%.
228
+ → Как: `--grain-opacity:.022`; SVG-графики с `currentColor`; монограмма = инициалы в hairline-рамке.
229
+ ✗ Ошибка: стоковые улыбающиеся люди и «командные» фото — мгновенно дешёвый вид.
230
+
231
+ ## H. Текст и микрокопирайт
232
+
233
+ **P52. Заголовок продаёт результат.** 3–8 слов, конкретная польза; не «Добро пожаловать» и не название отдела.
234
+ → Как: «Запись к врачу за 2 минуты» вместо «Онлайн-запись»; проверить: понятно ли, что получит человек.
235
+ ✗ Ошибка: «Инновационные решения для вашего здоровья» — ноль информации.
236
+
237
+ **P53. Конкретика вместо прилагательных.** Числа, сроки, имена, проценты; «качественный» и «профессиональный» — удалить.
238
+ → Как: «94% заявок закрыты в SLA», «4 врача, 12 направлений»; источники цифр — если это демо, не выдумывать чрезмерно.
239
+ ✗ Ошибка: «команда профессионалов с многолетним опытом» — не верифицируемо и не запоминается.
240
+
241
+ **P54. Кнопки — глагол + объект.** 1–3 слова, sentence case: «Записаться на приём», «Скачать отчёт»; не «Отправить» в одиночку и не CAPS.
242
+ → Как: primary — действие; secondary — альтернатива; destructive — «Удалить заявку», с подтверждением.
243
+ ✗ Ошибка: «OK», «Далее», «Отправить» без контекста; CAPS-кнопки в русском UI.
244
+
245
+ **P55. Ошибки объясняют и чинят.** Что случилось + что сделать + где: «Не удалось сохранить: нет соединения. Проверьте сеть и повторите».
246
+ → Как: текст рядом с полем, `aria-invalid`, `aria-describedby`; не «Что-то пошло не так».
247
+ ✗ Ошибка: toast «Error 500» без пути решения и без сохранения введённого.
248
+
249
+ **P56. Пустые состояния — часть дизайна.** Что здесь будет, почему пусто и один CTA; для ошибок — альтернативный путь.
250
+ → Как: иконка/монограмма + 1–2 строки + кнопка; не пустой белый экран и не «Нет данных».
251
+ ✗ Ошибка: таблица «No data» без объяснения, что делать дальше.
252
+
253
+ **P57. Русская типографика.** «Ёлочки», длинное тире, неразрывные пробелы перед единицами и после коротких предлогов; без lorem ipsum и англицизмов без нужды.
254
+ → Как: «5 000 ₽», «с 9:00 до 18:00», «врач‑кардиолог»; проверить переносы и «сироты».
255
+ ✗ Ошибка: "Lorem ipsum", кавычки “...”, дефис вместо тире, «5000 рублей» без разрядов.
256
+
257
+ ## I. Состояния
258
+
259
+ **P58. Семь состояний у каждого интерактива.** default / hover / focus-visible / active / disabled / loading / error (для полей).
260
+ → Как: показывать все в showcase; для кнопок — hover+focus+active+disabled+loading; поля — +error.
261
+ ✗ Ошибка: только default и hover — интерфейс «оживает» непредсказуемо.
262
+
263
+ **P59. Hover — микроизменение без сдвига layout.** Фон на 4–6% темнее/светлее, бордер, сдвиг 1–2px; 160–200ms.
264
+ → Как: `background:color-mix(in oklab,var(--ink) 5%,var(--surface))`; подчёркивание ссылки; не менять размеры.
265
+ ✗ Ошибка: карточка «прыгает» на 8px и меняет высоту — layout дёргается.
266
+
267
+ **P60. Focus-visible виден всегда.** Не удалять outline без равноценной замены; фокус заметен на фоне любого цвета.
268
+ → Как: `--focus-ring` (2px + offset); проверить Tab по всей странице.
269
+ ✗ Ошибка: фокус только на кнопках, поля и ссылки «слепые».
270
+
271
+ **P61. Disabled — очевидно неактивный.** opacity 45–55%, `cursor:not-allowed`, без hover/тени; причина недоступности — текст рядом.
272
+ → Как: `[disabled]{opacity:.5;pointer-events:none}` + подсказка «Сначала выберите врача».
273
+ ✗ Ошибка: disabled-кнопка выглядит активной, а нажатие ничего не делает.
274
+
275
+ **P62. Loading повторяет геометрию.** Skeleton с теми же размерами/радиусами, shimmer 1.2–1.6s; spinner 16–20px локально, не на весь экран.
276
+ → Как: skeleton-блоки по сетке контента; `aria-busy="true"`; не блокировать всю страницу ради одной кнопки.
277
+ ✗ Ошибка: скелетон «не той» формы → контент прыгает при загрузке; вечный спиннер без текста.
278
+
279
+ **P63. Ошибка — рядом с источником.** Поле краснеет + текст ошибки + `aria-invalid`; не только цвет и не только toast.
280
+ → Как: `input[aria-invalid="true"]{border-color:var(--danger)}`; ошибка под полем 12–13px.
281
+ ✗ Ошибка: ошибки собраны вверху формы безымянным списком.
282
+
283
+ **P64. Empty / error / 403 / 404 — часть системы.** Стиль тот же, что у остальных экранов; есть объяснение и путь назад.
284
+ → Как: переиспользовать `.empty`/alert-компоненты; в 404 — поиск/ссылки на разделы.
285
+ ✗ Ошибка: страница 404 дефолтная браузерная или «белый экран».
286
+
287
+ ## J. Адаптив и мобильная композиция
288
+
289
+ **P65. Мобильная версия — другая композиция, а не сжатый desktop.** Меняется порядок, размеры, видимость декора.
290
+ → Как: stacking через `grid-template-columns:1fr`; hero — текст → CTA → proof → визуал; скрыть фоновую сетку.
291
+ ✗ Ошибка: desktop-сетка, ужатая до 390px, с 12px текстом и горизонтальным скроллом.
292
+
293
+ **P66. Тач-цели ≥44px.** Минимум WCAG — 24px, практика Apple — 44px; отступ между целями ≥8px; важные действия — в thumb-зоне.
294
+ → Как: `min-height:44px` у кнопок/ссылок меню; sticky CTA снизу на мобиле; не полагаться на hover.
295
+ ✗ Ошибка: иконки 16px без padding — промахнуться легко даже на 390px.
296
+
297
+ **P67. Таблицы скроллятся внутри контейнера.** `.table-wrap{overflow-x:auto}` + sticky первая колонка; страница не должна «ехать».
298
+ → Как: `min-width` таблицы, тень-подсказка у края, `overscroll-behavior-x:contain`.
299
+ ✗ Ошибка: таблица расширяет body → горизонтальный скролл всей страницы.
300
+
301
+ **P68. clamp() для типографики и отступов.** Плавное масштабирование без десяти брейкпоинтов; input font-size ≥16px против iOS-зума.
302
+ → Как: `font-size:clamp(1rem,1.2vw,1.125rem)`; на мобиле поля не 14px.
303
+ ✗ Ошибка: фиксированные 64px заголовки на 390px → 2–3 строки и обрезка.
304
+
305
+ **P69. Проверка на 390/768/1440 и 200% zoom.** Нет overflow-x, обрезанного текста, «прыжков» layout; брейкпоинты AURORA: ≥1200, 768–1199, 390–767.
306
+ → Как: `document.documentElement.scrollWidth > innerWidth` → искать виновника; zoom 200% для читаемости.
307
+ ✗ Ошибка: проверка только на 1440 — на мобиле «половина сайта за краем».
308
+
309
+ ## K. Тёмная тема
310
+
311
+ **P70. Тёмная тема — не инверсия.** Фон #0B–#14 (не #000), поверхности светлеют на 3–6% с уровнем, акцент светлее (L +0.15–0.2), тени глубже.
312
+ → Как: `[data-theme="dark"]` уже задаёт палитру; не генерировать автоматически `filter:invert`.
313
+ ✗ Ошибка: белый текст на чистом чёрном + кислотные акценты — «терминал», устают глаза.
314
+
315
+ **P71. Не чистый чёрный и не чистый белый.** Текст L≈0.93–0.95, фон L≈0.10–0.16; в AURORA `--ink:#F2EFE7`, `--bg:#0B0F0F`.
316
+ → Как: тёплый/холодный оттенок сохранять в обеих темах (у AURORA бумажная теплота); не `#fff/#000`.
317
+ ✗ Ошибка: `#FFFFFF` на `#000000` — максимальный контраст, но максимальная усталость.
318
+
319
+ **P72. Обе темы проверяются скриншотами.** Контраст AA, акцент читается, изображения/иллюстрации/градиенты не «ломаются», тени не исчезают.
320
+ → Как: переключатель темы в шапке; скриншоты light+dark для каждой ключевой страницы.
321
+ ✗ Ошибка: тёмная тема «на сдачу»: нечитаемые ссылки, белые SVG-подложки, тени-невидимки.
322
+
323
+ ## L. Доступность
324
+
325
+ **P73. Семантика — каркас.** Landmarks (`header/nav/main/footer`), один H1, порядок заголовков без пропусков, skip-link, `lang="ru"`.
326
+ → Как: семантические теги вместо div-кнопок; кнопка — `<button>`, ссылка — `<a>`; заголовки по уровням.
327
+ ✗ Ошибка: `<div onclick>` вместо кнопки — недоступно с клавиатуры и скринридера.
328
+
329
+ **P74. Клавиатура — полный сценарий.** Tab-порядок логичен, фокус видим, модалка держит фокус и закрывается Escape, после закрытия фокус возвращается.
330
+ → Как: focus trap (первый/последний элемент), `aria-modal="true"`, `role="dialog"`; вернуть фокус на инициатора.
331
+ ✗ Ошибка: модалка, из которой Tab уходит на страницу за ней.
332
+
333
+ **P75. Формы доступны.** `<label for>` у каждого поля, ошибки программно связаны, `autocomplete`, `required` + понятные подсказки.
334
+ → Как: не использовать placeholder вместо лейбла; видимый текст подсказки; `aria-describedby` на help/error.
335
+ ✗ Ошибка: поле с подписью только внутри placeholder — при вводе контекст теряется.
336
+
337
+ **P76. Гейт качества.** axe: 0 critical/serious; reduced-motion; alt/aria; контраст AA. Это блокер сдачи, а не «пожелание».
338
+ → Как: прогон `tools/design-qa/audit.mjs`; критичные нарушения исправляются до финального скриншота.
339
+ ✗ Ошибка: «потом поправим доступность» — потом не наступает.
340
+
341
+ ---
342
+
343
+ ## Проверено по токенам AURORA (можно ссылаться)
344
+
345
+ | Пара | Контраст | Вывод |
346
+ |---|---|---|
347
+ | `--ink` на `--bg` (light) | 15.8:1 | основной текст — отлично |
348
+ | `--ink-2` на `--bg` | 9.1:1 | body/lead — отлично |
349
+ | `--muted` на `--bg` | **4.28:1** | ниже AA для обычного текста → на `--bg` брать `--ink-2`, либо `--muted` только ≥18.7px bold |
350
+ | `--muted` на `--surface` | 4.83:1 | на белых панелях — ок |
351
+ | `--faint` на `--bg` | **2.35:1** | только декор (разделители, disabled-подписи), не смысловой текст |
352
+ | `--accent` на `--bg` (aurora) | 5.46:1 | ссылки/акцентный текст — ок |
353
+ | `--accent` на `--bg` (editorial / warm) | **4.47 / 4.19:1** | ниже AA → для текста `--accent-ink`, `--accent` — заливки/крупное |
354
+ | `--accent-contrast` на `--accent` | 6.16:1 (light), 8.95:1 (dark) | белый текст на кнопке — ок |
355
+ | `--line` / `--line-strong` на фоне | **1.3–1.9:1** | hairline-декор — ок; **границы полей ввода так нельзя** (нужно ≥3:1) → `color-mix(in oklab,var(--ink) 32%,transparent)` или `--muted` |
356
+ | `--copper` на `--bg` | 3.68:1 | только крупные акценты/иконки/линии, не мелкий текст |
357
+ | `--muted` на `--surface` (dark) | 5.95:1 | тёмная тема — ок |
358
+
359
+ ## Источники и инструменты (проверены)
360
+
361
+ - [WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/) — контраст, тач-цели, reduced-motion.
362
+ - [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/) — тач-цели 44pt, типографика, motion.
363
+ - [Material Design 3](https://m3.material.io/) — elevation, tonal surfaces, motion-система.
364
+ - [Refactoring UI](https://refactoringui.com/) — иерархия, цвет, тени, пустые состояния.
365
+ - [Butterick’s Practical Typography](https://practicaltypography.com/) — длина строки, интерлиньяж, трекинг.
366
+ - [Every Layout](https://every-layout.dev/) — сетки/интро-раскладки на CSS.
367
+ - [Easings](https://easings.net/) — кривые, не выдумывать cubic-bezier.
368
+ - [OKLCH Color Picker](https://oklch.com/) — генерация оттенков в перцептивном пространстве.
369
+ - [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) — проверка пар цветов.
370
+ - [Type Scale](https://type-scale.com/) — модульные шкалы.
371
+ - [Modern Font Stacks](https://modernfontstacks.com/) — системные стеки без внешних загрузок.
@@ -0,0 +1,50 @@
1
+ # Пресеты AURORA — выбор за 60 секунд
2
+
3
+ > Часть навыка wow-design. ≈1.6k токенов. Читать, когда: выбираешь пресет под задачу или нужны
4
+ > палитры light/dark, шрифты, формы и do/don't без чтения полного `presets.md`.
5
+
6
+ ## Как выбрать
7
+ 1. Кто пользователь и что важнее: доверие / скорость / плотность / эмоция / статус?
8
+ 2. Это бренд-история (лендинг, клиника, культура) или рабочий инструмент (дашборд, кабинет)?
9
+ 3. Есть бренд-цвета? Акцент берём из бренда, остальное — из ближайшего пресета.
10
+ 4. Нужна тёмная тема по умолчанию (продукт, DevOps)? → `graphite`.
11
+
12
+ ## Пять пресетов
13
+
14
+ | Пресет | Когда | Настроение | Light | Dark | Display / body |
15
+ |---|---|---|---|---|---|
16
+ | `aurora` | клиника, wellness, премиум, культура | тихая роскошь, тепло, доверие | бумага `#F4F1EA`, изумруд `#0E6E5E`, медь `#B36A43`, линии `#DCD6CA` | фон `#0B0F0F`, поверхность `#121718`, мята `#5AD2B7`, медь `#E09A70` | Lora 500 / Golos Text |
17
+ | `graphite` | SaaS, дашборд, админка, Service Desk | точность, плотность, контроль | фон `#F4F6F5`, акцент `#0E7C66`, чернила `#0F1414` | фон `#080B0B`, поверхность `#0F1414`, мята `#6EE7C8`, линии `#1F2926` | Unbounded (1–2 места) / Golos Text |
18
+ | `editorial` | медиа, истории, бренд-лендинг | журнал, характер, смелость | бумага `#F8F5EF`, вермильон `#C8442A`, чернила `#171310` | фон `#121110`, поверхность `#1A1613`, коралл `#F06A4D` | Lora крупно / Golos Text |
19
+ | `warm` | забота, образование, соцпроекты | человечность, мягкость, крем | крем `#FBF5EC`, терракота `#B85C38`, шалфей `#6C7A5B` | фон `#14100D`, поверхность `#1D1712`, акцент `#E8835C` | Lora / Golos Text |
20
+ | `swiss` | B2B, банки, госуслуги, отчёты | дисциплина, сетка, контраст | белый `#FFFFFF`, чёрный `#0E0E0E`, красный `#E0301E` | фон `#0D0D0D`, поверхность `#151515`, акцент `#FF5B47` | Golos Text 700 / Golos Text |
21
+
22
+ ## Формы и signature
23
+ - **aurora:** радиусы карточек 14px, контролов 10px; крупные редакционные цифры, печать/эмблема,
24
+ монограммы вместо фото, капс-надзаголовки с линией, бумажная текстура.
25
+ - **graphite:** радиусы 4–11px, границы вместо теней; KPI с дельтой и sparkline, sticky-таблица,
26
+ командная строка ⌘K, статус-точки, сайдбар 240–260px, топбар 64px.
27
+ - **editorial:** радиусы 2–5px, жирные волосяные линии; гигантские заголовки, номерные рубрики,
28
+ drop cap, цитаты на всю ширину, асимметричные блоки.
29
+ - **warm:** радиусы 12–24px осознанно; мягкие плашки, рукописные подчёркивания SVG, эмпатичные
30
+ цитаты, «шаги» с крупными номерами.
31
+ - **swiss:** радиусы 1–4px, жёсткая сетка; толстые линии-разделители, номера секций, таблицы,
32
+ красный только на действиях и статусах.
33
+
34
+ ## Do / Don't
35
+ - **aurora:** воздух, спокойный тон, один изумрудный акцент; медь только в деталях. Нельзя: яркие
36
+ градиенты, неон, стоковые врачи, «медицинский синий» по умолчанию.
37
+ - **graphite:** данные прежде декора, состояния всего, читаемые таблицы. Нельзя: огромные радиусы,
38
+ карточки ради карточек, тени поверх данных, пестрота статусов.
39
+ - **editorial:** контраст масштабов, строгая сетка, крупные отступы. Нельзя: мелкие заголовки,
40
+ SaaS-карточки, пастель, всё центрировать.
41
+ - **warm:** дружелюбный copy, округлость, тёплый фон. Нельзя: корпоративный холод, острые углы,
42
+ кислотные цвета, перегруз данными.
43
+ - **swiss:** сетка, монохром + один красный, крупные поля, читаемые таблицы. Нельзя: декор, тени,
44
+ мягкие радиусы, пастель, игривые иллюстрации.
45
+
46
+ ## Адаптация под бренд
47
+ Меняй только переменные акцента, остальное — из пресета:
48
+ `--accent`, `--accent-hover`, `--accent-press`, `--accent-soft`, `--accent-ink`, `--accent-contrast`.
49
+ Контраст `--accent` ↔ `--accent-contrast` ≥ 4.5:1; `--accent-soft` — фон бейджей/подсветок,
50
+ текст на нём — `--accent-ink`; акцент — только действия/статусы/линии, не большие заливки.
@@ -0,0 +1,21 @@
1
+ # Шаблон отчёта по дизайну
2
+
3
+ > Часть навыка wow-design. ≈0.4k токенов. Читать, когда: сдаёшь UI-работу и нужен формат отчёта
4
+ > с доказательствами (скриншоты, рубрика, проверки, интеграция).
5
+
6
+ ```markdown
7
+ ## Дизайн: <страница / лендинг / дашборд / компонент>
8
+ Арт-направление: <пресет>, <3 слова>, signature: <деталь>
9
+ Что сделано: <3–6 пунктов>
10
+ Скриншоты: <пути: 1440 light, 768, 390, dark, ключевые состояния>
11
+ Рубрика: <средний балл>/5, слабые места: <критерии и оценки>
12
+ Проверено: 1440/768/390, light/dark, axe (critical/serious = 0), keyboard/focus, reduced-motion
13
+ Интеграция: <какие файлы/токены/классы переиспользовать; что не тронуто>
14
+ Риски/что дальше: <1–3 пункта>
15
+ ```
16
+
17
+ Правила:
18
+ - без скриншотов и путей работа не считается сданной;
19
+ - рубрика — средневзвешенный балл, обязательно минимум по критериям;
20
+ - rationale — 3–5 строк: почему такой пресет, шрифт, композиция, signature-деталь;
21
+ - если правился чужой UI — приложить «до/после» и список P0/P1.