@palate/cli 0.0.0-stage → 0.0.1

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 (1222) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +151 -2
  3. package/bin/palate.mjs +894 -0
  4. package/kb/anatomy/data-table.md +24 -0
  5. package/kb/anatomy/empty-state.md +16 -0
  6. package/kb/anatomy/filter-toolbar.md +19 -0
  7. package/kb/anatomy/meter.md +16 -0
  8. package/kb/anatomy/product-window.md +18 -0
  9. package/kb/anatomy/settings-page.md +18 -0
  10. package/kb/anatomy/status-indicator.md +17 -0
  11. package/kb/anatomy/toast-undo.md +16 -0
  12. package/kb/bench/briefs.json +618 -0
  13. package/kb/craft/SOURCES.md +48 -0
  14. package/kb/craft/creativity.md +55 -0
  15. package/kb/craft/details.md +75 -0
  16. package/kb/craft/landing-demos.md +46 -0
  17. package/kb/craft/mistakes.md +73 -0
  18. package/kb/craft/motion.md +53 -0
  19. package/kb/craft/principles.md +68 -0
  20. package/kb/index/discovery.json +1 -0
  21. package/kb/inspiration/index.json +79 -0
  22. package/kb/moves/animated-comparison-table.md +58 -0
  23. package/kb/moves/before-after-slider.md +58 -0
  24. package/kb/moves/bento-live-tiles.md +57 -0
  25. package/kb/moves/calm-motion-system.md +63 -0
  26. package/kb/moves/canvas-grain.md +58 -0
  27. package/kb/moves/changelog-as-magazine.md +56 -0
  28. package/kb/moves/code-drawn-diagram.md +56 -0
  29. package/kb/moves/colophon.md +54 -0
  30. package/kb/moves/command-palette-site-nav.md +58 -0
  31. package/kb/moves/confetti-free-celebration.md +58 -0
  32. package/kb/moves/console-easter-egg.md +57 -0
  33. package/kb/moves/copy-confirmation.md +57 -0
  34. package/kb/moves/cursor-reactive-light.md +57 -0
  35. package/kb/moves/dark-band-contrast-section.md +55 -0
  36. package/kb/moves/designed-dark-mode.md +58 -0
  37. package/kb/moves/duotone-photography.md +55 -0
  38. package/kb/moves/editorial-drop-cap.md +58 -0
  39. package/kb/moves/editorial-grid-pull-quotes.md +55 -0
  40. package/kb/moves/engraving-colour-lens.md +64 -0
  41. package/kb/moves/explorable-control.md +57 -0
  42. package/kb/moves/feature-films-on-painted-stages.md +58 -0
  43. package/kb/moves/first-win-onboarding.md +59 -0
  44. package/kb/moves/footer-live-status.md +56 -0
  45. package/kb/moves/footer-rewards-the-end.md +58 -0
  46. package/kb/moves/generative-brand-pattern.md +55 -0
  47. package/kb/moves/gentle-error-nudge.md +59 -0
  48. package/kb/moves/halftone-dot-imagery.md +55 -0
  49. package/kb/moves/hand-drawn-annotations.md +55 -0
  50. package/kb/moves/hero-paints-itself-in.md +65 -0
  51. package/kb/moves/honest-progress-narration.md +58 -0
  52. package/kb/moves/honest-testimonial-wall.md +57 -0
  53. package/kb/moves/inline-sparklines-in-copy.md +57 -0
  54. package/kb/moves/inspect-our-taste.md +58 -0
  55. package/kb/moves/interactive-pricing-calculator.md +59 -0
  56. package/kb/moves/isometric-illustration-system.md +56 -0
  57. package/kb/moves/kinetic-variable-type.md +57 -0
  58. package/kb/moves/konami-secret.md +59 -0
  59. package/kb/moves/layered-paper-depth.md +56 -0
  60. package/kb/moves/lightweight-3d-object-hero.md +59 -0
  61. package/kb/moves/line-engraving-from-image.md +63 -0
  62. package/kb/moves/link-preview-peek.md +57 -0
  63. package/kb/moves/live-data-ticker.md +61 -0
  64. package/kb/moves/made-with-proof.md +51 -0
  65. package/kb/moves/magnetic-buttons.md +55 -0
  66. package/kb/moves/marquee-done-right.md +58 -0
  67. package/kb/moves/moves.yaml +450 -0
  68. package/kb/moves/museum-painting-backdrop.md +59 -0
  69. package/kb/moves/one-colour-brand-world.md +56 -0
  70. package/kb/moves/playful-404.md +58 -0
  71. package/kb/moves/pointer-highlight-word.md +56 -0
  72. package/kb/moves/product-in-context.md +56 -0
  73. package/kb/moves/real-world-data.md +58 -0
  74. package/kb/moves/referral-reward-reveal.md +59 -0
  75. package/kb/moves/riso-print-texture.md +57 -0
  76. package/kb/moves/screenshot-detail-crops.md +56 -0
  77. package/kb/moves/scroll-progress-chapters.md +57 -0
  78. package/kb/moves/scroll-scrubbed-product-film.md +62 -0
  79. package/kb/moves/self-playing-product-demo.md +61 -0
  80. package/kb/moves/shape-continuity-morph.md +58 -0
  81. package/kb/moves/sliding-nav-indicator.md +58 -0
  82. package/kb/moves/sticky-scroll-story.md +56 -0
  83. package/kb/moves/story-led-long-scroll.md +56 -0
  84. package/kb/moves/tactile-button.md +63 -0
  85. package/kb/moves/technical-drawing-lines.md +57 -0
  86. package/kb/moves/time-of-day-theming.md +56 -0
  87. package/kb/moves/tiny-game-easter-egg.md +60 -0
  88. package/kb/moves/type-decode-reveal.md +57 -0
  89. package/kb/moves/typographic-numeral-hero.md +58 -0
  90. package/kb/moves/view-transitions-between-pages.md +57 -0
  91. package/kb/moves/waitlist-position-live.md +60 -0
  92. package/kb/patterns/app-team-members.md +27 -0
  93. package/kb/patterns/chat-agent-approvals.md +31 -0
  94. package/kb/patterns/commerce-product-page.md +34 -0
  95. package/kb/patterns/dashboard-entity-table.md +37 -0
  96. package/kb/patterns/dashboard-home-today.md +24 -0
  97. package/kb/patterns/docs-api-reference.md +31 -0
  98. package/kb/patterns/marketing-product-led-landing.md +30 -0
  99. package/kb/patterns/mobile-daily-checklist.md +26 -0
  100. package/kb/references/index.json +1 -0
  101. package/kb/references/thumbs/004c5e9072.jpg +0 -0
  102. package/kb/references/thumbs/008915eb21.jpg +0 -0
  103. package/kb/references/thumbs/0098cf66c2.jpg +0 -0
  104. package/kb/references/thumbs/012e61b31f.jpg +0 -0
  105. package/kb/references/thumbs/014d4e46fc.jpg +0 -0
  106. package/kb/references/thumbs/01e54f394a.jpg +0 -0
  107. package/kb/references/thumbs/01e99a579c.jpg +0 -0
  108. package/kb/references/thumbs/01fd014575.jpg +0 -0
  109. package/kb/references/thumbs/022778ca72.jpg +0 -0
  110. package/kb/references/thumbs/02717bf1e1.jpg +0 -0
  111. package/kb/references/thumbs/02a5cfdbe9.jpg +0 -0
  112. package/kb/references/thumbs/02c9823f8d.jpg +0 -0
  113. package/kb/references/thumbs/02f3974613.jpg +0 -0
  114. package/kb/references/thumbs/032427f1ce.jpg +0 -0
  115. package/kb/references/thumbs/03ba677d07.jpg +0 -0
  116. package/kb/references/thumbs/04f2476cfe.jpg +0 -0
  117. package/kb/references/thumbs/0563e7c52e.jpg +0 -0
  118. package/kb/references/thumbs/05fa6b8eef.jpg +0 -0
  119. package/kb/references/thumbs/065bce1517.jpg +0 -0
  120. package/kb/references/thumbs/06c017f113.jpg +0 -0
  121. package/kb/references/thumbs/0770e2d8d3.jpg +0 -0
  122. package/kb/references/thumbs/078a26c4cb.jpg +0 -0
  123. package/kb/references/thumbs/08679b6e84.jpg +0 -0
  124. package/kb/references/thumbs/088c45a34c.jpg +0 -0
  125. package/kb/references/thumbs/089e9fd4e4.jpg +0 -0
  126. package/kb/references/thumbs/08f773231e.jpg +0 -0
  127. package/kb/references/thumbs/093ca3e2e3.jpg +0 -0
  128. package/kb/references/thumbs/0963320f74.jpg +0 -0
  129. package/kb/references/thumbs/09fc1ded85.jpg +0 -0
  130. package/kb/references/thumbs/0a368f3963.jpg +0 -0
  131. package/kb/references/thumbs/0a9e0e5201.jpg +0 -0
  132. package/kb/references/thumbs/0aace67ee7.jpg +0 -0
  133. package/kb/references/thumbs/0b61ecf793.jpg +0 -0
  134. package/kb/references/thumbs/0bde18ae09.jpg +0 -0
  135. package/kb/references/thumbs/0bf7ee8143.jpg +0 -0
  136. package/kb/references/thumbs/0ca20a13e0.jpg +0 -0
  137. package/kb/references/thumbs/0cdc0198c4.jpg +0 -0
  138. package/kb/references/thumbs/0cf9790b28.jpg +0 -0
  139. package/kb/references/thumbs/0d0202904b.jpg +0 -0
  140. package/kb/references/thumbs/0d053aba18.jpg +0 -0
  141. package/kb/references/thumbs/0d0c2c13d2.jpg +0 -0
  142. package/kb/references/thumbs/0d30be99b0.jpg +0 -0
  143. package/kb/references/thumbs/0d503da1b7.jpg +0 -0
  144. package/kb/references/thumbs/0ddad7b740.jpg +0 -0
  145. package/kb/references/thumbs/0e0a148101.jpg +0 -0
  146. package/kb/references/thumbs/0e401b6b75.jpg +0 -0
  147. package/kb/references/thumbs/0e8f32ba0f.jpg +0 -0
  148. package/kb/references/thumbs/0ef1966a7d.jpg +0 -0
  149. package/kb/references/thumbs/0efd416d11.jpg +0 -0
  150. package/kb/references/thumbs/0f3af263ae.jpg +0 -0
  151. package/kb/references/thumbs/0f9644c3a5.jpg +0 -0
  152. package/kb/references/thumbs/1020552737.jpg +0 -0
  153. package/kb/references/thumbs/1037626587.jpg +0 -0
  154. package/kb/references/thumbs/10512b7e94.jpg +0 -0
  155. package/kb/references/thumbs/106dc4a7b5.jpg +0 -0
  156. package/kb/references/thumbs/108943f6f7.jpg +0 -0
  157. package/kb/references/thumbs/10a5551d51.jpg +0 -0
  158. package/kb/references/thumbs/10dd01076c.jpg +0 -0
  159. package/kb/references/thumbs/11b06e39da.jpg +0 -0
  160. package/kb/references/thumbs/11baa1ec83.jpg +0 -0
  161. package/kb/references/thumbs/11bbe12167.jpg +0 -0
  162. package/kb/references/thumbs/11ca37feb8.jpg +0 -0
  163. package/kb/references/thumbs/11f14d3f12.jpg +0 -0
  164. package/kb/references/thumbs/124530ceb5.jpg +0 -0
  165. package/kb/references/thumbs/1276402336.jpg +0 -0
  166. package/kb/references/thumbs/1280e5c9d6.jpg +0 -0
  167. package/kb/references/thumbs/12cac0d172.jpg +0 -0
  168. package/kb/references/thumbs/138be6623a.jpg +0 -0
  169. package/kb/references/thumbs/13a0c544d1.jpg +0 -0
  170. package/kb/references/thumbs/13a32cb94c.jpg +0 -0
  171. package/kb/references/thumbs/144035d641.jpg +0 -0
  172. package/kb/references/thumbs/1457e41924.jpg +0 -0
  173. package/kb/references/thumbs/14972e3a86.jpg +0 -0
  174. package/kb/references/thumbs/15a47f2e4c.jpg +0 -0
  175. package/kb/references/thumbs/15aa15d22e.jpg +0 -0
  176. package/kb/references/thumbs/160dcd24b7.jpg +0 -0
  177. package/kb/references/thumbs/1610978529.jpg +0 -0
  178. package/kb/references/thumbs/16db30ba37.jpg +0 -0
  179. package/kb/references/thumbs/16f19ae4f3.jpg +0 -0
  180. package/kb/references/thumbs/16f758b03f.jpg +0 -0
  181. package/kb/references/thumbs/1748e5b751.jpg +0 -0
  182. package/kb/references/thumbs/175d0b0e69.jpg +0 -0
  183. package/kb/references/thumbs/178f571a36.jpg +0 -0
  184. package/kb/references/thumbs/17c43dc025.jpg +0 -0
  185. package/kb/references/thumbs/17c7f05b50.jpg +0 -0
  186. package/kb/references/thumbs/17f97e61dd.jpg +0 -0
  187. package/kb/references/thumbs/1804e17365.jpg +0 -0
  188. package/kb/references/thumbs/195c162ed1.jpg +0 -0
  189. package/kb/references/thumbs/19e3699c29.jpg +0 -0
  190. package/kb/references/thumbs/1a48e0a4d5.jpg +0 -0
  191. package/kb/references/thumbs/1a6cda265e.jpg +0 -0
  192. package/kb/references/thumbs/1a7e012091.jpg +0 -0
  193. package/kb/references/thumbs/1a9173a172.jpg +0 -0
  194. package/kb/references/thumbs/1b34a6b4d2.jpg +0 -0
  195. package/kb/references/thumbs/1b5284f3b2.jpg +0 -0
  196. package/kb/references/thumbs/1b93fbd6d3.jpg +0 -0
  197. package/kb/references/thumbs/1c6728fef6.jpg +0 -0
  198. package/kb/references/thumbs/1c6f101618.jpg +0 -0
  199. package/kb/references/thumbs/1cf7011a94.jpg +0 -0
  200. package/kb/references/thumbs/1d1769e539.jpg +0 -0
  201. package/kb/references/thumbs/1d1fd23199.jpg +0 -0
  202. package/kb/references/thumbs/1d7b6602ac.jpg +0 -0
  203. package/kb/references/thumbs/1dbbc61b9e.jpg +0 -0
  204. package/kb/references/thumbs/1dbdd6d21d.jpg +0 -0
  205. package/kb/references/thumbs/1dd873744b.jpg +0 -0
  206. package/kb/references/thumbs/1df4dd7cf9.jpg +0 -0
  207. package/kb/references/thumbs/1ece8c35b8.jpg +0 -0
  208. package/kb/references/thumbs/1f0e5b9aa4.jpg +0 -0
  209. package/kb/references/thumbs/1f1419651b.jpg +0 -0
  210. package/kb/references/thumbs/1f2a6da92d.jpg +0 -0
  211. package/kb/references/thumbs/1f651f33c0.jpg +0 -0
  212. package/kb/references/thumbs/1f8b697d18.jpg +0 -0
  213. package/kb/references/thumbs/1fee3824cd.jpg +0 -0
  214. package/kb/references/thumbs/1ff7757853.jpg +0 -0
  215. package/kb/references/thumbs/2043182f01.jpg +0 -0
  216. package/kb/references/thumbs/2059dabcd5.jpg +0 -0
  217. package/kb/references/thumbs/209d9dbb95.jpg +0 -0
  218. package/kb/references/thumbs/20d8923554.jpg +0 -0
  219. package/kb/references/thumbs/210dd3b671.jpg +0 -0
  220. package/kb/references/thumbs/2120719116.jpg +0 -0
  221. package/kb/references/thumbs/21a7384429.jpg +0 -0
  222. package/kb/references/thumbs/225f187391.jpg +0 -0
  223. package/kb/references/thumbs/230caf7dd2.jpg +0 -0
  224. package/kb/references/thumbs/235afad355.jpg +0 -0
  225. package/kb/references/thumbs/2378066687.jpg +0 -0
  226. package/kb/references/thumbs/241faf68a1.jpg +0 -0
  227. package/kb/references/thumbs/24d9f1a9b9.jpg +0 -0
  228. package/kb/references/thumbs/2505c8b9a0.jpg +0 -0
  229. package/kb/references/thumbs/25593638ca.jpg +0 -0
  230. package/kb/references/thumbs/25dd454f18.jpg +0 -0
  231. package/kb/references/thumbs/2602e123e2.jpg +0 -0
  232. package/kb/references/thumbs/26095c0b11.jpg +0 -0
  233. package/kb/references/thumbs/26260d6238.jpg +0 -0
  234. package/kb/references/thumbs/26bba21836.jpg +0 -0
  235. package/kb/references/thumbs/26bde3520b.jpg +0 -0
  236. package/kb/references/thumbs/272e22067c.jpg +0 -0
  237. package/kb/references/thumbs/27421b3226.jpg +0 -0
  238. package/kb/references/thumbs/2769ebca41.jpg +0 -0
  239. package/kb/references/thumbs/27e2f6e8b0.jpg +0 -0
  240. package/kb/references/thumbs/28432ba373.jpg +0 -0
  241. package/kb/references/thumbs/2846626f19.jpg +0 -0
  242. package/kb/references/thumbs/28750e821e.jpg +0 -0
  243. package/kb/references/thumbs/289481230f.jpg +0 -0
  244. package/kb/references/thumbs/2897967408.jpg +0 -0
  245. package/kb/references/thumbs/28c0a5fa17.jpg +0 -0
  246. package/kb/references/thumbs/28c181fba5.jpg +0 -0
  247. package/kb/references/thumbs/29806f539f.jpg +0 -0
  248. package/kb/references/thumbs/2997f56ee7.jpg +0 -0
  249. package/kb/references/thumbs/29b34a10fb.jpg +0 -0
  250. package/kb/references/thumbs/29bd78cdb4.jpg +0 -0
  251. package/kb/references/thumbs/29c8c6c22a.jpg +0 -0
  252. package/kb/references/thumbs/2ac23f7fae.jpg +0 -0
  253. package/kb/references/thumbs/2b76e13f79.jpg +0 -0
  254. package/kb/references/thumbs/2b84226479.jpg +0 -0
  255. package/kb/references/thumbs/2bf2dbf737.jpg +0 -0
  256. package/kb/references/thumbs/2bf89abbf6.jpg +0 -0
  257. package/kb/references/thumbs/2c562cd534.jpg +0 -0
  258. package/kb/references/thumbs/2cfe9d48c4.jpg +0 -0
  259. package/kb/references/thumbs/2d49f19b27.jpg +0 -0
  260. package/kb/references/thumbs/2dc8670da7.jpg +0 -0
  261. package/kb/references/thumbs/2de947c469.jpg +0 -0
  262. package/kb/references/thumbs/2e075ca79f.jpg +0 -0
  263. package/kb/references/thumbs/2eb0820e6b.jpg +0 -0
  264. package/kb/references/thumbs/2ec56a9dc0.jpg +0 -0
  265. package/kb/references/thumbs/30bb4ad607.jpg +0 -0
  266. package/kb/references/thumbs/30d19b8444.jpg +0 -0
  267. package/kb/references/thumbs/3173c71d73.jpg +0 -0
  268. package/kb/references/thumbs/31e59e4518.jpg +0 -0
  269. package/kb/references/thumbs/322b8960e8.jpg +0 -0
  270. package/kb/references/thumbs/325c9be6f4.jpg +0 -0
  271. package/kb/references/thumbs/3273338982.jpg +0 -0
  272. package/kb/references/thumbs/32f8387f38.jpg +0 -0
  273. package/kb/references/thumbs/332f6b74c3.jpg +0 -0
  274. package/kb/references/thumbs/334b146b6a.jpg +0 -0
  275. package/kb/references/thumbs/339abd60e4.jpg +0 -0
  276. package/kb/references/thumbs/33e88ec295.jpg +0 -0
  277. package/kb/references/thumbs/340931b5d4.jpg +0 -0
  278. package/kb/references/thumbs/34165a93bd.jpg +0 -0
  279. package/kb/references/thumbs/34d0575dd7.jpg +0 -0
  280. package/kb/references/thumbs/3549e75f0a.jpg +0 -0
  281. package/kb/references/thumbs/35827f1561.jpg +0 -0
  282. package/kb/references/thumbs/37c50280ec.jpg +0 -0
  283. package/kb/references/thumbs/37e66ecf11.jpg +0 -0
  284. package/kb/references/thumbs/3841a04fdc.jpg +0 -0
  285. package/kb/references/thumbs/38490c088f.jpg +0 -0
  286. package/kb/references/thumbs/3850319e9f.jpg +0 -0
  287. package/kb/references/thumbs/3856a64166.jpg +0 -0
  288. package/kb/references/thumbs/3881f211c2.jpg +0 -0
  289. package/kb/references/thumbs/38c7dde2f3.jpg +0 -0
  290. package/kb/references/thumbs/38ce9e486c.jpg +0 -0
  291. package/kb/references/thumbs/390ea8e01b.jpg +0 -0
  292. package/kb/references/thumbs/391b7fc27c.jpg +0 -0
  293. package/kb/references/thumbs/395f7214dc.jpg +0 -0
  294. package/kb/references/thumbs/39e81a5db2.jpg +0 -0
  295. package/kb/references/thumbs/3a67c8d655.jpg +0 -0
  296. package/kb/references/thumbs/3a89c25e3b.jpg +0 -0
  297. package/kb/references/thumbs/3aa0837542.jpg +0 -0
  298. package/kb/references/thumbs/3aae18aa8a.jpg +0 -0
  299. package/kb/references/thumbs/3bdbe767db.jpg +0 -0
  300. package/kb/references/thumbs/3c0616fc7f.jpg +0 -0
  301. package/kb/references/thumbs/3c18e9db1d.jpg +0 -0
  302. package/kb/references/thumbs/3c5a14076c.jpg +0 -0
  303. package/kb/references/thumbs/3ca9ec15c6.jpg +0 -0
  304. package/kb/references/thumbs/3d7756fd35.jpg +0 -0
  305. package/kb/references/thumbs/3dd45bd33d.jpg +0 -0
  306. package/kb/references/thumbs/3de72d5414.jpg +0 -0
  307. package/kb/references/thumbs/3dede597af.jpg +0 -0
  308. package/kb/references/thumbs/3ea948619e.jpg +0 -0
  309. package/kb/references/thumbs/402c12054c.jpg +0 -0
  310. package/kb/references/thumbs/403ab4af90.jpg +0 -0
  311. package/kb/references/thumbs/40773a8c63.jpg +0 -0
  312. package/kb/references/thumbs/407d9583db.jpg +0 -0
  313. package/kb/references/thumbs/415dc1d84c.jpg +0 -0
  314. package/kb/references/thumbs/420b676a4f.jpg +0 -0
  315. package/kb/references/thumbs/42a1ee85eb.jpg +0 -0
  316. package/kb/references/thumbs/43059221aa.jpg +0 -0
  317. package/kb/references/thumbs/432fa0d22c.jpg +0 -0
  318. package/kb/references/thumbs/43826f20e3.jpg +0 -0
  319. package/kb/references/thumbs/43ac55c98a.jpg +0 -0
  320. package/kb/references/thumbs/43d098f3c3.jpg +0 -0
  321. package/kb/references/thumbs/4449d80c2c.jpg +0 -0
  322. package/kb/references/thumbs/44625727dc.jpg +0 -0
  323. package/kb/references/thumbs/4482bb87a1.jpg +0 -0
  324. package/kb/references/thumbs/44b078acdc.jpg +0 -0
  325. package/kb/references/thumbs/44d0305850.jpg +0 -0
  326. package/kb/references/thumbs/456bb6b59e.jpg +0 -0
  327. package/kb/references/thumbs/45df73ce48.jpg +0 -0
  328. package/kb/references/thumbs/45edb45d87.jpg +0 -0
  329. package/kb/references/thumbs/4671d57cd5.jpg +0 -0
  330. package/kb/references/thumbs/46cc108518.jpg +0 -0
  331. package/kb/references/thumbs/470022e614.jpg +0 -0
  332. package/kb/references/thumbs/4719a669ce.jpg +0 -0
  333. package/kb/references/thumbs/47404f5ad4.jpg +0 -0
  334. package/kb/references/thumbs/479d3eb977.jpg +0 -0
  335. package/kb/references/thumbs/479ed92ceb.jpg +0 -0
  336. package/kb/references/thumbs/47baed50c7.jpg +0 -0
  337. package/kb/references/thumbs/47fdcfd7b0.jpg +0 -0
  338. package/kb/references/thumbs/48fd5e94c5.jpg +0 -0
  339. package/kb/references/thumbs/493807917b.jpg +0 -0
  340. package/kb/references/thumbs/49a1c67293.jpg +0 -0
  341. package/kb/references/thumbs/49e2d7fafe.jpg +0 -0
  342. package/kb/references/thumbs/49f540fcb6.jpg +0 -0
  343. package/kb/references/thumbs/4a67ec4028.jpg +0 -0
  344. package/kb/references/thumbs/4a93275b04.jpg +0 -0
  345. package/kb/references/thumbs/4aae6f52da.jpg +0 -0
  346. package/kb/references/thumbs/4b1bae66bd.jpg +0 -0
  347. package/kb/references/thumbs/4b75da15a9.jpg +0 -0
  348. package/kb/references/thumbs/4b77789b88.jpg +0 -0
  349. package/kb/references/thumbs/4bc2f3f3a4.jpg +0 -0
  350. package/kb/references/thumbs/4c48f27b88.jpg +0 -0
  351. package/kb/references/thumbs/4c52bd8bfb.jpg +0 -0
  352. package/kb/references/thumbs/4c9b4acc60.jpg +0 -0
  353. package/kb/references/thumbs/4cbf0752d4.jpg +0 -0
  354. package/kb/references/thumbs/4cd2672517.jpg +0 -0
  355. package/kb/references/thumbs/4dd22a8181.jpg +0 -0
  356. package/kb/references/thumbs/4ee3447314.jpg +0 -0
  357. package/kb/references/thumbs/4ef29c8144.jpg +0 -0
  358. package/kb/references/thumbs/4f82fadfd6.jpg +0 -0
  359. package/kb/references/thumbs/4fc9b643d8.jpg +0 -0
  360. package/kb/references/thumbs/50549524b0.jpg +0 -0
  361. package/kb/references/thumbs/509a615883.jpg +0 -0
  362. package/kb/references/thumbs/50c03ef855.jpg +0 -0
  363. package/kb/references/thumbs/50cf9acad6.jpg +0 -0
  364. package/kb/references/thumbs/51131b025c.jpg +0 -0
  365. package/kb/references/thumbs/51da1124f0.jpg +0 -0
  366. package/kb/references/thumbs/524d5e7288.jpg +0 -0
  367. package/kb/references/thumbs/5251247c81.jpg +0 -0
  368. package/kb/references/thumbs/526b91b7ec.jpg +0 -0
  369. package/kb/references/thumbs/52f02f6c2e.jpg +0 -0
  370. package/kb/references/thumbs/530ab530dc.jpg +0 -0
  371. package/kb/references/thumbs/5335ee4404.jpg +0 -0
  372. package/kb/references/thumbs/5385b90939.jpg +0 -0
  373. package/kb/references/thumbs/53c54654cc.jpg +0 -0
  374. package/kb/references/thumbs/5420794c6c.jpg +0 -0
  375. package/kb/references/thumbs/542a9dce8b.jpg +0 -0
  376. package/kb/references/thumbs/5571530a5f.jpg +0 -0
  377. package/kb/references/thumbs/56cc68d804.jpg +0 -0
  378. package/kb/references/thumbs/577b7f7c44.jpg +0 -0
  379. package/kb/references/thumbs/57adf8f1bb.jpg +0 -0
  380. package/kb/references/thumbs/57c5f5e3a6.jpg +0 -0
  381. package/kb/references/thumbs/57ffe4e839.jpg +0 -0
  382. package/kb/references/thumbs/5817dfc7d6.jpg +0 -0
  383. package/kb/references/thumbs/581a182a7a.jpg +0 -0
  384. package/kb/references/thumbs/58807679c8.jpg +0 -0
  385. package/kb/references/thumbs/589a1d9111.jpg +0 -0
  386. package/kb/references/thumbs/59167391ab.jpg +0 -0
  387. package/kb/references/thumbs/5a70420166.jpg +0 -0
  388. package/kb/references/thumbs/5b10df1b8d.jpg +0 -0
  389. package/kb/references/thumbs/5b7a712fdb.jpg +0 -0
  390. package/kb/references/thumbs/5bc46b92ad.jpg +0 -0
  391. package/kb/references/thumbs/5c0546a120.jpg +0 -0
  392. package/kb/references/thumbs/5c2b6125a8.jpg +0 -0
  393. package/kb/references/thumbs/5c536b9e42.jpg +0 -0
  394. package/kb/references/thumbs/5c8e441d30.jpg +0 -0
  395. package/kb/references/thumbs/5cb6f1baa5.jpg +0 -0
  396. package/kb/references/thumbs/5ce6c1f21e.jpg +0 -0
  397. package/kb/references/thumbs/5cef052c0a.jpg +0 -0
  398. package/kb/references/thumbs/5d08438209.jpg +0 -0
  399. package/kb/references/thumbs/5d0f9af9b0.jpg +0 -0
  400. package/kb/references/thumbs/5d300ed332.jpg +0 -0
  401. package/kb/references/thumbs/5d708a4794.jpg +0 -0
  402. package/kb/references/thumbs/5de8826a98.jpg +0 -0
  403. package/kb/references/thumbs/5df7bff22c.jpg +0 -0
  404. package/kb/references/thumbs/5e087d0f00.jpg +0 -0
  405. package/kb/references/thumbs/5e44e70ca0.jpg +0 -0
  406. package/kb/references/thumbs/5eff5d80ce.jpg +0 -0
  407. package/kb/references/thumbs/5f015c96b1.jpg +0 -0
  408. package/kb/references/thumbs/5f3289b7c4.jpg +0 -0
  409. package/kb/references/thumbs/5f830c40eb.jpg +0 -0
  410. package/kb/references/thumbs/60c4c3527b.jpg +0 -0
  411. package/kb/references/thumbs/60e9e594dd.jpg +0 -0
  412. package/kb/references/thumbs/615421d7be.jpg +0 -0
  413. package/kb/references/thumbs/6176e4004f.jpg +0 -0
  414. package/kb/references/thumbs/61f0fe5e06.jpg +0 -0
  415. package/kb/references/thumbs/6213785db4.jpg +0 -0
  416. package/kb/references/thumbs/62a670ae09.jpg +0 -0
  417. package/kb/references/thumbs/63cc12981b.jpg +0 -0
  418. package/kb/references/thumbs/641f15cc71.jpg +0 -0
  419. package/kb/references/thumbs/642ab2081d.jpg +0 -0
  420. package/kb/references/thumbs/644a59bf6e.jpg +0 -0
  421. package/kb/references/thumbs/644da8a8e3.jpg +0 -0
  422. package/kb/references/thumbs/6458986897.jpg +0 -0
  423. package/kb/references/thumbs/64cfbd7b93.jpg +0 -0
  424. package/kb/references/thumbs/661a57686a.jpg +0 -0
  425. package/kb/references/thumbs/66355a813a.jpg +0 -0
  426. package/kb/references/thumbs/664396dd44.jpg +0 -0
  427. package/kb/references/thumbs/66d832d65f.jpg +0 -0
  428. package/kb/references/thumbs/66de9e9833.jpg +0 -0
  429. package/kb/references/thumbs/6750964fd9.jpg +0 -0
  430. package/kb/references/thumbs/67c7164832.jpg +0 -0
  431. package/kb/references/thumbs/681600b6cd.jpg +0 -0
  432. package/kb/references/thumbs/682e75afe4.jpg +0 -0
  433. package/kb/references/thumbs/69274bc952.jpg +0 -0
  434. package/kb/references/thumbs/696ec08c52.jpg +0 -0
  435. package/kb/references/thumbs/69760111cc.jpg +0 -0
  436. package/kb/references/thumbs/697e32664f.jpg +0 -0
  437. package/kb/references/thumbs/69df92544b.jpg +0 -0
  438. package/kb/references/thumbs/69e48c5229.jpg +0 -0
  439. package/kb/references/thumbs/6a5fb75de1.jpg +0 -0
  440. package/kb/references/thumbs/6a7389e472.jpg +0 -0
  441. package/kb/references/thumbs/6a9b041e02.jpg +0 -0
  442. package/kb/references/thumbs/6ab2fa93ee.jpg +0 -0
  443. package/kb/references/thumbs/6ae3400319.jpg +0 -0
  444. package/kb/references/thumbs/6b21344bf3.jpg +0 -0
  445. package/kb/references/thumbs/6bd1b67a8a.jpg +0 -0
  446. package/kb/references/thumbs/6c99156c4f.jpg +0 -0
  447. package/kb/references/thumbs/6cc9b65384.jpg +0 -0
  448. package/kb/references/thumbs/6d15830a73.jpg +0 -0
  449. package/kb/references/thumbs/6d4c33d180.jpg +0 -0
  450. package/kb/references/thumbs/6e36815799.jpg +0 -0
  451. package/kb/references/thumbs/6eddb9cbfc.jpg +0 -0
  452. package/kb/references/thumbs/6f97968a7c.jpg +0 -0
  453. package/kb/references/thumbs/6fa0716a7d.jpg +0 -0
  454. package/kb/references/thumbs/6facd57184.jpg +0 -0
  455. package/kb/references/thumbs/6fd57b785a.jpg +0 -0
  456. package/kb/references/thumbs/700b3cb185.jpg +0 -0
  457. package/kb/references/thumbs/71197443fa.jpg +0 -0
  458. package/kb/references/thumbs/72082bc9ee.jpg +0 -0
  459. package/kb/references/thumbs/72453db479.jpg +0 -0
  460. package/kb/references/thumbs/72cd64d500.jpg +0 -0
  461. package/kb/references/thumbs/72d1e75283.jpg +0 -0
  462. package/kb/references/thumbs/72e13f7f5b.jpg +0 -0
  463. package/kb/references/thumbs/7459f8e644.jpg +0 -0
  464. package/kb/references/thumbs/7470d55c79.jpg +0 -0
  465. package/kb/references/thumbs/74c468f02a.jpg +0 -0
  466. package/kb/references/thumbs/74fed6eb77.jpg +0 -0
  467. package/kb/references/thumbs/756e05080d.jpg +0 -0
  468. package/kb/references/thumbs/75df7e5f49.jpg +0 -0
  469. package/kb/references/thumbs/76226da6ef.jpg +0 -0
  470. package/kb/references/thumbs/76a34aa056.jpg +0 -0
  471. package/kb/references/thumbs/76c7076589.jpg +0 -0
  472. package/kb/references/thumbs/76cccc396c.jpg +0 -0
  473. package/kb/references/thumbs/774654789f.jpg +0 -0
  474. package/kb/references/thumbs/7746cc494d.jpg +0 -0
  475. package/kb/references/thumbs/7766e36aa3.jpg +0 -0
  476. package/kb/references/thumbs/78049331ef.jpg +0 -0
  477. package/kb/references/thumbs/78808a0ca5.jpg +0 -0
  478. package/kb/references/thumbs/7890b0a310.jpg +0 -0
  479. package/kb/references/thumbs/78911975e6.jpg +0 -0
  480. package/kb/references/thumbs/78d289d5a0.jpg +0 -0
  481. package/kb/references/thumbs/794126267e.jpg +0 -0
  482. package/kb/references/thumbs/7976eb9025.jpg +0 -0
  483. package/kb/references/thumbs/798519ec7c.jpg +0 -0
  484. package/kb/references/thumbs/7a6cc5eecc.jpg +0 -0
  485. package/kb/references/thumbs/7ac8a7cd4a.jpg +0 -0
  486. package/kb/references/thumbs/7b1341d61d.jpg +0 -0
  487. package/kb/references/thumbs/7b9c4031e3.jpg +0 -0
  488. package/kb/references/thumbs/7ba5ad3779.jpg +0 -0
  489. package/kb/references/thumbs/7be6eb2bd0.jpg +0 -0
  490. package/kb/references/thumbs/7c30864f5d.jpg +0 -0
  491. package/kb/references/thumbs/7c379b5e17.jpg +0 -0
  492. package/kb/references/thumbs/7c4050eb02.jpg +0 -0
  493. package/kb/references/thumbs/7ca47b3221.jpg +0 -0
  494. package/kb/references/thumbs/7d43516bd7.jpg +0 -0
  495. package/kb/references/thumbs/7da9dbb98a.jpg +0 -0
  496. package/kb/references/thumbs/7ddda8f57c.jpg +0 -0
  497. package/kb/references/thumbs/7ece6d215c.jpg +0 -0
  498. package/kb/references/thumbs/7eebf029de.jpg +0 -0
  499. package/kb/references/thumbs/7f45483c15.jpg +0 -0
  500. package/kb/references/thumbs/7fde06eaa5.jpg +0 -0
  501. package/kb/references/thumbs/80407b97e9.jpg +0 -0
  502. package/kb/references/thumbs/80f0a6cf4b.jpg +0 -0
  503. package/kb/references/thumbs/8118b451b8.jpg +0 -0
  504. package/kb/references/thumbs/816baed4a8.jpg +0 -0
  505. package/kb/references/thumbs/817d2d15d9.jpg +0 -0
  506. package/kb/references/thumbs/8260cb430d.jpg +0 -0
  507. package/kb/references/thumbs/827b562899.jpg +0 -0
  508. package/kb/references/thumbs/8293cf1e92.jpg +0 -0
  509. package/kb/references/thumbs/8294653169.jpg +0 -0
  510. package/kb/references/thumbs/83061f871f.jpg +0 -0
  511. package/kb/references/thumbs/833df778ca.jpg +0 -0
  512. package/kb/references/thumbs/83d3acaafc.jpg +0 -0
  513. package/kb/references/thumbs/844c6efeff.jpg +0 -0
  514. package/kb/references/thumbs/84563d482a.jpg +0 -0
  515. package/kb/references/thumbs/848082dd94.jpg +0 -0
  516. package/kb/references/thumbs/8494b1da94.jpg +0 -0
  517. package/kb/references/thumbs/84b71014be.jpg +0 -0
  518. package/kb/references/thumbs/84be4a5f3c.jpg +0 -0
  519. package/kb/references/thumbs/84fd0fd25a.jpg +0 -0
  520. package/kb/references/thumbs/853e488e22.jpg +0 -0
  521. package/kb/references/thumbs/858c91585d.jpg +0 -0
  522. package/kb/references/thumbs/85903e8fe9.jpg +0 -0
  523. package/kb/references/thumbs/86597d43fd.jpg +0 -0
  524. package/kb/references/thumbs/866eb99500.jpg +0 -0
  525. package/kb/references/thumbs/86ac050340.jpg +0 -0
  526. package/kb/references/thumbs/86afec7b64.jpg +0 -0
  527. package/kb/references/thumbs/87238127f5.jpg +0 -0
  528. package/kb/references/thumbs/87321df792.jpg +0 -0
  529. package/kb/references/thumbs/87460f70cd.jpg +0 -0
  530. package/kb/references/thumbs/8770dfeaec.jpg +0 -0
  531. package/kb/references/thumbs/8798451a8c.jpg +0 -0
  532. package/kb/references/thumbs/87da1f34a3.jpg +0 -0
  533. package/kb/references/thumbs/882cdf8c05.jpg +0 -0
  534. package/kb/references/thumbs/8839f4106f.jpg +0 -0
  535. package/kb/references/thumbs/8844455212.jpg +0 -0
  536. package/kb/references/thumbs/88abba0497.jpg +0 -0
  537. package/kb/references/thumbs/88b372435d.jpg +0 -0
  538. package/kb/references/thumbs/88bd4f35fa.jpg +0 -0
  539. package/kb/references/thumbs/88c71a075e.jpg +0 -0
  540. package/kb/references/thumbs/892e5f048e.jpg +0 -0
  541. package/kb/references/thumbs/893cc8e920.jpg +0 -0
  542. package/kb/references/thumbs/896c198814.jpg +0 -0
  543. package/kb/references/thumbs/8a8e22f756.jpg +0 -0
  544. package/kb/references/thumbs/8a9d8a35cb.jpg +0 -0
  545. package/kb/references/thumbs/8ab1d67fec.jpg +0 -0
  546. package/kb/references/thumbs/8ab201fe12.jpg +0 -0
  547. package/kb/references/thumbs/8ac372c102.jpg +0 -0
  548. package/kb/references/thumbs/8b15736d62.jpg +0 -0
  549. package/kb/references/thumbs/8b1d8d6a05.jpg +0 -0
  550. package/kb/references/thumbs/8bb6050e20.jpg +0 -0
  551. package/kb/references/thumbs/8c6c9d1577.jpg +0 -0
  552. package/kb/references/thumbs/8d337851e0.jpg +0 -0
  553. package/kb/references/thumbs/8d44b33cc5.jpg +0 -0
  554. package/kb/references/thumbs/8d4536ff3b.jpg +0 -0
  555. package/kb/references/thumbs/8d9b99454a.jpg +0 -0
  556. package/kb/references/thumbs/8dda2303ff.jpg +0 -0
  557. package/kb/references/thumbs/8dec722d62.jpg +0 -0
  558. package/kb/references/thumbs/8e0ea4ca74.jpg +0 -0
  559. package/kb/references/thumbs/8ebba84d69.jpg +0 -0
  560. package/kb/references/thumbs/8ef09140c0.jpg +0 -0
  561. package/kb/references/thumbs/8f2928a1b0.jpg +0 -0
  562. package/kb/references/thumbs/8f88f9ddba.jpg +0 -0
  563. package/kb/references/thumbs/8fa4451009.jpg +0 -0
  564. package/kb/references/thumbs/90109b0e02.jpg +0 -0
  565. package/kb/references/thumbs/90e854e5c9.jpg +0 -0
  566. package/kb/references/thumbs/914e79f893.jpg +0 -0
  567. package/kb/references/thumbs/9161369197.jpg +0 -0
  568. package/kb/references/thumbs/9165c87d6f.jpg +0 -0
  569. package/kb/references/thumbs/9193f6558a.jpg +0 -0
  570. package/kb/references/thumbs/91ac7df877.jpg +0 -0
  571. package/kb/references/thumbs/9216bd4931.jpg +0 -0
  572. package/kb/references/thumbs/922ae8a26a.jpg +0 -0
  573. package/kb/references/thumbs/92a70e6867.jpg +0 -0
  574. package/kb/references/thumbs/92c77ece22.jpg +0 -0
  575. package/kb/references/thumbs/92e5914fbf.jpg +0 -0
  576. package/kb/references/thumbs/92ee36419a.jpg +0 -0
  577. package/kb/references/thumbs/94153a60b0.jpg +0 -0
  578. package/kb/references/thumbs/9449666640.jpg +0 -0
  579. package/kb/references/thumbs/944be6a646.jpg +0 -0
  580. package/kb/references/thumbs/945831476e.jpg +0 -0
  581. package/kb/references/thumbs/94c1af82f4.jpg +0 -0
  582. package/kb/references/thumbs/9599d6d589.jpg +0 -0
  583. package/kb/references/thumbs/960710f4cf.jpg +0 -0
  584. package/kb/references/thumbs/9608f12d64.jpg +0 -0
  585. package/kb/references/thumbs/962dabfaa0.jpg +0 -0
  586. package/kb/references/thumbs/965a3a95c6.jpg +0 -0
  587. package/kb/references/thumbs/9672ed5ae4.jpg +0 -0
  588. package/kb/references/thumbs/96891ae9c1.jpg +0 -0
  589. package/kb/references/thumbs/96e1907c99.jpg +0 -0
  590. package/kb/references/thumbs/96f25b6578.jpg +0 -0
  591. package/kb/references/thumbs/97211df9ae.jpg +0 -0
  592. package/kb/references/thumbs/9769d763a5.jpg +0 -0
  593. package/kb/references/thumbs/9792bd6d05.jpg +0 -0
  594. package/kb/references/thumbs/97d2837e3e.jpg +0 -0
  595. package/kb/references/thumbs/97d90d1d85.jpg +0 -0
  596. package/kb/references/thumbs/97fcd5774a.jpg +0 -0
  597. package/kb/references/thumbs/980f68564e.jpg +0 -0
  598. package/kb/references/thumbs/98511fb393.jpg +0 -0
  599. package/kb/references/thumbs/98f8fa694d.jpg +0 -0
  600. package/kb/references/thumbs/9a42c6bb97.jpg +0 -0
  601. package/kb/references/thumbs/9ab3600a06.jpg +0 -0
  602. package/kb/references/thumbs/9ab48d9130.jpg +0 -0
  603. package/kb/references/thumbs/9ad519197d.jpg +0 -0
  604. package/kb/references/thumbs/9b1382c657.jpg +0 -0
  605. package/kb/references/thumbs/9b6cc1e077.jpg +0 -0
  606. package/kb/references/thumbs/9beede8480.jpg +0 -0
  607. package/kb/references/thumbs/9bf8976952.jpg +0 -0
  608. package/kb/references/thumbs/9cace7b75a.jpg +0 -0
  609. package/kb/references/thumbs/9cdcc5745e.jpg +0 -0
  610. package/kb/references/thumbs/9d0b269074.jpg +0 -0
  611. package/kb/references/thumbs/9d41788b48.jpg +0 -0
  612. package/kb/references/thumbs/9d475bd6af.jpg +0 -0
  613. package/kb/references/thumbs/9e6bc543d0.jpg +0 -0
  614. package/kb/references/thumbs/9ed0e0a206.jpg +0 -0
  615. package/kb/references/thumbs/9ef538de13.jpg +0 -0
  616. package/kb/references/thumbs/9efc373ab4.jpg +0 -0
  617. package/kb/references/thumbs/9f4a939fa5.jpg +0 -0
  618. package/kb/references/thumbs/9f8d12d7b9.jpg +0 -0
  619. package/kb/references/thumbs/9fd5e3efa7.jpg +0 -0
  620. package/kb/references/thumbs/a0a9b9c572.jpg +0 -0
  621. package/kb/references/thumbs/a29ca9b185.jpg +0 -0
  622. package/kb/references/thumbs/a2a42884af.jpg +0 -0
  623. package/kb/references/thumbs/a2f5064e34.jpg +0 -0
  624. package/kb/references/thumbs/a3112ce672.jpg +0 -0
  625. package/kb/references/thumbs/a3437736d1.jpg +0 -0
  626. package/kb/references/thumbs/a372667e76.jpg +0 -0
  627. package/kb/references/thumbs/a39bae94e9.jpg +0 -0
  628. package/kb/references/thumbs/a3fc75d94c.jpg +0 -0
  629. package/kb/references/thumbs/a440487631.jpg +0 -0
  630. package/kb/references/thumbs/a4993d5fb5.jpg +0 -0
  631. package/kb/references/thumbs/a500476a86.jpg +0 -0
  632. package/kb/references/thumbs/a55506bf46.jpg +0 -0
  633. package/kb/references/thumbs/a59a5f9843.jpg +0 -0
  634. package/kb/references/thumbs/a5bce0eede.jpg +0 -0
  635. package/kb/references/thumbs/a5d921e1f0.jpg +0 -0
  636. package/kb/references/thumbs/a5e19d4637.jpg +0 -0
  637. package/kb/references/thumbs/a5f92b97d5.jpg +0 -0
  638. package/kb/references/thumbs/a6562c210a.jpg +0 -0
  639. package/kb/references/thumbs/a6f61a8d09.jpg +0 -0
  640. package/kb/references/thumbs/a719fdf663.jpg +0 -0
  641. package/kb/references/thumbs/a724e5442f.jpg +0 -0
  642. package/kb/references/thumbs/a852b4319f.jpg +0 -0
  643. package/kb/references/thumbs/a896c08448.jpg +0 -0
  644. package/kb/references/thumbs/a8d190a4b8.jpg +0 -0
  645. package/kb/references/thumbs/a8dcdd57d7.jpg +0 -0
  646. package/kb/references/thumbs/a951347e18.jpg +0 -0
  647. package/kb/references/thumbs/a9a1a0bf7d.jpg +0 -0
  648. package/kb/references/thumbs/a9b72986a8.jpg +0 -0
  649. package/kb/references/thumbs/aa11555ba8.jpg +0 -0
  650. package/kb/references/thumbs/aa4aab9093.jpg +0 -0
  651. package/kb/references/thumbs/aa89b96658.jpg +0 -0
  652. package/kb/references/thumbs/aaeb3739b6.jpg +0 -0
  653. package/kb/references/thumbs/ab25a608ec.jpg +0 -0
  654. package/kb/references/thumbs/ab34b62268.jpg +0 -0
  655. package/kb/references/thumbs/ab3b0217bb.jpg +0 -0
  656. package/kb/references/thumbs/ac70c04afb.jpg +0 -0
  657. package/kb/references/thumbs/ace0879117.jpg +0 -0
  658. package/kb/references/thumbs/ad0515ae55.jpg +0 -0
  659. package/kb/references/thumbs/ad66b25b47.jpg +0 -0
  660. package/kb/references/thumbs/ad68229d2f.jpg +0 -0
  661. package/kb/references/thumbs/add6480693.jpg +0 -0
  662. package/kb/references/thumbs/ae5b8c3b8c.jpg +0 -0
  663. package/kb/references/thumbs/ae81247b47.jpg +0 -0
  664. package/kb/references/thumbs/af8aa54379.jpg +0 -0
  665. package/kb/references/thumbs/afa80dedd4.jpg +0 -0
  666. package/kb/references/thumbs/afe04d730f.jpg +0 -0
  667. package/kb/references/thumbs/b09a7dc315.jpg +0 -0
  668. package/kb/references/thumbs/b0c02629f6.jpg +0 -0
  669. package/kb/references/thumbs/b1cb4f91de.jpg +0 -0
  670. package/kb/references/thumbs/b1d4c13c92.jpg +0 -0
  671. package/kb/references/thumbs/b20eef86db.jpg +0 -0
  672. package/kb/references/thumbs/b3136ccdde.jpg +0 -0
  673. package/kb/references/thumbs/b3f5e8d7dd.jpg +0 -0
  674. package/kb/references/thumbs/b44adb81c9.jpg +0 -0
  675. package/kb/references/thumbs/b457a5894b.jpg +0 -0
  676. package/kb/references/thumbs/b461281e0f.jpg +0 -0
  677. package/kb/references/thumbs/b4942644f0.jpg +0 -0
  678. package/kb/references/thumbs/b49f8eccad.jpg +0 -0
  679. package/kb/references/thumbs/b56c69be23.jpg +0 -0
  680. package/kb/references/thumbs/b59786b33c.jpg +0 -0
  681. package/kb/references/thumbs/b5d368ce5a.jpg +0 -0
  682. package/kb/references/thumbs/b5eb442406.jpg +0 -0
  683. package/kb/references/thumbs/b7fdabf4ab.jpg +0 -0
  684. package/kb/references/thumbs/b88ee8d235.jpg +0 -0
  685. package/kb/references/thumbs/b8a4e5be8a.jpg +0 -0
  686. package/kb/references/thumbs/b8c85b661c.jpg +0 -0
  687. package/kb/references/thumbs/ba1b8e7435.jpg +0 -0
  688. package/kb/references/thumbs/ba9a593eed.jpg +0 -0
  689. package/kb/references/thumbs/baa7afc201.jpg +0 -0
  690. package/kb/references/thumbs/baf74398f7.jpg +0 -0
  691. package/kb/references/thumbs/bb3e947c10.jpg +0 -0
  692. package/kb/references/thumbs/bb4c1bb7c1.jpg +0 -0
  693. package/kb/references/thumbs/bbaa25cc8a.jpg +0 -0
  694. package/kb/references/thumbs/bc7e7f88cc.jpg +0 -0
  695. package/kb/references/thumbs/bc9d5b58f5.jpg +0 -0
  696. package/kb/references/thumbs/bcc99a51f7.jpg +0 -0
  697. package/kb/references/thumbs/bce13dd1c1.jpg +0 -0
  698. package/kb/references/thumbs/bd079a6130.jpg +0 -0
  699. package/kb/references/thumbs/bd2d70dda7.jpg +0 -0
  700. package/kb/references/thumbs/bd5895c5f2.jpg +0 -0
  701. package/kb/references/thumbs/bde8e31d62.jpg +0 -0
  702. package/kb/references/thumbs/be084e78f3.jpg +0 -0
  703. package/kb/references/thumbs/be94f170c8.jpg +0 -0
  704. package/kb/references/thumbs/bed33654f7.jpg +0 -0
  705. package/kb/references/thumbs/beeb9a0c18.jpg +0 -0
  706. package/kb/references/thumbs/bef42094dc.jpg +0 -0
  707. package/kb/references/thumbs/bf625496fa.jpg +0 -0
  708. package/kb/references/thumbs/bf771f1398.jpg +0 -0
  709. package/kb/references/thumbs/c0ddefa3d9.jpg +0 -0
  710. package/kb/references/thumbs/c0f01e536e.jpg +0 -0
  711. package/kb/references/thumbs/c1d592b678.jpg +0 -0
  712. package/kb/references/thumbs/c1e83e1b3e.jpg +0 -0
  713. package/kb/references/thumbs/c2168f8096.jpg +0 -0
  714. package/kb/references/thumbs/c249cd6b17.jpg +0 -0
  715. package/kb/references/thumbs/c2e3d4feed.jpg +0 -0
  716. package/kb/references/thumbs/c3cec01df1.jpg +0 -0
  717. package/kb/references/thumbs/c47bedb42d.jpg +0 -0
  718. package/kb/references/thumbs/c4b03b4680.jpg +0 -0
  719. package/kb/references/thumbs/c4e6d18ec3.jpg +0 -0
  720. package/kb/references/thumbs/c5477e2877.jpg +0 -0
  721. package/kb/references/thumbs/c566794674.jpg +0 -0
  722. package/kb/references/thumbs/c5b945afbb.jpg +0 -0
  723. package/kb/references/thumbs/c5e4659497.jpg +0 -0
  724. package/kb/references/thumbs/c622786702.jpg +0 -0
  725. package/kb/references/thumbs/c6250649ca.jpg +0 -0
  726. package/kb/references/thumbs/c6261a9526.jpg +0 -0
  727. package/kb/references/thumbs/c62e609076.jpg +0 -0
  728. package/kb/references/thumbs/c6602d3e85.jpg +0 -0
  729. package/kb/references/thumbs/c6c1a16e40.jpg +0 -0
  730. package/kb/references/thumbs/c77f932157.jpg +0 -0
  731. package/kb/references/thumbs/c79788f01e.jpg +0 -0
  732. package/kb/references/thumbs/c7a511ad1e.jpg +0 -0
  733. package/kb/references/thumbs/c7acfbc3c8.jpg +0 -0
  734. package/kb/references/thumbs/c7bb6d1bb8.jpg +0 -0
  735. package/kb/references/thumbs/c829eadcb9.jpg +0 -0
  736. package/kb/references/thumbs/c891fd9d85.jpg +0 -0
  737. package/kb/references/thumbs/c89f812ee3.jpg +0 -0
  738. package/kb/references/thumbs/c8a85b9f61.jpg +0 -0
  739. package/kb/references/thumbs/c8fdf85c9a.jpg +0 -0
  740. package/kb/references/thumbs/c961ac1031.jpg +0 -0
  741. package/kb/references/thumbs/c9fd3f88d8.jpg +0 -0
  742. package/kb/references/thumbs/ca0d6399c3.jpg +0 -0
  743. package/kb/references/thumbs/ca316c83e4.jpg +0 -0
  744. package/kb/references/thumbs/ca3b93aa0d.jpg +0 -0
  745. package/kb/references/thumbs/cb0596a85b.jpg +0 -0
  746. package/kb/references/thumbs/cb95a5c3ef.jpg +0 -0
  747. package/kb/references/thumbs/cbe238b656.jpg +0 -0
  748. package/kb/references/thumbs/cbf530e608.jpg +0 -0
  749. package/kb/references/thumbs/cc173494ec.jpg +0 -0
  750. package/kb/references/thumbs/ccb664bddf.jpg +0 -0
  751. package/kb/references/thumbs/ccf69d36cd.jpg +0 -0
  752. package/kb/references/thumbs/ccf759db42.jpg +0 -0
  753. package/kb/references/thumbs/cd2a285807.jpg +0 -0
  754. package/kb/references/thumbs/cd4a24a8ca.jpg +0 -0
  755. package/kb/references/thumbs/cdb3fe8938.jpg +0 -0
  756. package/kb/references/thumbs/cdce1b9bc6.jpg +0 -0
  757. package/kb/references/thumbs/cde3aa761a.jpg +0 -0
  758. package/kb/references/thumbs/ce9d5cd9c2.jpg +0 -0
  759. package/kb/references/thumbs/ceb01f8a34.jpg +0 -0
  760. package/kb/references/thumbs/cee15c98d0.jpg +0 -0
  761. package/kb/references/thumbs/cf6944ddae.jpg +0 -0
  762. package/kb/references/thumbs/d15dd21cd8.jpg +0 -0
  763. package/kb/references/thumbs/d1633bf2ed.jpg +0 -0
  764. package/kb/references/thumbs/d16a838000.jpg +0 -0
  765. package/kb/references/thumbs/d1cf87e9f0.jpg +0 -0
  766. package/kb/references/thumbs/d32511d913.jpg +0 -0
  767. package/kb/references/thumbs/d327e9dedd.jpg +0 -0
  768. package/kb/references/thumbs/d35bf6c85e.jpg +0 -0
  769. package/kb/references/thumbs/d37afc9d61.jpg +0 -0
  770. package/kb/references/thumbs/d3b66655c7.jpg +0 -0
  771. package/kb/references/thumbs/d40b4172b6.jpg +0 -0
  772. package/kb/references/thumbs/d4c40d1824.jpg +0 -0
  773. package/kb/references/thumbs/d4cb55a4b6.jpg +0 -0
  774. package/kb/references/thumbs/d4f0c30f7e.jpg +0 -0
  775. package/kb/references/thumbs/d51cce3ae5.jpg +0 -0
  776. package/kb/references/thumbs/d52948f9ba.jpg +0 -0
  777. package/kb/references/thumbs/d62bd3cba4.jpg +0 -0
  778. package/kb/references/thumbs/d668a21c92.jpg +0 -0
  779. package/kb/references/thumbs/d685072c52.jpg +0 -0
  780. package/kb/references/thumbs/d6d7b96093.jpg +0 -0
  781. package/kb/references/thumbs/d7cd874b21.jpg +0 -0
  782. package/kb/references/thumbs/d7e111736a.jpg +0 -0
  783. package/kb/references/thumbs/d88325f832.jpg +0 -0
  784. package/kb/references/thumbs/d9272ded76.jpg +0 -0
  785. package/kb/references/thumbs/d962e7c654.jpg +0 -0
  786. package/kb/references/thumbs/d97f000ee2.jpg +0 -0
  787. package/kb/references/thumbs/d9c1ae2543.jpg +0 -0
  788. package/kb/references/thumbs/d9ccb3cac8.jpg +0 -0
  789. package/kb/references/thumbs/da99019680.jpg +0 -0
  790. package/kb/references/thumbs/da9b8bc615.jpg +0 -0
  791. package/kb/references/thumbs/daafbee2c1.jpg +0 -0
  792. package/kb/references/thumbs/db0f11f143.jpg +0 -0
  793. package/kb/references/thumbs/db5dd367f5.jpg +0 -0
  794. package/kb/references/thumbs/db69677866.jpg +0 -0
  795. package/kb/references/thumbs/db87c1956e.jpg +0 -0
  796. package/kb/references/thumbs/dbb86d8bda.jpg +0 -0
  797. package/kb/references/thumbs/dbd3a8ff2a.jpg +0 -0
  798. package/kb/references/thumbs/dbdf4b2794.jpg +0 -0
  799. package/kb/references/thumbs/dd4c19b4b1.jpg +0 -0
  800. package/kb/references/thumbs/dd98d9f6fa.jpg +0 -0
  801. package/kb/references/thumbs/ddb00e3b6a.jpg +0 -0
  802. package/kb/references/thumbs/dde3541a5c.jpg +0 -0
  803. package/kb/references/thumbs/de2a4da502.jpg +0 -0
  804. package/kb/references/thumbs/de4c387a66.jpg +0 -0
  805. package/kb/references/thumbs/de5618fa82.jpg +0 -0
  806. package/kb/references/thumbs/de6bec2538.jpg +0 -0
  807. package/kb/references/thumbs/dea13cbb1f.jpg +0 -0
  808. package/kb/references/thumbs/deff9202aa.jpg +0 -0
  809. package/kb/references/thumbs/df12835f8d.jpg +0 -0
  810. package/kb/references/thumbs/df57acbb3d.jpg +0 -0
  811. package/kb/references/thumbs/df8265009e.jpg +0 -0
  812. package/kb/references/thumbs/dfc99a1e8e.jpg +0 -0
  813. package/kb/references/thumbs/dfc9fde460.jpg +0 -0
  814. package/kb/references/thumbs/e038348eee.jpg +0 -0
  815. package/kb/references/thumbs/e04c2ae1d5.jpg +0 -0
  816. package/kb/references/thumbs/e070345c43.jpg +0 -0
  817. package/kb/references/thumbs/e0a0c84d47.jpg +0 -0
  818. package/kb/references/thumbs/e0af1e6b9e.jpg +0 -0
  819. package/kb/references/thumbs/e1025942c4.jpg +0 -0
  820. package/kb/references/thumbs/e11b6f5b82.jpg +0 -0
  821. package/kb/references/thumbs/e1553de3fc.jpg +0 -0
  822. package/kb/references/thumbs/e162ebe7cd.jpg +0 -0
  823. package/kb/references/thumbs/e1f1e531d8.jpg +0 -0
  824. package/kb/references/thumbs/e20842e5c9.jpg +0 -0
  825. package/kb/references/thumbs/e24e7d949b.jpg +0 -0
  826. package/kb/references/thumbs/e2a3e5d10a.jpg +0 -0
  827. package/kb/references/thumbs/e2de02615a.jpg +0 -0
  828. package/kb/references/thumbs/e305dad7dd.jpg +0 -0
  829. package/kb/references/thumbs/e52e3ef97f.jpg +0 -0
  830. package/kb/references/thumbs/e570e92d06.jpg +0 -0
  831. package/kb/references/thumbs/e583932fb9.jpg +0 -0
  832. package/kb/references/thumbs/e5da3c038f.jpg +0 -0
  833. package/kb/references/thumbs/e657634af3.jpg +0 -0
  834. package/kb/references/thumbs/e67946e3e1.jpg +0 -0
  835. package/kb/references/thumbs/e69e0f3639.jpg +0 -0
  836. package/kb/references/thumbs/e6ebe66031.jpg +0 -0
  837. package/kb/references/thumbs/e7db9563c9.jpg +0 -0
  838. package/kb/references/thumbs/e84a4c3b7b.jpg +0 -0
  839. package/kb/references/thumbs/e84cf52c27.jpg +0 -0
  840. package/kb/references/thumbs/e8707cf6e8.jpg +0 -0
  841. package/kb/references/thumbs/e888890b40.jpg +0 -0
  842. package/kb/references/thumbs/e8a502b418.jpg +0 -0
  843. package/kb/references/thumbs/e8ba68371d.jpg +0 -0
  844. package/kb/references/thumbs/e9098f54cc.jpg +0 -0
  845. package/kb/references/thumbs/e9144deae9.jpg +0 -0
  846. package/kb/references/thumbs/e93e98d757.jpg +0 -0
  847. package/kb/references/thumbs/e9762dd435.jpg +0 -0
  848. package/kb/references/thumbs/e9db4544c8.jpg +0 -0
  849. package/kb/references/thumbs/e9ddffeacd.jpg +0 -0
  850. package/kb/references/thumbs/e9e2cf1d7e.jpg +0 -0
  851. package/kb/references/thumbs/ea1e23e623.jpg +0 -0
  852. package/kb/references/thumbs/ea41200f5e.jpg +0 -0
  853. package/kb/references/thumbs/eaf4916e1a.jpg +0 -0
  854. package/kb/references/thumbs/eb2c505fc8.jpg +0 -0
  855. package/kb/references/thumbs/eb47943693.jpg +0 -0
  856. package/kb/references/thumbs/eb4ffd6625.jpg +0 -0
  857. package/kb/references/thumbs/eb82ac0a4d.jpg +0 -0
  858. package/kb/references/thumbs/ebeb345ade.jpg +0 -0
  859. package/kb/references/thumbs/ec4e2aba0a.jpg +0 -0
  860. package/kb/references/thumbs/ed683bc9f7.jpg +0 -0
  861. package/kb/references/thumbs/ed9e236a84.jpg +0 -0
  862. package/kb/references/thumbs/ee45e1caea.jpg +0 -0
  863. package/kb/references/thumbs/ee50bbf2e7.jpg +0 -0
  864. package/kb/references/thumbs/eed6ad3b7b.jpg +0 -0
  865. package/kb/references/thumbs/eee247fd70.jpg +0 -0
  866. package/kb/references/thumbs/ef87b6cb99.jpg +0 -0
  867. package/kb/references/thumbs/ef87dccf04.jpg +0 -0
  868. package/kb/references/thumbs/ef941bba1e.jpg +0 -0
  869. package/kb/references/thumbs/effc14fb2c.jpg +0 -0
  870. package/kb/references/thumbs/f04aa5a191.jpg +0 -0
  871. package/kb/references/thumbs/f13f12485f.jpg +0 -0
  872. package/kb/references/thumbs/f16a5c0fd4.jpg +0 -0
  873. package/kb/references/thumbs/f1ba7a7a8f.jpg +0 -0
  874. package/kb/references/thumbs/f1bc4c9c19.jpg +0 -0
  875. package/kb/references/thumbs/f1ee827878.jpg +0 -0
  876. package/kb/references/thumbs/f21736aeff.jpg +0 -0
  877. package/kb/references/thumbs/f22bc41213.jpg +0 -0
  878. package/kb/references/thumbs/f266aaffcc.jpg +0 -0
  879. package/kb/references/thumbs/f2c0ed0d65.jpg +0 -0
  880. package/kb/references/thumbs/f32ac710fd.jpg +0 -0
  881. package/kb/references/thumbs/f32b697ff6.jpg +0 -0
  882. package/kb/references/thumbs/f39c883904.jpg +0 -0
  883. package/kb/references/thumbs/f3b9d55e6e.jpg +0 -0
  884. package/kb/references/thumbs/f3c1763e14.jpg +0 -0
  885. package/kb/references/thumbs/f40853fd43.jpg +0 -0
  886. package/kb/references/thumbs/f4fd07dc4d.jpg +0 -0
  887. package/kb/references/thumbs/f50b756ee5.jpg +0 -0
  888. package/kb/references/thumbs/f51272e9b3.jpg +0 -0
  889. package/kb/references/thumbs/f538895eee.jpg +0 -0
  890. package/kb/references/thumbs/f5d28081b5.jpg +0 -0
  891. package/kb/references/thumbs/f6046c9501.jpg +0 -0
  892. package/kb/references/thumbs/f62e4af316.jpg +0 -0
  893. package/kb/references/thumbs/f6f6bffeb8.jpg +0 -0
  894. package/kb/references/thumbs/f736e00af6.jpg +0 -0
  895. package/kb/references/thumbs/f7932da47d.jpg +0 -0
  896. package/kb/references/thumbs/f879e118ca.jpg +0 -0
  897. package/kb/references/thumbs/f88257215d.jpg +0 -0
  898. package/kb/references/thumbs/f88c45a6d7.jpg +0 -0
  899. package/kb/references/thumbs/f89a7b646e.jpg +0 -0
  900. package/kb/references/thumbs/f8a1e7a274.jpg +0 -0
  901. package/kb/references/thumbs/f9183cf2b6.jpg +0 -0
  902. package/kb/references/thumbs/f995de5ce9.jpg +0 -0
  903. package/kb/references/thumbs/f9ada2c3e1.jpg +0 -0
  904. package/kb/references/thumbs/f9d4616f89.jpg +0 -0
  905. package/kb/references/thumbs/f9f4307bb0.jpg +0 -0
  906. package/kb/references/thumbs/fa070122c7.jpg +0 -0
  907. package/kb/references/thumbs/fa29cc1369.jpg +0 -0
  908. package/kb/references/thumbs/fa791a4dab.jpg +0 -0
  909. package/kb/references/thumbs/fa8060509e.jpg +0 -0
  910. package/kb/references/thumbs/fafeed4003.jpg +0 -0
  911. package/kb/references/thumbs/fb1c024f38.jpg +0 -0
  912. package/kb/references/thumbs/fb77aa28b3.jpg +0 -0
  913. package/kb/references/thumbs/fb9f7f1966.jpg +0 -0
  914. package/kb/references/thumbs/fba8a8c2da.jpg +0 -0
  915. package/kb/references/thumbs/fce2754c36.jpg +0 -0
  916. package/kb/references/thumbs/fce2fb83df.jpg +0 -0
  917. package/kb/references/thumbs/fd4c51bb47.jpg +0 -0
  918. package/kb/references/thumbs/fd8c269817.jpg +0 -0
  919. package/kb/references/thumbs/fdb7b250ca.jpg +0 -0
  920. package/kb/references/thumbs/fe18088de8.jpg +0 -0
  921. package/kb/references/thumbs/fe4f742ba7.jpg +0 -0
  922. package/kb/references/thumbs/fe64742ce7.jpg +0 -0
  923. package/kb/references/thumbs/feb5d62161.jpg +0 -0
  924. package/kb/references/thumbs/fed21b3e98.jpg +0 -0
  925. package/kb/references/thumbs/fed2205951.jpg +0 -0
  926. package/kb/references/thumbs/ffdacf1715.jpg +0 -0
  927. package/kb/sections/_buttons.md +93 -0
  928. package/kb/sections/_finish.md +325 -0
  929. package/kb/sections/about-founder-note.md +85 -0
  930. package/kb/sections/about-team-roster.md +86 -0
  931. package/kb/sections/alternating-rows-live-tiles.md +110 -0
  932. package/kb/sections/annotated-product-shot.md +105 -0
  933. package/kb/sections/asymmetric-bento-dominant.md +114 -0
  934. package/kb/sections/before-after-features.md +104 -0
  935. package/kb/sections/before-after-repair.md +107 -0
  936. package/kb/sections/bento-lead-tile.md +112 -0
  937. package/kb/sections/book-a-slot-honest.md +116 -0
  938. package/kb/sections/capability-prompt-ledger.md +68 -0
  939. package/kb/sections/case-study-band.md +113 -0
  940. package/kb/sections/centred-stack-hero.md +107 -0
  941. package/kb/sections/closing-demo-final-state.md +81 -0
  942. package/kb/sections/closing-full-bleed-line-and-form.md +86 -0
  943. package/kb/sections/closing-result-previewed.md +88 -0
  944. package/kb/sections/closing-three-real-steps.md +87 -0
  945. package/kb/sections/command-reference-table.md +70 -0
  946. package/kb/sections/comparison-old-way-bars.md +88 -0
  947. package/kb/sections/comparison-same-task-two-ways.md +88 -0
  948. package/kb/sections/day-of-the-place.md +102 -0
  949. package/kb/sections/docs-reading-rail.md +88 -0
  950. package/kb/sections/editorial-columns-hero.md +107 -0
  951. package/kb/sections/editorial-essay-pull-quote.md +112 -0
  952. package/kb/sections/events-calendar-list.md +107 -0
  953. package/kb/sections/explorable-control-demo.md +102 -0
  954. package/kb/sections/faq-open-answers-editorial.md +85 -0
  955. package/kb/sections/faq-ruled-accordion-aside.md +87 -0
  956. package/kb/sections/footer-closing-scene.md +84 -0
  957. package/kb/sections/footer-editorial-sitemap.md +85 -0
  958. package/kb/sections/footer-minimal-credits.md +80 -0
  959. package/kb/sections/full-bleed-image-band.md +103 -0
  960. package/kb/sections/full-bleed-image-hero.md +105 -0
  961. package/kb/sections/gallery-first-hero.md +109 -0
  962. package/kb/sections/horizontal-scroll-strip.md +101 -0
  963. package/kb/sections/how-i-work-own-voice.md +111 -0
  964. package/kb/sections/how-it-works-in-place.md +109 -0
  965. package/kb/sections/impact-numbers-sourced.md +109 -0
  966. package/kb/sections/install-steps-per-agent.md +77 -0
  967. package/kb/sections/masonry-real-work.md +109 -0
  968. package/kb/sections/numbered-editorial-columns.md +105 -0
  969. package/kb/sections/object-first-hero.md +106 -0
  970. package/kb/sections/object-timeline.md +105 -0
  971. package/kb/sections/one-huge-number.md +100 -0
  972. package/kb/sections/one-person-story.md +103 -0
  973. package/kb/sections/order-ahead-ticket.md +119 -0
  974. package/kb/sections/press-strip-quoted.md +106 -0
  975. package/kb/sections/pricing-comparison-table-sticky.md +94 -0
  976. package/kb/sections/pricing-free-pro-upgrade-moment.md +85 -0
  977. package/kb/sections/pricing-plan-beside-product.md +88 -0
  978. package/kb/sections/pricing-plans-ledger.md +94 -0
  979. package/kb/sections/pricing-usage-calculator.md +93 -0
  980. package/kb/sections/printed-menu-card.md +110 -0
  981. package/kb/sections/process-happening.md +102 -0
  982. package/kb/sections/project-index-ruled.md +106 -0
  983. package/kb/sections/proof-logo-cloud-with-reasons.md +82 -0
  984. package/kb/sections/proof-measured-numbers.md +88 -0
  985. package/kb/sections/proof-output-wall.md +84 -0
  986. package/kb/sections/proof-single-honest-quote.md +81 -0
  987. package/kb/sections/resources-searchable-list.md +110 -0
  988. package/kb/sections/rooms-and-rates.md +107 -0
  989. package/kb/sections/ruled-facts-table.md +108 -0
  990. package/kb/sections/ruled-list-pinned-visual.md +107 -0
  991. package/kb/sections/scroll-scrubbed-product-demo.md +103 -0
  992. package/kb/sections/self-playing-run-demo.md +104 -0
  993. package/kb/sections/services-price-ledger.md +106 -0
  994. package/kb/sections/signup-form-with-next-steps.md +86 -0
  995. package/kb/sections/signup-waitlist-place-in-line.md +90 -0
  996. package/kb/sections/spec-sheet-features.md +108 -0
  997. package/kb/sections/split-hero-live-object.md +108 -0
  998. package/kb/sections/sticky-feature-narrative.md +104 -0
  999. package/kb/sections/todays-board-hero.md +112 -0
  1000. package/kb/sections/touchable-tool-hero.md +111 -0
  1001. package/kb/sections/typographic-statement-hero.md +99 -0
  1002. package/kb/sections/visit-hours-map.md +110 -0
  1003. package/kb/sections/ways-to-help-honest.md +115 -0
  1004. package/kb/sources/design-reference.md +991 -0
  1005. package/kb/sources/product-and-docs.md +37 -0
  1006. package/kb/systems/1win/DESIGN.md +463 -0
  1007. package/kb/systems/LICENSE-awesome-design-md +21 -0
  1008. package/kb/systems/README.md +7 -0
  1009. package/kb/systems/airbnb/DESIGN.md +545 -0
  1010. package/kb/systems/airtable/DESIGN.md +554 -0
  1011. package/kb/systems/aljazeera/DESIGN.md +594 -0
  1012. package/kb/systems/apple/DESIGN.md +562 -0
  1013. package/kb/systems/binance/DESIGN.md +634 -0
  1014. package/kb/systems/bmw/DESIGN.md +544 -0
  1015. package/kb/systems/bmw-m/DESIGN.md +503 -0
  1016. package/kb/systems/bugatti/DESIGN.md +454 -0
  1017. package/kb/systems/cal/DESIGN.md +542 -0
  1018. package/kb/systems/categories.json +87 -0
  1019. package/kb/systems/claude/DESIGN.md +589 -0
  1020. package/kb/systems/clay/DESIGN.md +541 -0
  1021. package/kb/systems/clickhouse/DESIGN.md +544 -0
  1022. package/kb/systems/cohere/DESIGN.md +451 -0
  1023. package/kb/systems/coinbase/DESIGN.md +570 -0
  1024. package/kb/systems/composio/DESIGN.md +506 -0
  1025. package/kb/systems/cursor/DESIGN.md +537 -0
  1026. package/kb/systems/dell-1996/DESIGN.md +632 -0
  1027. package/kb/systems/dji/DESIGN.md +882 -0
  1028. package/kb/systems/elevenlabs/DESIGN.md +504 -0
  1029. package/kb/systems/expo/DESIGN.md +526 -0
  1030. package/kb/systems/ferrari/DESIGN.md +531 -0
  1031. package/kb/systems/figma/DESIGN.md +578 -0
  1032. package/kb/systems/framer/DESIGN.md +544 -0
  1033. package/kb/systems/hashicorp/DESIGN.md +575 -0
  1034. package/kb/systems/hp/DESIGN.md +670 -0
  1035. package/kb/systems/ibm/DESIGN.md +550 -0
  1036. package/kb/systems/intercom/DESIGN.md +546 -0
  1037. package/kb/systems/jobright/DESIGN.md +525 -0
  1038. package/kb/systems/kraken/DESIGN.md +125 -0
  1039. package/kb/systems/lamborghini/DESIGN.md +288 -0
  1040. package/kb/systems/linear.app/DESIGN.md +548 -0
  1041. package/kb/systems/lovable/DESIGN.md +298 -0
  1042. package/kb/systems/mastercard/DESIGN.md +365 -0
  1043. package/kb/systems/mercury/DESIGN.md +568 -0
  1044. package/kb/systems/meta/DESIGN.md +683 -0
  1045. package/kb/systems/minimax/DESIGN.md +746 -0
  1046. package/kb/systems/mintlify/DESIGN.md +852 -0
  1047. package/kb/systems/miro/DESIGN.md +825 -0
  1048. package/kb/systems/mistral.ai/DESIGN.md +773 -0
  1049. package/kb/systems/mongodb/DESIGN.md +767 -0
  1050. package/kb/systems/mydealz/DESIGN.md +551 -0
  1051. package/kb/systems/nerdwallet/DESIGN.md +722 -0
  1052. package/kb/systems/nike/DESIGN.md +575 -0
  1053. package/kb/systems/nintendo-2001/DESIGN.md +649 -0
  1054. package/kb/systems/notion/DESIGN.md +821 -0
  1055. package/kb/systems/nvidia/DESIGN.md +640 -0
  1056. package/kb/systems/ollama/DESIGN.md +539 -0
  1057. package/kb/systems/opencode.ai/DESIGN.md +521 -0
  1058. package/kb/systems/oracle/DESIGN.md +778 -0
  1059. package/kb/systems/oura/DESIGN.md +616 -0
  1060. package/kb/systems/pinterest/DESIGN.md +597 -0
  1061. package/kb/systems/playstation/DESIGN.md +661 -0
  1062. package/kb/systems/posthog/DESIGN.md +690 -0
  1063. package/kb/systems/raycast/DESIGN.md +669 -0
  1064. package/kb/systems/renault/DESIGN.md +589 -0
  1065. package/kb/systems/replicate/DESIGN.md +616 -0
  1066. package/kb/systems/resend/DESIGN.md +585 -0
  1067. package/kb/systems/revolut/DESIGN.md +636 -0
  1068. package/kb/systems/runwayml/DESIGN.md +244 -0
  1069. package/kb/systems/sanity/DESIGN.md +357 -0
  1070. package/kb/systems/sap/DESIGN.md +639 -0
  1071. package/kb/systems/sentry/DESIGN.md +551 -0
  1072. package/kb/systems/shopify/DESIGN.md +516 -0
  1073. package/kb/systems/slack/DESIGN.md +482 -0
  1074. package/kb/systems/spacex/DESIGN.md +363 -0
  1075. package/kb/systems/spotify/DESIGN.md +246 -0
  1076. package/kb/systems/starbucks/DESIGN.md +580 -0
  1077. package/kb/systems/stripe/DESIGN.md +487 -0
  1078. package/kb/systems/supabase/DESIGN.md +462 -0
  1079. package/kb/systems/superhuman/DESIGN.md +448 -0
  1080. package/kb/systems/tesla/DESIGN.md +286 -0
  1081. package/kb/systems/theverge/DESIGN.md +339 -0
  1082. package/kb/systems/together.ai/DESIGN.md +633 -0
  1083. package/kb/systems/uber/DESIGN.md +636 -0
  1084. package/kb/systems/vercel/DESIGN.md +736 -0
  1085. package/kb/systems/vodafone/DESIGN.md +538 -0
  1086. package/kb/systems/voltagent/DESIGN.md +521 -0
  1087. package/kb/systems/warp/DESIGN.md +526 -0
  1088. package/kb/systems/webflow/DESIGN.md +588 -0
  1089. package/kb/systems/wired/DESIGN.md +497 -0
  1090. package/kb/systems/wise/DESIGN.md +544 -0
  1091. package/kb/systems/x.ai/DESIGN.md +465 -0
  1092. package/kb/systems/zapier/DESIGN.md +537 -0
  1093. package/kb/taste/garvit-by-job.md +46 -0
  1094. package/kb/taste/garvit-portfolio.md +94 -0
  1095. package/kb/universal/color-roles.md +26 -0
  1096. package/kb/universal/copy.md +16 -0
  1097. package/kb/universal/details.md +31 -0
  1098. package/kb/universal/first-screen.md +30 -0
  1099. package/kb/universal/fit-the-codebase.md +29 -0
  1100. package/kb/universal/layout-width.md +28 -0
  1101. package/kb/universal/motion-feedback.md +23 -0
  1102. package/kb/universal/signature.md +29 -0
  1103. package/kb/universal/states.md +17 -0
  1104. package/kb/universal/type-app.md +33 -0
  1105. package/kb/universal/type-marketing.md +28 -0
  1106. package/package.json +36 -4
  1107. package/scripts/pack-assets.mjs +48 -0
  1108. package/skill/palate/SKILL.md +261 -0
  1109. package/src/auth-recheck.mjs +4 -0
  1110. package/src/auth.mjs +416 -0
  1111. package/src/capture.mjs +182 -0
  1112. package/src/catalog/classify.mjs +96 -0
  1113. package/src/catalog/curated.mjs +128 -0
  1114. package/src/catalog/index-build.mjs +67 -0
  1115. package/src/catalog/literal.mjs +146 -0
  1116. package/src/catalog/store.mjs +40 -0
  1117. package/src/catalog/vibrant.mjs +126 -0
  1118. package/src/check.mjs +93 -0
  1119. package/src/concept.mjs +157 -0
  1120. package/src/context.mjs +226 -0
  1121. package/src/copy.mjs +188 -0
  1122. package/src/devserver.mjs +135 -0
  1123. package/src/fontgenre.mjs +44 -0
  1124. package/src/guard-agents.mjs +213 -0
  1125. package/src/guard.mjs +377 -0
  1126. package/src/kb.mjs +91 -0
  1127. package/src/look.mjs +312 -0
  1128. package/src/loop/ambition.mjs +620 -0
  1129. package/src/loop/animate.mjs +70 -0
  1130. package/src/loop/artdirection.mjs +264 -0
  1131. package/src/loop/bench.mjs +184 -0
  1132. package/src/loop/benchpick.mjs +155 -0
  1133. package/src/loop/blueprint.mjs +620 -0
  1134. package/src/loop/board.html +180 -0
  1135. package/src/loop/build.mjs +393 -0
  1136. package/src/loop/buttons.mjs +413 -0
  1137. package/src/loop/common.mjs +206 -0
  1138. package/src/loop/cost.mjs +63 -0
  1139. package/src/loop/craft.mjs +152 -0
  1140. package/src/loop/craftchecks.mjs +148 -0
  1141. package/src/loop/critique.mjs +393 -0
  1142. package/src/loop/details.mjs +225 -0
  1143. package/src/loop/direction.html +168 -0
  1144. package/src/loop/direction.mjs +256 -0
  1145. package/src/loop/directions.json +8 -0
  1146. package/src/loop/explore.mjs +219 -0
  1147. package/src/loop/fail.mjs +110 -0
  1148. package/src/loop/fix.mjs +194 -0
  1149. package/src/loop/floor.mjs +677 -0
  1150. package/src/loop/forget.mjs +52 -0
  1151. package/src/loop/gate.mjs +1053 -0
  1152. package/src/loop/grid.html +123 -0
  1153. package/src/loop/growth.mjs +118 -0
  1154. package/src/loop/icons.mjs +109 -0
  1155. package/src/loop/imagery.mjs +1280 -0
  1156. package/src/loop/judge-api.mjs +245 -0
  1157. package/src/loop/judge.mjs +167 -0
  1158. package/src/loop/layouts.mjs +492 -0
  1159. package/src/loop/library.mjs +82 -0
  1160. package/src/loop/lookplan.mjs +182 -0
  1161. package/src/loop/lookvec.mjs +645 -0
  1162. package/src/loop/match.mjs +923 -0
  1163. package/src/loop/matched.mjs +26 -0
  1164. package/src/loop/myrefs.mjs +151 -0
  1165. package/src/loop/pick.mjs +213 -0
  1166. package/src/loop/picker.html +118 -0
  1167. package/src/loop/plan.mjs +289 -0
  1168. package/src/loop/polish.mjs +39 -0
  1169. package/src/loop/research-learn.mjs +41 -0
  1170. package/src/loop/research.mjs +1130 -0
  1171. package/src/loop/rulereview.mjs +146 -0
  1172. package/src/loop/rules-board.html +199 -0
  1173. package/src/loop/rules.mjs +939 -0
  1174. package/src/loop/similar.mjs +276 -0
  1175. package/src/loop/states-source.mjs +258 -0
  1176. package/src/loop/states.mjs +1547 -0
  1177. package/src/loop/stats.mjs +78 -0
  1178. package/src/loop/taste.mjs +81 -0
  1179. package/src/loop/timeline.mjs +149 -0
  1180. package/src/loop/variants.mjs +228 -0
  1181. package/src/loop/vary.mjs +249 -0
  1182. package/src/mcp/server.mjs +1246 -0
  1183. package/src/motion.mjs +207 -0
  1184. package/src/moves.mjs +242 -0
  1185. package/src/novelty.mjs +116 -0
  1186. package/src/page-ambition.js +181 -0
  1187. package/src/page-craft.js +724 -0
  1188. package/src/page-details.js +415 -0
  1189. package/src/page-devices.js +365 -0
  1190. package/src/page-fingerprint.js +281 -0
  1191. package/src/page-gate.js +1307 -0
  1192. package/src/page-look.js +698 -0
  1193. package/src/page-metrics.js +78 -0
  1194. package/src/page-principles.js +1167 -0
  1195. package/src/page-rules.js +308 -0
  1196. package/src/page-sections.js +211 -0
  1197. package/src/page-states.js +703 -0
  1198. package/src/paths.mjs +13 -0
  1199. package/src/png.mjs +107 -0
  1200. package/src/point/auto.mjs +224 -0
  1201. package/src/point/locate.mjs +114 -0
  1202. package/src/point/overlay.js +1516 -0
  1203. package/src/point/server.mjs +1122 -0
  1204. package/src/point/trail.mjs +219 -0
  1205. package/src/pool.mjs +80 -0
  1206. package/src/principles.mjs +279 -0
  1207. package/src/refs.mjs +299 -0
  1208. package/src/robots.mjs +145 -0
  1209. package/src/sections.mjs +210 -0
  1210. package/src/shoot.mjs +235 -0
  1211. package/src/systems/apply.mjs +355 -0
  1212. package/src/systems/load.mjs +251 -0
  1213. package/src/systems/pick.mjs +213 -0
  1214. package/templates/vite-react-tw/index.html +12 -0
  1215. package/templates/vite-react-tw/package.json +25 -0
  1216. package/templates/vite-react-tw/src/App.tsx +3 -0
  1217. package/templates/vite-react-tw/src/index.css +1 -0
  1218. package/templates/vite-react-tw/src/main.tsx +10 -0
  1219. package/templates/vite-react-tw/tsconfig.app.json +26 -0
  1220. package/templates/vite-react-tw/tsconfig.json +7 -0
  1221. package/templates/vite-react-tw/tsconfig.node.json +23 -0
  1222. package/templates/vite-react-tw/vite.config.ts +8 -0
