wizz-method 1.3.2 → 1.4.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 (225) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/README.md +1 -1
  3. package/evals/routing/dataset.json +290 -0
  4. package/evals/routing/run-routing-eval.mjs +89 -0
  5. package/package.json +11 -3
  6. package/skills-registry.yaml +72 -25
  7. package/src/modules/wizz/agents/wizz-ads/SKILL.md +1 -1
  8. package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -1
  9. package/src/modules/wizz/agents/wizz-designer/SKILL.md +6 -8
  10. package/src/modules/wizz/agents/wizz-growth/SKILL.md +1 -1
  11. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +6 -5
  12. package/src/modules/wizz/agents/wizz-memoria/SKILL.md +1 -1
  13. package/src/modules/wizz/agents/wizz-qa/SKILL.md +1 -1
  14. package/src/modules/wizz/agents/wizz-seo/SKILL.md +1 -1
  15. package/src/modules/wizz/agents/wizz-social/SKILL.md +1 -1
  16. package/src/skills-lib/ai-product-design/SKILL.md +85 -0
  17. package/src/skills-lib/ai-product-design/references/LICENSE +21 -0
  18. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/bias-detection-design/SKILL.md +37 -0
  19. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/consent-and-agency/SKILL.md +37 -0
  20. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/escalation-design/SKILL.md +40 -0
  21. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/guardrail-design/SKILL.md +36 -0
  22. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/harm-anticipation/SKILL.md +108 -0
  23. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/transparency-patterns/SKILL.md +36 -0
  24. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/trust-calibration/SKILL.md +102 -0
  25. package/src/skills-lib/ai-product-design/references/ai-alignment-reasoning/value-specification/SKILL.md +39 -0
  26. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/agent-role-design/SKILL.md +37 -0
  27. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/failure-recovery/SKILL.md +37 -0
  28. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/handoff-protocols/SKILL.md +45 -0
  29. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/human-in-the-loop/SKILL.md +39 -0
  30. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/observability-design/SKILL.md +48 -0
  31. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/state-management/SKILL.md +95 -0
  32. package/src/skills-lib/ai-product-design/references/design-agent-orchestration/task-decomposition/SKILL.md +36 -0
  33. package/src/skills-lib/ai-product-design/references/evaluation/comparative-evaluation/SKILL.md +39 -0
  34. package/src/skills-lib/ai-product-design/references/evaluation/failure-taxonomy/SKILL.md +47 -0
  35. package/src/skills-lib/ai-product-design/references/evaluation/heuristic-evaluation-ai/SKILL.md +46 -0
  36. package/src/skills-lib/ai-product-design/references/evaluation/longitudinal-measurement/SKILL.md +38 -0
  37. package/src/skills-lib/ai-product-design/references/evaluation/output-quality-rubrics/SKILL.md +41 -0
  38. package/src/skills-lib/ai-product-design/references/evaluation/task-success-metrics/SKILL.md +35 -0
  39. package/src/skills-lib/ai-product-design/references/evaluation/user-satisfaction-signals/SKILL.md +50 -0
  40. package/src/skills-lib/ai-product-design/references/model-interaction-design/context-window-design/SKILL.md +28 -0
  41. package/src/skills-lib/ai-product-design/references/model-interaction-design/conversation-patterns/SKILL.md +37 -0
  42. package/src/skills-lib/ai-product-design/references/model-interaction-design/feedback-loops/SKILL.md +35 -0
  43. package/src/skills-lib/ai-product-design/references/model-interaction-design/frustration-detection/SKILL.md +91 -0
  44. package/src/skills-lib/ai-product-design/references/model-interaction-design/generative-ui/SKILL.md +34 -0
  45. package/src/skills-lib/ai-product-design/references/model-interaction-design/mixed-initiative-flow/SKILL.md +39 -0
  46. package/src/skills-lib/ai-product-design/references/model-interaction-design/multimodal-orchestration/SKILL.md +94 -0
  47. package/src/skills-lib/ai-product-design/references/model-interaction-design/progressive-disclosure/SKILL.md +33 -0
  48. package/src/skills-lib/ai-product-design/references/prompt-architecture/chain-of-thought-design/SKILL.md +45 -0
  49. package/src/skills-lib/ai-product-design/references/prompt-architecture/constraint-specification/SKILL.md +50 -0
  50. package/src/skills-lib/ai-product-design/references/prompt-architecture/context-engineering/SKILL.md +45 -0
  51. package/src/skills-lib/ai-product-design/references/prompt-architecture/few-shot-patterns/SKILL.md +47 -0
  52. package/src/skills-lib/ai-product-design/references/prompt-architecture/prompt-versioning/SKILL.md +42 -0
  53. package/src/skills-lib/ai-product-design/references/prompt-architecture/system-prompt-structure/SKILL.md +50 -0
  54. package/src/skills-lib/ai-product-design/references/prompt-architecture/template-design/SKILL.md +42 -0
  55. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/behavioral-consistency/SKILL.md +36 -0
  56. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/cultural-adaptation/SKILL.md +38 -0
  57. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/domain-voice/SKILL.md +51 -0
  58. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/emotional-design/SKILL.md +51 -0
  59. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/error-personality/SKILL.md +45 -0
  60. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/persona-architecture/SKILL.md +38 -0
  61. package/src/skills-lib/ai-product-design/references/system-behavior-shaping/tone-calibration/SKILL.md +39 -0
  62. package/src/skills-lib/algorithmic-art/LICENSE.txt +202 -0
  63. package/src/skills-lib/algorithmic-art/SKILL.md +405 -0
  64. package/src/skills-lib/algorithmic-art/templates/generator_template.js +223 -0
  65. package/src/skills-lib/algorithmic-art/templates/viewer.html +599 -0
  66. package/src/skills-lib/animate/README.md +41 -0
  67. package/src/skills-lib/animate/SKILL.md +179 -0
  68. package/src/skills-lib/animate/examples/animate-height.tsx +75 -0
  69. package/src/skills-lib/animate/examples/app-store-card.tsx +164 -0
  70. package/src/skills-lib/animate/examples/card-hover.tsx +79 -0
  71. package/src/skills-lib/animate/examples/feedback-popover.tsx +119 -0
  72. package/src/skills-lib/animate/examples/multi-step-flow.tsx +128 -0
  73. package/src/skills-lib/animate/examples/shared-layout.tsx +64 -0
  74. package/src/skills-lib/animate/examples/text-reveal.tsx +70 -0
  75. package/src/skills-lib/animate/examples/toast-stacking.tsx +95 -0
  76. package/src/skills-lib/animate/references/css-animations.md +232 -0
  77. package/src/skills-lib/animate/references/easing-and-timing.md +105 -0
  78. package/src/skills-lib/animate/references/framer-motion.md +356 -0
  79. package/src/skills-lib/animate/references/performance-accessibility.md +185 -0
  80. package/src/skills-lib/auth-and-secrets/SKILL.md +38 -10
  81. package/src/skills-lib/canvas-design/LICENSE.txt +202 -0
  82. package/src/skills-lib/canvas-design/SKILL.md +130 -0
  83. package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  84. package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  85. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  86. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  87. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  88. package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  89. package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  90. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  91. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  92. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  93. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  94. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  95. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  96. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  97. package/src/skills-lib/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  98. package/src/skills-lib/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  99. package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  100. package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  101. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  102. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  103. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  104. package/src/skills-lib/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  105. package/src/skills-lib/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  106. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  107. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  108. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  109. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  110. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  111. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  112. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  113. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  114. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  115. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  116. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  117. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  118. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  119. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  120. package/src/skills-lib/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  121. package/src/skills-lib/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  122. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  123. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  124. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  125. package/src/skills-lib/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  126. package/src/skills-lib/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  127. package/src/skills-lib/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  128. package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  129. package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  130. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  131. package/src/skills-lib/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  132. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  133. package/src/skills-lib/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  134. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  135. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  136. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  137. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  138. package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  139. package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  140. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  141. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  142. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  143. package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  144. package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  145. package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  146. package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  147. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  148. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  149. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  150. package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  151. package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  152. package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  153. package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  154. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  155. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  156. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  157. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  158. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  159. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  160. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  161. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  162. package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  163. package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  164. package/src/skills-lib/design-motion-principles/SKILL.md +122 -0
  165. package/src/skills-lib/design-motion-principles/references/accessibility.md +52 -0
  166. package/src/skills-lib/design-motion-principles/references/anti-checklist.md +274 -0
  167. package/src/skills-lib/design-motion-principles/references/audit-checklist.md +137 -0
  168. package/src/skills-lib/design-motion-principles/references/creation-gotchas.md +36 -0
  169. package/src/skills-lib/design-motion-principles/references/demo-shell.html +275 -0
  170. package/src/skills-lib/design-motion-principles/references/emil-kowalski.md +121 -0
  171. package/src/skills-lib/design-motion-principles/references/jakub-krehel.md +80 -0
  172. package/src/skills-lib/design-motion-principles/references/jhey-tompkins.md +122 -0
  173. package/src/skills-lib/design-motion-principles/references/motion-cookbook.md +529 -0
  174. package/src/skills-lib/design-motion-principles/references/output-format.md +346 -0
  175. package/src/skills-lib/design-motion-principles/references/performance.md +82 -0
  176. package/src/skills-lib/design-motion-principles/references/report-template.html +1006 -0
  177. package/src/skills-lib/design-motion-principles/workflows/audit.md +203 -0
  178. package/src/skills-lib/design-motion-principles/workflows/create.md +87 -0
  179. package/src/skills-lib/desktop-security/SKILL.md +35 -4
  180. package/src/skills-lib/premium-landing-ui-researcher/SKILL.md +52 -2083
  181. package/src/skills-lib/premium-landing-ui-researcher/references/audit-protocol.md +124 -0
  182. package/src/skills-lib/premium-landing-ui-researcher/references/component-sources.md +336 -0
  183. package/src/skills-lib/premium-landing-ui-researcher/references/core-goal.md +62 -0
  184. package/src/skills-lib/premium-landing-ui-researcher/references/dashboard-and-portfolio-modes.md +92 -0
  185. package/src/skills-lib/premium-landing-ui-researcher/references/handoffs.md +55 -0
  186. package/src/skills-lib/premium-landing-ui-researcher/references/landing-page-strategy.md +227 -0
  187. package/src/skills-lib/premium-landing-ui-researcher/references/mandatory-process.md +36 -0
  188. package/src/skills-lib/premium-landing-ui-researcher/references/output-format-and-quality.md +129 -0
  189. package/src/skills-lib/premium-landing-ui-researcher/references/prompt-templates.md +206 -0
  190. package/src/skills-lib/premium-landing-ui-researcher/references/site-levels.md +515 -0
  191. package/src/skills-lib/premium-landing-ui-researcher/references/source-first-protocol.md +144 -0
  192. package/src/skills-lib/premium-landing-ui-researcher/references/source-links.md +39 -0
  193. package/src/skills-lib/premium-landing-ui-researcher/references/stack-and-visual-direction.md +118 -0
  194. package/src/skills-lib/taste-skill/SKILL.md +33 -1177
  195. package/src/skills-lib/taste-skill/references/anti-slop-tells.md +110 -0
  196. package/src/skills-lib/taste-skill/references/architecture-conventions.md +39 -0
  197. package/src/skills-lib/taste-skill/references/block-library.md +61 -0
  198. package/src/skills-lib/taste-skill/references/brief-and-dials.md +89 -0
  199. package/src/skills-lib/taste-skill/references/dark-mode.md +23 -0
  200. package/src/skills-lib/taste-skill/references/design-directives.md +191 -0
  201. package/src/skills-lib/taste-skill/references/design-systems.md +267 -0
  202. package/src/skills-lib/taste-skill/references/motion-patterns.md +167 -0
  203. package/src/skills-lib/taste-skill/references/pattern-vocabulary.md +78 -0
  204. package/src/skills-lib/taste-skill/references/performance-a11y.md +33 -0
  205. package/src/skills-lib/taste-skill/references/preflight-checklist.md +73 -0
  206. package/src/skills-lib/taste-skill/references/redesign-protocol.md +52 -0
  207. package/src/skills-lib/web-security/SKILL.md +74 -6
  208. package/src/skills-lib/wizz-router/SKILL.md +21 -243
  209. package/src/skills-lib/wizz-router/references/auditoria-360.md +21 -0
  210. package/src/skills-lib/wizz-router/references/routing-table-flat.md +95 -0
  211. package/src/squads/advisory-board/agents/ray-dalio.md +0 -20
  212. package/tools/hooks/README.md +17 -0
  213. package/tools/hooks/security-defensive-context.js +70 -0
  214. package/tools/hooks/session-rules.js +38 -0
  215. package/tools/hooks/wizz-router-enforce.js +188 -0
  216. package/tools/installer/modules/skills-lib.js +70 -1
  217. package/tools/sync-global.mjs +84 -0
  218. package/.claude/settings.local.json +0 -8
  219. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
  220. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
  221. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
  222. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
  223. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/0964cef300f753b5cee0cc49777ca97035c85d45c212099405d9ee4da36e523f.json +0 -1
  224. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/21a40f6810c3a6f17acc3580f106171daf78c7b41bbd066bc80448a821ea0adf.json +0 -1
  225. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/69ea15a020ac81b8459e37ef63654398a50c1035fc01c43d8069df217389f7f3.json +0 -1
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: design-motion-principles
3
+ description: "Motion and interaction design expert based on Emil Kowalski, Jakub Krehel, and Jhey Tompkins' techniques. Two modes — build interactive components with purposeful motion, or audit existing animations to catch AI-slop motion patterns (audit emits a branded HTML report with looping demos). Use when creating, adding, animating, or reviewing UI motion: transitions, hover states, micro-interactions, enter/exit animations, or any motion design work in React, Framer Motion, CSS, or HTML. Provides per-designer perspectives with context-aware weighting."
4
+ ---
5
+
6
+ # Design Motion Principles
7
+
8
+ You are a senior design engineer specializing in motion and interaction design. This skill operates in two modes:
9
+
10
+ - **Create** — Build interactive components with purposeful motion → `workflows/create.md`
11
+ - **Audit** — Review existing motion design and report findings → `workflows/audit.md`
12
+
13
+ **Scope**: Web and app UI motion — HTML/CSS, React, Framer Motion / Motion, iOS/Android transitions, design system animations. The frequency framework still applies to other motion work (game engines, Lottie, Rive, video), but designer-specific techniques may not translate.
14
+
15
+ ---
16
+
17
+ ## STEP 0: Detect Mode (DO THIS FIRST)
18
+
19
+ | Signal in the request | Mode |
20
+ |-----------------------|------|
21
+ | "build", "create", "add animation", "animate this", "implement", "make it feel…" | **Create** |
22
+ | "audit", "review", "evaluate", "check", "feedback on", "is this motion good" | **Audit** |
23
+ | Ambiguous (e.g. "look at this modal animation") | Ask the user |
24
+
25
+ For ambiguous requests, if `AskUserQuestion` is available, present:
26
+ - **Create** — Build or improve the component's motion
27
+ - **Audit** — Review existing motion and report findings
28
+
29
+ Otherwise ask in plain text: "Should I build/improve the motion (Create mode), or review existing motion and report findings (Audit mode)?"
30
+
31
+ **Once the mode is known, read the matching workflow file and follow it exactly.**
32
+
33
+ ---
34
+
35
+ ## The Three Designers
36
+
37
+ - **Emil Kowalski** (Linear, ex-Vercel) — Restraint, speed, purposeful motion. Best for productivity tools.
38
+ - **Jakub Krehel** (jakub.kr) — Subtle production polish, professional refinement. Best for shipped consumer apps.
39
+ - **Jhey Tompkins** (@jh3yy) — Playful experimentation, CSS innovation. Best for creative sites, kids apps, portfolios.
40
+
41
+ > These three lenses distill each designer's *publicly published* work — courses, articles, talks, and open-source projects. The weighting framework and the "lens" framing are this skill's interpretation of their principles, named in tribute; they are not authored or endorsed by the designers themselves.
42
+
43
+ Each designer answers a different question:
44
+ - **Emil** — *"Should this animate at all?"*
45
+ - **Jakub** — *"Is this subtle and polished enough for production?"*
46
+ - **Jhey** — *"What could this become?"*
47
+
48
+ **Critical insight**: These perspectives are context-dependent, not universal rules. A kids' app should prioritize Jakub + Jhey (polish + delight), not Emil's productivity-focused speed rules. Both modes weight the designers by project context before doing anything.
49
+
50
+ ---
51
+
52
+ ## Context-to-Perspective Mapping
53
+
54
+ | Project Type | Primary | Secondary | Selective |
55
+ |--------------|---------|-----------|-----------|
56
+ | Productivity tool (Linear, Raycast) | Emil | Jakub | Jhey (onboarding only) |
57
+ | Kids app / Educational | Jakub | Jhey | Emil (high-freq game interactions) |
58
+ | Creative portfolio | Jakub | Jhey | Emil (high-freq interactions) |
59
+ | Marketing/landing page | Jakub | Jhey | Emil (forms, nav) |
60
+ | SaaS dashboard | Emil | Jakub | Jhey (empty states) |
61
+ | Mobile app | Jakub | Emil | Jhey (delighters) |
62
+ | E-commerce | Jakub | Emil | Jhey (product showcase) |
63
+
64
+ ---
65
+
66
+ ## Core Principles (Both Modes)
67
+
68
+ ### The Frequency Gate
69
+
70
+ Before adding or approving any animation, ask how often the user triggers it:
71
+
72
+ | Frequency | Recommendation |
73
+ |-----------|----------------|
74
+ | Rare (monthly) | Delightful, expressive motion welcome |
75
+ | Occasional (daily) | Subtle, fast motion |
76
+ | Frequent (100s/day) | No animation or instant transition |
77
+ | Keyboard-initiated | Never animate |
78
+
79
+ ### Duration Guidelines (Context-Dependent)
80
+
81
+ | Context | Guideline |
82
+ |---------|-----------|
83
+ | Productivity UI (Emil) | Under 300ms — 180ms ideal |
84
+ | Production polish (Jakub) | 200-500ms for smoothness |
85
+ | Creative/kids/playful (Jhey) | Whatever serves the effect |
86
+
87
+ **Do not universally flag or cap durations.** Check the context weighting first.
88
+
89
+ ### The Golden Rule
90
+
91
+ > "The best animation is that which goes unnoticed."
92
+
93
+ If users comment "nice animation!" on every interaction, it's probably too prominent for production. (Exception: kids apps and playful contexts where delight IS the goal.)
94
+
95
+ ### Accessibility is NOT Optional
96
+
97
+ Every animation — generated in Create mode or reviewed in Audit mode — must handle `prefers-reduced-motion`. No exceptions. See `references/accessibility.md`.
98
+
99
+ ---
100
+
101
+ ## Reference Index
102
+
103
+ | File | Contents | Load When |
104
+ |------|----------|-----------|
105
+ | [Motion Cookbook](references/motion-cookbook.md) | All motion recipes — enter/exit, easing, springs, clip-path, @property, FLIP, scroll-driven | Create mode (always); Audit mode for implementation recommendations |
106
+ | [Creation Gotchas](references/creation-gotchas.md) | Claude's failure modes when writing motion | Create mode (always) |
107
+ | [Audit Checklist](references/audit-checklist.md) | Systematic audit checklist | Audit mode (always) |
108
+ | [Anti-Checklist](references/anti-checklist.md) | Quality gate — AI-slop motion categories + anti-patterns to flag | Audit mode (always) |
109
+ | [Emil Kowalski](references/emil-kowalski.md) | Restraint philosophy, frequency rule, decision frameworks | Either mode, if Emil is weighted |
110
+ | [Jakub Krehel](references/jakub-krehel.md) | Production polish philosophy and decision frameworks | Either mode, if Jakub is weighted |
111
+ | [Jhey Tompkins](references/jhey-tompkins.md) | Playful experimentation philosophy and frameworks | Either mode, if Jhey is weighted |
112
+ | [Accessibility](references/accessibility.md) | prefers-reduced-motion, vestibular safety | Both modes (mandatory) |
113
+ | [Performance](references/performance.md) | GPU optimization, will-change, layout thrash | Either mode, for complex animations |
114
+ | [Output Format](references/output-format.md) | Audit report template — HTML mode (default) + terminal mode (flag) | Audit mode only |
115
+ | [Demo Shell](references/demo-shell.html) | Visual container template for per-finding demo cards in the HTML report | Audit mode, HTML output |
116
+
117
+ ## Workflow Index
118
+
119
+ | Workflow | Purpose |
120
+ |----------|---------|
121
+ | [Create](workflows/create.md) | Build interactive components with purposeful motion |
122
+ | [Audit](workflows/audit.md) | Review existing motion design, produce a per-designer report |
@@ -0,0 +1,52 @@
1
+ # Accessibility
2
+
3
+ **This is not optional.** Motion can cause discomfort, nausea, or distraction for many users.
4
+
5
+ ---
6
+
7
+ ## Respect User Preferences
8
+
9
+ ```css
10
+ @media (prefers-reduced-motion: reduce) {
11
+ *,
12
+ *::before,
13
+ *::after {
14
+ animation-duration: 0.01ms !important;
15
+ animation-iteration-count: 1 !important;
16
+ transition-duration: 0.01ms !important;
17
+ scroll-behavior: auto !important;
18
+ }
19
+ }
20
+ ```
21
+
22
+ **What this does**: Effectively disables animations while preserving final states (so layouts don't break).
23
+
24
+ ---
25
+
26
+ ## Functional vs. Decorative Motion
27
+
28
+ | Type | Purpose | Reduced Motion Behavior |
29
+ |------|---------|------------------------|
30
+ | **Functional** | Indicates state changes, spatial relationships, orientation | May need alternative (instant state change, no transition) |
31
+ | **Decorative** | Pure delight, visual interest | Can be fully removed |
32
+
33
+ **The test**: Does removing this animation break the user's ability to understand what happened? If yes, it's functional.
34
+
35
+ ---
36
+
37
+ ## Motion Sensitivity Considerations
38
+
39
+ - Avoid large-scale motion (full-screen transitions, parallax)
40
+ - Avoid continuous or looping animations that can't be paused
41
+ - Provide pause controls for any ambient animation
42
+ - Be especially careful with vestibular triggers: zooming, spinning, parallax
43
+
44
+ ---
45
+
46
+ ## Implementation Checklist
47
+
48
+ - [ ] Tested with `prefers-reduced-motion: reduce` enabled
49
+ - [ ] No vestibular triggers (excessive zoom, spin, parallax)
50
+ - [ ] Looping animations can be paused
51
+ - [ ] Functional animations have non-motion alternatives
52
+ - [ ] Users can complete all tasks with animations disabled
@@ -0,0 +1,274 @@
1
+ # Anti-Checklist
2
+
3
+ This file is the audit's quality gate. The categories below describe motion patterns to **flag** in audited code — AI-slop tells at the top (where most 2026 motion problems live), followed by perspective-specific anti-patterns from Emil, Jakub, and Jhey, then general motion mistakes and code-shaped red flags. When audited code matches a pattern here, the audit surfaces a finding and the agent generates a per-finding motion suggestion by reading the relevant philosophy reference (`emil-kowalski.md`, `jakub-krehel.md`, `jhey-tompkins.md`).
4
+
5
+ The file frames patterns as "things to flag," not "mistakes to avoid" — language that makes the audit's adversarial posture explicit.
6
+
7
+ ---
8
+
9
+ ## AI-Slop Motion Patterns
10
+
11
+ These are the recognizable motion fingerprints of AI-generated UIs in 2026. They're not always wrong in isolation — what makes them slop is *frequency* and *uniformity*. Finding one instance is normal polish; finding the same pattern slapped across the codebase is the tell. Each category includes a flagging heuristic below the definition so the audit isn't tripped by single intentional uses.
12
+
13
+ ---
14
+
15
+ ### Pulsing indicators
16
+
17
+ Glowing dots, breathing CTAs, throbbing rings, "live"/"online"/"recording"/"AI active" pulse animations, dark-mode pulse glows — any looped scale/opacity pulse used to draw attention to a status element.
18
+
19
+ **Flag when you see:**
20
+ - `@keyframes` rules with names containing `pulse`, `glow`, `breathe`, `throb`
21
+ - `animation: ... infinite` on small UI elements (dots, badges, status indicators)
22
+ - `box-shadow` or `opacity` loops on status icons
23
+ - Tailwind `animate-pulse` on indicator dots or active-state elements
24
+
25
+ **Heuristic:** Flag *any* instance. Pulsing indicators are almost always slop — the only exception is a single brand element with explicit design rationale stated in code comments or design docs.
26
+
27
+ **Fix lens:** Emil — purposeful restraint. See `references/emil-kowalski.md`.
28
+
29
+ ---
30
+
31
+ ### Blur-everywhere entrances
32
+
33
+ `filter: blur(Npx)` applied to every entering element on mount — sections, cards, images, paragraphs. Jakub's enter recipe (`opacity + translateY + blur`) is excellent in moderation; AI-slop versions apply it uniformly across the page.
34
+
35
+ **Flag when you see:**
36
+ - `initial={{ filter: 'blur(Npx)' }}` or `from { filter: blur(Npx); }` on multiple distinct components in the same view
37
+ - Identical blur values (e.g., `blur(4px)`) repeated across components without context distinction
38
+ - Blur on text-bearing entrances (headings, paragraphs) where it impairs first-paint readability
39
+
40
+ **Heuristic:** Flag when ≥3 distinct components in the same view share the same `filter: blur()` enter pattern. Single uses with intent (a hero element, a modal) are fine.
41
+
42
+ **Fix lens:** Jakub — production polish, but selective. See `references/jakub-krehel.md`.
43
+
44
+ ---
45
+
46
+ ### Hover-scale-on-everything
47
+
48
+ `transform: scale(1.0X)` on `:hover` applied to every card, button, and image without intent. The micro-bounce-on-hover feels polished in moderation; AI-slop versions slap it on indiscriminately.
49
+
50
+ **Flag when you see:**
51
+ - `transition` rules with `transform: scale(1.0X)` on `:hover` across multiple card/button/image components
52
+ - Identical scale values (e.g., `scale(1.05)`) repeated across selectors with no discriminating context
53
+ - Tailwind `hover:scale-105` applied to grids of repeated items
54
+
55
+ **Heuristic:** Flag when ≥3 distinct components share the same `transform: scale(1.0X)` on `:hover` with no other discriminating selector context. Single intentional uses (e.g., a primary CTA) are fine.
56
+
57
+ **Fix lens:** Emil for utility-shaped elements (none); Jakub for product-shaped elements (selective). See `references/emil-kowalski.md` and `references/jakub-krehel.md`.
58
+
59
+ ---
60
+
61
+ ### Stagger-spam-on-every-list
62
+
63
+ `stagger`, `staggerChildren`, or hand-rolled `animation-delay: calc(var(--i) * 50ms)` patterns applied to every list, grid, or repeated-element block. Jhey-style stagger on a deliberate moment is delightful; AI-slop spreads it across every list as default polish.
64
+
65
+ **Flag when you see:**
66
+ - `staggerChildren` in framer-motion `variants` across multiple list components
67
+ - `animation-delay: calc(...)` with item-index multipliers across multiple components
68
+ - Sequential delays applied to lists that don't read as a moment (search results, settings options, table rows)
69
+
70
+ **Heuristic:** Flag when ≥2 lists in the same view use stagger entrance. One intentional moment is fine; two or more is the tell.
71
+
72
+ **Fix lens:** Emil for utility lists (no stagger); Jhey for delight moments (selective). See `references/emil-kowalski.md` and `references/jhey-tompkins.md`.
73
+
74
+ ---
75
+
76
+ ### Bouncy-springs-on-utility-actions
77
+
78
+ `type: 'spring'` with bounce on dropdown opens, toggle switches, menu reveals, modal entrances — utility actions where bounce reads as "playful" but the action itself is productivity-oriented.
79
+
80
+ **Flag when you see:**
81
+ - `transition={{ type: 'spring', bounce: > 0 }}` on dropdowns, popovers, menus, toggles, modal opens, settings panels
82
+ - CSS `cubic-bezier(...)` with overshoot values on utility elements
83
+ - Identical spring configs across utility components
84
+
85
+ **Heuristic:** Flag *any* spring with bounce > 0 on a utility action (dropdown, menu, toggle, modal, settings panel). Bounce belongs on playful elements — celebration moments, kids apps, intentional delight — not productivity UI.
86
+
87
+ **Fix lens:** Emil — speed and purpose. See `references/emil-kowalski.md`.
88
+
89
+ ---
90
+
91
+ ### Uniform-fade-in-on-every-element
92
+
93
+ Identical `opacity + translateY` (with or without blur) enter animations applied to every section, card, paragraph, and heading. The "polished entrance" treatment from Jakub used uniformly across the page, regardless of element type or context.
94
+
95
+ **Flag when you see:**
96
+ - Multiple components sharing identical `initial`/`animate` opacity+translateY values
97
+ - `whileInView` with identical viewport options applied to every block on a page
98
+ - CSS keyframes with generic names (`fadeInUp`, `enter`, `reveal`) attached to many selectors
99
+
100
+ **Heuristic:** Flag when ≥4 distinct components share identical enter animations (same opacity, same translateY, same duration, same easing). Three is acceptable polish baseline; four is uniformity slop.
101
+
102
+ **Fix lens:** Jakub — selective polish with hierarchy. See `references/jakub-krehel.md`.
103
+
104
+ ---
105
+
106
+ ### Motion-on-mount-for-static-content
107
+
108
+ Entrance animations on headings, body paragraphs, navigation links, and other content that should appear instantly. The "fade in everything" pattern that delays reading and makes the page feel sluggish.
109
+
110
+ **Flag when you see:**
111
+ - `initial`/`animate` on `<h1>`, `<h2>`, `<p>`, `<nav>` elements
112
+ - `whileInView` on body copy (paragraphs, articles, prose)
113
+ - `animation` rules on text-only components without functional reason
114
+
115
+ **Heuristic:** Flag any motion on a text-only or navigation element when the motion's only purpose is the entrance itself. Carousels, sliders, and hero animations are fine when the motion serves a function (orientation, narrative pacing, attention direction).
116
+
117
+ **Fix lens:** Emil — animations should serve a purpose, not announce themselves. See `references/emil-kowalski.md`.
118
+
119
+ ---
120
+
121
+ ## From Emil's Perspective (Purposeful Restraint)
122
+
123
+ - **Animating high-frequency interactions** — If users trigger this 100s of times daily, remove the animation
124
+ - **Animating keyboard-initiated actions** — Keyboard shortcuts should NEVER animate
125
+ - **Animations over 300ms** — UI animations should be under 300ms; 180ms feels more responsive than 400ms
126
+ - **Animating from scale(0)** — Start from `scale(0.9)` or higher for natural motion
127
+ - **Same tooltip behavior everywhere** — First tooltip: delayed + animated. Subsequent: instant
128
+ - **Using default CSS easing** — Built-in `ease` and `ease-in-out` lack strength; use custom curves
129
+ - **Ignoring transform-origin** — Dropdowns should expand from their trigger, not center
130
+ - **Expecting delight in productivity tools** — Users of high-frequency tools prioritize speed over delight
131
+ - **Using keyframes for interruptible animations** — Keyframes can't retarget mid-flight; use CSS transitions with state
132
+ - **CSS variables for frequent updates** — Causes expensive style recalculation; update styles directly on element
133
+ - **Distance thresholds for dismissal** — Use velocity (distance/time) instead; fast short gestures should work
134
+ - **Abrupt boundary stops** — Use damping; things slow down before stopping in real life
135
+
136
+ ---
137
+
138
+ ## From Jakub's Perspective (Production Polish)
139
+
140
+ - **Making enter and exit animations equally prominent** — Exits should be subtler
141
+ - **Using solid borders when shadows would adapt better** — Especially on varied backgrounds
142
+ - **Forgetting optical alignment** — Buttons with icons, play buttons, asymmetric shapes
143
+ - **Over-animating** — If users notice the animation itself, it's too much
144
+ - **Using the same animation everywhere** — Context should drive timing and easing choices
145
+ - **Ignoring hover state transitions** — Even small transitions (150-200ms) feel more polished than instant changes
146
+
147
+ ---
148
+
149
+ ## From Jhey's Perspective (Creative Learning)
150
+
151
+ - **Filtering ideas based on "usefulness" too early** — Make first, judge later
152
+ - **Not documenting random creative sparks** — Keep notebooks everywhere, including by your bed
153
+ - **Thinking CSS art is useless** — It teaches real skills (clip-path, layering, complex shapes)
154
+ - **Focusing on "How do I learn X?" instead of "How do I make Y?"** — Let ideas drive learning
155
+ - **Following tutorials without experimenting** — Tutorials teach techniques; experimentation teaches problem-solving
156
+ - **Giving up when something doesn't work** — The struggle is where learning happens
157
+
158
+ ---
159
+
160
+ ## General Motion Design Mistakes
161
+
162
+ - **Animating layout-triggering properties** (width, height, top, left) — Use transform instead
163
+ - **No animation at all** — Instant state changes feel broken to modern users
164
+ - **Same duration for all animations** — Smaller elements should animate faster
165
+ - **Forgetting `prefers-reduced-motion`** — Not optional
166
+
167
+ *Note: Duration is designer-dependent. Emil prefers under 300ms for productivity tools. Jakub and Jhey may use longer durations when polish or effect warrants it.*
168
+
169
+ ---
170
+
171
+ ## Red Flags in Code Review
172
+
173
+ Watch for these patterns:
174
+
175
+ ```jsx
176
+ // BAD: Animating layout properties
177
+ animate={{ width: 200, height: 100 }}
178
+
179
+ // GOOD: Use transform
180
+ animate={{ scale: 1.2 }}
181
+ ```
182
+
183
+ ```jsx
184
+ // BAD: Same animation for enter and exit
185
+ initial={{ opacity: 0, y: 20 }}
186
+ exit={{ opacity: 0, y: 20 }}
187
+
188
+ // GOOD: Subtler exit
189
+ initial={{ opacity: 0, y: 20 }}
190
+ exit={{ opacity: 0, y: -8 }}
191
+ ```
192
+
193
+ ```css
194
+ /* BAD: No reduced motion support */
195
+ .animated { animation: bounce 1s infinite; }
196
+
197
+ /* GOOD: Respects user preference */
198
+ @media (prefers-reduced-motion: no-preference) {
199
+ .animated { animation: bounce 1s infinite; }
200
+ }
201
+ ```
202
+
203
+ ```css
204
+ /* BAD: will-change everywhere */
205
+ * { will-change: transform; }
206
+
207
+ /* GOOD: Targeted will-change */
208
+ .animated-button { will-change: transform, opacity; }
209
+ ```
210
+
211
+ ```jsx
212
+ // BAD: Animating from scale(0) (Emil)
213
+ initial={{ scale: 0 }}
214
+ animate={{ scale: 1 }}
215
+
216
+ // GOOD: Start from higher scale
217
+ initial={{ scale: 0.9, opacity: 0 }}
218
+ animate={{ scale: 1, opacity: 1 }}
219
+ ```
220
+
221
+ ```jsx
222
+ // Per Emil: Too slow for productivity UI
223
+ transition={{ duration: 0.4 }}
224
+
225
+ // Per Emil: Fast, snappy (but Jakub/Jhey might use 0.4 for polish)
226
+ transition={{ duration: 0.18 }}
227
+ ```
228
+
229
+ ```css
230
+ /* BAD: Dropdown expanding from center (Emil) */
231
+ .dropdown {
232
+ transform-origin: center;
233
+ }
234
+
235
+ /* GOOD: Origin-aware animation */
236
+ .dropdown {
237
+ transform-origin: top center;
238
+ }
239
+ ```
240
+
241
+ ```css
242
+ /* BAD: Keyframes can't be interrupted (Emil) */
243
+ @keyframes slideIn {
244
+ from { transform: translateY(100%); }
245
+ to { transform: translateY(0); }
246
+ }
247
+ .toast { animation: slideIn 400ms ease; }
248
+
249
+ /* GOOD: Transitions can retarget mid-flight */
250
+ .toast {
251
+ transform: translateY(100%);
252
+ transition: transform 400ms ease;
253
+ }
254
+ .toast.mounted {
255
+ transform: translateY(0);
256
+ }
257
+ ```
258
+
259
+ ```javascript
260
+ // BAD: CSS variables cause cascade recalc (Emil)
261
+ element.style.setProperty('--drag-y', `${y}px`);
262
+
263
+ // GOOD: Direct style update
264
+ element.style.transform = `translateY(${y}px)`;
265
+ ```
266
+
267
+ ```javascript
268
+ // BAD: Distance threshold for dismissal (Emil)
269
+ if (dragDistance > 100) dismiss();
270
+
271
+ // GOOD: Velocity-based (fast short gestures work)
272
+ const velocity = dragDistance / elapsedTime;
273
+ if (velocity > 0.11) dismiss();
274
+ ```
@@ -0,0 +1,137 @@
1
+ # Audit Checklist
2
+
3
+ Use this checklist when reviewing motion design in any UI code.
4
+
5
+ ---
6
+
7
+ ## Philosophy Check (Do First)
8
+
9
+ - [ ] **How often will users trigger this?** (Frequent = less/no animation — Emil's rule)
10
+ - [ ] **Is this keyboard-initiated?** (If yes, don't animate — Emil's rule)
11
+ - [ ] **Does this animation serve a purpose?** (orientation, feedback, continuity—not just decoration)
12
+ - [ ] **Will users notice this animation consciously?** (If yes for production UI, probably too much)
13
+ - [ ] **Have I tested this with `prefers-reduced-motion: reduce`?**
14
+ - [ ] **Does this feel natural after the 10th interaction?** (Test repeatedly, not just once)
15
+ - [ ] **Is the easing appropriate for my brand/context?**
16
+ - [ ] **Is the duration appropriate for context?** (Emil prefers under 300ms; Jakub/Jhey may use longer for polish or effect)
17
+
18
+ ---
19
+
20
+ ## Motion Gap Analysis (Check BEFORE Reviewing Existing Animations)
21
+
22
+ Conditional UI changes that **lack** animation are often worse than poorly-tuned animations:
23
+
24
+ - [ ] **Searched for conditional renders** — `{condition && <Component />}` patterns
25
+ - [ ] **Searched for ternary swaps** — `{condition ? <A /> : <B />}` patterns
26
+ - [ ] **Searched for dynamic inline styles** — `style={{ prop: dynamicValue }}` without transition
27
+ - [ ] **Each conditional render** either has AnimatePresence wrapper OR doesn't need animation (static content)
28
+ - [ ] **Mode switches** (tabs, toggles) animate their content changes, not just the switch itself
29
+ - [ ] **Settings panels** with conditional controls have enter/exit animations
30
+ - [ ] **Expandable sections** animate height, not just show/hide
31
+ - [ ] **Loading → Content** transitions are smooth, not instant swaps
32
+
33
+ ---
34
+
35
+ ## Enter/Exit States
36
+
37
+ - [ ] Enter animations combine opacity + translateY + blur
38
+ - [ ] Exit animations are subtler than enters (smaller translateY, same blur/opacity)
39
+ - [ ] `animation-fill-mode: backwards` used for delayed sequences
40
+ - [ ] Elements don't flash before their delayed animation starts
41
+
42
+ ---
43
+
44
+ ## Easing & Timing
45
+
46
+ - [ ] Appropriate easing for context (not default `ease` everywhere)
47
+ - [ ] Custom Bézier curves used instead of built-in easing (Emil's rule)
48
+ - [ ] Spring animations for interactive elements
49
+ - [ ] Durations appropriate for context (Emil: under 300ms; others: whatever serves the design)
50
+ - [ ] Consistent timing values across related animations
51
+ - [ ] Transform-origin matches interaction source (dropdowns from trigger)
52
+
53
+ ---
54
+
55
+ ## Visual Polish
56
+
57
+ - [ ] Shadows instead of borders where background varies
58
+ - [ ] Gradients using oklch color space for smooth blending
59
+ - [ ] Blur used intentionally as a state signal
60
+
61
+ ---
62
+
63
+ ## Optical Alignment
64
+
65
+ - [ ] Buttons with icons have adjusted padding
66
+ - [ ] Asymmetric icons (play, arrows) are visually centered
67
+ - [ ] Text and icons feel balanced
68
+
69
+ ---
70
+
71
+ ## State Transitions
72
+
73
+ - [ ] Icon swaps are animated (opacity, scale, blur)
74
+ - [ ] Loading states have smooth transitions
75
+ - [ ] Hover states have transitions (150-200ms minimum)
76
+ - [ ] Button press has scale feedback (`scale(0.97)` on `:active`)
77
+ - [ ] Elements don't animate from `scale(0)` (use `0.9+` instead)
78
+
79
+ ---
80
+
81
+ ## Interaction Patterns (Emil's Rules)
82
+
83
+ - [ ] Tooltips: first delayed + animated, subsequent instant
84
+ - [ ] Animations are interruptible (can change mid-animation)
85
+ - [ ] Clip-path used for reveals instead of width/height
86
+ - [ ] High-frequency actions have minimal or no animation
87
+ - [ ] Keyboard shortcuts don't animate
88
+
89
+ ---
90
+
91
+ ## Performance
92
+
93
+ - [ ] `will-change` used sparingly and specifically
94
+ - [ ] Animations use transform/opacity (not layout properties)
95
+ - [ ] Tested on low-end devices
96
+ - [ ] No continuous animations without purpose
97
+ - [ ] CSS transitions (not keyframes) for interruptible animations (Emil)
98
+ - [ ] Direct style updates for drag operations (not CSS variables) (Emil)
99
+ - [ ] Velocity-based thresholds (not distance) for swipe dismiss (Emil)
100
+
101
+ ---
102
+
103
+ ## Accessibility
104
+
105
+ - [ ] Respects `prefers-reduced-motion`
106
+ - [ ] No vestibular triggers (excessive zoom, spin, parallax)
107
+ - [ ] Looping animations can be paused
108
+ - [ ] Functional animations have non-motion alternatives
109
+
110
+ ---
111
+
112
+ ## Quick Reference: Severity Levels
113
+
114
+ **Critical (Must Fix)**:
115
+ - Missing `prefers-reduced-motion` support
116
+ - Animating layout properties (width, height, top, left)
117
+ - No exit animations (elements just disappear)
118
+ - **Motion gaps in primary UI** — Conditional controls/panels that snap in/out without animation
119
+ - Animating keyboard-initiated actions (Emil)
120
+ - Animations on high-frequency actions (100s/day)
121
+
122
+ **Important (Should Fix)**:
123
+ - Exit animations as prominent as enter animations
124
+ - Missing blur in enter animations
125
+ - Animating from `scale(0)` instead of `0.9+` (Emil)
126
+ - Default CSS easing instead of custom curves (Emil)
127
+ - Wrong transform-origin on dropdowns/popovers (Emil)
128
+
129
+ **Context-Dependent (Check Against Designer Perspective)**:
130
+ - Durations over 300ms (Emil flags this; Jakub/Jhey may approve for polish)
131
+
132
+ **Nice to Have**:
133
+ - Optical alignment refinements
134
+ - oklch color space for gradients
135
+ - Spring animations instead of ease
136
+ - Button scale feedback on press
137
+ - Tooltip delay pattern (first delayed, subsequent instant)
@@ -0,0 +1,36 @@
1
+ # Creation Gotchas
2
+
3
+ Where Claude typically fails when **writing** motion (as opposed to auditing it). Self-check generated code against every item before presenting.
4
+
5
+ ---
6
+
7
+ ## Motion that shouldn't exist
8
+
9
+ - **Don't animate just because you can.** Decorative motion added "for polish" is the default failure mode. Every animation needs a purpose — feedback, orientation, or continuity. If you can't name the purpose, remove it.
10
+ - **Don't animate high-frequency interactions.** If the user triggers it dozens of times a session, motion becomes friction. Instant is correct.
11
+ - **Don't animate keyboard-initiated actions.** Keyboard shortcuts should never animate — the user wants speed, not a show.
12
+ - **Don't add looping attention-seeking motion.** No pulsing dots, glowing status rings, breathing CTAs, throbbing indicators, or any looped scale/opacity pulse to draw the eye. They age badly, harm accessibility, and rarely serve the user. Use a static treatment unless the user explicitly asks for a pulse.
13
+
14
+ ## Wrong defaults
15
+
16
+ - **Don't start from `scale(0)`.** It produces unnatural motion. Start from `scale(0.9)` or higher.
17
+ - **Don't use bare `ease` or `ease-in-out`.** Built-in curves lack strength. Use a custom `cubic-bezier` or a spring.
18
+ - **Don't give enter and exit equal weight.** Exits should be subtler — smaller translate, the user's attention is already moving on.
19
+ - **Don't use one duration for everything.** Smaller elements animate faster. Match duration to element size and context.
20
+ - **Don't ignore `transform-origin`.** Dropdowns, popovers, and tooltips should expand from their trigger, not from center.
21
+
22
+ ## Performance failures
23
+
24
+ - **Don't animate layout properties.** `width`, `height`, `top`, `left`, `margin`, `padding` trigger reflow. Use `transform` and `opacity`.
25
+ - **Don't sprinkle `will-change` everywhere.** It's a targeted hint for elements about to animate, not a global fix.
26
+ - **Don't use keyframes for interruptible animations.** Keyframes can't retarget mid-flight. Use state-driven CSS transitions for anything the user can re-trigger rapidly.
27
+
28
+ ## Accessibility omissions
29
+
30
+ - **Don't ship motion without `prefers-reduced-motion`.** Every animation you generate needs a reduced-motion path. This is not optional and not a follow-up — include it in the same code.
31
+ - **Don't use vestibular triggers casually.** Large-scale zoom, spin, and parallax can cause genuine discomfort. Avoid unless the design explicitly calls for it, and gate them behind reduced-motion.
32
+
33
+ ## Context blindness
34
+
35
+ - **Don't apply one designer's rules universally.** Emil's sub-300ms restraint is wrong for a kids' app; Jhey's elastic playfulness is wrong for a banking dashboard. Confirm the weighting before generating.
36
+ - **Don't ignore the existing codebase.** If the project already animates with 500ms springs, a new 150ms ease-out component will feel foreign. Match established conventions unless they are the thing being fixed.