@prestyj/cli 5.28.0 → 5.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/README.md +2 -2
  2. package/assets/motion/THIRD-PARTY.md +14 -19
  3. package/assets/motion/bin/contact-sheet.mjs +9 -3
  4. package/assets/motion/bin/cues.mjs +337 -0
  5. package/assets/motion/bin/flash-check.mjs +314 -0
  6. package/assets/motion/bin/fonts.mjs +17 -13
  7. package/assets/motion/bin/library.mjs +61 -18
  8. package/assets/motion/bin/motion-blur.mjs +943 -0
  9. package/assets/motion/bin/motion-check.mjs +366 -9
  10. package/assets/motion/bin/music-fit.mjs +436 -0
  11. package/assets/motion/bin/pdf-extract.mjs +22 -10
  12. package/assets/motion/bin/reference-study.mjs +346 -0
  13. package/assets/motion/bin/score-synth.mjs +1052 -93
  14. package/assets/motion/fonts/finger-paint/OFL.txt +93 -0
  15. package/assets/motion/fonts/finger-paint/finger-paint-normal.woff2 +0 -0
  16. package/assets/motion/fonts/fonts.json +56 -0
  17. package/assets/motion/fonts/short-stack/OFL.txt +94 -0
  18. package/assets/motion/fonts/short-stack/short-stack-normal.woff2 +0 -0
  19. package/assets/motion/fonts/sora/OFL.txt +93 -0
  20. package/assets/motion/fonts/sora/sora-normal.woff2 +0 -0
  21. package/assets/motion/fonts/specimen.jpg +0 -0
  22. package/assets/motion/fonts/unbounded/OFL.txt +93 -0
  23. package/assets/motion/fonts/unbounded/unbounded-normal.woff2 +0 -0
  24. package/assets/motion/library/README.md +52 -14
  25. package/assets/motion/library/kit/moves.js +1981 -0
  26. package/assets/motion/library/library.json +232 -0
  27. package/assets/motion/library/pieces/camera-rig/meta.json +13 -0
  28. package/assets/motion/library/pieces/camera-rig/piece.html +153 -0
  29. package/assets/motion/library/pieces/camera-rig/preview.jpg +0 -0
  30. package/assets/motion/library/pieces/chain-knock/meta.json +13 -0
  31. package/assets/motion/library/pieces/chain-knock/piece.html +195 -0
  32. package/assets/motion/library/pieces/chain-knock/preview.jpg +0 -0
  33. package/assets/motion/library/pieces/gather-to-logo/meta.json +13 -0
  34. package/assets/motion/library/pieces/gather-to-logo/piece.html +159 -0
  35. package/assets/motion/library/pieces/gather-to-logo/preview.jpg +0 -0
  36. package/assets/motion/library/pieces/morph-carry/meta.json +13 -0
  37. package/assets/motion/library/pieces/morph-carry/piece.html +173 -0
  38. package/assets/motion/library/pieces/morph-carry/preview.jpg +0 -0
  39. package/assets/motion/library/pieces/one-shape-journey/meta.json +13 -0
  40. package/assets/motion/library/pieces/one-shape-journey/piece.html +195 -0
  41. package/assets/motion/library/pieces/one-shape-journey/preview.jpg +0 -0
  42. package/assets/motion/library/pieces/open-from-subject/meta.json +13 -0
  43. package/assets/motion/library/pieces/open-from-subject/piece.html +168 -0
  44. package/assets/motion/library/pieces/open-from-subject/preview.jpg +0 -0
  45. package/assets/motion/library/pieces/request-to-result/meta.json +13 -0
  46. package/assets/motion/library/pieces/request-to-result/piece.html +212 -0
  47. package/assets/motion/library/pieces/request-to-result/preview.jpg +0 -0
  48. package/assets/motion/library/pieces/scale-dive/meta.json +13 -0
  49. package/assets/motion/library/pieces/scale-dive/piece.html +321 -0
  50. package/assets/motion/library/pieces/scale-dive/preview.jpg +0 -0
  51. package/assets/motion/library/pieces/screen-replica-steps/meta.json +13 -0
  52. package/assets/motion/library/pieces/screen-replica-steps/piece.html +366 -0
  53. package/assets/motion/library/pieces/screen-replica-steps/preview.jpg +0 -0
  54. package/assets/motion/library/pieces/zoom-into-card/meta.json +13 -0
  55. package/assets/motion/library/pieces/zoom-into-card/piece.html +179 -0
  56. package/assets/motion/library/pieces/zoom-into-card/preview.jpg +0 -0
  57. package/assets/motion/library/sheets/diagram.jpg +0 -0
  58. package/assets/motion/library/sheets/frame.jpg +0 -0
  59. package/assets/motion/library/sheets/transition.jpg +0 -0
  60. package/assets/motion/library/sheets/ui.jpg +0 -0
  61. package/assets/motion/plugin.json +1 -1
  62. package/assets/motion/references/build-sheet.md +206 -0
  63. package/assets/motion/references/runtime/determinism-rules.md +3 -3
  64. package/assets/motion/references/runtime/gsap-easing-and-stagger.md +28 -28
  65. package/assets/motion/references/runtime/gsap.md +3 -3
  66. package/assets/motion/references/runtime/inputs-and-assets.md +21 -16
  67. package/assets/motion/references/runtime/lint-validate-inspect.md +3 -3
  68. package/assets/motion/references/runtime/minimal-composition.md +6 -0
  69. package/assets/motion/references/runtime/preview-render.md +3 -3
  70. package/assets/motion/skills/app-walkthrough/SKILL.md +66 -0
  71. package/assets/motion/skills/before-after/SKILL.md +53 -0
  72. package/assets/motion/skills/brand-kit/SKILL.md +17 -16
  73. package/assets/motion/skills/dev-tool-video/SKILL.md +57 -0
  74. package/assets/motion/skills/launch-video/SKILL.md +62 -0
  75. package/assets/motion/skills/match-reference/SKILL.md +58 -0
  76. package/assets/motion/skills/motion/SKILL.md +167 -98
  77. package/assets/motion/skills/source-ingest/SKILL.md +23 -15
  78. package/assets/motion/skills/website-video/SKILL.md +59 -0
  79. package/assets/skills/bulletproof/SKILL.md +36 -11
  80. package/assets/skills/bulletproof/references/agent-surface.md +19 -9
  81. package/assets/skills/bulletproof/references/audit-protocol.md +20 -5
  82. package/assets/skills/bulletproof/references/platform-playbooks.md +5 -4
  83. package/assets/skills/bulletproof/references/provenance.md +26 -1
  84. package/assets/skills/bulletproof/references/secure-defaults.md +6 -5
  85. package/assets/skills/bulletproof/references/supply-chain.md +21 -17
  86. package/assets/skills/bulletproof/references/threat-landscape.md +28 -26
  87. package/assets/skills/bulletproof/references/verification.md +2 -0
  88. package/assets/skills/clarify/SKILL.md +25 -16
  89. package/assets/skills/code-review/SKILL.md +71 -13
  90. package/assets/skills/code-review/references/agent-diffs.md +27 -0
  91. package/assets/skills/code-review/references/tests.md +19 -0
  92. package/assets/skills/compliance-guard/SKILL.md +20 -5
  93. package/assets/skills/compliance-guard/references/artifacts.md +1 -1
  94. package/assets/skills/compliance-guard/references/eu-uk.md +16 -16
  95. package/assets/skills/compliance-guard/references/lawsuit-vectors.md +5 -5
  96. package/assets/skills/compliance-guard/references/provenance.md +41 -2
  97. package/assets/skills/compliance-guard/references/sector-gates.md +3 -3
  98. package/assets/skills/compliance-guard/references/security-baseline.md +2 -2
  99. package/assets/skills/compliance-guard/references/trigger-map.md +5 -5
  100. package/assets/skills/compliance-guard/references/us.md +27 -21
  101. package/assets/skills/durable/SKILL.md +87 -79
  102. package/assets/skills/durable/references/agent-db-safety.md +69 -0
  103. package/assets/skills/durable/references/backups-and-runtime.md +19 -12
  104. package/assets/skills/durable/references/migrations-and-schema.md +13 -6
  105. package/assets/skills/evidence-led-ui/SKILL.md +69 -127
  106. package/assets/skills/evidence-led-ui/references/anti-defaults.md +107 -208
  107. package/assets/skills/evidence-led-ui/references/direction.md +124 -0
  108. package/assets/skills/evidence-led-ui/references/production-contract.md +8 -0
  109. package/assets/skills/evidence-led-ui/references/provenance.md +24 -1
  110. package/assets/skills/lean/SKILL.md +90 -71
  111. package/assets/skills/lean/references/memory-and-processes.md +3 -2
  112. package/assets/skills/lean/references/playbooks.md +37 -12
  113. package/assets/skills/refactoring/SKILL.md +24 -3
  114. package/assets/skills/refactoring/references/agent-pitfalls.md +4 -1
  115. package/assets/skills/refactoring/references/legacy.md +21 -0
  116. package/assets/skills/root-cause/SKILL.md +20 -10
  117. package/assets/skills/shared-language/SKILL.md +16 -14
  118. package/assets/skills/tdd/SKILL.md +27 -15
  119. package/dist/app-sidecar.js +203 -47
  120. package/dist/app-sidecar.js.map +1 -1
  121. package/dist/cli.js +20 -28
  122. package/dist/cli.js.map +1 -1
  123. package/dist/core/acceptance-checks.d.ts +48 -0
  124. package/dist/core/acceptance-checks.js +144 -0
  125. package/dist/core/acceptance-checks.js.map +1 -0
  126. package/dist/core/agent-session.d.ts +119 -75
  127. package/dist/core/agent-session.js +561 -395
  128. package/dist/core/agent-session.js.map +1 -1
  129. package/dist/core/agents.d.ts +6 -5
  130. package/dist/core/agents.js +12 -3
  131. package/dist/core/agents.js.map +1 -1
  132. package/dist/core/ask-user.d.ts +90 -8
  133. package/dist/core/ask-user.js +124 -13
  134. package/dist/core/ask-user.js.map +1 -1
  135. package/dist/core/auth-providers.js +1 -1
  136. package/dist/core/auth-providers.js.map +1 -1
  137. package/dist/core/autopilot-verdict.d.ts +5 -1
  138. package/dist/core/autopilot-verdict.js +30 -13
  139. package/dist/core/autopilot-verdict.js.map +1 -1
  140. package/dist/core/bundled-agents.js +1 -3
  141. package/dist/core/bundled-agents.js.map +1 -1
  142. package/dist/core/cache-diagnostics.d.ts +68 -0
  143. package/dist/core/cache-diagnostics.js +196 -0
  144. package/dist/core/cache-diagnostics.js.map +1 -0
  145. package/dist/core/cache-expiry.d.ts +87 -0
  146. package/dist/core/cache-expiry.js +111 -0
  147. package/dist/core/cache-expiry.js.map +1 -0
  148. package/dist/core/compaction/compactor.js +78 -48
  149. package/dist/core/compaction/compactor.js.map +1 -1
  150. package/dist/core/compaction/plan-step-policy.d.ts +46 -0
  151. package/dist/core/compaction/plan-step-policy.js +57 -0
  152. package/dist/core/compaction/plan-step-policy.js.map +1 -0
  153. package/dist/core/destructive-git-guard.d.ts +90 -0
  154. package/dist/core/destructive-git-guard.js +871 -0
  155. package/dist/core/destructive-git-guard.js.map +1 -0
  156. package/dist/core/event-bus.d.ts +3 -0
  157. package/dist/core/event-bus.js +5 -0
  158. package/dist/core/event-bus.js.map +1 -1
  159. package/dist/core/fast-apply-benchmark.d.ts +1 -1
  160. package/dist/core/fast-apply-benchmark.js +2 -2
  161. package/dist/core/fast-apply-benchmark.js.map +1 -1
  162. package/dist/core/injection-detect.d.ts +38 -0
  163. package/dist/core/injection-detect.js +232 -0
  164. package/dist/core/injection-detect.js.map +1 -0
  165. package/dist/core/keep-awake.d.ts +88 -0
  166. package/dist/core/keep-awake.js +251 -0
  167. package/dist/core/keep-awake.js.map +1 -0
  168. package/dist/core/mcp/client.d.ts +72 -0
  169. package/dist/core/mcp/client.js +264 -41
  170. package/dist/core/mcp/client.js.map +1 -1
  171. package/dist/core/mcp/content.js +6 -2
  172. package/dist/core/mcp/content.js.map +1 -1
  173. package/dist/core/mcp/store.d.ts +6 -1
  174. package/dist/core/mcp/store.js +12 -1
  175. package/dist/core/mcp/store.js.map +1 -1
  176. package/dist/core/mcp/types.d.ts +18 -0
  177. package/dist/core/model-unavailable.d.ts +14 -0
  178. package/dist/core/model-unavailable.js +23 -0
  179. package/dist/core/model-unavailable.js.map +1 -0
  180. package/dist/core/node-debugger.d.ts +148 -0
  181. package/dist/core/node-debugger.js +642 -0
  182. package/dist/core/node-debugger.js.map +1 -0
  183. package/dist/core/nolan-context.d.ts +7 -5
  184. package/dist/core/nolan-context.js +106 -16
  185. package/dist/core/nolan-context.js.map +1 -1
  186. package/dist/core/nolan-prompt.js +24 -21
  187. package/dist/core/nolan-prompt.js.map +1 -1
  188. package/dist/core/package-threats.d.ts +18 -0
  189. package/dist/core/package-threats.js +168 -0
  190. package/dist/core/package-threats.js.map +1 -0
  191. package/dist/core/persistent-shell.d.ts +58 -6
  192. package/dist/core/persistent-shell.js +331 -49
  193. package/dist/core/persistent-shell.js.map +1 -1
  194. package/dist/core/process-manager.d.ts +14 -0
  195. package/dist/core/process-manager.js +61 -0
  196. package/dist/core/process-manager.js.map +1 -1
  197. package/dist/core/progress/git-xp.js +8 -14
  198. package/dist/core/progress/git-xp.js.map +1 -1
  199. package/dist/core/project-discovery.js +77 -26
  200. package/dist/core/project-discovery.js.map +1 -1
  201. package/dist/core/semantic-search-benchmark.d.ts +1 -1
  202. package/dist/core/semantic-search-benchmark.js +2 -2
  203. package/dist/core/semantic-search-benchmark.js.map +1 -1
  204. package/dist/core/session-history.d.ts +12 -0
  205. package/dist/core/session-history.js +27 -0
  206. package/dist/core/session-history.js.map +1 -1
  207. package/dist/core/session-manager.d.ts +13 -1
  208. package/dist/core/session-manager.js +38 -18
  209. package/dist/core/session-manager.js.map +1 -1
  210. package/dist/core/session-summary-index.d.ts +37 -0
  211. package/dist/core/session-summary-index.js +172 -0
  212. package/dist/core/session-summary-index.js.map +1 -0
  213. package/dist/core/settings-manager.d.ts +2 -0
  214. package/dist/core/settings-manager.js +10 -0
  215. package/dist/core/settings-manager.js.map +1 -1
  216. package/dist/core/shell-threats-popular-packages.d.ts +11 -0
  217. package/dist/core/shell-threats-popular-packages.js +675 -0
  218. package/dist/core/shell-threats-popular-packages.js.map +1 -0
  219. package/dist/core/shell-threats.d.ts +8 -0
  220. package/dist/core/shell-threats.js +186 -0
  221. package/dist/core/shell-threats.js.map +1 -0
  222. package/dist/core/skills.js +16 -4
  223. package/dist/core/skills.js.map +1 -1
  224. package/dist/core/stream-rules.d.ts +30 -0
  225. package/dist/core/stream-rules.js +151 -0
  226. package/dist/core/stream-rules.js.map +1 -0
  227. package/dist/core/subagent-manager.d.ts +23 -6
  228. package/dist/core/subagent-manager.js +25 -9
  229. package/dist/core/subagent-manager.js.map +1 -1
  230. package/dist/core/subagent-policy.js +1 -1
  231. package/dist/core/subagent-policy.js.map +1 -1
  232. package/dist/core/subagent-receipt.d.ts +54 -0
  233. package/dist/core/subagent-receipt.js +276 -0
  234. package/dist/core/subagent-receipt.js.map +1 -0
  235. package/dist/core/subagent-turn-record.d.ts +2 -0
  236. package/dist/core/subagent-turn-record.js.map +1 -1
  237. package/dist/core/test-impact.d.ts +73 -0
  238. package/dist/core/test-impact.js +467 -0
  239. package/dist/core/test-impact.js.map +1 -0
  240. package/dist/core/thinking-level.d.ts +1 -1
  241. package/dist/core/thinking-level.js +1 -1
  242. package/dist/core/thinking-level.js.map +1 -1
  243. package/dist/core/verification-gate.d.ts +2 -0
  244. package/dist/core/verification-gate.js +4 -0
  245. package/dist/core/verification-gate.js.map +1 -1
  246. package/dist/core/verification-snapshot.js +3 -5
  247. package/dist/core/verification-snapshot.js.map +1 -1
  248. package/dist/core/workspace-guard.d.ts +18 -7
  249. package/dist/core/workspace-guard.js +227 -60
  250. package/dist/core/workspace-guard.js.map +1 -1
  251. package/dist/core/worktree-setup.d.ts +23 -0
  252. package/dist/core/worktree-setup.js +128 -9
  253. package/dist/core/worktree-setup.js.map +1 -1
  254. package/dist/core/worktree.d.ts +20 -2
  255. package/dist/core/worktree.js +74 -31
  256. package/dist/core/worktree.js.map +1 -1
  257. package/dist/interactive.js +2 -1
  258. package/dist/interactive.js.map +1 -1
  259. package/dist/modes/json-mode.js +11 -2
  260. package/dist/modes/json-mode.js.map +1 -1
  261. package/dist/modes/subagent-worker-mode.d.ts +36 -1
  262. package/dist/modes/subagent-worker-mode.js +100 -42
  263. package/dist/modes/subagent-worker-mode.js.map +1 -1
  264. package/dist/motion-agent/motion-agent.d.ts +7 -3
  265. package/dist/motion-agent/motion-agent.js +6 -8
  266. package/dist/motion-agent/motion-agent.js.map +1 -1
  267. package/dist/motion-agent/motion-prompt.d.ts +1 -1
  268. package/dist/motion-agent/motion-prompt.js +16 -25
  269. package/dist/motion-agent/motion-prompt.js.map +1 -1
  270. package/dist/motion-agent/motion-review-session.js +1 -1
  271. package/dist/motion-agent/motion-review-session.js.map +1 -1
  272. package/dist/motion-agent/motion-review.d.ts +10 -3
  273. package/dist/motion-agent/motion-review.js +15 -7
  274. package/dist/motion-agent/motion-review.js.map +1 -1
  275. package/dist/motion-agent/motion-studio-context.js +1 -1
  276. package/dist/motion-agent/motion-studio-context.js.map +1 -1
  277. package/dist/system-prompt.d.ts +2 -1
  278. package/dist/system-prompt.js +15 -4
  279. package/dist/system-prompt.js.map +1 -1
  280. package/dist/test-support/keep-alive.d.ts +14 -0
  281. package/dist/test-support/keep-alive.js +17 -0
  282. package/dist/test-support/keep-alive.js.map +1 -0
  283. package/dist/tools/ask-user.js +3 -3
  284. package/dist/tools/ask-user.js.map +1 -1
  285. package/dist/tools/bash-read-evidence.d.ts +10 -0
  286. package/dist/tools/bash-read-evidence.js +133 -0
  287. package/dist/tools/bash-read-evidence.js.map +1 -0
  288. package/dist/tools/bash.d.ts +10 -1
  289. package/dist/tools/bash.js +179 -7
  290. package/dist/tools/bash.js.map +1 -1
  291. package/dist/tools/debug.d.ts +54 -0
  292. package/dist/tools/debug.js +233 -0
  293. package/dist/tools/debug.js.map +1 -0
  294. package/dist/tools/edit.js +13 -5
  295. package/dist/tools/edit.js.map +1 -1
  296. package/dist/tools/goals.d.ts +1 -1
  297. package/dist/tools/index.d.ts +25 -2
  298. package/dist/tools/index.js +48 -7
  299. package/dist/tools/index.js.map +1 -1
  300. package/dist/tools/prompt-hints.js +2 -0
  301. package/dist/tools/prompt-hints.js.map +1 -1
  302. package/dist/tools/read-tracker.d.ts +35 -2
  303. package/dist/tools/read-tracker.js +108 -11
  304. package/dist/tools/read-tracker.js.map +1 -1
  305. package/dist/tools/read.js +39 -7
  306. package/dist/tools/read.js.map +1 -1
  307. package/dist/tools/skill.js +5 -0
  308. package/dist/tools/skill.js.map +1 -1
  309. package/dist/tools/subagent-control.js +44 -8
  310. package/dist/tools/subagent-control.js.map +1 -1
  311. package/dist/tools/subagent-shared.d.ts +48 -8
  312. package/dist/tools/subagent-shared.js +75 -14
  313. package/dist/tools/subagent-shared.js.map +1 -1
  314. package/dist/tools/subagent.d.ts +8 -2
  315. package/dist/tools/subagent.js +28 -10
  316. package/dist/tools/subagent.js.map +1 -1
  317. package/dist/tools/task-output.js +3 -2
  318. package/dist/tools/task-output.js.map +1 -1
  319. package/dist/tools/task-send.d.ts +1 -1
  320. package/dist/tools/task-send.js +15 -1
  321. package/dist/tools/task-send.js.map +1 -1
  322. package/dist/tools/tool-tiers.d.ts +2 -2
  323. package/dist/tools/tool-tiers.js +3 -2
  324. package/dist/tools/tool-tiers.js.map +1 -1
  325. package/dist/tools/truncate.d.ts +21 -0
  326. package/dist/tools/truncate.js +187 -0
  327. package/dist/tools/truncate.js.map +1 -1
  328. package/dist/tools/ui-adopt.js +2 -0
  329. package/dist/tools/ui-adopt.js.map +1 -1
  330. package/dist/tools/write.js +4 -3
  331. package/dist/tools/write.js.map +1 -1
  332. package/dist/ui/App.d.ts +0 -4
  333. package/dist/ui/App.js +5 -28
  334. package/dist/ui/App.js.map +1 -1
  335. package/dist/ui/components/ActivityIndicator.js +1 -0
  336. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  337. package/dist/ui/components/Footer.js +1 -1
  338. package/dist/ui/components/Footer.js.map +1 -1
  339. package/dist/ui/hooks/useAgentLoop.d.ts +1 -8
  340. package/dist/ui/hooks/useAgentLoop.js +1 -119
  341. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  342. package/dist/ui/render.d.ts +2 -4
  343. package/dist/ui/render.js +3 -2
  344. package/dist/ui/render.js.map +1 -1
  345. package/dist/utils/git.d.ts +77 -0
  346. package/dist/utils/git.js +285 -21
  347. package/dist/utils/git.js.map +1 -1
  348. package/dist/utils/github-ci.js +2 -1
  349. package/dist/utils/github-ci.js.map +1 -1
  350. package/dist/utils/github.js +11 -9
  351. package/dist/utils/github.js.map +1 -1
  352. package/dist/utils/image.d.ts +14 -0
  353. package/dist/utils/image.js +16 -0
  354. package/dist/utils/image.js.map +1 -1
  355. package/dist/utils/process.d.ts +20 -0
  356. package/dist/utils/process.js +98 -0
  357. package/dist/utils/process.js.map +1 -1
  358. package/dist/utils/text.d.ts +12 -0
  359. package/dist/utils/text.js +11 -0
  360. package/dist/utils/text.js.map +1 -1
  361. package/package.json +6 -6
  362. package/assets/motion/skills/mixkit-split-text-617/SKILL.md +0 -115
  363. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-480.json +0 -1
  364. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-494.json +0 -1
  365. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-5.json +0 -1
  366. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-508.json +0 -1
  367. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6525.json +0 -1
  368. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6539.json +0 -1
  369. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6647.json +0 -1
  370. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6663.json +0 -1
  371. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6677.json +0 -1
  372. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6691.json +0 -1
  373. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6706.json +0 -1
  374. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6722.json +0 -1
  375. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6736.json +0 -1
  376. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6750.json +0 -1
  377. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6764.json +0 -1
  378. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6780.json +0 -1
  379. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6794.json +0 -1
  380. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6810.json +0 -1
  381. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6823.json +0 -1
  382. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6872.json +0 -1
  383. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6936.json +0 -1
  384. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-76.json +0 -1
  385. package/assets/motion/skills/mixkit-split-text-617/data/manifest.json +0 -495
  386. package/assets/motion/skills/mixkit-split-text-617/references/RECONSTRUCTION.md +0 -201
  387. package/assets/motion/skills/mixkit-split-text-617/references/VERIFICATION.md +0 -107
  388. package/assets/motion/skills/mixkit-split-text-617/tools/inspect_motion.py +0 -130
  389. package/assets/motion/skills/video-qa/SKILL.md +0 -66
  390. package/dist/core/ideal-review-subagent.d.ts +0 -42
  391. package/dist/core/ideal-review-subagent.js +0 -95
  392. package/dist/core/ideal-review-subagent.js.map +0 -1
  393. package/dist/core/ideal-review.d.ts +0 -82
  394. package/dist/core/ideal-review.js +0 -242
  395. package/dist/core/ideal-review.js.map +0 -1
  396. package/dist/motion-agent/motion-check-tool.d.ts +0 -21
  397. package/dist/motion-agent/motion-check-tool.js +0 -206
  398. package/dist/motion-agent/motion-check-tool.js.map +0 -1
