@prestyj/cli 5.28.0 → 5.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +2 -2
  2. package/assets/motion/THIRD-PARTY.md +14 -19
  3. package/assets/motion/bin/flash-check.mjs +314 -0
  4. package/assets/motion/bin/fonts.mjs +17 -13
  5. package/assets/motion/bin/library.mjs +8 -8
  6. package/assets/motion/bin/motion-check.mjs +12 -6
  7. package/assets/motion/fonts/finger-paint/OFL.txt +93 -0
  8. package/assets/motion/fonts/finger-paint/finger-paint-normal.woff2 +0 -0
  9. package/assets/motion/fonts/fonts.json +56 -0
  10. package/assets/motion/fonts/short-stack/OFL.txt +94 -0
  11. package/assets/motion/fonts/short-stack/short-stack-normal.woff2 +0 -0
  12. package/assets/motion/fonts/sora/OFL.txt +93 -0
  13. package/assets/motion/fonts/sora/sora-normal.woff2 +0 -0
  14. package/assets/motion/fonts/specimen.jpg +0 -0
  15. package/assets/motion/fonts/unbounded/OFL.txt +93 -0
  16. package/assets/motion/fonts/unbounded/unbounded-normal.woff2 +0 -0
  17. package/assets/motion/library/README.md +2 -0
  18. package/assets/motion/plugin.json +1 -1
  19. package/assets/motion/references/motion-language.md +128 -0
  20. package/assets/motion/references/runtime/determinism-rules.md +3 -3
  21. package/assets/motion/references/runtime/gsap-easing-and-stagger.md +19 -19
  22. package/assets/motion/references/runtime/gsap.md +3 -3
  23. package/assets/motion/references/runtime/inputs-and-assets.md +19 -9
  24. package/assets/motion/references/runtime/minimal-composition.md +6 -0
  25. package/assets/motion/skills/brand-kit/SKILL.md +16 -15
  26. package/assets/motion/skills/motion/SKILL.md +166 -90
  27. package/assets/motion/skills/source-ingest/SKILL.md +7 -10
  28. package/assets/motion/skills/video-qa/SKILL.md +43 -20
  29. package/dist/cli.js +4 -3
  30. package/dist/cli.js.map +1 -1
  31. package/dist/core/agent-session.d.ts +13 -3
  32. package/dist/core/agent-session.js +32 -6
  33. package/dist/core/agent-session.js.map +1 -1
  34. package/dist/core/agents.js +12 -3
  35. package/dist/core/agents.js.map +1 -1
  36. package/dist/core/auth-providers.js +1 -1
  37. package/dist/core/auth-providers.js.map +1 -1
  38. package/dist/core/autopilot-verdict.d.ts +5 -1
  39. package/dist/core/autopilot-verdict.js +30 -13
  40. package/dist/core/autopilot-verdict.js.map +1 -1
  41. package/dist/core/fast-apply-benchmark.d.ts +1 -1
  42. package/dist/core/fast-apply-benchmark.js +2 -2
  43. package/dist/core/fast-apply-benchmark.js.map +1 -1
  44. package/dist/core/ideal-review-subagent.d.ts +16 -2
  45. package/dist/core/ideal-review-subagent.js +19 -2
  46. package/dist/core/ideal-review-subagent.js.map +1 -1
  47. package/dist/core/nolan-context.d.ts +7 -5
  48. package/dist/core/nolan-context.js +106 -16
  49. package/dist/core/nolan-context.js.map +1 -1
  50. package/dist/core/nolan-prompt.js +24 -21
  51. package/dist/core/nolan-prompt.js.map +1 -1
  52. package/dist/core/project-discovery.js +77 -26
  53. package/dist/core/project-discovery.js.map +1 -1
  54. package/dist/core/semantic-search-benchmark.d.ts +1 -1
  55. package/dist/core/semantic-search-benchmark.js +2 -2
  56. package/dist/core/semantic-search-benchmark.js.map +1 -1
  57. package/dist/core/skills.js +13 -3
  58. package/dist/core/skills.js.map +1 -1
  59. package/dist/core/subagent-manager.d.ts +3 -1
  60. package/dist/core/subagent-manager.js +3 -1
  61. package/dist/core/subagent-manager.js.map +1 -1
  62. package/dist/core/subagent-policy.js +1 -1
  63. package/dist/core/subagent-policy.js.map +1 -1
  64. package/dist/core/worktree-setup.d.ts +23 -0
  65. package/dist/core/worktree-setup.js +128 -9
  66. package/dist/core/worktree-setup.js.map +1 -1
  67. package/dist/core/worktree.d.ts +20 -2
  68. package/dist/core/worktree.js +74 -31
  69. package/dist/core/worktree.js.map +1 -1
  70. package/dist/modes/json-mode.js +11 -2
  71. package/dist/modes/json-mode.js.map +1 -1
  72. package/dist/modes/subagent-worker-mode.d.ts +36 -1
  73. package/dist/modes/subagent-worker-mode.js +68 -38
  74. package/dist/modes/subagent-worker-mode.js.map +1 -1
  75. package/dist/motion-agent/motion-agent.d.ts +1 -1
  76. package/dist/motion-agent/motion-agent.js +1 -1
  77. package/dist/motion-agent/motion-check-tool.d.ts +15 -1
  78. package/dist/motion-agent/motion-check-tool.js +345 -37
  79. package/dist/motion-agent/motion-check-tool.js.map +1 -1
  80. package/dist/motion-agent/motion-prompt.d.ts +1 -1
  81. package/dist/motion-agent/motion-prompt.js +16 -20
  82. package/dist/motion-agent/motion-prompt.js.map +1 -1
  83. package/dist/motion-agent/motion-review-session.js +1 -1
  84. package/dist/motion-agent/motion-review-session.js.map +1 -1
  85. package/dist/motion-agent/motion-studio-context.js +1 -1
  86. package/dist/motion-agent/motion-studio-context.js.map +1 -1
  87. package/dist/system-prompt.d.ts +2 -1
  88. package/dist/system-prompt.js +12 -3
  89. package/dist/system-prompt.js.map +1 -1
  90. package/dist/tools/bash.js +64 -0
  91. package/dist/tools/bash.js.map +1 -1
  92. package/dist/tools/edit.js +1 -1
  93. package/dist/tools/edit.js.map +1 -1
  94. package/dist/tools/goals.d.ts +1 -1
  95. package/dist/tools/index.d.ts +6 -0
  96. package/dist/tools/index.js +2 -1
  97. package/dist/tools/index.js.map +1 -1
  98. package/dist/tools/read-tracker.d.ts +30 -2
  99. package/dist/tools/read-tracker.js +92 -5
  100. package/dist/tools/read-tracker.js.map +1 -1
  101. package/dist/tools/read.js +36 -5
  102. package/dist/tools/read.js.map +1 -1
  103. package/dist/tools/subagent-shared.d.ts +19 -0
  104. package/dist/tools/subagent-shared.js +30 -0
  105. package/dist/tools/subagent-shared.js.map +1 -1
  106. package/dist/tools/write.js +4 -3
  107. package/dist/tools/write.js.map +1 -1
  108. package/dist/ui/components/Footer.js +1 -1
  109. package/dist/ui/components/Footer.js.map +1 -1
  110. package/dist/ui/render.d.ts +2 -0
  111. package/dist/ui/render.js +3 -0
  112. package/dist/ui/render.js.map +1 -1
  113. package/dist/utils/text.d.ts +12 -0
  114. package/dist/utils/text.js +11 -0
  115. package/dist/utils/text.js.map +1 -1
  116. package/package.json +5 -5
  117. package/assets/motion/skills/mixkit-split-text-617/SKILL.md +0 -115
  118. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-480.json +0 -1
  119. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-494.json +0 -1
  120. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-5.json +0 -1
  121. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-508.json +0 -1
  122. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6525.json +0 -1
  123. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6539.json +0 -1
  124. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6647.json +0 -1
  125. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6663.json +0 -1
  126. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6677.json +0 -1
  127. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6691.json +0 -1
  128. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6706.json +0 -1
  129. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6722.json +0 -1
  130. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6736.json +0 -1
  131. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6750.json +0 -1
  132. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6764.json +0 -1
  133. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6780.json +0 -1
  134. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6794.json +0 -1
  135. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6810.json +0 -1
  136. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6823.json +0 -1
  137. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6872.json +0 -1
  138. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6936.json +0 -1
  139. package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-76.json +0 -1
  140. package/assets/motion/skills/mixkit-split-text-617/data/manifest.json +0 -495
  141. package/assets/motion/skills/mixkit-split-text-617/references/RECONSTRUCTION.md +0 -201
  142. package/assets/motion/skills/mixkit-split-text-617/references/VERIFICATION.md +0 -107
  143. package/assets/motion/skills/mixkit-split-text-617/tools/inspect_motion.py +0 -130
