@nerdev/skillset 0.2.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 (567) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +351 -0
  3. package/bin/skillset.mjs +205 -0
  4. package/curations/README.md +53 -0
  5. package/curations/TEMPLATE/WHY.md +23 -0
  6. package/curations/TEMPLATE/overlay/SKILL.md +6 -0
  7. package/curations/impeccable/WHY.md +34 -0
  8. package/curations/impeccable/overlay/SKILL.md +116 -0
  9. package/package.json +43 -0
  10. package/scripts/ste-gate.mjs +39 -0
  11. package/scripts/ste-lint.py +201 -0
  12. package/scripts/sync.mjs +174 -0
  13. package/skills/ai-agent/agent-docs-writer/SKILL.md +105 -0
  14. package/skills/ai-agent/agent-docs-writer/references/principles.md +73 -0
  15. package/skills/ai-agent/agent-docs-writer/templates/AGENTS.template.md +44 -0
  16. package/skills/ai-agent/agent-docs-writer/templates/README.template.md +19 -0
  17. package/skills/ai-agent/ultra-context-engine/SKILL.md +941 -0
  18. package/skills/architecture/blueprint/SKILL.md +191 -0
  19. package/skills/architecture/code-tour/SKILL.md +204 -0
  20. package/skills/architecture/progress-guard/SKILL.md +148 -0
  21. package/skills/architecture/search-first/SKILL.md +97 -0
  22. package/skills/backend/api-design/SKILL.md +456 -0
  23. package/skills/backend/auth/SKILL.md +596 -0
  24. package/skills/backend/database/SKILL.md +431 -0
  25. package/skills/backend/realtime/SKILL.md +670 -0
  26. package/skills/backend/security/SKILL.md +590 -0
  27. package/skills/business/brag/SKILL.md +177 -0
  28. package/skills/business/brag/assets/music/README.md +20 -0
  29. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
  30. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
  31. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
  32. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
  33. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
  34. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
  35. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
  36. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
  37. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
  38. package/skills/business/brag/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
  39. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
  40. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
  41. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
  42. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
  43. package/skills/business/brag/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
  44. package/skills/business/brag/assets/sfx/casino/card-fan-1.ogg +0 -0
  45. package/skills/business/brag/assets/sfx/casino/card-fan-2.ogg +0 -0
  46. package/skills/business/brag/assets/sfx/casino/card-place-1.ogg +0 -0
  47. package/skills/business/brag/assets/sfx/casino/card-place-2.ogg +0 -0
  48. package/skills/business/brag/assets/sfx/casino/card-place-3.ogg +0 -0
  49. package/skills/business/brag/assets/sfx/casino/card-place-4.ogg +0 -0
  50. package/skills/business/brag/assets/sfx/casino/card-shove-1.ogg +0 -0
  51. package/skills/business/brag/assets/sfx/casino/card-shove-2.ogg +0 -0
  52. package/skills/business/brag/assets/sfx/casino/card-shove-3.ogg +0 -0
  53. package/skills/business/brag/assets/sfx/casino/card-shove-4.ogg +0 -0
  54. package/skills/business/brag/assets/sfx/casino/card-shuffle.ogg +0 -0
  55. package/skills/business/brag/assets/sfx/casino/card-slide-1.ogg +0 -0
  56. package/skills/business/brag/assets/sfx/casino/card-slide-2.ogg +0 -0
  57. package/skills/business/brag/assets/sfx/casino/card-slide-3.ogg +0 -0
  58. package/skills/business/brag/assets/sfx/casino/card-slide-4.ogg +0 -0
  59. package/skills/business/brag/assets/sfx/casino/card-slide-5.ogg +0 -0
  60. package/skills/business/brag/assets/sfx/casino/card-slide-6.ogg +0 -0
  61. package/skills/business/brag/assets/sfx/casino/card-slide-7.ogg +0 -0
  62. package/skills/business/brag/assets/sfx/casino/card-slide-8.ogg +0 -0
  63. package/skills/business/brag/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
  64. package/skills/business/brag/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
  65. package/skills/business/brag/assets/sfx/casino/chip-lay-1.ogg +0 -0
  66. package/skills/business/brag/assets/sfx/casino/chip-lay-2.ogg +0 -0
  67. package/skills/business/brag/assets/sfx/casino/chip-lay-3.ogg +0 -0
  68. package/skills/business/brag/assets/sfx/casino/chips-collide-1.ogg +0 -0
  69. package/skills/business/brag/assets/sfx/casino/chips-collide-2.ogg +0 -0
  70. package/skills/business/brag/assets/sfx/casino/chips-collide-3.ogg +0 -0
  71. package/skills/business/brag/assets/sfx/casino/chips-collide-4.ogg +0 -0
  72. package/skills/business/brag/assets/sfx/casino/chips-handle-1.ogg +0 -0
  73. package/skills/business/brag/assets/sfx/casino/chips-handle-2.ogg +0 -0
  74. package/skills/business/brag/assets/sfx/casino/chips-handle-3.ogg +0 -0
  75. package/skills/business/brag/assets/sfx/casino/chips-handle-4.ogg +0 -0
  76. package/skills/business/brag/assets/sfx/casino/chips-handle-6.ogg +0 -0
  77. package/skills/business/brag/assets/sfx/casino/chips-stack-1.ogg +0 -0
  78. package/skills/business/brag/assets/sfx/casino/chips-stack-2.ogg +0 -0
  79. package/skills/business/brag/assets/sfx/casino/chips-stack-3.ogg +0 -0
  80. package/skills/business/brag/assets/sfx/casino/chips-stack-4.ogg +0 -0
  81. package/skills/business/brag/assets/sfx/casino/chips-stack-5.ogg +0 -0
  82. package/skills/business/brag/assets/sfx/casino/chips-stack-6.ogg +0 -0
  83. package/skills/business/brag/assets/sfx/casino/dice-grab-1.ogg +0 -0
  84. package/skills/business/brag/assets/sfx/casino/dice-grab-2.ogg +0 -0
  85. package/skills/business/brag/assets/sfx/casino/dice-shake-1.ogg +0 -0
  86. package/skills/business/brag/assets/sfx/casino/dice-shake-2.ogg +0 -0
  87. package/skills/business/brag/assets/sfx/casino/dice-shake-3.ogg +0 -0
  88. package/skills/business/brag/assets/sfx/casino/dice-throw-1.ogg +0 -0
  89. package/skills/business/brag/assets/sfx/casino/dice-throw-2.ogg +0 -0
  90. package/skills/business/brag/assets/sfx/casino/dice-throw-3.ogg +0 -0
  91. package/skills/business/brag/assets/sfx/casino/die-throw-1.ogg +0 -0
  92. package/skills/business/brag/assets/sfx/casino/die-throw-2.ogg +0 -0
  93. package/skills/business/brag/assets/sfx/casino/die-throw-3.ogg +0 -0
  94. package/skills/business/brag/assets/sfx/casino/die-throw-4.ogg +0 -0
  95. package/skills/business/brag/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
  96. package/skills/business/brag/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
  97. package/skills/business/brag/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
  98. package/skills/business/brag/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
  99. package/skills/business/brag/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
  100. package/skills/business/brag/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
  101. package/skills/business/brag/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
  102. package/skills/business/brag/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
  103. package/skills/business/brag/assets/sfx/impact/footstep_grass_000.ogg +0 -0
  104. package/skills/business/brag/assets/sfx/impact/footstep_grass_001.ogg +0 -0
  105. package/skills/business/brag/assets/sfx/impact/footstep_grass_002.ogg +0 -0
  106. package/skills/business/brag/assets/sfx/impact/footstep_grass_003.ogg +0 -0
  107. package/skills/business/brag/assets/sfx/impact/footstep_grass_004.ogg +0 -0
  108. package/skills/business/brag/assets/sfx/impact/footstep_snow_000.ogg +0 -0
  109. package/skills/business/brag/assets/sfx/impact/footstep_snow_001.ogg +0 -0
  110. package/skills/business/brag/assets/sfx/impact/footstep_snow_002.ogg +0 -0
  111. package/skills/business/brag/assets/sfx/impact/footstep_snow_003.ogg +0 -0
  112. package/skills/business/brag/assets/sfx/impact/footstep_snow_004.ogg +0 -0
  113. package/skills/business/brag/assets/sfx/impact/footstep_wood_000.ogg +0 -0
  114. package/skills/business/brag/assets/sfx/impact/footstep_wood_001.ogg +0 -0
  115. package/skills/business/brag/assets/sfx/impact/footstep_wood_002.ogg +0 -0
  116. package/skills/business/brag/assets/sfx/impact/footstep_wood_003.ogg +0 -0
  117. package/skills/business/brag/assets/sfx/impact/footstep_wood_004.ogg +0 -0
  118. package/skills/business/brag/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
  119. package/skills/business/brag/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
  120. package/skills/business/brag/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
  121. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
  122. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
  123. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
  124. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
  125. package/skills/business/brag/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
  126. package/skills/business/brag/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
  127. package/skills/business/brag/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
  128. package/skills/business/brag/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
  129. package/skills/business/brag/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
  130. package/skills/business/brag/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
  131. package/skills/business/brag/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
  132. package/skills/business/brag/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
  133. package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
  134. package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
  135. package/skills/business/brag/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
  136. package/skills/business/brag/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
  137. package/skills/business/brag/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
  138. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
  139. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
  140. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
  141. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
  142. package/skills/business/brag/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
  143. package/skills/business/brag/assets/sfx/impact/impactMining_001.ogg +0 -0
  144. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
  145. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
  146. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
  147. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
  148. package/skills/business/brag/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
  149. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
  150. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
  151. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
  152. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
  153. package/skills/business/brag/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
  154. package/skills/business/brag/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
  155. package/skills/business/brag/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
  156. package/skills/business/brag/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
  157. package/skills/business/brag/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
  158. package/skills/business/brag/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
  159. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
  160. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
  161. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
  162. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
  163. package/skills/business/brag/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
  164. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
  165. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
  166. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
  167. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
  168. package/skills/business/brag/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
  169. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
  170. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
  171. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
  172. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
  173. package/skills/business/brag/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
  174. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
  175. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
  176. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
  177. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
  178. package/skills/business/brag/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
  179. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
  180. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
  181. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
  182. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
  183. package/skills/business/brag/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
  184. package/skills/business/brag/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
  185. package/skills/business/brag/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
  186. package/skills/business/brag/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
  187. package/skills/business/brag/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
  188. package/skills/business/brag/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
  189. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
  190. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
  191. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
  192. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
  193. package/skills/business/brag/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
  194. package/skills/business/brag/assets/sfx/impact/impactWood_light_000.ogg +0 -0
  195. package/skills/business/brag/assets/sfx/impact/impactWood_light_001.ogg +0 -0
  196. package/skills/business/brag/assets/sfx/impact/impactWood_light_002.ogg +0 -0
  197. package/skills/business/brag/assets/sfx/impact/impactWood_light_003.ogg +0 -0
  198. package/skills/business/brag/assets/sfx/impact/impactWood_light_004.ogg +0 -0
  199. package/skills/business/brag/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
  200. package/skills/business/brag/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
  201. package/skills/business/brag/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
  202. package/skills/business/brag/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
  203. package/skills/business/brag/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
  204. package/skills/business/brag/assets/sfx/interface/bong_001.ogg +0 -0
  205. package/skills/business/brag/assets/sfx/interface/click_001.ogg +0 -0
  206. package/skills/business/brag/assets/sfx/interface/click_002.ogg +0 -0
  207. package/skills/business/brag/assets/sfx/interface/click_003.ogg +0 -0
  208. package/skills/business/brag/assets/sfx/interface/click_004.ogg +0 -0
  209. package/skills/business/brag/assets/sfx/interface/click_005.ogg +0 -0
  210. package/skills/business/brag/assets/sfx/interface/drop_001.ogg +0 -0
  211. package/skills/business/brag/assets/sfx/interface/drop_002.ogg +0 -0
  212. package/skills/business/brag/assets/sfx/interface/drop_003.ogg +0 -0
  213. package/skills/business/brag/assets/sfx/interface/error_005.ogg +0 -0
  214. package/skills/business/brag/assets/sfx/interface/error_006.ogg +0 -0
  215. package/skills/business/brag/assets/sfx/interface/glitch_002.ogg +0 -0
  216. package/skills/business/brag/assets/sfx/interface/glitch_004.ogg +0 -0
  217. package/skills/business/brag/assets/sfx/interface/select_008.ogg +0 -0
  218. package/skills/business/brag/assets/sfx/interface/switch_001.ogg +0 -0
  219. package/skills/business/brag/assets/sfx/interface/switch_002.ogg +0 -0
  220. package/skills/business/brag/assets/sfx/interface/switch_004.ogg +0 -0
  221. package/skills/business/brag/assets/sfx/interface/switch_005.ogg +0 -0
  222. package/skills/business/brag/assets/sfx/interface/switch_006.ogg +0 -0
  223. package/skills/business/brag/assets/sfx/interface/switch_007.ogg +0 -0
  224. package/skills/business/brag/assets/sfx/keyboard/keypress-001.wav +0 -0
  225. package/skills/business/brag/assets/sfx/keyboard/keypress-002.wav +0 -0
  226. package/skills/business/brag/assets/sfx/keyboard/keypress-003.wav +0 -0
  227. package/skills/business/brag/assets/sfx/keyboard/keypress-004.wav +0 -0
  228. package/skills/business/brag/assets/sfx/keyboard/keypress-005.wav +0 -0
  229. package/skills/business/brag/assets/sfx/keyboard/keypress-006.wav +0 -0
  230. package/skills/business/brag/assets/sfx/keyboard/keypress-007.wav +0 -0
  231. package/skills/business/brag/assets/sfx/keyboard/keypress-008.wav +0 -0
  232. package/skills/business/brag/assets/sfx/keyboard/keypress-009.wav +0 -0
  233. package/skills/business/brag/assets/sfx/keyboard/keypress-010.wav +0 -0
  234. package/skills/business/brag/assets/sfx/keyboard/keypress-011.wav +0 -0
  235. package/skills/business/brag/assets/sfx/keyboard/keypress-012.wav +0 -0
  236. package/skills/business/brag/assets/sfx/keyboard/keypress-013.wav +0 -0
  237. package/skills/business/brag/assets/sfx/keyboard/keypress-014.wav +0 -0
  238. package/skills/business/brag/assets/sfx/keyboard/keypress-015.wav +0 -0
  239. package/skills/business/brag/assets/sfx/keyboard/keypress-016.wav +0 -0
  240. package/skills/business/brag/assets/sfx/keyboard/keypress-017.wav +0 -0
  241. package/skills/business/brag/assets/sfx/keyboard/keypress-018.wav +0 -0
  242. package/skills/business/brag/assets/sfx/keyboard/keypress-019.wav +0 -0
  243. package/skills/business/brag/assets/sfx/keyboard/keypress-020.wav +0 -0
  244. package/skills/business/brag/assets/sfx/keyboard/keypress-021.wav +0 -0
  245. package/skills/business/brag/assets/sfx/keyboard/keypress-022.wav +0 -0
  246. package/skills/business/brag/assets/sfx/keyboard/keypress-023.wav +0 -0
  247. package/skills/business/brag/assets/sfx/keyboard/keypress-024.wav +0 -0
  248. package/skills/business/brag/assets/sfx/keyboard/keypress-025.wav +0 -0
  249. package/skills/business/brag/assets/sfx/keyboard/keypress-026.wav +0 -0
  250. package/skills/business/brag/assets/sfx/keyboard/keypress-027.wav +0 -0
  251. package/skills/business/brag/assets/sfx/keyboard/keypress-028.wav +0 -0
  252. package/skills/business/brag/assets/sfx/keyboard/keypress-029.wav +0 -0
  253. package/skills/business/brag/assets/sfx/keyboard/keypress-030.wav +0 -0
  254. package/skills/business/brag/assets/sfx/keyboard/keypress-031.wav +0 -0
  255. package/skills/business/brag/assets/sfx/keyboard/keypress-032.wav +0 -0
  256. package/skills/business/brag/assets/sfx/sfx-analysis.json +15584 -0
  257. package/skills/business/brag/assets/sfx/sfx-analysis.md +75 -0
  258. package/skills/business/brag/assets/sfx/ui/click1.ogg +0 -0
  259. package/skills/business/brag/assets/sfx/ui/click2.ogg +0 -0
  260. package/skills/business/brag/assets/sfx/ui/click3.ogg +0 -0
  261. package/skills/business/brag/assets/sfx/ui/click4.ogg +0 -0
  262. package/skills/business/brag/assets/sfx/ui/click5.ogg +0 -0
  263. package/skills/business/brag/assets/sfx/ui/mouseclick1.ogg +0 -0
  264. package/skills/business/brag/assets/sfx/ui/rollover1.ogg +0 -0
  265. package/skills/business/brag/assets/sfx/ui/rollover2.ogg +0 -0
  266. package/skills/business/brag/assets/sfx/ui/rollover4.ogg +0 -0
  267. package/skills/business/brag/assets/sfx/ui/rollover5.ogg +0 -0
  268. package/skills/business/brag/assets/sfx/ui/switch1.ogg +0 -0
  269. package/skills/business/brag/assets/sfx/ui/switch10.ogg +0 -0
  270. package/skills/business/brag/assets/sfx/ui/switch11.ogg +0 -0
  271. package/skills/business/brag/assets/sfx/ui/switch12.ogg +0 -0
  272. package/skills/business/brag/assets/sfx/ui/switch13.ogg +0 -0
  273. package/skills/business/brag/assets/sfx/ui/switch14.ogg +0 -0
  274. package/skills/business/brag/assets/sfx/ui/switch15.ogg +0 -0
  275. package/skills/business/brag/assets/sfx/ui/switch16.ogg +0 -0
  276. package/skills/business/brag/assets/sfx/ui/switch17.ogg +0 -0
  277. package/skills/business/brag/assets/sfx/ui/switch18.ogg +0 -0
  278. package/skills/business/brag/assets/sfx/ui/switch19.ogg +0 -0
  279. package/skills/business/brag/assets/sfx/ui/switch2.ogg +0 -0
  280. package/skills/business/brag/assets/sfx/ui/switch20.ogg +0 -0
  281. package/skills/business/brag/assets/sfx/ui/switch21.ogg +0 -0
  282. package/skills/business/brag/assets/sfx/ui/switch22.ogg +0 -0
  283. package/skills/business/brag/assets/sfx/ui/switch23.ogg +0 -0
  284. package/skills/business/brag/assets/sfx/ui/switch24.ogg +0 -0
  285. package/skills/business/brag/assets/sfx/ui/switch25.ogg +0 -0
  286. package/skills/business/brag/assets/sfx/ui/switch26.ogg +0 -0
  287. package/skills/business/brag/assets/sfx/ui/switch27.ogg +0 -0
  288. package/skills/business/brag/assets/sfx/ui/switch28.ogg +0 -0
  289. package/skills/business/brag/assets/sfx/ui/switch29.ogg +0 -0
  290. package/skills/business/brag/assets/sfx/ui/switch3.ogg +0 -0
  291. package/skills/business/brag/assets/sfx/ui/switch30.ogg +0 -0
  292. package/skills/business/brag/assets/sfx/ui/switch31.ogg +0 -0
  293. package/skills/business/brag/assets/sfx/ui/switch32.ogg +0 -0
  294. package/skills/business/brag/assets/sfx/ui/switch33.ogg +0 -0
  295. package/skills/business/brag/assets/sfx/ui/switch34.ogg +0 -0
  296. package/skills/business/brag/assets/sfx/ui/switch35.ogg +0 -0
  297. package/skills/business/brag/assets/sfx/ui/switch36.ogg +0 -0
  298. package/skills/business/brag/assets/sfx/ui/switch37.ogg +0 -0
  299. package/skills/business/brag/assets/sfx/ui/switch38.ogg +0 -0
  300. package/skills/business/brag/assets/sfx/ui/switch4.ogg +0 -0
  301. package/skills/business/brag/assets/sfx/ui/switch5.ogg +0 -0
  302. package/skills/business/brag/assets/sfx/ui/switch6.ogg +0 -0
  303. package/skills/business/brag/assets/sfx/ui/switch7.ogg +0 -0
  304. package/skills/business/brag/assets/sfx/ui/switch8.ogg +0 -0
  305. package/skills/business/brag/assets/sfx/ui/switch9.ogg +0 -0
  306. package/skills/business/brag/references/audio.md +307 -0
  307. package/skills/business/brag/references/step-1-inspect.md +133 -0
  308. package/skills/business/brag/references/step-2-plan.md +234 -0
  309. package/skills/business/brag/references/step-3-compose.md +210 -0
  310. package/skills/business/brag/references/step-4-deliver.md +168 -0
  311. package/skills/business/brag/references/tones.md +231 -0
  312. package/skills/business/brag/scripts/analyze_music_cues.py +309 -0
  313. package/skills/business/brag/scripts/pyproject.toml +14 -0
  314. package/skills/business/brag/scripts/uv.lock +819 -0
  315. package/skills/business/copywriting/SKILL.md +178 -0
  316. package/skills/business/customer-research/SKILL.md +259 -0
  317. package/skills/business/freelancing/SKILL.md +679 -0
  318. package/skills/business/launch/SKILL.md +273 -0
  319. package/skills/business/marketing-psychology/SKILL.md +364 -0
  320. package/skills/business/pricing/SKILL.md +233 -0
  321. package/skills/business/resume-revamp-jake-ats/SKILL.md +64 -0
  322. package/skills/business/startup-founder/SKILL.md +400 -0
  323. package/skills/business/startup-founder/references/funding.md +48 -0
  324. package/skills/business/startup-founder/references/further-reading.md +132 -0
  325. package/skills/business/startup-founder/references/gtm-tools.md +57 -0
  326. package/skills/business/startup-founder/references/legal-india.md +36 -0
  327. package/skills/business/startup-founder/references/marketing/README.md +16 -0
  328. package/skills/business/startup-founder/references/marketing/cold-email.md +172 -0
  329. package/skills/business/startup-founder/references/marketing/competitors.md +245 -0
  330. package/skills/business/startup-founder/references/marketing/customer-research.md +276 -0
  331. package/skills/business/startup-founder/references/marketing/free-tools.md +168 -0
  332. package/skills/business/startup-founder/references/marketing/launch.md +343 -0
  333. package/skills/business/startup-founder/references/marketing/marketing-plan.md +270 -0
  334. package/skills/business/startup-founder/references/marketing/pricing.md +237 -0
  335. package/skills/business/startup-founder/references/marketing/product-marketing.md +250 -0
  336. package/skills/business/startup-founder/references/validation.md +267 -0
  337. package/skills/devops/deployments/SKILL.md +339 -0
  338. package/skills/devops/git-ci/SKILL.md +372 -0
  339. package/skills/devops/performance/SKILL.md +523 -0
  340. package/skills/devops/testing/SKILL.md +558 -0
  341. package/skills/engineering/code-review/SKILL.md +149 -0
  342. package/skills/engineering/coding-standards/SKILL.md +229 -0
  343. package/skills/engineering/product-engineering/SKILL.md +219 -0
  344. package/skills/engineering/senior-engineer-prompts/SKILL.md +145 -0
  345. package/skills/engineering/tdd-workflow/SKILL.md +178 -0
  346. package/skills/engineering/verification-loop/SKILL.md +199 -0
  347. package/skills/nerdev/nerdev-abstraction/SKILL.md +412 -0
  348. package/skills/nerdev/nerdev-docs/SKILL.md +527 -0
  349. package/skills/nerdev/nerdev-docs/templates/adr-template.md +39 -0
  350. package/skills/nerdev/nerdev-docs/templates/contributing-template.md +140 -0
  351. package/skills/nerdev/nerdev-docs/templates/deploy-template.md +426 -0
  352. package/skills/nerdev/nerdev-docs/templates/design-template.md +105 -0
  353. package/skills/nerdev/nerdev-docs/templates/incident-template.md +66 -0
  354. package/skills/nerdev/nerdev-monorepo/SKILL.md +522 -0
  355. package/skills/quality/output-skill/SKILL.md +49 -0
  356. package/skills/quality/unslop/SKILL.md +67 -0
  357. package/skills/ui/animaxxing/SKILL.md +58 -0
  358. package/skills/ui/animaxxing/agents/openai.yaml +7 -0
  359. package/skills/ui/animaxxing/references/effect-restoration.md +26 -0
  360. package/skills/ui/animaxxing/references/motion-vocabulary.md +142 -0
  361. package/skills/ui/animaxxing/references/recipes/blast-off.md +119 -0
  362. package/skills/ui/animaxxing/references/recipes/particle-effects.md +718 -0
  363. package/skills/ui/animaxxing/references/recipes/particle-field.md +428 -0
  364. package/skills/ui/animaxxing/references/recipes/route-letters.md +205 -0
  365. package/skills/ui/animaxxing/references/recipes/speak-in.md +181 -0
  366. package/skills/ui/animaxxing/references/recipes/split-entrances.md +345 -0
  367. package/skills/ui/animaxxing/references/recipes/wave.md +144 -0
  368. package/skills/ui/animaxxing/references/text-stability.md +68 -0
  369. package/skills/ui/animaxxing/references/verification.md +44 -0
  370. package/skills/ui/ask-animation/SKILL.md +178 -0
  371. package/skills/ui/ask-base-ui/SKILL.md +400 -0
  372. package/skills/ui/ask-cmdk/SKILL.md +315 -0
  373. package/skills/ui/ask-command-menu/SKILL.md +262 -0
  374. package/skills/ui/ask-drawer/SKILL.md +235 -0
  375. package/skills/ui/ask-form/SKILL.md +229 -0
  376. package/skills/ui/ask-gsap/SKILL.md +435 -0
  377. package/skills/ui/ask-modal/SKILL.md +145 -0
  378. package/skills/ui/ask-motion/SKILL.md +339 -0
  379. package/skills/ui/ask-rhf/SKILL.md +388 -0
  380. package/skills/ui/ask-sonner/API.md +64 -0
  381. package/skills/ui/ask-sonner/SKILL.md +88 -0
  382. package/skills/ui/ask-table/SKILL.md +253 -0
  383. package/skills/ui/ask-tanstack-table/SKILL.md +490 -0
  384. package/skills/ui/ask-toast/SKILL.md +163 -0
  385. package/skills/ui/ask-vaul/SKILL.md +291 -0
  386. package/skills/ui/ask-virtual-list/SKILL.md +304 -0
  387. package/skills/ui/ask-virtuoso/SKILL.md +332 -0
  388. package/skills/ui/email-craft/SKILL.md +258 -0
  389. package/skills/ui/frontend-craftsmanship/SKILL.md +462 -0
  390. package/skills/ui/gsap-astro/SKILL.md +56 -0
  391. package/skills/ui/gsap-astro/agents/openai.yaml +7 -0
  392. package/skills/ui/gsap-astro/references/client-router-navigation.md +139 -0
  393. package/skills/ui/gsap-astro/references/initialization.md +87 -0
  394. package/skills/ui/gsap-astro/references/motion-system.md +152 -0
  395. package/skills/ui/gsap-astro/references/scripts-and-islands.md +65 -0
  396. package/skills/ui/gsap-astro/references/verification.md +44 -0
  397. package/skills/ui/gsap-core/SKILL.md +254 -0
  398. package/skills/ui/gsap-frameworks/SKILL.md +266 -0
  399. package/skills/ui/gsap-nextjs/SKILL.md +51 -0
  400. package/skills/ui/gsap-nextjs/agents/openai.yaml +7 -0
  401. package/skills/ui/gsap-nextjs/references/app-router-navigation.md +189 -0
  402. package/skills/ui/gsap-nextjs/references/initialization.md +87 -0
  403. package/skills/ui/gsap-nextjs/references/motion-system.md +158 -0
  404. package/skills/ui/gsap-nextjs/references/verification.md +40 -0
  405. package/skills/ui/gsap-nuxt/SKILL.md +56 -0
  406. package/skills/ui/gsap-nuxt/agents/openai.yaml +7 -0
  407. package/skills/ui/gsap-nuxt/references/initialization.md +87 -0
  408. package/skills/ui/gsap-nuxt/references/motion-system.md +161 -0
  409. package/skills/ui/gsap-nuxt/references/navigation.md +145 -0
  410. package/skills/ui/gsap-nuxt/references/page-transitions.md +107 -0
  411. package/skills/ui/gsap-nuxt/references/verification.md +42 -0
  412. package/skills/ui/gsap-performance/SKILL.md +79 -0
  413. package/skills/ui/gsap-plugins/SKILL.md +433 -0
  414. package/skills/ui/gsap-react/SKILL.md +136 -0
  415. package/skills/ui/gsap-react-router/SKILL.md +55 -0
  416. package/skills/ui/gsap-react-router/agents/openai.yaml +7 -0
  417. package/skills/ui/gsap-react-router/references/initialization.md +87 -0
  418. package/skills/ui/gsap-react-router/references/motion-system.md +158 -0
  419. package/skills/ui/gsap-react-router/references/react-router-navigation.md +165 -0
  420. package/skills/ui/gsap-react-router/references/route-lifetime.md +74 -0
  421. package/skills/ui/gsap-react-router/references/verification.md +42 -0
  422. package/skills/ui/gsap-scrolltrigger/SKILL.md +296 -0
  423. package/skills/ui/gsap-sveltekit/SKILL.md +54 -0
  424. package/skills/ui/gsap-sveltekit/agents/openai.yaml +7 -0
  425. package/skills/ui/gsap-sveltekit/references/initialization.md +87 -0
  426. package/skills/ui/gsap-sveltekit/references/motion-system.md +156 -0
  427. package/skills/ui/gsap-sveltekit/references/page-lifetime.md +63 -0
  428. package/skills/ui/gsap-sveltekit/references/sveltekit-navigation.md +160 -0
  429. package/skills/ui/gsap-sveltekit/references/verification.md +41 -0
  430. package/skills/ui/gsap-tanstack-router/SKILL.md +56 -0
  431. package/skills/ui/gsap-tanstack-router/agents/openai.yaml +7 -0
  432. package/skills/ui/gsap-tanstack-router/references/initialization.md +87 -0
  433. package/skills/ui/gsap-tanstack-router/references/motion-system.md +160 -0
  434. package/skills/ui/gsap-tanstack-router/references/route-lifetime.md +66 -0
  435. package/skills/ui/gsap-tanstack-router/references/tanstack-navigation.md +156 -0
  436. package/skills/ui/gsap-tanstack-router/references/verification.md +41 -0
  437. package/skills/ui/gsap-timeline/SKILL.md +107 -0
  438. package/skills/ui/gsap-utils/SKILL.md +284 -0
  439. package/skills/ui/gsap-vanilla/SKILL.md +63 -0
  440. package/skills/ui/gsap-vanilla/agents/openai.yaml +7 -0
  441. package/skills/ui/gsap-vanilla/references/cross-document-navigation.md +54 -0
  442. package/skills/ui/gsap-vanilla/references/initialization.md +87 -0
  443. package/skills/ui/gsap-vanilla/references/motion-system.md +150 -0
  444. package/skills/ui/gsap-vanilla/references/page-load.md +96 -0
  445. package/skills/ui/gsap-vanilla/references/spa-navigation.md +70 -0
  446. package/skills/ui/gsap-vanilla/references/verification.md +41 -0
  447. package/skills/ui/house-style/SKILL.md +366 -0
  448. package/skills/ui/imagegen/SKILL.md +49 -0
  449. package/skills/ui/imagegen/references/brandkit.md +48 -0
  450. package/skills/ui/imagegen/references/image-to-code.md +56 -0
  451. package/skills/ui/imagegen/references/mobile.md +58 -0
  452. package/skills/ui/imagegen/references/web.md +63 -0
  453. package/skills/ui/impeccable/SKILL.md +116 -0
  454. package/skills/ui/impeccable/reference/adapt.md +318 -0
  455. package/skills/ui/impeccable/reference/adapt.native.md +58 -0
  456. package/skills/ui/impeccable/reference/android.md +46 -0
  457. package/skills/ui/impeccable/reference/animate.md +89 -0
  458. package/skills/ui/impeccable/reference/audit.md +137 -0
  459. package/skills/ui/impeccable/reference/audit.native.md +139 -0
  460. package/skills/ui/impeccable/reference/bolder.md +33 -0
  461. package/skills/ui/impeccable/reference/clarify.md +94 -0
  462. package/skills/ui/impeccable/reference/colorize.md +86 -0
  463. package/skills/ui/impeccable/reference/craft-floor.md +44 -0
  464. package/skills/ui/impeccable/reference/craft.md +5 -0
  465. package/skills/ui/impeccable/reference/critique.md +806 -0
  466. package/skills/ui/impeccable/reference/degraded/asset-producer.md +37 -0
  467. package/skills/ui/impeccable/reference/degraded/documenter.md +24 -0
  468. package/skills/ui/impeccable/reference/degraded/finish-reviewer.md +38 -0
  469. package/skills/ui/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  470. package/skills/ui/impeccable/reference/delight.md +70 -0
  471. package/skills/ui/impeccable/reference/distill.md +111 -0
  472. package/skills/ui/impeccable/reference/doctor.md +54 -0
  473. package/skills/ui/impeccable/reference/document.md +416 -0
  474. package/skills/ui/impeccable/reference/extract.md +69 -0
  475. package/skills/ui/impeccable/reference/generate.md +101 -0
  476. package/skills/ui/impeccable/reference/harden.md +345 -0
  477. package/skills/ui/impeccable/reference/hooks.md +111 -0
  478. package/skills/ui/impeccable/reference/init.md +131 -0
  479. package/skills/ui/impeccable/reference/ios.md +51 -0
  480. package/skills/ui/impeccable/reference/layout.md +84 -0
  481. package/skills/ui/impeccable/reference/live-setup.md +104 -0
  482. package/skills/ui/impeccable/reference/live.md +325 -0
  483. package/skills/ui/impeccable/reference/new-work.md +145 -0
  484. package/skills/ui/impeccable/reference/onboard.md +234 -0
  485. package/skills/ui/impeccable/reference/operate.md +61 -0
  486. package/skills/ui/impeccable/reference/optimize.md +258 -0
  487. package/skills/ui/impeccable/reference/overdrive.md +127 -0
  488. package/skills/ui/impeccable/reference/polish.md +105 -0
  489. package/skills/ui/impeccable/reference/quieter.md +99 -0
  490. package/skills/ui/impeccable/reference/routing.md +24 -0
  491. package/skills/ui/impeccable/reference/shape.md +59 -0
  492. package/skills/ui/impeccable/reference/typeset.md +80 -0
  493. package/skills/ui/impeccable/reference/visualize.md +46 -0
  494. package/skills/ui/impeccable/scripts/VERSION +1 -0
  495. package/skills/ui/impeccable/scripts/command-metadata.json +98 -0
  496. package/skills/ui/impeccable/scripts/data/font-index-failures.json +121 -0
  497. package/skills/ui/impeccable/scripts/data/font-index.json +1 -0
  498. package/skills/ui/impeccable/scripts/impeccable +206 -0
  499. package/skills/ui/impeccable/scripts/impeccable.cmd +214 -0
  500. package/skills/ui/impeccable/scripts/live-browser-dom.js +167 -0
  501. package/skills/ui/impeccable/scripts/live-browser-ignores.js +242 -0
  502. package/skills/ui/impeccable/scripts/live-browser-session.js +144 -0
  503. package/skills/ui/impeccable/scripts/live-browser.js +13510 -0
  504. package/skills/ui/impeccable/scripts/modern-screenshot.umd.js +14 -0
  505. package/skills/ui/motion/SKILL.md +207 -0
  506. package/skills/ui/pick-ui-library/SKILL.md +85 -0
  507. package/skills/ui/product-messaging/SKILL.md +163 -0
  508. package/skills/ui/product-site/SKILL.md +465 -0
  509. package/skills/ui/prototype/PICKER.md +197 -0
  510. package/skills/ui/prototype/SKILL.md +98 -0
  511. package/skills/ui/refero-design/SKILL.md +534 -0
  512. package/skills/ui/refero-design/agents/openai.yaml +4 -0
  513. package/skills/ui/refero-design/references/anti-ai-slop.md +292 -0
  514. package/skills/ui/refero-design/references/color.md +563 -0
  515. package/skills/ui/refero-design/references/copywriting.md +222 -0
  516. package/skills/ui/refero-design/references/craft-details.md +525 -0
  517. package/skills/ui/refero-design/references/example-workflow.md +264 -0
  518. package/skills/ui/refero-design/references/icons.md +166 -0
  519. package/skills/ui/refero-design/references/mcp-tools.md +258 -0
  520. package/skills/ui/refero-design/references/motion.md +504 -0
  521. package/skills/ui/refero-design/references/typography.md +737 -0
  522. package/skills/ui/refero-design/references/visual-workflow.md +105 -0
  523. package/skills/ui/style-animaxxing/SKILL.md +48 -0
  524. package/skills/ui/style-animaxxing/agents/openai.yaml +7 -0
  525. package/skills/ui/style-animaxxing/references/motion-vocabulary.md +51 -0
  526. package/skills/ui/style-animaxxing/references/tokens.md +288 -0
  527. package/skills/ui/style-animaxxing/references/typography-and-layout.md +149 -0
  528. package/skills/ui/style-animaxxing/references/verification.md +38 -0
  529. package/skills/ui/typography-picker/SKILL.md +305 -0
  530. package/skills/ui/ui-core/SKILL.md +345 -0
  531. package/skills/ui/ui-core/references/accessibility.md +85 -0
  532. package/skills/ui/ui-core/references/build.md +666 -0
  533. package/skills/ui/ui-core/references/copy.md +70 -0
  534. package/skills/ui/ui-core/references/dark-mode.md +76 -0
  535. package/skills/ui/ui-core/references/direction.md +99 -0
  536. package/skills/ui/ui-core/references/redesign.md +74 -0
  537. package/skills/ui/ui-core/references/responsive.md +77 -0
  538. package/skills/ui/ui-core/references/styles.md +42 -0
  539. package/skills/ui/ui-core/references/system.md +190 -0
  540. package/skills/ui/ui-core/references/verify.md +37 -0
  541. package/skills/ui/ui-engineering/SKILL.md +436 -0
  542. package/skills/ui/ui-engineering/references/avatars.md +74 -0
  543. package/skills/ui/ui-engineering/references/card-patterns.md +66 -0
  544. package/skills/ui/ui-engineering/references/floating-actions.md +65 -0
  545. package/skills/ui/ui-engineering/references/navigation.md +81 -0
  546. package/skills/ui/ui-engineering/references/overlays.md +74 -0
  547. package/skills/ui/ui-engineering/references/pagination.md +71 -0
  548. package/skills/ui/ui-engineering/references/progress-indicators.md +77 -0
  549. package/skills/ui/ui-engineering/references/quality-bar.md +293 -0
  550. package/skills/ui/ui-engineering/references/search.md +68 -0
  551. package/skills/ui/ui-engineering/references/tailwind-architecture.md +81 -0
  552. package/skills/ui/ui-theme-picker/SKILL.md +522 -0
  553. package/skills/ui/ui-theme-picker/references/component-sources.md +223 -0
  554. package/skills/ui/ui-theme-picker/references/styles.md +298 -0
  555. package/skills/ui/vitepress-docs/SKILL.md +439 -0
  556. package/skills/ui/vitepress-docs/references/components.md +333 -0
  557. package/skills/ui/vitepress-docs/references/layout.md +128 -0
  558. package/skills/ui/vitepress-docs/references/tokens.md +87 -0
  559. package/skills/ui/vitepress-docs/references/typography.md +76 -0
  560. package/skills/workflow/careful/SKILL.md +48 -0
  561. package/skills/workflow/context-restore/SKILL.md +69 -0
  562. package/skills/workflow/context-save/SKILL.md +96 -0
  563. package/skills/workflow/health/SKILL.md +99 -0
  564. package/skills/workflow/learn/SKILL.md +95 -0
  565. package/skills/workflow/office-hours/SKILL.md +136 -0
  566. package/skills/workflow/ship/SKILL.md +95 -0
  567. package/vendor.json +80 -0