@@ -484,6 +484,54 @@
484
484
  "license": "original",
485
485
  "previewLook": "soft-light-ad"
486
486
  },
487
+ {
488
+ "id": "camera-rig",
489
+ "name": "Camera rig",
490
+ "kind": "frame",
491
+ "description": "An operated camera over one world layer, built on the move kit: starts wide, whips to a card with a little overshoot, floats by hand, whips on and holds dead still for a rest, pushes in as a stamp lands with one shake on contact, then glides back out, over a parallax backdrop that slides slower than the cards. Replace the cards with your scenes and edit the camera keys.",
492
+ "tags": [
493
+ "camera",
494
+ "whip",
495
+ "handheld",
496
+ "shake",
497
+ "push-in",
498
+ "zoom",
499
+ "rest",
500
+ "parallax",
501
+ "continuous",
502
+ "kit"
503
+ ],
504
+ "fonts": [],
505
+ "duration": 8,
506
+ "license": "original",
507
+ "requires": [
508
+ "kit"
509
+ ],
510
+ "previewLook": "swiss-grid"
511
+ },
512
+ {
513
+ "id": "chain-knock",
514
+ "name": "Chain knock",
515
+ "kind": "diagram",
516
+ "description": "A ball hops in from the left, hits the first of five process blocks and knocks the whole row like dominoes; the last block stamps a result. Edit the step labels, the result word and the hop timing.",
517
+ "tags": [
518
+ "chain-reaction",
519
+ "process",
520
+ "steps",
521
+ "cause-and-effect",
522
+ "hop",
523
+ "stamp",
524
+ "continuous",
525
+ "kit"
526
+ ],
527
+ "fonts": [],
528
+ "duration": 5,
529
+ "license": "original",
530
+ "requires": [
531
+ "kit"
532
+ ],
533
+ "previewLook": "swiss-grid"
534
+ },
487
535
  {
488
536
  "id": "chapter-card",
489
537
  "name": "Chapter card",
@@ -830,6 +878,28 @@
830
878
  "license": "original",
831
879
  "previewLook": "duotone-broadcast"
832
880
  },