@@ -205,5 +205,61 @@
205
205
  "stretch": "75% 112.5%"
206
206
  }
207
207
  ]
208
+ },
209
+ {
210
+ "family": "Unbounded",
211
+ "dir": "unbounded",
212
+ "license": "OFL-1.1",
213
+ "use": "Wide, rounded display face for big titles.",
214
+ "files": [
215
+ {
216
+ "file": "unbounded-normal.woff2",
217
+ "style": "normal",
218
+ "weight": "200 900",
219
+ "stretch": null
220
+ }
221
+ ]
222
+ },
223
+ {
224
+ "family": "Sora",
225
+ "dir": "sora",
226
+ "license": "OFL-1.1",
227
+ "use": "Clean geometric sans for body text and captions.",
228
+ "files": [
229
+ {
230
+ "file": "sora-normal.woff2",
231
+ "style": "normal",
232
+ "weight": "100 800",
233
+ "stretch": null
234
+ }
235
+ ]
236
+ },
237
+ {
238
+ "family": "Short Stack",
239
+ "dir": "short-stack",
240
+ "license": "OFL-1.1",
241
+ "use": "Casual handwritten feel.",
242
+ "files": [
243
+ {
244
+ "file": "short-stack-normal.woff2",
245
+ "style": "normal",
246
+ "weight": "400",
247
+ "stretch": null
248
+ }
249
+ ]
250
+ },
251
+ {
252
+ "family": "Finger Paint",
253
+ "dir": "finger-paint",
254
+ "license": "OFL-1.1",
255
+ "use": "Playful painted, childlike handwritten feel.",
256
+ "files": [
257
+ {
258
+ "file": "finger-paint-normal.woff2",
259
+ "style": "normal",
260
+ "weight": "400",
261
+ "stretch": null
262
+ }
263
+ ]
208
264
  }
