lsd-pi 1.2.0 → 1.2.2

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 (520) hide show
  1. package/dist/cli.js +7 -1
  2. package/dist/onboarding.js +3 -3
  3. package/dist/resources/agents/scout.md +6 -0
  4. package/dist/resources/extensions/slash-commands/plan.js +7 -1
  5. package/dist/resources/extensions/subagent/index.js +10 -2
  6. package/dist/resources/extensions/usage/index.js +87 -36
  7. package/package.json +1 -1
  8. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  9. package/packages/pi-agent-core/dist/agent.js +8 -2
  10. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  11. package/packages/pi-agent-core/src/agent.ts +8 -2
  12. package/packages/pi-ai/dist/models.generated.d.ts +222 -1
  13. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  14. package/packages/pi-ai/dist/models.generated.js +227 -6
  15. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  16. package/packages/pi-ai/dist/models.test.js +28 -0
  17. package/packages/pi-ai/dist/models.test.js.map +1 -1
  18. package/packages/pi-ai/scripts/generate-models.ts +10 -100
  19. package/packages/pi-ai/src/models.generated.ts +227 -6
  20. package/packages/pi-ai/src/models.test.ts +30 -0
  21. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
  22. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  23. package/packages/pi-coding-agent/dist/core/agent-session.js +28 -0
  24. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  25. package/packages/pi-coding-agent/dist/core/settings-manager.js +1 -1
  26. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  27. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  28. package/packages/pi-coding-agent/dist/core/system-prompt.js +10 -0
  29. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  30. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  31. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  32. package/packages/pi-coding-agent/dist/index.js +1 -1
  33. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  34. package/packages/pi-coding-agent/dist/tests/path-display.test.js +13 -0
  35. package/packages/pi-coding-agent/dist/tests/path-display.test.js.map +1 -1
  36. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts +2 -0
  37. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts.map +1 -0
  38. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js +15 -0
  39. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js.map +1 -0
  40. package/packages/pi-coding-agent/package.json +1 -1
  41. package/packages/pi-coding-agent/src/core/agent-session.ts +35 -0
  42. package/packages/pi-coding-agent/src/core/settings-manager.ts +1 -1
  43. package/packages/pi-coding-agent/src/core/system-prompt.ts +26 -0
  44. package/packages/pi-coding-agent/src/index.ts +1 -0
  45. package/packages/pi-coding-agent/src/tests/path-display.test.ts +14 -0
  46. package/pkg/package.json +1 -1
  47. package/src/resources/agents/scout.md +6 -0
  48. package/src/resources/extensions/slash-commands/plan.ts +11 -1
  49. package/src/resources/extensions/subagent/index.ts +10 -2
  50. package/src/resources/extensions/usage/index.ts +92 -38
  51. package/dist/resources/agents/javascript-pro.md +0 -280
  52. package/dist/resources/agents/researcher.md +0 -29
  53. package/dist/resources/agents/teams-builder.md +0 -74
  54. package/dist/resources/agents/teams-reviewer.md +0 -113
  55. package/dist/resources/agents/typescript-pro.md +0 -255
  56. package/dist/resources/skills/accessibility/SKILL.md +0 -522
  57. package/dist/resources/skills/accessibility/references/WCAG.md +0 -162
  58. package/dist/resources/skills/core-web-vitals/SKILL.md +0 -441
  59. package/dist/resources/skills/core-web-vitals/references/LCP.md +0 -208
  60. package/dist/resources/skills/frontend-design/SKILL.md +0 -45
  61. package/dist/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
  62. package/dist/resources/skills/make-interfaces-feel-better/animations.md +0 -379
  63. package/dist/resources/skills/make-interfaces-feel-better/performance.md +0 -88
  64. package/dist/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
  65. package/dist/resources/skills/make-interfaces-feel-better/typography.md +0 -123
  66. package/dist/resources/skills/react-best-practices/README.md +0 -123
  67. package/dist/resources/skills/react-best-practices/SKILL.md +0 -136
  68. package/dist/resources/skills/react-best-practices/metadata.json +0 -15
  69. package/dist/resources/skills/react-best-practices/rules/_sections.md +0 -46
  70. package/dist/resources/skills/react-best-practices/rules/_template.md +0 -28
  71. package/dist/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  72. package/dist/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
  73. package/dist/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
  74. package/dist/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
  75. package/dist/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
  76. package/dist/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
  77. package/dist/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
  78. package/dist/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  79. package/dist/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  80. package/dist/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  81. package/dist/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  82. package/dist/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  83. package/dist/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
  84. package/dist/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  85. package/dist/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
  86. package/dist/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
  87. package/dist/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  88. package/dist/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
  89. package/dist/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  90. package/dist/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  91. package/dist/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  92. package/dist/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  93. package/dist/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
  94. package/dist/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  95. package/dist/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
  96. package/dist/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  97. package/dist/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  98. package/dist/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  99. package/dist/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  100. package/dist/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
  101. package/dist/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  102. package/dist/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  103. package/dist/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  104. package/dist/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  105. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  106. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  107. package/dist/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  108. package/dist/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  109. package/dist/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  110. package/dist/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  111. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  112. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  113. package/dist/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  114. package/dist/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  115. package/dist/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  116. package/dist/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
  117. package/dist/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  118. package/dist/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  119. package/dist/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  120. package/dist/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  121. package/dist/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  122. package/dist/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
  123. package/dist/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  124. package/dist/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
  125. package/dist/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
  126. package/dist/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
  127. package/dist/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
  128. package/dist/resources/skills/userinterface-wiki/SKILL.md +0 -253
  129. package/dist/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
  130. package/dist/resources/skills/userinterface-wiki/rules/_template.md +0 -24
  131. package/dist/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
  132. package/dist/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
  133. package/dist/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
  134. package/dist/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
  135. package/dist/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
  136. package/dist/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
  137. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
  138. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
  139. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
  140. package/dist/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
  141. package/dist/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
  142. package/dist/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
  143. package/dist/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
  144. package/dist/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
  145. package/dist/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
  146. package/dist/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
  147. package/dist/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
  148. package/dist/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
  149. package/dist/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
  150. package/dist/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
  151. package/dist/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
  152. package/dist/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
  153. package/dist/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
  154. package/dist/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
  155. package/dist/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
  156. package/dist/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
  157. package/dist/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
  158. package/dist/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
  159. package/dist/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
  160. package/dist/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
  161. package/dist/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
  162. package/dist/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
  163. package/dist/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
  164. package/dist/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
  165. package/dist/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
  166. package/dist/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
  167. package/dist/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
  168. package/dist/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
  169. package/dist/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
  170. package/dist/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
  171. package/dist/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
  172. package/dist/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
  173. package/dist/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
  174. package/dist/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
  175. package/dist/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
  176. package/dist/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
  177. package/dist/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
  178. package/dist/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
  179. package/dist/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
  180. package/dist/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
  181. package/dist/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
  182. package/dist/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
  183. package/dist/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
  184. package/dist/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
  185. package/dist/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
  186. package/dist/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
  187. package/dist/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
  188. package/dist/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
  189. package/dist/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
  190. package/dist/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
  191. package/dist/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
  192. package/dist/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
  193. package/dist/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
  194. package/dist/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
  195. package/dist/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
  196. package/dist/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
  197. package/dist/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
  198. package/dist/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
  199. package/dist/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
  200. package/dist/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
  201. package/dist/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
  202. package/dist/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
  203. package/dist/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
  204. package/dist/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
  205. package/dist/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
  206. package/dist/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
  207. package/dist/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
  208. package/dist/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
  209. package/dist/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
  210. package/dist/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
  211. package/dist/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
  212. package/dist/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
  213. package/dist/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
  214. package/dist/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
  215. package/dist/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
  216. package/dist/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
  217. package/dist/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
  218. package/dist/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
  219. package/dist/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
  220. package/dist/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
  221. package/dist/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
  222. package/dist/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
  223. package/dist/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
  224. package/dist/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
  225. package/dist/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
  226. package/dist/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
  227. package/dist/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
  228. package/dist/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
  229. package/dist/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
  230. package/dist/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
  231. package/dist/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
  232. package/dist/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
  233. package/dist/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
  234. package/dist/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
  235. package/dist/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
  236. package/dist/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
  237. package/dist/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
  238. package/dist/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
  239. package/dist/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
  240. package/dist/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
  241. package/dist/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
  242. package/dist/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
  243. package/dist/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
  244. package/dist/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
  245. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
  246. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
  247. package/dist/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
  248. package/dist/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
  249. package/dist/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
  250. package/dist/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
  251. package/dist/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
  252. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
  253. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
  254. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
  255. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
  256. package/dist/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
  257. package/dist/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
  258. package/dist/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
  259. package/dist/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
  260. package/dist/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
  261. package/dist/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
  262. package/dist/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
  263. package/dist/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
  264. package/dist/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
  265. package/dist/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
  266. package/dist/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
  267. package/dist/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
  268. package/dist/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
  269. package/dist/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
  270. package/dist/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
  271. package/dist/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
  272. package/dist/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
  273. package/dist/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
  274. package/dist/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
  275. package/dist/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
  276. package/dist/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
  277. package/dist/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
  278. package/dist/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
  279. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
  280. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
  281. package/dist/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
  282. package/dist/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
  283. package/dist/resources/skills/web-design-guidelines/SKILL.md +0 -39
  284. package/dist/resources/skills/web-quality-audit/SKILL.md +0 -168
  285. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
  286. package/src/resources/agents/javascript-pro.md +0 -280
  287. package/src/resources/agents/researcher.md +0 -29
  288. package/src/resources/agents/teams-builder.md +0 -74
  289. package/src/resources/agents/teams-reviewer.md +0 -113
  290. package/src/resources/agents/typescript-pro.md +0 -255
  291. package/src/resources/skills/accessibility/SKILL.md +0 -522
  292. package/src/resources/skills/accessibility/references/WCAG.md +0 -162
  293. package/src/resources/skills/core-web-vitals/SKILL.md +0 -441
  294. package/src/resources/skills/core-web-vitals/references/LCP.md +0 -208
  295. package/src/resources/skills/frontend-design/SKILL.md +0 -45
  296. package/src/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
  297. package/src/resources/skills/make-interfaces-feel-better/animations.md +0 -379
  298. package/src/resources/skills/make-interfaces-feel-better/performance.md +0 -88
  299. package/src/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
  300. package/src/resources/skills/make-interfaces-feel-better/typography.md +0 -123
  301. package/src/resources/skills/react-best-practices/README.md +0 -123
  302. package/src/resources/skills/react-best-practices/SKILL.md +0 -136
  303. package/src/resources/skills/react-best-practices/metadata.json +0 -15
  304. package/src/resources/skills/react-best-practices/rules/_sections.md +0 -46
  305. package/src/resources/skills/react-best-practices/rules/_template.md +0 -28
  306. package/src/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  307. package/src/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
  308. package/src/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
  309. package/src/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
  310. package/src/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
  311. package/src/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
  312. package/src/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
  313. package/src/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  314. package/src/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  315. package/src/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  316. package/src/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  317. package/src/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  318. package/src/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
  319. package/src/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  320. package/src/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
  321. package/src/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
  322. package/src/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  323. package/src/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
  324. package/src/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  325. package/src/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  326. package/src/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  327. package/src/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  328. package/src/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
  329. package/src/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  330. package/src/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
  331. package/src/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  332. package/src/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  333. package/src/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  334. package/src/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  335. package/src/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
  336. package/src/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  337. package/src/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  338. package/src/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  339. package/src/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  340. package/src/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  341. package/src/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  342. package/src/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  343. package/src/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  344. package/src/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  345. package/src/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  346. package/src/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  347. package/src/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  348. package/src/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  349. package/src/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  350. package/src/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  351. package/src/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
  352. package/src/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  353. package/src/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  354. package/src/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  355. package/src/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  356. package/src/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  357. package/src/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
  358. package/src/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  359. package/src/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
  360. package/src/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
  361. package/src/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
  362. package/src/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
  363. package/src/resources/skills/userinterface-wiki/SKILL.md +0 -253
  364. package/src/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
  365. package/src/resources/skills/userinterface-wiki/rules/_template.md +0 -24
  366. package/src/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
  367. package/src/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
  368. package/src/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
  369. package/src/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
  370. package/src/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
  371. package/src/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
  372. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
  373. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
  374. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
  375. package/src/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
  376. package/src/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
  377. package/src/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
  378. package/src/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
  379. package/src/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
  380. package/src/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
  381. package/src/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
  382. package/src/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
  383. package/src/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
  384. package/src/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
  385. package/src/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
  386. package/src/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
  387. package/src/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
  388. package/src/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
  389. package/src/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
  390. package/src/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
  391. package/src/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
  392. package/src/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
  393. package/src/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
  394. package/src/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
  395. package/src/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
  396. package/src/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
  397. package/src/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
  398. package/src/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
  399. package/src/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
  400. package/src/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
  401. package/src/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
  402. package/src/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
  403. package/src/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
  404. package/src/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
  405. package/src/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
  406. package/src/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
  407. package/src/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
  408. package/src/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
  409. package/src/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
  410. package/src/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
  411. package/src/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
  412. package/src/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
  413. package/src/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
  414. package/src/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
  415. package/src/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
  416. package/src/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
  417. package/src/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
  418. package/src/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
  419. package/src/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
  420. package/src/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
  421. package/src/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
  422. package/src/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
  423. package/src/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
  424. package/src/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
  425. package/src/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
  426. package/src/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
  427. package/src/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
  428. package/src/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
  429. package/src/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
  430. package/src/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
  431. package/src/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
  432. package/src/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
  433. package/src/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
  434. package/src/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
  435. package/src/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
  436. package/src/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
  437. package/src/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
  438. package/src/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
  439. package/src/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
  440. package/src/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
  441. package/src/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
  442. package/src/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
  443. package/src/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
  444. package/src/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
  445. package/src/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
  446. package/src/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
  447. package/src/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
  448. package/src/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
  449. package/src/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
  450. package/src/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
  451. package/src/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
  452. package/src/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
  453. package/src/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
  454. package/src/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
  455. package/src/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
  456. package/src/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
  457. package/src/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
  458. package/src/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
  459. package/src/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
  460. package/src/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
  461. package/src/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
  462. package/src/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
  463. package/src/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
  464. package/src/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
  465. package/src/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
  466. package/src/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
  467. package/src/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
  468. package/src/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
  469. package/src/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
  470. package/src/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
  471. package/src/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
  472. package/src/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
  473. package/src/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
  474. package/src/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
  475. package/src/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
  476. package/src/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
  477. package/src/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
  478. package/src/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
  479. package/src/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
  480. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
  481. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
  482. package/src/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
  483. package/src/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
  484. package/src/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
  485. package/src/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
  486. package/src/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
  487. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
  488. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
  489. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
  490. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
  491. package/src/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
  492. package/src/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
  493. package/src/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
  494. package/src/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
  495. package/src/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
  496. package/src/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
  497. package/src/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
  498. package/src/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
  499. package/src/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
  500. package/src/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
  501. package/src/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
  502. package/src/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
  503. package/src/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
  504. package/src/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
  505. package/src/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
  506. package/src/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
  507. package/src/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
  508. package/src/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
  509. package/src/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
  510. package/src/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
  511. package/src/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
  512. package/src/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
  513. package/src/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
  514. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
  515. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
  516. package/src/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
  517. package/src/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
  518. package/src/resources/skills/web-design-guidelines/SKILL.md +0 -39
  519. package/src/resources/skills/web-quality-audit/SKILL.md +0 -168
  520. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