881
+ {
882
+ "id": "gather-to-logo",
883
+ "name": "Gather to logo",
884
+ "kind": "transition",
885
+ "description": "Feature chips pop in scattered around the frame, then travel on arcs into the centre, and the moment the last one lands a logo mark and wordmark stamp in as the end card. Edit the chip words, their positions, the mark letter and the wordmark.",
886
+ "tags": [
887
+ "logo",
888
+ "end-card",
889
+ "gather",
890
+ "converge",
891
+ "outro",
892
+ "continuous",
893
+ "kit"
894
+ ],
895
+ "fonts": [],
896
+ "duration": 5,
897
+ "license": "original",
898
+ "requires": [
899
+ "kit"
900
+ ],
901
+ "previewLook": "sunlit-consumer"
902
+ },
833
903
  {
834
904
  "id": "highlight-sweep",
835
905
  "name": "Highlight sweep",
@@ -991,6 +1061,74 @@
991
1061
  "license": "original",
992
1062
  "previewLook": "soft-light-ad"
993
1063
  },
1064
+ {
1065
+ "id": "morph-carry",
1066
+ "name": "Morph carry",
1067
+ "kind": "transition",
1068
+ "description": "A cursor presses a pill button and the button's own box springs open into the full frame, its label leaving as the next scene's headline rises inside it. Edit the button label, the hint line and the next scene's kicker and headline.",
1069
+ "tags": [
1070
+ "handoff",
1071
+ "continuous",
1072
+ "kit",
1073
+ "morph",
1074
+ "cursor",
1075
+ "button",
1076
+ "box-to-frame"
1077
+ ],
1078
+ "fonts": [],
1079
+ "duration": 5,
1080
+ "license": "original",
1081
+ "requires": [
1082
+ "kit"
1083
+ ],
1084
+ "previewLook": "soft-light-ad"
1085
+ },
1086
+ {
1087
+ "id": "one-shape-journey",
1088
+ "name": "One shape journey",
1089
+ "kind": "diagram",
1090
+ "description": "One shape never leaves: a dot pops in, stretches into a progress bar that fills, morphs into a button, then into an app-icon block as the product name rises beside it, with quick label swaps inside. Edit the progress label, button text, icon letter, name and tagline.",
1091
+ "tags": [
1092
+ "morph",
1093
+ "continuous",
1094
+ "kit",
1095
+ "progress",
1096
+ "button",
1097
+ "app-icon",
1098
+ "logo",
1099
+ "end-card",
1100
+ "handoff"
1101
+ ],
1102
+ "fonts": [],
1103
+ "duration": 6,
1104
+ "license": "original",
1105
+ "requires": [
1106
+ "kit"
1107
+ ],
1108
+ "previewLook": "dark-studio"
1109
+ },
1110
+ {
1111
+ "id": "open-from-subject",
1112
+ "name": "Open from subject",
1113
+ "kind": "transition",
1114
+ "description": "A round mark with a label pops in and holds, then the next stage opens as a growing circle from the mark's centre onto a --field-2 scene where a headline rises. Edit the mark glyph, its label, and the stage's kicker and headline.",
1115
+ "tags": [
1116
+ "handoff",
1117
+ "continuous",
1118
+ "kit",
1119
+ "iris",
1120
+ "circle",
1121
+ "reveal",
1122
+ "logo"
1123
+ ],
1124
+ "fonts": [],
1125
+ "duration": 4,
1126
+ "license": "original",
1127
+ "requires": [
1128
+ "kit"
1129
+ ],
1130
+ "previewLook": "duotone-broadcast"
1131
+ },
994
1132
  {
995
1133
  "id": "orbiting-circles",
996
1134
  "name": "Orbiting circles",
@@ -1051,6 +1189,30 @@
1051
1189
  "license": "original",
1052
1190
  "previewLook": "soft-light-ad"
1053
1191
  },
