@litfamily/litclaude 1.0.10 → 1.0.13

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 (718) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +436 -45
  3. package/README_ko-KR.md +403 -17
  4. package/bin/install-ownership.mjs +155 -18
  5. package/bin/litclaude-ai.js +91 -9
  6. package/docs/ab/S11-baseline-desktop.webp +0 -0
  7. package/docs/ab/S11-baseline-phone.webp +0 -0
  8. package/docs/ab/S11-litclaude-desktop.webp +0 -0
  9. package/docs/ab/S11-litclaude-phone.webp +0 -0
  10. package/docs/ab/S3-baseline-desktop.webp +0 -0
  11. package/docs/ab/S3-baseline-phone.webp +0 -0
  12. package/docs/ab/S3-litclaude-desktop.webp +0 -0
  13. package/docs/ab/S3-litclaude-phone.webp +0 -0
  14. package/docs/ab/S4-baseline-desktop.webp +0 -0
  15. package/docs/ab/S4-baseline-phone.webp +0 -0
  16. package/docs/ab/S4-litclaude-desktop.webp +0 -0
  17. package/docs/ab/S4-litclaude-phone.webp +0 -0
  18. package/docs/ab/S5-baseline-pages.webp +0 -0
  19. package/docs/ab/S5-baseline-slides.webp +0 -0
  20. package/docs/ab/S5-litclaude-pages.webp +0 -0
  21. package/docs/ab/S5-litclaude-slides.webp +0 -0
  22. package/docs/ab/S7-litclaude-diagram.webp +0 -0
  23. package/docs/ab/S8-baseline-slides.webp +0 -0
  24. package/docs/ab/S8-litclaude-slides.webp +0 -0
  25. package/docs/ab/S9-litclaude-pages.webp +0 -0
  26. package/docs/agents.md +10 -7
  27. package/docs/assets/cover-motion-still.webp +0 -0
  28. package/docs/assets/cover-motion.webp +0 -0
  29. package/docs/assets/readme/badge-version.svg +1 -1
  30. package/docs/assets/skills/autoconference.webp +0 -0
  31. package/docs/assets/skills/automatic-checks.webp +0 -0
  32. package/docs/assets/skills/autoresearch.webp +0 -0
  33. package/docs/assets/skills/browser-drive.webp +0 -0
  34. package/docs/assets/skills/debugging.webp +0 -0
  35. package/docs/assets/skills/deep-interview.webp +0 -0
  36. package/docs/assets/skills/frontend-ui-ux.webp +0 -0
  37. package/docs/assets/skills/lit-burnoff-file.webp +0 -0
  38. package/docs/assets/skills/lit-burnoff.webp +0 -0
  39. package/docs/assets/skills/lit-code.webp +0 -0
  40. package/docs/assets/skills/lit-commit.webp +0 -0
  41. package/docs/assets/skills/lit-comprehend.webp +0 -0
  42. package/docs/assets/skills/lit-crucible.webp +0 -0
  43. package/docs/assets/skills/lit-diagram-drawer.webp +0 -0
  44. package/docs/assets/skills/lit-docx.webp +0 -0
  45. package/docs/assets/skills/lit-handoff.webp +0 -0
  46. package/docs/assets/skills/lit-humanizer.webp +0 -0
  47. package/docs/assets/skills/lit-init.webp +0 -0
  48. package/docs/assets/skills/lit-loop.webp +0 -0
  49. package/docs/assets/skills/lit-plan.webp +0 -0
  50. package/docs/assets/skills/lit-pptx.webp +0 -0
  51. package/docs/assets/skills/lit-recap.webp +0 -0
  52. package/docs/assets/skills/lit-scientific-visualization.webp +0 -0
  53. package/docs/assets/skills/lit-team.webp +0 -0
  54. package/docs/assets/skills/lit-typographic-motion.webp +0 -0
  55. package/docs/assets/skills/litgoal.webp +0 -0
  56. package/docs/assets/skills/litresearch.webp +0 -0
  57. package/docs/assets/skills/litwork.webp +0 -0
  58. package/docs/assets/skills/lsp-setup.webp +0 -0
  59. package/docs/assets/skills/readme-studio.webp +0 -0
  60. package/docs/assets/skills/refactor.webp +0 -0
  61. package/docs/assets/skills/review-work.webp +0 -0
  62. package/docs/assets/skills/start-work.webp +0 -0
  63. package/docs/assets/skills/structural-search.webp +0 -0
  64. package/docs/assets/skills/visual-qa.webp +0 -0
  65. package/docs/assets/skills/wikify.webp +0 -0
  66. package/docs/hooks.md +185 -41
  67. package/docs/migration.md +6 -3
  68. package/docs/privacy.md +6 -1
  69. package/package.json +4 -2
  70. package/plugins/litclaude/.claude-plugin/plugin.json +1 -1
  71. package/plugins/litclaude/agents/korean-prose-editor.md +1 -0
  72. package/plugins/litclaude/agents/korean-style-analyzer.md +1 -0
  73. package/plugins/litclaude/agents/meaning-preservation-auditor.md +1 -0
  74. package/plugins/litclaude/agents/native-flow-reviewer.md +1 -0
  75. package/plugins/litclaude/agents/polish-orchestrator.md +1 -0
  76. package/plugins/litclaude/bin/litclaude-hook.js +347 -35
  77. package/plugins/litclaude/bin/litclaude-hud.js +29 -1
  78. package/plugins/litclaude/bin/litclaude-mcp.js +1 -1
  79. package/plugins/litclaude/bundled-rules/lit-humanizer.md +14 -0
  80. package/plugins/litclaude/commands/korean-ai-slop-remover.md +2 -2
  81. package/plugins/litclaude/commands/lit-comprehend.md +11 -11
  82. package/plugins/litclaude/commands/lit-humanizer.md +75 -0
  83. package/plugins/litclaude/commands/lit-korean.md +4 -130
  84. package/plugins/litclaude/commands/litresearch.md +12 -10
  85. package/plugins/litclaude/hooks/hooks.json +1 -1
  86. package/plugins/litclaude/lib/canonical-runtime-commitments.mjs +2 -2
  87. package/plugins/litclaude/lib/canonical-skill-catalog.mjs +5 -1
  88. package/plugins/litclaude/lib/canonical-skill-resources.mjs +618 -13
  89. package/plugins/litclaude/lib/deliverable-hedge-guard.mjs +256 -350
  90. package/plugins/litclaude/lib/hud-accent-palette.mjs +33 -0
  91. package/plugins/litclaude/lib/interface-mode.mjs +33 -0
  92. package/plugins/litclaude/lib/interface-probe-gate.mjs +125 -0
  93. package/plugins/litclaude/lib/jev-skill-hint.mjs +445 -0
  94. package/plugins/litclaude/lib/motion-render-gate.mjs +164 -0
  95. package/plugins/litclaude/lib/mutated-file-paths.mjs +32 -1
  96. package/plugins/litclaude/lib/office-runtime-lock/package-lock.json +745 -0
  97. package/plugins/litclaude/lib/office-runtime-lock/package.json +12 -0
  98. package/plugins/litclaude/lib/office-runtime-lock/requirements.lock +15 -0
  99. package/plugins/litclaude/lib/office-runtime.mjs +255 -0
  100. package/plugins/litclaude/lib/office_data.py +493 -0
  101. package/plugins/litclaude/lib/office_runtime_bootstrap.py +61 -0
  102. package/plugins/litclaude/lib/ooxml_integrity.py +199 -0
  103. package/plugins/litclaude/lib/rename-aliases.mjs +3 -1
  104. package/plugins/litclaude/lib/render_pages.py +105 -0
  105. package/plugins/litclaude/skills/autoconference/SKILL.md +2 -0
  106. package/plugins/litclaude/skills/browser-drive/SKILL.md +19 -6
  107. package/plugins/litclaude/skills/browser-drive/scripts/capability-probe.mjs +44 -8
  108. package/plugins/litclaude/skills/frontend-ui-ux/ATTRIBUTION.md +26 -0
  109. package/plugins/litclaude/skills/frontend-ui-ux/SKILL.md +50 -16
  110. package/plugins/litclaude/skills/frontend-ui-ux/examples/phase-3-readme-ab/README.md +9 -0
  111. package/plugins/litclaude/skills/frontend-ui-ux/references/complete-contract.md +32 -6
  112. package/plugins/litclaude/skills/frontend-ui-ux/references/craft-floor.md +257 -0
  113. package/plugins/litclaude/skills/frontend-ui-ux/references/default-editorial-pixel.json +6 -0
  114. package/plugins/litclaude/skills/frontend-ui-ux/references/interaction-motion.md +34 -88
  115. package/plugins/litclaude/skills/frontend-ui-ux/references/motion-guide.md +130 -0
  116. package/plugins/litclaude/skills/frontend-ui-ux/references/slop-register.md +150 -0
  117. package/plugins/litclaude/skills/frontend-ui-ux/references/visual-reconstruction.md +39 -85
  118. package/plugins/litclaude/skills/frontend-ui-ux/scripts/interface-probe-page.mjs +1534 -0
  119. package/plugins/litclaude/skills/frontend-ui-ux/scripts/interface-probe-rules.mjs +141 -0
  120. package/plugins/litclaude/skills/frontend-ui-ux/scripts/interface-probe-server.mjs +57 -0
  121. package/plugins/litclaude/skills/frontend-ui-ux/scripts/interface-probe-static.mjs +129 -0
  122. package/plugins/litclaude/skills/frontend-ui-ux/scripts/interface-probe.mjs +316 -0
  123. package/plugins/litclaude/skills/lit-comprehend/SKILL.md +34 -43
  124. package/plugins/litclaude/skills/lit-comprehend/references/artifact-template.md +5 -44
  125. package/plugins/litclaude/skills/lit-comprehend/scripts/verify-explainer.mjs +6 -16
  126. package/plugins/litclaude/skills/lit-diagram-drawer/NOTICE +33 -0
  127. package/plugins/litclaude/skills/lit-diagram-drawer/SKILL.md +123 -0
  128. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-architecture-dark.html +1 -0
  129. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-architecture-full.html +1 -0
  130. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-architecture-light.html +1 -0
  131. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bar-dark.html +1 -0
  132. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bar-full.html +1 -0
  133. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bar-light.html +1 -0
  134. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-beeswarm-dark.html +1 -0
  135. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-beeswarm-full.html +1 -0
  136. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-beeswarm-light.html +1 -0
  137. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bubble-dark.html +1 -0
  138. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bubble-full.html +1 -0
  139. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bubble-light.html +1 -0
  140. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bump-dark.html +1 -0
  141. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bump-full.html +1 -0
  142. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-bump-light.html +1 -0
  143. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-data-flow-dark.html +1 -0
  144. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-data-flow-full.html +1 -0
  145. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-data-flow-light.html +1 -0
  146. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-datalake-dark.html +1 -0
  147. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-datalake-full.html +1 -0
  148. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-datalake-light.html +1 -0
  149. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-db-schema-dark.html +1 -0
  150. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-db-schema-full.html +1 -0
  151. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-db-schema-light.html +1 -0
  152. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dependency-dark.html +1 -0
  153. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dependency-full.html +1 -0
  154. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dependency-light.html +1 -0
  155. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-deployment-dark.html +1 -0
  156. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-deployment-full.html +1 -0
  157. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-deployment-light.html +1 -0
  158. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dp-integration-dark.html +1 -0
  159. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dp-integration-full.html +1 -0
  160. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dp-integration-light.html +1 -0
  161. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-dark.html +1 -0
  162. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-full.html +1 -0
  163. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-light.html +1 -0
  164. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-er-dark.html +1 -0
  165. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-er-full.html +1 -0
  166. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-er-light.html +1 -0
  167. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-fishbone-dark.html +1 -0
  168. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-fishbone-full.html +1 -0
  169. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-fishbone-light.html +1 -0
  170. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-flowchart-dark.html +1 -0
  171. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-flowchart-full.html +1 -0
  172. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-flowchart-light.html +1 -0
  173. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-gantt-dark.html +1 -0
  174. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-gantt-full.html +1 -0
  175. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-gantt-light.html +1 -0
  176. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-heatmap-dark.html +1 -0
  177. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-heatmap-full.html +1 -0
  178. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-heatmap-light.html +1 -0
  179. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-high-level-dark.html +1 -0
  180. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-high-level-full.html +1 -0
  181. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-high-level-light.html +1 -0
  182. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-dark.html +1 -0
  183. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-full.html +1 -0
  184. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-light.html +1 -0
  185. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-drawio-dark.html +1 -0
  186. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-drawio-full.html +1 -0
  187. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-drawio-light.html +1 -0
  188. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-dark.html +1 -0
  189. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-full.html +1 -0
  190. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-light.html +1 -0
  191. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-dark.html +1 -0
  192. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-full.html +1 -0
  193. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-light.html +1 -0
  194. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-it-state-dark.html +1 -0
  195. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-it-state-full.html +1 -0
  196. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-it-state-light.html +1 -0
  197. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-journey-dark.html +1 -0
  198. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-journey-full.html +1 -0
  199. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-journey-light.html +1 -0
  200. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-kanban-dark.html +1 -0
  201. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-kanban-full.html +1 -0
  202. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-kanban-light.html +1 -0
  203. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-layers-dark.html +1 -0
  204. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-layers-full.html +1 -0
  205. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-layers-light.html +1 -0
  206. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-line-dark.html +1 -0
  207. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-line-full.html +1 -0
  208. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-line-light.html +1 -0
  209. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-loop-dark.html +1 -0
  210. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-loop-full.html +1 -0
  211. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-loop-light.html +1 -0
  212. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-dark.html +1 -0
  213. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-full.html +1 -0
  214. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-light.html +1 -0
  215. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-marimekko-dark.html +1 -0
  216. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-marimekko-full.html +1 -0
  217. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-marimekko-light.html +1 -0
  218. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-medallion-dark.html +1 -0
  219. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-medallion-full.html +1 -0
  220. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-medallion-light.html +1 -0
  221. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-nested-dark.html +1 -0
  222. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-nested-full.html +1 -0
  223. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-nested-light.html +1 -0
  224. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-org-chart-dark.html +1 -0
  225. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-org-chart-full.html +1 -0
  226. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-org-chart-light.html +1 -0
  227. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-dark.html +1 -0
  228. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-full.html +1 -0
  229. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-light.html +1 -0
  230. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-polar-dark.html +1 -0
  231. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-polar-full.html +1 -0
  232. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-polar-light.html +1 -0
  233. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-dark.html +1 -0
  234. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-full.html +1 -0
  235. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-light.html +1 -0
  236. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-process-dark.html +1 -0
  237. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-process-full.html +1 -0
  238. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-process-light.html +1 -0
  239. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-pyramid-dark.html +1 -0
  240. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-pyramid-full.html +1 -0
  241. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-pyramid-light.html +1 -0
  242. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-dark.html +1 -0
  243. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-full.html +1 -0
  244. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-light.html +1 -0
  245. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-quadrant-dark.html +1 -0
  246. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-quadrant-full.html +1 -0
  247. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-quadrant-light.html +1 -0
  248. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-queue-animated-dark.html +1 -0
  249. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-queue-animated-full.html +1 -0
  250. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-queue-animated-light.html +1 -0
  251. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-radar-dark.html +1 -0
  252. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-radar-full.html +1 -0
  253. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-radar-light.html +1 -0
  254. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-ridgeline-dark.html +1 -0
  255. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-ridgeline-full.html +1 -0
  256. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-ridgeline-light.html +1 -0
  257. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sankey-dark.html +1 -0
  258. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sankey-full.html +1 -0
  259. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sankey-light.html +1 -0
  260. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-scatter-dark.html +1 -0
  261. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-scatter-full.html +1 -0
  262. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-scatter-light.html +1 -0
  263. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sequence-dark.html +1 -0
  264. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sequence-full.html +1 -0
  265. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sequence-light.html +1 -0
  266. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-dark.html +1 -0
  267. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-full.html +1 -0
  268. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-light.html +1 -0
  269. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-slopegraph-dark.html +1 -0
  270. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-slopegraph-full.html +1 -0
  271. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-slopegraph-light.html +1 -0
  272. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-state-dark.html +1 -0
  273. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-state-full.html +1 -0
  274. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-dark.html +1 -0
  275. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-full.html +1 -0
  276. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-light.html +1 -0
  277. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-state-light.html +1 -0
  278. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-story-map-dark.html +1 -0
  279. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-story-map-full.html +1 -0
  280. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-story-map-light.html +1 -0
  281. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-streamgraph-dark.html +1 -0
  282. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-streamgraph-full.html +1 -0
  283. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-streamgraph-light.html +1 -0
  284. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-swimlane-dark.html +1 -0
  285. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-swimlane-full.html +1 -0
  286. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-swimlane-light.html +1 -0
  287. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-timeline-dark.html +1 -0
  288. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-timeline-full.html +1 -0
  289. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-timeline-light.html +1 -0
  290. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-dark.html +1 -0
  291. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-full.html +1 -0
  292. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-light.html +1 -0
  293. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-tree-dark.html +1 -0
  294. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-tree-full.html +1 -0
  295. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-tree-light.html +1 -0
  296. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-treemap-dark.html +1 -0
  297. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-treemap-full.html +1 -0
  298. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-treemap-light.html +1 -0
  299. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-uml-class-dark.html +1 -0
  300. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-uml-class-full.html +1 -0
  301. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-uml-class-light.html +1 -0
  302. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-venn-dark.html +1 -0
  303. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-venn-full.html +1 -0
  304. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-venn-light.html +1 -0
  305. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-wardley-dark.html +1 -0
  306. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-wardley-full.html +1 -0
  307. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-wardley-light.html +1 -0
  308. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-waterfall-dark.html +1 -0
  309. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-waterfall-full.html +1 -0
  310. package/plugins/litclaude/skills/lit-diagram-drawer/assets/examples/type-waterfall-light.html +1 -0
  311. package/plugins/litclaude/skills/lit-diagram-drawer/assets/fonts/OFL.txt +94 -0
  312. package/plugins/litclaude/skills/lit-diagram-drawer/assets/fonts/PretendardVariable.woff2 +0 -0
  313. package/plugins/litclaude/skills/lit-diagram-drawer/assets/fonts/provenance.json +22 -0
  314. package/plugins/litclaude/skills/lit-diagram-drawer/assets/icons.html +231 -0
  315. package/plugins/litclaude/skills/lit-diagram-drawer/assets/index.html +1 -0
  316. package/plugins/litclaude/skills/lit-diagram-drawer/assets/licenses/devicon-MIT.txt +20 -0
  317. package/plugins/litclaude/skills/lit-diagram-drawer/assets/licenses/diagram-design-MIT.txt +21 -0
  318. package/plugins/litclaude/skills/lit-diagram-drawer/assets/licenses/log-z-MIT.txt +21 -0
  319. package/plugins/litclaude/skills/lit-diagram-drawer/assets/licenses/simple-icons-CC0.md +30 -0
  320. package/plugins/litclaude/skills/lit-diagram-drawer/assets/licenses/tabler-MIT.txt +21 -0
  321. package/plugins/litclaude/skills/lit-diagram-drawer/examples/01-service-architecture/after.html +1 -0
  322. package/plugins/litclaude/skills/lit-diagram-drawer/examples/01-service-architecture/brief.md +33 -0
  323. package/plugins/litclaude/skills/lit-diagram-drawer/examples/02-release-decision/after.html +1 -0
  324. package/plugins/litclaude/skills/lit-diagram-drawer/examples/02-release-decision/brief.md +18 -0
  325. package/plugins/litclaude/skills/lit-diagram-drawer/examples/03-data-retention/after.html +1 -0
  326. package/plugins/litclaude/skills/lit-diagram-drawer/examples/03-data-retention/brief.md +19 -0
  327. package/plugins/litclaude/skills/lit-diagram-drawer/examples/04-oauth-sequence/after.html +1 -0
  328. package/plugins/litclaude/skills/lit-diagram-drawer/examples/04-oauth-sequence/brief.md +17 -0
  329. package/plugins/litclaude/skills/lit-diagram-drawer/examples/05-review-lanes/after.html +1 -0
  330. package/plugins/litclaude/skills/lit-diagram-drawer/examples/05-review-lanes/brief.md +17 -0
  331. package/plugins/litclaude/skills/lit-diagram-drawer/examples/06-rollout-gates/after.html +1 -0
  332. package/plugins/litclaude/skills/lit-diagram-drawer/examples/06-rollout-gates/brief.md +17 -0
  333. package/plugins/litclaude/skills/lit-diagram-drawer/examples/07-deployment-boundary/after.html +1 -0
  334. package/plugins/litclaude/skills/lit-diagram-drawer/examples/07-deployment-boundary/brief.md +19 -0
  335. package/plugins/litclaude/skills/lit-diagram-drawer/examples/08-policy-traces/after.html +1 -0
  336. package/plugins/litclaude/skills/lit-diagram-drawer/examples/08-policy-traces/brief.md +20 -0
  337. package/plugins/litclaude/skills/lit-diagram-drawer/references/accessibility.md +37 -0
  338. package/plugins/litclaude/skills/lit-diagram-drawer/references/export.md +29 -0
  339. package/plugins/litclaude/skills/lit-diagram-drawer/references/import-drawio.md +21 -0
  340. package/plugins/litclaude/skills/lit-diagram-drawer/references/import-excalidraw.md +14 -0
  341. package/plugins/litclaude/skills/lit-diagram-drawer/references/import-mermaid.md +18 -0
  342. package/plugins/litclaude/skills/lit-diagram-drawer/references/import-schema.md +28 -0
  343. package/plugins/litclaude/skills/lit-diagram-drawer/references/korean-typography.md +34 -0
  344. package/plugins/litclaude/skills/lit-diagram-drawer/references/motion.md +29 -0
  345. package/plugins/litclaude/skills/lit-diagram-drawer/references/office-pptx-docx.md +42 -0
  346. package/plugins/litclaude/skills/lit-diagram-drawer/references/output-spec.md +48 -0
  347. package/plugins/litclaude/skills/lit-diagram-drawer/references/primitive-annotation.md +12 -0
  348. package/plugins/litclaude/skills/lit-diagram-drawer/references/primitive-icons.md +21 -0
  349. package/plugins/litclaude/skills/lit-diagram-drawer/references/primitive-sketchy.md +11 -0
  350. package/plugins/litclaude/skills/lit-diagram-drawer/references/primitive-terminal.md +11 -0
  351. package/plugins/litclaude/skills/lit-diagram-drawer/references/profiles.md +24 -0
  352. package/plugins/litclaude/skills/lit-diagram-drawer/references/semantic-patterns.md +27 -0
  353. package/plugins/litclaude/skills/lit-diagram-drawer/references/style-guide.md +67 -0
  354. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-architecture.md +51 -0
  355. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-bar.md +51 -0
  356. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-beeswarm.md +49 -0
  357. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-bubble.md +49 -0
  358. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-bump.md +49 -0
  359. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-catalog.json +1433 -0
  360. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-data-flow.md +51 -0
  361. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-datalake.md +49 -0
  362. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-db-schema.md +49 -0
  363. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-dependency.md +49 -0
  364. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-deployment.md +49 -0
  365. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-dp-integration.md +49 -0
  366. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-dp-security-matrix.md +49 -0
  367. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-er.md +49 -0
  368. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-fishbone.md +49 -0
  369. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-flowchart.md +49 -0
  370. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-gantt.md +49 -0
  371. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-heatmap.md +53 -0
  372. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-high-level-vertical.md +53 -0
  373. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-high-level.md +53 -0
  374. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-import-drawio.md +53 -0
  375. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-import-excalidraw.md +53 -0
  376. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-import-mermaid.md +53 -0
  377. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-it-state.md +54 -0
  378. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-journey.md +54 -0
  379. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-kanban.md +54 -0
  380. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-layers.md +54 -0
  381. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-line.md +54 -0
  382. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-loop-terminal.md +53 -0
  383. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-loop.md +54 -0
  384. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-marimekko.md +54 -0
  385. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-medallion.md +54 -0
  386. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-nested.md +59 -0
  387. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-org-chart.md +58 -0
  388. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-paved-road-animated.md +72 -0
  389. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-polar.md +67 -0
  390. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-policy-trace-animated.md +69 -0
  391. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-process.md +58 -0
  392. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-pyramid.md +59 -0
  393. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-quadrant-consultant.md +60 -0
  394. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-quadrant.md +57 -0
  395. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-queue-animated.md +63 -0
  396. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-radar.md +57 -0
  397. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-ridgeline.md +63 -0
  398. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-sankey.md +68 -0
  399. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-scatter.md +60 -0
  400. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-sequence-oauth.md +66 -0
  401. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-sequence.md +63 -0
  402. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-slopegraph.md +65 -0
  403. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-state-lifecycle.md +53 -0
  404. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-state.md +59 -0
  405. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-story-map.md +52 -0
  406. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-streamgraph.md +53 -0
  407. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-swimlane.md +52 -0
  408. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-timeline.md +52 -0
  409. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-tree-block-decomposition.md +57 -0
  410. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-tree.md +54 -0
  411. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-treemap.md +54 -0
  412. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-uml-class.md +52 -0
  413. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-venn.md +51 -0
  414. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-wardley.md +52 -0
  415. package/plugins/litclaude/skills/lit-diagram-drawer/references/type-waterfall.md +54 -0
  416. package/plugins/litclaude/skills/lit-diagram-drawer/references/verifier-guide.md +66 -0
  417. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/block-registry.mjs +43 -0
  418. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/brief-contract.mjs +94 -0
  419. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/check-visible-text.mjs +15 -0
  420. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/diagram-metrics.mjs +223 -0
  421. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/doctor.mjs +35 -0
  422. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/drawio-extract.mjs +635 -0
  423. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/excalidraw-extract.mjs +319 -0
  424. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/export.mjs +116 -0
  425. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/mermaid-extract.mjs +438 -0
  426. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/office-safety.mjs +54 -0
  427. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/renderer.mjs +33 -0
  428. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/verify-all.mjs +58 -0
  429. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/verify-brief.mjs +22 -0
  430. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/verify-coverage.mjs +56 -0
  431. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/verify-diagram.mjs +27 -0
  432. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/verify-motion.mjs +12 -0
  433. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/verify-type.mjs +48 -0
  434. package/plugins/litclaude/skills/lit-diagram-drawer/scripts/visual-quality.mjs +376 -0
  435. package/plugins/litclaude/skills/lit-docx/NOTICE +33 -0
  436. package/plugins/litclaude/skills/lit-docx/SKILL.md +170 -0
  437. package/plugins/litclaude/skills/lit-docx/references/frontmatter_schema.md +42 -0
  438. package/plugins/litclaude/skills/lit-docx/references/journal_style_spec.md +17 -0
  439. package/plugins/litclaude/skills/lit-docx/references/markdown_quality_checklist.md +37 -0
  440. package/plugins/litclaude/skills/lit-docx/references/slop_phrase_list.yaml +58 -0
  441. package/plugins/litclaude/skills/lit-docx/references/slop_rules.md +35 -0
  442. package/plugins/litclaude/skills/lit-docx/scripts/clean_markdown.py +95 -0
  443. package/plugins/litclaude/skills/lit-docx/scripts/convert_md_to_docx.py +1194 -0
  444. package/plugins/litclaude/skills/lit-docx/scripts/convert_md_to_pdf.py +290 -0
  445. package/plugins/litclaude/skills/lit-docx/scripts/convert_pdf.py +139 -0
  446. package/plugins/litclaude/skills/lit-docx/scripts/edit_docx.py +306 -0
  447. package/plugins/litclaude/skills/lit-docx/scripts/embed_images.py +78 -0
  448. package/plugins/litclaude/skills/lit-docx/scripts/generate_docx_templates.py +500 -0
  449. package/plugins/litclaude/skills/lit-docx/scripts/qa_docx.py +177 -0
  450. package/plugins/litclaude/skills/lit-docx/scripts/slop_lint.py +561 -0
  451. package/plugins/litclaude/skills/lit-docx/scripts/visual_audit.py +48 -0
  452. package/plugins/litclaude/skills/lit-docx/templates/docx/acs.docx +0 -0
  453. package/plugins/litclaude/skills/lit-docx/templates/docx/elsevier.docx +0 -0
  454. package/plugins/litclaude/skills/lit-docx/templates/docx/ieee.docx +0 -0
  455. package/plugins/litclaude/skills/lit-docx/templates/docx/korean-generic.docx +0 -0
  456. package/plugins/litclaude/skills/lit-docx/templates/docx/nature.docx +0 -0
  457. package/plugins/litclaude/skills/lit-docx/templates/latex/acs/README.md +5 -0
  458. package/plugins/litclaude/skills/lit-docx/templates/latex/acs/template.tex +37 -0
  459. package/plugins/litclaude/skills/lit-docx/templates/latex/elsevier/README.md +5 -0
  460. package/plugins/litclaude/skills/lit-docx/templates/latex/elsevier/template.tex +38 -0
  461. package/plugins/litclaude/skills/lit-docx/templates/latex/ieee/README.md +5 -0
  462. package/plugins/litclaude/skills/lit-docx/templates/latex/ieee/template.tex +37 -0
  463. package/plugins/litclaude/skills/lit-docx/templates/latex/korean-generic/README.md +5 -0
  464. package/plugins/litclaude/skills/lit-docx/templates/latex/korean-generic/template.tex +37 -0
  465. package/plugins/litclaude/skills/lit-docx/templates/latex/nature/README.md +5 -0
  466. package/plugins/litclaude/skills/lit-docx/templates/latex/nature/template.tex +37 -0
  467. package/plugins/litclaude/skills/lit-docx/templates/registry.yaml +1366 -0
  468. package/plugins/litclaude/skills/lit-humanizer/NOTICE +160 -0
  469. package/plugins/litclaude/skills/lit-humanizer/SKILL.md +164 -0
  470. package/plugins/litclaude/skills/lit-humanizer/assets/always-on-rule.md +9 -0
  471. package/plugins/litclaude/skills/lit-humanizer/assets/report-skeleton.md +25 -0
  472. package/plugins/litclaude/skills/lit-humanizer/assets/slide-text-skeleton.md +28 -0
  473. package/plugins/litclaude/skills/lit-humanizer/bench/prompts.md +73 -0
  474. package/plugins/litclaude/skills/lit-humanizer/examples/accessibility-note/after.md +7 -0
  475. package/plugins/litclaude/skills/lit-humanizer/examples/accessibility-note/before.md +7 -0
  476. package/plugins/litclaude/skills/lit-humanizer/examples/api-reference/after.md +9 -0
  477. package/plugins/litclaude/skills/lit-humanizer/examples/api-reference/before.md +15 -0
  478. package/plugins/litclaude/skills/lit-humanizer/examples/changelog/after.md +5 -0
  479. package/plugins/litclaude/skills/lit-humanizer/examples/changelog/before.md +12 -0
  480. package/plugins/litclaude/skills/lit-humanizer/examples/code-comments/after.md +10 -0
  481. package/plugins/litclaude/skills/lit-humanizer/examples/code-comments/before.md +19 -0
  482. package/plugins/litclaude/skills/lit-humanizer/examples/commit/after.md +5 -0
  483. package/plugins/litclaude/skills/lit-humanizer/examples/commit/before.md +7 -0
  484. package/plugins/litclaude/skills/lit-humanizer/examples/data-release/after.md +7 -0
  485. package/plugins/litclaude/skills/lit-humanizer/examples/data-release/before.md +9 -0
  486. package/plugins/litclaude/skills/lit-humanizer/examples/english-essay/after.md +5 -0
  487. package/plugins/litclaude/skills/lit-humanizer/examples/english-essay/before.md +5 -0
  488. package/plugins/litclaude/skills/lit-humanizer/examples/incident-update/after.md +7 -0
  489. package/plugins/litclaude/skills/lit-humanizer/examples/incident-update/before.md +7 -0
  490. package/plugins/litclaude/skills/lit-humanizer/examples/ko-essay/after.md +7 -0
  491. package/plugins/litclaude/skills/lit-humanizer/examples/ko-essay/before.md +9 -0
  492. package/plugins/litclaude/skills/lit-humanizer/examples/ko-report/after.md +9 -0
  493. package/plugins/litclaude/skills/lit-humanizer/examples/ko-report/before.md +13 -0
  494. package/plugins/litclaude/skills/lit-humanizer/examples/ko-slide/after.md +19 -0
  495. package/plugins/litclaude/skills/lit-humanizer/examples/ko-slide/before.md +21 -0
  496. package/plugins/litclaude/skills/lit-humanizer/examples/meeting-brief/after.md +9 -0
  497. package/plugins/litclaude/skills/lit-humanizer/examples/meeting-brief/before.md +11 -0
  498. package/plugins/litclaude/skills/lit-humanizer/examples/policy-faq/after.md +9 -0
  499. package/plugins/litclaude/skills/lit-humanizer/examples/policy-faq/before.md +9 -0
  500. package/plugins/litclaude/skills/lit-humanizer/examples/pr/after.md +15 -0
  501. package/plugins/litclaude/skills/lit-humanizer/examples/pr/before.md +17 -0
  502. package/plugins/litclaude/skills/lit-humanizer/examples/project-update/after.md +7 -0
  503. package/plugins/litclaude/skills/lit-humanizer/examples/project-update/before.md +9 -0
  504. package/plugins/litclaude/skills/lit-humanizer/examples/readme/after.md +12 -0
  505. package/plugins/litclaude/skills/lit-humanizer/examples/readme/before.md +14 -0
  506. package/plugins/litclaude/skills/lit-humanizer/examples/report/after.md +13 -0
  507. package/plugins/litclaude/skills/lit-humanizer/examples/report/before.md +11 -0
  508. package/plugins/litclaude/skills/lit-humanizer/examples/research-abstract/after.md +5 -0
  509. package/plugins/litclaude/skills/lit-humanizer/examples/research-abstract/before.md +5 -0
  510. package/plugins/litclaude/skills/lit-humanizer/examples/slides/after.md +19 -0
  511. package/plugins/litclaude/skills/lit-humanizer/examples/slides/before.md +19 -0
  512. package/plugins/litclaude/skills/lit-humanizer/examples/troubleshooting/after.md +11 -0
  513. package/plugins/litclaude/skills/lit-humanizer/examples/troubleshooting/before.md +11 -0
  514. package/plugins/litclaude/skills/lit-humanizer/motion-guide.md +123 -0
  515. package/plugins/litclaude/skills/lit-humanizer/references/code-patterns.md +468 -0
  516. package/plugins/litclaude/skills/lit-humanizer/references/deliverable-channels.md +111 -0
  517. package/plugins/litclaude/skills/lit-humanizer/references/en-patterns-checklist.md +43 -0
  518. package/plugins/litclaude/skills/lit-humanizer/references/en-patterns-content.md +243 -0
  519. package/plugins/litclaude/skills/lit-humanizer/references/en-patterns-structure.md +375 -0
  520. package/plugins/litclaude/skills/lit-humanizer/references/en-patterns.md +57 -0
  521. package/plugins/litclaude/skills/lit-humanizer/references/ko-metrics.md +33 -0
  522. package/plugins/litclaude/skills/lit-humanizer/references/ko-patterns-a-d.md +659 -0
  523. package/plugins/litclaude/skills/lit-humanizer/references/ko-patterns-e-j.md +387 -0
  524. package/plugins/litclaude/skills/lit-humanizer/references/ko-patterns.md +31 -0
  525. package/plugins/litclaude/skills/lit-humanizer/references/rewrite-playbook.md +54 -0
  526. package/plugins/litclaude/skills/lit-humanizer/references/taxonomy.md +153 -0
  527. package/plugins/litclaude/skills/lit-humanizer/rules.json +884 -0
  528. package/plugins/litclaude/skills/lit-humanizer/scripts/artifact-text.mjs +38 -0
  529. package/plugins/litclaude/skills/lit-humanizer/scripts/core.mjs +207 -0
  530. package/plugins/litclaude/skills/lit-humanizer/scripts/detect.mjs +64 -0
  531. package/plugins/litclaude/skills/lit-humanizer/scripts/extract_office_text.py +112 -0
  532. package/plugins/litclaude/skills/lit-humanizer/scripts/ko-metrics.mjs +124 -0
  533. package/plugins/litclaude/skills/lit-humanizer/scripts/scan-input.mjs +29 -0
  534. package/plugins/litclaude/skills/lit-loop/SKILL.md +30 -1
  535. package/plugins/litclaude/skills/lit-plan/SKILL.md +4 -1
  536. package/plugins/litclaude/skills/lit-pptx/NOTICE +38 -0
  537. package/plugins/litclaude/skills/lit-pptx/SKILL.md +207 -0
  538. package/plugins/litclaude/skills/lit-pptx/assets/azure/circle-lg.png +0 -0
  539. package/plugins/litclaude/skills/lit-pptx/assets/azure/circle-md.png +0 -0
  540. package/plugins/litclaude/skills/lit-pptx/assets/azure/circle-sm.png +0 -0
  541. package/plugins/litclaude/skills/lit-pptx/fonts/a2z/A2Z-Black.otf +0 -0
  542. package/plugins/litclaude/skills/lit-pptx/fonts/a2z/A2Z-Bold.otf +0 -0
  543. package/plugins/litclaude/skills/lit-pptx/fonts/a2z/A2Z-Light.otf +0 -0
  544. package/plugins/litclaude/skills/lit-pptx/fonts/a2z/A2Z-Medium.otf +0 -0
  545. package/plugins/litclaude/skills/lit-pptx/fonts/a2z/A2Z-Regular.otf +0 -0
  546. package/plugins/litclaude/skills/lit-pptx/fonts/a2z/OFL.txt +94 -0
  547. package/plugins/litclaude/skills/lit-pptx/fonts/a2z/SOURCE.md +29 -0
  548. package/plugins/litclaude/skills/lit-pptx/fonts/pretendard/OFL.txt +94 -0
  549. package/plugins/litclaude/skills/lit-pptx/fonts/pretendard/Pretendard-Bold.otf +0 -0
  550. package/plugins/litclaude/skills/lit-pptx/fonts/pretendard/Pretendard-Regular.otf +0 -0
  551. package/plugins/litclaude/skills/lit-pptx/fonts/provenance.json +78 -0
  552. package/plugins/litclaude/skills/lit-pptx/references/agents/analyst.md +49 -0
  553. package/plugins/litclaude/skills/lit-pptx/references/agents/antithesis.md +59 -0
  554. package/plugins/litclaude/skills/lit-pptx/references/agents/architect.md +44 -0
  555. package/plugins/litclaude/skills/lit-pptx/references/agents/critic.md +42 -0
  556. package/plugins/litclaude/skills/lit-pptx/references/agents/synthesizer.md +47 -0
  557. package/plugins/litclaude/skills/lit-pptx/references/agents/thesis.md +33 -0
  558. package/plugins/litclaude/skills/lit-pptx/references/anti-slop-checklist.md +81 -0
  559. package/plugins/litclaude/skills/lit-pptx/references/authoring-guide.md +173 -0
  560. package/plugins/litclaude/skills/lit-pptx/references/consensus-protocol.md +125 -0
  561. package/plugins/litclaude/skills/lit-pptx/references/data-display-cookbook.md +45 -0
  562. package/plugins/litclaude/skills/lit-pptx/references/design-system-azure.md +58 -0
  563. package/plugins/litclaude/skills/lit-pptx/references/interview-protocol.md +113 -0
  564. package/plugins/litclaude/skills/lit-pptx/references/stages/autopilot.md +48 -0
  565. package/plugins/litclaude/skills/lit-pptx/references/stages/interview.md +52 -0
  566. package/plugins/litclaude/skills/lit-pptx/references/stages/plan.md +42 -0
  567. package/plugins/litclaude/skills/lit-pptx/scripts/compile-deck.js +414 -0
  568. package/plugins/litclaude/skills/lit-pptx/scripts/craft_extras.py +373 -0
  569. package/plugins/litclaude/skills/lit-pptx/scripts/deck_craft.py +321 -0
  570. package/plugins/litclaude/skills/lit-pptx/scripts/embed_fonts.py +215 -0
  571. package/plugins/litclaude/skills/lit-pptx/scripts/forbidden-terms.json +55 -0
  572. package/plugins/litclaude/skills/lit-pptx/scripts/layout_inventory.py +418 -0
  573. package/plugins/litclaude/skills/lit-pptx/scripts/learn_template.py +446 -0
  574. package/plugins/litclaude/skills/lit-pptx/scripts/lib/derive-palette.js +176 -0
  575. package/plugins/litclaude/skills/lit-pptx/scripts/lib/directive-parser.js +244 -0
  576. package/plugins/litclaude/skills/lit-pptx/scripts/lib/font-map.js +79 -0
  577. package/plugins/litclaude/skills/lit-pptx/scripts/lib/gen-bg.js +86 -0
  578. package/plugins/litclaude/skills/lit-pptx/scripts/lib/gen-gradient-assets.js +37 -0
  579. package/plugins/litclaude/skills/lit-pptx/scripts/lib/layout-resolver.js +768 -0
  580. package/plugins/litclaude/skills/lit-pptx/scripts/lib/markdown-loader.js +136 -0
  581. package/plugins/litclaude/skills/lit-pptx/scripts/lib/render-adapter-html.js +356 -0
  582. package/plugins/litclaude/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +2094 -0
  583. package/plugins/litclaude/skills/lit-pptx/scripts/lib/runtime-require.js +28 -0
  584. package/plugins/litclaude/skills/lit-pptx/scripts/lib/slide-ast.js +561 -0
  585. package/plugins/litclaude/skills/lit-pptx/scripts/lib/spec-validator.js +94 -0
  586. package/plugins/litclaude/skills/lit-pptx/scripts/lib/template-registry.js +394 -0
  587. package/plugins/litclaude/skills/lit-pptx/scripts/package.json +4 -0
  588. package/plugins/litclaude/skills/lit-pptx/scripts/qa_deck.py +766 -0
  589. package/plugins/litclaude/skills/lit-pptx/scripts/validate_pptx.py +215 -0
  590. package/plugins/litclaude/skills/lit-pptx/specs/markdown-slide-spec-v1.md +251 -0
  591. package/plugins/litclaude/skills/lit-pptx/specs/markdown-slide-spec-v2.md +214 -0
  592. package/plugins/litclaude/skills/lit-pptx/specs/slide-ast-v1.schema.json +229 -0
  593. package/plugins/litclaude/skills/lit-pptx/specs/slide-ast-v2.schema.json +144 -0
  594. package/plugins/litclaude/skills/lit-pptx/specs/template-enrollment-contract.md +382 -0
  595. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/AZURE-A2Z/capabilities.yaml +146 -0
  596. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +454 -0
  597. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +37 -0
  598. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +154 -0
  599. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +475 -0
  600. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +37 -0
  601. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/capabilities.yaml +179 -0
  602. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/layout-mapping.yaml +299 -0
  603. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/template.yaml +45 -0
  604. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +181 -0
  605. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml +299 -0
  606. package/plugins/litclaude/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +44 -0
  607. package/plugins/litclaude/skills/lit-scientific-visualization/SKILL.md +1 -0
  608. package/plugins/litclaude/skills/lit-typographic-motion/SKILL.md +131 -0
  609. package/plugins/litclaude/skills/lit-typographic-motion/engine/NOTICE +23 -0
  610. package/plugins/litclaude/skills/lit-typographic-motion/engine/THIRD_PARTY_NOTICES +56 -0
  611. package/plugins/litclaude/skills/lit-typographic-motion/engine/audio/beat_grid.py +56 -0
  612. package/plugins/litclaude/skills/lit-typographic-motion/engine/audio/requirements.lock +1084 -0
  613. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/constants.mjs +211 -0
  614. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/contrast.mjs +90 -0
  615. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/events.mjs +46 -0
  616. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/flash.mjs +211 -0
  617. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/gate-rules.mjs +550 -0
  618. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/presets.mjs +123 -0
  619. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/text.mjs +100 -0
  620. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/timeline.mjs +142 -0
  621. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/util.mjs +167 -0
  622. package/plugins/litclaude/skills/lit-typographic-motion/engine/core/voices.mjs +19 -0
  623. package/plugins/litclaude/skills/lit-typographic-motion/engine/models/word-timing.json +198 -0
  624. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/analysis.mjs +108 -0
  625. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/brief.mjs +158 -0
  626. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/chrome.mjs +330 -0
  627. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/coverage.mjs +83 -0
  628. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/done.mjs +104 -0
  629. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/encode.mjs +104 -0
  630. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/frame-worker.mjs +36 -0
  631. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/look.mjs +128 -0
  632. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/pipeline.mjs +592 -0
  633. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/png.mjs +112 -0
  634. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/report.mjs +66 -0
  635. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/runtime.mjs +330 -0
  636. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/session.mjs +145 -0
  637. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/sound-cli.mjs +60 -0
  638. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/sound.mjs +641 -0
  639. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/stage-capture.mjs +178 -0
  640. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/stage-gate.mjs +122 -0
  641. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/stage-qa.mjs +295 -0
  642. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/stage-serve.mjs +278 -0
  643. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/stage.mjs +503 -0
  644. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/stills.mjs +100 -0
  645. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/treatment.mjs +343 -0
  646. package/plugins/litclaude/skills/lit-typographic-motion/engine/node/ws-server.mjs +132 -0
  647. package/plugins/litclaude/skills/lit-typographic-motion/engine/package-lock.json +25 -0
  648. package/plugins/litclaude/skills/lit-typographic-motion/engine/package.json +10 -0
  649. package/plugins/litclaude/skills/lit-typographic-motion/engine/stage/init.js +288 -0
  650. package/plugins/litclaude/skills/lit-typographic-motion/engine/stage/qa.js +157 -0
  651. package/plugins/litclaude/skills/lit-typographic-motion/engine/stage/stage-kit.js +701 -0
  652. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/boot.mjs +123 -0
  653. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/engine.mjs +281 -0
  654. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/gl.mjs +319 -0
  655. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/glsl-common.mjs +78 -0
  656. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/index.html +6 -0
  657. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/lines.mjs +112 -0
  658. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/passes/crt.mjs +98 -0
  659. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/passes/dither.mjs +49 -0
  660. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/passes/glitch.mjs +77 -0
  661. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/passes/swiss-grid.mjs +61 -0
  662. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/passes/terminal-ui.mjs +88 -0
  663. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/passes/tidal-gradient.mjs +86 -0
  664. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/post.mjs +165 -0
  665. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scale.mjs +15 -0
  666. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scene.mjs +82 -0
  667. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scenes/end-card.mjs +30 -0
  668. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scenes/index.mjs +16 -0
  669. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scenes/karaoke-line.mjs +47 -0
  670. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scenes/kinetic-list.mjs +45 -0
  671. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scenes/number-counter.mjs +29 -0
  672. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scenes/signature.mjs +73 -0
  673. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/scenes/title-slam.mjs +73 -0
  674. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/stroke.mjs +236 -0
  675. package/plugins/litclaude/skills/lit-typographic-motion/engine/web/type.mjs +180 -0
  676. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w100-400.ttf +0 -0
  677. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w100-700.ttf +0 -0
  678. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w100-900.ttf +0 -0
  679. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w125-400.ttf +0 -0
  680. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w125-700.ttf +0 -0
  681. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w125-900.ttf +0 -0
  682. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w75-400.ttf +0 -0
  683. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w75-700.ttf +0 -0
  684. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/Archivo-w75-900.ttf +0 -0
  685. package/plugins/litclaude/skills/lit-typographic-motion/fonts/archivo/OFL.txt +93 -0
  686. package/plugins/litclaude/skills/lit-typographic-motion/fonts/manifest.json +437 -0
  687. package/plugins/litclaude/skills/lit-typographic-motion/fonts/silkscreen/OFL.txt +93 -0
  688. package/plugins/litclaude/skills/lit-typographic-motion/fonts/silkscreen/Silkscreen-Bold.ttf +0 -0
  689. package/plugins/litclaude/skills/lit-typographic-motion/fonts/silkscreen/Silkscreen-Regular.ttf +0 -0
  690. package/plugins/litclaude/skills/lit-typographic-motion/fonts/stroke/CREDITS +42 -0
  691. package/plugins/litclaude/skills/lit-typographic-motion/fonts/stroke/EMSAllure.svg +216 -0
  692. package/plugins/litclaude/skills/lit-typographic-motion/fonts/stroke/EMSFelix.svg +216 -0
  693. package/plugins/litclaude/skills/lit-typographic-motion/fonts/stroke/EMSOsmotron.svg +216 -0
  694. package/plugins/litclaude/skills/lit-typographic-motion/fonts/stroke/EMSReadability.svg +216 -0
  695. package/plugins/litclaude/skills/lit-typographic-motion/fonts/stroke/EMSTech.svg +217 -0
  696. package/plugins/litclaude/skills/lit-typographic-motion/fonts/stroke/OFL.txt +91 -0
  697. package/plugins/litclaude/skills/lit-typographic-motion/fonts/vt323/OFL.txt +93 -0
  698. package/plugins/litclaude/skills/lit-typographic-motion/fonts/vt323/VT323-Regular.ttf +0 -0
  699. package/plugins/litclaude/skills/lit-typographic-motion/references/brief-schema.md +91 -0
  700. package/plugins/litclaude/skills/lit-typographic-motion/references/craft-loop.md +69 -0
  701. package/plugins/litclaude/skills/lit-typographic-motion/references/engine-contract.md +104 -0
  702. package/plugins/litclaude/skills/lit-typographic-motion/references/look.md +106 -0
  703. package/plugins/litclaude/skills/lit-typographic-motion/references/runtime.md +65 -0
  704. package/plugins/litclaude/skills/lit-typographic-motion/references/sound.md +83 -0
  705. package/plugins/litclaude/skills/lit-typographic-motion/references/stage.md +192 -0
  706. package/plugins/litclaude/skills/lit-typographic-motion/references/style-bibles.md +117 -0
  707. package/plugins/litclaude/skills/lit-typographic-motion/references/treatment.md +114 -0
  708. package/plugins/litclaude/skills/lit-typographic-motion/references/type-craft.md +79 -0
  709. package/plugins/litclaude/skills/lit-typographic-motion/scripts/motion-doctor.mjs +78 -0
  710. package/plugins/litclaude/skills/lit-typographic-motion/scripts/motion-runtime.mjs +67 -0
  711. package/plugins/litclaude/skills/lit-typographic-motion/scripts/motion.mjs +132 -0
  712. package/plugins/litclaude/skills/litresearch/SKILL.md +54 -18
  713. package/scripts/doctor.mjs +5 -0
  714. package/scripts/postinstall.mjs +1 -0
  715. package/plugins/litclaude/skills/lit-korean/SKILL.md +0 -327
  716. /package/plugins/litclaude/skills/{lit-korean/references/fidelity-checklist.md → lit-humanizer/references/litclaude-fidelity-checklist.md} +0 -0
  717. /package/plugins/litclaude/skills/{lit-korean/references/rewrite-rules.md → lit-humanizer/references/litclaude-rewrite-rules.md} +0 -0
  718. /package/plugins/litclaude/skills/{lit-korean/references/style-patterns.md → lit-humanizer/references/litclaude-style-patterns.md} +0 -0