209
265
  ]
@@ -0,0 +1,94 @@
1
+ Copyright (c) 2011 by Sorkin Type Co (www.sorkintype.com),
2
+ with Reserved Font Name "Short Stack".
3
+
4
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
5
+ This license is copied below, and is also available with a FAQ at:
6
+ http://scripts.sil.org/OFL
7
+
8
+
9
+ -----------------------------------------------------------
10
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
11
+ -----------------------------------------------------------
12
+
13
+ PREAMBLE
14
+ The goals of the Open Font License (OFL) are to stimulate worldwide
15
+ development of collaborative font projects, to support the font creation
16
+ efforts of academic and linguistic communities, and to provide a free and
17
+ open framework in which fonts may be shared and improved in partnership
18
+ with others.
19
+
20
+ The OFL allows the licensed fonts to be used, studied, modified and
21
+ redistributed freely as long as they are not sold by themselves. The
22
+ fonts, including any derivative works, can be bundled, embedded,
23
+ redistributed and/or sold with any software provided that any reserved
24
+ names are not used by derivative works. The fonts and derivatives,
25
+ however, cannot be released under any other type of license. The
26
+ requirement for fonts to remain under this license does not apply
27
+ to any document created using the fonts or their derivatives.
28
+
29
+ DEFINITIONS
30
+ "Font Software" refers to the set of files released by the Copyright
31
+ Holder(s) under this license and clearly marked as such. This may
32
+ include source files, build scripts and documentation.
33
+
34
+ "Reserved Font Name" refers to any names specified as such after the
35
+ copyright statement(s).
36
+
37
+ "Original Version" refers to the collection of Font Software components as
38
+ distributed by the Copyright Holder(s).
39
+
40
+ "Modified Version" refers to any derivative made by adding to, deleting,
41
+ or substituting -- in part or in whole -- any of the components of the
42
+ Original Version, by changing formats or by porting the Font Software to a
43
+ new environment.
44
+
45
+ "Author" refers to any designer, engineer, programmer, technical
46
+ writer or other person who contributed to the Font Software.
47
+
48
+ PERMISSION & CONDITIONS
49
+ Permission is hereby granted, free of charge, to any person obtaining
50
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
51
+ redistribute, and sell modified and unmodified copies of the Font
52
+ Software, subject to the following conditions:
53
+
54
+ 1) Neither the Font Software nor any of its individual components,
55
+ in Original or Modified Versions, may be sold by itself.
56
+
57
+ 2) Original or Modified Versions of the Font Software may be bundled,
58
+ redistributed and/or sold with any software, provided that each copy
59
+ contains the above copyright notice and this license. These can be
60
+ included either as stand-alone text files, human-readable headers or
61
+ in the appropriate machine-readable metadata fields within text or
62
+ binary files as long as those fields can be easily viewed by the user.
63
+
64
+ 3) No Modified Version of the Font Software may use the Reserved Font
65
+ Name(s) unless explicit written permission is granted by the corresponding
66
+ Copyright Holder. This restriction only applies to the primary font name as
67
+ presented to the users.
68
+
69
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
70
+ Software shall not be used to promote, endorse or advertise any
71
+ Modified Version, except to acknowledge the contribution(s) of the
72
+ Copyright Holder(s) and the Author(s) or with their explicit written
73
+ permission.
74
+
75
+ 5) The Font Software, modified or unmodified, in part or in whole,
76
+ must be distributed entirely under this license, and must not be
77
+ distributed under any other license. The requirement for fonts to
78
+ remain under this license does not apply to any document created
79
+ using the Font Software.
80
+
81
+ TERMINATION
82
+ This license becomes null and void if any of the above conditions are
83
+ not met.
84
+
85
+ DISCLAIMER
86
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
87
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
88
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
89
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
90
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
91
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
92
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
93
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
94
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
1
+ Copyright 2019 The Sora Project Authors (https://github.com/sora-xor/sora-font)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+
5
+ This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file
@@ -0,0 +1,93 @@
1
+ Copyright 2022 The Unbounded Project Authors (https://github.com/googlefonts/unbounded)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -102,3 +102,5 @@ project's `CREDITS.md` when added.
102
102
  2–3 scene recipes.
103
103
  - `sample.html`: a one-scene composition that shows the look, used for its
104
104
  preview. It links `assets/fonts/fonts.css` and `assets/looks/<id>.css`.
105
+ Videos should instead paste the `head` that `library.mjs look` returns: it
106
+ declares the fonts in the page, which `hf check` requires.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "hyperframes",
3
3
  "version": "0.8.82",
4
- "description": "EZ Motion's authored recipes and support skills, backed by the pinned HyperFrames runtime. Release-managed by GG; no self-updates."
4
+ "description": "EZ Motion's skills and craft references, backed by the pinned HyperFrames runtime. Release-managed by GG; no self-updates."
5
5
  }
@@ -0,0 +1,128 @@
1
+ # Motion language
2
+
3
+ Use this for every video you design. The user's brand kit, references or a
4
+ chosen library look override any default below. These are principles, not a
5
+ house look. Choose the concept, palette and type fresh for every video; never
6
+ copy an earlier video's.
7
+
8
+ ## The bar
9
+
10
+ Make a showcase piece, as if the best motion designers will judge it frame by
11
+ frame. Ambition means deliberate craft, not length or effect count. Every
12
+ colour, word, cut and ease needs a reason. Cut generic defaults: plain fades,
13
+ slowly drifting gradients, text that slides up and sits there. Judge it as the
14
+ kind of video it is: an explainer by how clearly it teaches, a tribute by how
15
+ it honours its subject, a launch by how it makes people want the product.
16
+
17
+ ## Plan first
18
+
19
+ Before writing code, decide these and record them in the `Concept` and
20
+ `Language` lines of `frame.md`. A few lines is enough; nobody approves them.
21
+
22
+ - **Concept**: the idea the video demonstrates, in one sentence. Show it; don't
23
+ just state it.
24
+ - **Motif**: one shape or element that recurs and links every scene.
25
+ - **Register**: the tone (calm, playful, urgent, tender, precise…) and what it
26
+ means for size, speed, easing and colour. Take it from the brief, the brand
27
+ and the viewing context.
28
+ - **Palette**: each colour's role.
29
+ - **Type**: each family's role.
30
+ - **Beat**: tempo, arc and frame rate.
31
+
32
+ ## Principles
33
+
34
+ **Register.** Map the tone to motion before choosing anything else. Quiet,
35
+ steady motion carries information and reading; expressive motion is saved for
36
+ the moments that matter, because it only reads as special against calm. These
37
+ pairings are illustrative, not presets: calm is long, soft moves and few of
38
+ them; playful is springy overshoot, squash and stretch; luxurious is slow and
39
+ precise with generous space; urgent is fast moves and hard cuts; tender is
40
+ warm, slow and held; technical is precise and snapping.
41
+
42
+ **Continuity.** Each scene hands something to the next: a shape, a word, a
43
+ colour field or a camera move. Prefer match cuts and shape handoffs to
44
+ cross-fades. The `type-as-spatial-handoff` study in [README.md](README.md) shows
45
+ type becoming the next scene.
46
+
47
+ **Palette.** A few colours, each with a role, derived from the brand, subject or
48
+ references. How many, how saturated and how often the frame changes colour
49
+ follow the register: full-frame colour blocks that change on most cuts suit a
50
+ loud, kinetic piece; a calm, tender or documentary piece holds a steadier field
51
+ and lets one accent carry attention. Gradients and glows are seasoning, not the
52
+ base. Keep text readable.
53
+
54
+ **No harmful flashing.** Anything flashing over more than about 3% of the frame
55
+ counts. Keep light/dark swaps, and swaps to and from saturated red, to at most
56
+ six in any one second (three flashes): faster flashing can trigger seizures,
57
+ and `motion_check` fails it. A swap on every beat at 120 BPM is fine; a white
58
+ flash frame on every half-beat is not.
59
+
60
+ **Type.** Choose faces for the register and the reading job. Size follows the
61
+ viewing context and how much there is to read: a kinetic poster can set one to
62
+ three huge words per shot; an explainer, documentary or lyric video sets whole
63
+ lines at a comfortable reading size. Size type against the frame's shorter side
64
+ (in vertical video, the width inside the safe margins) and check that the
65
+ longest word fits. Animate weight and width axes as motion, not only position
66
+ and opacity. Use one display family, at most one contrasting voice, such as an
67
+ italic serif, and small uppercase tracked mono for labels and UI where the
68
+ subject calls for it. Bundled axes (see `fonts.mjs list` and its specimen):
69
+ weight and width in Mona Sans, Hubot Sans, Anybody, Archivo, Bricolage
70
+ Grotesque and Martian Mono; italics in Fraunces and Newsreader. Brand fonts win.
71
+
72
+ **Motion.** Smooth by default, bounce by choice. Entrances settle on the
73
+ critically damped spring or `power3.out` / `expo.out`; exits `power3.in`; moves
74
+ `power3.inOut` or `expo.inOut`. Overshoot (`back.out`, `elastic.out` or an
75
+ underdamped spring) is a register chosen for playful or physical work, never
76
+ the default; see [easing](runtime/gsap-easing-and-stagger.md). Durations follow
77
+ the register: roughly 0.15–0.5 s for snappy, energetic or technical motion, and
78
+ 0.6–1.5 s or longer for calm, luxurious or tender work. Staggers run 0.012–0.06 s
79
+ for type and longer for larger elements. Use real animation principles where
80
+ they help: anticipation before big moves, squash and stretch on impact, arcs
81
+ instead of straight paths, overlapping action, follow-through and smears on fast
82
+ moves. Lead with one movement at a time, with smaller overlapping motion under
83
+ it. Every move starts, travels and lands on purpose; nothing drifts without a
84
+ reason.
85
+
86
+ **Pace.** Keep time on a grid: the track's beats (`hf beats`) when there is
87
+ music, otherwise a tempo chosen for the register. Cut by how much there is to
88
+ take in, not by the grid alone: a simple image can last one beat; a line to
89
+ read or an idea to grasp holds for several. Meaningful text stays still and
90
+ readable for at least the longer of 0.8 s and one second per 15 characters,
91
+ longer for the key line; repeated or decorative words can go faster. Vary the
92
+ density (build, release, rest) so the video is neither always fast nor always
93
+ slow. Shape the whole to its form, with a beginning, development, peak and
94
+ resolution even in five seconds. Illustratively: a launch builds to its
95
+ product, an explainer steps through its idea, a lyric video follows the song's
96
+ sections, a tribute lets each moment breathe. End on a composed frame held long
97
+ enough to read, and declare that hold in the hold plan before checking.
98
+
99
+ **3D, when the subject earns it.** One hero object whose material, light and
100
+ camera come from the concept and register, not a stock tech look; add
101
+ supporting elements only when they mean something. Resolve 3D back to flat 2D to
102
+ hand off to the next scene. Use the bundled Three.js (`three.mjs`); no 3D by
103
+ default.
104
+
105
+ **Chrome, when it suits.** A small persistent mono layer (labels, timecode,
106
+ chapter name, a progress bar with markers) makes a tech subject feel like a pro
107
+ tool. Leave it out elsewhere.
108
+
109
+ **Frame rate.** 30 fps suits most work. Use 60 fps when fast, dense motion or
110
+ scrolling UI must read smoothly; it doubles render time. Renders carry no
111
+ motion blur, so fast moves stutter at 24 fps: keep 24 fps for slow, filmic or
112
+ handmade work.
113
+
114
+ **Truth.** Show only real product UI, numbers and claims from the user's
115
+ sources.
116
+
117
+ ## Building blocks
118
+
119
+ Library looks (`library.mjs list looks`) are complete palette, type and rhythm
120
+ systems; when one fits the concept, it replaces the palette and type choices
121
+ above. Library pieces are optional building blocks.
122
+
123
+ ## Check against the plan
124
+
125
+ When `motion_check` returns frames, compare them with the plan in `frame.md` as
126
+ well as the technical results. A lost motif, an off-palette colour, a generic
127
+ transition or unreadable type is a concrete defect: fix it and check the new
128
+ render.
@@ -15,7 +15,7 @@ For GSAP:
15
15
  - **Do not** call `tl.play()` for render-critical motion.
16
16
  - **Do not** create empty tweens only to set duration; use `data-duration` on the clip instead.
17
17
 
18
- Use the adjacent `gsap.md`, `gsap-timeline-and-labels.md` and `gsap-easing-and-stagger.md` for GSAP mechanics. These technical references do not override the selected recipe's geometry, timing or allowed input changes.
18
+ Use the adjacent `gsap.md`, `gsap-timeline-and-labels.md` and `gsap-easing-and-stagger.md` for GSAP mechanics. These technical references do not choose the design; the video's plan in `frame.md` does.
19
19
 
20
20
  ## Determinism Rules
21
21
 
@@ -41,9 +41,9 @@ Build the visible end-state in static HTML and CSS first, then animate from/to t
41
41
  - **The root composition's total duration (render length / frame count) is fixed at compile time**, read once from the static root `data-duration` before scripts run, like `data-width` / `data-height`. A script or `--variables` value that rewrites the root `data-duration` afterward is ignored. To vary render length per output, author the root `data-duration` directly. (A _clip's_ own `data-duration` is re-read from the live DOM, so scripts/variables can still drive clip lengths. Only when the root omits `data-duration` does the renderer probe the live DOM / timeline for total length.)