1192
+ {
1193
+ "id": "request-to-result",
1194
+ "name": "Request to result",
1195
+ "kind": "ui",
1196
+ "description": "A request types into a prompt box, a cursor presses Send, and the same box grows into the result card as rows land one by one with drawn checks; one element carries the scene, no crossfade. Edit the request text, the result header and the rows.",
1197
+ "tags": [
1198
+ "prompt",
1199
+ "cursor",
1200
+ "typing",
1201
+ "morph",
1202
+ "result",
1203
+ "checklist",
1204
+ "ai",
1205
+ "continuous",
1206
+ "kit"
1207
+ ],
1208
+ "fonts": [],
1209
+ "duration": 7,
1210
+ "license": "original",
1211
+ "requires": [
1212
+ "kit"
1213
+ ],
1214
+ "previewLook": "soft-light-ad"
1215
+ },
1054
1216
  {
1055
1217
  "id": "retro-grid",
1056
1218
  "name": "Retro grid",
@@ -1077,6 +1239,29 @@
1077
1239
  },
1078
1240
  "previewLook": "duotone-broadcast"
1079
1241
  },
1242
+ {
1243
+ "id": "scale-dive",
1244
+ "name": "Scale dive",
1245
+ "kind": "transition",
1246
+ "description": "A powers-of-ten camera dive on one world layer: a wide dashboard, into one card, into the number inside it, which fills the frame and rests as the payoff. Edit the dashboard copy, the target card and the number; nested levels are authored large and scaled down so text stays crisp at every zoom.",
1247
+ "tags": [
1248
+ "zoom",
1249
+ "dive",
1250
+ "camera",
1251
+ "dashboard",
1252
+ "number",
1253
+ "payoff",
1254
+ "continuous",
1255
+ "kit"
1256
+ ],
1257
+ "fonts": [],
1258
+ "duration": 6,
1259
+ "license": "original",
1260
+ "requires": [
1261
+ "kit"
1262
+ ],
1263
+ "previewLook": "soft-light-ad"
1264
+ },
1080
1265
  {
1081
1266
  "id": "scale-through-word",
1082
1267
  "name": "Scale through word",
@@ -1099,6 +1284,30 @@
1099
1284
  "license": "original",
1100
1285
  "previewLook": "soft-light-ad"
1101
1286
  },
