@etus/seven-skill 0.1.0-beta.2 → 0.1.0-beta.4

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 (570) hide show
  1. package/.agents/skills/seven/SKILL.md +161 -0
  2. package/.agents/skills/seven/agents/seven_asset_producer.toml +37 -0
  3. package/.agents/skills/seven/agents/seven_finish_reviewer.toml +33 -0
  4. package/.agents/skills/seven/agents/seven_manual_edit_applier.toml +43 -0
  5. package/.agents/skills/seven/reference/adapt.md +34 -0
  6. package/.agents/skills/seven/reference/animate.md +31 -0
  7. package/.agents/skills/seven/reference/app-shell.md +152 -0
  8. package/.agents/skills/seven/reference/audit.md +122 -0
  9. package/.agents/skills/seven/reference/bolder.md +34 -0
  10. package/.agents/skills/seven/reference/brand.md +31 -0
  11. package/.agents/skills/seven/reference/clarify.md +76 -0
  12. package/.agents/skills/seven/reference/color-and-contrast.md +84 -0
  13. package/.agents/skills/seven/reference/colorize.md +31 -0
  14. package/.agents/skills/seven/reference/critique.md +53 -0
  15. package/.agents/skills/seven/reference/delight.md +30 -0
  16. package/.agents/skills/seven/reference/distill.md +30 -0
  17. package/.agents/skills/seven/reference/doctor.md +7 -0
  18. package/.agents/skills/seven/reference/document.md +36 -0
  19. package/.agents/skills/seven/reference/evaluations.md +38 -0
  20. package/.agents/skills/seven/reference/exceptions.md +7 -0
  21. package/.agents/skills/seven/reference/extract.md +42 -0
  22. package/.agents/skills/seven/reference/harden.md +36 -0
  23. package/.agents/skills/seven/reference/hooks.md +11 -0
  24. package/.agents/skills/seven/reference/init.md +38 -0
  25. package/.agents/skills/seven/reference/layout.md +33 -0
  26. package/.agents/skills/seven/reference/live.md +106 -0
  27. package/.agents/skills/seven/reference/motion-design.md +71 -0
  28. package/.agents/skills/seven/reference/onboard.md +35 -0
  29. package/.agents/skills/seven/reference/optimize.md +34 -0
  30. package/.agents/skills/seven/reference/overdrive.md +32 -0
  31. package/.agents/skills/seven/reference/polish.md +55 -0
  32. package/.agents/skills/seven/reference/product.md +43 -0
  33. package/.agents/skills/seven/reference/quieter.md +31 -0
  34. package/.agents/skills/seven/reference/routing.md +28 -0
  35. package/.agents/skills/seven/reference/shape.md +85 -0
  36. package/.agents/skills/seven/reference/spatial-design.md +60 -0
  37. package/.agents/skills/seven/reference/typeset.md +28 -0
  38. package/.agents/skills/seven/reference/typography.md +43 -0
  39. package/.agents/skills/seven/reference/ux-writing.md +47 -0
  40. package/.agents/skills/seven/reference/visual-probes.md +36 -0
  41. package/.agents/skills/seven/scripts/context-signals.mjs +94 -0
  42. package/.agents/skills/seven/scripts/critique-storage.mjs +155 -0
  43. package/.agents/skills/seven/scripts/load-context.mjs +93 -0
  44. package/.agents/skills/seven/scripts/update-check.mjs +120 -0
  45. package/.claude/agents/seven-asset-producer.md +40 -0
  46. package/.claude/agents/seven-finish-reviewer.md +36 -0
  47. package/.claude/agents/seven-manual-edit-applier.md +46 -0
  48. package/.claude/skills/seven/SKILL.md +128 -123
  49. package/.claude/skills/seven/reference/adapt.md +34 -0
  50. package/.claude/skills/seven/reference/animate.md +31 -0
  51. package/.claude/skills/seven/reference/app-shell.md +152 -0
  52. package/.claude/skills/seven/reference/audit.md +6 -4
  53. package/.claude/skills/seven/reference/bolder.md +34 -0
  54. package/.claude/skills/seven/reference/brand.md +21 -14
  55. package/.claude/skills/seven/reference/clarify.md +2 -2
  56. package/.claude/skills/seven/reference/colorize.md +31 -0
  57. package/.claude/skills/seven/reference/critique.md +53 -0
  58. package/.claude/skills/seven/reference/delight.md +30 -0
  59. package/.claude/skills/seven/reference/distill.md +30 -0
  60. package/.claude/skills/seven/reference/doctor.md +7 -0
  61. package/.claude/skills/seven/reference/document.md +36 -0
  62. package/.claude/skills/seven/reference/evaluations.md +38 -0
  63. package/.claude/skills/seven/reference/exceptions.md +7 -0
  64. package/.claude/skills/seven/reference/extract.md +42 -0
  65. package/.claude/skills/seven/reference/harden.md +36 -0
  66. package/.claude/skills/seven/reference/hooks.md +11 -0
  67. package/.claude/skills/seven/reference/init.md +38 -0
  68. package/.claude/skills/seven/reference/layout.md +33 -0
  69. package/.claude/skills/seven/reference/live.md +106 -0
  70. package/.claude/skills/seven/reference/motion-design.md +1 -1
  71. package/.claude/skills/seven/reference/onboard.md +35 -0
  72. package/.claude/skills/seven/reference/optimize.md +34 -0
  73. package/.claude/skills/seven/reference/overdrive.md +32 -0
  74. package/.claude/skills/seven/reference/polish.md +5 -5
  75. package/.claude/skills/seven/reference/product.md +2 -4
  76. package/.claude/skills/seven/reference/quieter.md +31 -0
  77. package/.claude/skills/seven/reference/routing.md +28 -0
  78. package/.claude/skills/seven/reference/shape.md +5 -5
  79. package/.claude/skills/seven/reference/spatial-design.md +3 -3
  80. package/.claude/skills/seven/reference/typeset.md +28 -0
  81. package/.claude/skills/seven/reference/typography.md +1 -1
  82. package/.claude/skills/seven/reference/visual-probes.md +36 -0
  83. package/.claude/skills/seven/scripts/context-signals.mjs +94 -0
  84. package/.claude/skills/seven/scripts/critique-storage.mjs +155 -0
  85. package/.claude/skills/seven/scripts/load-context.mjs +68 -59
  86. package/.claude/skills/seven/scripts/update-check.mjs +120 -0
  87. package/.claude-plugin/marketplace.json +2 -2
  88. package/.claude-plugin/plugin.json +8 -3
  89. package/.cursor/skills/seven/SKILL.md +161 -0
  90. package/.cursor/skills/seven/reference/adapt.md +34 -0
  91. package/.cursor/skills/seven/reference/animate.md +31 -0
  92. package/.cursor/skills/seven/reference/app-shell.md +152 -0
  93. package/.cursor/skills/seven/reference/audit.md +122 -0
  94. package/.cursor/skills/seven/reference/bolder.md +34 -0
  95. package/.cursor/skills/seven/reference/brand.md +31 -0
  96. package/.cursor/skills/seven/reference/clarify.md +76 -0
  97. package/.cursor/skills/seven/reference/color-and-contrast.md +84 -0
  98. package/.cursor/skills/seven/reference/colorize.md +31 -0
  99. package/.cursor/skills/seven/reference/critique.md +53 -0
  100. package/.cursor/skills/seven/reference/delight.md +30 -0
  101. package/.cursor/skills/seven/reference/distill.md +30 -0
  102. package/.cursor/skills/seven/reference/doctor.md +7 -0
  103. package/.cursor/skills/seven/reference/document.md +36 -0
  104. package/.cursor/skills/seven/reference/evaluations.md +38 -0
  105. package/.cursor/skills/seven/reference/exceptions.md +7 -0
  106. package/.cursor/skills/seven/reference/extract.md +42 -0
  107. package/.cursor/skills/seven/reference/harden.md +36 -0
  108. package/.cursor/skills/seven/reference/hooks.md +11 -0
  109. package/.cursor/skills/seven/reference/init.md +38 -0
  110. package/.cursor/skills/seven/reference/layout.md +33 -0
  111. package/.cursor/skills/seven/reference/live.md +106 -0
  112. package/.cursor/skills/seven/reference/motion-design.md +71 -0
  113. package/.cursor/skills/seven/reference/onboard.md +35 -0
  114. package/.cursor/skills/seven/reference/optimize.md +34 -0
  115. package/.cursor/skills/seven/reference/overdrive.md +32 -0
  116. package/.cursor/skills/seven/reference/polish.md +55 -0
  117. package/.cursor/skills/seven/reference/product.md +43 -0
  118. package/.cursor/skills/seven/reference/quieter.md +31 -0
  119. package/.cursor/skills/seven/reference/routing.md +28 -0
  120. package/.cursor/skills/seven/reference/shape.md +85 -0
  121. package/.cursor/skills/seven/reference/spatial-design.md +60 -0
  122. package/.cursor/skills/seven/reference/typeset.md +28 -0
  123. package/.cursor/skills/seven/reference/typography.md +43 -0
  124. package/.cursor/skills/seven/reference/ux-writing.md +47 -0
  125. package/.cursor/skills/seven/reference/visual-probes.md +36 -0
  126. package/.cursor/skills/seven/scripts/context-signals.mjs +94 -0
  127. package/.cursor/skills/seven/scripts/critique-storage.mjs +155 -0
  128. package/.cursor/skills/seven/scripts/load-context.mjs +93 -0
  129. package/.cursor/skills/seven/scripts/update-check.mjs +120 -0
  130. package/.gemini/skills/seven/SKILL.md +160 -0
  131. package/.gemini/skills/seven/reference/adapt.md +34 -0
  132. package/.gemini/skills/seven/reference/animate.md +31 -0
  133. package/.gemini/skills/seven/reference/app-shell.md +152 -0
  134. package/.gemini/skills/seven/reference/audit.md +122 -0
  135. package/.gemini/skills/seven/reference/bolder.md +34 -0
  136. package/.gemini/skills/seven/reference/brand.md +31 -0
  137. package/.gemini/skills/seven/reference/clarify.md +76 -0
  138. package/.gemini/skills/seven/reference/color-and-contrast.md +84 -0
  139. package/.gemini/skills/seven/reference/colorize.md +31 -0
  140. package/.gemini/skills/seven/reference/critique.md +53 -0
  141. package/.gemini/skills/seven/reference/delight.md +30 -0
  142. package/.gemini/skills/seven/reference/distill.md +30 -0
  143. package/.gemini/skills/seven/reference/doctor.md +7 -0
  144. package/.gemini/skills/seven/reference/document.md +36 -0
  145. package/.gemini/skills/seven/reference/evaluations.md +38 -0
  146. package/.gemini/skills/seven/reference/exceptions.md +7 -0
  147. package/.gemini/skills/seven/reference/extract.md +42 -0
  148. package/.gemini/skills/seven/reference/harden.md +36 -0
  149. package/.gemini/skills/seven/reference/hooks.md +11 -0
  150. package/.gemini/skills/seven/reference/init.md +38 -0
  151. package/.gemini/skills/seven/reference/layout.md +33 -0
  152. package/.gemini/skills/seven/reference/live.md +106 -0
  153. package/.gemini/skills/seven/reference/motion-design.md +71 -0
  154. package/.gemini/skills/seven/reference/onboard.md +35 -0
  155. package/.gemini/skills/seven/reference/optimize.md +34 -0
  156. package/.gemini/skills/seven/reference/overdrive.md +32 -0
  157. package/.gemini/skills/seven/reference/polish.md +55 -0
  158. package/.gemini/skills/seven/reference/product.md +43 -0
  159. package/.gemini/skills/seven/reference/quieter.md +31 -0
  160. package/.gemini/skills/seven/reference/routing.md +28 -0
  161. package/.gemini/skills/seven/reference/shape.md +85 -0
  162. package/.gemini/skills/seven/reference/spatial-design.md +60 -0
  163. package/.gemini/skills/seven/reference/typeset.md +28 -0
  164. package/.gemini/skills/seven/reference/typography.md +43 -0
  165. package/.gemini/skills/seven/reference/ux-writing.md +47 -0
  166. package/.gemini/skills/seven/reference/visual-probes.md +36 -0
  167. package/.gemini/skills/seven/scripts/context-signals.mjs +94 -0
  168. package/.gemini/skills/seven/scripts/critique-storage.mjs +155 -0
  169. package/.gemini/skills/seven/scripts/load-context.mjs +93 -0
  170. package/.gemini/skills/seven/scripts/update-check.mjs +120 -0
  171. package/.grok/agents/seven-asset-producer.md +40 -0
  172. package/.grok/agents/seven-finish-reviewer.md +36 -0
  173. package/.grok/agents/seven-manual-edit-applier.md +46 -0
  174. package/.grok/skills/seven/SKILL.md +167 -0
  175. package/.grok/skills/seven/reference/adapt.md +34 -0
  176. package/.grok/skills/seven/reference/animate.md +31 -0
  177. package/.grok/skills/seven/reference/app-shell.md +152 -0
  178. package/.grok/skills/seven/reference/audit.md +122 -0
  179. package/.grok/skills/seven/reference/bolder.md +34 -0
  180. package/.grok/skills/seven/reference/brand.md +31 -0
  181. package/.grok/skills/seven/reference/clarify.md +76 -0
  182. package/.grok/skills/seven/reference/color-and-contrast.md +84 -0
  183. package/.grok/skills/seven/reference/colorize.md +31 -0
  184. package/.grok/skills/seven/reference/critique.md +53 -0
  185. package/.grok/skills/seven/reference/delight.md +30 -0
  186. package/.grok/skills/seven/reference/distill.md +30 -0
  187. package/.grok/skills/seven/reference/doctor.md +7 -0
  188. package/.grok/skills/seven/reference/document.md +36 -0
  189. package/.grok/skills/seven/reference/evaluations.md +38 -0
  190. package/.grok/skills/seven/reference/exceptions.md +7 -0
  191. package/.grok/skills/seven/reference/extract.md +42 -0
  192. package/.grok/skills/seven/reference/harden.md +36 -0
  193. package/.grok/skills/seven/reference/hooks.md +11 -0
  194. package/.grok/skills/seven/reference/init.md +38 -0
  195. package/.grok/skills/seven/reference/layout.md +33 -0
  196. package/.grok/skills/seven/reference/live.md +106 -0
  197. package/.grok/skills/seven/reference/motion-design.md +71 -0
  198. package/.grok/skills/seven/reference/onboard.md +35 -0
  199. package/.grok/skills/seven/reference/optimize.md +34 -0
  200. package/.grok/skills/seven/reference/overdrive.md +32 -0
  201. package/.grok/skills/seven/reference/polish.md +55 -0
  202. package/.grok/skills/seven/reference/product.md +43 -0
  203. package/.grok/skills/seven/reference/quieter.md +31 -0
  204. package/.grok/skills/seven/reference/routing.md +28 -0
  205. package/.grok/skills/seven/reference/shape.md +85 -0
  206. package/.grok/skills/seven/reference/spatial-design.md +60 -0
  207. package/.grok/skills/seven/reference/typeset.md +28 -0
  208. package/.grok/skills/seven/reference/typography.md +43 -0
  209. package/.grok/skills/seven/reference/ux-writing.md +47 -0
  210. package/.grok/skills/seven/reference/visual-probes.md +36 -0
  211. package/.grok/skills/seven/scripts/context-signals.mjs +94 -0
  212. package/.grok/skills/seven/scripts/critique-storage.mjs +155 -0
  213. package/.grok/skills/seven/scripts/load-context.mjs +93 -0
  214. package/.grok/skills/seven/scripts/update-check.mjs +120 -0
  215. package/.kiro/skills/seven/SKILL.md +161 -0
  216. package/.kiro/skills/seven/reference/adapt.md +34 -0
  217. package/.kiro/skills/seven/reference/animate.md +31 -0
  218. package/.kiro/skills/seven/reference/app-shell.md +152 -0
  219. package/.kiro/skills/seven/reference/audit.md +122 -0
  220. package/.kiro/skills/seven/reference/bolder.md +34 -0
  221. package/.kiro/skills/seven/reference/brand.md +31 -0
  222. package/.kiro/skills/seven/reference/clarify.md +76 -0
  223. package/.kiro/skills/seven/reference/color-and-contrast.md +84 -0
  224. package/.kiro/skills/seven/reference/colorize.md +31 -0
  225. package/.kiro/skills/seven/reference/critique.md +53 -0
  226. package/.kiro/skills/seven/reference/delight.md +30 -0
  227. package/.kiro/skills/seven/reference/distill.md +30 -0
  228. package/.kiro/skills/seven/reference/doctor.md +7 -0
  229. package/.kiro/skills/seven/reference/document.md +36 -0
  230. package/.kiro/skills/seven/reference/evaluations.md +38 -0
  231. package/.kiro/skills/seven/reference/exceptions.md +7 -0
  232. package/.kiro/skills/seven/reference/extract.md +42 -0
  233. package/.kiro/skills/seven/reference/harden.md +36 -0
  234. package/.kiro/skills/seven/reference/hooks.md +11 -0
  235. package/.kiro/skills/seven/reference/init.md +38 -0
  236. package/.kiro/skills/seven/reference/layout.md +33 -0
  237. package/.kiro/skills/seven/reference/live.md +106 -0
  238. package/.kiro/skills/seven/reference/motion-design.md +71 -0
  239. package/.kiro/skills/seven/reference/onboard.md +35 -0
  240. package/.kiro/skills/seven/reference/optimize.md +34 -0
  241. package/.kiro/skills/seven/reference/overdrive.md +32 -0
  242. package/.kiro/skills/seven/reference/polish.md +55 -0
  243. package/.kiro/skills/seven/reference/product.md +43 -0
  244. package/.kiro/skills/seven/reference/quieter.md +31 -0
  245. package/.kiro/skills/seven/reference/routing.md +28 -0
  246. package/.kiro/skills/seven/reference/shape.md +85 -0
  247. package/.kiro/skills/seven/reference/spatial-design.md +60 -0
  248. package/.kiro/skills/seven/reference/typeset.md +28 -0
  249. package/.kiro/skills/seven/reference/typography.md +43 -0
  250. package/.kiro/skills/seven/reference/ux-writing.md +47 -0
  251. package/.kiro/skills/seven/reference/visual-probes.md +36 -0
  252. package/.kiro/skills/seven/scripts/context-signals.mjs +94 -0
  253. package/.kiro/skills/seven/scripts/critique-storage.mjs +155 -0
  254. package/.kiro/skills/seven/scripts/load-context.mjs +93 -0
  255. package/.kiro/skills/seven/scripts/update-check.mjs +120 -0
  256. package/.opencode/skills/seven/SKILL.md +167 -0
  257. package/.opencode/skills/seven/reference/adapt.md +34 -0
  258. package/.opencode/skills/seven/reference/animate.md +31 -0
  259. package/.opencode/skills/seven/reference/app-shell.md +152 -0
  260. package/.opencode/skills/seven/reference/audit.md +122 -0
  261. package/.opencode/skills/seven/reference/bolder.md +34 -0
  262. package/.opencode/skills/seven/reference/brand.md +31 -0
  263. package/.opencode/skills/seven/reference/clarify.md +76 -0
  264. package/.opencode/skills/seven/reference/color-and-contrast.md +84 -0
  265. package/.opencode/skills/seven/reference/colorize.md +31 -0
  266. package/.opencode/skills/seven/reference/critique.md +53 -0
  267. package/.opencode/skills/seven/reference/delight.md +30 -0
  268. package/.opencode/skills/seven/reference/distill.md +30 -0
  269. package/.opencode/skills/seven/reference/doctor.md +7 -0
  270. package/.opencode/skills/seven/reference/document.md +36 -0
  271. package/.opencode/skills/seven/reference/evaluations.md +38 -0
  272. package/.opencode/skills/seven/reference/exceptions.md +7 -0
  273. package/.opencode/skills/seven/reference/extract.md +42 -0
  274. package/.opencode/skills/seven/reference/harden.md +36 -0
  275. package/.opencode/skills/seven/reference/hooks.md +11 -0
  276. package/.opencode/skills/seven/reference/init.md +38 -0
  277. package/.opencode/skills/seven/reference/layout.md +33 -0
  278. package/.opencode/skills/seven/reference/live.md +106 -0
  279. package/.opencode/skills/seven/reference/motion-design.md +71 -0
  280. package/.opencode/skills/seven/reference/onboard.md +35 -0
  281. package/.opencode/skills/seven/reference/optimize.md +34 -0
  282. package/.opencode/skills/seven/reference/overdrive.md +32 -0
  283. package/.opencode/skills/seven/reference/polish.md +55 -0
  284. package/.opencode/skills/seven/reference/product.md +43 -0
  285. package/.opencode/skills/seven/reference/quieter.md +31 -0
  286. package/.opencode/skills/seven/reference/routing.md +28 -0
  287. package/.opencode/skills/seven/reference/shape.md +85 -0
  288. package/.opencode/skills/seven/reference/spatial-design.md +60 -0
  289. package/.opencode/skills/seven/reference/typeset.md +28 -0
  290. package/.opencode/skills/seven/reference/typography.md +43 -0
  291. package/.opencode/skills/seven/reference/ux-writing.md +47 -0
  292. package/.opencode/skills/seven/reference/visual-probes.md +36 -0
  293. package/.opencode/skills/seven/scripts/context-signals.mjs +94 -0
  294. package/.opencode/skills/seven/scripts/critique-storage.mjs +155 -0
  295. package/.opencode/skills/seven/scripts/load-context.mjs +93 -0
  296. package/.opencode/skills/seven/scripts/update-check.mjs +120 -0
  297. package/.pi/skills/seven/SKILL.md +165 -0
  298. package/.pi/skills/seven/reference/adapt.md +34 -0
  299. package/.pi/skills/seven/reference/animate.md +31 -0
  300. package/.pi/skills/seven/reference/app-shell.md +152 -0
  301. package/.pi/skills/seven/reference/audit.md +122 -0
  302. package/.pi/skills/seven/reference/bolder.md +34 -0
  303. package/.pi/skills/seven/reference/brand.md +31 -0
  304. package/.pi/skills/seven/reference/clarify.md +76 -0
  305. package/.pi/skills/seven/reference/color-and-contrast.md +84 -0
  306. package/.pi/skills/seven/reference/colorize.md +31 -0
  307. package/.pi/skills/seven/reference/critique.md +53 -0
  308. package/.pi/skills/seven/reference/delight.md +30 -0
  309. package/.pi/skills/seven/reference/distill.md +30 -0
  310. package/.pi/skills/seven/reference/doctor.md +7 -0
  311. package/.pi/skills/seven/reference/document.md +36 -0
  312. package/.pi/skills/seven/reference/evaluations.md +38 -0
  313. package/.pi/skills/seven/reference/exceptions.md +7 -0
  314. package/.pi/skills/seven/reference/extract.md +42 -0
  315. package/.pi/skills/seven/reference/harden.md +36 -0
  316. package/.pi/skills/seven/reference/hooks.md +11 -0
  317. package/.pi/skills/seven/reference/init.md +38 -0
  318. package/.pi/skills/seven/reference/layout.md +33 -0
  319. package/.pi/skills/seven/reference/live.md +106 -0
  320. package/.pi/skills/seven/reference/motion-design.md +71 -0
  321. package/.pi/skills/seven/reference/onboard.md +35 -0
  322. package/.pi/skills/seven/reference/optimize.md +34 -0
  323. package/.pi/skills/seven/reference/overdrive.md +32 -0
  324. package/.pi/skills/seven/reference/polish.md +55 -0
  325. package/.pi/skills/seven/reference/product.md +43 -0
  326. package/.pi/skills/seven/reference/quieter.md +31 -0
  327. package/.pi/skills/seven/reference/routing.md +28 -0
  328. package/.pi/skills/seven/reference/shape.md +85 -0
  329. package/.pi/skills/seven/reference/spatial-design.md +60 -0
  330. package/.pi/skills/seven/reference/typeset.md +28 -0
  331. package/.pi/skills/seven/reference/typography.md +43 -0
  332. package/.pi/skills/seven/reference/ux-writing.md +47 -0
  333. package/.pi/skills/seven/reference/visual-probes.md +36 -0
  334. package/.pi/skills/seven/scripts/context-signals.mjs +94 -0
  335. package/.pi/skills/seven/scripts/critique-storage.mjs +155 -0
  336. package/.pi/skills/seven/scripts/load-context.mjs +93 -0
  337. package/.pi/skills/seven/scripts/update-check.mjs +120 -0
  338. package/.qoder/skills/seven/SKILL.md +167 -0
  339. package/.qoder/skills/seven/reference/adapt.md +34 -0
  340. package/.qoder/skills/seven/reference/animate.md +31 -0
  341. package/.qoder/skills/seven/reference/app-shell.md +152 -0
  342. package/.qoder/skills/seven/reference/audit.md +122 -0
  343. package/.qoder/skills/seven/reference/bolder.md +34 -0
  344. package/.qoder/skills/seven/reference/brand.md +31 -0
  345. package/.qoder/skills/seven/reference/clarify.md +76 -0
  346. package/.qoder/skills/seven/reference/color-and-contrast.md +84 -0
  347. package/.qoder/skills/seven/reference/colorize.md +31 -0
  348. package/.qoder/skills/seven/reference/critique.md +53 -0
  349. package/.qoder/skills/seven/reference/delight.md +30 -0
  350. package/.qoder/skills/seven/reference/distill.md +30 -0
  351. package/.qoder/skills/seven/reference/doctor.md +7 -0
  352. package/.qoder/skills/seven/reference/document.md +36 -0
  353. package/.qoder/skills/seven/reference/evaluations.md +38 -0
  354. package/.qoder/skills/seven/reference/exceptions.md +7 -0
  355. package/.qoder/skills/seven/reference/extract.md +42 -0
  356. package/.qoder/skills/seven/reference/harden.md +36 -0
  357. package/.qoder/skills/seven/reference/hooks.md +11 -0
  358. package/.qoder/skills/seven/reference/init.md +38 -0
  359. package/.qoder/skills/seven/reference/layout.md +33 -0
  360. package/.qoder/skills/seven/reference/live.md +106 -0
  361. package/.qoder/skills/seven/reference/motion-design.md +71 -0
  362. package/.qoder/skills/seven/reference/onboard.md +35 -0
  363. package/.qoder/skills/seven/reference/optimize.md +34 -0
  364. package/.qoder/skills/seven/reference/overdrive.md +32 -0
  365. package/.qoder/skills/seven/reference/polish.md +55 -0
  366. package/.qoder/skills/seven/reference/product.md +43 -0
  367. package/.qoder/skills/seven/reference/quieter.md +31 -0
  368. package/.qoder/skills/seven/reference/routing.md +28 -0
  369. package/.qoder/skills/seven/reference/shape.md +85 -0
  370. package/.qoder/skills/seven/reference/spatial-design.md +60 -0
  371. package/.qoder/skills/seven/reference/typeset.md +28 -0
  372. package/.qoder/skills/seven/reference/typography.md +43 -0
  373. package/.qoder/skills/seven/reference/ux-writing.md +47 -0
  374. package/.qoder/skills/seven/reference/visual-probes.md +36 -0
  375. package/.qoder/skills/seven/scripts/context-signals.mjs +94 -0
  376. package/.qoder/skills/seven/scripts/critique-storage.mjs +155 -0
  377. package/.qoder/skills/seven/scripts/load-context.mjs +93 -0
  378. package/.qoder/skills/seven/scripts/update-check.mjs +120 -0
  379. package/.rovodev/skills/seven/SKILL.md +167 -0
  380. package/.rovodev/skills/seven/reference/adapt.md +34 -0
  381. package/.rovodev/skills/seven/reference/animate.md +31 -0
  382. package/.rovodev/skills/seven/reference/app-shell.md +152 -0
  383. package/.rovodev/skills/seven/reference/audit.md +122 -0
  384. package/.rovodev/skills/seven/reference/bolder.md +34 -0
  385. package/.rovodev/skills/seven/reference/brand.md +31 -0
  386. package/.rovodev/skills/seven/reference/clarify.md +76 -0
  387. package/.rovodev/skills/seven/reference/color-and-contrast.md +84 -0
  388. package/.rovodev/skills/seven/reference/colorize.md +31 -0
  389. package/.rovodev/skills/seven/reference/critique.md +53 -0
  390. package/.rovodev/skills/seven/reference/delight.md +30 -0
  391. package/.rovodev/skills/seven/reference/distill.md +30 -0
  392. package/.rovodev/skills/seven/reference/doctor.md +7 -0
  393. package/.rovodev/skills/seven/reference/document.md +36 -0
  394. package/.rovodev/skills/seven/reference/evaluations.md +38 -0
  395. package/.rovodev/skills/seven/reference/exceptions.md +7 -0
  396. package/.rovodev/skills/seven/reference/extract.md +42 -0
  397. package/.rovodev/skills/seven/reference/harden.md +36 -0
  398. package/.rovodev/skills/seven/reference/hooks.md +11 -0
  399. package/.rovodev/skills/seven/reference/init.md +38 -0
  400. package/.rovodev/skills/seven/reference/layout.md +33 -0
  401. package/.rovodev/skills/seven/reference/live.md +106 -0
  402. package/.rovodev/skills/seven/reference/motion-design.md +71 -0
  403. package/.rovodev/skills/seven/reference/onboard.md +35 -0
  404. package/.rovodev/skills/seven/reference/optimize.md +34 -0
  405. package/.rovodev/skills/seven/reference/overdrive.md +32 -0
  406. package/.rovodev/skills/seven/reference/polish.md +55 -0
  407. package/.rovodev/skills/seven/reference/product.md +43 -0
  408. package/.rovodev/skills/seven/reference/quieter.md +31 -0
  409. package/.rovodev/skills/seven/reference/routing.md +28 -0
  410. package/.rovodev/skills/seven/reference/shape.md +85 -0
  411. package/.rovodev/skills/seven/reference/spatial-design.md +60 -0
  412. package/.rovodev/skills/seven/reference/typeset.md +28 -0
  413. package/.rovodev/skills/seven/reference/typography.md +43 -0
  414. package/.rovodev/skills/seven/reference/ux-writing.md +47 -0
  415. package/.rovodev/skills/seven/reference/visual-probes.md +36 -0
  416. package/.rovodev/skills/seven/scripts/context-signals.mjs +94 -0
  417. package/.rovodev/skills/seven/scripts/critique-storage.mjs +155 -0
  418. package/.rovodev/skills/seven/scripts/load-context.mjs +93 -0
  419. package/.rovodev/skills/seven/scripts/update-check.mjs +120 -0
  420. package/.trae/skills/seven/SKILL.md +163 -0
  421. package/.trae/skills/seven/reference/adapt.md +34 -0
  422. package/.trae/skills/seven/reference/animate.md +31 -0
  423. package/.trae/skills/seven/reference/app-shell.md +152 -0
  424. package/.trae/skills/seven/reference/audit.md +122 -0
  425. package/.trae/skills/seven/reference/bolder.md +34 -0
  426. package/.trae/skills/seven/reference/brand.md +31 -0
  427. package/.trae/skills/seven/reference/clarify.md +76 -0
  428. package/.trae/skills/seven/reference/color-and-contrast.md +84 -0
  429. package/.trae/skills/seven/reference/colorize.md +31 -0
  430. package/.trae/skills/seven/reference/critique.md +53 -0
  431. package/.trae/skills/seven/reference/delight.md +30 -0
  432. package/.trae/skills/seven/reference/distill.md +30 -0
  433. package/.trae/skills/seven/reference/doctor.md +7 -0
  434. package/.trae/skills/seven/reference/document.md +36 -0
  435. package/.trae/skills/seven/reference/evaluations.md +38 -0
  436. package/.trae/skills/seven/reference/exceptions.md +7 -0
  437. package/.trae/skills/seven/reference/extract.md +42 -0
  438. package/.trae/skills/seven/reference/harden.md +36 -0
  439. package/.trae/skills/seven/reference/hooks.md +11 -0
  440. package/.trae/skills/seven/reference/init.md +38 -0
  441. package/.trae/skills/seven/reference/layout.md +33 -0
  442. package/.trae/skills/seven/reference/live.md +106 -0
  443. package/.trae/skills/seven/reference/motion-design.md +71 -0
  444. package/.trae/skills/seven/reference/onboard.md +35 -0
  445. package/.trae/skills/seven/reference/optimize.md +34 -0
  446. package/.trae/skills/seven/reference/overdrive.md +32 -0
  447. package/.trae/skills/seven/reference/polish.md +55 -0
  448. package/.trae/skills/seven/reference/product.md +43 -0
  449. package/.trae/skills/seven/reference/quieter.md +31 -0
  450. package/.trae/skills/seven/reference/routing.md +28 -0
  451. package/.trae/skills/seven/reference/shape.md +85 -0
  452. package/.trae/skills/seven/reference/spatial-design.md +60 -0
  453. package/.trae/skills/seven/reference/typeset.md +28 -0
  454. package/.trae/skills/seven/reference/typography.md +43 -0
  455. package/.trae/skills/seven/reference/ux-writing.md +47 -0
  456. package/.trae/skills/seven/reference/visual-probes.md +36 -0
  457. package/.trae/skills/seven/scripts/context-signals.mjs +94 -0
  458. package/.trae/skills/seven/scripts/critique-storage.mjs +155 -0
  459. package/.trae/skills/seven/scripts/load-context.mjs +93 -0
  460. package/.trae/skills/seven/scripts/update-check.mjs +120 -0
  461. package/.trae-cn/skills/seven/SKILL.md +163 -0
  462. package/.trae-cn/skills/seven/reference/adapt.md +34 -0
  463. package/.trae-cn/skills/seven/reference/animate.md +31 -0
  464. package/.trae-cn/skills/seven/reference/app-shell.md +152 -0
  465. package/.trae-cn/skills/seven/reference/audit.md +122 -0
  466. package/.trae-cn/skills/seven/reference/bolder.md +34 -0
  467. package/.trae-cn/skills/seven/reference/brand.md +31 -0
  468. package/.trae-cn/skills/seven/reference/clarify.md +76 -0
  469. package/.trae-cn/skills/seven/reference/color-and-contrast.md +84 -0
  470. package/.trae-cn/skills/seven/reference/colorize.md +31 -0
  471. package/.trae-cn/skills/seven/reference/critique.md +53 -0
  472. package/.trae-cn/skills/seven/reference/delight.md +30 -0
  473. package/.trae-cn/skills/seven/reference/distill.md +30 -0
  474. package/.trae-cn/skills/seven/reference/doctor.md +7 -0
  475. package/.trae-cn/skills/seven/reference/document.md +36 -0
  476. package/.trae-cn/skills/seven/reference/evaluations.md +38 -0
  477. package/.trae-cn/skills/seven/reference/exceptions.md +7 -0
  478. package/.trae-cn/skills/seven/reference/extract.md +42 -0
  479. package/.trae-cn/skills/seven/reference/harden.md +36 -0
  480. package/.trae-cn/skills/seven/reference/hooks.md +11 -0
  481. package/.trae-cn/skills/seven/reference/init.md +38 -0
  482. package/.trae-cn/skills/seven/reference/layout.md +33 -0
  483. package/.trae-cn/skills/seven/reference/live.md +106 -0
  484. package/.trae-cn/skills/seven/reference/motion-design.md +71 -0
  485. package/.trae-cn/skills/seven/reference/onboard.md +35 -0
  486. package/.trae-cn/skills/seven/reference/optimize.md +34 -0
  487. package/.trae-cn/skills/seven/reference/overdrive.md +32 -0
  488. package/.trae-cn/skills/seven/reference/polish.md +55 -0
  489. package/.trae-cn/skills/seven/reference/product.md +43 -0
  490. package/.trae-cn/skills/seven/reference/quieter.md +31 -0
  491. package/.trae-cn/skills/seven/reference/routing.md +28 -0
  492. package/.trae-cn/skills/seven/reference/shape.md +85 -0
  493. package/.trae-cn/skills/seven/reference/spatial-design.md +60 -0
  494. package/.trae-cn/skills/seven/reference/typeset.md +28 -0
  495. package/.trae-cn/skills/seven/reference/typography.md +43 -0
  496. package/.trae-cn/skills/seven/reference/ux-writing.md +47 -0
  497. package/.trae-cn/skills/seven/reference/visual-probes.md +36 -0
  498. package/.trae-cn/skills/seven/scripts/context-signals.mjs +94 -0
  499. package/.trae-cn/skills/seven/scripts/critique-storage.mjs +155 -0
  500. package/.trae-cn/skills/seven/scripts/load-context.mjs +93 -0
  501. package/.trae-cn/skills/seven/scripts/update-check.mjs +120 -0
  502. package/.vibe/skills/seven/SKILL.md +166 -0
  503. package/.vibe/skills/seven/reference/adapt.md +34 -0
  504. package/.vibe/skills/seven/reference/animate.md +31 -0
  505. package/.vibe/skills/seven/reference/app-shell.md +152 -0
  506. package/.vibe/skills/seven/reference/audit.md +122 -0
  507. package/.vibe/skills/seven/reference/bolder.md +34 -0
  508. package/.vibe/skills/seven/reference/brand.md +31 -0
  509. package/.vibe/skills/seven/reference/clarify.md +76 -0
  510. package/.vibe/skills/seven/reference/color-and-contrast.md +84 -0
  511. package/.vibe/skills/seven/reference/colorize.md +31 -0
  512. package/.vibe/skills/seven/reference/critique.md +53 -0
  513. package/.vibe/skills/seven/reference/delight.md +30 -0
  514. package/.vibe/skills/seven/reference/distill.md +30 -0
  515. package/.vibe/skills/seven/reference/doctor.md +7 -0
  516. package/.vibe/skills/seven/reference/document.md +36 -0
  517. package/.vibe/skills/seven/reference/evaluations.md +38 -0
  518. package/.vibe/skills/seven/reference/exceptions.md +7 -0
  519. package/.vibe/skills/seven/reference/extract.md +42 -0
  520. package/.vibe/skills/seven/reference/harden.md +36 -0
  521. package/.vibe/skills/seven/reference/hooks.md +11 -0
  522. package/.vibe/skills/seven/reference/init.md +38 -0
  523. package/.vibe/skills/seven/reference/layout.md +33 -0
  524. package/.vibe/skills/seven/reference/live.md +106 -0
  525. package/.vibe/skills/seven/reference/motion-design.md +71 -0
  526. package/.vibe/skills/seven/reference/onboard.md +35 -0
  527. package/.vibe/skills/seven/reference/optimize.md +34 -0
  528. package/.vibe/skills/seven/reference/overdrive.md +32 -0
  529. package/.vibe/skills/seven/reference/polish.md +55 -0
  530. package/.vibe/skills/seven/reference/product.md +43 -0
  531. package/.vibe/skills/seven/reference/quieter.md +31 -0
  532. package/.vibe/skills/seven/reference/routing.md +28 -0
  533. package/.vibe/skills/seven/reference/shape.md +85 -0
  534. package/.vibe/skills/seven/reference/spatial-design.md +60 -0
  535. package/.vibe/skills/seven/reference/typeset.md +28 -0
  536. package/.vibe/skills/seven/reference/typography.md +43 -0
  537. package/.vibe/skills/seven/reference/ux-writing.md +47 -0
  538. package/.vibe/skills/seven/reference/visual-probes.md +36 -0
  539. package/.vibe/skills/seven/scripts/context-signals.mjs +94 -0
  540. package/.vibe/skills/seven/scripts/critique-storage.mjs +155 -0
  541. package/.vibe/skills/seven/scripts/load-context.mjs +93 -0
  542. package/.vibe/skills/seven/scripts/update-check.mjs +120 -0
  543. package/README.md +51 -90
  544. package/cli/bin/seven.mjs +0 -0
  545. package/cli/engine/browser/injected/index.mjs +62 -13
  546. package/cli/engine/detect-antipatterns-browser.js +4743 -23
  547. package/cli/engine/detect-antipatterns.mjs +1 -0
  548. package/cli/engine/engines/browser/detect-url.mjs +366 -3
  549. package/cli/engine/engines/regex/detect-text.mjs +469 -1
  550. package/cli/engine/engines/static-html/detect-html.mjs +131 -0
  551. package/cli/engine/registry/seven-antipatterns.mjs +379 -4
  552. package/cli/engine/rules/checks.mjs +360 -1
  553. package/cli/engine/shared/tokens.mjs +19 -0
  554. package/cli/engine/token-data.generated.mjs +4029 -4
  555. package/docs/detector-rules.md +277 -38
  556. package/docs/upstream-parity.json +242 -0
  557. package/extension/README.md +5 -0
  558. package/extension/background/service-worker.js +134 -0
  559. package/extension/content/content-script.js +340 -0
  560. package/extension/detector/detect.js +7816 -0
  561. package/extension/devtools/devtools.html +1 -0
  562. package/extension/devtools/devtools.js +3 -0
  563. package/extension/devtools/panel.css +66 -0
  564. package/extension/devtools/panel.html +3 -0
  565. package/extension/devtools/panel.js +37 -0
  566. package/extension/manifest.json +22 -0
  567. package/extension/popup/popup.css +106 -0
  568. package/extension/popup/popup.html +27 -0
  569. package/extension/popup/popup.js +74 -0
  570. package/package.json +18 -7