42
42
  - Scene containers should fill the scene with `width: 100%; height: 100%; box-sizing: border-box`.
43
43
  - Use padding, flex, grid, and `max-width` for layout. Avoid positioning main content with hardcoded `top`/`left` offsets when a layout container can do it.
44
- - Preserve the recipe's positioning model. Absolute layers are appropriate when reproducing authored source geometry; generic layout preferences must not alter it.
44
+ - Absolute layers are appropriate for deliberately placed design elements; keep one positioning model per scene.
45
45
  - Prefer transforms and opacity for animation.
46
- - Keep text inside its intended container. Only use wrapping, resizing or `window.__hyperframes.fitTextFontSize(text, { maxWidth, fontFamily, fontWeight })` when the recipe permits that fit policy; otherwise resolve the input conflict.
46
+ - Keep text inside its intended container. Wrap, resize or use `window.__hyperframes.fitTextFontSize(text, { maxWidth, fontFamily, fontWeight })` deliberately; never let text clip silently.
47
47
  - For text measurement without DOM reflow, use `window.__hyperframes.pretext`. Measure off a canvas instead of writing into the page and reading it back, so nothing reflows: `pretext.prepare(text, font)` then `pretext.layout(prepared, maxWidth, lineHeight)` → `{ lineCount, height }`. `prepare` does the font measurement; everything downstream of a prepared string is arithmetic and cheap enough to run per frame. `fitTextFontSize` is built on it.