1287
+ {
1288
+ "id": "screen-replica-steps",
1289
+ "name": "Screen replica steps",
1290
+ "kind": "ui",
1291
+ "description": "A real app screen rebuilt at its screenshot size and walked through step by step: a cursor opens a dropdown, picks an option and saves, every state scripted by a pure setState(t), with one camera close-up per step that follows the cursor and widens at the end. Replace the replica elements with your screenshot's measured layout and edit the copy.",
1292
+ "tags": [
1293
+ "replica",
1294
+ "walkthrough",
1295
+ "cursor",
1296
+ "zoom",
1297
+ "camera",
1298
+ "screenshot",
1299
+ "settings",
1300
+ "continuous",
1301
+ "kit"
1302
+ ],
1303
+ "fonts": [],
1304
+ "duration": 8,
1305
+ "license": "original",
1306
+ "requires": [
1307
+ "kit"
1308
+ ],
1309
+ "previewLook": "soft-light-ad"
1310
+ },
1102
1311
  {
1103
1312
  "id": "serif-quote",
1104
1313
  "name": "Pull quote",
@@ -1379,6 +1588,29 @@
1379
1588
  "duration": 4,
1380
1589
  "license": "original",
1381
1590
  "previewLook": "soft-light-ad"
1591
+ },
1592
+ {
1593
+ "id": "zoom-into-card",
1594
+ "name": "Zoom into card",
1595
+ "kind": "transition",
1596
+ "description": "Six cards pop in, one is picked and the camera pushes straight through it until its fill becomes the next scene, where a title drops in. Edit the card names, TARGET, and the next scene's kicker and title.",
1597
+ "tags": [
1598
+ "handoff",
1599
+ "continuous",
1600
+ "kit",
1601
+ "zoom",
1602
+ "dive",
1603
+ "camera",
1604
+ "cards",
1605
+ "grid"
1606
+ ],
1607
+ "fonts": [],
1608
+ "duration": 5,
1609
+ "license": "original",
1610
+ "requires": [
1611
+ "kit"
1612
+ ],
1613
+ "previewLook": "swiss-grid"
1382
1614
  }
