@litfamily/litopencode 1.0.7 → 1.0.9

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 (723) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README-Ko-KR.md +314 -31
  3. package/README.md +312 -29
  4. package/dist/activation-primary-prompts.d.ts +1 -0
  5. package/dist/activation-primary-prompts.js +16 -0
  6. package/dist/activation-probe.js +4 -1
  7. package/dist/activation-prompt-utils.d.ts +1 -1
  8. package/dist/activation-routing.d.ts +6 -1
  9. package/dist/activation-routing.js +174 -16
  10. package/dist/activation-workflow-prompts.d.ts +1 -1
  11. package/dist/activation-workflow-prompts.js +18 -17
  12. package/dist/activation.d.ts +3 -2
  13. package/dist/activation.js +6 -6
  14. package/dist/agents/defaults.js +14 -6
  15. package/dist/cli/command-aliases.js +24 -22
  16. package/dist/cli/doctor.js +3 -0
  17. package/dist/cli/install-report.d.ts +1 -0
  18. package/dist/cli/install-report.js +4 -0
  19. package/dist/cli/install.js +7 -4
  20. package/dist/cli/managed-skill-assets.d.ts +1 -1
  21. package/dist/cli/managed-skill-assets.js +15 -5
  22. package/dist/cli/motion-runtime.d.ts +6 -0
  23. package/dist/cli/motion-runtime.js +46 -0
  24. package/dist/cli/native-skill-install.js +32 -9
  25. package/dist/cli/native-skill-integrity.js +1 -0
  26. package/dist/cli/native-skills.d.ts +2 -0
  27. package/dist/cli/native-skills.js +2 -1
  28. package/dist/cli/office-dependencies.d.ts +14 -0
  29. package/dist/cli/office-dependencies.js +24 -0
  30. package/dist/cli.js +13 -3
  31. package/dist/commands.d.ts +2 -11
  32. package/dist/commands.js +9 -17
  33. package/dist/deliverable-hedge-guard.d.ts +20 -21
  34. package/dist/deliverable-hedge-guard.js +234 -275
  35. package/dist/features.d.ts +81 -2
  36. package/dist/features.js +80 -13
  37. package/dist/hooks.d.ts +3 -2
  38. package/dist/hooks.js +4 -4
  39. package/dist/ignition.d.ts +1 -1
  40. package/dist/ignition.js +15 -4
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/interface-handoff.d.ts +1 -0
  44. package/dist/interface-handoff.js +1 -0
  45. package/dist/motion-image-reads.d.ts +6 -0
  46. package/dist/motion-image-reads.js +46 -0
  47. package/dist/server.js +13 -11
  48. package/dist/skill-renames.d.ts +4 -2
  49. package/dist/skill-renames.js +12 -4
  50. package/dist/skills.d.ts +31 -3
  51. package/dist/skills.js +53 -9
  52. package/dist/tools.js +4 -4
  53. package/docs/ab/S11/baseline-desktop.webp +0 -0
  54. package/docs/ab/S11/baseline-phone.webp +0 -0
  55. package/docs/ab/S11/lit-desktop.webp +0 -0
  56. package/docs/ab/S11/lit-phone.webp +0 -0
  57. package/docs/ab/S3/baseline-desktop.webp +0 -0
  58. package/docs/ab/S3/baseline-phone.webp +0 -0
  59. package/docs/ab/S3/lit-desktop.webp +0 -0
  60. package/docs/ab/S3/lit-phone.webp +0 -0
  61. package/docs/ab/S4/baseline-desktop.webp +0 -0
  62. package/docs/ab/S4/baseline-phone.webp +0 -0
  63. package/docs/ab/S4/lit-desktop.webp +0 -0
  64. package/docs/ab/S4/lit-phone.webp +0 -0
  65. package/docs/ab/S5/lit-slides.webp +0 -0
  66. package/docs/ab/S7/lit-diagram.webp +0 -0
  67. package/docs/ab/S8/baseline-slides.webp +0 -0
  68. package/docs/ab/S8/lit-slides.webp +0 -0
  69. package/docs/ab/S9/lit-pages.webp +0 -0
  70. package/docs/assets/cover-motion-still.webp +0 -0
  71. package/docs/assets/cover-motion.webp +0 -0
  72. package/docs/assets/readme/badge-version.svg +1 -1
  73. package/docs/assets/skills/autoconference.webp +0 -0
  74. package/docs/assets/skills/automatic-guards.webp +0 -0
  75. package/docs/assets/skills/autoresearch.webp +0 -0
  76. package/docs/assets/skills/browser-drive.webp +0 -0
  77. package/docs/assets/skills/debugging.webp +0 -0
  78. package/docs/assets/skills/deep-interview.webp +0 -0
  79. package/docs/assets/skills/doctor-installer.webp +0 -0
  80. package/docs/assets/skills/durable-litgoal.webp +0 -0
  81. package/docs/assets/skills/frontend-ui-ux.webp +0 -0
  82. package/docs/assets/skills/lit-burnoff-file.webp +0 -0
  83. package/docs/assets/skills/lit-burnoff.webp +0 -0
  84. package/docs/assets/skills/lit-code.webp +0 -0
  85. package/docs/assets/skills/lit-commit.webp +0 -0
  86. package/docs/assets/skills/lit-comprehend.webp +0 -0
  87. package/docs/assets/skills/lit-crucible.webp +0 -0
  88. package/docs/assets/skills/lit-diagram-drawer.webp +0 -0
  89. package/docs/assets/skills/lit-docx.webp +0 -0
  90. package/docs/assets/skills/lit-fetch.webp +0 -0
  91. package/docs/assets/skills/lit-handoff.webp +0 -0
  92. package/docs/assets/skills/lit-humanizer.webp +0 -0
  93. package/docs/assets/skills/lit-init.webp +0 -0
  94. package/docs/assets/skills/lit-plan.webp +0 -0
  95. package/docs/assets/skills/lit-pptx.webp +0 -0
  96. package/docs/assets/skills/lit-recap.webp +0 -0
  97. package/docs/assets/skills/lit-scientific-visualization.webp +0 -0
  98. package/docs/assets/skills/lit-typographic-motion.webp +0 -0
  99. package/docs/assets/skills/litresearch.webp +0 -0
  100. package/docs/assets/skills/litwork.webp +0 -0
  101. package/docs/assets/skills/lsp-setup.webp +0 -0
  102. package/docs/assets/skills/lsp.webp +0 -0
  103. package/docs/assets/skills/readme-studio.webp +0 -0
  104. package/docs/assets/skills/refactor.webp +0 -0
  105. package/docs/assets/skills/review-work.webp +0 -0
  106. package/docs/assets/skills/rules.webp +0 -0
  107. package/docs/assets/skills/start-work.webp +0 -0
  108. package/docs/assets/skills/structural-search.webp +0 -0
  109. package/docs/assets/skills/visual-qa.webp +0 -0
  110. package/docs/assets/skills/wikify.webp +0 -0
  111. package/docs/reference-Ko-KR.md +5 -1
  112. package/docs/reference.md +6 -2
  113. package/package.json +1 -1
  114. package/rules/bundled-rules/lit-humanizer.md +12 -0
  115. package/skills/autoconference/SKILL.md +1 -1
  116. package/skills/autoconference/assets/report_template.md +1 -1
  117. package/skills/autoresearch/references/type-checklists.md +1 -1
  118. package/skills/browser-drive/SKILL.md +19 -5
  119. package/skills/browser-drive/scripts/capability-probe.mjs +26 -5
  120. package/skills/frontend-ui-ux/SKILL.md +10 -15
  121. package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +10 -0
  122. package/skills/frontend-ui-ux/references/adaptive-layout.md +3 -11
  123. package/skills/frontend-ui-ux/references/brand-and-imagery.md +6 -11
  124. package/skills/frontend-ui-ux/references/complete-contract.md +10 -3
  125. package/skills/frontend-ui-ux/references/composition.md +1 -7
  126. package/skills/frontend-ui-ux/references/craft-floor.md +94 -0
  127. package/skills/frontend-ui-ux/references/creative-directions.md +1 -7
  128. package/skills/frontend-ui-ux/references/evidence-review.md +2 -12
  129. package/skills/frontend-ui-ux/references/implementation-platforms.md +1 -4
  130. package/skills/frontend-ui-ux/references/inclusive-interface.md +1 -3
  131. package/skills/frontend-ui-ux/references/interaction-motion.md +1 -7
  132. package/skills/frontend-ui-ux/references/motion-guide.md +125 -0
  133. package/skills/frontend-ui-ux/references/operating-lanes.md +2 -8
  134. package/skills/frontend-ui-ux/references/product-direction.md +1 -6
  135. package/skills/frontend-ui-ux/references/production.md +12 -5
  136. package/skills/frontend-ui-ux/references/redesign-playbook.md +1 -7
  137. package/skills/frontend-ui-ux/references/slop-register.md +103 -0
  138. package/skills/frontend-ui-ux/references/system-foundations.md +1 -8
  139. package/skills/frontend-ui-ux/references/taste-direction.md +4 -11
  140. package/skills/frontend-ui-ux/references/visual-language.md +1 -6
  141. package/skills/frontend-ui-ux/references/visual-reconstruction.md +2 -7
  142. package/skills/frontend-ui-ux/scripts/probe-page.mjs +326 -0
  143. package/skills/frontend-ui-ux/scripts/probe-server.mjs +24 -0
  144. package/skills/frontend-ui-ux/scripts/probe-static.mjs +42 -0
  145. package/skills/frontend-ui-ux/scripts/probe-thresholds.json +86 -0
  146. package/skills/frontend-ui-ux/scripts/probe.mjs +183 -0
  147. package/skills/lit-comprehend/SKILL.md +10 -11
  148. package/skills/lit-comprehend/references/artifact-template.md +2 -18
  149. package/skills/lit-comprehend/scripts/verify-explainer.ts +0 -14
  150. package/skills/lit-diagram-drawer/NOTICE.md +33 -0
  151. package/skills/lit-diagram-drawer/SKILL.md +101 -0
  152. package/skills/lit-diagram-drawer/assets/examples/type-architecture-dark.html +1 -0
  153. package/skills/lit-diagram-drawer/assets/examples/type-architecture-full.html +1 -0
  154. package/skills/lit-diagram-drawer/assets/examples/type-architecture-light.html +1 -0
  155. package/skills/lit-diagram-drawer/assets/examples/type-bar-dark.html +1 -0
  156. package/skills/lit-diagram-drawer/assets/examples/type-bar-full.html +1 -0
  157. package/skills/lit-diagram-drawer/assets/examples/type-bar-light.html +1 -0
  158. package/skills/lit-diagram-drawer/assets/examples/type-beeswarm-dark.html +1 -0
  159. package/skills/lit-diagram-drawer/assets/examples/type-beeswarm-full.html +1 -0
  160. package/skills/lit-diagram-drawer/assets/examples/type-beeswarm-light.html +1 -0
  161. package/skills/lit-diagram-drawer/assets/examples/type-bubble-dark.html +1 -0
  162. package/skills/lit-diagram-drawer/assets/examples/type-bubble-full.html +1 -0
  163. package/skills/lit-diagram-drawer/assets/examples/type-bubble-light.html +1 -0
  164. package/skills/lit-diagram-drawer/assets/examples/type-bump-dark.html +1 -0
  165. package/skills/lit-diagram-drawer/assets/examples/type-bump-full.html +1 -0
  166. package/skills/lit-diagram-drawer/assets/examples/type-bump-light.html +1 -0
  167. package/skills/lit-diagram-drawer/assets/examples/type-data-flow-dark.html +1 -0
  168. package/skills/lit-diagram-drawer/assets/examples/type-data-flow-full.html +1 -0
  169. package/skills/lit-diagram-drawer/assets/examples/type-data-flow-light.html +1 -0
  170. package/skills/lit-diagram-drawer/assets/examples/type-datalake-dark.html +1 -0
  171. package/skills/lit-diagram-drawer/assets/examples/type-datalake-full.html +1 -0
  172. package/skills/lit-diagram-drawer/assets/examples/type-datalake-light.html +1 -0
  173. package/skills/lit-diagram-drawer/assets/examples/type-db-schema-dark.html +1 -0
  174. package/skills/lit-diagram-drawer/assets/examples/type-db-schema-full.html +1 -0
  175. package/skills/lit-diagram-drawer/assets/examples/type-db-schema-light.html +1 -0
  176. package/skills/lit-diagram-drawer/assets/examples/type-dependency-dark.html +1 -0
  177. package/skills/lit-diagram-drawer/assets/examples/type-dependency-full.html +1 -0
  178. package/skills/lit-diagram-drawer/assets/examples/type-dependency-light.html +1 -0
  179. package/skills/lit-diagram-drawer/assets/examples/type-deployment-dark.html +1 -0
  180. package/skills/lit-diagram-drawer/assets/examples/type-deployment-full.html +1 -0
  181. package/skills/lit-diagram-drawer/assets/examples/type-deployment-light.html +1 -0
  182. package/skills/lit-diagram-drawer/assets/examples/type-dp-integration-dark.html +1 -0
  183. package/skills/lit-diagram-drawer/assets/examples/type-dp-integration-full.html +1 -0
  184. package/skills/lit-diagram-drawer/assets/examples/type-dp-integration-light.html +1 -0
  185. package/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-dark.html +1 -0
  186. package/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-full.html +1 -0
  187. package/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-light.html +1 -0
  188. package/skills/lit-diagram-drawer/assets/examples/type-er-dark.html +1 -0
  189. package/skills/lit-diagram-drawer/assets/examples/type-er-full.html +1 -0
  190. package/skills/lit-diagram-drawer/assets/examples/type-er-light.html +1 -0
  191. package/skills/lit-diagram-drawer/assets/examples/type-fishbone-dark.html +1 -0
  192. package/skills/lit-diagram-drawer/assets/examples/type-fishbone-full.html +1 -0
  193. package/skills/lit-diagram-drawer/assets/examples/type-fishbone-light.html +1 -0
  194. package/skills/lit-diagram-drawer/assets/examples/type-flowchart-dark.html +1 -0
  195. package/skills/lit-diagram-drawer/assets/examples/type-flowchart-full.html +1 -0
  196. package/skills/lit-diagram-drawer/assets/examples/type-flowchart-light.html +1 -0
  197. package/skills/lit-diagram-drawer/assets/examples/type-gantt-dark.html +1 -0
  198. package/skills/lit-diagram-drawer/assets/examples/type-gantt-full.html +1 -0
  199. package/skills/lit-diagram-drawer/assets/examples/type-gantt-light.html +1 -0
  200. package/skills/lit-diagram-drawer/assets/examples/type-heatmap-dark.html +1 -0
  201. package/skills/lit-diagram-drawer/assets/examples/type-heatmap-full.html +1 -0
  202. package/skills/lit-diagram-drawer/assets/examples/type-heatmap-light.html +1 -0
  203. package/skills/lit-diagram-drawer/assets/examples/type-high-level-dark.html +1 -0
  204. package/skills/lit-diagram-drawer/assets/examples/type-high-level-full.html +1 -0
  205. package/skills/lit-diagram-drawer/assets/examples/type-high-level-light.html +1 -0
  206. package/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-dark.html +1 -0
  207. package/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-full.html +1 -0
  208. package/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-light.html +1 -0
  209. package/skills/lit-diagram-drawer/assets/examples/type-import-drawio-dark.html +1 -0
  210. package/skills/lit-diagram-drawer/assets/examples/type-import-drawio-full.html +1 -0
  211. package/skills/lit-diagram-drawer/assets/examples/type-import-drawio-light.html +1 -0
  212. package/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-dark.html +1 -0
  213. package/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-full.html +1 -0
  214. package/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-light.html +1 -0
  215. package/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-dark.html +1 -0
  216. package/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-full.html +1 -0
  217. package/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-light.html +1 -0
  218. package/skills/lit-diagram-drawer/assets/examples/type-it-state-dark.html +1 -0
  219. package/skills/lit-diagram-drawer/assets/examples/type-it-state-full.html +1 -0
  220. package/skills/lit-diagram-drawer/assets/examples/type-it-state-light.html +1 -0
  221. package/skills/lit-diagram-drawer/assets/examples/type-journey-dark.html +1 -0
  222. package/skills/lit-diagram-drawer/assets/examples/type-journey-full.html +1 -0
  223. package/skills/lit-diagram-drawer/assets/examples/type-journey-light.html +1 -0
  224. package/skills/lit-diagram-drawer/assets/examples/type-kanban-dark.html +1 -0
  225. package/skills/lit-diagram-drawer/assets/examples/type-kanban-full.html +1 -0
  226. package/skills/lit-diagram-drawer/assets/examples/type-kanban-light.html +1 -0
  227. package/skills/lit-diagram-drawer/assets/examples/type-layers-dark.html +1 -0
  228. package/skills/lit-diagram-drawer/assets/examples/type-layers-full.html +1 -0
  229. package/skills/lit-diagram-drawer/assets/examples/type-layers-light.html +1 -0
  230. package/skills/lit-diagram-drawer/assets/examples/type-line-dark.html +1 -0
  231. package/skills/lit-diagram-drawer/assets/examples/type-line-full.html +1 -0
  232. package/skills/lit-diagram-drawer/assets/examples/type-line-light.html +1 -0
  233. package/skills/lit-diagram-drawer/assets/examples/type-loop-dark.html +1 -0
  234. package/skills/lit-diagram-drawer/assets/examples/type-loop-full.html +1 -0
  235. package/skills/lit-diagram-drawer/assets/examples/type-loop-light.html +1 -0
  236. package/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-dark.html +1 -0
  237. package/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-full.html +1 -0
  238. package/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-light.html +1 -0
  239. package/skills/lit-diagram-drawer/assets/examples/type-marimekko-dark.html +1 -0
  240. package/skills/lit-diagram-drawer/assets/examples/type-marimekko-full.html +1 -0
  241. package/skills/lit-diagram-drawer/assets/examples/type-marimekko-light.html +1 -0
  242. package/skills/lit-diagram-drawer/assets/examples/type-medallion-dark.html +1 -0
  243. package/skills/lit-diagram-drawer/assets/examples/type-medallion-full.html +1 -0
  244. package/skills/lit-diagram-drawer/assets/examples/type-medallion-light.html +1 -0
  245. package/skills/lit-diagram-drawer/assets/examples/type-nested-dark.html +1 -0
  246. package/skills/lit-diagram-drawer/assets/examples/type-nested-full.html +1 -0
  247. package/skills/lit-diagram-drawer/assets/examples/type-nested-light.html +1 -0
  248. package/skills/lit-diagram-drawer/assets/examples/type-org-chart-dark.html +1 -0
  249. package/skills/lit-diagram-drawer/assets/examples/type-org-chart-full.html +1 -0
  250. package/skills/lit-diagram-drawer/assets/examples/type-org-chart-light.html +1 -0
  251. package/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-dark.html +1 -0
  252. package/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-full.html +1 -0
  253. package/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-light.html +1 -0
  254. package/skills/lit-diagram-drawer/assets/examples/type-polar-dark.html +1 -0
  255. package/skills/lit-diagram-drawer/assets/examples/type-polar-full.html +1 -0
  256. package/skills/lit-diagram-drawer/assets/examples/type-polar-light.html +1 -0
  257. package/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-dark.html +1 -0
  258. package/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-full.html +1 -0
  259. package/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-light.html +1 -0
  260. package/skills/lit-diagram-drawer/assets/examples/type-process-dark.html +1 -0
  261. package/skills/lit-diagram-drawer/assets/examples/type-process-full.html +1 -0
  262. package/skills/lit-diagram-drawer/assets/examples/type-process-light.html +1 -0
  263. package/skills/lit-diagram-drawer/assets/examples/type-pyramid-dark.html +1 -0
  264. package/skills/lit-diagram-drawer/assets/examples/type-pyramid-full.html +1 -0
  265. package/skills/lit-diagram-drawer/assets/examples/type-pyramid-light.html +1 -0
  266. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-dark.html +1 -0
  267. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-full.html +1 -0
  268. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-light.html +1 -0
  269. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-dark.html +1 -0
  270. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-full.html +1 -0
  271. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-light.html +1 -0
  272. package/skills/lit-diagram-drawer/assets/examples/type-queue-animated-dark.html +1 -0
  273. package/skills/lit-diagram-drawer/assets/examples/type-queue-animated-full.html +1 -0
  274. package/skills/lit-diagram-drawer/assets/examples/type-queue-animated-light.html +1 -0
  275. package/skills/lit-diagram-drawer/assets/examples/type-radar-dark.html +1 -0
  276. package/skills/lit-diagram-drawer/assets/examples/type-radar-full.html +1 -0
  277. package/skills/lit-diagram-drawer/assets/examples/type-radar-light.html +1 -0
  278. package/skills/lit-diagram-drawer/assets/examples/type-ridgeline-dark.html +1 -0
  279. package/skills/lit-diagram-drawer/assets/examples/type-ridgeline-full.html +1 -0
  280. package/skills/lit-diagram-drawer/assets/examples/type-ridgeline-light.html +1 -0
  281. package/skills/lit-diagram-drawer/assets/examples/type-sankey-dark.html +1 -0
  282. package/skills/lit-diagram-drawer/assets/examples/type-sankey-full.html +1 -0
  283. package/skills/lit-diagram-drawer/assets/examples/type-sankey-light.html +1 -0
  284. package/skills/lit-diagram-drawer/assets/examples/type-scatter-dark.html +1 -0
  285. package/skills/lit-diagram-drawer/assets/examples/type-scatter-full.html +1 -0
  286. package/skills/lit-diagram-drawer/assets/examples/type-scatter-light.html +1 -0
  287. package/skills/lit-diagram-drawer/assets/examples/type-sequence-dark.html +1 -0
  288. package/skills/lit-diagram-drawer/assets/examples/type-sequence-full.html +1 -0
  289. package/skills/lit-diagram-drawer/assets/examples/type-sequence-light.html +1 -0
  290. package/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-dark.html +1 -0
  291. package/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-full.html +1 -0
  292. package/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-light.html +1 -0
  293. package/skills/lit-diagram-drawer/assets/examples/type-slopegraph-dark.html +1 -0
  294. package/skills/lit-diagram-drawer/assets/examples/type-slopegraph-full.html +1 -0
  295. package/skills/lit-diagram-drawer/assets/examples/type-slopegraph-light.html +1 -0
  296. package/skills/lit-diagram-drawer/assets/examples/type-state-dark.html +1 -0
  297. package/skills/lit-diagram-drawer/assets/examples/type-state-full.html +1 -0
  298. package/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-dark.html +1 -0
  299. package/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-full.html +1 -0
  300. package/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-light.html +1 -0
  301. package/skills/lit-diagram-drawer/assets/examples/type-state-light.html +1 -0
  302. package/skills/lit-diagram-drawer/assets/examples/type-story-map-dark.html +1 -0
  303. package/skills/lit-diagram-drawer/assets/examples/type-story-map-full.html +1 -0
  304. package/skills/lit-diagram-drawer/assets/examples/type-story-map-light.html +1 -0
  305. package/skills/lit-diagram-drawer/assets/examples/type-streamgraph-dark.html +1 -0
  306. package/skills/lit-diagram-drawer/assets/examples/type-streamgraph-full.html +1 -0
  307. package/skills/lit-diagram-drawer/assets/examples/type-streamgraph-light.html +1 -0
  308. package/skills/lit-diagram-drawer/assets/examples/type-swimlane-dark.html +1 -0
  309. package/skills/lit-diagram-drawer/assets/examples/type-swimlane-full.html +1 -0
  310. package/skills/lit-diagram-drawer/assets/examples/type-swimlane-light.html +1 -0
  311. package/skills/lit-diagram-drawer/assets/examples/type-timeline-dark.html +1 -0
  312. package/skills/lit-diagram-drawer/assets/examples/type-timeline-full.html +1 -0
  313. package/skills/lit-diagram-drawer/assets/examples/type-timeline-light.html +1 -0
  314. package/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-dark.html +1 -0
  315. package/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-full.html +1 -0
  316. package/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-light.html +1 -0
  317. package/skills/lit-diagram-drawer/assets/examples/type-tree-dark.html +1 -0
  318. package/skills/lit-diagram-drawer/assets/examples/type-tree-full.html +1 -0
  319. package/skills/lit-diagram-drawer/assets/examples/type-tree-light.html +1 -0
  320. package/skills/lit-diagram-drawer/assets/examples/type-treemap-dark.html +1 -0
  321. package/skills/lit-diagram-drawer/assets/examples/type-treemap-full.html +1 -0
  322. package/skills/lit-diagram-drawer/assets/examples/type-treemap-light.html +1 -0
  323. package/skills/lit-diagram-drawer/assets/examples/type-uml-class-dark.html +1 -0
  324. package/skills/lit-diagram-drawer/assets/examples/type-uml-class-full.html +1 -0
  325. package/skills/lit-diagram-drawer/assets/examples/type-uml-class-light.html +1 -0
  326. package/skills/lit-diagram-drawer/assets/examples/type-venn-dark.html +1 -0
  327. package/skills/lit-diagram-drawer/assets/examples/type-venn-full.html +1 -0
  328. package/skills/lit-diagram-drawer/assets/examples/type-venn-light.html +1 -0
  329. package/skills/lit-diagram-drawer/assets/examples/type-wardley-dark.html +1 -0
  330. package/skills/lit-diagram-drawer/assets/examples/type-wardley-full.html +1 -0
  331. package/skills/lit-diagram-drawer/assets/examples/type-wardley-light.html +1 -0
  332. package/skills/lit-diagram-drawer/assets/examples/type-waterfall-dark.html +1 -0
  333. package/skills/lit-diagram-drawer/assets/examples/type-waterfall-full.html +1 -0
  334. package/skills/lit-diagram-drawer/assets/examples/type-waterfall-light.html +1 -0
  335. package/skills/lit-diagram-drawer/assets/fonts/OFL.txt +94 -0
  336. package/skills/lit-diagram-drawer/assets/fonts/PretendardVariable.woff2 +0 -0
  337. package/skills/lit-diagram-drawer/assets/fonts/provenance.json +23 -0
  338. package/skills/lit-diagram-drawer/assets/icons.html +231 -0
  339. package/skills/lit-diagram-drawer/assets/licenses/devicon-MIT.txt +20 -0
  340. package/skills/lit-diagram-drawer/assets/licenses/diagram-design-MIT.txt +21 -0
  341. package/skills/lit-diagram-drawer/assets/licenses/log-z-MIT.txt +21 -0
  342. package/skills/lit-diagram-drawer/assets/licenses/simple-icons-CC0.md +30 -0
  343. package/skills/lit-diagram-drawer/assets/licenses/tabler-MIT.txt +21 -0
  344. package/skills/lit-diagram-drawer/examples/01-service-architecture/after.html +1 -0
  345. package/skills/lit-diagram-drawer/examples/01-service-architecture/brief.md +33 -0
  346. package/skills/lit-diagram-drawer/examples/02-release-decision/after.html +1 -0
  347. package/skills/lit-diagram-drawer/examples/02-release-decision/brief.md +18 -0
  348. package/skills/lit-diagram-drawer/examples/03-data-retention/after.html +1 -0
  349. package/skills/lit-diagram-drawer/examples/03-data-retention/brief.md +19 -0
  350. package/skills/lit-diagram-drawer/examples/04-oauth-sequence/after.html +1 -0
  351. package/skills/lit-diagram-drawer/examples/04-oauth-sequence/brief.md +17 -0
  352. package/skills/lit-diagram-drawer/examples/05-review-lanes/after.html +1 -0
  353. package/skills/lit-diagram-drawer/examples/05-review-lanes/brief.md +17 -0
  354. package/skills/lit-diagram-drawer/examples/06-rollout-gates/after.html +1 -0
  355. package/skills/lit-diagram-drawer/examples/06-rollout-gates/brief.md +17 -0
  356. package/skills/lit-diagram-drawer/examples/07-deployment-boundary/after.html +1 -0
  357. package/skills/lit-diagram-drawer/examples/07-deployment-boundary/brief.md +19 -0
  358. package/skills/lit-diagram-drawer/examples/08-policy-traces/after.html +1 -0
  359. package/skills/lit-diagram-drawer/examples/08-policy-traces/brief.md +20 -0
  360. package/skills/lit-diagram-drawer/references/accessibility.md +37 -0
  361. package/skills/lit-diagram-drawer/references/export.md +17 -0
  362. package/skills/lit-diagram-drawer/references/import-drawio.md +13 -0
  363. package/skills/lit-diagram-drawer/references/import-excalidraw.md +11 -0
  364. package/skills/lit-diagram-drawer/references/import-mermaid.md +12 -0
  365. package/skills/lit-diagram-drawer/references/import-schema.md +28 -0
  366. package/skills/lit-diagram-drawer/references/korean-typography.md +34 -0
  367. package/skills/lit-diagram-drawer/references/motion.md +29 -0
  368. package/skills/lit-diagram-drawer/references/office-pptx-docx.md +28 -0
  369. package/skills/lit-diagram-drawer/references/output-spec.md +48 -0
  370. package/skills/lit-diagram-drawer/references/primitive-annotation.md +12 -0
  371. package/skills/lit-diagram-drawer/references/primitive-icons.md +21 -0
  372. package/skills/lit-diagram-drawer/references/primitive-sketchy.md +11 -0
  373. package/skills/lit-diagram-drawer/references/primitive-terminal.md +11 -0
  374. package/skills/lit-diagram-drawer/references/profiles.md +24 -0
  375. package/skills/lit-diagram-drawer/references/semantic-patterns.md +27 -0
  376. package/skills/lit-diagram-drawer/references/style-guide.md +67 -0
  377. package/skills/lit-diagram-drawer/references/type-architecture.md +51 -0
  378. package/skills/lit-diagram-drawer/references/type-bar.md +51 -0
  379. package/skills/lit-diagram-drawer/references/type-beeswarm.md +49 -0
  380. package/skills/lit-diagram-drawer/references/type-bubble.md +49 -0
  381. package/skills/lit-diagram-drawer/references/type-bump.md +49 -0
  382. package/skills/lit-diagram-drawer/references/type-catalog.json +1433 -0
  383. package/skills/lit-diagram-drawer/references/type-data-flow.md +51 -0
  384. package/skills/lit-diagram-drawer/references/type-datalake.md +49 -0
  385. package/skills/lit-diagram-drawer/references/type-db-schema.md +49 -0
  386. package/skills/lit-diagram-drawer/references/type-dependency.md +49 -0
  387. package/skills/lit-diagram-drawer/references/type-deployment.md +49 -0
  388. package/skills/lit-diagram-drawer/references/type-dp-integration.md +49 -0
  389. package/skills/lit-diagram-drawer/references/type-dp-security-matrix.md +49 -0
  390. package/skills/lit-diagram-drawer/references/type-er.md +49 -0
  391. package/skills/lit-diagram-drawer/references/type-fishbone.md +49 -0
  392. package/skills/lit-diagram-drawer/references/type-flowchart.md +49 -0
  393. package/skills/lit-diagram-drawer/references/type-gantt.md +49 -0
  394. package/skills/lit-diagram-drawer/references/type-heatmap.md +53 -0
  395. package/skills/lit-diagram-drawer/references/type-high-level-vertical.md +53 -0
  396. package/skills/lit-diagram-drawer/references/type-high-level.md +53 -0
  397. package/skills/lit-diagram-drawer/references/type-import-drawio.md +53 -0
  398. package/skills/lit-diagram-drawer/references/type-import-excalidraw.md +53 -0
  399. package/skills/lit-diagram-drawer/references/type-import-mermaid.md +53 -0
  400. package/skills/lit-diagram-drawer/references/type-it-state.md +54 -0
  401. package/skills/lit-diagram-drawer/references/type-journey.md +54 -0
  402. package/skills/lit-diagram-drawer/references/type-kanban.md +54 -0
  403. package/skills/lit-diagram-drawer/references/type-layers.md +54 -0
  404. package/skills/lit-diagram-drawer/references/type-line.md +54 -0
  405. package/skills/lit-diagram-drawer/references/type-loop-terminal.md +53 -0
  406. package/skills/lit-diagram-drawer/references/type-loop.md +54 -0
  407. package/skills/lit-diagram-drawer/references/type-marimekko.md +54 -0
  408. package/skills/lit-diagram-drawer/references/type-medallion.md +54 -0
  409. package/skills/lit-diagram-drawer/references/type-nested.md +59 -0
  410. package/skills/lit-diagram-drawer/references/type-org-chart.md +58 -0
  411. package/skills/lit-diagram-drawer/references/type-paved-road-animated.md +72 -0
  412. package/skills/lit-diagram-drawer/references/type-polar.md +67 -0
  413. package/skills/lit-diagram-drawer/references/type-policy-trace-animated.md +69 -0
  414. package/skills/lit-diagram-drawer/references/type-process.md +58 -0
  415. package/skills/lit-diagram-drawer/references/type-pyramid.md +59 -0
  416. package/skills/lit-diagram-drawer/references/type-quadrant-consultant.md +60 -0
  417. package/skills/lit-diagram-drawer/references/type-quadrant.md +57 -0
  418. package/skills/lit-diagram-drawer/references/type-queue-animated.md +63 -0
  419. package/skills/lit-diagram-drawer/references/type-radar.md +57 -0
  420. package/skills/lit-diagram-drawer/references/type-ridgeline.md +63 -0
  421. package/skills/lit-diagram-drawer/references/type-sankey.md +68 -0
  422. package/skills/lit-diagram-drawer/references/type-scatter.md +60 -0
  423. package/skills/lit-diagram-drawer/references/type-sequence-oauth.md +66 -0
  424. package/skills/lit-diagram-drawer/references/type-sequence.md +63 -0
  425. package/skills/lit-diagram-drawer/references/type-slopegraph.md +65 -0
  426. package/skills/lit-diagram-drawer/references/type-state-lifecycle.md +53 -0
  427. package/skills/lit-diagram-drawer/references/type-state.md +59 -0
  428. package/skills/lit-diagram-drawer/references/type-story-map.md +52 -0
  429. package/skills/lit-diagram-drawer/references/type-streamgraph.md +53 -0
  430. package/skills/lit-diagram-drawer/references/type-swimlane.md +52 -0
  431. package/skills/lit-diagram-drawer/references/type-timeline.md +52 -0
  432. package/skills/lit-diagram-drawer/references/type-tree-block-decomposition.md +57 -0
  433. package/skills/lit-diagram-drawer/references/type-tree.md +54 -0
  434. package/skills/lit-diagram-drawer/references/type-treemap.md +54 -0
  435. package/skills/lit-diagram-drawer/references/type-uml-class.md +52 -0
  436. package/skills/lit-diagram-drawer/references/type-venn.md +51 -0
  437. package/skills/lit-diagram-drawer/references/type-wardley.md +52 -0
  438. package/skills/lit-diagram-drawer/references/type-waterfall.md +54 -0
  439. package/skills/lit-diagram-drawer/references/verifier-guide.md +59 -0
  440. package/skills/lit-diagram-drawer/scripts/block-registry.mjs +43 -0
  441. package/skills/lit-diagram-drawer/scripts/brief-contract.mjs +94 -0
  442. package/skills/lit-diagram-drawer/scripts/capability-probe.mjs +132 -0
  443. package/skills/lit-diagram-drawer/scripts/check-visible-text.mjs +15 -0
  444. package/skills/lit-diagram-drawer/scripts/craft-thresholds.json +15 -0
  445. package/skills/lit-diagram-drawer/scripts/diagram-metrics.mjs +216 -0
  446. package/skills/lit-diagram-drawer/scripts/doctor.mjs +8 -0
  447. package/skills/lit-diagram-drawer/scripts/drawio-extract.mjs +214 -0
  448. package/skills/lit-diagram-drawer/scripts/excalidraw-extract.mjs +151 -0
  449. package/skills/lit-diagram-drawer/scripts/export.mjs +133 -0
  450. package/skills/lit-diagram-drawer/scripts/import-shared.mjs +130 -0
  451. package/skills/lit-diagram-drawer/scripts/mermaid-extract.mjs +173 -0
  452. package/skills/lit-diagram-drawer/scripts/office-safety.mjs +120 -0
  453. package/skills/lit-diagram-drawer/scripts/renderer-safety.mjs +46 -0
  454. package/skills/lit-diagram-drawer/scripts/test-block-registry.mjs +20 -0
  455. package/skills/lit-diagram-drawer/scripts/test-brief-contract.mjs +27 -0
  456. package/skills/lit-diagram-drawer/scripts/test-importers.mjs +119 -0
  457. package/skills/lit-diagram-drawer/scripts/test-office-safety.mjs +67 -0
  458. package/skills/lit-diagram-drawer/scripts/test-sequence-verifier.mjs +28 -0
  459. package/skills/lit-diagram-drawer/scripts/test-visual-quality.mjs +68 -0
  460. package/skills/lit-diagram-drawer/scripts/verify-all.mjs +74 -0
  461. package/skills/lit-diagram-drawer/scripts/verify-brief.mjs +47 -0
  462. package/skills/lit-diagram-drawer/scripts/verify-coverage.mjs +56 -0
  463. package/skills/lit-diagram-drawer/scripts/verify-diagram.mjs +26 -0
  464. package/skills/lit-diagram-drawer/scripts/verify-motion.mjs +12 -0
  465. package/skills/lit-diagram-drawer/scripts/verify-type.mjs +48 -0
  466. package/skills/lit-diagram-drawer/scripts/visual-quality.mjs +363 -0
  467. package/skills/lit-docx/LICENSE-MIT.txt +21 -0
  468. package/skills/lit-docx/SKILL.md +78 -0
  469. package/skills/lit-docx/references/frontmatter_schema.md +42 -0
  470. package/skills/lit-docx/references/journal_style_spec.md +17 -0
  471. package/skills/lit-docx/references/markdown_quality_checklist.md +37 -0
  472. package/skills/lit-docx/references/slop_phrase_list.yaml +58 -0
  473. package/skills/lit-docx/references/slop_rules.md +35 -0
  474. package/skills/lit-docx/requirements.in +5 -0
  475. package/skills/lit-docx/requirements.lock +289 -0
  476. package/skills/lit-docx/run.py +64 -0
  477. package/skills/lit-docx/scripts/clean_markdown.py +95 -0
  478. package/skills/lit-docx/scripts/convert_md_to_docx.py +1047 -0
  479. package/skills/lit-docx/scripts/convert_md_to_pdf.py +281 -0
  480. package/skills/lit-docx/scripts/convert_pdf.py +130 -0
  481. package/skills/lit-docx/scripts/craft-thresholds.json +11 -0
  482. package/skills/lit-docx/scripts/craft_docx.py +83 -0
  483. package/skills/lit-docx/scripts/edit_docx.py +297 -0
  484. package/skills/lit-docx/scripts/embed_images.py +78 -0
  485. package/skills/lit-docx/scripts/generate_docx_templates.py +491 -0
  486. package/skills/lit-docx/scripts/slop_lint.py +485 -0
  487. package/skills/lit-docx/scripts/visual_audit.py +41 -0
  488. package/skills/lit-docx/templates/docx/acs.docx +0 -0
  489. package/skills/lit-docx/templates/docx/elsevier.docx +0 -0
  490. package/skills/lit-docx/templates/docx/ieee.docx +0 -0
  491. package/skills/lit-docx/templates/docx/korean-generic.docx +0 -0
  492. package/skills/lit-docx/templates/docx/nature.docx +0 -0
  493. package/skills/lit-docx/templates/latex/acs/README.md +5 -0
  494. package/skills/lit-docx/templates/latex/acs/template.tex +37 -0
  495. package/skills/lit-docx/templates/latex/elsevier/README.md +5 -0
  496. package/skills/lit-docx/templates/latex/elsevier/template.tex +38 -0
  497. package/skills/lit-docx/templates/latex/ieee/README.md +5 -0
  498. package/skills/lit-docx/templates/latex/ieee/template.tex +37 -0
  499. package/skills/lit-docx/templates/latex/korean-generic/README.md +5 -0
  500. package/skills/lit-docx/templates/latex/korean-generic/template.tex +37 -0
  501. package/skills/lit-docx/templates/latex/nature/README.md +5 -0
  502. package/skills/lit-docx/templates/latex/nature/template.tex +37 -0
  503. package/skills/lit-docx/templates/registry.yaml +1366 -0
  504. package/skills/lit-humanizer/NOTICE +160 -0
  505. package/skills/lit-humanizer/SKILL.md +122 -0
  506. package/skills/lit-humanizer/assets/always-on-rule.md +9 -0
  507. package/skills/lit-humanizer/assets/report-skeleton.md +25 -0
  508. package/skills/lit-humanizer/assets/slide-text-skeleton.md +28 -0
  509. package/skills/lit-humanizer/examples/accessibility-note/after.md +7 -0
  510. package/skills/lit-humanizer/examples/accessibility-note/before.md +7 -0
  511. package/skills/lit-humanizer/examples/api-reference/after.md +9 -0
  512. package/skills/lit-humanizer/examples/api-reference/before.md +15 -0
  513. package/skills/lit-humanizer/examples/changelog/after.md +5 -0
  514. package/skills/lit-humanizer/examples/changelog/before.md +12 -0
  515. package/skills/lit-humanizer/examples/code-comments/after.md +10 -0
  516. package/skills/lit-humanizer/examples/code-comments/before.md +19 -0
  517. package/skills/lit-humanizer/examples/commit/after.md +5 -0
  518. package/skills/lit-humanizer/examples/commit/before.md +7 -0
  519. package/skills/lit-humanizer/examples/data-release/after.md +7 -0
  520. package/skills/lit-humanizer/examples/data-release/before.md +9 -0
  521. package/skills/lit-humanizer/examples/english-essay/after.md +5 -0
  522. package/skills/lit-humanizer/examples/english-essay/before.md +5 -0
  523. package/skills/lit-humanizer/examples/incident-update/after.md +7 -0
  524. package/skills/lit-humanizer/examples/incident-update/before.md +7 -0
  525. package/skills/lit-humanizer/examples/ko-essay/after.md +7 -0
  526. package/skills/lit-humanizer/examples/ko-essay/before.md +9 -0
  527. package/skills/lit-humanizer/examples/ko-report/after.md +9 -0
  528. package/skills/lit-humanizer/examples/ko-report/before.md +13 -0
  529. package/skills/lit-humanizer/examples/ko-slide/after.md +19 -0
  530. package/skills/lit-humanizer/examples/ko-slide/before.md +21 -0
  531. package/skills/lit-humanizer/examples/meeting-brief/after.md +9 -0
  532. package/skills/lit-humanizer/examples/meeting-brief/before.md +11 -0
  533. package/skills/lit-humanizer/examples/policy-faq/after.md +9 -0
  534. package/skills/lit-humanizer/examples/policy-faq/before.md +9 -0
  535. package/skills/lit-humanizer/examples/pr/after.md +15 -0
  536. package/skills/lit-humanizer/examples/pr/before.md +17 -0
  537. package/skills/lit-humanizer/examples/project-update/after.md +7 -0
  538. package/skills/lit-humanizer/examples/project-update/before.md +9 -0
  539. package/skills/lit-humanizer/examples/readme/after.md +12 -0
  540. package/skills/lit-humanizer/examples/readme/before.md +14 -0
  541. package/skills/lit-humanizer/examples/report/after.md +13 -0
  542. package/skills/lit-humanizer/examples/report/before.md +11 -0
  543. package/skills/lit-humanizer/examples/research-abstract/after.md +5 -0
  544. package/skills/lit-humanizer/examples/research-abstract/before.md +5 -0
  545. package/skills/lit-humanizer/examples/slides/after.md +19 -0
  546. package/skills/lit-humanizer/examples/slides/before.md +19 -0
  547. package/skills/lit-humanizer/examples/troubleshooting/after.md +11 -0
  548. package/skills/lit-humanizer/examples/troubleshooting/before.md +11 -0
  549. package/skills/lit-humanizer/fixtures/ko-metrics-golden.json +49 -0
  550. package/skills/lit-humanizer/fixtures/office/minimal.docx +0 -0
  551. package/skills/lit-humanizer/fixtures/office/minimal.pptx +0 -0
  552. package/skills/lit-humanizer/fixtures/pos-real.txt +26 -0
  553. package/skills/lit-humanizer/fixtures/rule-cases.json +306 -0
  554. package/skills/lit-humanizer/references/code-patterns.md +468 -0
  555. package/skills/lit-humanizer/references/deliverable-channels.md +111 -0
  556. package/skills/lit-humanizer/references/en-patterns-checklist.md +43 -0
  557. package/skills/lit-humanizer/references/en-patterns-content.md +243 -0
  558. package/skills/lit-humanizer/references/en-patterns-structure.md +375 -0
  559. package/skills/lit-humanizer/references/en-patterns.md +57 -0
  560. package/skills/lit-humanizer/references/ko-metrics.md +33 -0
  561. package/skills/lit-humanizer/references/ko-patterns-a-d.md +659 -0
  562. package/skills/lit-humanizer/references/ko-patterns-e-j.md +387 -0
  563. package/skills/lit-humanizer/references/ko-patterns.md +31 -0
  564. package/skills/lit-humanizer/references/rewrite-playbook.md +54 -0
  565. package/skills/lit-humanizer/references/taxonomy.md +153 -0
  566. package/skills/lit-humanizer/rules.json +884 -0
  567. package/skills/lit-humanizer/scripts/core.mjs +208 -0
  568. package/skills/lit-humanizer/scripts/detect.mjs +91 -0
  569. package/skills/lit-humanizer/scripts/extract_office_text.py +89 -0
  570. package/skills/lit-humanizer/scripts/guard-scan.mjs +36 -0
  571. package/skills/lit-humanizer/scripts/ko-metrics.mjs +124 -0
  572. package/skills/lit-humanizer/scripts/test-fixtures.mjs +54 -0
  573. package/skills/lit-humanizer/scripts/test-ko-metrics.mjs +27 -0
  574. package/skills/lit-pptx/FORBIDDEN_TERMS.json +55 -0
  575. package/skills/lit-pptx/NOTICE.md +3 -0
  576. package/skills/lit-pptx/SKILL.md +76 -0
  577. package/skills/lit-pptx/agents/analyst.md +49 -0
  578. package/skills/lit-pptx/agents/antithesis.md +59 -0
  579. package/skills/lit-pptx/agents/architect.md +44 -0
  580. package/skills/lit-pptx/agents/critic.md +42 -0
  581. package/skills/lit-pptx/agents/synthesizer.md +47 -0
  582. package/skills/lit-pptx/agents/thesis.md +33 -0
  583. package/skills/lit-pptx/assets/azure/circle-lg.png +0 -0
  584. package/skills/lit-pptx/assets/azure/circle-md.png +0 -0
  585. package/skills/lit-pptx/assets/azure/circle-sm.png +0 -0
  586. package/skills/lit-pptx/fonts/a2z-font/A2Z-Black.otf +0 -0
  587. package/skills/lit-pptx/fonts/a2z-font/A2Z-Bold.otf +0 -0
  588. package/skills/lit-pptx/fonts/a2z-font/A2Z-Light.otf +0 -0
  589. package/skills/lit-pptx/fonts/a2z-font/A2Z-Medium.otf +0 -0
  590. package/skills/lit-pptx/fonts/a2z-font/A2Z-Regular.otf +0 -0
  591. package/skills/lit-pptx/fonts/a2z-font/OFL.txt +94 -0
  592. package/skills/lit-pptx/fonts/a2z-font/SOURCE.md +29 -0
  593. package/skills/lit-pptx/package-lock.json +747 -0
  594. package/skills/lit-pptx/package.json +13 -0
  595. package/skills/lit-pptx/pretendard-font/LICENSE.txt +94 -0
  596. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf +0 -0
  597. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf +0 -0
  598. package/skills/lit-pptx/requirements.in +2 -0
  599. package/skills/lit-pptx/requirements.lock +285 -0
  600. package/skills/lit-pptx/run.mjs +71 -0
  601. package/skills/lit-pptx/scripts/check_ooxml.py +47 -0
  602. package/skills/lit-pptx/scripts/compile-deck.js +447 -0
  603. package/skills/lit-pptx/scripts/craft-thresholds.json +26 -0
  604. package/skills/lit-pptx/scripts/craft_extras.py +224 -0
  605. package/skills/lit-pptx/scripts/embed_fonts.py +204 -0
  606. package/skills/lit-pptx/scripts/layout_inventory.py +70 -0
  607. package/skills/lit-pptx/scripts/learn_template.py +433 -0
  608. package/skills/lit-pptx/scripts/lib/derive-palette.js +176 -0
  609. package/skills/lit-pptx/scripts/lib/directive-parser.js +244 -0
  610. package/skills/lit-pptx/scripts/lib/font-map.js +79 -0
  611. package/skills/lit-pptx/scripts/lib/gen-bg.js +85 -0
  612. package/skills/lit-pptx/scripts/lib/gen-gradient-assets.js +36 -0
  613. package/skills/lit-pptx/scripts/lib/layout-resolver.js +737 -0
  614. package/skills/lit-pptx/scripts/lib/markdown-loader.js +136 -0
  615. package/skills/lit-pptx/scripts/lib/render-adapter-html.js +364 -0
  616. package/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +1848 -0
  617. package/skills/lit-pptx/scripts/lib/slide-ast.js +534 -0
  618. package/skills/lit-pptx/scripts/lib/spec-validator.js +94 -0
  619. package/skills/lit-pptx/scripts/lib/template-registry.js +355 -0
  620. package/skills/lit-pptx/scripts/qa_deck.py +773 -0
  621. package/skills/lit-pptx/scripts/validate_pptx.py +206 -0
  622. package/skills/lit-pptx/specs/markdown-slide-spec-v1.md +251 -0
  623. package/skills/lit-pptx/specs/markdown-slide-spec-v2.md +223 -0
  624. package/skills/lit-pptx/specs/slide-ast-v1.schema.json +229 -0
  625. package/skills/lit-pptx/specs/slide-ast-v2.schema.json +144 -0
  626. package/skills/lit-pptx/specs/template-enrollment-contract.md +379 -0
  627. package/skills/lit-pptx/templates/bauhaus_light.css +4 -0
  628. package/skills/lit-pptx/templates/boilerplate_professional.css +508 -0
  629. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/capabilities.yaml +146 -0
  630. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +454 -0
  631. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +37 -0
  632. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +154 -0
  633. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +483 -0
  634. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +37 -0
  635. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/capabilities.yaml +179 -0
  636. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/layout-mapping.yaml +299 -0
  637. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/template.yaml +45 -0
  638. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +181 -0
  639. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml +299 -0
  640. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +44 -0
  641. package/skills/lit-scientific-visualization/SKILL.md +2 -0
  642. package/skills/lit-typographic-motion/NOTICE +23 -0
  643. package/skills/lit-typographic-motion/SKILL.md +77 -0
  644. package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +25 -0
  645. package/skills/lit-typographic-motion/audio-analysis.py +52 -0
  646. package/skills/lit-typographic-motion/engine/browser.mjs +83 -0
  647. package/skills/lit-typographic-motion/engine/constants.mjs +177 -0
  648. package/skills/lit-typographic-motion/engine/contrast.mjs +101 -0
  649. package/skills/lit-typographic-motion/engine/encode.mjs +46 -0
  650. package/skills/lit-typographic-motion/engine/flash.mjs +216 -0
  651. package/skills/lit-typographic-motion/engine/look.mjs +166 -0
  652. package/skills/lit-typographic-motion/engine/page/common.js +105 -0
  653. package/skills/lit-typographic-motion/engine/page/engine.js +451 -0
  654. package/skills/lit-typographic-motion/engine/page/gl.js +213 -0
  655. package/skills/lit-typographic-motion/engine/page/lines.js +88 -0
  656. package/skills/lit-typographic-motion/engine/page/passes.js +144 -0
  657. package/skills/lit-typographic-motion/engine/page/post.js +119 -0
  658. package/skills/lit-typographic-motion/engine/page/scenes.js +187 -0
  659. package/skills/lit-typographic-motion/engine/page/type.js +321 -0
  660. package/skills/lit-typographic-motion/engine/png.mjs +139 -0
  661. package/skills/lit-typographic-motion/engine/sound.mjs +291 -0
  662. package/skills/lit-typographic-motion/engine/stage/capture.mjs +133 -0
  663. package/skills/lit-typographic-motion/engine/stage/clock.js +171 -0
  664. package/skills/lit-typographic-motion/engine/stage/frame-worker.mjs +47 -0
  665. package/skills/lit-typographic-motion/engine/stage/gate.mjs +119 -0
  666. package/skills/lit-typographic-motion/engine/stage/qa-page.js +158 -0
  667. package/skills/lit-typographic-motion/engine/stage/qa.mjs +208 -0
  668. package/skills/lit-typographic-motion/engine/stage/render.mjs +418 -0
  669. package/skills/lit-typographic-motion/engine/stage/scan.mjs +162 -0
  670. package/skills/lit-typographic-motion/engine/stage/stage-kit.js +310 -0
  671. package/skills/lit-typographic-motion/engine/stills.mjs +60 -0
  672. package/skills/lit-typographic-motion/engine/text.mjs +126 -0
  673. package/skills/lit-typographic-motion/engine/timing.mjs +289 -0
  674. package/skills/lit-typographic-motion/engine/treatment.mjs +254 -0
  675. package/skills/lit-typographic-motion/fonts/Archivo-100-400.ttf +0 -0
  676. package/skills/lit-typographic-motion/fonts/Archivo-100-700.ttf +0 -0
  677. package/skills/lit-typographic-motion/fonts/Archivo-100-900.ttf +0 -0
  678. package/skills/lit-typographic-motion/fonts/Archivo-125-400.ttf +0 -0
  679. package/skills/lit-typographic-motion/fonts/Archivo-125-700.ttf +0 -0
  680. package/skills/lit-typographic-motion/fonts/Archivo-125-900.ttf +0 -0
  681. package/skills/lit-typographic-motion/fonts/Archivo-75-400.ttf +0 -0
  682. package/skills/lit-typographic-motion/fonts/Archivo-75-700.ttf +0 -0
  683. package/skills/lit-typographic-motion/fonts/Archivo-75-900.ttf +0 -0
  684. package/skills/lit-typographic-motion/fonts/Archivo-OFL.txt +93 -0
  685. package/skills/lit-typographic-motion/fonts/Silkscreen-Bold.ttf +0 -0
  686. package/skills/lit-typographic-motion/fonts/Silkscreen-OFL.txt +93 -0
  687. package/skills/lit-typographic-motion/fonts/Silkscreen-Regular.ttf +0 -0
  688. package/skills/lit-typographic-motion/fonts/VT323-OFL.txt +93 -0
  689. package/skills/lit-typographic-motion/fonts/VT323-Regular.ttf +0 -0
  690. package/skills/lit-typographic-motion/fonts/pins.json +44 -0
  691. package/skills/lit-typographic-motion/fonts/stroke/CREDITS +52 -0
  692. package/skills/lit-typographic-motion/fonts/stroke/EMSAllure.svg +216 -0
  693. package/skills/lit-typographic-motion/fonts/stroke/EMSFelix.svg +216 -0
  694. package/skills/lit-typographic-motion/fonts/stroke/EMSOsmotron.svg +216 -0
  695. package/skills/lit-typographic-motion/fonts/stroke/EMSReadability.svg +216 -0
  696. package/skills/lit-typographic-motion/fonts/stroke/EMSTech.svg +217 -0
  697. package/skills/lit-typographic-motion/fonts/stroke/OFL.txt +85 -0
  698. package/skills/lit-typographic-motion/gate.mjs +593 -0
  699. package/skills/lit-typographic-motion/package-lock.json +78 -0
  700. package/skills/lit-typographic-motion/package.json +11 -0
  701. package/skills/lit-typographic-motion/probe.mjs +74 -0
  702. package/skills/lit-typographic-motion/references/authoring.md +110 -0
  703. package/skills/lit-typographic-motion/references/craft-loop.md +110 -0
  704. package/skills/lit-typographic-motion/references/runtime.md +88 -0
  705. package/skills/lit-typographic-motion/references/stage.md +164 -0
  706. package/skills/lit-typographic-motion/references/style-bibles.md +88 -0
  707. package/skills/lit-typographic-motion/references/treatment.md +143 -0
  708. package/skills/lit-typographic-motion/references/type-craft.md +55 -0
  709. package/skills/lit-typographic-motion/render.mjs +654 -0
  710. package/skills/lit-typographic-motion/requirements-audio.in +1 -0
  711. package/skills/lit-typographic-motion/requirements-audio.txt +790 -0
  712. package/skills/lit-typographic-motion/runtime.mjs +259 -0
  713. package/skills/lit-typographic-motion/word-timing-models.json +25 -0
  714. package/skills/litresearch/SKILL.md +41 -12
  715. package/skills/managed-skill-manifest.json +2367 -63
  716. package/skills/skill-rename-aliases.json +6 -1
  717. package/tools/check-pack-payload.mjs +22 -1
  718. package/tools/check-payload-substance.mjs +2 -2
  719. package/tools/payload-reference-exemptions.json +4 -0
  720. package/tools/payload-substance-allowlist.json +2 -3
  721. package/tools/payload-substance-parity.json +7 -7
  722. package/tools/version-manifests.json +4 -4
  723. package/skills/lit-korean/SKILL.md +0 -231