48
48
  - `layout` gives you height, not width. To size a container to its text (shrinkwrap), use `pretext.prepareWithSegments(text, font)` and then `pretext.measureNaturalWidth(prepared)` for the single-line width, or `pretext.measureLineStats(prepared, maxWidth)` for `{ lineCount, maxLineWidth }`.
49
49
  - `font` is a CSS font shorthand string, e.g. `"700 90px Inter"`.
@@ -6,19 +6,19 @@ Built-in eases: `power1`, `power2`, `power3`, `power4`, `back`, `bounce`, `circ`
6
6
 
7
7
  Each has `.in`, `.out`, `.inOut` variants.
8
8
 
9
- | Ease | Use for |
10
- | ------------------------------------------ | ----------------------------------------------------------------------------------------------- |
11
- | `power1.out`, `power2.out` | Gentle motion for secondary elements (a caption fade, a small shift). NOT the entrance default. |
12
- | `power3.out` (house default), `power4.out` | The standard long-tail settle. Entrances, title cards, hero reveals. |
13
- | `sine.inOut` | Long, slow, calm motion. Crossfades, ambient drift. |
14
- | `back.out(1.7)` | Overshoot then settle. RARE — explicitly-playful register only, never a default. |
15
- | `elastic.out(1, 0.3)` | Springy bounce. Same playful-only rule; prefer a baked spring (see Spring Eases below). |
16
- | `expo.inOut` | Snappy, dramatic. Quick transitions between hero scenes. |
17
- | `none` (linear) | Camera moves with timed counterpoint, mechanical motion. |
9
+ | Ease | Use for |
10
+ | ------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
11
+ | `power1.out`, `power2.out` | Gentle motion for secondary elements (a caption fade, a small shift). NOT the entrance default. |
12
+ | `power3.out` (house default), `power4.out` | The standard long-tail settle. Entrances, title cards, hero reveals. |
13
+ | `sine.inOut` | Long, slow, calm motion. Crossfades, ambient drift. |
14
+ | `back.out(1.7)` | Overshoot then settle. A chosen register (playful, physical), never a default. |
15
+ | `elastic.out(1, 0.3)` | Springy bounce. Same register rule; prefer a baked spring (see Spring Eases below). |
16
+ | `expo.inOut` | Snappy, dramatic. Quick transitions between hero scenes. |
17
+ | `none` (linear) | Camera moves with timed counterpoint, mechanical motion. |
18
18
 