@@ -927,6 +927,88 @@ export function checkHtmlPatterns(html) {
927
927
  }
928
928
  }
929
929
 
930
+ // Current generic signals retained by Seven. They are advisory unless the
931
+ // registry classifies a concrete readability/layout failure as quality.
932
+ if (/radial-gradient\([^;{}\n]*(?:transparent|rgba\([^)]*,\s*0(?:\.0+)?\s*\))/i.test(html) &&
933
+ !/(?:data-role=["']chart|heatmap|radar|mask-image)/i.test(html)) {
934
+ findings.push({ id: 'radial-halo', snippet: 'radial-gradient color wash fading to transparent' })
935
+ }
936
+
937
+ if (/<marquee\b/i.test(html) || /\banimate-(?:marquee|ticker|scroll)\b/i.test(html)) {
938
+ findings.push({ id: 'marquee', snippet: 'auto-scrolling marquee' })
939
+ }
940
+
941
+ if (/\banimate-(?:blink|cursor|caret)\b|animation(?:-name)?\s*:\s*(?:blink|cursor|caret)\b/i.test(html) &&
942
+ !/(?:input-?otp|otpinput|contenteditable|<input\b|<textarea\b)/i.test(html)) {
943
+ findings.push({ id: 'blinking-cursor', snippet: 'decorative blink/caret animation' })
944
+ }
945
+
946
+ const pulseTag = html.match(/<(?:span|div|i)\b[^>]*(?:animate-pulse|animation\s*:\s*[^;"']*pulse)[^>]*(?:rounded-full|border-radius\s*:\s*50%)[^>]*>/i)
947
+ if (pulseTag && /\b(?:size|w|h)-(?:1|1\.5|2|2\.5|3|3\.5|4)\b|(?:width|height)\s*:\s*(?:[1-9]|1[0-6])px/i.test(pulseTag[0])) {
948
+ findings.push({ id: 'pulsing-dot', snippet: 'small round element with pulse animation' })
949
+ }
950
+
951
+ const svgRe = /<svg\b([^>]*)>([\s\S]*?)<\/svg>/gi
952
+ let svgMatch
953
+ while ((svgMatch = svgRe.exec(html)) !== null) {
954
+ if (/(?:chart|graph|logo|icon|sparkline|data-viz|data-role=["']chart)/i.test(svgMatch[1])) continue
955
+ const primitives = [...svgMatch[2].matchAll(/<(?:rect|circle|ellipse|polygon|path)\b/gi)].length
956
+ const dimensions = `${svgMatch[1]}`.match(/(?:width|height|viewBox)\s*=\s*["'][^"']*(?:2\d{2}|[3-9]\d{2,})/i)
957
+ if (primitives >= 12 && dimensions) {
958
+ findings.push({ id: 'shape-assembled-illustration', snippet: `${primitives} primitive SVG shapes in a large visual` })
959
+ break
960
+ }
961
+ }
962
+
963
+ const numberedLabels = [...html.matchAll(/<(?:span|small|div)\b[^>]*(?:text-(?:xs|\[(?:length:)?(?:8|9|10|11)px\])|font-size\s*:\s*(?:8|9|10|11)px)[^>]*>\s*(?:0?\d{1,2}|[IVX]{1,5})\s*<\/[^>]+>[\s\S]{0,240}?<h[2-5]\b/gi)]
964
+ if (numberedLabels.length >= 3) findings.push({ id: 'numbered-section-labels', snippet: `${numberedLabels.length} tiny numbered section labels` })
965
+
966
+ const displayH1 = html.match(/<h1\b([^>]*(?:\btext-(?:7xl|8xl|9xl)\b|font-size\s*:\s*(?:6[4-9]|[7-9]\d|\d{3,})px)[^>]*)>([\s\S]*?)<\/h1>/i)
967
+ if (displayH1) {
968
+ const text = displayH1[2].replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim()
969
+ if (text.length >= 32 || text.split(/\s+/).length >= 6) findings.push({ id: 'oversized-h1', snippet: `display h1 with ${text.length} characters` })
970
+ }
971
+
972
+ const tracking = html.match(/letter-spacing\s*:\s*(-?[\d.]+)(em|px)|\btracking-\[(-?[\d.]+)(em|px)\]/i)
973
+ if (tracking) {
974
+ const value = Number(tracking[1] ?? tracking[3])
975
+ const unit = String(tracking[2] ?? tracking[4]).toLowerCase()
976
+ if ((unit === 'em' && value < -0.075) || (unit === 'px' && value < -1.2)) {
977
+ findings.push({ id: 'extreme-negative-tracking', snippet: tracking[0] })
978
+ }
979
+ }
980
+
981
+ if (/repeating-(?:linear|radial|conic)-gradient\s*\(/i.test(html) &&
982
+ !/(?:data-role=["']chart|progress|skeleton|mask-image|checkerboard|color-picker|alpha)/i.test(html)) {
983
+ findings.push({ id: 'repeating-stripes-gradient', snippet: 'repeating-gradient decorative stripes' })
984
+ }
985
+
986
+ const linearGradients = [...html.matchAll(/linear-gradient\s*\(/gi)]
987
+ if (linearGradients.length >= 2 && /background-size\s*:\s*\d+(?:px|rem)\s+\d+(?:px|rem)/i.test(html) &&
988
+ /(?:1px|\.5px)[^;{}]{0,160}(?:transparent|rgba\([^)]*,\s*0)/i.test(html) &&
989
+ !/(?:data-role=["'](?:chart|canvas|map)|blueprint|measurement)/i.test(html)) {
990
+ findings.push({ id: 'codex-grid-background', snippet: 'two-axis tiled hairline gradient grid' })
991
+ }
992
+
993
+ if (/img\s*:\s*hover\s*\{[^}]*transform\s*:\s*(?:scale|rotate)|<img\b[^>]*\bhover:(?:scale|rotate)-/i.test(html)) {
994
+ findings.push({ id: 'image-hover-transform', snippet: 'image scales or rotates on hover' })
995
+ }
996
+
997
+ const visibleCopy = html
998
+ .replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, ' ')
999
+ .replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi, ' ')
1000
+ .replace(/<[^>]+>/g, ' ')
1001
+ .replace(/\s+/g, ' ')
1002
+ const buzzword = visibleCopy.match(/\b(?:streamline|empower|supercharge|world-class|enterprise-grade|next-generation|cutting-edge|seamless|revolucione|potencialize|líder de mercado|de ponta|sem atrito|nível empresarial|tudo em um)\b/i)
1003
+ if (buzzword) findings.push({ id: 'marketing-buzzword', snippet: `generic claim: "${buzzword[0]}"` })
1004
+ const aphorisms = [
1005
+ ...(visibleCopy.match(/\bnão\s+[^.!?]{2,50}[.!?]\s+(?:é|apenas|simplesmente|só)\s+[^.!?]{2,50}[.!?]/gim) || []),
1006
+ ...(visibleCopy.match(/\bnot\s+[^.!?]{2,50}[.!?]\s+(?:just|simply)\s+[^.!?]{2,50}[.!?]/gim) || []),
1007
+ ]
1008
+ if (aphorisms.length >= 3) findings.push({ id: 'aphoristic-cadence', snippet: `${aphorisms.length} repeated contrast constructions` })
1009
+ const theater = visibleCopy.match(/\b(?:security|innovation|compliance|productivity|growth|performance|automation|design|segurança|inovação|conformidade|produtividade|crescimento|performance|automação|design)\s+theater\b/i)
1010
+ if (theater) findings.push({ id: 'theater-slop-phrase', snippet: `"${theater[0]}"` })
1011
+
930
1012
  return findings
931
1013
  }
932
1014
 
@@ -1264,8 +1346,285 @@ export function checkElementQualityDOM(el) {
1264
1346
  })
1265
1347
  }
1266
1348
 
1349
+ function directSlotChild(parent, slot) {
1350
+ if (!parent) return null
1351
+ return [...parent.querySelectorAll(`[data-slot="${slot}"]`)].find(
1352
+ (element) => element.parentElement === parent
1353
+ ) || null
1354
+ }
1355
+
1356
+ function isVisibleElement(element, win) {
1357
+ if (!element || !win?.getComputedStyle || typeof element.getBoundingClientRect !== 'function') {
1358
+ return Boolean(element)
1359
+ }
1360
+ const style = win.getComputedStyle(element)
1361
+ const rect = element.getBoundingClientRect()
1362
+ return (
1363
+ style.display !== 'none' &&
1364
+ style.visibility !== 'hidden' &&
1365
+ Number(style.opacity || 1) > 0 &&
1366
+ rect.width > 0 &&
1367
+ rect.height > 0
1368
+ )
1369
+ }
1370
+
1371
+ function hasAncestorWithAttribute(element, attribute, value = null) {
1372
+ let current = element?.parentElement
1373
+ while (current) {
1374
+ if (
1375
+ current.hasAttribute?.(attribute) &&
1376
+ (value === null || current.getAttribute(attribute) === value)
1377
+ ) {
1378
+ return true
1379
+ }
1380
+ current = current.parentElement
1381
+ }
1382
+ return false
1383
+ }
1384
+
1385
+ /**
1386
+ * Seven dual-Rail contract. Static HTML verifies stable labels and valid
1387
+ * interactive markup. Browser mode additionally verifies that mobile ARIA and
1388
+ * panel visibility follow openMobile, never the desktop panel state.
1389
+ * @param {any} doc
1390
+ * @param {any} [win]
1391
+ */
1392
+ export function checkSidebarRailBehavior(doc, win = null) {
1393
+ const findings = []
1394
+ const wrappers = [...doc.querySelectorAll('[data-slot="sidebar-wrapper"][data-mode="dual"]')]
1395
+ const viewportWidth = Number(win?.innerWidth)
1396
+ const isMobileViewport = Number.isFinite(viewportWidth) && viewportWidth > 0 && viewportWidth < 768
1397
+
1398
+ for (const wrapper of wrappers) {
1399
+ for (const button of wrapper.querySelectorAll('[data-slot="sidebar-rail-button"]')) {
1400
+ const label = String(button.getAttribute('data-label') || '').trim()
1401
+ if (!label) {
1402
+ findings.push({
1403
+ id: 'sidebar-rail-behavior',
1404
+ snippet: 'Dual Rail button has no stable data-label for its expanded state',
1405
+ })
1406
+ }
1407
+
1408
+ const tag = String(button.tagName || '').toLowerCase()
1409
+ const parentTag = String(button.parentElement?.tagName || '').toLowerCase()
1410
+ const nestedInteractive = button.querySelector?.('a,button,[role="button"],[role="link"]')
1411
+ if (
1412
+ (tag === 'button' && (parentTag === 'a' || button.parentElement?.getAttribute?.('role') === 'link')) ||
1413
+ nestedInteractive
1414
+ ) {
1415
+ findings.push({
1416
+ id: 'sidebar-rail-behavior',
1417
+ snippet: 'Dual Rail navigation nests interactive elements instead of using asChild',
1418
+ })
1419
+ }
1420
+ }
1421
+
1422
+ if (!isMobileViewport) continue
1423
+
1424
+ const visibleMobileSidebar = [...doc.querySelectorAll(
1425
+ '[data-slot="sidebar"][data-mobile="true"]'
1426
+ )].find((element) => isVisibleElement(element, win)) || null
1427
+ const sheetOpen = Boolean(visibleMobileSidebar)
1428
+ const triggers = [...wrapper.querySelectorAll('[data-slot="sidebar-trigger"]')].filter(
1429
+ (trigger) =>
1430
+ !hasAncestorWithAttribute(trigger, 'data-mobile', 'true') &&
1431
+ isVisibleElement(trigger, win)
1432
+ )
1433
+
1434
+ for (const trigger of triggers) {
1435
+ if (trigger.getAttribute('aria-expanded') !== String(sheetOpen)) {
1436
+ findings.push({
1437
+ id: 'sidebar-rail-behavior',
1438
+ snippet: 'Mobile SidebarTrigger aria-expanded does not match the visible Sheet',
1439
+ })
1440
+ break
1441
+ }
1442
+ }
1443
+
1444
+ if (!visibleMobileSidebar) continue
1445
+ const panel = visibleMobileSidebar.querySelector('[data-slot="sidebar-panel-content"]')
1446
+ if (
1447
+ !panel ||
1448
+ panel.getAttribute('data-state') !== 'expanded' ||
1449
+ !isVisibleElement(panel, win)
1450
+ ) {
1451
+ findings.push({
1452
+ id: 'sidebar-rail-behavior',
1453
+ snippet: 'Open dual mobile Sheet does not expose a full expanded panel',
1454
+ })
1455
+ continue
1456
+ }
1457
+
1458
+ const sheetRect = visibleMobileSidebar.getBoundingClientRect()
1459
+ const panelRect = panel.getBoundingClientRect()
1460
+ if (sheetRect.width > 0 && panelRect.width < sheetRect.width * 0.75) {
1461
+ findings.push({
1462
+ id: 'sidebar-rail-behavior',
1463
+ snippet: 'Dual mobile panel retained the collapsed desktop width',
1464
+ })
1465
+ }
1466
+ }
1467
+
1468
+ return findings
1469
+ }
1470
+
1471
+ /**
1472
+ * Seven application-shell contract shared by static HTML and the live browser:
1473
+ * Sidebar + SidebarInset are direct siblings and the shell Topbar is the
1474
+ * borderless first chrome child of the Inset. Browser mode adds L-geometry,
1475
+ * the visible mobile trigger assertion, and mobile leading-slot overflow.
1476
+ */
1477
+ export function checkSidebarTopbarShell(doc, win = null) {
1478
+ const findings = []
1479
+ const wrappers = [...doc.querySelectorAll('[data-slot="sidebar-wrapper"]')]
1480
+ const viewportWidth = Number(win?.innerWidth)
1481
+ const hasViewport = Number.isFinite(viewportWidth) && viewportWidth > 0
1482
+
1483
+ for (const wrapper of wrappers) {
1484
+ const inset = directSlotChild(wrapper, 'sidebar-inset')
1485
+ const directOutsideTopbar = directSlotChild(wrapper, 'topbar')
1486
+ const siblingOutsideTopbar = [...(wrapper.parentElement?.children || [])].find(
1487
+ (element) =>
1488
+ element !== wrapper &&
1489
+ element.getAttribute?.('data-slot') === 'topbar'
1490
+ ) || null
1491
+ const outsideTopbar = directOutsideTopbar || siblingOutsideTopbar
1492
+ if (!inset) {
1493
+ if (outsideTopbar) {
1494
+ findings.push({
1495
+ id: 'sidebar-topbar-shell',
1496
+ snippet: 'Shell Topbar renders outside SidebarInset',
1497
+ })
1498
+ }
1499
+ continue
1500
+ }
1501
+
1502
+ const topbars = [...inset.querySelectorAll('[data-slot="topbar"]')].filter(
1503
+ (element) => element.parentElement === inset
1504
+ )
1505
+ if (topbars.length === 0) {
1506
+ if (outsideTopbar) {
1507
+ findings.push({
1508
+ id: 'sidebar-topbar-shell',
1509
+ snippet: 'Shell Topbar renders outside SidebarInset',
1510
+ })
1511
+ }
1512
+ continue
1513
+ }
1514
+
1515
+ const firstElement = [...inset.children][0]
1516
+ if (firstElement !== topbars[0]) {
1517
+ findings.push({
1518
+ id: 'sidebar-topbar-shell',
1519
+ snippet: 'Shell Topbar is not the first direct child of SidebarInset',
1520
+ })
1521
+ }
1522
+
1523
+ const sidebar = directSlotChild(wrapper, 'sidebar')
1524
+ const staticSidebar = sidebar?.getAttribute('data-collapsible') === 'none'
1525
+ if ((!hasViewport || viewportWidth >= 768) && !sidebar) {
1526
+ findings.push({
1527
+ id: 'sidebar-topbar-shell',
1528
+ snippet: 'Sidebar and SidebarInset are not direct siblings under SidebarProvider',
1529
+ })
1530
+ }
1531
+
1532
+ if (win?.getComputedStyle) {
1533
+ for (const topbar of topbars) {
1534
+ const style = win.getComputedStyle(topbar)
1535
+ const borderWidth = Math.max(
1536
+ parseFloat(style.borderTopWidth) || 0,
1537
+ parseFloat(style.borderRightWidth) || 0,
1538
+ parseFloat(style.borderBottomWidth) || 0,
1539
+ parseFloat(style.borderLeftWidth) || 0
1540
+ )
1541
+ if (borderWidth > 0 || (style.boxShadow && style.boxShadow !== 'none')) {
1542
+ findings.push({
1543
+ id: 'sidebar-topbar-shell',
1544
+ snippet: 'Shell Topbar renders a border or shadow',
1545
+ })
1546
+ break
1547
+ }
1548
+ }
1549
+ }
1550
+
1551
+ if (
1552
+ hasViewport &&
1553
+ viewportWidth >= 768 &&
1554
+ sidebar &&
1555
+ typeof sidebar.getBoundingClientRect === 'function'
1556
+ ) {
1557
+ const sidebarRect = sidebar.getBoundingClientRect()
1558
+ const topbarRect = topbars[0].getBoundingClientRect()
1559
+ const side = sidebar.getAttribute('data-side') || 'left'
1560
+ const overlapsSidebar =
1561
+ side === 'right'
1562
+ ? topbarRect.right > sidebarRect.left + 1
1563
+ : topbarRect.left < sidebarRect.right - 1
1564
+ if (sidebarRect.width > 0 && topbarRect.width > 0 && overlapsSidebar) {
1565
+ findings.push({
1566
+ id: 'sidebar-topbar-shell',
1567
+ snippet: 'Topbar overlaps the desktop Sidebar; rendered shell is T-shaped',
1568
+ })
1569
+ }
1570
+
1571
+ const wrapperRect = wrapper.getBoundingClientRect()
1572
+ if (sidebarRect.height + 1 < wrapperRect.height) {
1573
+ findings.push({
1574
+ id: 'sidebar-topbar-shell',
1575
+ snippet: 'Desktop Sidebar does not span the full shell height',
1576
+ })
1577
+ }
1578
+ }
1579
+
1580
+ if (hasViewport && viewportWidth < 768) {
1581
+ if (!staticSidebar) {
1582
+ const triggers = topbars.flatMap((topbar) => [
1583
+ ...topbar.querySelectorAll('[data-slot="sidebar-trigger"]'),
1584
+ ])
1585
+ if (!triggers.some((trigger) => isVisibleElement(trigger, win))) {
1586
+ findings.push({
1587
+ id: 'sidebar-topbar-shell',
1588
+ snippet: 'Collapsible mobile shell has no visible SidebarTrigger in Topbar',
1589
+ })
1590
+ }
1591
+ }
1592
+
1593
+ const leading = directSlotChild(topbars[0], 'topbar-leading')
1594
+ if (
1595
+ leading &&
1596
+ isVisibleElement(leading, win) &&
1597
+ leading.clientWidth > 0 &&
1598
+ leading.scrollWidth > leading.clientWidth + 1
1599
+ ) {
1600
+ findings.push({
1601
+ id: 'sidebar-topbar-shell',
1602
+ snippet: 'Mobile TopbarLeading overflows underneath the trailing chrome',
1603
+ })
1604
+ }
1605
+ }
1606
+ }
1607
+
1608
+ return findings
1609
+ }
1610
+
1267
1611
  export function checkPageQualityDOM() {
1268
- return checkPageQualityFromDoc(document).map((f) => ({ type: f.id, detail: f.snippet }))
1612
+ const findings = checkPageQualityFromDoc(document)
1613
+ findings.push(...checkSidebarTopbarShell(document, window))
1614
+ findings.push(...checkSidebarRailBehavior(document, window))
1615
+ let iconTileCount = 0
1616
+ for (const heading of document.querySelectorAll('h2,h3,h4,h5')) {
1617
+ const tile = heading.previousElementSibling
1618
+ if (!tile || !tile.querySelector('svg')) continue
1619
+ const style = getComputedStyle(tile)
1620
+ const rect = tile.getBoundingClientRect()
1621
+ const radius = parseFloat(style.borderRadius) || parseFloat(style.borderTopLeftRadius) || 0
1622
+ if (radius >= 4 && rect.width >= 24 && rect.height >= 24 && rect.width <= 80 && rect.height <= 80) iconTileCount++
1623
+ }
1624
+ if (iconTileCount >= 3) {
1625
+ findings.push({ id: 'icon-tile-stack', snippet: `${iconTileCount} rounded icon tiles stacked above headings` })
1626
+ }
1627
+ return findings
1269
1628
  }
1270
1629
 
1271
1630
  // ─── Section 6: Node element adapters (static cascade) ──────────────────────
@@ -18,6 +18,25 @@ export function tokenDataAvailable() {
18
18
  return Boolean(TOKEN_DATA && Object.keys(TOKEN_DATA.colorByRgba || {}).length > 0)
19
19
  }
20
20
 
21
+ /** Every CSS variable declared by the exact Seven token snapshot. */
22
+ export function allTokenVars() {
23
+ return [...(TOKEN_DATA.cssVars || [])]
24
+ }
25
+
26
+ export function isKnownTokenVar(value) {
27
+ return (TOKEN_DATA.cssVars || []).includes(String(value || '').trim())
28
+ }
29
+
30
+ /** Minimal serializable token profile used by the browser runtime audit. */
31
+ export function browserTokenProfile() {
32
+ return {
33
+ colorVars: [...(TOKEN_DATA.colorVars || [])],
34
+ fontFamilies: allowedFontFamilies(),
35
+ fontSizesPx: fontSizesPx(),
36
+ radiiPx: [...(TOKEN_DATA.radii?.all || [])],
37
+ }
38
+ }
39
+
21
40
  // ─── Color ──────────────────────────────────────────────────────────────────
22
41
 
23
42
  /**