package/bin/palate.mjs ADDED
@@ -0,0 +1,894 @@
1
+ #!/usr/bin/env node
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { parseArgs } from "node:util";
5
+ import { check } from "../src/check.mjs";
6
+ import { context } from "../src/context.mjs";
7
+ import { card, list, search, show } from "../src/kb.mjs";
8
+ import { shoot } from "../src/shoot.mjs";
9
+ import { closePool, keepAlive } from "../src/pool.mjs";
10
+
11
+ keepAlive();
12
+
13
+ const HELP = `palate: design intelligence for coding agents
14
+
15
+ palate activate <code> Activate palate with your invite code (palate-XXXX-XXXX-XXXX), once per machine
16
+ palate activate --status Whether palate is activated here · palate deactivate: remove it
17
+ palate version The installed version
18
+
19
+ palate context What this project already uses: stack, tokens, fonts, components, screens
20
+ palate search <words> [--scope s] Find patterns and rules for a screen (returns short cards)
21
+ palate show <id> [id...] Read full knowledge entries
22
+ palate list Every entry in the knowledge base
23
+ palate shoot <route> [--widths 1440,390] [--tablet] [--url http://localhost:3000] [--fold] [--like <project>]
24
+ Render a route, save screenshots, report measurable problems
25
+ (--fold: first screen only, no principles pass; for checks while building).
26
+ Fails (exit 1) when the page is over 50% like another of your projects or
27
+ too close to a captured reference; --like <project> when the user asked to match it
28
+ palate check Scan your changed lines for generated-UI tells and token drift; says
29
+ "Not done" while a page fails a rule or the similarity gate
30
+ palate copy [files…] [--all] The words a page shows, read from source: hype, filler, placeholder copy and
31
+ proof with no source, each with what to write instead (changed files; --all: every file)
32
+ palate guard [--install|--uninstall] [--agent claude,codex,cursor,gemini,copilot,git] [--global]
33
+ The stop hook: the agent can't call UI work done until palate looked at every
34
+ changed screen and its copy, code tells, credits and gates pass (3 rounds, then
35
+ it reports). Installs for every agent the project uses (Claude Code, Codex,
36
+ Cursor, Gemini CLI; Copilot reads the Claude hook); --agent git: a pre-commit
37
+ check for any agent
38
+ palate icons <brand…> [--mono] Real brand marks (Simple Icons, CC0 set) as local SVGs in the brand's colour, for
39
+ "works with" rows and integration grids; a brand not in the set is reported
40
+ palate waive <id> [--file f] --reason "…" A finding that is wrong here, with a reason a reviewer would accept
41
+ palate waive · palate waive --remove <id> The project's waivers (every guard report lists them)
42
+
43
+ palate refs [words] --shelf <shelf> [--industry ..] [--audience ..] [--tone ..] [--needs ..] [--theme light|dark]
44
+ Pick 3 distinct real-world references for this screen and fetch their images
45
+ palate refs note <id> "text" Record what worked from a reference (improves future picks)
46
+ palate capture <url> Screenshot any public page and measure its fonts, type scale, colours, radii
47
+ palate shoot <route> --compare <reference id or image path>
48
+ Also save your first screen side by side with the reference
49
+ palate system pick "<request>" Choose the design system whose craft fits this request and codebase
50
+ palate system apply <id> [--type-from <id>]
51
+ Transfer that craft into the project's tokens (keeps your brand colour);
52
+ --type-from blends in another system's display type
53
+ palate concept "<request>" The creative step: a signature move and supporting moves for this screen,
54
+ steering away from what this project and machine used recently
55
+ palate concept record "<screen>" --moves a,b,c
56
+ Remember the moves a finished screen used, so the next one differs
57
+ palate moves [--tags calm,crafted] [--kind hero] [--signature] [--limit 8]
58
+ The moves library (kb/moves): named creative techniques with recipes,
59
+ ranked by how well they fit the brand's tags
60
+ palate moves show <id> [id...] A move in full · palate moves brief <id,id>: their recipes for a brief
61
+ palate system list | show <id> Browse the design systems
62
+
63
+ The default (triage → one build → the finishing pass → the user points at what's wrong):
64
+ palate plan "<request>" [--route /x] [--mode direct|build|direction|research|quick|full|match]
65
+ Run first: what this deserves, and why (direct: change in place; build:
66
+ one build, the default; direction: 3 ideas first; quick/full: variants;
67
+ match: build the user's own design faithfully)
68
+ palate build "<job>" --route /x [--direction <name>] [--refs a.png,https://…] [--like <project>]
69
+ Build mode: one brief for the real route with the user's rules, references
70
+ and notes, taste and chosen direction; logs its estimated token cost
71
+ palate blueprint "<job>" --route /x The design decided before code (a new page's first build step): a planner
72
+ brief for the spec (mood, category truths and clichés), the system, imagery
73
+ per section and one archetype per section from kb/sections
74
+ palate blueprint --file <bp.json> Check it (variety, surfaces, material, contrast) and save it with tokens;
75
+ palate build then builds it section by section
76
+ palate match <image|url|figma link> [--route /x] [--width 1440]
77
+ Build from the user's own design: the screenshot, page or Figma frame is the
78
+ spec (Figma needs FIGMA_TOKEN, else export the frame as PNG). Saves it, measures
79
+ it and writes a fidelity brief; palate's taste, blueprint and house look step aside
80
+ palate match --check [--route /x] The build beside the design at its width, a difference image and one judge
81
+ packet (content, geometry, type, assets, spacing, colour, details, motion)
82
+ palate match --answers <dir> [--route /x]
83
+ The verdict: READY, READY WITH SUBSTITUTIONS, NOT READY (with the fixes, two
84
+ repair rounds) or UNVERIFIED; --restore <n> rolls a worse round back
85
+ palate gate <route> The quality floor, judged independently: palate's floor checks, then judge
86
+ packets (a checklist per section, the page beside strong real sites in both
87
+ orders) for fresh subagents
88
+ palate gate <route> --answers <dir> The verdict; below the bar: one repair brief for one section (2 rounds max)
89
+ palate gate <route> --judge api No subagents (Codex, Cursor): palate runs the packets with a model API itself
90
+ (GEMINI_API_KEY / OPENAI_API_KEY / ANTHROPIC_API_KEY; PALATE_JUDGE picks);
91
+ --judge self: the builder answers, and the verdict says it is self-judged
92
+ palate gate <route> --restore <n> Roll the source back to round n's snapshot (a repair made it worse)
93
+ palate gate <route> --duel hero [--answers <dir>]
94
+ Best of two: the page with ?palate-alt=hero shows the blueprint's alternative;
95
+ blind judges in both orders pick, the user only when they split
96
+ palate finish <route> The finishing pass in one process: shoot, states, details and animate
97
+ --check sharing one browser and dev server, one combined report
98
+ palate section <route> <id|name> A section builder's own check: that section at 1440 and 390 and palate's
99
+ floor checks for it, in seconds (no full-page shoot)
100
+ palate sections [--kind pricing] [--tags warm,crafted]
101
+ palate's section archetypes (kb/sections), ranked for the tags
102
+ palate sections show <id> One archetype in full: structure, finish, phone layout, floor checks
103
+ palate imagery "<query>" [--type Photograph] [--artist "<name>"] [--sources met,cleveland,commons] [--count 12]
104
+ Several searches at once: "wedding party | street at dusk | hands" (side by
105
+ side, one shared cache kept a week). Open-licence images for a section: CC0 museum images (The Met, Cleveland), or
106
+ with --sources commons, Wikimedia Commons photos (CC0, public domain, CC BY;
107
+ CC BY needs its credit on the page, which palate writes), on contact sheets of
108
+ 12 with pixel sizes. --type: Photograph, Painting, Print, Drawing, Textile,
109
+ Ceramic, Sculpture, Glass. --artist: one maker's work (a photographer's
110
+ name). Answers are cached for 2 hours in .palate (--refresh skips the cache)
111
+ palate imagery pick <id> [<id>…] [--from <slug>] [--no-trim]
112
+ Download the chosen images into the project with their credits, as web-sized
113
+ JPEGs (longest side 2400 px), a museum mount trimmed (--no-trim keeps it)
114
+ palate imagery treatment <duotone|tone|natural|grain> [--shadow #hex] [--highlight #hex] [--colour #hex]
115
+ The one photo treatment for the page, as CSS in the project
116
+ palate texture <grain|paper|speckle|halftone|linen> [--colour #hex] [--opacity 0.1]
117
+ A material drawn in code, written into the project, with its CSS
118
+ palate bench list [--kind <category>] | new <id> --into <folder> | record <id> --from <gate dir> | report
119
+ The benchmark: 30 fictional briefs judged blind against real sites
120
+ palate direction "<the problem>" [--route /x]
121
+ A job-level ask ("users wait 20s here, what should they see?"): a brief for
122
+ 3 ideas with rough wireframes, no builds
123
+ palate research "<job>" [--route /] [--urls a,b,c] [--inspire d,e] [--index-only] [--keep 5]
124
+ A new screen (the triage's research mode): understands the job, prints the
125
+ searches for competitors; with --urls looks at those pages and palate's own
126
+ picks live (robots.txt respected, ≤12 pages), ranks them by craft, taste and
127
+ diversity, and writes .palate/research/<name>/ (research.md, contact sheet)
128
+ palate research --name <n> --like R2 --dislike R4
129
+ What the user thought of a reference (palate learns from it)
130
+ palate direction "<job>" --from-research <name>
131
+ 3 art directions from the research: metaphor, one signature moment, brand
132
+ kept or a starter system, section plan, provenance, wireframe
133
+ palate direction --ideas <file> [--auto | --choose user] [--no-open]
134
+ The user picks one idea (and may add a note) in their browser; it feeds
135
+ palate build
136
+ Variants, only when the user asks to explore or for a new kind of screen (sketches → judge → pick → build out):
137
+ palate variants "<job>" --name <n> [--refs a.png,https://…] [--mode m] [--quick] [--count 3] [--per 2] [--full]
138
+ Choose directions, find references, write one brief per direction; the
139
+ count comes from plan unless given. Sketches (first screen + centrepiece)
140
+ unless --full
141
+ palate judge --name <n> [--scores f.json] [--keep 4] [--watch --ready 4]
142
+ Render the variants and drop the weakest (a fresh judge scores the rubric);
143
+ --watch waits until 4 are built
144
+ palate pick --name <n> [--pairs] [--ready 4]
145
+ The user sees the variants side by side, blind, and clicks the best
146
+ (--pairs: answer every A/B pair instead; --ready: open as soon as 4 are built)
147
+ palate build --name <n> After the pick: the brief that builds the winning sketch out in full
148
+ palate forget <project> Drop a project's records from palate's history (a throwaway folder saved as a
149
+ project); --dry-run counts first. Taste is untouched
150
+ palate stats How long recent loops took, stage by stage, tokens per mode (estimated),
151
+ and the triage decisions
152
+ palate polish <route> Final polish on the chosen design (Jakub Krehel + Emil Kowalski skills)
153
+ Commands for specific jobs:
154
+ palate critique <route> A designer's review, section by section: crops, facts, taste and rubric in a
155
+ sheet; the agent writes findings
156
+ palate critique --findings <file> [--no-open]
157
+ The user agrees or disagrees with each finding in the browser (teaches taste)
158
+ palate fix <route> [--verify] A brief from the agreed findings, most severe first (or from shoot's
159
+ measurable problems); --verify re-shoots each finding's section, before | after
160
+ palate vary <route> --section "<name or selector>" [--count 3] [--brief "<what you want>"]
161
+ Fresh variations of one section, each built as a copy of the page; then pick
162
+ palate states <route> [--verify] Every state of the screen, rendered and measured: empty, loading, error,
163
+ long text, 50 items, one item, images failing, 320 wide, 200% zoom with
164
+ the keyboard, forms pressed twice, failing, offline. A contact sheet (a row
165
+ per part, a column per state) and a brief of the missing states;
166
+ --verify renders them again, before | after
167
+ palate details <route> Micro-component pass: avatars, brand marks, inputs, empty states, numbers,
168
+ icons, placeholder text, badges, hover/focus/pressed, favicon and OG image
169
+ palate animate <route> [--check] Motion pass that serves the content, with a frame-strip motion check
170
+ (--check: only the check, to verify; covers reduced motion and no-JS)
171
+ palate ambition <route> The last step of the finishing pass: is it remarkable, not only correct?
172
+ Every section beside the strongest references, measured, with a rubric
173
+ for the agent; picks the weakest section and writes its upgrade brief
174
+ palate ambition <route> --scores <file>
175
+ Your rubric scores: re-picks the weakest section and rewrites the brief
176
+ palate ambition <route> --verify [--moves <id>]
177
+ After the one upgrade: that section before | after with new scores; logs
178
+ the move so palate learns which upgrades this user keeps
179
+ palate point [route] [--url …] Fix things by pointing at them: opens the running app with palate's overlay;
180
+ the user clicks an element and says what should change
181
+ palate point [route] --auto [--agent claude|codex] [--yolo]
182
+ The same, and palate runs your coding agent headless on each pin, one at
183
+ a time (claude -p / codex exec); no chat needed. Claude Code may only read
184
+ and edit files and call palate's crop and done; --yolo skips every
185
+ permission check (warned). --agent-cmd "<cmd>": your own command instead
186
+ palate point next Wait for the next request (element, crop, likely source lines) and take it
187
+ palate point stop The same as the overlay's Done: the agent finishes what's queued, then stops
188
+ palate point crop <id> Re-shoot that element after an edit at the pinned width and the other
189
+ one (phone or desktop, or the width the request names), with a verdict
190
+ for the other width: unchanged, changed or broke
191
+ palate point done <id> "<summary>" [--removed] [--override]
192
+ Mark it done; the user's pin shows before and after at both widths
193
+ (--removed: you removed the element, the after says so). Refuses while
194
+ the other width is broken; --override only when the user accepts it
195
+
196
+ palate refs add <image|url> [--like "…"] [--dislike "…"] [--kind landing]
197
+ Save the user's own references with what they like and dislike about
198
+ them (several notes: separate with ;); the notes become rules
199
+ palate refs mine List the user's saved references and their notes
200
+ palate refs rm <id> Remove a reference and the rules that came only from its notes
201
+ palate mcp Run palate as an MCP server (stdio) for Claude Code, Codex, Cursor
202
+ palate taste [learn | init --from f]
203
+ What palate has learned (rules, hit rate) and the taste profile; learn turns
204
+ patterns in new evidence into proposed rules (for the user's OK), then lists
205
+ the rest for the profile
206
+ palate rule add "<rule>" [--kind landing | --only <Component> | --route /x] [--project <name>]
207
+ A rule in the user's words, active at once (it gets a measured check when
208
+ palate knows one). With no scope given, palate picks one: tied to this
209
+ product (a colour, font, its name, agents, demos) → only in this project;
210
+ a judgement about design → everywhere
211
+ palate rule list [--kind k] | edit <id> ["<rule>"] [--kind k] [--project <name>|all] | rm <id> | learn [--all]
212
+ The user's rules (~/.palate/taste/rules.json): at the top of every brief,
213
+ checked by every shoot, enforced by the judge. Proposed rules are listed apart
214
+ palate rule review [--no-open] The rules palate proposed (from repeated asks, agreed critique findings,
215
+ failures), on a board in the browser: wording, where it applies, keep or discard.
216
+ Nothing palate infers applies anywhere until it is kept
217
+ palate rule ok <id> [--scope <n|id> | --kind team | --only <Component> | --route /x] [--project <name>] [--text "…"]
218
+ Keep a proposed rule (default: its suggested scope). --project <name> keeps a
219
+ rule to one project (its folder's name); it then applies nowhere else
220
+ palate rule no <id> Discard a proposed rule; the same evidence won't propose it again
221
+ palate fail <route> "<why>" [--kind landing] [--shot a.png]
222
+ The user called this screen bad: keeps the screenshot in ~/.palate/failures
223
+ and proposes rules from the why, for the user's OK
224
+ palate catalog sync vibrant Maintainers: refresh the vibrant.design discovery list (polite, one request a second)
225
+ palate catalog index Maintainers: build kb/index/discovery.json (facts and links) that palate ships
226
+ palate catalog stats What's on the shelves
227
+
228
+ --dir <path> project folder (default: current folder)`;
229
+
230
+ const { values: o, positionals } = parseArgs({
231
+ allowPositionals: true,
232
+ options: {
233
+ dir: { type: "string" },
234
+ scope: { type: "string" },
235
+ widths: { type: "string" },
236
+ url: { type: "string" },
237
+ limit: { type: "string" },
238
+ refresh: { type: "boolean" },
239
+ shelf: { type: "string" },
240
+ industry: { type: "string" },
241
+ audience: { type: "string" },
242
+ tone: { type: "string" },
243
+ needs: { type: "string" },
244
+ theme: { type: "string" },
245
+ count: { type: "string" },
246
+ compare: { type: "string" },
247
+ "no-keep-brand": { type: "boolean" },
248
+ "type-from": { type: "string" },
249
+ moves: { type: "string" },
250
+ name: { type: "string" },
251
+ scores: { type: "string" },
252
+ keep: { type: "string" },
253
+ per: { type: "string" },
254
+ from: { type: "string" },
255
+ "no-open": { type: "boolean" },
256
+ "no-trim": { type: "boolean" },
257
+ artist: { type: "string" },
258
+ quick: { type: "boolean" },
259
+ refs: { type: "string" },
260
+ note: { type: "string" },
261
+ pairs: { type: "boolean" },
262
+ findings: { type: "string" },
263
+ section: { type: "string" },
264
+ brief: { type: "string" },
265
+ verify: { type: "boolean" },
266
+ check: { type: "boolean" },
267
+ mode: { type: "string" },
268
+ full: { type: "boolean" },
269
+ route: { type: "string" },
270
+ only: { type: "string" },
271
+ text: { type: "string" },
272
+ ready: { type: "string" },
273
+ watch: { type: "boolean" },
274
+ fold: { type: "boolean" },
275
+ "dry-run": { type: "boolean" },
276
+ tablet: { type: "boolean" },
277
+ kind: { type: "string" },
278
+ // palate moves
279
+ tags: { type: "string" },
280
+ signature: { type: "boolean" },
281
+ shot: { type: "string" },
282
+ project: { type: "string" },
283
+ all: { type: "boolean" },
284
+ // palate guard / waive / icons
285
+ mono: { type: "boolean" },
286
+ hook: { type: "boolean" },
287
+ commit: { type: "boolean" },
288
+ // palate section
289
+ early: { type: "boolean" },
290
+ verdict: { type: "boolean" },
291
+ install: { type: "boolean" },
292
+ uninstall: { type: "boolean" },
293
+ global: { type: "boolean" },
294
+ reason: { type: "string" },
295
+ remove: { type: "string" },
296
+ source: { type: "string" },
297
+ like: { type: "string", multiple: true },
298
+ dislike: { type: "string", multiple: true },
299
+ direction: { type: "string" },
300
+ ideas: { type: "string" },
301
+ auto: { type: "boolean" },
302
+ agent: { type: "string" },
303
+ "agent-cmd": { type: "string" },
304
+ yolo: { type: "boolean" },
305
+ removed: { type: "boolean" },
306
+ override: { type: "boolean" },
307
+ status: { type: "boolean" },
308
+ // palate research
309
+ urls: { type: "string" },
310
+ inspire: { type: "string" },
311
+ "index-only": { type: "boolean" },
312
+ "from-research": { type: "string" },
313
+ choose: { type: "string" },
314
+ // quality floor: blueprint, gate, imagery, bench
315
+ file: { type: "string" },
316
+ answers: { type: "string" },
317
+ duel: { type: "string" },
318
+ judge: { type: "string" },
319
+ dirs: { type: "string" },
320
+ shadow: { type: "string" },
321
+ highlight: { type: "string" },
322
+ restore: { type: "string" },
323
+ sources: { type: "string" },
324
+ type: { type: "string" },
325
+ out: { type: "string" },
326
+ colour: { type: "string" },
327
+ opacity: { type: "string" },
328
+ seed: { type: "string" },
329
+ into: { type: "string" },
330
+ minutes: { type: "string" },
331
+ release: { type: "string" },
332
+ width: { type: "string" },
333
+ version: { type: "boolean", short: "v" },
334
+ help: { type: "boolean", short: "h" },
335
+ },
336
+ });
337
+ const dir = path.resolve(o.dir ?? process.cwd());
338
+ let [cmd, ...args] = positionals;
339
+
340
+ // Invite-only: everything but these and the free commands (auth.FREE_COMMANDS) needs activation (palate mcp starts,
341
+ // and its paid tools say so instead).
342
+ const OPEN = new Set([undefined, "activate", "deactivate", "help", "version", "mcp"]);
343
+
344
+ try {
345
+ if (o.help) cmd = "help";
346
+ if (o.version && !cmd) cmd = "version";
347
+ const { FREE_COMMANDS } = await import("../src/auth.mjs");
348
+ if (!OPEN.has(cmd) && !FREE_COMMANDS.has(cmd)) {
349
+ const { ensureGate, maybeRecheck } = await import("../src/auth.mjs");
350
+ const g = await ensureGate();
351
+ if (!g.ok) {
352
+ console.error(g.message);
353
+ process.exitCode = 1;
354
+ cmd = "blocked";
355
+ } else {
356
+ if (g.note) console.error(g.note);
357
+ maybeRecheck();
358
+ }
359
+ }
360
+ switch (cmd) {
361
+ case "blocked":
362
+ break;
363
+ case "activate": {
364
+ const A = await import("../src/auth.mjs");
365
+ if (o.status || args[0] === "status") console.log(A.status());
366
+ else if (!args[0]) throw new Error("Usage: palate activate <your code> (codes look like palate-XXXX-XXXX-XXXX) · palate activate --status");
367
+ else console.log(await A.activate(args[0]));
368
+ break;
369
+ }
370
+ case "deactivate":
371
+ console.log((await import("../src/auth.mjs")).deactivate());
372
+ break;
373
+ case "version":
374
+ console.log(JSON.parse(fs.readFileSync(new URL("../package.json", import.meta.url), "utf8")).version);
375
+ break;
376
+ case "help":
377
+ console.log(HELP);
378
+ break;
379
+ case "context":
380
+ console.log(context(dir));
381
+ break;
382
+ case "search": {
383
+ const results = search(args.join(" "), { scope: o.scope });
384
+ console.log(results.length ? results.map(card).join("\n\n") + "\n\nRead the ones that fit with: palate show <id>" : "No matches. Try other words, or palate list.");
385
+ break;
386
+ }
387
+ case "show":
388
+ console.log(show(args).join("\n\n---\n\n"));
389
+ break;
390
+ case "list":
391
+ console.log(list().join("\n"));
392
+ break;
393
+ case "shoot": {
394
+ if (!args[0]) throw new Error("Usage: palate shoot <route>, e.g. palate shoot /team");
395
+ const widths = o.widths ? o.widths.split(",").map(Number) : undefined;
396
+ const { report, gate } = await shoot(dir, args[0], { widths, tablet: Boolean(o.tablet), url: o.url, compare: o.compare, fold: Boolean(o.fold), like: (o.like ?? []).flatMap((x) => x.split(",")) });
397
+ console.log(report);
398
+ // The similarity gate fails the command, like a failing test.
399
+ if (gate && !gate.pass) process.exitCode = 1;
400
+ break;
401
+ }
402
+ // ── palate ambition: the remarkable-not-only-correct pass (src/loop/ambition.mjs) ──
403
+ case "ambition": {
404
+ if (!args[0]) throw new Error("Usage: palate ambition <route> [--scores <file>] [--verify [--moves <id>]]");
405
+ const { ambition } = await import("../src/loop/ambition.mjs");
406
+ console.log(await ambition(dir, args[0], { url: o.url, scores: o.scores, verify: Boolean(o.verify), moves: o.moves ? o.moves.split(",").map((x) => x.trim()).filter(Boolean) : undefined }));
407
+ break;
408
+ }
409
+ // ── end palate ambition ──
410
+ case "check":
411
+ console.log(check(dir));
412
+ break;
413
+ case "copy": {
414
+ const { lintFiles, copyReport } = await import("../src/copy.mjs");
415
+ const { changedFiles } = await import("../src/guard.mjs");
416
+ const { execFileSync } = await import("node:child_process");
417
+ const files = args.length ? args : o.all ? execFileSync("git", ["ls-files", "--cached", "--others", "--exclude-standard"], { cwd: dir, encoding: "utf8" }).split("\n").filter(Boolean) : (changedFiles(dir) ?? []);
418
+ const r = lintFiles(dir, files);
419
+ console.log(copyReport(r, { files: files.length }));
420
+ if (r.findings.some((f) => f.weight === "stop" || f.over)) process.exitCode = 1;
421
+ break;
422
+ }
423
+ case "guard": {
424
+ const G = await import("../src/guard.mjs");
425
+ if (o.hook) {
426
+ // Claude Code's Stop hook: its payload on stdin, the decision as JSON on stdout. Never fails the agent's stop
427
+ // on palate's own error: an exception allows the stop and says why on stderr.
428
+ let input = {};
429
+ try {
430
+ const raw = fs.readFileSync(0, "utf8");
431
+ input = raw.trim() ? JSON.parse(raw) : {};
432
+ } catch {}
433
+ const A = await import("../src/guard-agents.mjs");
434
+ const agent = (o.agent ?? "claude").toLowerCase();
435
+ try {
436
+ const norm = { ...A.parseInput(agent, input), agent };
437
+ const d = G.decide(norm, { dir: o.dir ?? norm.cwd });
438
+ const out = A.formatOutput(agent, d);
439
+ if (out) console.log(out);
440
+ } catch (e) {
441
+ console.error(`palate guard couldn't run (${e.message}); the stop goes ahead.`);
442
+ if (agent === "cursor") console.log("{}");
443
+ }
444
+ break;
445
+ }
446
+ if (o.commit) {
447
+ // The git pre-commit hook: the report on stderr, exit 1 while something is open.
448
+ const r = G.commitCheck(dir);
449
+ if (r.text) console.error(r.text);
450
+ if (!r.ok) process.exitCode = 1;
451
+ break;
452
+ }
453
+ if (o.install || o.uninstall) {
454
+ const agents = o.agent ? o.agent.split(",").map((a) => a.trim()).filter(Boolean) : undefined;
455
+ console.log(G.install(dir, { agents, global: o.global, remove: o.uninstall }));
456
+ break;
457
+ }
458
+ console.log(G.report(dir));
459
+ break;
460
+ }
461
+ case "waive": {
462
+ const G = await import("../src/guard.mjs");
463
+ if (o.remove) console.log(G.removeWaiver(dir, o.remove, o.file));
464
+ else if (!args[0]) {
465
+ const w = G.readWaivers(dir);
466
+ console.log(w.length ? w.map((x) => `${x.id}${x.file ? ` · ${x.file}` : ""} · ${x.reason} (${x.by}, ${x.at.slice(0, 10)})`).join("\n") : "No waivers in this project.");
467
+ } else {
468
+ const r = G.addWaiver(dir, { id: args[0], file: o.file, reason: o.reason, by: "user" });
469
+ console.log(r.message);
470
+ if (!r.ok) process.exitCode = 1;
471
+ }
472
+ break;
473
+ }
474
+ case "refs": {
475
+ const { refsReport, addNote } = await import("../src/refs.mjs");
476
+ if (args[0] === "add" || args[0] === "mine" || args[0] === "rm") {
477
+ const { addRefs, listRefs, refsAddText, removeRef } = await import("../src/loop/myrefs.mjs");
478
+ if (args[0] === "add") {
479
+ if (!args[1]) throw new Error('Usage: palate refs add <image or url> [...] [--like "what you like about it"] [--dislike "what you don\'t"] [--kind landing]');
480
+ const added = await addRefs(args.slice(1), { note: o.note ?? "", like: o.like, dislike: o.dislike, kinds: o.kind ? o.kind.split(",") : undefined });
481
+ console.log(refsAddText(added));
482
+ } else if (args[0] === "rm") {
483
+ if (!args[1]) throw new Error("Usage: palate refs rm <id>");
484
+ const { ref, rules } = removeRef(args[1]);
485
+ console.log(`Removed ${ref.source} (${ref.id})${rules.length ? ` and its rules: ${rules.map((r) => `${r.id} ${r.rule}`).join("; ")}` : ""}`);
486
+ } else {
487
+ const mine = listRefs();
488
+ console.log(mine.length ? mine.map((r) => `${r.id} ${r.source}${r.likes?.length ? ` · likes: ${r.likes.join("; ")}` : ""}${r.dislikes?.length ? ` · dislikes: ${r.dislikes.join("; ")}` : ""}${r.note ? ` · ${r.note}` : ""}${r.rules?.length ? ` · rules ${r.rules.join(", ")}` : ""}`).join("\n") : "No references yet. Add some: palate refs add <image or url> --like \"…\" --dislike \"…\"");
489
+ }
490
+ break;
491
+ }
492
+ if (args[0] === "note") {
493
+ if (!args[1] || !args[2]) throw new Error('Usage: palate refs note <id> "what worked"');
494
+ console.log(`Saved note ${addNote(args[1], args.slice(2).join(" "))} for ${args[1]}`);
495
+ break;
496
+ }
497
+ const query = { shelf: o.shelf, industry: o.industry, audience: o.audience, tone: o.tone, needs: o.needs, theme: o.theme, words: args.join(" ") };
498
+ console.log(await refsReport(query, { dir, count: o.count ? Number(o.count) : 3 }));
499
+ break;
500
+ }
501
+ case "capture": {
502
+ if (!args[0]) throw new Error("Usage: palate capture <url> [--widths 1440,390]");
503
+ const { capture, captureReport } = await import("../src/capture.mjs");
504
+ const widths = o.widths ? o.widths.split(",").map(Number) : [1440];
505
+ console.log(captureReport(await capture(args[0], { widths })));
506
+ break;
507
+ }
508
+ case "system": {
509
+ const [sub, ...rest] = args;
510
+ if (sub === "pick") {
511
+ const { pickReport } = await import("../src/systems/pick.mjs");
512
+ if (!rest.length) throw new Error('Usage: palate system pick "<what you are building, in the user\'s words>"');
513
+ console.log(pickReport(rest.join(" "), { dir }));
514
+ } else if (sub === "apply") {
515
+ const { applySystem } = await import("../src/systems/apply.mjs");
516
+ if (!rest[0]) throw new Error("Usage: palate system apply <id> [--no-keep-brand]");
517
+ console.log(applySystem(rest[0], dir, { keepBrand: !o["no-keep-brand"], typeFrom: o["type-from"] }));
518
+ } else if (sub === "list") {
519
+ const { loadSystems } = await import("../src/systems/load.mjs");
520
+ for (const s of loadSystems()) console.log(`${s.id.padEnd(16)} ${s.facets.theme.padEnd(5)} ${s.facets.accent.padEnd(9)} ${s.facets.radius.padEnd(6)} ${s.facets.elevation.padEnd(8)} ${s.name}`);
521
+ } else if (sub === "show") {
522
+ const { loadSystems } = await import("../src/systems/load.mjs");
523
+ const s = loadSystems().find((x) => x.id === rest[0]);
524
+ if (!s) throw new Error(`No design system "${rest[0]}"`);
525
+ console.log(fs.readFileSync(s.file, "utf8"));
526
+ } else {
527
+ throw new Error("Usage: palate system pick <request> | apply <id> | list | show <id>");
528
+ }
529
+ break;
530
+ }
531
+ case "mcp": {
532
+ // The server keeps the process alive on stdin; nothing else to do here.
533
+ await import("../src/mcp/server.mjs");
534
+ break;
535
+ }
536
+ case "plan": {
537
+ if (!args.length) throw new Error('Usage: palate plan "<the request, in the user\'s words>" [--route /x] [--mode direct|build|direction|quick|full]');
538
+ const { plan, planText } = await import("../src/loop/plan.mjs");
539
+ console.log(planText(plan(dir, args.join(" "), { route: o.route, mode: o.mode, name: o.name }), { name: o.name }));
540
+ break;
541
+ }
542
+ case "variants": {
543
+ const { variants } = await import("../src/loop/variants.mjs");
544
+ console.log(await variants(dir, args.join(" "), { name: o.name, count: o.count ? Number(o.count) : undefined, per: o.per ? Number(o.per) : undefined, quick: Boolean(o.quick), refs: o.refs ? o.refs.split(",") : [], mode: o.mode, full: Boolean(o.full), route: o.route }));
545
+ break;
546
+ }
547
+ case "judge": {
548
+ if (!o.name) throw new Error("Usage: palate judge --name <loop> [--scores file.json] [--keep 4] [--watch --ready 4]");
549
+ const { judge } = await import("../src/loop/judge.mjs");
550
+ console.log(await judge(dir, o.name, { scores: o.scores, keep: o.keep ? Number(o.keep) : 4, url: o.url, watch: Boolean(o.watch), ready: o.ready ? Number(o.ready) : undefined }));
551
+ break;
552
+ }
553
+ case "pick": {
554
+ if (!o.name) throw new Error("Usage: palate pick --name <loop> [--ready 4]");
555
+ const { pick } = await import("../src/loop/pick.mjs");
556
+ console.log(await pick(dir, o.name, { routes: args.length ? args : undefined, url: o.url, open: !o["no-open"], pairsMode: Boolean(o.pairs), ready: o.ready ? Number(o.ready) : undefined }));
557
+ break;
558
+ }
559
+ case "build": {
560
+ if (!o.name && !args[0]) throw new Error('Usage: palate build "<the job>" --route /x (build mode) · palate build --name <loop> (after a variants pick)');
561
+ const { build, buildBrief } = await import("../src/loop/build.mjs");
562
+ // A job in words is build mode; a lone route or --name alone builds out a variants winner.
563
+ const winner = (args.length === 1 && /^\/\S*$/.test(args[0])) || (!args.length && o.name);
564
+ console.log(winner ? build(dir, { name: o.name, route: args[0] }) : await buildBrief(dir, args.join(" "), { route: o.route, name: o.name, direction: o.direction, refs: o.refs ? o.refs.split(",") : [], like: (o.like ?? []).flatMap((x) => x.split(",")), url: o.url, duel: Boolean(o.duel) }));
565
+ break;
566
+ }
567
+ case "blueprint": {
568
+ const B = await import("../src/loop/blueprint.mjs");
569
+ if (o.file) console.log(B.saveBlueprint(dir, o.file, { name: o.name }));
570
+ else console.log(await B.blueprintBrief(dir, args.join(" "), { route: o.route, name: o.name, direction: o.direction, url: o.url }));
571
+ break;
572
+ }
573
+ case "gate": {
574
+ if (!args[0]) throw new Error("Usage: palate gate <route> [--answers <dir|files>] [--restore <round>]");
575
+ const { gate, duel } = await import("../src/loop/gate.mjs");
576
+ if (o.duel) {
577
+ console.log(await duel(dir, args[0], { section: o.duel, url: o.url, answers: o.answers }));
578
+ break;
579
+ }
580
+ const res = await gate(dir, args[0], { url: o.url, answers: o.answers ? o.answers.split(",") : undefined, restore: o.restore, job: o.text, judge: o.judge });
581
+ console.log(res);
582
+ if (/below the bar/.test(res)) process.exitCode = 1;
583
+ break;
584
+ }
585
+ case "match": {
586
+ const { match } = await import("../src/loop/match.mjs");
587
+ const res = await match(dir, args[0], { route: o.route ?? "/", width: o.width ? Number(o.width) : undefined, check: Boolean(o.check), answers: o.answers, restore: o.restore, url: o.url });
588
+ console.log(res.text);
589
+ if (res.stopped || res.notReady) process.exitCode = 1;
590
+ break;
591
+ }
592
+ case "section": {
593
+ if (!args[0] || !args[1]) throw new Error("Usage: palate section <route> <section id, name or selector> [--early | --verdict]");
594
+ const { sectionCheck, sectionVerdict } = await import("../src/loop/gate.mjs");
595
+ if (o.verdict) console.log(sectionVerdict(dir, args[0], args.slice(1).join(" ")));
596
+ else console.log(await sectionCheck(dir, args[0], args.slice(1).join(" "), { url: o.url, judge: Boolean(o.early) }));
597
+ break;
598
+ }
599
+ case "sections": {
600
+ const S = await import("../src/sections.mjs");
601
+ if (args[0] === "show") {
602
+ for (const id of args.slice(1)) console.log(S.sectionBrief(id));
603
+ break;
604
+ }
605
+ const tags = o.tags ? o.tags.split(",").map((x) => x.trim()) : [];
606
+ const list = o.kind ? S.matchSections({ kind: o.kind, tags, limit: o.limit ? Number(o.limit) : 12 }) : S.loadSections();
607
+ for (const s of list) console.log(`${s.id.padEnd(40)} ${s.kind.padEnd(11)} ${String(s.shape).padEnd(18)} ${s.layout}`);
608
+ break;
609
+ }
610
+ case "imagery": {
611
+ const I = await import("../src/loop/imagery.mjs");
612
+ const sources = o.sources ? o.sources.split(",") : undefined;
613
+ if (args[0] === "treatment") {
614
+ // The one treatment every photo on the page shares, as a CSS file in the project (import it once).
615
+ const name = args[1] ?? "duotone";
616
+ const css = I.treatmentCss(name, { shadow: o.shadow, highlight: o.highlight, colour: o.colour, opacity: o.opacity ? Number(o.opacity) : undefined });
617
+ const into = fs.existsSync(path.join(dir, "src")) ? path.join(dir, "src", "palate-photo.css") : path.join(dir, "palate-photo.css");
618
+ fs.writeFileSync(into, `/* palate imagery treatment ${name}: one treatment for every photo on the page. Wrap photos in .palate-photo. */\n${css}\n`);
619
+ console.log(`Wrote ${into.replace(/\\/g, "/")}. Import it once (e.g. @import "./palate-photo.css"; in your main CSS) and wrap each photo in <div class="palate-photo">.`);
620
+ } else if (args[0] === "pick") console.log(await I.pickImages(dir, args.slice(1), { slug: o.from, out: o.out, trim: !o["no-trim"] }));
621
+ else if (/\||\n/.test(args.join(" "))) console.log(await I.imageryMany(dir, args.join(" "), { count: o.count ? Number(o.count) : undefined, sources, type: o.type, refresh: Boolean(o.refresh) }));
622
+ else console.log(await I.imagery(dir, args.join(" "), { count: o.count ? Number(o.count) : undefined, sources, type: o.type, artist: o.artist, refresh: Boolean(o.refresh) }));
623
+ break;
624
+ }
625
+ case "icons": {
626
+ const { icons } = await import("../src/loop/icons.mjs");
627
+ console.log(await icons(dir, args, { mono: o.mono, out: o.out }));
628
+ break;
629
+ }
630
+ case "texture": {
631
+ if (!args[0]) throw new Error("Usage: palate texture <grain|paper|speckle|halftone|linen> [--colour #hex] [--opacity 0.1]");
632
+ const I = await import("../src/loop/imagery.mjs");
633
+ console.log(I.writeTexture(dir, args[0], { colour: o.colour, opacity: o.opacity ? Number(o.opacity) : undefined, seed: o.seed }));
634
+ break;
635
+ }
636
+ case "bench": {
637
+ const Bn = await import("../src/loop/bench.mjs");
638
+ const [sub = "list", id] = args;
639
+ if (sub === "list") for (const b of Bn.listBriefs({ category: o.kind })) console.log(`${b.id.padEnd(24)} ${b.category.padEnd(18)} ${b.job}`);
640
+ else if (sub === "new") {
641
+ if (!id || !o.into) throw new Error("Usage: palate bench new <id> --into <folder>");
642
+ console.log(Bn.scaffold(id, path.resolve(o.into)));
643
+ } else if (sub === "record") {
644
+ if (!id) throw new Error("Usage: palate bench record <id> [--from <gate round dir>] [--minutes n] [--note text]");
645
+ const { benchResultFrom } = await import("../src/loop/gate.mjs");
646
+ const row = Bn.recordResult(id, { ...benchResultFrom(dir, { from: o.from }), minutes: o.minutes ? Number(o.minutes) : undefined, notes: o.note });
647
+ console.log(JSON.stringify(row, null, 1));
648
+ } else if (sub === "report") console.log(Bn.benchReport({ release: o.release }));
649
+ else if (sub === "pick") {
650
+ const { benchPick } = await import("../src/loop/benchpick.mjs");
651
+ console.log(await benchPick({ dirs: o.dirs ? o.dirs.split(",") : [], open: !o["no-open"] }));
652
+ }
653
+ else throw new Error("Usage: palate bench list | new <id> --into <folder> | record <id> | report");
654
+ break;
655
+ }
656
+ case "direction": {
657
+ const D = await import("../src/loop/direction.mjs");
658
+ // --auto: the user said "just build it" (palate picks from taste); --choose user: always the picker.
659
+ if (o.ideas) console.log(await D.pickDirection(dir, { file: o.ideas, name: o.name, open: !o["no-open"], choose: o.auto ? "auto" : o.choose }));
660
+ else console.log(D.direction(dir, args.join(" "), { route: o.route, name: o.name, fromResearch: o["from-research"] }));
661
+ break;
662
+ }
663
+ // ── palate research: competitors and craft, looked at live, before ideation (src/loop/research.mjs) ──
664
+ case "research": {
665
+ const R = await import("../src/loop/research.mjs");
666
+ if (o.like?.length || o.dislike?.length) {
667
+ const v = [...(o.like ?? []).flatMap((x) => x.split(",")).map((id) => ({ id: id.trim(), verdict: "like" })), ...(o.dislike ?? []).flatMap((x) => x.split(",")).map((id) => ({ id: id.trim(), verdict: "dislike" }))];
668
+ const saved = R.recordVerdicts(dir, o.name, v);
669
+ console.log(saved.length ? `Noted: ${saved.map((s) => `${s.verdict} ${s.ref} ${s.name}`).join(", ")}. palate ranks with it next time; the same trait twice becomes a proposed rule at palate taste learn.` : "No matching references (use their ids, R1, R2 …).");
670
+ break;
671
+ }
672
+ const list = (s) => (s == null ? null : s === "none" || s === "" ? [] : s.split(",").map((x) => x.trim()).filter(Boolean));
673
+ const res = await R.research(dir, args.join(" "), { route: o.route, name: o.name, urls: list(o.urls) ?? (o.inspire || o["index-only"] ? [] : null), inspire: list(o.inspire) ?? [], keep: o.keep ? Number(o.keep) : undefined });
674
+ console.log(res.text);
675
+ break;
676
+ }
677
+ // ── end palate research ──
678
+ case "forget": {
679
+ const { forget } = await import("../src/loop/forget.mjs");
680
+ console.log(forget(args[0], { dryRun: Boolean(o["dry-run"]) }));
681
+ break;
682
+ }
683
+ case "stats": {
684
+ const { stats } = await import("../src/loop/stats.mjs");
685
+ console.log(stats(dir, { limit: o.limit ? Number(o.limit) : 10 }));
686
+ break;
687
+ }
688
+ case "polish": {
689
+ if (!args[0]) throw new Error("Usage: palate polish <route>");
690
+ const { polish } = await import("../src/loop/polish.mjs");
691
+ console.log(await polish(dir, args[0], { url: o.url }));
692
+ break;
693
+ }
694
+ case "critique": {
695
+ const { critique, reviewFindings } = await import("../src/loop/critique.mjs");
696
+ if (o.findings) {
697
+ console.log(await reviewFindings(dir, o.findings, { open: !o["no-open"] }));
698
+ break;
699
+ }
700
+ if (!args[0]) throw new Error("Usage: palate critique <route> [--url …] · palate critique --findings <file>");
701
+ console.log((await critique(dir, args[0], { url: o.url })).sheet);
702
+ break;
703
+ }
704
+ case "fix": {
705
+ if (!args[0]) throw new Error("Usage: palate fix <route> [--verify]");
706
+ const { fix } = await import("../src/loop/fix.mjs");
707
+ console.log(await fix(dir, args[0], { url: o.url, verify: Boolean(o.verify) }));
708
+ break;
709
+ }
710
+ case "vary": {
711
+ if (!args[0] || !o.section) throw new Error('Usage: palate vary <route> --section "<name or selector>" [--count 3] [--brief "<what you want>"]');
712
+ const { vary } = await import("../src/loop/vary.mjs");
713
+ console.log(await vary(dir, args[0], { section: o.section, count: o.count ? Number(o.count) : 3, url: o.url, brief: o.brief }));
714
+ break;
715
+ }
716
+ case "details": {
717
+ if (!args[0]) throw new Error("Usage: palate details <route>");
718
+ const { details } = await import("../src/loop/details.mjs");
719
+ console.log(await details(dir, args[0], { url: o.url }));
720
+ break;
721
+ }
722
+ case "states": {
723
+ if (!args[0]) throw new Error("Usage: palate states <route> [--url …] [--verify]");
724
+ const { states } = await import("../src/loop/states.mjs");
725
+ console.log((await states(dir, args[0], { url: o.url, verify: Boolean(o.verify) })).text);
726
+ break;
727
+ }
728
+ // ── palate finish: the finishing pass in one process (one browser, one dev server, kept warm between steps) ──
729
+ case "finish": {
730
+ if (!args[0]) throw new Error("Usage: palate finish <route> [--url …]");
731
+ const route = args[0];
732
+ const t0 = Date.now();
733
+ const step = async (name, fn) => {
734
+ const t = Date.now();
735
+ try {
736
+ const out = await fn();
737
+ return { name, out: typeof out === "string" ? out : out?.text ?? out?.report ?? "", ms: Date.now() - t };
738
+ } catch (e) {
739
+ return { name, out: `${name} failed: ${e.message}`, ms: Date.now() - t, failed: true };
740
+ }
741
+ };
742
+ const { states } = await import("../src/loop/states.mjs");
743
+ const { details } = await import("../src/loop/details.mjs");
744
+ const { animate } = await import("../src/loop/animate.mjs");
745
+ const parts = [];
746
+ parts.push(await step("shoot", async () => (await shoot(dir, route, { url: o.url })).report));
747
+ // The three read the page without changing it: run them side by side on the shared browser and server.
748
+ parts.push(...(await Promise.all([step("states", () => states(dir, route, { url: o.url })), step("details", () => details(dir, route, { url: o.url })), step("animate", () => animate(dir, route, { url: o.url, checkOnly: true }))])));
749
+ const { matchedRoute } = await import("../src/loop/matched.mjs");
750
+ const userDesign = matchedRoute(dir, route);
751
+ console.log(
752
+ [
753
+ ...(userDesign ? [`${route} is built from the user's own design (palate match): fix only what breaks (missing states, contrast, clipping, the phone layout) and never restyle what the design shows. Its gate is palate match --check --route ${route}, not palate gate.`, ""] : []),
754
+ `# Finishing pass ${route}: ${parts.map((p) => `${p.name} ${(p.ms / 1000).toFixed(0)}s`).join(" · ")} · ${((Date.now() - t0) / 1000).toFixed(0)}s in all`,
755
+ "",
756
+ "Fix what each part names (the states and details briefs list their files), in that order, then palate states --verify and palate gate.",
757
+ "",
758
+ ...parts.flatMap((p) => [`## ${p.name}`, p.out.trim(), ""]),
759
+ ].join("\n"),
760
+ );
761
+ break;
762
+ }
763
+ case "animate": {
764
+ if (!args[0]) throw new Error("Usage: palate animate <route> [--check]");
765
+ const { animate } = await import("../src/loop/animate.mjs");
766
+ console.log(await animate(dir, args[0], { url: o.url, checkOnly: Boolean(o.check) }));
767
+ break;
768
+ }
769
+ case "point": {
770
+ const P = await import("../src/point/server.mjs");
771
+ const [sub, ...rest] = args;
772
+ if (sub === "next") {
773
+ console.error("Waiting for the user to point at something…");
774
+ let r = null;
775
+ while (!r) r = await P.nextRequest(dir, { wait: 55, agent: "cli" });
776
+ console.log(r.stopped ? "The user stopped point mode (Done in the overlay). Stop waiting for pins." : P.formatRequest(r, dir));
777
+ } else if (sub === "stop") {
778
+ await P.stopPointMode(dir);
779
+ console.log("Point mode stopped: the agent finishes the pins already sent, then its next call says so.");
780
+ } else if (sub === "done") {
781
+ if (!rest[0]) throw new Error('Usage: palate point done <id> "<one-line summary>" [--removed] [--override]');
782
+ const r = await P.doneRequest(dir, rest[0], rest.slice(1).join(" "), { removed: Boolean(o.removed), override: Boolean(o.override) });
783
+ const ow = r.other?.width ? r.other : null;
784
+ console.log(`Pin ${r.n} is done.${r.removed ? " Removed: the pin shows that instead of an after crop." : r.after ? ` Before: ${r.crop} After: ${r.after}` : " (no after crop: the element could not be shot)"}${ow ? `\nAt ${ow.width}: ${ow.after?.removed ? "removed" : `before ${ow.before?.crop ?? "(none)"} after ${ow.after?.crop ?? "(none)"}`}\n${ow.note ?? ""}${ow.overridden ? " Done anyway (--override)." : ""}` : ""}`);
785
+ } else if (sub === "crop") {
786
+ if (!rest[0]) throw new Error("Usage: palate point crop <id>");
787
+ const c = await P.cropRequest(dir, rest[0]);
788
+ const ow = c.other;
789
+ console.log(`${c.removed ? "Removed: the element is gone (as asked)." : `Now: ${c.file}${c.found === false ? " (selector not found; the region where it was)" : ""}`}${c.trail ? `
790
+ Opened by: ${c.trail}${c.reopen?.state === "couldn't reopen" ? `
791
+ Couldn't reopen it for this check: ${c.reopen.why}. Not a break; check the change in the code.` : " (reopened for the check)"}` : ""}
792
+ Before: ${c.before}${ow ? `\nAt ${ow.width}: now ${ow.after ?? "(none)"} before ${ow.before ?? "(none)"}\n${ow.note}${ow.verdict === "broke" ? `\nFix ${ow.width} before palate point done: it refuses while ${ow.width} is broken.` : ""}` : ""}`);
793
+ } else {
794
+ const s = await P.startPoint(dir, { url: o.url, route: sub ?? "/", open: !o["no-open"] });
795
+ const auto = o.auto || o.agent || o["agent-cmd"] ? await (await import("../src/point/auto.mjs")).runAuto(dir, { agent: o.agent ?? "claude", agentCmd: o["agent-cmd"], yolo: Boolean(o.yolo) }) : null;
796
+ const live = auto && !auto.missing;
797
+ console.log(
798
+ live
799
+ ? `Point at anything in ${s.link} and send it: palate runs the agent on each pin by itself.${s.reused ? " (point was already running; this process only runs the agent)" : ""} (Ctrl+C stops)`
800
+ : s.reused
801
+ ? `palate point is already running: ${s.link}`
802
+ : `Point at anything in ${s.link} to ask for a change. Your agent takes the pins: in Claude Code run /mcp__palate__point${auto?.missing ? "" : ", or start this with --auto"}. (Ctrl+C stops)`,
803
+ );
804
+ if (!s.reused || live) {
805
+ process.on("SIGINT", async () => {
806
+ await auto?.stop();
807
+ await s.stop();
808
+ process.exit(0);
809
+ });
810
+ await (s.reused ? auto.done : s.done);
811
+ }
812
+ }
813
+ break;
814
+ }
815
+ case "taste": {
816
+ const { taste } = await import("../src/loop/taste.mjs");
817
+ console.log(taste(args[0], { from: o.from, dir }));
818
+ break;
819
+ }
820
+ case "rule":
821
+ case "rules": {
822
+ const [sub = "list", ...rest] = args;
823
+ if (sub === "review") {
824
+ const { reviewRules } = await import("../src/loop/rulereview.mjs");
825
+ console.log(await reviewRules({ open: !o["no-open"] }));
826
+ break;
827
+ }
828
+ const { rule } = await import("../src/loop/fail.mjs");
829
+ console.log(rule(sub, o.all ? [...rest, "--all"] : rest, { kind: o.kind, source: o.source, only: o.only, route: o.route, scope: o.scope, text: o.text, project: o.project, dir }));
830
+ break;
831
+ }
832
+ case "fail": {
833
+ if (!args[0] || !args[1]) throw new Error('Usage: palate fail <route> "<why it is bad>" [--kind landing] [--shot a.png,b.png]');
834
+ const { fail } = await import("../src/loop/fail.mjs");
835
+ console.log(await fail(dir, args[0], args.slice(1).join(" "), { kind: o.kind, shots: o.shot != null ? o.shot.split(",").filter(Boolean) : undefined, url: o.url, project: o.project }));
836
+ break;
837
+ }
838
+ // ── palate moves: the moves library (src/moves.mjs) ──
839
+ case "moves": {
840
+ const M = await import("../src/moves.mjs");
841
+ if (args[0] === "show") {
842
+ if (!args[1]) throw new Error("Usage: palate moves show <id> [id...]");
843
+ console.log(args.slice(1).map(M.showMove).join("\n\n---\n\n"));
844
+ } else if (args[0] === "brief") {
845
+ if (!args[1]) throw new Error("Usage: palate moves brief <id,id,...>");
846
+ console.log(M.moveBrief(args.slice(1).join(",")));
847
+ } else {
848
+ const tags = [o.tags, ...args].filter(Boolean).join(",").split(",").map((t) => t.trim()).filter(Boolean);
849
+ const q = { tags, kind: o.kind, signature: o.signature ? true : undefined, limit: o.limit ? Number(o.limit) : tags.length ? 8 : 0 };
850
+ console.log(M.movesReport(M.matchMoves(q), q));
851
+ }
852
+ break;
853
+ }
854
+ // ── end palate moves ──
855
+ case "concept": {
856
+ const { conceptReport, recordConcept } = await import("../src/concept.mjs");
857
+ if (args[0] === "record") {
858
+ if (!args[1] || !o.moves) throw new Error('Usage: palate concept record "<screen>" --moves a,b,c');
859
+ console.log(recordConcept(dir, args.slice(1).join(" "), o.moves.split(",").map((m) => m.trim()).filter(Boolean)));
860
+ break;
861
+ }
862
+ if (!args.length) throw new Error('Usage: palate concept "<what you are building, in the user\'s words>"');
863
+ console.log(conceptReport(args.join(" "), { dir, count: o.count ? Number(o.count) : 3 }));
864
+ break;
865
+ }
866
+ case "catalog": {
867
+ const [sub, source] = args;
868
+ if (sub === "sync" && source === "vibrant") {
869
+ const { syncVibrant } = await import("../src/catalog/vibrant.mjs");
870
+ const { file, count } = await syncVibrant({ limit: o.limit ? Number(o.limit) : Infinity, refresh: Boolean(o.refresh) });
871
+ console.log(`Saved ${count} records to ${file}`);
872
+ } else if (sub === "index") {
873
+ const { buildIndex } = await import("../src/catalog/index-build.mjs");
874
+ const { file, count } = await buildIndex();
875
+ console.log(`Wrote ${count} records (facts and links only) to ${file}`);
876
+ } else if (sub === "stats") {
877
+ const { catalogStats } = await import("../src/refs.mjs");
878
+ console.log(catalogStats());
879
+ } else {
880
+ throw new Error("Usage: palate catalog sync vibrant [--limit n] | palate catalog stats");
881
+ }
882
+ break;
883
+ }
884
+ default:
885
+ console.log(HELP);
886
+ if (cmd) process.exitCode = 1;
887
+ }
888
+ } catch (err) {
889
+ console.error(String(err?.message ?? err));
890
+ process.exitCode = 1;
891
+ } finally {
892
+ // One browser and dev server served the whole command; close them (the MCP server keeps its own).
893
+ if (cmd !== "mcp") await closePool();
894
+ }