19
19
  Pick `.out` for entrances, `.in` for exits, `.inOut` for symmetric moves and continuous motion.
20
20
 
21
- **Smooth beats bouncy** — the motion doctrine (`rules/spring-pop-entrance.md`, the workflows' `motion-language.md`): entrances default to `power3.out` or the baked critically-damped spring (see Spring Eases below); overshoot eases (`back` / `elastic` / `bounce`) are a rare, explicitly-playful register, never the house style.
21
+ **Smooth by default, bounce by choice** — the same rule as the Motion section of [`motion-language.md`](../motion-language.md): entrances default to `power3.out` or the baked critically-damped spring (see Spring Eases below); overshoot eases (`back` / `elastic` / `bounce`, or an underdamped spring) are a register the brief chooses for playful or physical work, never the house style.
22
22
 
23
23
  ## Easing Vocabulary (character & mood)
24
24
 
@@ -29,15 +29,15 @@ The full palette by character (each family has `.in`, `.out`, `.inOut` variants)
29
29
  | Family | Character | Typical use |
30
30
  | -------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
31
31
  | `power1`–`power4` | Gentle (1) to aggressive (4) acceleration curves | General purpose. **power3 is the house workhorse**; power2 for gentle secondary motion, power4 for dramatic snaps |
32
- | `back(N)` | Overshoot then settle. N controls how far past the target (1=subtle, 4=wild) | RARE — explicitly-playful register only, never a default. Keep N ≤ 2; prefer a baked spring at ζ 0.6–0.7 (physical settle, see Spring Eases) |
33
- | `elastic(amp, freq)` | Spring bounce. amp=magnitude, freq=oscillation speed | RARE — same playful-only rule; the baked spring (below) is the physical version |
34
- | `bounce` | Ball-drop bouncing | RARE — physical-comedy register only (something literally dropping) |
32
+ | `back(N)` | Overshoot then settle. N controls how far past the target (1=subtle, 4=wild) | Chosen register only (playful, physical), never a default. Keep N ≤ 2; prefer a baked spring at ζ 0.6–0.7 (physical settle, see Spring Eases) |
33
+ | `elastic(amp, freq)` | Spring bounce. amp=magnitude, freq=oscillation speed | Same register rule; the baked spring (below) is the physical version |
34
+ | `bounce` | Ball-drop bouncing | Physical-comedy register only (something literally dropping) |
35
35
  | `expo` | Extreme acceleration curve (much steeper than power4) | Premium/luxury reveals, dramatic entrances |
36
36
  | `sine` | Smooth, organic, no hard edges | Ambient float, breathing, Ken Burns, anything that loops. `.inOut` for yoyo motion |
37
37
  | `circ` | Circular acceleration (starts very fast, ends very gentle or vice versa) | Camera moves, scene transitions, orbital motion |
38
38
  | `steps(N)` | Discrete N-step jumps, no interpolation | Typing effects, cursor blink, counter ticks, retro/digital aesthetics |
39
39
 
40
- **Mood mapping:** Match easing character to the beat's emotional content. Smooth/organic easings (`sine`, `power1`) feel contemplative and drifting. Aggressive deceleration (`power4.out`, `expo.out`) feels snappy and confident. Spring overshoot (`back.out`) feels bouncy and physical — but bouncy is a register, not an emphasis tool; reach for it only on explicitly-playful beats. The storyboard's mood description should guide which character fits — not a formula.
40
+ **Mood mapping:** Match easing character to the beat's emotional content. Smooth/organic easings (`sine`, `power1`) feel contemplative and drifting. Aggressive deceleration (`power4.out`, `expo.out`) feels snappy and confident. Spring overshoot (`back.out`) feels bouncy and physical — but bouncy is a register, not an emphasis tool; reach for it only when the brief's register is playful or physical. The register recorded in `frame.md` should guide which character fits — not a formula.
41
41
 
42
42
  ## Defaults
43
43
 
@@ -58,7 +58,7 @@ Setting defaults at timeline scope is preferred — it documents the motion lang
58
58
 
59
59
  ## Spring Eases (baked physics, seek-safe)
60
60
 
61
- The "iOS feel" is a **damped spring's velocity curve**, not a bounce: a fast launch into a long asymptotic settle. Well-made system animations are critically damped or close to it — they barely overshoot, or don't at all. `power3.out` / `expo.out` approximate that curve; when you want the exact one — or a _physical_ overshoot for the rare playful register — bake the spring's closed-form solution into a function ease.
61
+ The "iOS feel" is a **damped spring's velocity curve**, not a bounce: a fast launch into a long asymptotic settle. Well-made system animations are critically damped or close to it — they barely overshoot, or don't at all. `power3.out` / `expo.out` approximate that curve; when you want the exact one — or a _physical_ overshoot for a playful register — bake the spring's closed-form solution into a function ease.
62
62
 
63
63
  Why not a real-time spring library: an interactive spring is a stateful integrator (velocity accumulates frame to frame), which cannot be seeked deterministically — you'd have to simulate frames 0…N−1 to render frame N. The closed form below is a **pure function of progress** — no state, nothing to desync, seek-safe by construction. This is also why interaction-lib spring solvers are banned in compositions.
64
64
 
@@ -67,7 +67,7 @@ Why not a real-time spring library: an interactive spring is a stateful integrat
67
67
  // response ≈ seconds one oscillation would take (0.3–0.6 for entrances)
68
68
  // dampingFraction 1.0 = critically damped — smooth settle, NO overshoot (house default)
69
69
  // 0.80–0.85 ≈ the iOS system register — ~1–1.5% overshoot, felt not seen
70
- // 0.60–0.70 = explicitly playful — ~5–10% overshoot (rare; replaces back.out)
70
+ // 0.60–0.70 = playful register — ~5–10% overshoot (by choice; replaces back.out)
71
71
  function springEase({ response = 0.5, dampingFraction = 1 } = {}) {
72
72
  const w = (2 * Math.PI) / response; // undamped natural frequency
73
73
  const z = dampingFraction;
@@ -120,20 +120,20 @@ tl.fromTo(
120
120
  | ----------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
121
121
  | **1.0 (default)** | none (monotone) | The house settle — the exact curve `power3.out` approximates. Product / enterprise / serious tone. |
122
122
  | 0.80–0.85 | ~1–1.5% | "Alive, not bouncy" — the iOS system default register. The overshoot is felt, not seen. |
123
- | 0.60–0.70 | ~5–10% | Explicitly-playful ONLY (same rule as `back.out`, which this replaces — a spring's second-order settle reads physical where `back` reads cartoon). |
123
+ | 0.60–0.70 | ~5–10% | Playful register, by choice (same rule as `back.out`, which this replaces — a spring's second-order settle reads physical where `back` reads cartoon). |
124
124
  | < 0.55 | > 12% | Don't. Cartoon-wobble territory. |
125
125
 
126
126
  | response | duration (ζ=1) | feel |
127
127
  | --------- | -------------- | ------------------------------------------------------------ |
128
128
  | 0.25–0.35 | 0.37–0.51s | tight snap — chips, small UI |
129
129
  | 0.35–0.50 | 0.51–0.74s | standard entrance |
130
- | 0.50–0.70 | 0.74–1.03s | weighted hero landing — check the `t ≤ 0.5s` visibility rule |
130
+ | 0.50–0.70 | 0.74–1.03s | weighted hero landing — when the shot opens on it, start it early so the subject is seen within about half a second |
131
131
 
132
132
  Craft notes:
133
133
 
134
134
  - **ζ=1 vs `power3.out`**: the true spring front-loads harder (~67% vs ~58% travelled at quarter-time) and settles on a longer asymptotic tail; max shape difference ~11%. That long tail is the "premium" read — use it when the settle IS the shot (a wordmark landing, a final lockup).
135
135
  - **At ζ<1, overshooting curves go on transforms only** — never on `opacity` (it would push past 1) or color. Split opacity onto its own `power2.out` tween at the same timeline position.
136
- - **Doctrine unchanged**: ζ below ~0.8 is still the rare, explicitly-playful exception (`rules/spring-pop-entrance.md`). The default of this section is ζ=1 — real spring physics is not a license for bounce.
136
+ - **Default unchanged**: ζ below ~0.8 is a register the brief chooses, never a default. The default of this section is ζ=1 — real spring physics is not a license for bounce.
137
137
 
138
138
  ## Stagger
139
139
 
@@ -56,13 +56,13 @@ For transforms, autoAlpha, clearProps, and SVG specifics see `./gsap-transforms-
56
56
 
57
57
  ## Animated properties
58
58
 
59
- Prefer these efficient targets when they preserve the recipe's behaviour:
59
+ Prefer these efficient targets when they achieve the intended motion:
60
60
 
61
61
  - **Compositor-cheap**: `opacity`, `x`, `y`, `scale`, `scaleX`, `scaleY`, `rotation`, `rotationX`, `rotationY`, `skewX`, `skewY`, `transformOrigin`
62
62
  - **Visual fills**: `color`, `backgroundColor`, `borderColor`, `borderRadius`
63
63
  - **CSS variables**: `"--hue": 180` etc.
64
64
  - **Media `volume`** (on `<audio>` / `<video>`): do not tween it for fades or ducking; use the `data-automation` volume lane (see `data-attributes.md`). A lane wins over a tween on the same element.
65
- - **DOM text `innerText`** (for numeric counters): tween it directly, e.g. `tl.to(el, { innerText: 100, snap: { innerText: 1 } })` — `snap` keeps it integer; the GSAP inspector recognizes it as a counter. Use a deterministic proxy value with `onUpdate` for locale formatting or suffix logic when the selected recipe needs it.
65
+ - **DOM text `innerText`** (for numeric counters): tween it directly, e.g. `tl.to(el, { innerText: 100, snap: { innerText: 1 } })` — `snap` keeps it integer; the GSAP inspector recognizes it as a counter. Use a deterministic proxy value with `onUpdate` for locale formatting or suffix logic when the design needs it.
66
66
 
67
67
  **Avoid** (use the transform alias instead):
68
68
 
@@ -80,7 +80,7 @@ Prefer these efficient targets when they preserve the recipe's behaviour:
80
80
  - `./gsap-timeline-and-labels.md` — timeline creation, position parameter (`+=`, `<`, `>`), labels, nesting, sub-comp `fromTo` preference, playback control.
81
81
  - `./gsap-easing-and-stagger.md` — easing families, stagger objects, function-based values, `gsap.matchMedia()`, `gsap.defaults()`.
82
82
  - `./gsap-transforms-and-perf.md` — transform aliases, autoAlpha, `quickTo`, `will-change`, performance rules.
83
- - The selected recipe defines effects and motion mechanisms; these API examples are not additional creative instructions.
83
+ - The video's plan defines effects and motion; these API examples are not additional creative instructions.
84
84
 
85
85
  ## Best Practices
86
86