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,96 @@
1
+ # Stack Recipes — как встраивать AURORA в реальные проекты
2
+
3
+ > Часть навыка wow-design. ≈2.3k токенов. Читать, когда: встраиваешь кит в React/Laravel/Bitrix
4
+ > или статический HTML.
5
+
6
+ > Принцип: **не переписывай проект, а перенеси токены и компоненты**. Сначала посмотри, что уже есть
7
+ > (тема, переменные, UI-кит), и замапь новое на существующее. Ничего не ломать — часть дизайна.
8
+
9
+ ## Универсальный перенос (любой стек)
10
+ 1. Скопируй из `assets/kit/assets/css/`: `tokens.css`, `base.css`, `fonts.css` (и при необходимости `components.css`).
11
+ 2. Подключи первыми в каскаде: `tokens → base → components → styles проекта`.
12
+ 3. Если в проекте уже есть CSS-переменные — замапь:
13
+ ```css
14
+ :root{
15
+ --brand-accent: var(--accent);
16
+ --surface-page: var(--bg);
17
+ --text-primary: var(--ink);
18
+ --radius-md: var(--radius-card);
19
+ }
20
+ ```
21
+ 4. Проверь, что ни один компонент проекта не использует «магические» цвета — замени на токены постепенно.
22
+ 5. Тёмная тема: переключай `data-theme` на `<html>`; в проекте может быть свой механизм (class/`prefers-color-scheme`) —
23
+ адаптируй, а не дублируй две системы.
24
+
25
+ ## React + Vite (+ Tailwind, если есть)
26
+ - **Токены:** `src/styles/tokens.css` + `base.css` импортируются в `main.tsx`/`index.css`.
27
+ - **Tailwind v4:** в CSS вместо `tailwind.config`:
28
+ ```css
29
+ @import "tailwindcss";
30
+ @theme {
31
+ --color-bg: var(--bg);
32
+ --color-surface: var(--surface);
33
+ --color-ink: var(--ink);
34
+ --color-accent: var(--accent);
35
+ --color-line: var(--line);
36
+ --font-display: var(--font-display);
37
+ --font-sans: var(--font-body);
38
+ --radius-card: var(--radius-card);
39
+ }
40
+ ```
41
+ Тогда работают классы `bg-surface`, `text-ink`, `border-line`, `font-display`, `rounded-card`.
42
+ - **Компоненты:** один каталог `src/components/ui` (Button, Input, Select, Badge, Card, Table, Modal, Tabs,
43
+ Toast, EmptyState). Варианты — через пропсы/`data-variant`, состояния — `data-state`, не через десятки классов.
44
+ - **Тёмная тема:** `useEffect` ставит `data-theme` на `document.documentElement`, значение в `localStorage`,
45
+ первый рендер — из `prefers-color-scheme`.
46
+ - **Проверка:** `npm run dev` → `capture.mjs http://localhost:5173` (или нужный роут) + `audit.mjs`.
47
+ - **Тесты:** RTL — проверка доступных имён кнопок/полей, axe в Playwright/`vitest-axe`; скриншоты —
48
+ `toHaveScreenshot` для ключевых экранов (опционально, если проект уже на Playwright).
49
+ - **Не тащи** тяжёлые UI-библиотеки ради дизайна: сначала токены и свои 8–12 компонентов.
50
+
51
+ ## Laravel + Blade
52
+ - **Стили:** `resources/css/tokens.css`, `base.css`, `fonts.css`; `resources/css/app.css` импортирует их;
53
+ `vite.config.js` уже собирает `app.css`. Шрифты — `resources/fonts/`, пути в `@font-face` относительные.
54
+ - **Layout:** `resources/views/layouts/app.blade.php` — `<html lang="ru" data-theme="{{ $theme ?? 'light' }}">`,
55
+ `@vite(['resources/css/app.css','resources/js/app.js'])`, skip-link, header/footer partials.
56
+ - **Blade-компоненты:** `resources/views/components/ui/button.blade.php`:
57
+ ```blade
58
+ @props(['variant' => 'primary', 'size' => 'md', 'type' => 'button'])
59
+ <button type="{{ $type }}" {{ $attributes->class(['btn', "btn--$variant", "btn--$size"]) }}>
60
+ {{ $slot }}
61
+ </button>
62
+ ```
63
+ Аналогично input/select/badge/card/table/empty/modal. Никаких inline-стилей.
64
+ - **Существующая вёрстка:** не заменяй весь шаблон. Добавь `resources/css/redesign.css` **после** старых стилей,
65
+ переопределяй только проблемные компоненты; проверь все основные страницы.
66
+ - **Проверка:** `npm run build`, `php artisan serve`, скриншоты ключевых страниц (логин, список, карточка,
67
+ формы, ошибки), обе темы. PHPUnit/фича-тесты не должны упасть — дизайн не меняет логику.
68
+ - **Blade-подводные камни:** экранирование в атрибутах, `@class([...])`, не ломать `old()`/`@error` в формах,
69
+ CSRF остаётся, не переносить формы на JS без причины.
70
+
71
+ ## Bitrix / Aspro («Медицинский центр 3.0» и др.)
72
+ - **Где править:** только `local/` (свой шаблон/компоненты) или кастомные файлы шаблона сайта;
73
+ **не** трогать `/bitrix/` ядро и файлы маркетплейс-шаблона, которые перезапишутся обновлением.
74
+ - **CSS:** обычно `.../local/templates/<template>/styles/custom.css` или `template_styles.css`;
75
+ подключай токены через `init.php`/`<link>`; селекторы скоупи под контейнер страницы
76
+ (`.page-<name> .btn { ... }`), чтобы не сломать другие разделы и админку.
77
+ - **Шрифты:** положи в `local/templates/<template>/fonts/` и подключи `@font-face` с относительными путями;
78
+ не тяни с CDN, если сайт работает в закрытом контуре.
79
+ - **Кэш:** после правок CSS/шаблонов чистить кэш (`Настройки → Очистить кэш` или удалить
80
+ `/bitrix/cache/css/s1/<template>/`), иначе увидишь старое.
81
+ - **Проверка:** открыть живую страницу в браузере (desktop/mobile), проверить другие разделы (шапка/футер общие),
82
+ админку не задеть. Для локальных наработок — статический HTML-снимок страницы.
83
+ - **Аспро-подводные камни:** свои классы `.btn`, `.card`, `--palette-*`, вложенные `.wrapper`/`.maxwidth`;
84
+ проверяй каскад и `!important` (лучше без него), не ломай мобильное меню и попапы.
85
+ - **Контент:** заголовки h3 в анкетах/статьях не менять на h2 без необходимости — SEO-структура важна.
86
+
87
+ ## Статический HTML (лендинг/прототип)
88
+ - Скопируй папку `assets/kit` → в проект; замени контент и бренд-акцент; оставь структуру и токены.
89
+ - Проверь `file://` (нет сборки): относительные пути, шрифты локально, никаких fetch/CDN.
90
+ - Дальше — `capture.mjs`/`audit.mjs`, скриншоты, правки по рубрике.
91
+
92
+ ## Что считать «интеграцией» в отчёте
93
+ - Какие файлы добавлены/изменены (точные пути).
94
+ - Какие токены/переменные замаплены на существующую тему.
95
+ - Какие экраны проверены скриншотами (desktop/mobile, light/dark).
96
+ - Что не тронуто (логика, БД, роуты, чужие компоненты).
@@ -0,0 +1,82 @@
1
+ # Visual QA — петля «собрал → снял → раскритиковал → исправил»
2
+
3
+ > Часть навыка wow-design. ≈1.7k токенов. Читать, когда: запускаешь capture/audit, разбираешь
4
+ > скриншоты, настраиваешь CI или скрипты не стартуют.
5
+
6
+ > Без скриншотов дизайн не считается проверенным. Глазами по PNG видно то, чего не видно в коде:
7
+ > иерархию, воздух, ритм, «дёшево/дорого», поломки адаптива.
8
+
9
+ ## 1. Что нужно один раз
10
+ - Node.js 18+ (на этой машине Node 24).
11
+ - Chrome или Edge (Windows 11 — Edge есть всегда).
12
+ - `playwright-core` + `axe-core` в `~/.dsh/skills/wow-design/assets/scripts/`:
13
+ ```
14
+ cd ~/.dsh/skills/wow-design/assets/scripts
15
+ npm install --no-audit --no-fund
16
+ ```
17
+ Если пакеты уже стоят в другом месте — можно указать `NODE_PATH` или запускать из той папки.
18
+ - Скрипты ищут браузер так: `CDP_URL` → запущенный Chrome по CDP → установленный Playwright Chromium →
19
+ системный Edge/Chrome (`channel: msedge`/`chrome`). Обычно ничего настраивать не нужно.
20
+
21
+ ## 2. Скриншоты
22
+ ```bash
23
+ # одна страница, все вьюпорты и темы
24
+ node ~/.dsh/skills/wow-design/assets/scripts/capture.mjs path/to/page.html --name page --out screenshots
25
+
26
+ # только desktop+mobile, светлая тема, full page
27
+ node .../capture.mjs http://localhost:5173 --name app --viewports desktop,mobile --themes light
28
+
29
+ # отдельный элемент (например, карточка)
30
+ node .../capture.mjs page.html --name card --selector ".ticket-card" --themes light
31
+ ```
32
+ Результат: `screenshots/page-desktop-light.png`, `page-mobile-light.png`, `page-desktop-dark.png`, … +
33
+ `shots.json` (манифест: пути, размеры, ошибки консоли).
34
+
35
+ ## 3. Аудит
36
+ ```bash
37
+ node ~/.dsh/skills/wow-design/assets/scripts/audit.mjs path/to/page.html --out screenshots
38
+ ```
39
+ Проверяет: axe-core (критичные/serious нарушения), горизонтальный overflow на 390px, тач-цели < 40px,
40
+ порядок заголовков, alt у картинок, битые изображения, загрузку шрифтов, ошибки консоли.
41
+ Выход: `audit.json` + `audit.md`. Код выхода 2 — есть блокеры.
42
+
43
+ ## 4. Как смотреть скриншоты (обязательно!)
44
+ 1. `read_image` каждого PNG — не «на глаз по памяти», а реально открыть.
45
+ 2. Первый взгляд 5 секунд: понятно ли, что это, для кого, куда нажать? Что первое цепляет?
46
+ 3. Squint test: прищуриться — видна ли иерархия, или всё слилось в серое пятно?
47
+ 4. Grayscale: если убрать цвет, структура остаётся? Если нет — цвета не работают.
48
+ 5. Мобильный 390: нет ли обрезаний, скролла вбок, мелких тапов, «сжатого десктопа».
49
+ 6. Тёмная тема: фон/поверхности/контраст/акцент — отдельная палитра, а не инверсия.
50
+ 7. Сравни с референсом из брифа: тот же уровень «дорого»?
51
+ 8. Выпиши 5–10 конкретных правок с числами (px/rem/значения токенов), а не «сделать красивее».
52
+
53
+ ## 5. Итерации
54
+ ```
55
+ v1: собрал → capture → read_image → 8 правок
56
+ v2: правки → capture → read_image → 4 правки → rubric
57
+ v3: финальные скриншоты → отчёт
58
+ ```
59
+ Минимум 2 итерации. Первый вариант почти всегда «нормальный, но не WOW» — это ожидаемо.
60
+
61
+ ## 6. Гейт перед сдачей
62
+ - Рубрика (`references/critique-rubric.md`): средний ≥ 4.4/5, ни один критерий < 4.
63
+ - axe: critical/serious = 0.
64
+ - 390px: overflow = 0, тапы ≥ 40px, читаемо.
65
+ - Шрифты загружены (`document.fonts.status === "loaded"`), нет FOUT-скачков на скриншоте.
66
+ - Тёмная и светлая темы сняты и просмотрены.
67
+ - Нет ни одного антипаттерна из `references/anti-patterns.md`.
68
+ - Скриншоты приложены к отчёту с путями.
69
+
70
+ ## 7. Если скриншоты не запускаются
71
+ 1. Проверь Node: `node -v`.
72
+ 2. Проверь пакеты: `ls assets/scripts/node_modules/playwright-core`; при отсутствии — `npm install` в папке скриптов.
73
+ 3. Проверь браузер: `msedge --version` или путь к Chrome. Скрипт подскажет, что не найдено.
74
+ 4. Если Chrome уже запущен с CDP — укажи `CDP_URL=http://127.0.0.1:9333` и не поднимай второй.
75
+ 5. В крайнем случае — сделай скриншоты вручную (Win+Shift+S) и всё равно оцени по рубрике: визуальная
76
+ проверка важнее автоматизации.
77
+
78
+ ## 8. CI (если проект уже на Playwright)
79
+ - Визуальные снапшоты: `await expect(page).toHaveScreenshot('home.png', { fullPage: true })`.
80
+ - Доступность: `@axe-core/playwright` — `expect(violations.filter(...)).toEqual([])`.
81
+ - Матрица: 1440×900 и 390×844, light/dark (эмуляция `colorScheme`).
82
+ - Обновляй снапшоты осознанно (`--update-snapshots`), в ревью смотри диффы.
@@ -0,0 +1,43 @@
1
+ # Рычаги «ВАУ» — 8 приёмов с параметрами
2
+
3
+ > Часть навыка wow-design. ≈1k токенов. Читать, когда: выбираешь 3–5 приёмов «ВАУ» для страницы
4
+ > и нужны конкретные параметры, чтобы приём не превратился в декор.
5
+
6
+ Выбирай **3–5 из 8**, не все сразу. Каждый приём должен работать на задачу экрана, а не «чтобы было красиво».
7
+
8
+ ## 1. Типографический контраст — 80% впечатления
9
+ Огромный serif-display + мелкий капс-лейбл с трекингом + спокойный body. Display 56–96px
10
+ (`clamp(3rem,7vw,6rem)`), лейблы 11–12px капсом с трекингом `.12–.14em`, body 16–18px.
11
+ Одна display-пара на страницу; не смешивать два похожих гротеска.
12
+
13
+ ## 2. Редакционная сетка
14
+ Асимметрия 7/5 или 8/4, номерные секции (01/02/03), волосяные линии, поля-воздух. Контейнер
15
+ 1200–1360px, 12 колонок, gutter `clamp(20px,4.5vw,56px)`; секции `clamp(64px,8vw,128px)`.
16
+ Сетка должна читаться по краям: всё выровнено по одной линии.
17
+
18
+ ## 3. Одна смелая деталь
19
+ Гигантская цифра/буква, эмблема, вертикальный текст, необычный разделитель — **ровно одна**,
20
+ повторённая в 2–3 местах. Пять «фишек» сразу (градиент + блоб + стекло + 3D + карусель) = шум.
21
+
22
+ ## 4. Материальность
23
+ Тёплая бумага, лёгкое зерно 2–3% (`--grain-opacity:.022`), hairline-бордеры, слоистые тени из
24
+ 2 слоёв, без «пластика». Статичные карточки — hairline, тени только у всплывающих слоёв.
25
+
26
+ ## 5. Точные данные
27
+ SVG-графики, sparklines, таблицы с `font-variant-numeric:tabular-nums`, моно-цифры для ID и кодов,
28
+ правые числа. Точность и выравнивание цифр читаются как «дорого» даже без декора.
29
+
30
+ ## 6. Микродетали
31
+ Offset у подчёркиваний, цвет `::selection`, аккуратный скроллбар, видимое фокус-кольцо
32
+ (`2px` + offset `3px`), иконки stroke 1.5–1.6, оптическое выравнивание иконок в строке.
33
+ Мелочи не объясняют — они создают ощущение качества.
34
+
35
+ ## 7. Движение с достоинством
36
+ Reveal 700ms `cubic-bezier(.16,1,.3,1)`, stagger 60ms, hover 180ms; только `transform`/`opacity`.
37
+ Без bounce, parallax-цирка и бесконечных анимаций. `prefers-reduced-motion` отключает всё,
38
+ контент остаётся видимым.
39
+
40
+ ## 8. Копирайт
41
+ Глаголы, конкретика, числа, польза. Заголовок продаёт результат, а не описывает отдел:
42
+ «Запись к кардиологу за 2 минуты», «94% заявок закрыты в SLA». Без «инновационных решений»
43
+ и «команды профессионалов».
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env node
2
+ // Token budget report for the bundled skills.
3
+ //
4
+ // Every SKILL.md is loaded whole when the model calls `skill`, so the core file
5
+ // is a hard context cost. This script prints that cost and fails CI when a core
6
+ // crosses the budget, which keeps the library honest as it grows.
7
+ //
8
+ // node tools/skill-cost.mjs table + totals
9
+ // node tools/skill-cost.mjs --json machine-readable report
10
+ // node tools/skill-cost.mjs --check exit 1 when a core exceeds --budget
11
+ import fs from "node:fs";
12
+ import path from "node:path";
13
+
14
+ const repoRoot = path.resolve(import.meta.dirname, "..");
15
+ const skillsRoot = path.join(repoRoot, "skills");
16
+ const args = process.argv.slice(2);
17
+ const json = args.includes("--json");
18
+ const check = args.includes("--check");
19
+ const budgetIndex = args.indexOf("--budget");
20
+ const budget = budgetIndex >= 0 ? Number(args[budgetIndex + 1]) || 6000 : 6000;
21
+
22
+ const rows = [];
23
+ for (const entry of fs.readdirSync(skillsRoot, { withFileTypes: true })) {
24
+ if (!entry.isDirectory()) continue;
25
+ const file = path.join(skillsRoot, entry.name, "SKILL.md");
26
+ if (!fs.existsSync(file)) continue;
27
+ const text = fs.readFileSync(file, "utf8");
28
+ const bytes = Buffer.byteLength(text, "utf8");
29
+ let references = 0;
30
+ let referenceBytes = 0;
31
+ const refDir = path.join(skillsRoot, entry.name, "references");
32
+ if (fs.existsSync(refDir)) {
33
+ for (const reference of fs.readdirSync(refDir, { withFileTypes: true })) {
34
+ if (!reference.isFile()) continue;
35
+ references += 1;
36
+ referenceBytes += fs.statSync(path.join(refDir, reference.name)).size;
37
+ }
38
+ }
39
+ rows.push({
40
+ name: entry.name,
41
+ bytes,
42
+ tokens: Math.round(bytes / 3.2),
43
+ references,
44
+ referenceTokens: Math.round(referenceBytes / 3.2),
45
+ });
46
+ }
47
+ rows.sort((left, right) => right.tokens - left.tokens);
48
+
49
+ const totalTokens = rows.reduce((sum, row) => sum + row.tokens, 0);
50
+ const totalReferences = rows.reduce((sum, row) => sum + row.referenceTokens, 0);
51
+ const over = rows.filter((row) => row.tokens > budget);
52
+
53
+ if (json) {
54
+ console.log(JSON.stringify({ budget, totalTokens, totalReferences, rows, over }, null, 2));
55
+ } else {
56
+ console.log(`Навыков: ${rows.length}. Ядра: ${totalTokens} токенов, references: ${totalReferences} токенов.`);
57
+ console.log(`Бюджет ядра: ${budget} токенов${over.length > 0 ? ` · превышают: ${over.length}` : " · все в бюджете"}`);
58
+ console.log("");
59
+ const header = ["навык", "ядро", "токены", "refs", "ref-токены"].map((label, index) => label.padEnd(index === 0 ? 30 : 10));
60
+ console.log(header.join(""));
61
+ for (const row of rows) {
62
+ const mark = row.tokens > budget ? " !" : "";
63
+ console.log([
64
+ (row.name + mark).padEnd(30),
65
+ String(row.bytes + " Б").padEnd(10),
66
+ String(row.tokens).padEnd(10),
67
+ String(row.references).padEnd(10),
68
+ String(row.referenceTokens).padEnd(10),
69
+ ].join(""));
70
+ }
71
+ }
72
+
73
+ if (check && over.length > 0) {
74
+ console.error(`\nПеребор бюджета: ${over.map((row) => `${row.name} (${row.tokens})`).join(", ")}`);
75
+ process.exit(1);
76
+ }