@@ -0,0 +1,284 @@
1
+ ---
2
+ name: gsap-utils
3
+ description: Official GSAP skill for gsap.utils — clamp, mapRange, normalize, interpolate, random, snap, toArray, wrap, pipe. Use when the user asks about gsap.utils, clamp, mapRange, random, snap, toArray, wrap, or helper utilities in GSAP.
4
+ license: MIT
5
+ ---
6
+
7
+ # gsap.utils
8
+
9
+ ## When to Use This Skill
10
+
11
+ Apply when writing or reviewing code that uses **gsap.utils** for math, array/collection handling, unit parsing, or value mapping in animations (e.g. mapping scroll to a value, randomizing, snapping to a grid, or normalizing inputs).
12
+
13
+ **Related skills:** Use with **gsap-core**, **gsap-timeline**, and **gsap-scrolltrigger** when building animations; CustomEase and other easing utilities are in **gsap-plugins**.
14
+
15
+ ## Overview
16
+
17
+ **gsap.utils** provides pure helpers; no need to register. Use in tween vars (e.g. function-based values), in ScrollTrigger or Observer callbacks, or in any JS that drives GSAP. All are on **gsap.utils** (e.g. `gsap.utils.clamp()`).
18
+
19
+ **Omitting the value: function form.** Many utils accept the value to transform as the **last** argument. If you omit that argument, the util returns a **function** that accepts the value later. Use the function form when you need to clamp, map, normalize, or snap many values with the same config (e.g. in a mousemove handler or tween callback). **Exception: random()** — pass **true** as the last argument to get a reusable function (do not omit the value); see [random()](https://gsap.com/docs/v3/GSAP/UtilityMethods/random()).
20
+
21
+ ```javascript
22
+ // With value: returns the result
23
+ gsap.utils.clamp(0, 100, 150); // 100
24
+
25
+ // Without value: returns a function you call with the value later
26
+ let c = gsap.utils.clamp(0, 100);
27
+ c(150); // 100
28
+ c(-10); // 0
29
+ ```
30
+
31
+ ## Clamping and Ranges
32
+
33
+ ### clamp(min, max, value?)
34
+
35
+ Constrains a value between min and max. Omit **value** to get a function: `clamp(min, max)(value)`.
36
+
37
+ ```javascript
38
+ gsap.utils.clamp(0, 100, 150); // 100
39
+ gsap.utils.clamp(0, 100, -10); // 0
40
+
41
+ let clampFn = gsap.utils.clamp(0, 100);
42
+ clampFn(150); // 100
43
+ ```
44
+
45
+ ### mapRange(inMin, inMax, outMin, outMax, value?)
46
+
47
+ Maps a value from one range to another. Use when converting scroll position, progress (0–1), or input range to an animation range. Omit **value** to get a function: `mapRange(inMin, inMax, outMin, outMax)(value)`.
48
+
49
+ ```javascript
50
+ gsap.utils.mapRange(0, 100, 0, 500, 50); // 250
51
+ gsap.utils.mapRange(0, 1, 0, 360, 0.5); // 180 (progress to degrees)
52
+
53
+ let mapFn = gsap.utils.mapRange(0, 100, 0, 500);
54
+ mapFn(50); // 250
55
+ ```
56
+
57
+ ### normalize(min, max, value?)
58
+
59
+ Returns a value normalized to 0–1 for the given range. Inverse of mapping when the target range is 0–1. Omit **value** to get a function: `normalize(min, max)(value)`.
60
+
61
+ ```javascript
62
+ gsap.utils.normalize(0, 100, 50); // 0.5
63
+ gsap.utils.normalize(100, 300, 200); // 0.5
64
+
65
+ let normFn = gsap.utils.normalize(0, 100);
66
+ normFn(50); // 0.5
67
+ ```
68
+
69
+ ### interpolate(start, end, progress?)
70
+
71
+ Interpolates between two values at a given progress (0–1). Handles numbers, colors, and objects with matching keys. Omit **progress** to get a function: `interpolate(start, end)(progress)`.
72
+
73
+ ```javascript
74
+ gsap.utils.interpolate(0, 100, 0.5); // 50
75
+ gsap.utils.interpolate("#ff0000", "#0000ff", 0.5); // mid color
76
+ gsap.utils.interpolate({ x: 0, y: 0 }, { x: 100, y: 50 }, 0.5); // { x: 50, y: 25 }
77
+
78
+ let lerp = gsap.utils.interpolate(0, 100);
79
+ lerp(0.5); // 50
80
+ ```
81
+
82
+ ## Random and Snap
83
+
84
+ ### random(minimum, maximum[, snapIncrement, returnFunction]) / random(array[, returnFunction])
85
+
86
+ Returns a random number in the range **minimum**–**maximum**, or a random element from an **array**. Optional **snapIncrement** snaps the result to the nearest multiple (e.g. `5` → multiples of 5). **To get a reusable function**, pass **true** as the last argument (**returnFunction**); the returned function takes no args and returns a new random value each time. This is the only util that uses `true` for the function form instead of omitting the value.
87
+
88
+ ```javascript
89
+ // immediate value: number in range
90
+ gsap.utils.random(-100, 100); // e.g. 42.7
91
+ gsap.utils.random(0, 500, 5); // 0–500, snapped to nearest 5
92
+
93
+ // reusable function: pass true as last argument
94
+ let randomFn = gsap.utils.random(-200, 500, 10, true);
95
+ randomFn(); // random value in range, snapped to 10
96
+ randomFn(); // another random value
97
+
98
+ // array: pick one value at random
99
+ gsap.utils.random(["red", "blue", "green"]); // "red", "blue", or "green"
100
+ let randomFromArray = gsap.utils.random([0, 100, 200], true);
101
+ randomFromArray(); // 0, 100, or 200
102
+ ```
103
+
104
+ **String form in tween vars:** use `"random(-100, 100)"`, `"random(-100, 100, 5)"`, or `"random([0, 100, 200])"`; GSAP evaluates it per target.
105
+
106
+ ```javascript
107
+ gsap.to(".box", { x: "random(-100, 100, 5)", duration: 1 });
108
+ gsap.to(".item", { backgroundColor: "random([red, blue, green])" });
109
+ ```
110
+
111
+ ### snap(snapTo, value?)
112
+
113
+ Snaps a value to the nearest multiple of **snapTo**, or to the nearest value in an array of allowed values. Omit **value** to get a function: `snap(snapTo)(value)` (or `snap(snapArray)(value)`).
114
+
115
+ ```javascript
116
+ gsap.utils.snap(10, 23); // 20
117
+ gsap.utils.snap(0.25, 0.7); // 0.75
118
+ gsap.utils.snap([0, 100, 200], 150); // 100 or 200 (nearest in array)
119
+
120
+ let snapFn = gsap.utils.snap(10);
121
+ snapFn(23); // 20
122
+ ```
123
+
124
+ Use in tweens for grid or step-based animation:
125
+
126
+ ```javascript
127
+ gsap.to(".x", { x: 200, snap: { x: 20 } });
128
+ ```
129
+
130
+ ### shuffle(array)
131
+
132
+ Returns a new array with the same elements in random order. Use for randomizing order (e.g. stagger from "random" with a copy).
133
+
134
+ ```javascript
135
+ gsap.utils.shuffle([1, 2, 3, 4]); // e.g. [3, 1, 4, 2]
136
+ ```
137
+
138
+ ### distribute(config)
139
+
140
+ **Returns a function** that assigns a value to each target based on its position in the array (or in a grid). Used internally for advanced staggers; use it whenever you need values spread across many elements (e.g. scale, opacity, x, delay). The returned function receives `(index, target, targets)` — either call it manually or pass the result directly into a tween; GSAP will call it per target with index, element, and array.
141
+
142
+ **Config (all optional):**
143
+
144
+ | Property | Type | Description |
145
+ |----------|------|-------------|
146
+ | `base` | Number | Starting value. Default `0`. |
147
+ | `amount` | Number | Total to distribute across all targets (added to base). E.g. `amount: 1` with 100 targets → 0.01 between each. Use **each** instead to set a fixed step per target. |
148
+ | `each` | Number | Amount to add between each target (added to base). E.g. `each: 1` with 4 targets → 0, 1, 2, 3. Use **amount** instead to split a total. |
149
+ | `from` | Number \| String \| Array | Where distribution starts: index, or `"start"`, `"center"`, `"edges"`, `"random"`, `"end"`, or ratios like `[0.25, 0.75]`. Default `0`. |
150
+ | `grid` | String \| Array | Use grid position instead of flat index: `[rows, columns]` (e.g. `[5, 10]`) or `"auto"` to detect. Omit for flat array. |
151
+ | `axis` | String | For grid: limit to one axis (`"x"` or `"y"`). |
152
+ | `ease` | Ease | Distribute values along an ease curve (e.g. `"power1.inOut"`). Default `"none"`. |
153
+
154
+ **In a tween:** pass the result of `distribute(config)` as the property value; GSAP calls the function for each target with `(index, target, targets)`.
155
+
156
+ ```javascript
157
+ // Scale: middle elements 0.5, outer edges 3 (amount 2.5 distributed from center)
158
+ gsap.to(".class", {
159
+ scale: gsap.utils.distribute({
160
+ base: 0.5,
161
+ amount: 2.5,
162
+ from: "center"
163
+ })
164
+ });
165
+ ```
166
+
167
+ **Manual use:** call the returned function with `(index, target, targets)` to get the value for that index.
168
+
169
+ ```javascript
170
+ const distributor = gsap.utils.distribute({
171
+ base: 50,
172
+ amount: 100,
173
+ from: "center",
174
+ ease: "power1.inOut"
175
+ });
176
+ const targets = gsap.utils.toArray(".box");
177
+ const valueForIndex2 = distributor(2, targets[2], targets);
178
+ ```
179
+
180
+ See [distribute()](https://gsap.com/docs/v3/GSAP/UtilityMethods/distribute/) for more.
181
+
182
+ ## Units and Parsing
183
+
184
+ ### getUnit(value)
185
+
186
+ Returns the unit string of a value (e.g. `"px"`, `"%"`, `"deg"`). Use when normalizing or converting values.
187
+
188
+ ```javascript
189
+ gsap.utils.getUnit("100px"); // "px"
190
+ gsap.utils.getUnit("50%"); // "%"
191
+ gsap.utils.getUnit(42); // "" (unitless)
192
+ ```
193
+
194
+ ### unitize(value, unit)
195
+
196
+ Appends a unit to a number, or returns the value as-is if it already has a unit. Use when building CSS values or tween end values.
197
+
198
+ ```javascript
199
+ gsap.utils.unitize(100, "px"); // "100px"
200
+ gsap.utils.unitize("2rem", "px"); // "2rem" (unchanged)
201
+ ```
202
+
203
+ ### splitColor(color, returnHSL?)
204
+
205
+ Converts a color string into an array: **[red, green, blue]** (0–255), or **[red, green, blue, alpha]** (4 elements for RGBA when alpha is present or required). Pass **true** as the second argument (**returnHSL**) to get **[hue, saturation, lightness]** or **[hue, saturation, lightness, alpha]** (HSL/HSLA) instead. Works with `"rgb()"`, `"rgba()"`, `"hsl()"`, `"hsla()"`, hex, and named colors (e.g. `"red"`). Use when animating color components or building gradients. See [splitColor()](https://gsap.com/docs/v3/GSAP/UtilityMethods/splitColor/).
206
+
207
+ ```javascript
208
+ gsap.utils.splitColor("red"); // [255, 0, 0]
209
+ gsap.utils.splitColor("#6fb936"); // [111, 185, 54]
210
+ gsap.utils.splitColor("rgba(204, 153, 51, 0.5)"); // [204, 153, 51, 0.5] (4 elements)
211
+ gsap.utils.splitColor("#6fb936", true); // [94, 55, 47] (HSL: hue, saturation, lightness)
212
+ ```
213
+
214
+ ## Arrays and Collections
215
+
216
+ ### selector(scope)
217
+
218
+ Returns a scoped selector function that finds elements only within the given element (or ref). Use in components so selectors like `".box"` match only descendants of that component, not the whole document. Accepts a DOM element or a ref (e.g. React ref; handles `.current`).
219
+
220
+ ```javascript
221
+ const q = gsap.utils.selector(containerRef);
222
+ q(".box"); // array of .box elements inside container
223
+ gsap.to(q(".circle"), { x: 100 });
224
+ ```
225
+
226
+ ### toArray(value, scope?)
227
+
228
+ Converts a value to an array: selector string (scoped to element), NodeList, HTMLCollection, single element, or array. Use when passing mixed inputs to GSAP (e.g. targets) and a true array is needed.
229
+
230
+ ```javascript
231
+ gsap.utils.toArray(".item"); // array of elements
232
+ gsap.utils.toArray(".item", container); // scoped to container
233
+ gsap.utils.toArray(nodeList); // [ ... ] from NodeList
234
+ ```
235
+
236
+ ### pipe(...functions)
237
+
238
+ Composes functions: **pipe(f1, f2, f3)(value)** returns f3(f2(f1(value))). Use when applying a chain of transforms (e.g. normalize → mapRange → snap) in a tween or callback.
239
+
240
+ ```javascript
241
+ const fn = gsap.utils.pipe(
242
+ (v) => gsap.utils.normalize(0, 100, v),
243
+ (v) => gsap.utils.snap(0.1, v)
244
+ );
245
+ fn(50); // normalized then snapped
246
+ ```
247
+
248
+ ### wrap(min, max, value?)
249
+
250
+ Wraps a value into the range min–max (inclusive min, exclusive max). Use for infinite scroll or cyclic values. Omit **value** to get a function: `wrap(min, max)(value)`.
251
+
252
+ ```javascript
253
+ gsap.utils.wrap(0, 360, 370); // 10
254
+ gsap.utils.wrap(0, 360, -10); // 350
255
+
256
+ let wrapFn = gsap.utils.wrap(0, 360);
257
+ wrapFn(370); // 10
258
+ ```
259
+
260
+ ### wrapYoyo(min, max, value?)
261
+
262
+ Wraps value in range with a yoyo (bounces at ends). Use for back-and-forth within a range. Omit **value** to get a function: `wrapYoyo(min, max)(value)`.
263
+
264
+ ```javascript
265
+ gsap.utils.wrapYoyo(0, 100, 150); // 50 (bounces back)
266
+
267
+ let wrapY = gsap.utils.wrapYoyo(0, 100);
268
+ wrapY(150); // 50
269
+ ```
270
+
271
+ ## Best practices
272
+
273
+ - ✅ Omit the value argument to get a reusable function when the same range/config is used many times (e.g. scroll handler, tween callback): `let mapFn = gsap.utils.mapRange(0, 1, 0, 360); mapFn(progress)`.
274
+ - ✅ Use **snap** for grid-aligned or step-based values; use **toArray** when GSAP or your code needs a real array from a selector or NodeList.
275
+ - ✅ Use **gsap.utils.selector(scope)** in components so selectors are scoped to a container or ref.
276
+
277
+ ## Do Not
278
+
279
+ - ❌ Assume **mapRange** / **normalize** handle units; they work on numbers. Use **getUnit** / **unitize** when units matter.
280
+ - ❌ Override or rely on undocumented behavior; stick to the documented API.
281
+
282
+ ### Learn More
283
+
284
+ https://gsap.com/docs/v3/HelperFunctions
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: gsap-vanilla
3
+ description: "Build or review animation on plain HTML/CSS/JavaScript sites: GSAP page intros/outros, component show/hide, scroll effects, cross-document View Transitions, bfcache, and fetch/swap navigation with Swup, Barba, or Taxi. Use for first-paint flashes or interrupted navigation, even when GSAP is unnamed. Also covers hidden-content recovery and first-load performance. Not for component frameworks or isolated GSAP API questions."
4
+ license: MIT
5
+ metadata:
6
+ short-description: GSAP page and component lifecycles on plain HTML sites
7
+ ---
8
+
9
+ # GSAP Vanilla
10
+
11
+ **mount → initial state → intro → settled → outro → end state → unmount**
12
+
13
+ On full document loads, the browser owns mount and unmount; animation owns the five phases between them. On same-document swaps, the router owns node replacement and persistent resources need explicit cleanup.
14
+
15
+ Keep the requested look and existing project conventions. Add GSAP/plugins only as needed; do not replace the chosen animation library unless asked.
16
+
17
+ ## Start with the project
18
+
19
+ Read repository instructions, existing animation, layouts, navigation, CSS, accessibility conventions, and checks. Then:
20
+
21
+ 1. Find out how pages are produced: hand-written HTML, a static generator with no client framework, a bundler such as Vite with no UI framework, or a transition library such as Swup, Barba, or Taxi. If a component framework renders the pages, say this skill does not cover it and use that framework's skill.
22
+ 2. Find out how GSAP loads: npm import, import map, or script tag. Keep it.
23
+ 3. Find out how scripts run: inline, `defer`, or `type="module"`. This decides when the DOM exists and whether the page can paint before the script runs.
24
+ 4. Check the target browsers. Cross-document View Transitions, `pageswap` and `pagereveal`, the Navigation API, and `blocking="render"` are not everywhere. Read installed transition-library docs/types and feature-detect browser APIs instead of trusting memory, and make sure the site works with all of them missing.
25
+
26
+ ## Pick a navigation model
27
+
28
+ Identify the navigation model before writing lifecycle code. Assign one owner per navigation; a same-document router may still need a full-load fallback.
29
+
30
+ - **Full document loads.** Every link replaces the document. The outro plays before the link is followed; the intro plays when the new page loads. This is the default and needs no router.
31
+ - **Full document loads with cross-document View Transitions.** The browser snapshots the old page and animates to the new one. GSAP fills in what a snapshot pair cannot do.
32
+ - **Same-document navigation.** Script fetches the next page and swaps content in place, so chrome, state, and timelines survive. Use a maintained library unless the project already owns a router or has a reason to. See [Same-document navigation](references/spa-navigation.md).
33
+
34
+ ## Choose the engine
35
+
36
+ Use cross-document View Transitions for snapshot morphs or page crossfades, with an instant-swap fallback. Use GSAP for live-DOM outros that gate navigation, interruptible sequences, split text, or scroll-linked motion. One engine per element; see [combining engines](references/cross-document-navigation.md#combining-with-gsap).
37
+
38
+ ## Read only what you need
39
+
40
+ - Invisible entrances, failed initialization, indexing, and first-load performance: [Initialization and recovery](references/initialization.md), plus the [framework integration](references/motion-system.md#initialization-and-recovery).
41
+ - First paint, script timing, fonts, navigation type, prerendering, the bfcache, hidden tabs, and leaving a page with an outro: [Page load and unload](references/page-load.md).
42
+ - `@view-transition`, `pageswap`, `pagereveal`, types, render blocking, and handing off between the browser and GSAP: [Cross-document navigation](references/cross-document-navigation.md).
43
+ - Fetch and swap routers, link interception, history, scroll, focus, script re-execution, and when to use a library: [Same-document navigation](references/spa-navigation.md).
44
+ - The five phases, GSAP setup, contexts, show and hide, layout stability, scroll, text, plugins: [Lifecycle implementation](references/motion-system.md).
45
+ - Before calling work done: [Verification](references/verification.md).
46
+
47
+ Install the [official GSAP skills](https://github.com/greensock/gsap-skills) alongside this repository. Load `gsap-core` for API details and the relevant plugin skill only as needed.
48
+
49
+ ## Rules
50
+
51
+ - Preserve invisible intros on successful setup; recover the current incoming owner on failure. Follow the initialization contract before adding hiding rules.
52
+ - GSAP runs after the DOM it targets exists. Scope selectors with `gsap.context` to the page or component root. Clean up every tween, trigger, split, and listener when its owner goes away.
53
+ - Reserve final geometry with normal CSS and a stable wrapper; overlap outgoing/incoming content without doubling layout space.
54
+ - Set initial values before first paint, then reveal. Successful initialization never flashes settled content before the intro, and never a blank page without JavaScript.
55
+ - Animate to one settled state and clear temporary styles there.
56
+ - Keep outgoing content in the DOM and visible through outro and end state. Follow the link, remove the node, or swap only from the end callback.
57
+ - Back and forward never run an outro. A fresh document reached by history gets an intro-only path, and a bfcache restore gets no intro at all.
58
+ - A prerendered page sets initial state at once and waits for activation before it animates.
59
+ - Keep native link behavior, focus, scroll restoration, and no-JavaScript readability.
60
+ - Never add `unload` or `beforeunload` listeners for animation. They disable the bfcache. Use `pagehide`.
61
+ - Reduced motion reaches the same settled state and still fires every completion callback.
62
+ - Define interruption and rapid-click behavior; completion must release navigation waits exactly once.
63
+ - Verify in a real browser when practical, including reload, back, forward, and a click from a background tab.
@@ -0,0 +1,7 @@
1
+ interface:
2
+ display_name: "GSAP Vanilla"
3
+ short_description: "GSAP page and component lifecycles on plain HTML sites"
4
+ default_prompt: "Use $gsap-vanilla to add GSAP page transitions and component animation to this plain HTML, CSS, and JavaScript site."
5
+
6
+ policy:
7
+ allow_implicit_invocation: true
@@ -0,0 +1,54 @@
1
+ # Cross-document navigation
2
+
3
+ Read this when a full-document site uses View Transitions, or when GSAP must hand off to the browser at a page boundary.
4
+
5
+ ## Opting in
6
+
7
+ Both documents need `@view-transition { navigation: auto }` in their CSS. Then every same-origin navigation the user starts from page content, plus back and forward, snapshots the old page, loads the new one, and crossfades the root. Address-bar navigations, cross-origin pages, and pages without the rule get an instant swap.
8
+
9
+ Feature-detect with `CSS.supports("view-transition-name: a")` for the CSS side and `"onpagereveal" in window` for the events. Browsers without support skip the transition and lose nothing else. Every GSAP path must work with the transition absent.
10
+
11
+ ## Events
12
+
13
+ - `pageswap` fires on the old document just before it is replaced. `event.viewTransition` is the outbound transition or null. `event.activation` carries the navigation type and the from and to history entries. This is where the old page assigns `view-transition-name` to the element the user clicked, chosen from the destination URL, and where `skipTransition()` cancels a transition that should not run.
14
+ - `pagereveal` fires on the new document at its first render opportunity, before first paint. `event.viewTransition` is the inbound transition or null. Read `navigation.activation.from` for where the user came from. Assign names to the matching elements here, then await `viewTransition.ready` and clear them.
15
+ - `pagereveal` also fires on a bfcache restore and on prerender activation. Check `navigation.activation` before assuming a fresh load.
16
+
17
+ Clear every `view-transition-name` you set once snapshots are taken. A name left on an element travels into the bfcache, and on return two elements can share it, which skips the transition.
18
+
19
+ ## Types and direction
20
+
21
+ `@view-transition { types: slide-forward }` sets types statically. Set them in `pageswap` and `pagereveal` through `event.viewTransition.types` when the direction depends on the route pair, and key CSS on `html:active-view-transition-type(slide-forward)`. The GSAP controller can read the same decision to build a matching intro.
22
+
23
+ ## Stabilizing the new page
24
+
25
+ The inbound transition starts at first render opportunity, which can be before the page has its fonts, its critical script, or its full above-the-fold markup. Then the new snapshot is wrong and the transition lands on a page that is still changing.
26
+
27
+ - Stylesheets in `head` already block render.
28
+ - Put `blocking="render"` on the module script that sets initial state, so the snapshot shows the initial state, not the settled one.
29
+ - Add `<link rel="expect" href="#main" blocking="render">` so the browser parses the main element before revealing.
30
+ - Keep those blocks small. Everything under them delays first paint on every load.
31
+
32
+ ## Combining with GSAP
33
+
34
+ GSAP runs on the live page before the browser leaves it and on the new page after it arrives. The view transition runs between them, on snapshots. Keep their jobs separate.
35
+
36
+ - One engine per element per transition. A named morph and a GSAP tween on the same node fight, and the GSAP end state becomes the old snapshot.
37
+ - If a GSAP outro fades or moves content, that is what the browser snapshots. Either skip the transition for that navigation with `skipTransition()` in `pageswap`, or leave the shared element lit at end state so the morph has something to start from.
38
+ - On the new page, start the GSAP intro after `viewTransition.finished` for elements the transition touched. Elements outside the transition can start at `pagereveal`. Both paths must also run when `viewTransition` is null.
39
+ - Name only elements that morph. Name chrome to hold it still; the root crossfade covers the rest.
40
+ - Reduced motion covers both: zero view transition durations in CSS under `prefers-reduced-motion` and take the GSAP reduced path.
41
+ - Add `::view-transition { pointer-events: none }` so a running transition does not swallow clicks.
42
+
43
+ ## Back and forward
44
+
45
+ A history navigation gets a view transition too, reversed if the CSS keys on type. GSAP never gets an outro on the way back. On the new page, a `traverse` activation selects the intro-only path.
46
+
47
+ ## Cases to design for
48
+
49
+ - A link clicked while the outro is running.
50
+ - A slow destination. The old page's end state sits on screen until the new document arrives; keep it presentable.
51
+ - Back to a page in the bfcache: `pageshow` reports `persisted`, `pagereveal` reports a `traverse` activation, and timelines are still alive.
52
+ - Back to a page not in the bfcache: full reload, `back_forward` navigation type, intro-only.
53
+ - A prerendered destination, where `pagereveal` fires on activation.
54
+ - Browsers without view transition support, which must still get the GSAP outro and intro.
@@ -0,0 +1,87 @@
1
+ <!-- Generated from shared/initialization.md; run scripts/sync_initialization.py. -->
2
+
3
+ # Invisible intros, recovery, and first load
4
+
5
+ Read this whenever an entrance hides meaningful content. The matching framework skill owns initialization, navigation, recovery, and interruption. Motion recipes own teardown and restoration of their changes. Styles select the look and pacing only.
6
+
7
+ ## Keep the successful intro
8
+
9
+ Build readable, settled HTML and CSS first. Preserve invisible-to-visible entrances with a small early script and scoped pre-paint CSS:
10
+
11
+ ```css
12
+ html[data-motion-boot="pending"] [data-motion-owner][data-phase="initial"][data-intro],
13
+ html[data-motion-boot="pending"] [data-motion-owner][data-phase="initial"] [data-intro] {
14
+ visibility: hidden;
15
+ }
16
+ ```
17
+
18
+ Names are examples. Use separate attributes for boot status, motion preference, and lifecycle phase. Rename a `data-motion="js"` boot example if the app already uses `data-motion="full|reduced"` for preference. Opt in only targets intended to enter visibly, including hidden ancestors, shell, cards, and footer. Give independent owners their own readiness records. One ready page must not cancel a footer's protection.
19
+
20
+ - Run the marker before content can paint, using the framework's document integration and CSP nonce/hash support. Arm its recovery timer before setting the marker. It must work without GSAP or the application bundle. If the marker is blocked, content stays readable.
21
+ - Never emit the active marker in server HTML. JavaScript disabled means no marker and readable HTML. A `noscript` override alone does not cover JavaScript enabled with a failed bundle.
22
+ - Skip hiding under reduced motion. Preserve completion, focus, navigation, and removal semantics through the instant path.
23
+ - Before releasing CSS hiding, prepare all required start values and attach the entrance's completion/interruption handlers. Start the timeline in the same turn. Do not flip the phase early to claim readiness: that can flash settled content.
24
+ - Do not hide server content through unconditional CSS, inline styles, client-only wrappers, or a hidden ancestor that the fallback cannot restore.
25
+
26
+ ## Bound initialization, not choreography
27
+
28
+ Give each incoming owner an initialization deadline, measured from its first pre-paint hiding. Choose and document a short budget; roughly one second is a starting point, not a universal performance target.
29
+
30
+ The early timer covers bundle delivery and hydration. Register recovery before any setup work, including plugin registration, selectors, initial writes, and splits. Keep the deadline armed through required font/media preparation and timeline construction. Registration or a `live` flag is not readiness. Handing off timers must leave no unprotected interval and must not restart the budget.
31
+
32
+ A successful handoff occurs only when the prepared intro can run with its handlers attached. Cancel the initialization timer then. A deliberate hold or stagger inside that timeline belongs to animation duration, even if it exceeds the initialization budget. Handle runtime exceptions and interruptions separately; if a running timeline needs a watchdog, derive it from its planned duration, delay, repeats, and pause policy. Never cut a healthy intro short with the boot timer. Recheck deadlines on return from a suspended tab; timers cannot recover a blocked main thread.
33
+
34
+ Wait only for dependencies the effect needs. Bound font readiness, image load/decode, SplitText auto-split preparation, and frame waits. Prefer reserved image dimensions and a fallback font or unsplit heading over waiting for every font, image, or window `load`. A timed-out promise may still resolve: racing it does not cancel its continuation.
35
+
36
+ ## Recover one owner
37
+
38
+ Track an owner, a visit/generation token, and a terminal recovery decision outside disposable effect setup. Use boot status such as `pending`, `running`, `recovered`, `disposed` separately from the framework's lifecycle phases. A recovery is permanent for that visit; a genuine later navigation may create a new visit. Repeated setup is not a new visit.
39
+
40
+ On timeout, rejection, setup exception, or failed entrance:
41
+
42
+ 1. Verify the captured owner and generation are still current and intended to be visible. Invalidate the generation first. Mark it recovered so reentrant handlers cannot restart it.
43
+ 2. Abort preparation where supported. Cancel queued frames, timers, event listeners, observers, and subscriptions that can recreate motion. Kill owned timelines, delayed calls, triggers, and ambient effects before restoring content. Do not kill unrelated GSAP work globally.
44
+ 3. Run registered effect teardown in reverse order. Each builder must roll back partial changes if it throws before returning a handle. Continue other cleanup if one disposer throws; always reach the final readable fallback.
45
+ 4. Revert split wrappers, masks, cloned accessibility text, and plugin DOM changes. Preserve framework-owned nodes and nested links/controls; never overwrite their subtree with a stale HTML snapshot. SplitText revert can reconstruct descendants: split a dedicated text leaf or visual copy when controls, state, or framework bindings must survive. Restore only owned inline properties to their original values, then apply the owner's readable settled state. A marker removal or `autoAlpha: 1` alone cannot undo clipping, transforms, child opacity, or a hidden parent. Avoid `clearProps: "all"` on application-owned styles.
46
+ 5. Release only this owner's hiding, cover, busy/inert state, and navigation lock. Apply essential settled completion once, including appropriate focus and transition `done`. Do not replay decorative effects or call an outgoing navigation callback as entrance completion.
47
+
48
+ The bootstrap must retain a terminal recovery record even before the bundle arrives. With no application changes yet, it can release its CSS gate alone. Once setup starts, it must invoke the registered rollback as well. Releasing a shared document gate must not expose other still-preparing owners; use per-owner gates or transfer every owner's initial values before releasing it.
49
+
50
+ Every async continuation and controller entry point checks its captured token **before any DOM write or effect creation**, including `set`, `fromTo`, `onSplit`, resize/font callbacks, and `contextSafe` callbacks. Context ownership does not cancel promises. Catch failures inside those callbacks too. Late controller registration reads the terminal boot record and settles without hiding or splitting. Do not infer recovery only from an absent marker that navigation can later recreate.
51
+
52
+ On navigation, deactivate the outgoing owner's entrance recovery before the outro. Cancel stale work without revealing that owner. Recovery must exclude outgoing/end-state pages, cached hidden routes, closed dialogs, inactive tabs/panels, and decorative clones. Restore the outgoing page only if navigation itself is cancelled and that page becomes current again. Persistent shell elements keep separate visits. Dispose obsolete recovery timers on removal; never let them unlock or focus a newer route.
53
+
54
+ ## Rendering and indexing
55
+
56
+ Keep primary text, headings, and meaningful links in server-rendered or prerendered HTML where supported. Preserve real `a[href]` links and independently accessible route URLs. Client-only rendering cannot reveal HTML that was never sent; provide a useful static shell/fallback and report that limit. Do not turn an entire page client-only to facilitate animation.
57
+
58
+ Google renders JavaScript and uses rendered HTML for indexing. An automatic intro does not inherently prevent indexing; that is an inference from Google's rendering model, not a guarantee for a particular page. Check rendered output when indexing is in question. Static hiding rules alone do not establish production indexing failures. See [JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics).
59
+
60
+ Do not require a click, scroll, or hover to load primary indexable content. Keep primary hero media eagerly discoverable; reserve lazy loading for appropriate offscreen content. See [Google's lazy-loading guidance](https://developers.google.com/search/docs/crawling-indexing/javascript/lazy-loading).
61
+
62
+ ## First-load performance
63
+
64
+ Initially hidden primary content can delay Largest Contentful Paint. LCP concerns eligible visible content painted in the viewport, not the end of a GSAP timeline. A heading or hero may become a candidate before the remaining stagger, footer, or ambient animation completes. Browser eligibility and candidate changes matter; do not calculate LCP from total timeline duration. See [Largest Contentful Paint](https://web.dev/articles/lcp).
65
+
66
+ Reveal primary headings and hero imagery without waiting for unrelated plugins, particle setup, below-fold media, or every font weight. Keep ambitious motion where requested; reduce unnecessary preparation and deliberate blank holds before weakening the effect. Never serve crawler-specific content or use near-zero opacity tricks to manipulate metrics.
67
+
68
+ Measure cold first loads separately from client-side transitions. Record the LCP element and timestamp, resource timing, layout shift, and a filmstrip under representative network/CPU conditions. Compare normal and reduced motion; use field data when available. Smooth route transitions do not prove fast document loads. Better performance does not promise ranking or indexing outcomes. See [Google's page-experience guidance](https://developers.google.com/search/docs/appearance/page-experience).
69
+
70
+ ## Failure verification
71
+
72
+ Use the framework's production build and actual rendering mode. For every supported failure, assert meaningful text, usable links, restored owned styles/DOM, and absence of stale cover, lock, focus, or completion effects. Check page and shell owners separately.
73
+
74
+ | Case | Required observation |
75
+ |---|---|
76
+ | JavaScript disabled | Server/static content and native links work. Client-only routes get their documented static fallback, not invented SSR content. |
77
+ | Bundle blocked after marker | Prove the early marker executed; let its deadline expire. Content becomes readable without application cleanup. |
78
+ | Setup throws before initial writes | Readable settled state; no unresolved completion or navigation wait. |
79
+ | Setup throws after styles or split DOM | Timelines stop, original text/links return, temporary styles and masks disappear. |
80
+ | Fonts/media stall or reject | Bounded fallback. Resolve them afterward and confirm no new hiding or splitting. |
81
+ | Initialization arrives after recovery | Observe multiple frames after release and beyond the old timeline/deadline. No hidden frame or duplicate completion. |
82
+ | Successful delayed startup within budget | Hidden first frame, then full intended intro. No flash of settled content; intentional duration may exceed the boot budget. |
83
+ | Reduced motion | Readable first paint, functional links, normal completion semantics without travel. |
84
+ | Navigation during preparation or intro | One correct destination; stale recovery cannot reveal outgoing/hidden content or unlock/focus the new visit. |
85
+ | Repeated setup, history, and preserved nodes | No duplicate wrappers, listeners, callbacks, or replay after recovery within the same visit. |
86
+
87
+ Block only application resources in the bundle test, not the early script or stylesheet. Distinguish an intentionally delayed intro from stalled preparation. Record what ran, rendering limitations, and remaining browser/production gaps; these checks do not prove Google indexed the page or establish field LCP.