1383
1615
  ]
1384
1616
  }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "camera-rig",
3
+ "name": "Camera rig",
4
+ "kind": "frame",
5
+ "description": "An operated camera over one world layer, built on the move kit: starts wide, whips to a card with a little overshoot, floats by hand, whips on and holds dead still for a rest, pushes in as a stamp lands with one shake on contact, then glides back out, over a parallax backdrop that slides slower than the cards. Replace the cards with your scenes and edit the camera keys.",
6
+ "tags": ["camera", "whip", "handheld", "shake", "push-in", "zoom", "rest", "parallax", "continuous", "kit"],
7
+ "fonts": [],
8
+ "duration": 8,
9
+ "previewAt": 5.9,
10
+ "license": "original",
11
+ "requires": ["kit"],
12
+ "previewLook": "swiss-grid"
13
+ }
@@ -0,0 +1,153 @@
1
+ <!doctype html>
2
+ <!--
3
+ camera-rig: an operated camera over one world layer (move kit). It starts
4
+ wide, whips to the first card, floats by hand, whips on to the second and
5
+ holds dead still for a rest, then pushes to the third as a stamp lands
6
+ (one shake on contact) and glides back out. The dotted backdrop is a
7
+ parallax layer at depth 0.6, so it slides slower than the cards.
8
+ Needs the move kit: `library.mjs add` installs it; put its <script> in the
9
+ root head after GSAP.
10
+ Params (script top): KEYS (where the camera looks, in world px), REST
11
+ (the still stretch), STAMP_AT, BACK_DEPTH (0 pinned, 1 moves with the
12
+ cards). Move the cards with their left/top (card centre in world px).
13
+ -->
14
+ <html lang="en">
15
+ <head>
16
+ <meta charset="UTF-8" />
17
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
18
+ </head>
19
+ <body>
20
+ <div
21
+ id="camera-rig-root"
22
+ data-composition-id="camera-rig"
23
+ data-start="0"
24
+ data-duration="8"
25
+ data-width="1920"
26
+ data-height="1080"
27
+ >
28
+ <style>
29
+ [data-composition-id="camera-rig"] {
30
+ position: absolute;
31
+ inset: 0;
32
+ overflow: hidden;
33
+ color: var(--ink, #111);
34
+ font-family: var(--text, sans-serif);
35
+ }
36
+ [data-composition-id="camera-rig"] .cr-world,
37
+ [data-composition-id="camera-rig"] .cr-back {
38
+ position: absolute;
39
+ left: 0;
40
+ top: 0;
41
+ width: 1920px;
42
+ height: 1080px;
43
+ }
44
+ /* The layer stays at 0,0 in world px (the camera maths needs that);
45
+ its dots overhang a full frame each way so no pan shows an edge. */
46
+ [data-composition-id="camera-rig"] .cr-back::before {
47
+ content: "";
48
+ position: absolute;
49
+ inset: -1080px -1920px;
50
+ background-image: radial-gradient(circle, var(--line, rgba(0, 0, 0, 0.18)) 2px, transparent 2.5px);
51
+ background-size: 48px 48px;
52
+ background-position: 24px 0;
53
+ }
54
+ [data-composition-id="camera-rig"] .cr-card {
55
+ position: absolute;
56
+ width: 520px;
57
+ height: 300px;
58
+ margin: -150px 0 0 -260px;
59
+ box-sizing: border-box;
60
+ padding: 40px 44px;
61
+ border-radius: var(--radius, 18px);
62
+ background: var(--field-2, #eee);
63
+ border: 2px solid var(--line, rgba(0, 0, 0, 0.18));
64
+ display: flex;
65
+ flex-direction: column;
66
+ justify-content: space-between;
67
+ }
68
+ [data-composition-id="camera-rig"] .cr-label {
69
+ font-family: var(--mono, monospace);
70
+ font-size: 24px;
71
+ letter-spacing: 0.08em;
72
+ text-transform: uppercase;
73
+ color: var(--muted, #666);
74
+ }
75
+ [data-composition-id="camera-rig"] .cr-title {
76
+ font-family: var(--display, sans-serif);
77
+ font-weight: var(--display-weight, 700);
78
+ font-stretch: var(--display-stretch, 100%);
79
+ letter-spacing: var(--display-tracking, -0.02em);
80
+ font-size: 76px;
81
+ line-height: 1;
82
+ }
83
+ [data-composition-id="camera-rig"] .cr-stamp {
84
+ position: absolute;
85
+ right: 36px;
86
+ top: 30px;
87
+ padding: 8px 18px;
88
+ border: 4px solid var(--ink, #111);
89
+ border-radius: 10px;
90
+ background: var(--field, #fff);
91
+ color: var(--ink, #111);
92
+ font-family: var(--mono, monospace);
93
+ font-weight: 700;
94
+ font-size: 30px;
95
+ letter-spacing: 0.06em;
96
+ opacity: 0;
97
+ }
98
+ </style>
99
+ <div class="cr-back"></div>
100
+ <div class="cr-world">
101
+ <!-- edit: the three subjects (position with left/top = card centre in world px) -->
102
+ <div class="cr-card" style="left: 470px; top: 560px">
103
+ <div class="cr-label">01 / lead</div>
104
+ <div class="cr-title">Find it</div>
105
+ </div>
106
+ <div class="cr-card" style="left: 1450px; top: 320px">
107
+ <div class="cr-label">02 / rest</div>
108
+ <div class="cr-title">Read it</div>
109
+ </div>
110
+ <div class="cr-card" style="left: 1320px; top: 800px">
111
+ <div class="cr-label">03 / contact</div>
112
+ <div class="cr-title">Ship it</div>
113
+ <div class="cr-stamp">DONE</div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ <script>
118
+ (function () {
119
+ const kit = window.GGMotionKit;
120
+ const root = document.querySelector('[data-composition-id="camera-rig"]');
121
+ const world = root.querySelector(".cr-world");
122
+ const back = root.querySelector(".cr-back");
123
+ const stampEl = root.querySelector(".cr-stamp");
124
+ const tl = gsap.timeline({ paused: true });
125
+
126
+ // Where the camera looks (world px at frame centre) and when each move starts.
127
+ const KEYS = [
128
+ { x: 960, y: 540, zoom: 1 },
129
+ { at: 0.7, x: 470, y: 560, zoom: 1.9, move: "whip", duration: 0.8 },
130
+ { at: 2.5, x: 1450, y: 320, zoom: 2.1, move: "whip", duration: 0.8 },
131
+ { at: 4.9, x: 1320, y: 800, zoom: 1.8, move: "whip", duration: 0.8 },
132
+ { at: 6.6, x: 960, y: 540, zoom: 1, move: "glide", duration: 1.2 },
133
+ ];
134
+ const REST = [3.4, 4.7]; // dead still: no float, no drift
135
+ const STAMP_AT = 5.6;
136
+ const BACK_DEPTH = 0.6;
137
+
138
+ const contact = kit.stamp(tl, stampEl, STAMP_AT, { rotate: -6 });
139
+ kit.camera(tl, world, KEYS, {
140
+ duration: 8,
141
+ lead: 0.1,
142
+ handheld: { amp: 5, rotate: 0.15, seed: 4 },
143
+ rests: [REST],
144
+ shakes: [{ at: contact, amount: 12 }],
145
+ layers: [{ el: back, depth: BACK_DEPTH }],
146
+ });
147
+
148
+ window.__timelines = window.__timelines || {};
149
+ window.__timelines["camera-rig"] = tl;
150
+ })();
151
+ </script>
152
+ </body>
153
+ </html>
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "chain-knock",
3
+ "name": "Chain knock",
4
+ "kind": "diagram",
5
+ "description": "A ball hops in from the left, hits the first of five process blocks and knocks the whole row like dominoes; the last block stamps a result. Edit the step labels, the result word and the hop timing.",
6
+ "tags": ["chain-reaction", "process", "steps", "cause-and-effect", "hop", "stamp", "continuous", "kit"],
7
+ "fonts": [],
8
+ "duration": 5,
9
+ "previewAt": 1.72,
10
+ "license": "original",
11
+ "requires": ["kit"],
12
+ "previewLook": "swiss-grid"
13
+ }
@@ -0,0 +1,195 @@
1
+ <!doctype html>
2
+ <!--
3
+ chain-knock: cause and effect along a process (move kit). A ball hops in
4
+ from the left twice, its second landing puts it flush against block 1,
5
+ and that contact knocks the row block by block; as the last block takes
6
+ its hit, the result stamps onto it.
7
+ Needs the move kit: `library.mjs add` installs it; put its <script> in the
8
+ root head after GSAP.
9
+ Params (script top): HOPS (each hop's start, air time, height and the x it
10
+ lands at; the last one must land at CONTACT_X), BALL, KNOCK_PUSH,
11
+ KNOCK_GAP, STAMP_FALL (the stamp falls this long and lands on the last knock).
12
+ Geometry: --ck-* variables (block size and gap; the row is centred).
13
+ -->
14
+ <html lang="en">
15
+ <head>
16
+ <meta charset="UTF-8" />
17
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
18
+ </head>
19
+ <body>
20
+ <div
21
+ id="chain-knock-root"
22
+ data-composition-id="chain-knock"
23
+ data-start="0"
24
+ data-duration="5"
25
+ data-width="1920"
26
+ data-height="1080"
27
+ >
28
+ <style>
29
+ [data-composition-id="chain-knock"] {
30
+ position: absolute;
31
+ inset: 0;
32
+ overflow: hidden;
33
+ color: var(--ink, #111);
34
+ font-family: var(--text, sans-serif);
35
+ }
36
+ [data-composition-id="chain-knock"] .ck-stage {
37
+ position: absolute;
38
+ inset: 0;
39
+ }
40
+ [data-composition-id="chain-knock"] .ck-floor {
41
+ position: absolute;
42
+ left: 0;
43
+ right: 0;
44
+ top: 650px;
45
+ height: 3px;
46
+ background: var(--line, rgba(0, 0, 0, 0.2));
47
+ }
48
+ [data-composition-id="chain-knock"] .ck-row {
49
+ position: absolute;
50
+ left: 338px;
51
+ top: 470px;
52
+ display: flex;
53
+ gap: 36px;
54
+ }
55
+ [data-composition-id="chain-knock"] .ck-block {
56
+ position: relative;
57
+ width: 220px;
58
+ height: 180px;
59
+ box-sizing: border-box;
60
+ padding: 22px 24px;
61
+ border: 3px solid var(--ink, #111);
62
+ border-radius: calc(var(--radius, 18px) * 0.6);
63
+ background: var(--field, #fff);
64
+ display: flex;
65
+ flex-direction: column;
66
+ justify-content: space-between;
67
+ transform-origin: 50% 100%;
68
+ }
69
+ [data-composition-id="chain-knock"] .ck-block.is-last {
70
+ background: var(--accent, #2f5bff);
71
+ border-color: var(--accent, #2f5bff);
72
+ color: var(--field, #fff);
73
+ }
74
+ [data-composition-id="chain-knock"] .ck-num {
75
+ font-family: var(--mono, monospace);
76
+ font-size: 22px;
77
+ letter-spacing: 0.08em;
78
+ color: var(--muted, #666);
79
+ }
80
+ [data-composition-id="chain-knock"] .ck-block.is-last .ck-num {
81
+ color: inherit;
82
+ }
83
+ [data-composition-id="chain-knock"] .ck-label {
84
+ font-family: var(--display, sans-serif);
85
+ font-weight: var(--display-weight, 700);
86
+ font-stretch: var(--display-stretch, 100%);
87
+ letter-spacing: var(--display-tracking, -0.02em);
88
+ font-size: 46px;
89
+ line-height: 1;
90
+ }
91
+ [data-composition-id="chain-knock"] .ck-stamp {
92
+ position: absolute;
93
+ left: 50%;
94
+ top: -92px;
95
+ margin-left: -130px;
96
+ width: 260px;
97
+ box-sizing: border-box;
98
+ text-align: center;
99
+ padding: 12px 0;
100
+ border: 4px solid var(--ink, #111);
101
+ border-radius: 12px;
102
+ background: var(--field, #fff);
103
+ color: var(--ink, #111);
104
+ font-family: var(--mono, monospace);
105
+ font-weight: 700;
106
+ font-size: 30px;
107
+ letter-spacing: 0.08em;
108
+ opacity: 0;
109
+ }
110
+ [data-composition-id="chain-knock"] .ck-ball {
111
+ position: absolute;
112
+ left: 0;
113
+ top: 586px;
114
+ width: 64px;
115
+ height: 64px;
116
+ }
117
+ [data-composition-id="chain-knock"] .ck-ball-body {
118
+ width: 64px;
119
+ height: 64px;
120
+ border-radius: 50%;
121
+ background: var(--ink, #111);
122
+ }
123
+ [data-composition-id="chain-knock"] .ck-caption {
124
+ position: absolute;
125
+ left: 338px;
126
+ top: 720px;
127
+ font-family: var(--mono, monospace);
128
+ font-size: 24px;
129
+ letter-spacing: 0.08em;
130
+ text-transform: uppercase;
131
+ color: var(--muted, #666);
132
+ }
133
+ </style>
134
+ <div class="ck-stage">
135
+ <div class="ck-floor"></div>
136
+ <div class="ck-row">
137
+ <!-- edit: the five steps -->
138
+ <div class="ck-block"><div class="ck-num">01</div><div class="ck-label">Idea</div></div>
139
+ <div class="ck-block"><div class="ck-num">02</div><div class="ck-label">Draft</div></div>
140
+ <div class="ck-block"><div class="ck-num">03</div><div class="ck-label">Review</div></div>
141
+ <div class="ck-block"><div class="ck-num">04</div><div class="ck-label">Test</div></div>
142
+ <div class="ck-block is-last">
143
+ <div class="ck-num">05</div>
144
+ <div class="ck-label">Release</div>
145
+ <!-- edit: the result -->
146
+ <div class="ck-stamp">SHIPPED</div>
147
+ </div>
148
+ </div>
149
+ <!-- edit: caption -->
150
+ <div class="ck-caption">One push moves the whole pipeline</div>
151
+ <div class="ck-ball"><div class="ck-ball-body"></div></div>
152
+ </div>
153
+ </div>
154
+ <script>
155
+ (function () {
156
+ const kit = window.GGMotionKit;
157
+ const root = document.querySelector('[data-composition-id="chain-knock"]');
158
+ const ball = root.querySelector(".ck-ball");
159
+ const body = root.querySelector(".ck-ball-body");
160
+ const blocks = root.querySelectorAll(".ck-block");
161
+ const stampEl = root.querySelector(".ck-stamp");
162
+ const tl = gsap.timeline({ paused: true });
163
+
164
+ const BALL = 64;
165
+ const START_X = -90; // off the left edge
166
+ const CONTACT_X = blocks[0].offsetLeft + blocks[0].offsetParent.offsetLeft - BALL; // flush with block 1
167
+ const HOPS = [
168
+ { at: 0.3, air: 0.5, height: 190, to: 110 },
169
+ { at: 1.05, air: 0.42, height: 120, to: CONTACT_X },
170
+ ];
171
+ const KNOCK_PUSH = 44;
172
+ const KNOCK_GAP = 0.13;
173
+ const STAMP_FALL = 0.2; // stamp contact lands on the last knock
174
+
175
+ let x = START_X;
176
+ let landed = 0;
177
+ HOPS.forEach((h, i) => {
178
+ landed = kit.hop(tl, body, h.at, { duration: h.air, height: h.height });
179
+ // Horizontal travel happens only in the air, so the landing is the contact.
180
+ tl.fromTo(ball, { x }, { x: h.to, duration: h.air, ease: "none", immediateRender: i === 0 }, h.at + 0.08);
181
+ x = h.to;
182
+ });
183
+
184
+ const last = kit.knock(tl, blocks, landed, { push: KNOCK_PUSH, gap: KNOCK_GAP, tilt: 6 });
185
+ // The ball gives a little and rolls back off the block it hit.
186
+ tl.to(ball, { x: CONTACT_X - 46, duration: kit.settleTime("soft"), ease: kit.springEase("soft") }, landed + 0.02);
187
+ kit.stamp(tl, stampEl, last - STAMP_FALL, { rotate: -5, duration: STAMP_FALL });
188
+ tl.set({}, {}, 5);
189
+
190
+ window.__timelines = window.__timelines || {};
191
+ window.__timelines["chain-knock"] = tl;
192
+ })();
193
+ </script>
194
+ </body>
195
+ </html>
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "gather-to-logo",
3
+ "name": "Gather to logo",
4
+ "kind": "transition",
5
+ "description": "Feature chips pop in scattered around the frame, then travel on arcs into the centre, and the moment the last one lands a logo mark and wordmark stamp in as the end card. Edit the chip words, their positions, the mark letter and the wordmark.",
6
+ "tags": ["logo", "end-card", "gather", "converge", "outro", "continuous", "kit"],
7
+ "fonts": [],
8
+ "duration": 5,
9
+ "previewAt": 2.6,
10
+ "license": "original",
11
+ "requires": ["kit"],
12
+ "previewLook": "sunlit-consumer"
13
+ }