@@ -0,0 +1,319 @@
1
+ // Raw WebGL2 plumbing: HDR render targets, full-screen shader passes, a compositor and Canvas2D
2
+ // layers uploaded as sRGB textures. Re-expressed without three.js from the mechanism of
3
+ // mexicat/pdoom-video app/src/engine/gl.ts (MIT, see ../NOTICE).
4
+ //
5
+ // Every look-library pass draws through `Pass.draw`, the one uniform-setter wrapper: it records
6
+ // the uniforms and counts draws per pass for the render log (MO-SH-00a), so no pass can draw
7
+ // without leaving a trace the gate can check.
8
+ import { GLSL_COMMON } from "./glsl-common.mjs";
9
+ import { SCALE, W, H, PW, PH } from "./scale.mjs";
10
+
11
+ export { SCALE, W, H, PW, PH };
12
+
13
+ const VERT = `#version 300 es
14
+ precision highp float;
15
+ out vec2 vUv;
16
+ void main() {
17
+ vec2 p = vec2(float((gl_VertexID << 1) & 2), float(gl_VertexID & 2));
18
+ vUv = p;
19
+ gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0);
20
+ }`;
21
+
22
+ /** Per-frame render-log recorder shared by every pass. */
23
+ export class Tracker {
24
+ constructor() {
25
+ this.frame = new Map();
26
+ this.recordUniforms = true;
27
+ }
28
+ reset() {
29
+ this.frame = new Map();
30
+ }
31
+ entry(pass) {
32
+ let e = this.frame.get(pass);
33
+ if (!e) {
34
+ e = { draws: 0, uniforms: {} };
35
+ this.frame.set(pass, e);
36
+ }
37
+ return e;
38
+ }
39
+ draw(pass, uniforms) {
40
+ const e = this.entry(pass);
41
+ e.draws += 1;
42
+ if (this.recordUniforms) {
43
+ for (const [name, value] of Object.entries(uniforms)) {
44
+ if (value && typeof value === "object" && value.isTexture) continue;
45
+ e.uniforms[name] = Array.isArray(value) ? value.map((v) => +(+v).toFixed(6)) : typeof value === "number" ? +value.toFixed(6) : value;
46
+ }
47
+ }
48
+ }
49
+ lines() {
50
+ return [...this.frame.entries()].map(([pass, e]) => ({ pass, draws: e.draws, uniforms: e.uniforms }));
51
+ }
52
+ }
53
+
54
+ export class GL {
55
+ constructor(canvas) {
56
+ const gl = canvas.getContext("webgl2", { antialias: false, alpha: false, depth: false, stencil: false, preserveDrawingBuffer: true, premultipliedAlpha: false, powerPreference: "high-performance" });
57
+ if (!gl) throw new Error("NO_WEBGL2: canvas.getContext('webgl2') returned null");
58
+ if (!gl.getExtension("EXT_color_buffer_float")) throw new Error("NO_WEBGL2: EXT_color_buffer_float is unavailable, so HDR render targets cannot be drawn");
59
+ this.gl = gl;
60
+ this.canvas = canvas;
61
+ this.vao = gl.createVertexArray();
62
+ this.tracker = new Tracker();
63
+ this.programs = new Map();
64
+ }
65
+
66
+ renderer() {
67
+ const gl = this.gl;
68
+ const ext = gl.getExtension("WEBGL_debug_renderer_info");
69
+ return ext ? String(gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)) : "unknown (debug-info extension unavailable)";
70
+ }
71
+
72
+ /** A render target in physical px. `format` is "half" (RGBA16F, linear HDR) or "rgba8". */
73
+ target(width = PW, height = PH, format = "half") {
74
+ const gl = this.gl;
75
+ const tex = gl.createTexture();
76
+ gl.bindTexture(gl.TEXTURE_2D, tex);
77
+ if (format === "half") gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA16F, width, height);
78
+ else gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA8, width, height);
79
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
80
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
81
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
82
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
83
+ const fbo = gl.createFramebuffer();
84
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
85
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
86
+ const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
87
+ if (status !== gl.FRAMEBUFFER_COMPLETE) throw new Error(`framebuffer incomplete (${status}) for ${format} ${width}x${height}`);
88
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
89
+ return { fbo, tex: { isTexture: true, handle: tex }, width, height, format };
90
+ }
91
+
92
+ bind(target) {
93
+ const gl = this.gl;
94
+ gl.bindFramebuffer(gl.FRAMEBUFFER, target ? target.fbo : null);
95
+ gl.viewport(0, 0, target ? target.width : PW, target ? target.height : PH);
96
+ }
97
+
98
+ clear(target, rgb = [0, 0, 0], alpha = 0) {
99
+ const gl = this.gl;
100
+ this.bind(target);
101
+ gl.disable(gl.BLEND);
102
+ gl.clearColor(rgb[0], rgb[1], rgb[2], alpha);
103
+ gl.clear(gl.COLOR_BUFFER_BIT);
104
+ }
105
+
106
+ program(frag) {
107
+ const cached = this.programs.get(frag);
108
+ if (cached) return cached;
109
+ const gl = this.gl;
110
+ const compile = (type, source) => {
111
+ const shader = gl.createShader(type);
112
+ gl.shaderSource(shader, source);
113
+ gl.compileShader(shader);
114
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) throw new Error(`shader compile failed: ${gl.getShaderInfoLog(shader)}`);
115
+ return shader;
116
+ };
117
+ const fragSource = `#version 300 es\nprecision highp float;\nprecision highp int;\nin vec2 vUv;\nout vec4 fragColor;\n${GLSL_COMMON}\n${frag}`;
118
+ const program = gl.createProgram();
119
+ gl.attachShader(program, compile(gl.VERTEX_SHADER, VERT));
120
+ gl.attachShader(program, compile(gl.FRAGMENT_SHADER, fragSource));
121
+ gl.linkProgram(program);
122
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) throw new Error(`program link failed: ${gl.getProgramInfoLog(program)}`);
123
+ const uniforms = new Map();
124
+ const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
125
+ for (let i = 0; i < count; i++) {
126
+ const info = gl.getActiveUniform(program, i);
127
+ const name = info.name.replace(/\[0\]$/u, "");
128
+ uniforms.set(name, { location: gl.getUniformLocation(program, info.name), type: info.type, size: info.size });
129
+ }
130
+ const entry = { program, uniforms };
131
+ this.programs.set(frag, entry);
132
+ return entry;
133
+ }
134
+
135
+ setUniforms(entry, values) {
136
+ const gl = this.gl;
137
+ let unit = 0;
138
+ for (const [name, value] of Object.entries(values)) {
139
+ const u = entry.uniforms.get(name);
140
+ if (!u) continue;
141
+ const v = typeof value === "boolean" ? (value ? 1 : 0) : value;
142
+ switch (u.type) {
143
+ case gl.FLOAT: gl.uniform1f(u.location, v); break;
144
+ case gl.FLOAT_VEC2: gl.uniform2fv(u.location, v); break;
145
+ case gl.FLOAT_VEC3: gl.uniform3fv(u.location, v); break;
146
+ case gl.FLOAT_VEC4: gl.uniform4fv(u.location, v); break;
147
+ case gl.INT: case gl.BOOL: gl.uniform1i(u.location, v); break;
148
+ case gl.UNSIGNED_INT: gl.uniform1ui(u.location, v >>> 0); break;
149
+ case gl.SAMPLER_2D:
150
+ gl.activeTexture(gl.TEXTURE0 + unit);
151
+ gl.bindTexture(gl.TEXTURE_2D, v ? v.handle : null);
152
+ gl.uniform1i(u.location, unit);
153
+ unit += 1;
154
+ break;
155
+ default: throw new Error(`unsupported uniform type for ${name}`);
156
+ }
157
+ }
158
+ }
159
+
160
+ blend(mode) {
161
+ const gl = this.gl;
162
+ if (mode === "replace") {
163
+ gl.disable(gl.BLEND);
164
+ return;
165
+ }
166
+ gl.enable(gl.BLEND);
167
+ if (mode === "normal") {
168
+ // Premultiplied colour over the target; the target's alpha (glyph coverage) is kept.
169
+ gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
170
+ gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE);
171
+ } else if (mode === "glyph") {
172
+ // Glyph ink: colour over, coverage = max(target, glyph) so alpha carries the glyph mask.
173
+ gl.blendEquationSeparate(gl.FUNC_ADD, gl.MAX);
174
+ gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE);
175
+ } else if (mode === "add") {
176
+ gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
177
+ gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE);
178
+ } else throw new Error(`unknown blend mode ${mode}`);
179
+ }
180
+
181
+ /** Download a target's RGBA8 pixels through a pixel-pack buffer and a fence (no GPU stall). */
182
+ async readPixelsAsync(target, out) {
183
+ const gl = this.gl;
184
+ const bytes = target.width * target.height * 4;
185
+ const buffer = out ?? new Uint8Array(bytes);
186
+ if (!this.pbo || this.pboBytes !== bytes) {
187
+ if (this.pbo) gl.deleteBuffer(this.pbo);
188
+ this.pbo = gl.createBuffer();
189
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, this.pbo);
190
+ gl.bufferData(gl.PIXEL_PACK_BUFFER, bytes, gl.STREAM_READ);
191
+ this.pboBytes = bytes;
192
+ }
193
+ this.bind(target);
194
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, this.pbo);
195
+ gl.readPixels(0, 0, target.width, target.height, gl.RGBA, gl.UNSIGNED_BYTE, 0);
196
+ const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);
197
+ gl.flush();
198
+ for (;;) {
199
+ const state = gl.clientWaitSync(sync, 0, 0);
200
+ if (state === gl.ALREADY_SIGNALED || state === gl.CONDITION_SATISFIED) break;
201
+ if (state === gl.WAIT_FAILED) throw new Error("clientWaitSync failed during pixel readback");
202
+ await new Promise((resolve) => setTimeout(resolve, 0));
203
+ }
204
+ gl.deleteSync(sync);
205
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, buffer);
206
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);
207
+ return buffer;
208
+ }
209
+ }
210
+
211
+ /**
212
+ * A full-screen fragment pass. `frag` declares its uniforms and writes `fragColor`; `vUv` (0..1,
213
+ * y up) and GLSL_COMMON are provided. `pass` names the look-library pass it belongs to (null for
214
+ * engine plumbing); only named passes are logged.
215
+ */
216
+ export class Pass {
217
+ constructor(glw, frag, { pass = null } = {}) {
218
+ this.glw = glw;
219
+ this.frag = frag;
220
+ this.pass = pass;
221
+ this.entry = glw.program(frag);
222
+ }
223
+ draw(target, uniforms = {}, { blend = "replace" } = {}) {
224
+ const { glw } = this;
225
+ const gl = glw.gl;
226
+ glw.bind(target);
227
+ gl.useProgram(this.entry.program);
228
+ glw.setUniforms(this.entry, uniforms);
229
+ glw.blend(blend);
230
+ gl.bindVertexArray(glw.vao);
231
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
232
+ gl.bindVertexArray(null);
233
+ if (this.pass) glw.tracker.draw(this.pass, uniforms);
234
+ }
235
+ }
236
+
237
+ const COMPOSITE_FRAG = /* glsl */ `
238
+ uniform sampler2D src; uniform float opacity; uniform vec3 tint;
239
+ void main() {
240
+ // Canvas2D layers are uploaded unpremultiplied as SRGB8_ALPHA8, so RGB arrives already linear
241
+ // and is premultiplied here.
242
+ vec4 c = texture(src, vUv);
243
+ float a = c.a * opacity;
244
+ fragColor = vec4(c.rgb * tint * a, a);
245
+ }`;
246
+
247
+ /** Draws a texture over a target: `normal` keeps the target's glyph mask, `glyph` adds to it. */
248
+ export class Compositor {
249
+ constructor(glw) {
250
+ this.pass = new Pass(glw, COMPOSITE_FRAG);
251
+ }
252
+ draw(texture, target, { mode = "normal", opacity = 1, tint = [1, 1, 1], logAs = null } = {}) {
253
+ this.pass.pass = logAs;
254
+ this.pass.draw(target, { src: texture, opacity, tint }, { blend: mode });
255
+ this.pass.pass = null;
256
+ }
257
+ }
258
+
259
+ /**
260
+ * A logical 1920x1080 Canvas2D surface uploaded as an sRGB texture. The context is CPU-backed
261
+ * (willReadFrequently) so its rasterization does not depend on GPU raster scheduling, and it is
262
+ * pre-scaled so drawing code works in logical px at every output scale.
263
+ */
264
+ export class Layer2D {
265
+ constructor(glw, width = W, height = H) {
266
+ this.glw = glw;
267
+ this.width = width;
268
+ this.height = height;
269
+ this.canvas = document.createElement("canvas");
270
+ this.canvas.width = Math.round(width * SCALE);
271
+ this.canvas.height = Math.round(height * SCALE);
272
+ this.ctx = this.canvas.getContext("2d", { willReadFrequently: true, alpha: true });
273
+ const gl = glw.gl;
274
+ this.handle = gl.createTexture();
275
+ gl.bindTexture(gl.TEXTURE_2D, this.handle);
276
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.SRGB8_ALPHA8, this.canvas.width, this.canvas.height);
277
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
278
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
279
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
280
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
281
+ this.texture = { isTexture: true, handle: this.handle };
282
+ this.clear();
283
+ }
284
+ clear() {
285
+ const c = this.ctx;
286
+ c.setTransform(SCALE, 0, 0, SCALE, 0, 0);
287
+ c.globalAlpha = 1;
288
+ c.globalCompositeOperation = "source-over";
289
+ c.filter = "none";
290
+ c.shadowBlur = 0;
291
+ c.clearRect(0, 0, this.width, this.height);
292
+ }
293
+ upload() {
294
+ const gl = this.glw.gl;
295
+ gl.bindTexture(gl.TEXTURE_2D, this.handle);
296
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
297
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
298
+ gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
299
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, this.canvas);
300
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
301
+ return this.texture;
302
+ }
303
+ /** Re-upload only a logical-px rectangle of the canvas (the rest of the texture is kept). */
304
+ uploadRegion(x, y, w, h) {
305
+ const gl = this.glw.gl;
306
+ const px = Math.max(0, Math.floor(x * SCALE));
307
+ const py = Math.max(0, Math.floor(y * SCALE));
308
+ const pw = Math.min(this.canvas.width - px, Math.ceil((x + w) * SCALE) - px);
309
+ const ph = Math.min(this.canvas.height - py, Math.ceil((y + h) * SCALE) - py);
310
+ const region = this.ctx.getImageData(px, py, pw, ph);
311
+ gl.bindTexture(gl.TEXTURE_2D, this.handle);
312
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
313
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
314
+ gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
315
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, px, this.canvas.height - py - ph, pw, ph, gl.RGBA, gl.UNSIGNED_BYTE, region);
316
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
317
+ return this.texture;
318
+ }
319
+ }
@@ -0,0 +1,78 @@
1
+ // Shared GLSL ES 3.0 header prepended to every full-screen pass. Adapted in structure from
2
+ // mexicat/pdoom-video app/src/engine/glsl/common.ts (MIT, see ../NOTICE): output-scale-aware
3
+ // fragment coordinates, colour transfer helpers and pure noise. The noise here is this engine's
4
+ // own integer-hash value noise, seeded through `uint` uniforms (MO-SH-01), so every pass that needs
5
+ // randomness is a pure function of (pixel, seed, t).
6
+ import { SCALE } from "./scale.mjs";
7
+
8
+ export const GLSL_COMMON = /* glsl */ `
9
+ #define PI 3.14159265359
10
+ #define TAU 6.28318530718
11
+ const float PX_SCALE = ${SCALE.toFixed(1)};
12
+ #define FRAG_PX (gl_FragCoord.xy / PX_SCALE)
13
+ const vec2 LOGICAL = vec2(1920.0, 1080.0);
14
+
15
+ float sat(float x) { return clamp(x, 0.0, 1.0); }
16
+ vec3 sat(vec3 x) { return clamp(x, 0.0, 1.0); }
17
+ float luma(vec3 c) { return dot(c, vec3(0.2126, 0.7152, 0.0722)); }
18
+ mat2 rot2(float a) { float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }
19
+
20
+ vec3 toSRGB(vec3 c) { c = max(c, 0.0); return mix(12.92 * c, 1.055 * pow(c, vec3(1.0 / 2.4)) - 0.055, step(0.0031308, c)); }
21
+ vec3 toLinear(vec3 c) { return mix(c / 12.92, pow((c + 0.055) / 1.055, vec3(2.4)), step(0.04045, c)); }
22
+
23
+ // 32-bit integer hash (xorshift-multiply). Deterministic on every WebGL2 implementation because it
24
+ // only uses uint multiply, xor and shifts.
25
+ uint uhash(uint x) {
26
+ x ^= x >> 16u; x *= 0x7feb352du;
27
+ x ^= x >> 15u; x *= 0x846ca68bu;
28
+ x ^= x >> 16u;
29
+ return x;
30
+ }
31
+ uint uhash2(uvec2 v) { return uhash(v.x ^ uhash(v.y + 0x9e3779b9u)); }
32
+ uint uhash3(uvec3 v) { return uhash(v.x ^ uhash(v.y ^ uhash(v.z + 0x85ebca6bu))); }
33
+ float unit(uint h) { return float(h >> 8u) * (1.0 / 16777216.0); }
34
+ float hashCell(ivec2 c, uint seed) { return unit(uhash3(uvec3(uint(c.x), uint(c.y), seed))); }
35
+ float hashCell3(ivec3 c, uint seed) { return unit(uhash(uhash3(uvec3(c)) ^ seed)); }
36
+
37
+ vec2 quintic(vec2 t) { return t * t * t * (t * (t * 6.0 - 15.0) + 10.0); }
38
+ vec3 quintic(vec3 t) { return t * t * t * (t * (t * 6.0 - 15.0) + 10.0); }
39
+
40
+ // Value noise in [-1, 1].
41
+ float vnoise(vec2 p, uint seed) {
42
+ ivec2 i = ivec2(floor(p)); vec2 f = quintic(fract(p));
43
+ float a = hashCell(i, seed), b = hashCell(i + ivec2(1, 0), seed);
44
+ float c = hashCell(i + ivec2(0, 1), seed), d = hashCell(i + ivec2(1, 1), seed);
45
+ return mix(mix(a, b, f.x), mix(c, d, f.x), f.y) * 2.0 - 1.0;
46
+ }
47
+ float vnoise(vec3 p, uint seed) {
48
+ ivec3 i = ivec3(floor(p)); vec3 f = quintic(fract(p));
49
+ float n000 = hashCell3(i, seed), n100 = hashCell3(i + ivec3(1, 0, 0), seed);
50
+ float n010 = hashCell3(i + ivec3(0, 1, 0), seed), n110 = hashCell3(i + ivec3(1, 1, 0), seed);
51
+ float n001 = hashCell3(i + ivec3(0, 0, 1), seed), n101 = hashCell3(i + ivec3(1, 0, 1), seed);
52
+ float n011 = hashCell3(i + ivec3(0, 1, 1), seed), n111 = hashCell3(i + ivec3(1, 1, 1), seed);
53
+ float x00 = mix(n000, n100, f.x), x10 = mix(n010, n110, f.x), x01 = mix(n001, n101, f.x), x11 = mix(n011, n111, f.x);
54
+ return mix(mix(x00, x10, f.y), mix(x01, x11, f.y), f.z) * 2.0 - 1.0;
55
+ }
56
+ float fbm(vec3 p, int octaves, uint seed) {
57
+ float sum = 0.0, amp = 0.5;
58
+ for (int i = 0; i < 8; i++) {
59
+ if (i >= octaves) break;
60
+ sum += amp * vnoise(p, seed + uint(i) * 101u);
61
+ p = p * 2.02 + vec3(17.1, 9.3, 4.7);
62
+ amp *= 0.5;
63
+ }
64
+ return sum;
65
+ }
66
+ // Divergence-free flow direction from the gradient of a scalar noise field.
67
+ vec2 curl(vec2 p, float z, uint seed) {
68
+ const float e = 0.02;
69
+ float n1 = vnoise(vec3(p + vec2(0.0, e), z), seed), n2 = vnoise(vec3(p - vec2(0.0, e), z), seed);
70
+ float n3 = vnoise(vec3(p + vec2(e, 0.0), z), seed), n4 = vnoise(vec3(p - vec2(e, 0.0), z), seed);
71
+ return vec2(n1 - n2, n4 - n3) / (2.0 * e);
72
+ }
73
+
74
+ // Ordered-dither thresholds in [0, 1).
75
+ float bayer2(ivec2 p) { int x = p.x & 1, y = p.y & 1; return float((x ^ y) * 2 + y) / 4.0; }
76
+ float bayer4(ivec2 p) { return (bayer2(p / 2) + bayer2(p) * 4.0) / 4.0; }
77
+ float bayer8(ivec2 p) { return (bayer4(p / 2) + bayer2(p) * 16.0) / 4.0; }
78
+ `;
@@ -0,0 +1,6 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head><meta charset="utf-8"><title>lit-typographic-motion</title>
4
+ <style>html,body{margin:0;background:#000}canvas{display:block}</style></head>
5
+ <body><canvas id="gl" width="16" height="16"></canvas><script type="module" src="./boot.mjs"></script></body>
6
+ </html>
@@ -0,0 +1,112 @@
1
+ // GPU-instanced anti-aliased capsule segments in logical 2D pixel space (origin top-left, y down),
2
+ // one draw call per batch. Adapted from mexicat/pdoom-video app/src/engine/lines.ts (MIT, see
3
+ // ../NOTICE), reduced to the 2D case the look library needs (hairline rules, meters, strokes).
4
+ import { SCALE, W, H } from "./gl.mjs";
5
+
6
+ const VERT = `#version 300 es
7
+ precision highp float;
8
+ layout(location = 0) in vec2 corner;
9
+ layout(location = 1) in vec4 seg;
10
+ layout(location = 2) in vec4 color;
11
+ layout(location = 3) in float width;
12
+ uniform vec2 res; uniform float pxScale;
13
+ out vec2 vLocal; out float vLen; out float vHalf; out vec4 vColor;
14
+ void main() {
15
+ vec2 a = seg.xy * pxScale, b = seg.zw * pxScale;
16
+ float w = width * pxScale;
17
+ float hw = max(w * 0.5, 0.35) + 1.0;
18
+ vec2 d = b - a; float len = length(d);
19
+ vec2 dir = len > 1e-4 ? d / len : vec2(1.0, 0.0);
20
+ vec2 nrm = vec2(-dir.y, dir.x);
21
+ float along = mix(-hw, len + hw, corner.x);
22
+ vec2 p = a + dir * along + nrm * corner.y * hw;
23
+ vec2 physical = res * pxScale;
24
+ gl_Position = vec4(p.x / physical.x * 2.0 - 1.0, 1.0 - p.y / physical.y * 2.0, 0.0, 1.0);
25
+ vLocal = vec2(along, corner.y * hw);
26
+ vLen = len; vHalf = max(w * 0.5, 0.35);
27
+ vColor = color * vec4(1.0, 1.0, 1.0, min(1.0, w / 0.7));
28
+ }`;
29
+
30
+ const FRAG = `#version 300 es
31
+ precision highp float;
32
+ in vec2 vLocal; in float vLen; in float vHalf; in vec4 vColor;
33
+ out vec4 fragColor;
34
+ void main() {
35
+ float x = clamp(vLocal.x, 0.0, vLen);
36
+ float d = length(vec2(vLocal.x - x, vLocal.y)) - vHalf;
37
+ float a = clamp(0.5 - d, 0.0, 1.0) * vColor.a;
38
+ if (a <= 0.0) discard;
39
+ fragColor = vec4(vColor.rgb * a, a);
40
+ }`;
41
+
42
+ export class LineBatch {
43
+ constructor(glw, capacity = 256) {
44
+ this.glw = glw;
45
+ const gl = glw.gl;
46
+ this.capacity = capacity;
47
+ this.data = new Float32Array(capacity * 9);
48
+ this.count = 0;
49
+ const compile = (type, source) => {
50
+ const s = gl.createShader(type);
51
+ gl.shaderSource(s, source);
52
+ gl.compileShader(s);
53
+ if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) throw new Error(`line shader: ${gl.getShaderInfoLog(s)}`);
54
+ return s;
55
+ };
56
+ this.program = gl.createProgram();
57
+ gl.attachShader(this.program, compile(gl.VERTEX_SHADER, VERT));
58
+ gl.attachShader(this.program, compile(gl.FRAGMENT_SHADER, FRAG));
59
+ gl.linkProgram(this.program);
60
+ if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) throw new Error(`line program: ${gl.getProgramInfoLog(this.program)}`);
61
+ this.uRes = gl.getUniformLocation(this.program, "res");
62
+ this.uScale = gl.getUniformLocation(this.program, "pxScale");
63
+ this.vao = gl.createVertexArray();
64
+ gl.bindVertexArray(this.vao);
65
+ const quad = gl.createBuffer();
66
+ gl.bindBuffer(gl.ARRAY_BUFFER, quad);
67
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, -1, 1, -1, 1, 1, 0, -1, 1, 1, 0, 1]), gl.STATIC_DRAW);
68
+ gl.enableVertexAttribArray(0);
69
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
70
+ this.instances = gl.createBuffer();
71
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.instances);
72
+ gl.bufferData(gl.ARRAY_BUFFER, this.data.byteLength, gl.DYNAMIC_DRAW);
73
+ const stride = 9 * 4;
74
+ gl.enableVertexAttribArray(1);
75
+ gl.vertexAttribPointer(1, 4, gl.FLOAT, false, stride, 0);
76
+ gl.vertexAttribDivisor(1, 1);
77
+ gl.enableVertexAttribArray(2);
78
+ gl.vertexAttribPointer(2, 4, gl.FLOAT, false, stride, 16);
79
+ gl.vertexAttribDivisor(2, 1);
80
+ gl.enableVertexAttribArray(3);
81
+ gl.vertexAttribPointer(3, 1, gl.FLOAT, false, stride, 32);
82
+ gl.vertexAttribDivisor(3, 1);
83
+ gl.bindVertexArray(null);
84
+ }
85
+ clear() {
86
+ this.count = 0;
87
+ }
88
+ /** Segment from (x0, y0) to (x1, y1) in logical px; colour is linear RGB plus alpha. */
89
+ segment(x0, y0, x1, y1, width, rgb, alpha = 1) {
90
+ if (this.count >= this.capacity) throw new Error(`LineBatch capacity ${this.capacity} exceeded`);
91
+ this.data.set([x0, y0, x1, y1, rgb[0], rgb[1], rgb[2], alpha, width], this.count * 9);
92
+ this.count += 1;
93
+ }
94
+ /** Draw every queued segment over `target` in one instanced call. Returns the draw count (0|1). */
95
+ draw(target, { pass = null } = {}) {
96
+ if (this.count === 0) return 0;
97
+ const { glw } = this;
98
+ const gl = glw.gl;
99
+ glw.bind(target);
100
+ gl.useProgram(this.program);
101
+ gl.uniform2f(this.uRes, W, H);
102
+ gl.uniform1f(this.uScale, SCALE);
103
+ glw.blend("normal");
104
+ gl.bindVertexArray(this.vao);
105
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.instances);
106
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.data, 0, this.count * 9);
107
+ gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, this.count);
108
+ gl.bindVertexArray(null);
109
+ if (pass) glw.tracker.draw(pass, { segments: this.count });
110
+ return 1;
111
+ }
112
+ }
@@ -0,0 +1,98 @@
1
+ // crt (MO-SH-07): barrel curvature, scanlines, a subtle aperture triad, a local glow, vignette and a
2
+ // capped brightness flicker. Scanlines, curvature and vignette are pure functions of position, so
3
+ // they carry no flash risk; the flicker multiplier is computed on the CPU, logged every frame and
4
+ // capped at 0.06 peak-to-peak, below the flash audit's 0.1 trigger by construction. The boot
5
+ // flicker is the same capped multiplier over the shot's first 250 ms and counts as one event.
6
+ //
7
+ // Phosphor persistence is finite-memory: it blends in the previous sub-sample's crt input, never
8
+ // its own output, so a seek that replays the preroll reproduces it exactly. It is only allowed on
9
+ // a stateful shot; the gate fails a manifest that enables it anywhere else.
10
+ import { SHADER } from "../../core/constants.mjs";
11
+ import { Pass } from "../gl.mjs";
12
+
13
+ const FRAG = /* glsl */ `
14
+ uniform sampler2D src; uniform sampler2D u_prev; uniform uint u_seed;
15
+ uniform float u_scanlineFreqPerFrame, u_scanlineDepth, u_phosphorPersistence, u_bloomAmount, u_curvature, u_vignette, u_triadMaskAmount, u_flicker;
16
+ vec2 barrel(vec2 uv) {
17
+ vec2 d = uv - 0.5;
18
+ return uv + d * dot(d, d) * u_curvature * 2.0;
19
+ }
20
+ void main() {
21
+ vec2 uv = barrel(vUv);
22
+ if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { fragColor = vec4(0.0); return; }
23
+ vec4 c = texture(src, uv);
24
+ vec3 col = c.rgb;
25
+ if (u_phosphorPersistence > 0.0) col += texture(u_prev, uv).rgb * u_phosphorPersistence;
26
+ if (u_bloomAmount > 0.0) {
27
+ vec2 px = 1.5 / LOGICAL;
28
+ vec3 glow = texture(src, uv + vec2(px.x, 0.0)).rgb + texture(src, uv - vec2(px.x, 0.0)).rgb
29
+ + texture(src, uv + vec2(0.0, px.y)).rgb + texture(src, uv - vec2(0.0, px.y)).rgb;
30
+ col += max(glow * 0.25 - 0.35, 0.0) * u_bloomAmount;
31
+ }
32
+ float y = uv.y * LOGICAL.y;
33
+ float scan = 0.5 + 0.5 * cos(y * TAU * u_scanlineFreqPerFrame / LOGICAL.y);
34
+ col *= 1.0 - u_scanlineDepth * (1.0 - scan);
35
+ int column = int(floor(FRAG_PX.x)) % 3;
36
+ vec3 triad = column == 0 ? vec3(1.0, 0.82, 0.82) : column == 1 ? vec3(0.82, 1.0, 0.82) : vec3(0.82, 0.82, 1.0);
37
+ float grainStatic = (unit(uhash3(uvec3(uvec2(FRAG_PX), u_seed))) - 0.5) * 0.04;
38
+ col *= mix(vec3(1.0), triad * (1.0 + grainStatic), u_triadMaskAmount);
39
+ vec2 d = uv - 0.5;
40
+ col *= mix(1.0, smoothstep(0.75, 0.2, length(d * vec2(1.0, 0.9))), u_vignette);
41
+ col *= u_flicker;
42
+ fragColor = vec4(col, c.a);
43
+ }`;
44
+
45
+ export class Crt {
46
+ constructor(glw, { params, software }) {
47
+ this.id = "crt";
48
+ this.category = "filter";
49
+ this.glw = glw;
50
+ this.params = { ...params, flickerAmp: Math.min(SHADER.crtFlickerCap, params.flickerAmp) };
51
+ this.downgraded = Boolean(software);
52
+ if (software) this.params.phosphorPersistence = 0;
53
+ this.pass = new Pass(glw, FRAG, { pass: this.id });
54
+ this.history = null;
55
+ }
56
+ get persistence() {
57
+ return this.params.phosphorPersistence > 0;
58
+ }
59
+ shotState(seed, events, shot) {
60
+ const boot = events.add(shot.start, "boot-flicker") ? shot.start : null;
61
+ return { seed, boot };
62
+ }
63
+ resetHistory() {
64
+ if (this.history) this.glw.clear(this.history, [0, 0, 0], 0);
65
+ }
66
+ /** Flicker multiplier at t: base amplitude, or the cap during the boot window. */
67
+ flicker(t, state) {
68
+ const p = this.params;
69
+ const booting = state.boot !== null && t >= state.boot && t < state.boot + 0.25;
70
+ const amp = booting ? SHADER.crtFlickerCap : p.flickerAmp;
71
+ return 1 + 0.5 * amp * Math.sin(Math.PI * 2 * p.flickerFreqHz * t);
72
+ }
73
+ apply(src, dst, f, state) {
74
+ const p = this.params;
75
+ if (this.persistence && !this.history) {
76
+ this.history = this.glw.target();
77
+ this.resetHistory();
78
+ }
79
+ this.pass.draw(dst, {
80
+ src, u_prev: this.history ? this.history.tex : src, u_seed: state.seed, u_scanlineFreqPerFrame: p.scanlineFreqPerFrame,
81
+ u_scanlineDepth: p.scanlineDepth, u_phosphorPersistence: p.phosphorPersistence, u_bloomAmount: p.bloomAmount,
82
+ u_curvature: p.curvature, u_vignette: p.vignette, u_triadMaskAmount: p.triadMaskAmount, u_flicker: this.flicker(f.t, state),
83
+ });
84
+ if (this.persistence) this.copyHistory(src);
85
+ }
86
+ copyHistory(src) {
87
+ if (!this.copy) this.copy = new Pass(this.glw, "uniform sampler2D src; void main() { fragColor = texture(src, vUv); }");
88
+ this.copy.draw(this.history, { src });
89
+ }
90
+ manifestParams(state) {
91
+ const p = this.params;
92
+ return {
93
+ scanlineFreq: p.scanlineFreqPerFrame, scanlineDepth: p.scanlineDepth, curvature: p.curvature, vignette: p.vignette,
94
+ flickerAmp: p.flickerAmp, flickerFreqHz: p.flickerFreqHz, persistenceEnabled: this.persistence,
95
+ bootFlickerTimes: state.boot === null ? [] : [+state.boot.toFixed(4)],
96
+ };
97
+ }
98
+ }
@@ -0,0 +1,49 @@
1
+ // dither (MO-SH-08): ordered-dither quantization locked to screen space. Bayer modes take no seed;
2
+ // mode 3 offsets an interleaved-gradient-noise tile by the shot seed. The seed is set once per shot
3
+ // and never changes inside it, so the pattern cannot become a per-frame luminance flicker.
4
+ import { Pass } from "../gl.mjs";
5
+
6
+ const FRAG = /* glsl */ `
7
+ uniform sampler2D src; uniform int u_ditherMode; uniform int u_paletteSize; uniform int u_pixelScale;
8
+ uniform float u_ditherStrength; uniform uint u_seed;
9
+ float threshold(ivec2 cell) {
10
+ if (u_ditherMode == 0) return bayer2(cell);
11
+ if (u_ditherMode == 1) return bayer4(cell);
12
+ if (u_ditherMode == 2) return bayer8(cell);
13
+ // Interleaved gradient noise with a per-shot tile offset: a cheap stand-in for a blue-noise tile.
14
+ vec2 p = vec2(cell) + vec2(float(u_seed & 255u), float((u_seed >> 8u) & 255u));
15
+ return fract(52.9829189 * fract(dot(p, vec2(0.06711056, 0.00583715))));
16
+ }
17
+ void main() {
18
+ vec4 c = texture(src, vUv);
19
+ vec3 s = toSRGB(sat(c.rgb));
20
+ ivec2 cell = ivec2(floor(FRAG_PX / float(max(u_pixelScale, 1))));
21
+ float levels = u_paletteSize > 1 ? float(u_paletteSize - 1) : 31.0;
22
+ vec3 q = floor(s * levels + threshold(cell)) / levels;
23
+ s = mix(s, sat(q), u_ditherStrength);
24
+ fragColor = vec4(toLinear(s) + max(c.rgb - 1.0, 0.0), c.a);
25
+ }`;
26
+
27
+ export class Dither {
28
+ constructor(glw, { params }) {
29
+ this.id = "dither";
30
+ this.category = "filter";
31
+ this.params = { ...params };
32
+ this.pass = new Pass(glw, FRAG, { pass: this.id });
33
+ }
34
+ shotState(seed) {
35
+ return { seed };
36
+ }
37
+ apply(src, dst, f, state, { stillOverrides } = {}) {
38
+ const p = this.params;
39
+ // The blue-noise stand-in is a random source; the poster and reduced-motion still turn it off.
40
+ const noiseOff = stillOverrides?.noise === 0 && p.mode === 3;
41
+ this.pass.draw(dst, {
42
+ src, u_ditherMode: p.mode, u_paletteSize: p.paletteSize, u_pixelScale: p.pixelScale,
43
+ u_ditherStrength: noiseOff ? 0 : p.strength, u_seed: state.seed,
44
+ });
45
+ }
46
+ manifestParams() {
47
+ return { mode: this.params.mode, paletteSize: this.params.paletteSize, pixelScale: this.params.pixelScale, strength: this.params.strength };
48
+ }
49
+ }