@nurix/etna 0.19.11 → 0.19.12

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 (486) hide show
  1. package/data/harness-index.json +1 -1
  2. package/data/harnesses/code/harness.json +1 -1
  3. package/data/harnesses/code/rules/frontend.md +5 -5
  4. package/data/harnesses/code/skills/design/SKILL.md +70 -50
  5. package/data/harnesses/code/skills/design/components/charts.md +76 -0
  6. package/data/harnesses/code/skills/design/components/collections.md +132 -0
  7. package/data/harnesses/code/skills/design/components/feedback.md +47 -0
  8. package/data/harnesses/code/skills/design/components/hooks.md +35 -0
  9. package/data/harnesses/code/skills/design/components/index.md +143 -0
  10. package/data/harnesses/code/skills/design/components/inputs.md +327 -0
  11. package/data/harnesses/code/skills/design/components/layout.md +52 -0
  12. package/data/harnesses/code/skills/design/components/media.md +66 -0
  13. package/data/harnesses/code/skills/design/components/motion.md +82 -0
  14. package/data/harnesses/code/skills/design/components/navigation.md +29 -0
  15. package/data/harnesses/code/skills/design/components/overlays.md +72 -0
  16. package/data/harnesses/code/skills/design/components/setup.md +40 -0
  17. package/data/harnesses/code/skills/design/components/typography.md +46 -0
  18. package/data/harnesses/code/skills/design/components/utils.md +37 -0
  19. package/data/harnesses/code/skills/design/data/blueprints/browse.md +38 -0
  20. package/data/harnesses/code/skills/design/data/blueprints/creation-flow.md +38 -0
  21. package/data/harnesses/code/skills/design/data/blueprints/dashboard.md +38 -0
  22. package/data/harnesses/code/skills/design/data/blueprints/grid.md +38 -0
  23. package/data/harnesses/code/skills/design/data/blueprints/queue.md +38 -0
  24. package/data/harnesses/code/skills/design/data/blueprints/record-detail.md +38 -0
  25. package/data/harnesses/code/skills/design/data/blueprints/settings.md +38 -0
  26. package/data/harnesses/code/skills/design/data/chart-styling/Readme.md +33 -0
  27. package/data/harnesses/code/skills/design/data/chart-styling/carbon-accessible-alert-semantic.md +19 -0
  28. package/data/harnesses/code/skills/design/data/chart-styling/carbon-monochrome-sequential-trend.md +19 -0
  29. package/data/harnesses/code/skills/design/data/chart-styling/datadog-classic-six-aligned.md +19 -0
  30. package/data/harnesses/code/skills/design/data/chart-styling/datawrapper-tiered-gray-hierarchy.md +19 -0
  31. package/data/harnesses/code/skills/design/data/chart-styling/econ-red-rule-horizontal.md +19 -0
  32. package/data/harnesses/code/skills/design/data/chart-styling/financial-diverging-threshold-overlay.md +19 -0
  33. package/data/harnesses/code/skills/design/data/chart-styling/ft-vocabulary-ranked-muted.md +19 -0
  34. package/data/harnesses/code/skills/design/data/chart-styling/grafana-dark-threshold-bands.md +19 -0
  35. package/data/harnesses/code/skills/design/data/chart-styling/material-rounded-explicit-label.md +19 -0
  36. package/data/harnesses/code/skills/design/data/chart-styling/nyt-ghost-grid-direct-label.md +19 -0
  37. package/data/harnesses/code/skills/design/data/chart-styling/plot-currentcolor-inherit.md +19 -0
  38. package/data/harnesses/code/skills/design/data/chart-styling/saas-gradient-glow-area.md +19 -0
  39. package/data/harnesses/code/skills/design/data/chart-styling/shadcn-composable-css-vars.md +19 -0
  40. package/data/harnesses/code/skills/design/data/charts/census.csv +58 -0
  41. package/data/harnesses/code/skills/design/data/checklists/browse.md +21 -0
  42. package/data/harnesses/code/skills/design/data/checklists/creation-flow.md +20 -0
  43. package/data/harnesses/code/skills/design/data/checklists/dashboard.md +21 -0
  44. package/data/harnesses/code/skills/design/data/checklists/grid.md +21 -0
  45. package/data/harnesses/code/skills/design/data/checklists/queue.md +21 -0
  46. package/data/harnesses/code/skills/design/data/checklists/record-detail.md +21 -0
  47. package/data/harnesses/code/skills/design/data/checklists/settings.md +21 -0
  48. package/data/harnesses/code/skills/design/data/chrome/board-column.md +68 -0
  49. package/data/harnesses/code/skills/design/data/chrome/data-table.md +63 -0
  50. package/data/harnesses/code/skills/design/data/chrome/side-panel.md +60 -0
  51. package/data/harnesses/code/skills/design/data/chrome/sidebar.md +78 -0
  52. package/data/harnesses/code/skills/design/data/chrome/stat-cards.md +62 -0
  53. package/data/harnesses/code/skills/design/data/chrome/topbar.md +65 -0
  54. package/data/harnesses/code/skills/design/data/color/accent-presets.md +90 -0
  55. package/data/harnesses/code/skills/design/data/color/aesop-earth-mute.md +91 -0
  56. package/data/harnesses/code/skills/design/data/color/arc-peach-play.md +90 -0
  57. package/data/harnesses/code/skills/design/data/color/attio-hunter-teal.md +90 -0
  58. package/data/harnesses/code/skills/design/data/color/carbon-cyan-signal.md +90 -0
  59. package/data/harnesses/code/skills/design/data/color/clay-parchment.md +90 -0
  60. package/data/harnesses/code/skills/design/data/color/duolingo-feather.md +90 -0
  61. package/data/harnesses/code/skills/design/data/color/geist-mono-signal.md +90 -0
  62. package/data/harnesses/code/skills/design/data/color/linear-graphite-violet.md +90 -0
  63. package/data/harnesses/code/skills/design/data/color/mercury-onyx-cobalt.md +90 -0
  64. package/data/harnesses/code/skills/design/data/color/notion-paper-ink.md +90 -0
  65. package/data/harnesses/code/skills/design/data/color/radix-slate-iris.md +90 -0
  66. package/data/harnesses/code/skills/design/data/color/raycast-void-spectrum.md +90 -0
  67. package/data/harnesses/code/skills/design/data/color/spectrum-celery-fuchsia.md +90 -0
  68. package/data/harnesses/code/skills/design/data/color/stripe-blurple-ruby.md +90 -0
  69. package/data/harnesses/code/skills/design/data/color/superhuman-cod-picton.md +89 -0
  70. package/data/harnesses/code/skills/design/data/corpora/operations-review/companies.csv +15 -0
  71. package/data/harnesses/code/skills/design/data/corpora/operations-review/corpus.md +87 -0
  72. package/data/harnesses/code/skills/design/data/corpora/operations-review/people.csv +25 -0
  73. package/data/harnesses/code/skills/design/data/corpora/procurement-approvals/companies.csv +15 -0
  74. package/data/harnesses/code/skills/design/data/corpora/procurement-approvals/corpus.md +83 -0
  75. package/data/harnesses/code/skills/design/data/corpora/procurement-approvals/people.csv +25 -0
  76. package/data/harnesses/code/skills/design/data/corpora/revenue-analytics/companies.csv +15 -0
  77. package/data/harnesses/code/skills/design/data/corpora/revenue-analytics/corpus.md +89 -0
  78. package/data/harnesses/code/skills/design/data/corpora/revenue-analytics/people.csv +25 -0
  79. package/data/harnesses/code/skills/design/data/elevation/ant-design-directional-shadow.md +19 -0
  80. package/data/harnesses/code/skills/design/data/elevation/apple-liquid-glass-material.md +18 -0
  81. package/data/harnesses/code/skills/design/data/elevation/atlassian-surface-shadow-pairing.md +20 -0
  82. package/data/harnesses/code/skills/design/data/elevation/fluent-2-key-ambient-ramp.md +20 -0
  83. package/data/harnesses/code/skills/design/data/elevation/github-primer-sparing-shadow.md +19 -0
  84. package/data/harnesses/code/skills/design/data/elevation/ibm-carbon-layer-and-border.md +19 -0
  85. package/data/harnesses/code/skills/design/data/elevation/linear-dark-surface-ladder.md +17 -0
  86. package/data/harnesses/code/skills/design/data/elevation/material-2-key-ambient-dp-ramp.md +19 -0
  87. package/data/harnesses/code/skills/design/data/elevation/material-3-tonal-elevation.md +21 -0
  88. package/data/harnesses/code/skills/design/data/elevation/neobrutalist-hard-offset.md +19 -0
  89. package/data/harnesses/code/skills/design/data/elevation/neumorphic-soft-dual-shadow.md +18 -0
  90. package/data/harnesses/code/skills/design/data/elevation/notion-warm-minimal-hairline.md +17 -0
  91. package/data/harnesses/code/skills/design/data/elevation/polaris-elevation-inset-bevel.md +21 -0
  92. package/data/harnesses/code/skills/design/data/elevation/radix-themes-alpha-ring-scale.md +19 -0
  93. package/data/harnesses/code/skills/design/data/elevation/shadcn-neutral-derived-radius.md +19 -0
  94. package/data/harnesses/code/skills/design/data/elevation/stripe-brand-tinted-dual-shadow.md +18 -0
  95. package/data/harnesses/code/skills/design/data/elevation/tailwind-default-utility-scale.md +19 -0
  96. package/data/harnesses/code/skills/design/data/elevation/vercel-geist-shadow-as-border.md +20 -0
  97. package/data/harnesses/code/skills/design/data/gradients/amber-attention-fill.md +16 -0
  98. package/data/harnesses/code/skills/design/data/gradients/cloud-shadow-wash.md +16 -0
  99. package/data/harnesses/code/skills/design/data/gradients/confident-lavender-wash.md +16 -0
  100. package/data/harnesses/code/skills/design/data/gradients/ember-ship-flare.md +18 -0
  101. package/data/harnesses/code/skills/design/data/gradients/full-metal-wash.md +16 -0
  102. package/data/harnesses/code/skills/design/data/gradients/indigo-ruby-cta-band.md +18 -0
  103. package/data/harnesses/code/skills/design/data/gradients/linear-graphite-wash.md +18 -0
  104. package/data/harnesses/code/skills/design/data/gradients/marble-quartz-wash.md +16 -0
  105. package/data/harnesses/code/skills/design/data/gradients/midnight-aurora-panel.md +16 -0
  106. package/data/harnesses/code/skills/design/data/gradients/neutral-volume-fill.md +16 -0
  107. package/data/harnesses/code/skills/design/data/gradients/revenue-uptrend-fill.md +16 -0
  108. package/data/harnesses/code/skills/design/data/gradients/risk-decline-fill.md +16 -0
  109. package/data/harnesses/code/skills/design/data/gradients/signal-blue-develop.md +18 -0
  110. package/data/harnesses/code/skills/design/data/gradients/slate-mist-wash.md +16 -0
  111. package/data/harnesses/code/skills/design/data/gradients/stripe-atmosphere-mesh.md +18 -0
  112. package/data/harnesses/code/skills/design/data/gradients/teal-signal-accent.md +16 -0
  113. package/data/harnesses/code/skills/design/data/gradients/violet-magenta-promo.md +16 -0
  114. package/data/harnesses/code/skills/design/data/iconography.md +199 -0
  115. package/data/harnesses/code/skills/design/data/motion/accordion-expand.md +18 -0
  116. package/data/harnesses/code/skills/design/data/motion/destructive-hold-confirm.md +18 -0
  117. package/data/harnesses/code/skills/design/data/motion/drag-dismiss-momentum.md +18 -0
  118. package/data/harnesses/code/skills/design/data/motion/empty-state-arrive.md +18 -0
  119. package/data/harnesses/code/skills/design/data/motion/hover-lift.md +18 -0
  120. package/data/harnesses/code/skills/design/data/motion/modal-center-arrive.md +18 -0
  121. package/data/harnesses/code/skills/design/data/motion/number-ticker-roll.md +18 -0
  122. package/data/harnesses/code/skills/design/data/motion/onboarding-bounce.md +18 -0
  123. package/data/harnesses/code/skills/design/data/motion/panel-slide.md +18 -0
  124. package/data/harnesses/code/skills/design/data/motion/press-feedback.md +18 -0
  125. package/data/harnesses/code/skills/design/data/motion/progress-linear-loop.md +18 -0
  126. package/data/harnesses/code/skills/design/data/motion/route-crossfade.md +18 -0
  127. package/data/harnesses/code/skills/design/data/motion/rubber-band-overscroll.md +18 -0
  128. package/data/harnesses/code/skills/design/data/motion/skeleton-shimmer.md +18 -0
  129. package/data/harnesses/code/skills/design/data/motion/stagger-arrive.md +18 -0
  130. package/data/harnesses/code/skills/design/data/motion/toast-enter-stack.md +18 -0
  131. package/data/harnesses/code/skills/design/data/motion/tooltip-chain-instant.md +18 -0
  132. package/data/harnesses/code/skills/design/data/motion/trigger-anchored-reveal.md +18 -0
  133. package/data/harnesses/code/skills/design/data/tells.csv +34 -0
  134. package/data/harnesses/code/skills/design/data/typography/anton-work-sans.md +17 -0
  135. package/data/harnesses/code/skills/design/data/typography/archivo-black-archivo.md +17 -0
  136. package/data/harnesses/code/skills/design/data/typography/bitter-karla.md +17 -0
  137. package/data/harnesses/code/skills/design/data/typography/dm-serif-dm-sans.md +17 -0
  138. package/data/harnesses/code/skills/design/data/typography/fraunces-inter.md +17 -0
  139. package/data/harnesses/code/skills/design/data/typography/geist-geist-mono.md +17 -0
  140. package/data/harnesses/code/skills/design/data/typography/hubot-sans-mona-sans.md +17 -0
  141. package/data/harnesses/code/skills/design/data/typography/ibm-plex-sans-operator-single-family.md +17 -0
  142. package/data/harnesses/code/skills/design/data/typography/instrument-serif-instrument-sans.md +17 -0
  143. package/data/harnesses/code/skills/design/data/typography/inter-operator-single-family.md +17 -0
  144. package/data/harnesses/code/skills/design/data/typography/libre-baskerville-libre-franklin.md +17 -0
  145. package/data/harnesses/code/skills/design/data/typography/newsreader-inter.md +17 -0
  146. package/data/harnesses/code/skills/design/data/typography/playfair-display-source-sans.md +17 -0
  147. package/data/harnesses/code/skills/design/data/typography/public-sans-operator-single-family.md +17 -0
  148. package/data/harnesses/code/skills/design/data/typography/sohne-inter-fintech.md +17 -0
  149. package/data/harnesses/code/skills/design/data/typography/source-serif-source-sans.md +17 -0
  150. package/data/harnesses/code/skills/design/data/typography/space-grotesk-work-sans-space-mono.md +17 -0
  151. package/data/harnesses/code/skills/design/data/typography/spectral-manrope.md +17 -0
  152. package/data/harnesses/code/skills/design/data/voices/bright-collaborator.md +29 -0
  153. package/data/harnesses/code/skills/design/data/voices/direct-operator.md +29 -0
  154. package/data/harnesses/code/skills/design/data/voices/earnest-helper.md +29 -0
  155. package/data/harnesses/code/skills/design/data/voices/editorial-composed.md +29 -0
  156. package/data/harnesses/code/skills/design/data/voices/quiet-concierge.md +29 -0
  157. package/data/harnesses/code/skills/design/data/voices/warm-guide.md +29 -0
  158. package/data/harnesses/code/skills/design/design-md/SCHEMA.md +179 -0
  159. package/data/harnesses/code/skills/design/design-md/index.csv +67 -0
  160. package/data/harnesses/code/skills/design/design-md/library/airbnb.md +207 -0
  161. package/data/harnesses/code/skills/design/design-md/library/airtable.md +205 -0
  162. package/data/harnesses/code/skills/design/design-md/library/anthropic-claude.md +203 -0
  163. package/data/harnesses/code/skills/design/design-md/library/apple.md +206 -0
  164. package/data/harnesses/code/skills/design/design-md/library/binance.md +210 -0
  165. package/data/harnesses/code/skills/design/design-md/library/bmw.md +210 -0
  166. package/data/harnesses/code/skills/design/design-md/library/cal.md +209 -0
  167. package/data/harnesses/code/skills/design/design-md/library/clay.md +204 -0
  168. package/data/harnesses/code/skills/design/design-md/library/clickhouse.md +205 -0
  169. package/data/harnesses/code/skills/design/design-md/library/cohere.md +205 -0
  170. package/data/harnesses/code/skills/design/design-md/library/coinbase.md +198 -0
  171. package/data/harnesses/code/skills/design/design-md/library/composio.md +198 -0
  172. package/data/harnesses/code/skills/design/design-md/library/cursor.md +197 -0
  173. package/data/harnesses/code/skills/design/design-md/library/elevenlabs.md +199 -0
  174. package/data/harnesses/code/skills/design/design-md/library/expo.md +200 -0
  175. package/data/harnesses/code/skills/design/design-md/library/figma.md +199 -0
  176. package/data/harnesses/code/skills/design/design-md/library/framer.md +202 -0
  177. package/data/harnesses/code/skills/design/design-md/library/hashicorp.md +205 -0
  178. package/data/harnesses/code/skills/design/design-md/library/ibm.md +205 -0
  179. package/data/harnesses/code/skills/design/design-md/library/intercom.md +204 -0
  180. package/data/harnesses/code/skills/design/design-md/library/kraken.md +200 -0
  181. package/data/harnesses/code/skills/design/design-md/library/linear-app.md +198 -0
  182. package/data/harnesses/code/skills/design/design-md/library/lovable.md +199 -0
  183. package/data/harnesses/code/skills/design/design-md/library/meta.md +204 -0
  184. package/data/harnesses/code/skills/design/design-md/library/minimax.md +204 -0
  185. package/data/harnesses/code/skills/design/design-md/library/mintlify.md +210 -0
  186. package/data/harnesses/code/skills/design/design-md/library/miro.md +209 -0
  187. package/data/harnesses/code/skills/design/design-md/library/mistral-ai.md +201 -0
  188. package/data/harnesses/code/skills/design/design-md/library/mongodb.md +201 -0
  189. package/data/harnesses/code/skills/design/design-md/library/notion.md +204 -0
  190. package/data/harnesses/code/skills/design/design-md/library/nvidia.md +215 -0
  191. package/data/harnesses/code/skills/design/design-md/library/ollama.md +213 -0
  192. package/data/harnesses/code/skills/design/design-md/library/opencode-ai.md +216 -0
  193. package/data/harnesses/code/skills/design/design-md/library/posthog.md +218 -0
  194. package/data/harnesses/code/skills/design/design-md/library/raycast.md +214 -0
  195. package/data/harnesses/code/skills/design/design-md/library/replicate.md +202 -0
  196. package/data/harnesses/code/skills/design/design-md/library/resend.md +203 -0
  197. package/data/harnesses/code/skills/design/design-md/library/revolut.md +203 -0
  198. package/data/harnesses/code/skills/design/design-md/library/runwayml.md +203 -0
  199. package/data/harnesses/code/skills/design/design-md/library/sanity.md +200 -0
  200. package/data/harnesses/code/skills/design/design-md/library/sentry.md +201 -0
  201. package/data/harnesses/code/skills/design/design-md/library/shopify.md +202 -0
  202. package/data/harnesses/code/skills/design/design-md/library/slack.md +202 -0
  203. package/data/harnesses/code/skills/design/design-md/library/spacex.md +206 -0
  204. package/data/harnesses/code/skills/design/design-md/library/spotify.md +206 -0
  205. package/data/harnesses/code/skills/design/design-md/library/stripe.md +196 -0
  206. package/data/harnesses/code/skills/design/design-md/library/supabase.md +196 -0
  207. package/data/harnesses/code/skills/design/design-md/library/superhuman.md +194 -0
  208. package/data/harnesses/code/skills/design/design-md/library/tesla.md +198 -0
  209. package/data/harnesses/code/skills/design/design-md/library/theverge.md +199 -0
  210. package/data/harnesses/code/skills/design/design-md/library/together-ai.md +193 -0
  211. package/data/harnesses/code/skills/design/design-md/library/uber.md +195 -0
  212. package/data/harnesses/code/skills/design/design-md/library/vercel.md +195 -0
  213. package/data/harnesses/code/skills/design/design-md/library/voltagent.md +197 -0
  214. package/data/harnesses/code/skills/design/design-md/library/warp.md +196 -0
  215. package/data/harnesses/code/skills/design/design-md/library/webflow.md +197 -0
  216. package/data/harnesses/code/skills/design/design-md/library/wired.md +197 -0
  217. package/data/harnesses/code/skills/design/design-md/library/wise.md +198 -0
  218. package/data/harnesses/code/skills/design/design-md/library/x-ai.md +199 -0
  219. package/data/harnesses/code/skills/design/design-md/library/zapier.md +198 -0
  220. package/data/harnesses/code/skills/design/design-md/nurix.md +214 -0
  221. package/data/harnesses/code/skills/design/design-md/variants/editorial-luxury.md +184 -0
  222. package/data/harnesses/code/skills/design/design-md/variants/expressive-saas.md +216 -0
  223. package/data/harnesses/code/skills/design/design-md/variants/quiet-premium.md +211 -0
  224. package/data/harnesses/code/skills/design/design-md/variants/terse-dense-operator.md +212 -0
  225. package/data/harnesses/code/skills/design/design-md/variants/warm-approachable.md +216 -0
  226. package/data/harnesses/code/skills/design/references/compose.md +23 -0
  227. package/data/harnesses/code/skills/design/references/content.md +28 -0
  228. package/data/harnesses/code/skills/design/references/emission.md +21 -0
  229. package/data/harnesses/code/skills/design/references/existing-apps.md +27 -0
  230. package/data/harnesses/code/skills/design/references/intake.md +36 -0
  231. package/data/harnesses/code/skills/design/references/object-pass.md +24 -0
  232. package/data/harnesses/code/skills/design/references/ship-gate.md +29 -0
  233. package/data/harnesses/code/skills/design/references/ux-patterns/Readme.md +195 -0
  234. package/data/harnesses/code/skills/design/references/ux-patterns/ai-layer.md +49 -0
  235. package/data/harnesses/code/skills/design/references/ux-patterns/attributes-lifecycle.md +43 -0
  236. package/data/harnesses/code/skills/design/references/ux-patterns/container-choice.md +44 -0
  237. package/data/harnesses/code/skills/design/references/ux-patterns/creation-paths.md +46 -0
  238. package/data/harnesses/code/skills/design/references/ux-patterns/dashboards.md +42 -0
  239. package/data/harnesses/code/skills/design/references/ux-patterns/modes.md +42 -0
  240. package/data/harnesses/code/skills/design/references/ux-patterns/object-model.md +46 -0
  241. package/data/harnesses/code/skills/design/references/ux-patterns/page-archetype.md +48 -0
  242. package/data/harnesses/code/skills/design/references/ux-patterns/promotion-demotion.md +37 -0
  243. package/data/harnesses/code/skills/design/references/ux-patterns/settings.md +42 -0
  244. package/data/harnesses/code/skills/design/references/ux-patterns/standard-pages.md +46 -0
  245. package/data/harnesses/code/skills/design/references/ux-patterns/state-matrix.md +41 -0
  246. package/data/harnesses/code/skills/design/references/ux-patterns/table-mechanics.md +48 -0
  247. package/data/harnesses/code/skills/design/references/ux-patterns/verbs.md +45 -0
  248. package/data/harnesses/code/skills/design/references/ux-patterns/viewer-context.md +40 -0
  249. package/data/harnesses/code/skills/design/scripts/README-validator.md +27 -0
  250. package/data/harnesses/code/skills/design/scripts/select-chart.mjs +596 -0
  251. package/data/harnesses/code/skills/design/scripts/validate-design-md.mjs +1198 -0
  252. package/package.json +1 -1
  253. package/data/harnesses/code/skills/design/data/catalog/rules.csv +0 -137
  254. package/data/harnesses/code/skills/design/data/combinations/Readme.md +0 -33
  255. package/data/harnesses/code/skills/design/data/combinations/accent-presets.md +0 -113
  256. package/data/harnesses/code/skills/design/data/combinations/charts.csv +0 -33
  257. package/data/harnesses/code/skills/design/data/combinations/fonts-known.json +0 -448
  258. package/data/harnesses/code/skills/design/data/combinations/icons.csv +0 -157
  259. package/data/harnesses/code/skills/design/data/combinations/landing.csv +0 -38
  260. package/data/harnesses/code/skills/design/data/combinations/lucide-names.json +0 -2001
  261. package/data/harnesses/code/skills/design/data/combinations/manifest.json +0 -330
  262. package/data/harnesses/code/skills/design/data/combinations/motion.csv +0 -10
  263. package/data/harnesses/code/skills/design/data/combinations/palettes.csv +0 -92
  264. package/data/harnesses/code/skills/design/data/combinations/product-router.csv +0 -80
  265. package/data/harnesses/code/skills/design/data/combinations/styles.csv +0 -67
  266. package/data/harnesses/code/skills/design/data/combinations/typography.csv +0 -64
  267. package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +0 -106
  268. package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +0 -154
  269. package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +0 -151
  270. package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +0 -139
  271. package/data/harnesses/code/skills/design/data/design-md/library/apple.md +0 -139
  272. package/data/harnesses/code/skills/design/data/design-md/library/binance.md +0 -140
  273. package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +0 -140
  274. package/data/harnesses/code/skills/design/data/design-md/library/cal.md +0 -140
  275. package/data/harnesses/code/skills/design/data/design-md/library/clay.md +0 -139
  276. package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +0 -139
  277. package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +0 -147
  278. package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +0 -156
  279. package/data/harnesses/code/skills/design/data/design-md/library/composio.md +0 -138
  280. package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +0 -138
  281. package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +0 -137
  282. package/data/harnesses/code/skills/design/data/design-md/library/expo.md +0 -148
  283. package/data/harnesses/code/skills/design/data/design-md/library/figma.md +0 -141
  284. package/data/harnesses/code/skills/design/data/design-md/library/framer.md +0 -156
  285. package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +0 -140
  286. package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +0 -153
  287. package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +0 -158
  288. package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +0 -156
  289. package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +0 -122
  290. package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +0 -140
  291. package/data/harnesses/code/skills/design/data/design-md/library/meta.md +0 -139
  292. package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +0 -139
  293. package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +0 -139
  294. package/data/harnesses/code/skills/design/data/design-md/library/miro.md +0 -153
  295. package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +0 -140
  296. package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +0 -155
  297. package/data/harnesses/code/skills/design/data/design-md/library/notion.md +0 -140
  298. package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +0 -141
  299. package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +0 -145
  300. package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +0 -142
  301. package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +0 -152
  302. package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +0 -137
  303. package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +0 -140
  304. package/data/harnesses/code/skills/design/data/design-md/library/resend.md +0 -170
  305. package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +0 -145
  306. package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +0 -137
  307. package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +0 -168
  308. package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +0 -163
  309. package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +0 -147
  310. package/data/harnesses/code/skills/design/data/design-md/library/slack.md +0 -158
  311. package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +0 -171
  312. package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +0 -166
  313. package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +0 -160
  314. package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +0 -173
  315. package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +0 -145
  316. package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +0 -153
  317. package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +0 -167
  318. package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +0 -140
  319. package/data/harnesses/code/skills/design/data/design-md/library/uber.md +0 -140
  320. package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +0 -140
  321. package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +0 -130
  322. package/data/harnesses/code/skills/design/data/design-md/library/warp.md +0 -140
  323. package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +0 -140
  324. package/data/harnesses/code/skills/design/data/design-md/library/wired.md +0 -139
  325. package/data/harnesses/code/skills/design/data/design-md/library/wise.md +0 -137
  326. package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +0 -138
  327. package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +0 -158
  328. package/data/harnesses/code/skills/design/data/design-md/nurix.md +0 -138
  329. package/data/harnesses/code/skills/design/data/design-tokens/SCHEMA.md +0 -695
  330. package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.resolver.json +0 -20
  331. package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.tokens.json +0 -1272
  332. package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.resolver.json +0 -20
  333. package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.tokens.json +0 -1268
  334. package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.resolver.json +0 -20
  335. package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.tokens.json +0 -1273
  336. package/data/harnesses/code/skills/design/data/design-tokens/apple/design.resolver.json +0 -20
  337. package/data/harnesses/code/skills/design/data/design-tokens/apple/design.tokens.json +0 -1262
  338. package/data/harnesses/code/skills/design/data/design-tokens/binance/design.resolver.json +0 -20
  339. package/data/harnesses/code/skills/design/data/design-tokens/binance/design.tokens.json +0 -1257
  340. package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.resolver.json +0 -20
  341. package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.tokens.json +0 -1270
  342. package/data/harnesses/code/skills/design/data/design-tokens/cal/design.resolver.json +0 -20
  343. package/data/harnesses/code/skills/design/data/design-tokens/cal/design.tokens.json +0 -1270
  344. package/data/harnesses/code/skills/design/data/design-tokens/clay/design.resolver.json +0 -20
  345. package/data/harnesses/code/skills/design/data/design-tokens/clay/design.tokens.json +0 -1261
  346. package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.resolver.json +0 -20
  347. package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.tokens.json +0 -1268
  348. package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.resolver.json +0 -20
  349. package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.tokens.json +0 -1281
  350. package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.resolver.json +0 -20
  351. package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.tokens.json +0 -1262
  352. package/data/harnesses/code/skills/design/data/design-tokens/composio/design.resolver.json +0 -20
  353. package/data/harnesses/code/skills/design/data/design-tokens/composio/design.tokens.json +0 -1271
  354. package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.resolver.json +0 -20
  355. package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.tokens.json +0 -1276
  356. package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.resolver.json +0 -20
  357. package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.tokens.json +0 -1293
  358. package/data/harnesses/code/skills/design/data/design-tokens/expo/design.resolver.json +0 -20
  359. package/data/harnesses/code/skills/design/data/design-tokens/expo/design.tokens.json +0 -1270
  360. package/data/harnesses/code/skills/design/data/design-tokens/figma/design.resolver.json +0 -20
  361. package/data/harnesses/code/skills/design/data/design-tokens/figma/design.tokens.json +0 -1276
  362. package/data/harnesses/code/skills/design/data/design-tokens/framer/design.resolver.json +0 -20
  363. package/data/harnesses/code/skills/design/data/design-tokens/framer/design.tokens.json +0 -1267
  364. package/data/harnesses/code/skills/design/data/design-tokens/goldens.json +0 -251
  365. package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.resolver.json +0 -20
  366. package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.tokens.json +0 -1273
  367. package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.resolver.json +0 -20
  368. package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.tokens.json +0 -1286
  369. package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.resolver.json +0 -20
  370. package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.tokens.json +0 -1290
  371. package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.resolver.json +0 -20
  372. package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.tokens.json +0 -1270
  373. package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.resolver.json +0 -23
  374. package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.dark.json +0 -599
  375. package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.json +0 -1272
  376. package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.resolver.json +0 -20
  377. package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.tokens.json +0 -1267
  378. package/data/harnesses/code/skills/design/data/design-tokens/meta/design.resolver.json +0 -20
  379. package/data/harnesses/code/skills/design/data/design-tokens/meta/design.tokens.json +0 -1289
  380. package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.resolver.json +0 -20
  381. package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.tokens.json +0 -1258
  382. package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.resolver.json +0 -20
  383. package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.tokens.json +0 -1284
  384. package/data/harnesses/code/skills/design/data/design-tokens/miro/design.resolver.json +0 -20
  385. package/data/harnesses/code/skills/design/data/design-tokens/miro/design.tokens.json +0 -1291
  386. package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.resolver.json +0 -20
  387. package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.tokens.json +0 -1263
  388. package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.resolver.json +0 -20
  389. package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.tokens.json +0 -1270
  390. package/data/harnesses/code/skills/design/data/design-tokens/notion/design.resolver.json +0 -20
  391. package/data/harnesses/code/skills/design/data/design-tokens/notion/design.tokens.json +0 -1261
  392. package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.resolver.json +0 -20
  393. package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.tokens.json +0 -1209
  394. package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.resolver.json +0 -20
  395. package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.tokens.json +0 -1265
  396. package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.resolver.json +0 -20
  397. package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.tokens.json +0 -1253
  398. package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.resolver.json +0 -20
  399. package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.tokens.json +0 -1268
  400. package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.resolver.json +0 -20
  401. package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.tokens.json +0 -1261
  402. package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.resolver.json +0 -20
  403. package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.tokens.json +0 -1263
  404. package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.resolver.json +0 -20
  405. package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.tokens.json +0 -1266
  406. package/data/harnesses/code/skills/design/data/design-tokens/resend/design.resolver.json +0 -23
  407. package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.dark.json +0 -623
  408. package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.json +0 -1276
  409. package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.resolver.json +0 -20
  410. package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.tokens.json +0 -1264
  411. package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.resolver.json +0 -20
  412. package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.tokens.json +0 -1268
  413. package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.resolver.json +0 -20
  414. package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.tokens.json +0 -1270
  415. package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.resolver.json +0 -20
  416. package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.tokens.json +0 -1288
  417. package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.resolver.json +0 -20
  418. package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.tokens.json +0 -1272
  419. package/data/harnesses/code/skills/design/data/design-tokens/slack/design.resolver.json +0 -20
  420. package/data/harnesses/code/skills/design/data/design-tokens/slack/design.tokens.json +0 -1265
  421. package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.resolver.json +0 -20
  422. package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.tokens.json +0 -1287
  423. package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.resolver.json +0 -20
  424. package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.tokens.json +0 -1286
  425. package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.resolver.json +0 -20
  426. package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.tokens.json +0 -1285
  427. package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.resolver.json +0 -20
  428. package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.tokens.json +0 -1287
  429. package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.resolver.json +0 -20
  430. package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.tokens.json +0 -1278
  431. package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.resolver.json +0 -20
  432. package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.tokens.json +0 -1269
  433. package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.resolver.json +0 -20
  434. package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.tokens.json +0 -1285
  435. package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.resolver.json +0 -20
  436. package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.tokens.json +0 -1303
  437. package/data/harnesses/code/skills/design/data/design-tokens/uber/design.resolver.json +0 -20
  438. package/data/harnesses/code/skills/design/data/design-tokens/uber/design.tokens.json +0 -1274
  439. package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.resolver.json +0 -20
  440. package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.tokens.json +0 -1296
  441. package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.resolver.json +0 -23
  442. package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.dark.json +0 -612
  443. package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.json +0 -1282
  444. package/data/harnesses/code/skills/design/data/design-tokens/warp/design.resolver.json +0 -20
  445. package/data/harnesses/code/skills/design/data/design-tokens/warp/design.tokens.json +0 -1287
  446. package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.resolver.json +0 -20
  447. package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.tokens.json +0 -1268
  448. package/data/harnesses/code/skills/design/data/design-tokens/wired/design.resolver.json +0 -20
  449. package/data/harnesses/code/skills/design/data/design-tokens/wired/design.tokens.json +0 -1276
  450. package/data/harnesses/code/skills/design/data/design-tokens/wise/design.resolver.json +0 -20
  451. package/data/harnesses/code/skills/design/data/design-tokens/wise/design.tokens.json +0 -1273
  452. package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.resolver.json +0 -20
  453. package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.tokens.json +0 -1296
  454. package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.resolver.json +0 -20
  455. package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.tokens.json +0 -1286
  456. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/command-center.tsx +0 -249
  457. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/create-edit.tsx +0 -249
  458. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/dashboard.tsx +0 -225
  459. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/entity-detail.tsx +0 -249
  460. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/list-detail.tsx +0 -224
  461. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/log-stream.tsx +0 -249
  462. package/data/harnesses/code/skills/design/data/operator-pack/fixtures.md +0 -88
  463. package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +0 -132
  464. package/data/harnesses/code/skills/design/data/operator-pack/trust-rubric.md +0 -76
  465. package/data/harnesses/code/skills/design/references/create.md +0 -173
  466. package/data/harnesses/code/skills/design/references/diagnosis.md +0 -108
  467. package/data/harnesses/code/skills/design/references/hard-rules.md +0 -177
  468. package/data/harnesses/code/skills/design/references/improve.md +0 -116
  469. package/data/harnesses/code/skills/design/references/interaction.md +0 -77
  470. package/data/harnesses/code/skills/design/references/introspect.md +0 -100
  471. package/data/harnesses/code/skills/design/references/lifecycle.md +0 -73
  472. package/data/harnesses/code/skills/design/references/personality.md +0 -575
  473. package/data/harnesses/code/skills/design/references/structure.md +0 -159
  474. package/data/harnesses/code/skills/design/scripts/convert-design-md.mjs +0 -1312
  475. package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +0 -1498
  476. package/data/harnesses/code/skills/design/scripts/generate-fixtures.mjs +0 -551
  477. package/data/harnesses/code/skills/design/scripts/lib/checks.mjs +0 -1092
  478. package/data/harnesses/code/skills/design/scripts/lib/golden.mjs +0 -26
  479. package/data/harnesses/code/skills/design/scripts/lib/vocabulary.mjs +0 -65
  480. package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +0 -538
  481. package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +0 -312
  482. package/data/harnesses/code/skills/design/scripts/render-rung.mjs +0 -890
  483. package/data/harnesses/code/skills/design/scripts/scaffold.mjs +0 -769
  484. package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +0 -675
  485. package/data/harnesses/code/skills/design/scripts/snapshot-goldens.mjs +0 -164
  486. package/data/harnesses/code/skills/design/scripts/validate-combinations.mjs +0 -439
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: number-ticker-roll
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/animation-vocabulary/SKILL.md (Number ticker; Tabular numbers) + review-animations/STANDARDS.md (sub-300ms rule; interruptibility)"
6
+ license: open
7
+ feel: "digits rolling to the new value at ~250ms read like a live counter; an instant jump-cut reads like the number just glitched"
8
+ aliases: { glitched: "value changes with no roll/interpolation at all", "tabular-drift": "digits set without tabular figures, so the number visibly shifts width as it rolls", janky: "keyframe roll restarting from zero on each rapid update instead of retargeting" }
9
+ ---
10
+ Live counters, stat tiles, KPI cards, running totals — system-driven value changes, so the sub-300ms UI rule applies. Requires tabular figures so surrounding layout doesn't shift while digits roll. Rapid successive updates retarget the roll (transition, not keyframes), never restart from zero.
11
+
12
+ ```yaml values
13
+ duration: 250ms
14
+ easing: cubic-bezier(0.23, 1, 0.32, 1)
15
+ element-class: control
16
+ interruptible: required
17
+ budget: { control: 200-300ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: onboarding-bounce
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/review-animations/STANDARDS.md (springs — bounce 0.1-0.3, reserved for playful moments) + improve-animations/AUDIT.md §1 (rare/first-time → delight)"
6
+ license: open
7
+ feel: "a springy overshoot on a first-run welcome card reads warm and considered; the same bounce on anything seen daily reads gimmicky"
8
+ aliases: { gimmicky: "spring bounce applied outside a rare/first-time identity moment — the same overshoot on a daily-use control", overdone: "bounce pushed above the 0.1-0.3 range into cartoonish territory" }
9
+ ---
10
+ Onboarding welcome screens, first-run tours — rare, high-emotion, seen once or a handful of times ever. The scoped exception where springy/physical vocabulary is admissible; it does not license bounce anywhere else.
11
+
12
+ ```yaml values
13
+ duration: 500ms (spring; no fixed duration)
14
+ easing: spring(bounce 0.3)
15
+ element-class: identity-moment
16
+ interruptible: n/a
17
+ budget: { identity-moment: 400-600ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: panel-slide
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/review-animations/STANDARDS.md (--ease-drawer curve; duration table, modal/drawer row) + apple-design/SKILL.md §3 (interruption; velocity continuity)"
6
+ license: open
7
+ feel: "a 260ms slide on the iOS drawer curve reads native and grabbable; a keyframe slide that restarts on repeated taps reads broken"
8
+ aliases: { broken: "keyframes restarting from zero instead of a transition/spring retargeting mid-slide", floaty: "duration pushed past the panel budget" }
9
+ ---
10
+ Side panels, drawers, bottom sheets. Must be interruptible and carry velocity on a gesture-driven close — grabbing a closing panel should follow the pointer, not fight it.
11
+
12
+ ```yaml values
13
+ duration: 260ms
14
+ easing: cubic-bezier(0.32, 0.72, 0, 1)
15
+ element-class: panel
16
+ interruptible: required
17
+ budget: { panel: 200-500ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: press-feedback
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/review-animations/STANDARDS.md (physicality — press feedback; duration table) + improve-animations/AUDIT.md §2-3"
6
+ license: open
7
+ feel: "160ms scale-to-0.97 on pointer-down reads tactile and instant; slower or absent reads dead under the finger"
8
+ aliases: { dead: "no press feedback at all, or duration pushed above the 160ms control budget", mushy: "an easing softer than ease-out, delaying the visible response" }
9
+ ---
10
+ Any pressable control — buttons, icon buttons, tap-target rows. The canon prescribes this on every pressable element while forbidding animation on keyboard-initiated actions: it fires on pointer-down only (a tap affordance, not a state transition), and keyboard activation (Enter/Space) never replays it.
11
+
12
+ ```yaml values
13
+ duration: 160ms
14
+ easing: cubic-bezier(0.23, 1, 0.32, 1)
15
+ element-class: control
16
+ interruptible: n/a
17
+ budget: { control: 100-160ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: progress-linear-loop
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/review-animations/STANDARDS.md (easing decision order — constant motion → linear) + animation-vocabulary/SKILL.md (Loop; Marquee); Material's linear token agrees as secondary"
6
+ license: open
7
+ feel: "a constant linear sweep reads honest about an unknown wait; any easing that speeds up and slows down reads like a fake promise"
8
+ aliases: { "fake-promise": "eased (non-linear) motion on an indeterminate progress indicator, implying a completion point that doesn't exist", twitchy: "loop cycle faster than ~1s, reading anxious rather than calm" }
9
+ ---
10
+ Indeterminate progress bars, loading spinners, marquees. Constant-speed motion only — the one place `linear` is correct and `ease` curves are wrong.
11
+
12
+ ```yaml values
13
+ duration: 1200ms (loop)
14
+ easing: linear
15
+ element-class: control
16
+ interruptible: n/a
17
+ budget: { control: 1000-1500ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: route-crossfade
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/animation-vocabulary/SKILL.md (Crossfade; Page transition) + review-animations/STANDARDS.md (sub-300ms rule; masking imperfect crossfades; easing decision order — opacity/color → ease)"
6
+ license: open
7
+ feel: "a single ~250ms crossfade between views reads like one continuous product; a staggered reveal of each panel on arrival reads like a slideshow"
8
+ aliases: { slideshow: "child elements staggering in individually on route arrival instead of one crossfade", "double-exposed": "old and new view both fully visible mid-transition — mask with a subtle blur (~2px, never above 20px)" }
9
+ ---
10
+ Navigating between routes or top-level views — a same-place opacity morph, not a spatial entrance, so `ease` rather than the entrance curve. One crossfade only; never an orchestrated sequence of the destination's own elements arriving one by one. A product loads into a task, not a reveal.
11
+
12
+ ```yaml values
13
+ duration: 250ms
14
+ easing: ease
15
+ element-class: page
16
+ interruptible: n/a
17
+ budget: { page: 200-300ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: rubber-band-overscroll
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/animation-vocabulary/SKILL.md (Rubber-banding) + apple-design/SKILL.md §8 (boundary resistance) and spring cheat-sheet (critically-damped default)"
6
+ license: open
7
+ feel: "resistance that grows the further you pull, then a quick snap-back, reads alive and physical; a hard stop at the edge reads frozen"
8
+ aliases: { frozen: "a hard stop at the scroll boundary instead of progressive resistance", overshoot: "snap-back overshoots past the origin instead of settling cleanly" }
9
+ ---
10
+ Scrollable containers and pull-to-refresh regions at their boundary. Resistance increases continuously with drag distance past the edge; release animates back with a critically-damped spring, never a linear tween.
11
+
12
+ ```yaml values
13
+ duration: 300ms (snap-back)
14
+ easing: spring(damping increases near boundary)
15
+ element-class: page
16
+ interruptible: required
17
+ budget: { page: 200-400ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: skeleton-shimmer
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/animation-vocabulary/SKILL.md (Skeleton/Shimmer) + review-animations/STANDARDS.md (easing decision order — constant motion → linear)"
6
+ license: open
7
+ feel: "a slow, continuous sheen reads like content is genuinely on its way; a fast or jittery shimmer reads anxious"
8
+ aliases: { anxious: "shimmer cycle faster than ~1s, reading twitchy instead of calm", stuck: "a static placeholder with no shimmer at all, giving no sense of progress" }
9
+ ---
10
+ Loading placeholders for cards, rows, and detail panes before content resolves. Runs as a continuous ambient loop, exempt from the sub-300ms UI budget (constant-motion class); swap to real content with a quick crossfade, not a hard cut.
11
+
12
+ ```yaml values
13
+ duration: 1400ms (loop)
14
+ easing: linear
15
+ element-class: list-item
16
+ interruptible: n/a
17
+ budget: { list-item: 1200-1600ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: stagger-arrive
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/review-animations/STANDARDS.md (stagger — 30-80ms, decorative, never blocks interaction)"
6
+ license: open
7
+ feel: "a ~50ms cascade with a small upward drift reads considered; everything landing at once reads dumped, and gaps above 80ms read slow"
8
+ aliases: { dumped: "no stagger at all on a multi-item entrance", draggy: "per-item stagger delay above the 80ms budget" }
9
+ ---
10
+ List and grid entrances for freshly-loaded content within a task (search results, new rows) — never on initial page load or route arrival (no orchestrated load sequences). Purely decorative — must never delay the list becoming interactive; keep the per-item delay inside 30-80ms so a ten-row list finishes well under half a second.
11
+
12
+ ```yaml values
13
+ duration: 300ms
14
+ easing: cubic-bezier(0.23, 1, 0.32, 1)
15
+ element-class: list-item
16
+ interruptible: n/a
17
+ budget: { list-item: 250-350ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: toast-enter-stack
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/review-animations/STANDARDS.md (interruptibility — toast transition example; cohesion — the Sonner register)"
6
+ license: open
7
+ feel: "a 400ms transition-based stack reads calm even when toasts pile up fast; a keyframe stack reads jumpy every time a new one lands"
8
+ aliases: { jumpy: "@keyframes restarting already-stacked toasts instead of one continuous transition retargeting them", jarring: "no @starting-style/mount fallback, so the first toast snaps in with no entrance" }
9
+ ---
10
+ Toast/notification stacks. A new arrival must not restart the position transition of toasts already stacked — everything reflows on one continuous transition, never per-toast keyframes.
11
+
12
+ ```yaml values
13
+ duration: 400ms
14
+ easing: ease
15
+ element-class: overlay
16
+ interruptible: required
17
+ budget: { overlay: 300-450ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: tooltip-chain-instant
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/emil-design-eng/SKILL.md (tooltip-chaining example) + review-animations/STANDARDS.md (duration table, tooltip row; perceived performance)"
6
+ license: open
7
+ feel: "the first tooltip's 125ms fade-and-lift reads considered; every later tooltip in the same toolbar should read instant, with zero animation"
8
+ aliases: { "laggy-toolbar": "every tooltip in a group replaying the full delay+animation instead of chaining to instant after the first", floaty: "duration above the small-popover budget" }
9
+ ---
10
+ Tooltips, especially adjacent ones in a toolbar. First open: full delay + animation. While the pointer stays within the tooltip group, later tooltips switch to 0ms — this is the frequency law being satisfied, not an exception to it.
11
+
12
+ ```yaml values
13
+ duration: 125ms
14
+ easing: cubic-bezier(0.23, 1, 0.32, 1)
15
+ element-class: control
16
+ interruptible: n/a
17
+ budget: { control: 0-200ms }
18
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ id: trigger-anchored-reveal
3
+ class: a6
4
+ sourced: 2026-07-12
5
+ source: "emilkowalski.skills/skills/review-animations/STANDARDS.md (physicality — origin-aware popovers; duration table, dropdown row) + improve-animations/AUDIT.md §3"
6
+ license: open
7
+ feel: "growing out of the trigger at ~200ms reads anchored and native; center-scale or scale(0) reads like a random popup"
8
+ aliases: { disconnected: "transform-origin left at center instead of the trigger element", glitchy: "scale(0) start instead of scale(0.9-0.97) + opacity" }
9
+ ---
10
+ Popovers, dropdowns, select menus, tooltips. `transform-origin` follows the trigger (Radix/Base UI expose it as a CSS var); never centers. Rapid open/close/open must retarget, not restart.
11
+
12
+ ```yaml values
13
+ duration: 200ms
14
+ easing: cubic-bezier(0.23, 1, 0.32, 1)
15
+ element-class: overlay
16
+ interruptible: required
17
+ budget: { overlay: 150-250ms }
18
+ ```
@@ -0,0 +1,34 @@
1
+ id,tell,category,provenance,sourced,status
2
+ tell-001,"every shadow set to zero and every border the same 1px gray — structure without a single elevation decision",wireframe-smell,"design-skill 01 §E5; impeccable detector registry",2026-07-12,active
3
+ tell-002,"rounded-square icon tile stacked above the heading on every card — the universal generated feature-card template",template,"impeccable detector registry (icon-tile-stack)",2026-07-12,active
4
+ tell-003,"cards nested inside cards — double borders and stacked radii standing in for hierarchy",card-abuse,"impeccable detector registry (nested-cards); design-skill 01 §E5",2026-07-12,active
5
+ tell-004,"thick colored stripe down one edge of a card as the accent device",accent-abuse,"impeccable detector registry (side-tab); design-skill 01 §E5",2026-07-12,active
6
+ tell-005,"accent border wrapped around a rounded card — the stripe fighting the corner radius",accent-abuse,"impeccable detector registry (border-accent-on-rounded)",2026-07-12,active
7
+ tell-006,"hero-metric template — a row of identical stat tiles each icon + label + big number, with no comparison, trend, state, or door",template,"design-skill 01 §E5; b2b-ux-patterns dashboards chapter",2026-07-12,active
8
+ tell-007,"cream or warm-beige page surface reached by reflex as the tasteful default",palette,"impeccable detector registry (cream-palette); taste-skill §9.A; design-skill 01 §A2 anti-cream guardband",2026-07-12,active
9
+ tell-008,"ghost cards — bordered or shadowed containers wrapping a single short text run or nothing at all",card-abuse,"design-skill 01 §E5",2026-07-12,active
10
+ tell-009,"purple-violet gradients and cyan-on-dark as the default accent scheme",palette,"impeccable detector registry (ai-color-palette)",2026-07-12,active
11
+ tell-010,"dark theme expressed as colored box-shadow glows instead of a surface-lightness ladder",palette,"impeccable detector registry (dark-glow); design-skill 01 §A3 dark ladder",2026-07-12,active
12
+ tell-011,"gradient fills on heading or metric text",typography,"impeccable detector registry (gradient-text)",2026-07-12,active
13
+ tell-012,"flat type ramp — adjacent sizes too close together to carry hierarchy anywhere on the surface",typography,"impeccable detector registry (flat-type-hierarchy)",2026-07-12,active
14
+ tell-013,"one spacing value everywhere — no tight grouping of related controls, no generous seams between sections",layout,"impeccable detector registry (monotonous-spacing)",2026-07-12,active
15
+ tell-014,"hairline border and a wide diffuse shadow on the same container — two elevation systems at once",elevation,"impeccable detector registry (generated-UI signature set)",2026-07-12,active
16
+ tell-015,"decorative two-axis hairline grid background behind a surface that is not a canvas, map, or measurement view",template,"impeccable detector registry (generated-UI signature set)",2026-07-12,active
17
+ tell-016,"numbered section markers (01 / 02 / 03) as structural scaffolding",template,"impeccable detector registry (numbered-section-markers); taste-skill §9.F",2026-07-12,active
18
+ tell-017,"tiny uppercase letter-spaced kicker label repeated above every section heading",template,"impeccable detector registry (repeated-section-kickers)",2026-07-12,active
19
+ tell-018,"colored status dots decorating every nav item, row, or badge with no real state behind them",chrome,"taste-skill §9.F production-observed tells",2026-07-12,active
20
+ tell-019,"middle-dot chains as the default separator for every metadata strip",chrome,"taste-skill §9.F production-observed tells",2026-07-12,active
21
+ tell-020,"top and bottom hairline borders on every row of a long table or spec list",wireframe-smell,"taste-skill §9.F production-observed tells",2026-07-12,active
22
+ tell-021,"fake build or version strings as decoration where no real build data exists",demo-content,"taste-skill §9.F production-observed tells",2026-07-12,active
23
+ tell-022,"placeholder-generic person names in demo data (the John Doe class)",demo-content,"taste-skill §9.D (Jane Doe effect); design-skill 01 §E5",2026-07-12,active
24
+ tell-023,"the same gray egg or user-icon avatar on every person row",demo-content,"taste-skill §9.D production-observed tells",2026-07-12,active
25
+ tell-024,"fake-perfect numbers — round percentages, sequential IDs, totals that reconcile too neatly",demo-content,"taste-skill §9.D; design-skill 01 §E5",2026-07-12,active
26
+ tell-025,"startup-slop company names in demo data (the Acme / Nexus / Cloudly class)",demo-content,"taste-skill §9.D production-observed tells",2026-07-12,active
27
+ tell-026,"marketing buzzwords in interface copy (streamline, empower, supercharge, enterprise-grade)",copy,"impeccable detector registry (marketing-buzzword); taste-skill §9.D",2026-07-12,active
28
+ tell-027,"em-dash-heavy microcopy — the character recurring across labels, empty states, and tooltips",copy,"taste-skill §9.G; impeccable detector registry (em-dash-overuse)",2026-07-12,active
29
+ tell-028,"transition: all on interactive elements",motion,"design-skill 02 ship-gate Tier-2 motion tells",2026-07-12,active
30
+ tell-029,"ease-in easing on an entrance",motion,"design-skill 02 ship-gate Tier-2 motion tells; emilkowalski motion canon",2026-07-12,active
31
+ tell-030,"animation attached to a keyboard-triggered action",motion,"design-skill 02 ship-gate Tier-2 motion tells; emilkowalski frequency law",2026-07-12,active
32
+ tell-031,"bounce or elastic easing on product chrome",motion,"impeccable detector registry (bounce-easing)",2026-07-12,active
33
+ tell-032,"width, height, padding, or margin animated instead of transform and opacity",motion,"impeccable detector registry (layout-transition)",2026-07-12,active
34
+ tell-033,"orchestrated staggered entrance choreography on a work surface — a product loads into a task",motion,"design-skill 01 §A6 admission criteria; emilkowalski motion canon",2026-07-12,active
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: anton-work-sans
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Fontpair.co bold/brutalist list; Google Fonts; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "loud condensed poster headline against a quiet neutral body — maximum contrast"
8
+ ---
9
+ Anton is a single static weight built for shouting — a handful of words at most, never a sentence; Work Sans absorbs every remaining functional role at a calm, neutral register.
10
+
11
+ ```yaml values
12
+ display: { family: "Anton", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400] }
13
+ sans: { family: "Work Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600] }
14
+ mono: { family: "Roboto Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["poster headlines", "hero words", "cover moments"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["code", "data values"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: archivo-black-archivo
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Fontpair.co brutalist list; Google Fonts (Omnibus-Type superfamily); families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "brutalist poster energy tempered by a disciplined variable-width grotesque body"
8
+ ---
9
+ Archivo Black is a single static 900-weight cut reserved for shock headlines; Archivo Variable (same foundry, wdth+wght axes) runs everything else, including a condensed width option for dense tables.
10
+
11
+ ```yaml values
12
+ display: { family: "Archivo Black", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400] }
13
+ sans: { family: "Archivo Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["poster headlines", "hero statements", "cover moments"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["code", "data"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: bitter-karla
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Google Fonts featured pairings; Fontpair.co warm-approachable list; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "friendly slab warmth over a soft, low-contrast grotesque"
8
+ ---
9
+ A gentle, approachable pairing for product blogs and onboarding flows that want warmth without going fully editorial; both faces are fully variable so weight can carry hierarchy inside each role too.
10
+
11
+ ```yaml values
12
+ display: { family: "Bitter Variable", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400, 600, 700] }
13
+ sans: { family: "Karla Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600, 700] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["headlines", "hero banners", "cover cards"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["code", "IDs"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: dm-serif-dm-sans
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Google Fonts featured pairings (Colophon Foundry twin release); Fontpair.co; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "quiet warmth from two faces drawn by the same studio in one release"
8
+ ---
9
+ The shared authorship keeps x-heights and rhythm aligned without matching stroke contrast — a low-friction pairing for blogs, newsletters, and about-pages that want a soft editorial voice. DM Serif Display ships as a single static weight; treat it as a display voice, not a workhorse.
10
+
11
+ ```yaml values
12
+ display: { family: "DM Serif Display", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400] }
13
+ sans: { family: "DM Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600, 700] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["pull quotes", "hero statements", "identity lockups"], sans: ["body copy", "nav", "buttons", "form labels", "table cells"], mono: ["code samples", "technical asides"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: fraunces-inter
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Fontpair.co warm-editorial list; Fonts In Use case studies tagged Fraunces; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "expressive, ink-trap warmth over a clean, quiet product sans"
8
+ ---
9
+ Fraunces carries optical-size (opsz) and WONK/SOFT axes — dial WONK toward 0 and keep opsz high for a calmer display cut in dense layouts; Inter runs the rest of the interface untouched.
10
+
11
+ ```yaml values
12
+ display: { family: "Fraunces Variable", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400, 500, 600, 900] }
13
+ sans: { family: "Inter Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600, 700] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["hero headlines", "cover moments", "editorial pull quotes"], sans: ["body copy", "UI labels", "buttons", "form fields", "table cells"], mono: ["code blocks", "data/IDs"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: geist-geist-mono
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Vercel's production type system, Geist Sans + Geist Mono (Vercel with Basement Studio, OFL, added to Google Fonts Oct/Nov 2024); families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "quiet, engineered product register — a single studio's sans and mono built as one system"
8
+ ---
9
+ Dense-operator-adjacent: Geist Variable carries both identity moments (heavier weight) and body/UI (regular weight) as the same family, exactly as Vercel ships it on vercel.com and in Next.js docs; Geist Mono is the real sibling mono, not a substitution.
10
+
11
+ ```yaml values
12
+ display: { family: "Geist Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [600, 700] }
13
+ sans: { family: "Geist Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500] }
14
+ mono: { family: "Geist Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["hero headlines", "page titles", "top-nav wordmark"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["code blocks", "terminal output", "IDs"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: hubot-sans-mona-sans
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "GitHub's production brand/UI system, Hubot Sans + Mona Sans (GitHub with Degarism Studio, OFL, added to Google Fonts Nov 2024); families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "friendly technical brand voice — an expressive geometric display over a workhorse variable UI face"
8
+ ---
9
+ Hubot Sans is GitHub's display/wordmark face (wide, geometric, confident); Mona Sans is the UI workhorse (wdth+wght axes) for everything functional. Note: GitHub's real code font, Monaspace, is OFL-licensed but not published to Google Fonts — JetBrains Mono is substituted here and should be swapped for Monaspace directly from GitHub's own distribution if code-block authenticity matters.
10
+
11
+ ```yaml values
12
+ display: { family: "Hubot Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [500, 700] }
13
+ sans: { family: "Mona Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["brand lockups", "hero headlines", "cover moments"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["code blocks", "terminal output", "diffs"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: ibm-plex-sans-operator-single-family
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "IBM's own Plex type system (Mike Abbink / Bold Monday); Typ.io; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "humanist technical register, one family carrying the entire hierarchy by weight and width"
8
+ ---
9
+ Dense-operator entry: IBM Plex Sans Variable (wdth+wght axes) covers both display and sans roles — use 600 weight or a narrower width cut for identity moments only, never for table cells or buttons. Plex Mono (static, same foundry) completes the trio for code and data.
10
+
11
+ ```yaml values
12
+ display: { family: "IBM Plex Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [600, 700] }
13
+ sans: { family: "IBM Plex Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500] }
14
+ mono: { family: "IBM Plex Mono", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500, 600] }
15
+ register-scope: { display: ["page titles", "dashboard section headers", "empty states"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["code", "logs", "data/IDs"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: instrument-serif-instrument-sans
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Google Fonts (Instrument design agency twin release, 2023); Fonts In Use recent uploads; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "bright, high-contrast serif flashes against a friendly variable-width grotesque"
8
+ ---
9
+ Instrument Serif ships one weight and an italic only — treat it as a flourish face for a handful of words, never a paragraph; Instrument Sans carries every functional role including its own width axis for compact table headers.
10
+
11
+ ```yaml values
12
+ display: { family: "Instrument Serif", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400] }
13
+ sans: { family: "Instrument Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600, 700] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["hero words", "short pull quotes", "identity lockups"], sans: ["body copy", "buttons", "form labels", "table cells", "dense UI"], mono: ["code", "data values"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: inter-operator-single-family
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Linear's production UI stack (Inter, confirmed — Linear does not ship a custom typeface); Google Fonts; family verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "precise, restrained SaaS operator surface carried entirely by weight"
8
+ ---
9
+ Dense-operator entry: display and sans are the same registered family — identity moments (page titles, top-nav wordmark) take weight 600–700 of Inter Variable itself rather than a separate face; body/UI stays at 400–500. No display face touches table cells or buttons.
10
+
11
+ ```yaml values
12
+ display: { family: "Inter Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [600, 700] }
13
+ sans: { family: "Inter Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["page titles", "top-nav wordmark", "empty-state headlines"], sans: ["body copy", "buttons", "form labels", "table cells", "nav items"], mono: ["code", "IDs", "timestamps", "numeric data"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: libre-baskerville-libre-franklin
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Fontpair.co classic-serif list; Google Fonts (both by Impallari Type); families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "quiet civic literary register, restrained by shared foundry discipline"
8
+ ---
9
+ Libre Baskerville is a classic-book face with no variable axis and only three cuts — use it sparingly for titles; Libre Franklin's full variable range does the rest of the civic/documentation work.
10
+
11
+ ```yaml values
12
+ display: { family: "Libre Baskerville", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400, 700] }
13
+ sans: { family: "Libre Franklin Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600, 700] }
14
+ mono: { family: "IBM Plex Mono", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["report titles", "cover pages", "section headers"], sans: ["body copy", "buttons", "form labels", "table cells"], mono: ["citations", "reference codes"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: newsreader-inter
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Google Fonts (Production Type, built for a Google News reading initiative); Typ.io case-study tag; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "hushed, long-form literary register that shrinks gracefully at small sizes"
8
+ ---
9
+ Newsreader's opsz axis is the point — let it size itself down for dense captions and up for display; pair only with a body sans that disappears, which Inter is built to do.
10
+
11
+ ```yaml values
12
+ display: { family: "Newsreader Variable", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400, 500, 600] }
13
+ sans: { family: "Inter Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600] }
14
+ mono: { family: "Roboto Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["article headlines", "pull quotes", "cover text"], sans: ["body copy", "nav", "buttons", "form labels", "table cells"], mono: ["timestamps", "citations", "code refs"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: playfair-display-source-sans
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Fontpair.co classic-pairings list; Typ.io Adobe-fonts popularity data; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "broadsheet gravity meeting a disciplined newsroom reading face"
8
+ ---
9
+ Use for long-form editorial and reports where headlines need didone drama but body copy must stay quiet and legible; the mono is a substitution note, not part of the source pairing — bring it in only if the surface needs inline code or IDs.
10
+
11
+ ```yaml values
12
+ display: { family: "Playfair Display Variable", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400, 600, 700, 900] }
13
+ sans: { family: "Source Sans 3 Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600, 700] }
14
+ mono: { family: "IBM Plex Mono", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500, 600] }
15
+ register-scope: { display: ["cover titles", "hero headlines", "section dividers"], sans: ["body copy", "captions", "buttons", "form labels", "table cells"], mono: ["figure references", "dataset IDs", "code snippets"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: public-sans-operator-single-family
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "U.S. Web Design System (USWDS) production typeface, Public Sans (18F/USWDS, Google Fonts); families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "quiet civic register, weight-carried hierarchy built for dense government data tables"
8
+ ---
9
+ Dense-operator entry: Public Sans Variable is the entire system — no separate display face. Identity moments take 600-700 weight; every table cell, form label, and button stays at 400-500. Built explicitly for accessibility-first government services, so it is the most conservative entry in this set.
10
+
11
+ ```yaml values
12
+ display: { family: "Public Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [600, 700] }
13
+ sans: { family: "Public Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500] }
14
+ mono: { family: "Roboto Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["page titles", "section headers", "identity moments"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["reference codes", "data values"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: sohne-inter-fintech
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Stripe's production marketing/dashboard stack — Söhne, a commercial Klim Type Foundry license (released 2019), reported via industry SaaS-typography surveys; open substitutes verified live against fonts.google.com/metadata/fonts"
6
+ license: licensed
7
+ feel: "fintech institutional precision — a paid grotesque for identity, an open workhorse for everything else"
8
+ ---
9
+ Söhne is a commercial Klim Type Foundry release, NOT distributed via Google Fonts — license it directly from Klim (or use the system-font fallback stack as a placeholder) before shipping; Inter Variable is the open substitute carrying every UI, table, and form role so the licensed face never has to.
10
+
11
+ ```yaml values
12
+ display: { family: "Söhne", fallback: "system-ui, -apple-system, \"Segoe UI\", sans-serif", weights: [400, 500, 700] }
13
+ sans: { family: "Inter Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600] }
14
+ mono: { family: "JetBrains Mono Variable", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["marketing hero type", "brand lockups", "cover moments"], sans: ["body copy", "buttons", "form labels", "table cells", "dashboard UI"], mono: ["code", "API examples", "numeric data"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: source-serif-source-sans
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Adobe/Google Fonts superfamily (Source series); Typ.io Adobe-fonts popularity list; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "quiet institutional register — one design lineage front to back"
8
+ ---
9
+ Both faces share a metrics philosophy from the same Adobe type team, so swapping serif-for-sans mid-document (report body to callout) never jars; good for documentation, legal, and internal-tool surfaces that want restraint over personality.
10
+
11
+ ```yaml values
12
+ display: { family: "Source Serif 4 Variable", fallback: "Georgia, Cambria, \"Times New Roman\", serif", weights: [400, 500, 600] }
13
+ sans: { family: "Source Sans 3 Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600, 700] }
14
+ mono: { family: "IBM Plex Mono", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 500] }
15
+ register-scope: { display: ["document titles", "section headers", "cover pages"], sans: ["body copy", "buttons", "form labels", "table cells", "nav"], mono: ["reference IDs", "code", "version strings"] }
16
+ oracle-verified: 2026-07-12
17
+ ```
@@ -0,0 +1,17 @@
1
+ ---
2
+ id: space-grotesk-work-sans-space-mono
3
+ class: a1
4
+ sourced: 2026-07-12
5
+ source: "Fontpair.co technical/startup list; Google Fonts; families verified live against fonts.google.com/metadata/fonts"
6
+ license: open
7
+ feel: "geometric technical display over a neutral working body, monospace for code accents"
8
+ ---
9
+ A three-role technical system: Space Grotesk's squarish geometry announces sections, Work Sans stays out of the way for body copy, and its Colophon Foundry sibling Space Mono (static, 4 cuts) marks code — a common indie-SaaS combination.
10
+
11
+ ```yaml values
12
+ display: { family: "Space Grotesk Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [500, 700] }
13
+ sans: { family: "Work Sans Variable", fallback: "\"Helvetica Neue\", Arial, sans-serif", weights: [400, 500, 600] }
14
+ mono: { family: "Space Mono", fallback: "\"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace", weights: [400, 700] }
15
+ register-scope: { display: ["section headers", "hero headlines", "feature callouts"], sans: ["body copy", "buttons", "form labels", "table cells"], mono: ["code", "terminal output", "data values"] }
16
+ oracle-verified: 2026-07-12
17
+ ```