@@ -1,96 +0,0 @@
1
- ---
2
- title: Authenticate Server Actions Like API Routes
3
- impact: CRITICAL
4
- impactDescription: prevents unauthorized access to server mutations
5
- tags: server, server-actions, authentication, security, authorization
6
- ---
7
-
8
- ## Authenticate Server Actions Like API Routes
9
-
10
- **Impact: CRITICAL (prevents unauthorized access to server mutations)**
11
-
12
- Server Actions (functions with `"use server"`) are exposed as public endpoints, just like API routes. Always verify authentication and authorization **inside** each Server Action—do not rely solely on middleware, layout guards, or page-level checks, as Server Actions can be invoked directly.
13
-
14
- Next.js documentation explicitly states: "Treat Server Actions with the same security considerations as public-facing API endpoints, and verify if the user is allowed to perform a mutation."
15
-
16
- **Incorrect (no authentication check):**
17
-
18
- ```typescript
19
- 'use server'
20
-
21
- export async function deleteUser(userId: string) {
22
- // Anyone can call this! No auth check
23
- await db.user.delete({ where: { id: userId } })
24
- return { success: true }
25
- }
26
- ```
27
-
28
- **Correct (authentication inside the action):**
29
-
30
- ```typescript
31
- 'use server'
32
-
33
- import { verifySession } from '@/lib/auth'
34
- import { unauthorized } from '@/lib/errors'
35
-
36
- export async function deleteUser(userId: string) {
37
- // Always check auth inside the action
38
- const session = await verifySession()
39
-
40
- if (!session) {
41
- throw unauthorized('Must be logged in')
42
- }
43
-
44
- // Check authorization too
45
- if (session.user.role !== 'admin' && session.user.id !== userId) {
46
- throw unauthorized('Cannot delete other users')
47
- }
48
-
49
- await db.user.delete({ where: { id: userId } })
50
- return { success: true }
51
- }
52
- ```
53
-
54
- **With input validation:**
55
-
56
- ```typescript
57
- 'use server'
58
-
59
- import { verifySession } from '@/lib/auth'
60
- import { z } from 'zod'
61
-
62
- const updateProfileSchema = z.object({
63
- userId: z.string().uuid(),
64
- name: z.string().min(1).max(100),
65
- email: z.string().email()
66
- })
67
-
68
- export async function updateProfile(data: unknown) {
69
- // Validate input first
70
- const validated = updateProfileSchema.parse(data)
71
-
72
- // Then authenticate
73
- const session = await verifySession()
74
- if (!session) {
75
- throw new Error('Unauthorized')
76
- }
77
-
78
- // Then authorize
79
- if (session.user.id !== validated.userId) {
80
- throw new Error('Can only update own profile')
81
- }
82
-
83
- // Finally perform the mutation
84
- await db.user.update({
85
- where: { id: validated.userId },
86
- data: {
87
- name: validated.name,
88
- email: validated.email
89
- }
90
- })
91
-
92
- return { success: true }
93
- }
94
- ```
95
-
96
- Reference: [https://nextjs.org/docs/app/guides/authentication](https://nextjs.org/docs/app/guides/authentication)
@@ -1,41 +0,0 @@
1
- ---
2
- title: Cross-Request LRU Caching
3
- impact: HIGH
4
- impactDescription: caches across requests
5
- tags: server, cache, lru, cross-request
6
- ---
7
-
8
- ## Cross-Request LRU Caching
9
-
10
- `React.cache()` only works within one request. For data shared across sequential requests (user clicks button A then button B), use an LRU cache.
11
-
12
- **Implementation:**
13
-
14
- ```typescript
15
- import { LRUCache } from 'lru-cache'
16
-
17
- const cache = new LRUCache<string, any>({
18
- max: 1000,
19
- ttl: 5 * 60 * 1000 // 5 minutes
20
- })
21
-
22
- export async function getUser(id: string) {
23
- const cached = cache.get(id)
24
- if (cached) return cached
25
-
26
- const user = await db.user.findUnique({ where: { id } })
27
- cache.set(id, user)
28
- return user
29
- }
30
-
31
- // Request 1: DB query, result cached
32
- // Request 2: cache hit, no DB query
33
- ```
34
-
35
- Use when sequential user actions hit multiple endpoints needing the same data within seconds.
36
-
37
- **With Vercel's [Fluid Compute](https://vercel.com/docs/fluid-compute):** LRU caching is especially effective because multiple concurrent requests can share the same function instance and cache. This means the cache persists across requests without needing external storage like Redis.
38
-
39
- **In traditional serverless:** Each invocation runs in isolation, so consider Redis for cross-process caching.
40
-
41
- Reference: [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache)
@@ -1,76 +0,0 @@
1
- ---
2
- title: Per-Request Deduplication with React.cache()
3
- impact: MEDIUM
4
- impactDescription: deduplicates within request
5
- tags: server, cache, react-cache, deduplication
6
- ---
7
-
8
- ## Per-Request Deduplication with React.cache()
9
-
10
- Use `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.
11
-
12
- **Usage:**
13
-
14
- ```typescript
15
- import { cache } from 'react'
16
-
17
- export const getCurrentUser = cache(async () => {
18
- const session = await auth()
19
- if (!session?.user?.id) return null
20
- return await db.user.findUnique({
21
- where: { id: session.user.id }
22
- })
23
- })
24
- ```
25
-
26
- Within a single request, multiple calls to `getCurrentUser()` execute the query only once.
27
-
28
- **Avoid inline objects as arguments:**
29
-
30
- `React.cache()` uses shallow equality (`Object.is`) to determine cache hits. Inline objects create new references each call, preventing cache hits.
31
-
32
- **Incorrect (always cache miss):**
33
-
34
- ```typescript
35
- const getUser = cache(async (params: { uid: number }) => {
36
- return await db.user.findUnique({ where: { id: params.uid } })
37
- })
38
-
39
- // Each call creates new object, never hits cache
40
- getUser({ uid: 1 })
41
- getUser({ uid: 1 }) // Cache miss, runs query again
42
- ```
43
-
44
- **Correct (cache hit):**
45
-
46
- ```typescript
47
- const getUser = cache(async (uid: number) => {
48
- return await db.user.findUnique({ where: { id: uid } })
49
- })
50
-
51
- // Primitive args use value equality
52
- getUser(1)
53
- getUser(1) // Cache hit, returns cached result
54
- ```
55
-
56
- If you must pass objects, pass the same reference:
57
-
58
- ```typescript
59
- const params = { uid: 1 }
60
- getUser(params) // Query runs
61
- getUser(params) // Cache hit (same reference)
62
- ```
63
-
64
- **Next.js-Specific Note:**
65
-
66
- In Next.js, the `fetch` API is automatically extended with request memoization. Requests with the same URL and options are automatically deduplicated within a single request, so you don't need `React.cache()` for `fetch` calls. However, `React.cache()` is still essential for other async tasks:
67
-
68
- - Database queries (Prisma, Drizzle, etc.)
69
- - Heavy computations
70
- - Authentication checks
71
- - File system operations
72
- - Any non-fetch async work
73
-
74
- Use `React.cache()` to deduplicate these operations across your component tree.
75
-
76
- Reference: [React.cache documentation](https://react.dev/reference/react/cache)
@@ -1,65 +0,0 @@
1
- ---
2
- title: Avoid Duplicate Serialization in RSC Props
3
- impact: LOW
4
- impactDescription: reduces network payload by avoiding duplicate serialization
5
- tags: server, rsc, serialization, props, client-components
6
- ---
7
-
8
- ## Avoid Duplicate Serialization in RSC Props
9
-
10
- **Impact: LOW (reduces network payload by avoiding duplicate serialization)**
11
-
12
- RSC→client serialization deduplicates by object reference, not value. Same reference = serialized once; new reference = serialized again. Do transformations (`.toSorted()`, `.filter()`, `.map()`) in client, not server.
13
-
14
- **Incorrect (duplicates array):**
15
-
16
- ```tsx
17
- // RSC: sends 6 strings (2 arrays × 3 items)
18
- <ClientList usernames={usernames} usernamesOrdered={usernames.toSorted()} />
19
- ```
20
-
21
- **Correct (sends 3 strings):**
22
-
23
- ```tsx
24
- // RSC: send once
25
- <ClientList usernames={usernames} />
26
-
27
- // Client: transform there
28
- 'use client'
29
- const sorted = useMemo(() => [...usernames].sort(), [usernames])
30
- ```
31
-
32
- **Nested deduplication behavior:**
33
-
34
- Deduplication works recursively. Impact varies by data type:
35
-
36
- - `string[]`, `number[]`, `boolean[]`: **HIGH impact** - array + all primitives fully duplicated
37
- - `object[]`: **LOW impact** - array duplicated, but nested objects deduplicated by reference
38
-
39
- ```tsx
40
- // string[] - duplicates everything
41
- usernames={['a','b']} sorted={usernames.toSorted()} // sends 4 strings
42
-
43
- // object[] - duplicates array structure only
44
- users={[{id:1},{id:2}]} sorted={users.toSorted()} // sends 2 arrays + 2 unique objects (not 4)
45
- ```
46
-
47
- **Operations breaking deduplication (create new references):**
48
-
49
- - Arrays: `.toSorted()`, `.filter()`, `.map()`, `.slice()`, `[...arr]`
50
- - Objects: `{...obj}`, `Object.assign()`, `structuredClone()`, `JSON.parse(JSON.stringify())`
51
-
52
- **More examples:**
53
-
54
- ```tsx
55
- // ❌ Bad
56
- <C users={users} active={users.filter(u => u.active)} />
57
- <C product={product} productName={product.name} />
58
-
59
- // ✅ Good
60
- <C users={users} />
61
- <C product={product} />
62
- // Do filtering/destructuring in client
63
- ```
64
-
65
- **Exception:** Pass derived data when transformation is expensive or client doesn't need original.
@@ -1,83 +0,0 @@
1
- ---
2
- title: Parallel Data Fetching with Component Composition
3
- impact: CRITICAL
4
- impactDescription: eliminates server-side waterfalls
5
- tags: server, rsc, parallel-fetching, composition
6
- ---
7
-
8
- ## Parallel Data Fetching with Component Composition
9
-
10
- React Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.
11
-
12
- **Incorrect (Sidebar waits for Page's fetch to complete):**
13
-
14
- ```tsx
15
- export default async function Page() {
16
- const header = await fetchHeader()
17
- return (
18
- <div>
19
- <div>{header}</div>
20
- <Sidebar />
21
- </div>
22
- )
23
- }
24
-
25
- async function Sidebar() {
26
- const items = await fetchSidebarItems()
27
- return <nav>{items.map(renderItem)}</nav>
28
- }
29
- ```
30
-
31
- **Correct (both fetch simultaneously):**
32
-
33
- ```tsx
34
- async function Header() {
35
- const data = await fetchHeader()
36
- return <div>{data}</div>
37
- }
38
-
39
- async function Sidebar() {
40
- const items = await fetchSidebarItems()
41
- return <nav>{items.map(renderItem)}</nav>
42
- }
43
-
44
- export default function Page() {
45
- return (
46
- <div>
47
- <Header />
48
- <Sidebar />
49
- </div>
50
- )
51
- }
52
- ```
53
-
54
- **Alternative with children prop:**
55
-
56
- ```tsx
57
- async function Header() {
58
- const data = await fetchHeader()
59
- return <div>{data}</div>
60
- }
61
-
62
- async function Sidebar() {
63
- const items = await fetchSidebarItems()
64
- return <nav>{items.map(renderItem)}</nav>
65
- }
66
-
67
- function Layout({ children }: { children: ReactNode }) {
68
- return (
69
- <div>
70
- <Header />
71
- {children}
72
- </div>
73
- )
74
- }
75
-
76
- export default function Page() {
77
- return (
78
- <Layout>
79
- <Sidebar />
80
- </Layout>
81
- )
82
- }
83
- ```
@@ -1,38 +0,0 @@
1
- ---
2
- title: Minimize Serialization at RSC Boundaries
3
- impact: HIGH
4
- impactDescription: reduces data transfer size
5
- tags: server, rsc, serialization, props
6
- ---
7
-
8
- ## Minimize Serialization at RSC Boundaries
9
-
10
- The React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.
11
-
12
- **Incorrect (serializes all 50 fields):**
13
-
14
- ```tsx
15
- async function Page() {
16
- const user = await fetchUser() // 50 fields
17
- return <Profile user={user} />
18
- }
19
-
20
- 'use client'
21
- function Profile({ user }: { user: User }) {
22
- return <div>{user.name}</div> // uses 1 field
23
- }
24
- ```
25
-
26
- **Correct (serializes only 1 field):**
27
-
28
- ```tsx
29
- async function Page() {
30
- const user = await fetchUser()
31
- return <Profile name={user.name} />
32
- }
33
-
34
- 'use client'
35
- function Profile({ name }: { name: string }) {
36
- return <div>{name}</div>
37
- }
38
- ```
@@ -1,253 +0,0 @@
1
- ---
2
- name: userinterface-wiki
3
- description: UI/UX best practices for interfaces. Use when reviewing animations, CSS, audio, typography, UX patterns, prefetching, or icon implementations. Covers 11 categories from animation principles to typography. Outputs file:line findings.
4
- license: MIT
5
- metadata:
6
- author: raphael-salaja
7
- version: "3.0.0"
8
- ---
9
-
10
- # User Interface Wiki
11
-
12
- Comprehensive UI/UX best practices guide for interfaces. Contains 152 rules across 12 categories, prioritized by impact to guide automated code review and generation.
13
-
14
- ## When to Apply
15
-
16
- Reference these guidelines when:
17
- - Implementing or reviewing animations (CSS transitions, Motion/Framer Motion)
18
- - Choosing between springs, easing curves, or no animation
19
- - Working with AnimatePresence and exit animations
20
- - Writing CSS with pseudo-elements or View Transitions API
21
- - Adding audio feedback or procedural sound to UI
22
- - Building morphing icon components
23
- - Animating container width/height with dynamic content
24
- - Designing UI that respects cognitive psychology (Fitts's, Hick's, Miller's laws)
25
- - Implementing predictive prefetching for perceived performance
26
- - Setting up typography, OpenType features, or numeric formatting
27
-
28
- ## Rule Categories by Priority
29
-
30
- | Priority | Category | Impact | Prefixes |
31
- |----------|----------|--------|----------|
32
- | 1 | Animation Principles | CRITICAL | `timing-`, `physics-`, `staging-` |
33
- | 2 | Timing Functions | HIGH | `spring-`, `easing-`, `duration-`, `none-` |
34
- | 3 | Exit Animations | HIGH | `exit-`, `presence-`, `mode-`, `nested-` |
35
- | 4 | CSS Pseudo Elements | MEDIUM | `pseudo-`, `transition-`, `native-` |
36
- | 5 | Audio Feedback | MEDIUM | `a11y-`, `appropriate-`, `impl-`, `weight-` |
37
- | 6 | Sound Synthesis | MEDIUM | `context-`, `envelope-`, `design-`, `param-` |
38
- | 7 | Morphing Icons | LOW | `morphing-` |
39
- | 8 | Container Animation | MEDIUM | `container-` |
40
- | 9 | Laws of UX | HIGH | `ux-` |
41
- | 10 | Predictive Prefetching | MEDIUM | `prefetch-` |
42
- | 11 | Typography | MEDIUM | `type-` |
43
- | 12 | Visual Design | HIGH | `visual-` |
44
-
45
- ## Quick Reference
46
-
47
- ### 1. Animation Principles (CRITICAL)
48
-
49
- - `timing-under-300ms` - User animations must complete within 300ms
50
- - `timing-consistent` - Similar elements use identical timing values
51
- - `timing-no-entrance-context-menu` - Context menus: no entrance animation, exit only
52
- - `easing-natural-decay` - Use exponential ramps for natural decay, not linear
53
- - `easing-no-linear-motion` - Linear easing only for progress indicators
54
- - `physics-active-state` - Interactive elements need :active scale transform
55
- - `physics-subtle-deformation` - Squash/stretch in 0.95-1.05 range
56
- - `physics-spring-for-overshoot` - Springs for overshoot-and-settle, not easing
57
- - `physics-no-excessive-stagger` - Stagger delays under 50ms per item
58
- - `staging-one-focal-point` - One prominent animation at a time
59
- - `staging-dim-background` - Dim modal/dialog backgrounds
60
- - `staging-z-index-hierarchy` - Animated elements respect z-index layers
61
-
62
- ### 2. Timing Functions (HIGH)
63
-
64
- - `spring-for-gestures` - Gesture-driven motion (drag, flick) must use springs
65
- - `spring-for-interruptible` - Interruptible motion must use springs
66
- - `spring-preserves-velocity` - Springs preserve input energy on release
67
- - `spring-params-balanced` - Avoid excessive oscillation in spring params
68
- - `easing-for-state-change` - System state changes use easing curves
69
- - `easing-entrance-ease-out` - Entrances use ease-out
70
- - `easing-exit-ease-in` - Exits use ease-in
71
- - `easing-transition-ease-in-out` - View transitions use ease-in-out
72
- - `easing-linear-only-progress` - Linear only for progress/time representation
73
- - `duration-press-hover` - Press/hover: 120-180ms
74
- - `duration-small-state` - Small state changes: 180-260ms
75
- - `duration-max-300ms` - User-initiated max 300ms
76
- - `duration-shorten-before-curve` - Fix slow feel with shorter duration, not curve
77
- - `none-high-frequency` - No animation for high-frequency interactions
78
- - `none-keyboard-navigation` - Keyboard navigation instant, no animation
79
- - `none-context-menu-entrance` - Context menus: no entrance, exit only
80
-
81
- ### 3. Exit Animations (HIGH)
82
-
83
- - `exit-requires-wrapper` - Conditional motion elements need AnimatePresence wrapper
84
- - `exit-prop-required` - Elements in AnimatePresence need exit prop
85
- - `exit-key-required` - Dynamic lists need unique keys, not index
86
- - `exit-matches-initial` - Exit mirrors initial for symmetry
87
- - `presence-hook-in-child` - useIsPresent in child, not parent
88
- - `presence-safe-to-remove` - Call safeToRemove after async cleanup
89
- - `presence-disable-interactions` - Disable interactions on exiting elements
90
- - `mode-wait-doubles-duration` - Mode "wait" doubles duration; halve timing
91
- - `mode-sync-layout-conflict` - Mode "sync" causes layout conflicts
92
- - `mode-pop-layout-for-lists` - Use popLayout for list reordering
93
- - `nested-propagate-required` - Nested AnimatePresence needs propagate prop
94
- - `nested-consistent-timing` - Coordinate parent-child exit durations
95
-
96
- ### 4. CSS Pseudo Elements (MEDIUM)
97
-
98
- - `pseudo-content-required` - ::before/::after need content property
99
- - `pseudo-over-dom-node` - Pseudo-elements over extra DOM nodes for decoration
100
- - `pseudo-position-relative-parent` - Parent needs position: relative
101
- - `pseudo-z-index-layering` - Z-index for correct pseudo-element layering
102
- - `pseudo-hit-target-expansion` - Negative inset for larger hit targets
103
- - `pseudo-marker-styling` - Use ::marker for custom list bullet styles
104
- - `pseudo-first-line-styling` - Use ::first-line for typographic treatments
105
- - `transition-name-required` - View transitions need view-transition-name
106
- - `transition-name-unique` - Each transition name unique during transition
107
- - `transition-name-cleanup` - Remove transition name after completion
108
- - `transition-over-js-library` - Prefer View Transitions API over JS libraries
109
- - `transition-style-pseudo-elements` - Style ::view-transition-group for custom animations
110
- - `native-backdrop-styling` - Use ::backdrop for dialog backgrounds
111
- - `native-placeholder-styling` - Use ::placeholder for input styling
112
- - `native-selection-styling` - Use ::selection for text selection styling
113
-
114
- ### 5. Audio Feedback (MEDIUM)
115
-
116
- - `a11y-visual-equivalent` - Every sound must have a visual equivalent
117
- - `a11y-toggle-setting` - Provide toggle to disable sounds
118
- - `a11y-reduced-motion-check` - Respect prefers-reduced-motion for sound
119
- - `a11y-volume-control` - Allow independent volume adjustment
120
- - `appropriate-no-high-frequency` - No sound on typing or keyboard nav
121
- - `appropriate-confirmations-only` - Sound for payments, uploads, submissions
122
- - `appropriate-errors-warnings` - Sound for errors that can't be overlooked
123
- - `appropriate-no-decorative` - No sound on hover or decorative moments
124
- - `appropriate-no-punishing` - Inform, don't punish with harsh sounds
125
- - `impl-preload-audio` - Preload audio files to avoid delay
126
- - `impl-default-subtle` - Default volume subtle (0.3), not loud
127
- - `impl-reset-current-time` - Reset currentTime before replay
128
- - `weight-match-action` - Sound weight matches action importance
129
- - `weight-duration-matches-action` - Sound duration matches action duration
130
-
131
- ### 6. Sound Synthesis (MEDIUM)
132
-
133
- - `context-reuse-single` - Reuse single AudioContext, don't create per sound
134
- - `context-resume-suspended` - Resume suspended AudioContext before playing
135
- - `context-cleanup-nodes` - Disconnect audio nodes after playback
136
- - `envelope-exponential-decay` - Exponential ramps for natural decay
137
- - `envelope-no-zero-target` - Exponential ramps target 0.001, not 0
138
- - `envelope-set-initial-value` - Set initial value before ramping
139
- - `design-noise-for-percussion` - Filtered noise for clicks/taps
140
- - `design-oscillator-for-tonal` - Oscillators with pitch sweep for tonal sounds
141
- - `design-filter-for-character` - Bandpass filter to shape percussive sounds
142
- - `param-click-duration` - Click sounds: 5-15ms duration
143
- - `param-filter-frequency-range` - Click filter: 3000-6000Hz
144
- - `param-reasonable-gain` - Gain under 1.0 to prevent clipping
145
- - `param-q-value-range` - Filter Q: 2-5 for focused but natural
146
-
147
- ### 7. Morphing Icons (LOW)
148
-
149
- - `morphing-three-lines` - Every icon uses exactly 3 SVG lines
150
- - `morphing-use-collapsed` - Unused lines use collapsed constant
151
- - `morphing-consistent-viewbox` - All icons share same viewBox (14x14)
152
- - `morphing-group-variants` - Rotational variants share group and base lines
153
- - `morphing-spring-rotation` - Spring physics for grouped icon rotation
154
- - `morphing-reduced-motion` - Respect prefers-reduced-motion
155
- - `morphing-jump-non-grouped` - Instant rotation jump between non-grouped icons
156
- - `morphing-strokelinecap-round` - Round stroke line caps
157
- - `morphing-aria-hidden` - Icon SVGs are aria-hidden
158
-
159
- ### 8. Container Animation (MEDIUM)
160
-
161
- - `container-two-div-pattern` - Outer animated div, inner measured div; never same element
162
- - `container-guard-initial-zero` - Guard bounds === 0 on initial render, fall back to "auto"
163
- - `container-use-resize-observer` - Use ResizeObserver for measurement, not getBoundingClientRect
164
- - `container-overflow-hidden` - Set overflow: hidden on animated container during transitions
165
- - `container-no-excessive-use` - Use sparingly: buttons, accordions, interactive elements
166
- - `container-callback-ref` - Use callback ref (not useRef) for measurement hooks
167
- - `container-transition-delay` - Add small delay for natural catching-up feel
168
-
169
- ### 9. Laws of UX (HIGH)
170
-
171
- - `ux-fitts-target-size` - Size interactive targets for easy clicking (min 32px)
172
- - `ux-fitts-hit-area` - Expand hit areas with invisible padding or pseudo-elements
173
- - `ux-hicks-minimize-choices` - Minimize choices to reduce decision time
174
- - `ux-millers-chunking` - Chunk data into groups of 5-9 for scannability
175
- - `ux-doherty-under-400ms` - Respond within 400ms to feel instant
176
- - `ux-doherty-perceived-speed` - Fake speed with skeletons, optimistic UI, progress indicators
177
- - `ux-postels-accept-messy-input` - Accept messy input, output clean data
178
- - `ux-progressive-disclosure` - Show what matters now, reveal complexity later
179
- - `ux-jakobs-familiar-patterns` - Use familiar UI patterns users know from other sites
180
- - `ux-aesthetic-usability` - Visual polish increases perceived usability
181
- - `ux-proximity-grouping` - Group related elements spatially with tighter spacing
182
- - `ux-similarity-consistency` - Similar elements should look alike
183
- - `ux-common-region-boundaries` - Use boundaries to group related content
184
- - `ux-von-restorff-emphasis` - Make important elements visually distinct
185
- - `ux-serial-position` - Place key items first or last in sequences
186
- - `ux-peak-end-finish-strong` - End experiences with clear success states
187
- - `ux-teslers-complexity` - Move complexity to the system, not the user
188
- - `ux-goal-gradient-progress` - Show progress toward completion
189
- - `ux-zeigarnik-show-incomplete` - Show incomplete state to drive completion
190
- - `ux-pragnanz-simplify` - Simplify complex visuals into clear forms
191
- - `ux-pareto-prioritize-features` - Prioritize the critical 20% of features
192
- - `ux-cognitive-load-reduce` - Minimize extraneous cognitive load
193
- - `ux-uniform-connectedness` - Visually connect related elements with lines or frames
194
-
195
- ### 10. Predictive Prefetching (MEDIUM)
196
-
197
- - `prefetch-trajectory-over-hover` - Trajectory prediction over hover; reclaims 100-200ms
198
- - `prefetch-not-everything` - Prefetch by intent, not viewport; avoid wasted bandwidth
199
- - `prefetch-hit-slop` - Use hitSlop to trigger predictions earlier
200
- - `prefetch-touch-fallback` - Fall back gracefully on touch devices (no cursor)
201
- - `prefetch-keyboard-tab` - Prefetch on keyboard navigation when focus approaches
202
- - `prefetch-use-selectively` - Use predictive prefetching where latency is noticeable
203
-
204
- ### 11. Typography (MEDIUM)
205
-
206
- - `type-tabular-nums-for-data` - Tabular numbers for columns, dashboards, pricing
207
- - `type-oldstyle-nums-for-prose` - Oldstyle numbers blend into body text
208
- - `type-slashed-zero` - Slashed zero in code-adjacent UIs
209
- - `type-opentype-contextual-alternates` - Keep calt enabled for contextual glyph adjustment
210
- - `type-disambiguation-stylistic-set` - Enable ss02 to distinguish I/l/1 and 0/O
211
- - `type-optical-sizing-auto` - Leave font-optical-sizing auto for size-adaptive glyphs
212
- - `type-antialiased-on-retina` - Antialiased font smoothing on retina displays
213
- - `type-text-wrap-balance-headings` - text-wrap: balance on headings for even lines
214
- - `type-underline-offset` - Offset underlines below descenders
215
- - `type-no-font-synthesis` - Disable font-synthesis to prevent faux bold/italic
216
- - `type-font-display-swap` - Use font-display: swap to avoid invisible text during load
217
- - `type-variable-weight-continuous` - Use continuous weight values (100-900) with variable fonts
218
- - `type-text-wrap-pretty` - text-wrap: pretty for body text to reduce orphans
219
- - `type-justify-with-hyphens` - Pair text-align: justify with hyphens: auto
220
- - `type-letter-spacing-uppercase` - Add letter-spacing to uppercase and small-caps text
221
- - `type-proper-fractions` - Use diagonal-fractions for proper typographic fractions
222
-
223
- ### 12. Visual Design (HIGH)
224
-
225
- - `visual-concentric-radius` - Inner radius = outer radius minus padding for nested elements
226
- - `visual-layered-shadows` - Layer multiple shadows for realistic depth
227
- - `visual-shadow-direction` - All shadows share same offset direction (single light source)
228
- - `visual-no-pure-black-shadow` - Use neutral colors, not pure black, for shadows
229
- - `visual-shadow-matches-elevation` - Shadow size indicates elevation in consistent scale
230
- - `visual-animate-shadow-pseudo` - Animate shadow via pseudo-element opacity for performance
231
- - `visual-consistent-spacing-scale` - Use a consistent spacing scale, not arbitrary values
232
- - `visual-border-alpha-colors` - Semi-transparent borders adapt to any background
233
- - `visual-button-shadow-anatomy` - Six-layer shadow anatomy for polished buttons
234
-
235
- ## How to Use
236
-
237
- Read individual rule files for detailed explanations and code examples:
238
-
239
- ```
240
- rules/timing-under-300ms.md
241
- rules/spring-for-gestures.md
242
- rules/ux-doherty-under-400ms.md
243
- rules/type-tabular-nums-for-data.md
244
- ```
245
-
246
- Each rule file contains:
247
- - Brief explanation of why it matters
248
- - Incorrect code example with explanation
249
- - Correct code example with explanation
250
-
251
- ## Full Compiled Document
252
-
253
- For the complete guide with all rules expanded: `AGENTS.md`