@@ -0,0 +1,88 @@
1
+ // Browser side, part 3: GPU-instanced anti-aliased capsule segments in logical 2D px (x right,
2
+ // y down). swiss-grid draws its hairline rules with one instanced call; scenes use the same batch
3
+ // for small graphic marks. Colours are linear RGB, alpha 0..1.
4
+ (() => {
5
+ const LTM = window.LTM;
6
+
7
+ LTM.createLineBatch = (core, capacity = 512) => {
8
+ const { gl } = core;
9
+ const vertex = `#version 300 es
10
+ in vec2 a_corner; in vec2 i_a; in vec2 i_b; in vec4 i_color; in float i_width;
11
+ uniform vec2 u_logical; uniform float u_scale;
12
+ out vec2 v_local; out float v_len; out float v_half; out vec4 v_color;
13
+ void main() {
14
+ vec2 a = i_a * u_scale, b = i_b * u_scale;
15
+ float w = i_width * u_scale;
16
+ float hw = max(w * 0.5, 0.35) + 1.0;
17
+ vec2 d = b - a; float len = length(d);
18
+ vec2 dir = len > 1e-4 ? d / len : vec2(1.0, 0.0);
19
+ vec2 nrm = vec2(-dir.y, dir.x);
20
+ float along = mix(-hw, len + hw, a_corner.x);
21
+ vec2 p = a + dir * along + nrm * a_corner.y * hw;
22
+ vec2 res = u_logical * u_scale;
23
+ gl_Position = vec4(p.x / res.x * 2.0 - 1.0, 1.0 - p.y / res.y * 2.0, 0.0, 1.0);
24
+ v_local = vec2(along, a_corner.y * hw); v_len = len; v_half = max(w * 0.5, 0.35);
25
+ v_color = i_color * vec4(1.0, 1.0, 1.0, min(1.0, w / 0.7));
26
+ }`;
27
+ const fragment = `#version 300 es
28
+ precision highp float;
29
+ in vec2 v_local; in float v_len; in float v_half; in vec4 v_color;
30
+ out vec4 fragColor;
31
+ void main() {
32
+ float x = clamp(v_local.x, 0.0, v_len);
33
+ float d = length(vec2(v_local.x - x, v_local.y)) - v_half;
34
+ float a = clamp(0.5 - d, 0.0, 1.0) * v_color.a;
35
+ if (a <= 0.0) discard;
36
+ fragColor = vec4(v_color.rgb * a, a);
37
+ }`;
38
+ const program = core.program(vertex, fragment, ["a_corner", "i_a", "i_b", "i_color", "i_width"]);
39
+ const vao = gl.createVertexArray();
40
+ gl.bindVertexArray(vao);
41
+ const corners = gl.createBuffer();
42
+ gl.bindBuffer(gl.ARRAY_BUFFER, corners);
43
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, -1, 1, -1, 1, 1, 0, -1, 1, 1, 0, 1]), gl.STATIC_DRAW);
44
+ gl.enableVertexAttribArray(0);
45
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
46
+ const stride = 9 * 4;
47
+ const data = new Float32Array(capacity * 9);
48
+ const instances = gl.createBuffer();
49
+ gl.bindBuffer(gl.ARRAY_BUFFER, instances);
50
+ gl.bufferData(gl.ARRAY_BUFFER, data.byteLength, gl.DYNAMIC_DRAW);
51
+ const attr = (index, size, offset) => {
52
+ gl.enableVertexAttribArray(index);
53
+ gl.vertexAttribPointer(index, size, gl.FLOAT, false, stride, offset * 4);
54
+ gl.vertexAttribDivisor(index, 1);
55
+ };
56
+ attr(1, 2, 0); attr(2, 2, 2); attr(3, 4, 4); attr(4, 1, 8);
57
+ gl.bindVertexArray(null);
58
+ let count = 0;
59
+ const uLogical = gl.getUniformLocation(program, "u_logical");
60
+ const uScale = gl.getUniformLocation(program, "u_scale");
61
+ return {
62
+ clear() { count = 0; },
63
+ get count() { return count; },
64
+ seg(ax, ay, bx, by, width, rgb, alpha = 1) {
65
+ if (count >= capacity) throw new Error("line batch capacity exceeded");
66
+ data.set([ax, ay, bx, by, rgb[0], rgb[1], rgb[2], alpha, width], count * 9);
67
+ count += 1;
68
+ },
69
+ // Draws premultiplied over `target`. Returns the number of draw calls issued (0 or 1).
70
+ draw(target) {
71
+ if (count === 0) return 0;
72
+ core.bindTarget(target);
73
+ gl.useProgram(program);
74
+ gl.uniform2f(uLogical, 1920, 1080);
75
+ gl.uniform1f(uScale, core.scale);
76
+ gl.enable(gl.BLEND);
77
+ gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
78
+ gl.bindVertexArray(vao);
79
+ gl.bindBuffer(gl.ARRAY_BUFFER, instances);
80
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, data.subarray(0, count * 9));
81
+ gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, count);
82
+ gl.bindVertexArray(null);
83
+ gl.disable(gl.BLEND);
84
+ return 1;
85
+ }
86
+ };
87
+ };
88
+ })();
@@ -0,0 +1,144 @@
1
+ // Browser side, part 4: the six look-library passes (MO-SH-05..11), original GLSL written against
2
+ // the spec's uniform tables. Every pass writes its uniforms through Pass.set (logged) and counts its
3
+ // draw calls, so the gate can prove per-frame GLSL coverage (MO-SH-00a/00b, MO-C-01).
4
+ (() => {
5
+ const LTM = window.LTM;
6
+
7
+ LTM.createPasses = (core) => {
8
+ const { Pass } = core;
9
+ const passes = {};
10
+
11
+ passes["tidal-gradient"] = new Pass("tidal-gradient", `
12
+ uniform float u_time; uniform uint u_seed;
13
+ uniform vec3 u_background; uniform vec3 u_stopA; uniform vec3 u_stopB;
14
+ uniform float u_flowSpeed; uniform float u_warpAmount; uniform float u_curlStrength; uniform int u_octaves;
15
+ uniform float u_surge; uniform float u_surgeOnHit; uniform int u_bandingSteps; uniform float u_ditherAmount; uniform vec2 u_origin;
16
+ void main() {
17
+ vec2 px = logicalPx();
18
+ vec2 p = px / LOGICAL_H;
19
+ float t = u_time * u_flowSpeed;
20
+ vec2 q = p * 1.4 + u_origin;
21
+ vec2 flow = curl2(q * 0.7 + vec2(t, -t), u_seed) * u_curlStrength * 0.08;
22
+ vec2 warp = vec2(fbm(q + vec2(0.0, t), u_octaves, u_seed), fbm(q + vec2(5.2, 1.3) - vec2(t, 0.0), u_octaves, u_seed + 7u));
23
+ float k = fbm(q + u_warpAmount * warp + flow + vec2(t * 0.5), u_octaves, u_seed + 13u);
24
+ k = sat1(0.5 + 0.9 * k + 0.35 * (px.x / LOGICAL_W - 0.5) - 0.2 * (px.y / LOGICAL_H - 0.5));
25
+ k = sat1(k + 0.06 * u_surge * u_surgeOnHit);
26
+ if (u_bandingSteps > 0) k = floor(k * float(u_bandingSteps)) / float(u_bandingSteps);
27
+ vec3 col = mix(u_background, u_stopA, smoothstep(0.1, 0.55, k));
28
+ col = mix(col, u_stopB, smoothstep(0.5, 0.95, k));
29
+ vec3 s = toSRGB(col) + (hashU(uvec3(uvec2(gl_FragCoord.xy), u_seed)) - 0.5) * u_ditherAmount;
30
+ fragColor = vec4(toLinear(sat3(s)), 1.0);
31
+ }`);
32
+
33
+ passes.crt = new Pass("crt", `
34
+ uniform sampler2D u_src; uniform sampler2D u_ring0; uniform sampler2D u_ring1; uniform sampler2D u_ring2; uniform int u_ringCount;
35
+ uniform float u_time; uniform uint u_seed; uniform vec3 u_background;
36
+ uniform float u_scanlineFreqPerFrame; uniform float u_scanlineDepth; uniform float u_phosphorPersistence; uniform float u_bloomAmount;
37
+ uniform float u_curvature; uniform float u_vignette; uniform float u_triadMaskAmount; uniform float u_flickerAmp; uniform float u_flickerFreqHz;
38
+ vec2 barrel(vec2 uv) { vec2 dc = uv - 0.5; return uv + dc * dot(dc, dc) * u_curvature; }
39
+ void main() {
40
+ vec2 uv = barrel(vUv);
41
+ if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) { fragColor = vec4(u_background * 0.6, 1.0); return; }
42
+ vec3 col = texture(u_src, uv).rgb;
43
+ vec3 glow = (texture(u_src, uv + vec2(1.5, 0.0) / u_res).rgb + texture(u_src, uv - vec2(1.5, 0.0) / u_res).rgb) * 0.5;
44
+ col += glow * u_bloomAmount * 0.25;
45
+ if (u_ringCount > 0) col = max(col, texture(u_ring0, uv).rgb * u_phosphorPersistence * 2.0);
46
+ if (u_ringCount > 1) col = max(col, texture(u_ring1, uv).rgb * u_phosphorPersistence * 1.2);
47
+ if (u_ringCount > 2) col = max(col, texture(u_ring2, uv).rgb * u_phosphorPersistence * 0.6);
48
+ vec2 px = logicalPx();
49
+ float line = 0.5 + 0.5 * cos(6.28318530718 * px.y * u_scanlineFreqPerFrame / LOGICAL_H);
50
+ col *= 1.0 - u_scanlineDepth * (1.0 - line);
51
+ int column = int(floor(px.x)) % 3;
52
+ vec3 triad = column == 0 ? vec3(1.0, 0.92, 0.92) : column == 1 ? vec3(0.92, 1.0, 0.92) : vec3(0.92, 0.92, 1.0);
53
+ float grain = hashU(uvec3(uvec2(px), u_seed));
54
+ col *= mix(vec3(1.0), triad * (0.96 + 0.08 * grain), u_triadMaskAmount);
55
+ vec2 dc = vUv - 0.5;
56
+ col *= mix(1.0, smoothstep(0.85, 0.2, length(dc * vec2(1.0, 0.85))), u_vignette);
57
+ col *= 1.0 + 0.5 * min(u_flickerAmp, 0.06) * sin(6.28318530718 * u_flickerFreqHz * u_time);
58
+ fragColor = vec4(col, 1.0);
59
+ }`);
60
+
61
+ passes.dither = new Pass("dither", `
62
+ uniform sampler2D u_src; uniform int u_ditherMode; uniform int u_paletteSize; uniform int u_pixelScale;
63
+ uniform float u_ditherStrength; uniform uint u_seed; uniform bool u_noiseOn;
64
+ float bayer2(ivec2 p) { return float(2 * ((p.x ^ p.y) & 1) + (p.y & 1)) / 4.0; }
65
+ float bayer4(ivec2 p) { return (bayer2(p) + bayer2(p >> 1) / 4.0); }
66
+ float bayer8(ivec2 p) { return (bayer2(p) + bayer2(p >> 1) / 4.0 + bayer2(p >> 2) / 16.0); }
67
+ float threshold(ivec2 cell) {
68
+ if (u_ditherMode == 0) return bayer2(cell) + 0.125;
69
+ if (u_ditherMode == 1) return bayer4(cell) + 0.03125;
70
+ if (u_ditherMode == 2) return bayer8(cell) + 0.0078125;
71
+ if (!u_noiseOn) return bayer4(cell) + 0.03125;
72
+ uint off = pcg(u_seed);
73
+ vec2 q = vec2(cell) + vec2(float(off & 255u), float((off >> 8u) & 255u));
74
+ return fract(52.9829189 * fract(dot(q, vec2(0.06711056, 0.00583715))));
75
+ }
76
+ void main() {
77
+ vec2 px = logicalPx();
78
+ ivec2 cell = ivec2(floor(px / float(u_pixelScale)));
79
+ vec2 centre = (vec2(cell) + 0.5) * float(u_pixelScale);
80
+ vec2 uv = vec2(centre.x / LOGICAL_W, 1.0 - centre.y / LOGICAL_H);
81
+ vec3 col = texture(u_src, u_pixelScale > 1 ? uv : vUv).rgb;
82
+ vec3 over = max(col - 1.0, 0.0);
83
+ vec3 s = toSRGB(min(col, 1.0));
84
+ float th = threshold(cell);
85
+ if (u_paletteSize >= 2) {
86
+ float levels = float(u_paletteSize - 1);
87
+ s = floor(s * levels + mix(0.5, th, u_ditherStrength)) / levels;
88
+ } else {
89
+ s += (th - 0.5) * u_ditherStrength / 32.0;
90
+ }
91
+ fragColor = vec4(toLinear(sat3(s)) + over, 1.0);
92
+ }`);
93
+
94
+ passes.glitch = new Pass("glitch", `
95
+ uniform sampler2D u_src; uniform float u_time; uniform uint u_seed; uniform float u_intensity;
96
+ uniform int u_hit; uniform int u_sliceCount; uniform vec3 u_slices[12]; uniform vec4 u_blocks[3]; uniform vec2 u_blockCorruptSize;
97
+ uniform float u_rgbSplitPx; uniform float u_hitRatePerSec; uniform float u_areaCapPct; uniform int u_holdFrames; uniform float u_maxOffsetPx;
98
+ vec3 fetch(vec2 px) { return texture(u_src, vec2(px.x / LOGICAL_W, 1.0 - px.y / LOGICAL_H)).rgb; }
99
+ void main() {
100
+ vec2 px = logicalPx();
101
+ if (u_hit == 0) { fragColor = vec4(texture(u_src, vUv).rgb, 1.0); return; }
102
+ vec2 src = px;
103
+ bool moved = false;
104
+ for (int i = 0; i < 12; i++) {
105
+ if (i >= u_sliceCount) break;
106
+ vec3 s = u_slices[i];
107
+ if (px.y >= s.x && px.y < s.x + s.y) { src.x -= clamp(s.z, -u_maxOffsetPx, u_maxOffsetPx) * u_intensity / 0.35; moved = true; }
108
+ }
109
+ bool block = false;
110
+ for (int i = 0; i < 3; i++) {
111
+ vec4 b = u_blocks[i];
112
+ if (px.x >= b.x && px.x < b.x + u_blockCorruptSize.x && px.y >= b.y && px.y < b.y + u_blockCorruptSize.y) { src += b.zw; block = true; }
113
+ }
114
+ float split = moved ? u_rgbSplitPx : 0.0;
115
+ vec3 col = vec3(fetch(src + vec2(split, 0.0)).r, fetch(src).g, fetch(src - vec2(split, 0.0)).b);
116
+ if (block) {
117
+ float sum = col.r + col.g + col.b;
118
+ if (sum > 0.0 && col.r / sum >= 0.8) col = vec3(luma(col));
119
+ }
120
+ fragColor = vec4(col, 1.0);
121
+ }`);
122
+
123
+ // Composites a Canvas2D layer (sRGB texture sampled as linear) over the scene target. It is the
124
+ // draw call that carries terminal-ui's chrome, meters and caret, and the type layer.
125
+ passes["terminal-ui"] = new Pass("terminal-ui", `
126
+ uniform sampler2D u_layer; uniform vec2 u_charGridPx; uniform float u_windowChromeWidthPx; uniform int u_meterCount;
127
+ uniform float u_logLineRateCharsPerSec; uniform float u_caretBlinkHz; uniform uint u_seed;
128
+ void main() { vec4 c = texture(u_layer, vec2(vUv.x, 1.0 - vUv.y)); fragColor = vec4(c.rgb, c.a); }`);
129
+
130
+ const typeComposite = new Pass("type-layer", `
131
+ uniform sampler2D u_layer;
132
+ void main() { vec4 c = texture(u_layer, vec2(vUv.x, 1.0 - vUv.y)); fragColor = vec4(c.rgb, c.a); }`, { logged: false });
133
+
134
+ const copy = new Pass("copy", `
135
+ uniform sampler2D u_src;
136
+ void main() { fragColor = texture(u_src, vUv); }`, { logged: false });
137
+
138
+ const accumulate = new Pass("accumulate", `
139
+ uniform sampler2D u_src; uniform float u_weight;
140
+ void main() { fragColor = vec4(texture(u_src, vUv).rgb * u_weight, u_weight); }`, { logged: false });
141
+
142
+ return { passes, typeComposite, copy, accumulate };
143
+ };
144
+ })();
@@ -0,0 +1,119 @@
1
+ // Browser side, part 5: the global post chain in its fixed order (§A7): bloom + halation ->
2
+ // chromatic aberration -> tone shoulder -> film grain -> vignette -> flash -> shake/zoom -> invert.
3
+ // All math runs on linear HDR; the sRGB transfer is applied exactly once, in the output pass, which
4
+ // also flips rows so the readback comes out top-to-bottom.
5
+ (() => {
6
+ const LTM = window.LTM;
7
+
8
+ LTM.createPost = (core) => {
9
+ const { Pass } = core;
10
+ const levels = [];
11
+ let w = 960, h = 540;
12
+ for (let i = 0; i < 6; i++) {
13
+ levels.push({ down: core.makeTarget(Math.max(2, w), Math.max(2, h)), up: core.makeTarget(Math.max(2, w), Math.max(2, h)) });
14
+ w >>= 1; h >>= 1;
15
+ }
16
+ const chainA = core.makeTarget(core.W, core.H);
17
+ const output = core.makeTarget(core.W, core.H, "u8");
18
+
19
+ const prefilter = new Pass("post-prefilter", `
20
+ uniform sampler2D u_src; uniform vec2 u_texel; uniform float u_threshold; uniform float u_knee;
21
+ void main() {
22
+ vec3 c = 0.25 * (texture(u_src, vUv + u_texel * vec2(-1, -1)).rgb + texture(u_src, vUv + u_texel * vec2(1, -1)).rgb
23
+ + texture(u_src, vUv + u_texel * vec2(-1, 1)).rgb + texture(u_src, vUv + u_texel * vec2(1, 1)).rgb);
24
+ c = min(c, vec3(32.0));
25
+ float l = max(c.r, max(c.g, c.b));
26
+ float knee = max(u_knee, 1e-4);
27
+ float soft = clamp(l - u_threshold + knee, 0.0, 2.0 * knee);
28
+ soft = soft * soft / (4.0 * knee);
29
+ fragColor = vec4(c * max(soft, l - u_threshold) / max(l, 1e-5), 1.0);
30
+ }`, { logged: false });
31
+
32
+ const down = new Pass("post-down", `
33
+ uniform sampler2D u_src; uniform vec2 u_texel;
34
+ vec3 s(vec2 o) { return texture(u_src, vUv + u_texel * o).rgb; }
35
+ void main() {
36
+ vec3 inner = (s(vec2(-1, -1)) + s(vec2(1, -1)) + s(vec2(-1, 1)) + s(vec2(1, 1))) * 0.125;
37
+ vec3 outer = (s(vec2(-2, -2)) + s(vec2(0, -2)) + s(vec2(2, -2)) + s(vec2(-2, 0)) + s(vec2(2, 0)) + s(vec2(-2, 2)) + s(vec2(0, 2)) + s(vec2(2, 2))) * 0.0625;
38
+ fragColor = vec4(inner + outer * 0.5 + s(vec2(0.0)) * 0.125, 1.0);
39
+ }`, { logged: false });
40
+
41
+ const up = new Pass("post-up", `
42
+ uniform sampler2D u_src; uniform sampler2D u_base; uniform vec2 u_texel; uniform float u_radius;
43
+ void main() {
44
+ vec2 o = u_texel * u_radius;
45
+ vec3 tent = texture(u_src, vUv - o).rgb + 2.0 * texture(u_src, vUv + vec2(0.0, -o.y)).rgb + texture(u_src, vUv + vec2(o.x, -o.y)).rgb
46
+ + 2.0 * texture(u_src, vUv + vec2(-o.x, 0.0)).rgb + 4.0 * texture(u_src, vUv).rgb + 2.0 * texture(u_src, vUv + vec2(o.x, 0.0)).rgb
47
+ + texture(u_src, vUv + vec2(-o.x, o.y)).rgb + 2.0 * texture(u_src, vUv + vec2(0.0, o.y)).rgb + texture(u_src, vUv + o).rgb;
48
+ fragColor = vec4(texture(u_base, vUv).rgb + tent / 16.0, 1.0);
49
+ }`, { logged: false });
50
+
51
+ const passA = new Pass("post", `
52
+ uniform sampler2D u_src; uniform sampler2D u_bloom; uniform sampler2D u_halo;
53
+ uniform float u_exposure; uniform float u_bloomAmount; uniform float u_halation; uniform float u_ca;
54
+ uniform float u_grain; uniform float u_vignette; uniform float u_flash; uniform float u_fade;
55
+ uniform uint u_frame; uniform uint u_runSeed;
56
+ vec3 shoulder(vec3 x) {
57
+ const float k = 0.75;
58
+ vec3 y = mix(x, k + (1.0 - k) * (1.0 - exp(-(x - k) / (1.0 - k))), step(k, x));
59
+ float over = max(max(x.r, x.g), x.b);
60
+ return mix(y, vec3(1.0), smoothstep(2.0, 12.0, over) * 0.85);
61
+ }
62
+ void main() {
63
+ vec2 dc = vUv - 0.5;
64
+ float r2 = dot(dc * vec2(LOGICAL_W / LOGICAL_H, 1.0), dc * vec2(LOGICAL_W / LOGICAL_H, 1.0));
65
+ vec2 off = dc * r2 * u_ca / LOGICAL_W * 4.0;
66
+ vec3 col = vec3(texture(u_src, vUv + off).r, texture(u_src, vUv).g, texture(u_src, vUv - off).b);
67
+ col += texture(u_bloom, vUv).rgb * u_bloomAmount / 3.0;
68
+ col += vec3(1.0, 0.2, 0.06) * luma(texture(u_halo, vUv).rgb) * u_halation;
69
+ col *= u_exposure;
70
+ col = shoulder(col);
71
+ vec3 s = toSRGB(sat3(col));
72
+ vec2 px = logicalPx();
73
+ float g1 = hashU(uvec3(uvec2(gl_FragCoord.xy), u_frame ^ u_runSeed)) - 0.5;
74
+ float g2 = hashU(uvec3(uvec2(floor(px / 2.0)), (u_frame * 7919u) ^ u_runSeed)) - 0.5;
75
+ float lm = luma(s);
76
+ s += (g1 * 0.6 + g2 * 0.4) * u_grain * (0.55 + 1.2 * lm * (1.0 - lm));
77
+ col = toLinear(sat3(s));
78
+ col *= mix(1.0, smoothstep(0.95, 0.25, length(dc * vec2(1.0, 0.8))), u_vignette);
79
+ col += vec3(1.0) * u_flash;
80
+ col *= u_fade;
81
+ fragColor = vec4(col, 1.0);
82
+ }`, { logged: false });
83
+
84
+ const passB = new Pass("post-output", `
85
+ uniform sampler2D u_src; uniform vec2 u_shake; uniform float u_zoom; uniform bool u_invert;
86
+ void main() {
87
+ // Output row 0 is read back first, so it carries the top of the image (rows come out top-down).
88
+ vec2 topDown = (vUv - 0.5) / u_zoom + 0.5 - u_shake / vec2(LOGICAL_W, LOGICAL_H);
89
+ vec3 s = toSRGB(sat3(texture(u_src, vec2(topDown.x, 1.0 - topDown.y)).rgb));
90
+ if (u_invert) s = 1.0 - s;
91
+ fragColor = vec4(s, 1.0);
92
+ }`, { logged: false });
93
+
94
+ const render = (src, p, frameIndex, runSeed) => {
95
+ const first = levels[0].down;
96
+ prefilter.use().texture("u_src", src.tex).set("u_texel", "vec2", [1 / core.W, 1 / core.H])
97
+ .set("u_threshold", "float", p.bloomThreshold).set("u_knee", "float", p.bloomKnee).draw(first);
98
+ for (let i = 1; i < levels.length; i++) {
99
+ const from = levels[i - 1].down;
100
+ down.use().texture("u_src", from.tex).set("u_texel", "vec2", [1 / from.width, 1 / from.height]).draw(levels[i].down);
101
+ }
102
+ let previous = levels[levels.length - 1].down;
103
+ for (let i = levels.length - 2; i >= 0; i--) {
104
+ up.use().texture("u_src", previous.tex).texture("u_base", levels[i].down.tex)
105
+ .set("u_texel", "vec2", [1 / previous.width, 1 / previous.height]).set("u_radius", "float", 0.5 + p.bloomRadius).draw(levels[i].up);
106
+ previous = levels[i].up;
107
+ }
108
+ passA.use().texture("u_src", src.tex).texture("u_bloom", levels[0].up.tex).texture("u_halo", levels[3].up.tex)
109
+ .set("u_exposure", "float", p.exposure).set("u_bloomAmount", "float", p.bloom).set("u_halation", "float", p.halation)
110
+ .set("u_ca", "float", p.ca).set("u_grain", "float", p.grain).set("u_vignette", "float", p.vignette)
111
+ .set("u_flash", "float", p.flash).set("u_fade", "float", p.fade)
112
+ .set("u_frame", "uint", frameIndex).set("u_runSeed", "uint", runSeed).draw(chainA);
113
+ passB.use().texture("u_src", chainA.tex).set("u_shake", "vec2", p.shake).set("u_zoom", "float", p.zoom)
114
+ .set("u_invert", "bool", p.invert).draw(output);
115
+ return output;
116
+ };
117
+ return { render, output };
118
+ };
119
+ })();
@@ -0,0 +1,187 @@
1
+ // Browser side, part 7: the six original starter scenes. A scene is a pure function of the frame
2
+ // `f` (time, local progress, its timeline entry and reveal units) and the drawing api; every beat
3
+ // inside it is a function of f.lt / f.p against its own window, never a literal frame number
4
+ // (MO-A-06). Each returns post-chain overrides for that sample (MO-A-58).
5
+ (() => {
6
+ const LTM = window.LTM;
7
+ const SAFE = { x0: 96, y0: 54, x1: 1824, y1: 1026 };
8
+ const LEFT = 144;
9
+
10
+ const entrance = (f, api, lt) => {
11
+ const motion = api.look.motion;
12
+ if (motion.entrance === "slam") return api.ease("slam", LTM.clamp(lt / motion.entranceSec));
13
+ if (motion.entrance === "drift") return api.ease("drift", LTM.clamp(lt / Math.min(0.8, f.shot.holdSec * 0.4)));
14
+ return 1;
15
+ };
16
+
17
+ // Terminal type-in: Latin appears glyph by glyph; a Hangul 어절 appears whole (MO-A-13).
18
+ const typeInVisibility = (value, lt, rate) => {
19
+ const chars = Array.from(value);
20
+ const groupStart = new Array(chars.length).fill(0);
21
+ let cursor = 0, i = 0;
22
+ while (i < chars.length) {
23
+ if (/[가-힣ᄀ-ᇿ㄰-㆏]/u.test(chars[i])) {
24
+ let j = i;
25
+ while (j < chars.length && !/\s/u.test(chars[j])) j++;
26
+ for (let k = i; k < j; k++) groupStart[k] = cursor;
27
+ cursor += (j - i) / rate;
28
+ i = j;
29
+ } else { groupStart[i] = cursor; cursor += 1 / rate; i++; }
30
+ }
31
+ return { visible: (index) => lt >= groupStart[index], done: lt >= cursor, count: chars.filter((_, index) => lt >= groupStart[index]).length };
32
+ };
33
+
34
+ const pixelSize = (size, value) => (/[가-힣]/u.test(value) ? Math.max(45, Math.floor(size / 9) * 9) : size);
35
+
36
+ const scenes = {};
37
+
38
+ scenes["title-slam"] = (f, api) => {
39
+ const voice = api.voices.display;
40
+ const weight = api.presetId === "swiss-signal" ? 900 : 700;
41
+ const value = f.shot.text;
42
+ const k = entrance(f, api, f.lt);
43
+ const maxWidth = api.presetId === "terminalcore" ? 1380 : 1440;
44
+ // Fit against the widest state the entrance passes through (the 125% width cut at 1.04 scale),
45
+ // so the slam's first frames stay inside title-safe too.
46
+ const slam = api.look.motion.entrance === "slam";
47
+ let size = api.type.fit(value, { voice, weight, width: slam ? 125 : 100, trackingEm: slam ? -0.035 : 0 }, slam ? maxWidth / 1.04 : maxWidth, voice === "pixel" ? 144 : 210, 64);
48
+ if (voice === "pixel") size = pixelSize(size, value);
49
+ const typed = api.presetId === "terminalcore" ? typeInVisibility(value, f.lt, api.look.params["terminal-ui"].logLineRateCharsPerSec) : null;
50
+ const box = api.text({
51
+ id: "title", text: value, voice, size, weight,
52
+ width: api.look.motion.entrance === "slam" && k < 0.5 ? 125 : 100,
53
+ trackingEm: api.look.motion.entrance === "slam" ? -0.035 : 0,
54
+ x: LEFT + (api.presetId === "terminalcore" ? 24 : 0), y: 640 + (api.look.motion.entrance === "slam" ? 18 * (1 - k) : -10 * f.p),
55
+ fill: api.palette.text, opacity: typed ? 1 : k, scale: api.look.motion.entrance === "slam" ? 1.04 - 0.04 * k : 1,
56
+ visible: typed ? typed.visible : undefined
57
+ });
58
+ if (typed && box) api.caret(box, size);
59
+ // The shot index is printed only when the treatment asks for it (typePlan.showIndex).
60
+ if (api.presetId !== "terminalcore" && api.showIndex) {
61
+ api.text({ id: "title-index", text: `${String(f.shotNumber).padStart(2, "0")} / ${String(f.shotTotal).padStart(2, "0")}`, voice: "machine", size: 24, weight: 400, x: SAFE.x1 - 48, y: 190, align: "right", fill: api.palette.text, opacity: k, role: "annotation" });
62
+ }
63
+ return {};
64
+ };
65
+
66
+ scenes.karaoke = (f, api) => {
67
+ const hangul = /[가-힣]/u.test(f.shot.text);
68
+ const voice = api.presetId === "terminalcore" ? "pixel" : hangul ? "body" : "display";
69
+ const weight = 700;
70
+ let size = api.type.fit(f.shot.text, { voice, weight, width: 100 }, 1540, voice === "pixel" ? 108 : 112, 72);
71
+ let lines = [f.shot.text];
72
+ if (api.type.layout(f.shot.text, { voice, weight, size }).width > 1540) {
73
+ size = voice === "pixel" ? 72 : 88;
74
+ lines = api.type.wrapToWidth(f.shot.text, { voice, weight, size }, 1540);
75
+ }
76
+ if (voice === "pixel") size = pixelSize(size, f.shot.text);
77
+ const lineHeight = hangul ? 1.6 : 1.5;
78
+ const revealedWords = f.units.filter((unit) => f.t >= unit.start).length;
79
+ const newestStart = f.units[revealedWords - 1]?.start ?? f.start;
80
+ const fadeIn = LTM.clamp((f.t - newestStart) / 0.12);
81
+ let wordCursor = 0;
82
+ const lineWordStart = lines.map((line) => { const start = wordCursor; wordCursor += line.split(" ").length; return start; });
83
+ const drawOne = (line, lineIndex) => {
84
+ const charWord = [];
85
+ let w = lineWordStart[lineIndex];
86
+ for (const char of Array.from(line)) { charWord.push(w); if (char === " ") w++; }
87
+ return {
88
+ visible: (index) => charWord[index] < revealedWords,
89
+ opacityOf: (index) => (charWord[index] === revealedWords - 1 ? fadeIn : 1)
90
+ };
91
+ };
92
+ const y0 = lines.length === 1 ? 600 : 520;
93
+ const x = LEFT + (api.presetId === "terminalcore" ? 24 : 0);
94
+ if (lines.length === 1) {
95
+ const vis = drawOne(lines[0], 0);
96
+ const box = api.text({ id: "line", text: lines[0], voice, size, weight, x, y: y0, fill: api.palette.text, ...vis });
97
+ if (api.presetId === "terminalcore" && box) api.caret(box, size);
98
+ } else {
99
+ const perLine = lines.map((line, i) => drawOne(line, i));
100
+ api.block({
101
+ id: "line", lines, voice, size, weight, x, y: y0, lineHeight, fill: api.palette.text, role: "block",
102
+ lineVisible: (i) => lineWordStart[i] < revealedWords,
103
+ lineGlyphs: (i) => perLine[i]
104
+ });
105
+ }
106
+ return {};
107
+ };
108
+
109
+ scenes["kinetic-list"] = (f, api) => {
110
+ const items = f.shot.params.items;
111
+ const hangul = items.some((item) => /[가-힣]/u.test(item));
112
+ const voice = api.presetId === "terminalcore" ? "pixel" : hangul ? "body" : "display";
113
+ const lineHeight = hangul ? 1.6 : 1.5;
114
+ const widest = items.reduce((a, b) => (Array.from(b).length > Array.from(a).length ? b : a));
115
+ let size = Math.min(api.type.fit(widest, { voice, weight: 700, width: 100 }, 1320, 96, 48), Math.floor(620 / (items.length * lineHeight)));
116
+ if (voice === "pixel") size = pixelSize(size, items.join(" "));
117
+ if (f.shot.params.heading) {
118
+ api.text({ id: "list-heading", text: f.shot.params.heading, voice: "machine", size: 26, weight: 400, x: LEFT + 4, y: 250, fill: api.palette.text, role: "annotation" });
119
+ }
120
+ const k = (i) => api.ease("slam", LTM.clamp((f.t - f.units[i].start) / 0.24));
121
+ api.block({
122
+ id: "list", lines: items, voice, size, weight: 700, x: LEFT + (api.presetId === "terminalcore" ? 24 : 0), y: 340 + size, lineHeight,
123
+ fill: api.palette.text, role: "block",
124
+ lineVisible: (i) => f.t >= f.units[i].start,
125
+ lineOffset: (i) => -24 * (1 - k(i)),
126
+ lineOpacity: (i) => k(i)
127
+ });
128
+ return {};
129
+ };
130
+
131
+ scenes.counter = (f, api) => {
132
+ const { from, to, label } = f.shot.params;
133
+ const span = f.shot.holdSec * 0.6;
134
+ const stepped = Math.floor(f.lt * 15) / 15;
135
+ const value = Math.round(from + (to - from) * api.ease("drift", LTM.clamp(stepped / span)));
136
+ const digits = String(value);
137
+ const final = String(Math.round(to));
138
+ const voice = api.presetId === "terminalcore" ? "pixel" : "display";
139
+ let size = api.type.fit(final, { voice, weight: 900, width: 100 }, 480, 150, 60);
140
+ const box = api.text({ id: "counter", text: digits, voice, size, weight: 900, x: LEFT + (api.presetId === "terminalcore" ? 24 : 0), y: 600, fill: api.palette.text });
141
+ if (label) api.text({ id: "counter-label", text: label, voice: "machine", size: 30, weight: 400, x: LEFT + 4 + (api.presetId === "terminalcore" ? 24 : 0), y: 680, fill: api.palette.text, role: "annotation" });
142
+ if (api.accent && box) api.mark({ id: "accent", x0: LEFT + 14, y0: 440, x1: LEFT + 70, y1: 440, width: 28, color: api.palette.accent, kind: "accent" });
143
+ return {};
144
+ };
145
+
146
+ scenes.signature = (f, api) => {
147
+ const font = f.shot.params.font;
148
+ const size = 180;
149
+ const lay = api.type.strokeLayout(f.shot.text, font, size);
150
+ const writeStart = f.start + f.shot.holdSec * 0.12, writeEnd = f.start + f.shot.holdSec * 0.72;
151
+ const chars = Array.from(f.shot.text);
152
+ const charTimes = chars.map((_, i) => [writeStart + (writeEnd - writeStart) * (i / chars.length), writeStart + (writeEnd - writeStart) * ((i + 1) / chars.length)]);
153
+ const length = api.type.writtenLength(lay, charTimes, f.t);
154
+ const scale = Math.min(1, 1500 / Math.max(1, lay.width));
155
+ api.stroke({ id: "signature", text: f.shot.text, font, size: size * scale, x: LEFT + (api.presetId === "terminalcore" ? 24 : 0), y: 620, penWidth: 3.2, fill: api.palette.text, length: length * scale });
156
+ return {};
157
+ };
158
+
159
+ scenes["end-card"] = (f, api) => {
160
+ const { title, sub, paragraph } = f.shot.params;
161
+ const voice = api.voices.display;
162
+ const k = entrance(f, api, f.lt);
163
+ const weight = api.presetId === "swiss-signal" ? 900 : 700;
164
+ let size = api.type.fit(title, { voice, weight, width: 100, trackingEm: -0.02 }, 1300, voice === "pixel" ? 126 : 150, 56);
165
+ if (voice === "pixel") size = pixelSize(size, title);
166
+ const x = LEFT + (api.presetId === "terminalcore" ? 24 : 0);
167
+ const typed = api.presetId === "terminalcore" ? typeInVisibility(title, f.lt, api.look.params["terminal-ui"].logLineRateCharsPerSec) : null;
168
+ const titleBox = api.text({ id: "end-title", text: title, voice, size, weight, trackingEm: api.presetId === "terminalcore" ? 0 : -0.02, x, y: 520, fill: api.palette.text, opacity: typed ? 1 : k, visible: typed?.visible });
169
+ if (typed && titleBox && !sub && !paragraph) api.caret(titleBox, size);
170
+ let y = 520 + 90;
171
+ if (sub) {
172
+ const subVoice = api.presetId === "terminalcore" ? "machine" : /[가-힣]/u.test(sub) ? "body" : "machine";
173
+ api.text({ id: "end-sub", text: sub, voice: subVoice, size: 40, weight: subVoice === "body" ? 400 : 400, x: x + 4, y, fill: api.palette.text, opacity: typed ? (typed.done ? 1 : 0) : k, role: "annotation" });
174
+ y += 80;
175
+ }
176
+ if (paragraph) {
177
+ const hangul = /[가-힣]/u.test(paragraph);
178
+ const lines = hangul ? api.type.wrapToWidth(paragraph, { voice: "body", weight: 400, size: 30 }, 900) : api.type.wrap(paragraph, 66);
179
+ api.block({ id: "end-paragraph", lines, voice: "body", size: 30, weight: 400, x: x + 4, y, lineHeight: hangul ? 1.6 : 1.5, fill: api.palette.text, role: "paragraph", opacity: typed ? (typed.done ? 1 : 0) : k });
180
+ }
181
+ if (api.accent) api.mark({ id: "accent", x0: x + 14, y0: 400, x1: x + 70, y1: 400, width: 28, color: api.palette.accent, kind: "accent" });
182
+ return {};
183
+ };
184
+
185
+ LTM.scenes = scenes;
186
+ LTM.SAFE = SAFE;
187
+ })();