@dsalazardev/ai-hub-cli 0.0.0-stage → 0.2.0

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 (1296) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +34 -0
  3. package/README.md +64 -2
  4. package/agents/cpp-build-resolver.md +25 -0
  5. package/agents/cpp-reviewer.md +28 -0
  6. package/agents/csharp-reviewer.md +28 -0
  7. package/agents/django-build-resolver.md +25 -0
  8. package/agents/django-reviewer.md +28 -0
  9. package/agents/explorer-domain.md +28 -0
  10. package/agents/fastapi-reviewer.md +28 -0
  11. package/agents/flutter-build-resolver.md +25 -0
  12. package/agents/flutter-reviewer.md +28 -0
  13. package/agents/go-build-resolver.md +25 -0
  14. package/agents/go-reviewer.md +28 -0
  15. package/agents/implementer-backend.md +30 -0
  16. package/agents/implementer-frontend.md +30 -0
  17. package/agents/java-build-resolver.md +26 -0
  18. package/agents/java-reviewer.md +29 -0
  19. package/agents/kotlin-build-resolver.md +25 -0
  20. package/agents/kotlin-reviewer.md +28 -0
  21. package/agents/mle-reviewer.md +28 -0
  22. package/agents/php-reviewer.md +29 -0
  23. package/agents/postgres-reviewer.md +28 -0
  24. package/agents/python-reviewer.md +28 -0
  25. package/agents/pytorch-build-resolver.md +25 -0
  26. package/agents/rag-reviewer.md +28 -0
  27. package/agents/react-build-resolver.md +26 -0
  28. package/agents/react-reviewer.md +29 -0
  29. package/agents/reviewer-architecture.md +32 -0
  30. package/agents/reviewer-tests.md +31 -0
  31. package/agents/rust-build-resolver.md +25 -0
  32. package/agents/rust-reviewer.md +28 -0
  33. package/agents/spec-author.md +36 -0
  34. package/agents/spec-miner.md +14 -0
  35. package/agents/swift-build-resolver.md +25 -0
  36. package/agents/swift-reviewer.md +28 -0
  37. package/agents/typescript-reviewer.md +28 -0
  38. package/agents/vue-reviewer.md +28 -0
  39. package/dist/backup/snapshots.d.ts +24 -0
  40. package/dist/backup/snapshots.js +171 -0
  41. package/dist/bin/ai-hub.d.ts +2 -0
  42. package/dist/bin/ai-hub.js +11 -0
  43. package/dist/catalog.d.ts +76 -0
  44. package/dist/catalog.js +321 -0
  45. package/dist/cli/args.d.ts +4 -0
  46. package/dist/cli/args.js +63 -0
  47. package/dist/cli/context.d.ts +7 -0
  48. package/dist/cli/context.js +79 -0
  49. package/dist/cli/doctor.d.ts +14 -0
  50. package/dist/cli/doctor.js +282 -0
  51. package/dist/cli/drift.d.ts +2 -0
  52. package/dist/cli/drift.js +34 -0
  53. package/dist/cli/items.d.ts +5 -0
  54. package/dist/cli/items.js +10 -0
  55. package/dist/cli/legacy.d.ts +3 -0
  56. package/dist/cli/legacy.js +18 -0
  57. package/dist/cli/maintenance.d.ts +8 -0
  58. package/dist/cli/maintenance.js +334 -0
  59. package/dist/cli/memory.d.ts +2 -0
  60. package/dist/cli/memory.js +89 -0
  61. package/dist/cli/onboarding.d.ts +36 -0
  62. package/dist/cli/onboarding.js +516 -0
  63. package/dist/cli/run.d.ts +15 -0
  64. package/dist/cli/run.js +185 -0
  65. package/dist/cli/source.d.ts +5 -0
  66. package/dist/cli/source.js +22 -0
  67. package/dist/cli/trunk.d.ts +8 -0
  68. package/dist/cli/trunk.js +54 -0
  69. package/dist/cli/types.d.ts +17 -0
  70. package/dist/cli/types.js +4 -0
  71. package/dist/cli/worktrees.d.ts +11 -0
  72. package/dist/cli/worktrees.js +141 -0
  73. package/dist/concurrency.d.ts +5 -0
  74. package/dist/concurrency.js +23 -0
  75. package/dist/engine/engine.d.ts +48 -0
  76. package/dist/engine/engine.js +114 -0
  77. package/dist/engine/gates.d.ts +2 -0
  78. package/dist/engine/gates.js +131 -0
  79. package/dist/frontmatter.d.ts +11 -0
  80. package/dist/frontmatter.js +30 -0
  81. package/dist/harness/guards/adapters/context.d.ts +19 -0
  82. package/dist/harness/guards/adapters/context.js +153 -0
  83. package/dist/harness/guards/adapters/hermes.d.ts +13 -0
  84. package/dist/harness/guards/adapters/hermes.js +18 -0
  85. package/dist/harness/guards/adapters/hooks.d.ts +25 -0
  86. package/dist/harness/guards/adapters/hooks.js +52 -0
  87. package/dist/harness/guards/branch.d.ts +5 -0
  88. package/dist/harness/guards/branch.js +43 -0
  89. package/dist/harness/guards/danger.d.ts +13 -0
  90. package/dist/harness/guards/danger.js +157 -0
  91. package/dist/harness/guards/index.d.ts +6 -0
  92. package/dist/harness/guards/index.js +6 -0
  93. package/dist/harness/guards/preflight.d.ts +14 -0
  94. package/dist/harness/guards/preflight.js +37 -0
  95. package/dist/harness/guards/ship.d.ts +2 -0
  96. package/dist/harness/guards/ship.js +35 -0
  97. package/dist/harness/guards/trunk.d.ts +5 -0
  98. package/dist/harness/guards/trunk.js +41 -0
  99. package/dist/harness/guards/types.d.ts +50 -0
  100. package/dist/harness/guards/types.js +1 -0
  101. package/dist/harness/memory/ledger.d.ts +53 -0
  102. package/dist/harness/memory/ledger.js +136 -0
  103. package/dist/harness/memory/state.d.ts +35 -0
  104. package/dist/harness/memory/state.js +121 -0
  105. package/dist/harness/worktree/reaper.d.ts +32 -0
  106. package/dist/harness/worktree/reaper.js +54 -0
  107. package/dist/manifest/build.d.ts +1 -0
  108. package/dist/manifest/build.js +1 -0
  109. package/dist/manifest/cli.d.ts +2 -0
  110. package/dist/manifest/cli.js +44 -0
  111. package/dist/manifest/dispatch.d.ts +13 -0
  112. package/dist/manifest/dispatch.js +36 -0
  113. package/dist/manifest/labels.d.ts +15 -0
  114. package/dist/manifest/labels.js +70 -0
  115. package/dist/manifest/manifest.d.ts +130 -0
  116. package/dist/manifest/manifest.js +220 -0
  117. package/dist/package-info.d.ts +4 -0
  118. package/dist/package-info.js +7 -0
  119. package/dist/paths.d.ts +33 -0
  120. package/dist/paths.js +123 -0
  121. package/dist/presets/detect.d.ts +24 -0
  122. package/dist/presets/detect.js +116 -0
  123. package/dist/presets/materialize.d.ts +26 -0
  124. package/dist/presets/materialize.js +192 -0
  125. package/dist/presets/resolve.d.ts +37 -0
  126. package/dist/presets/resolve.js +83 -0
  127. package/dist/presets/schema.d.ts +57 -0
  128. package/dist/presets/schema.js +68 -0
  129. package/dist/source-checkout.d.ts +8 -0
  130. package/dist/source-checkout.js +19 -0
  131. package/dist/sync/config.d.ts +47 -0
  132. package/dist/sync/config.js +85 -0
  133. package/dist/sync/lock.d.ts +16 -0
  134. package/dist/sync/lock.js +43 -0
  135. package/dist/sync/render.d.ts +18 -0
  136. package/dist/sync/render.js +259 -0
  137. package/dist/sync/sync.d.ts +38 -0
  138. package/dist/sync/sync.js +288 -0
  139. package/dist/sync/targets.d.ts +24 -0
  140. package/dist/sync/targets.js +78 -0
  141. package/engine/coupling.json +4 -0
  142. package/engine/engine.yaml +250 -0
  143. package/engine/legacy-paths.json +4 -0
  144. package/engine/preflight.md +11 -0
  145. package/manifest.json +402 -0
  146. package/package.json +62 -4
  147. package/presets/angular-express/harness/rules/01-zero-any.sh +25 -0
  148. package/presets/angular-express/harness/rules/02-no-ng-module.sh +21 -0
  149. package/presets/angular-express/harness/rules/03-no-constructor-injection.sh +21 -0
  150. package/presets/angular-express/harness/rules/04-no-legacy-directives.sh +21 -0
  151. package/presets/angular-express/harness/rules/05-no-dolibarrdal-inheritance.sh +25 -0
  152. package/presets/angular-express/harness/rules/06-no-todos.sh +22 -0
  153. package/presets/angular-express/harness/run-all.sh +13 -0
  154. package/presets/angular-express/preset.yaml +53 -0
  155. package/presets/angular-express/references/common-imports-catalog.md +146 -0
  156. package/presets/angular-express/references/fichajes-migration-notes.md +57 -0
  157. package/presets/angular-express/references/module-implementation-flow.md +260 -0
  158. package/presets/angular-express/references/products-coding-standard.md +143 -0
  159. package/presets/angular-express/references/products-module-blueprint.md +860 -0
  160. package/presets/angular-express/references/replicate-module-checklist.md +72 -0
  161. package/presets/angular-express/references/users-migration-notes.md +172 -0
  162. package/presets/angular-express/rules/architecture.md +8 -0
  163. package/presets/angular-express/rules/backend.md +4 -0
  164. package/presets/angular-express/rules/frontend.md +53 -0
  165. package/presets/angular-express/skills/angular-developer/SKILL.md +130 -0
  166. package/presets/angular-express/skills/angular-developer/references/angular-animations.md +160 -0
  167. package/presets/angular-express/skills/angular-developer/references/angular-aria.md +410 -0
  168. package/presets/angular-express/skills/angular-developer/references/cli.md +86 -0
  169. package/presets/angular-express/skills/angular-developer/references/component-harnesses.md +59 -0
  170. package/presets/angular-express/skills/angular-developer/references/component-styling.md +91 -0
  171. package/presets/angular-express/skills/angular-developer/references/components.md +117 -0
  172. package/presets/angular-express/skills/angular-developer/references/creating-services.md +97 -0
  173. package/presets/angular-express/skills/angular-developer/references/data-resolvers.md +69 -0
  174. package/presets/angular-express/skills/angular-developer/references/define-routes.md +67 -0
  175. package/presets/angular-express/skills/angular-developer/references/defining-providers.md +72 -0
  176. package/presets/angular-express/skills/angular-developer/references/di-fundamentals.md +120 -0
  177. package/presets/angular-express/skills/angular-developer/references/e2e-testing.md +66 -0
  178. package/presets/angular-express/skills/angular-developer/references/effects.md +83 -0
  179. package/presets/angular-express/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  180. package/presets/angular-express/skills/angular-developer/references/host-elements.md +80 -0
  181. package/presets/angular-express/skills/angular-developer/references/injection-context.md +63 -0
  182. package/presets/angular-express/skills/angular-developer/references/inputs.md +101 -0
  183. package/presets/angular-express/skills/angular-developer/references/linked-signal.md +59 -0
  184. package/presets/angular-express/skills/angular-developer/references/loading-strategies.md +61 -0
  185. package/presets/angular-express/skills/angular-developer/references/mcp.md +106 -0
  186. package/presets/angular-express/skills/angular-developer/references/migrations.md +30 -0
  187. package/presets/angular-express/skills/angular-developer/references/navigate-to-routes.md +69 -0
  188. package/presets/angular-express/skills/angular-developer/references/outputs.md +86 -0
  189. package/presets/angular-express/skills/angular-developer/references/reactive-forms.md +122 -0
  190. package/presets/angular-express/skills/angular-developer/references/rendering-strategies.md +44 -0
  191. package/presets/angular-express/skills/angular-developer/references/resource.md +74 -0
  192. package/presets/angular-express/skills/angular-developer/references/route-animations.md +56 -0
  193. package/presets/angular-express/skills/angular-developer/references/route-guards.md +52 -0
  194. package/presets/angular-express/skills/angular-developer/references/router-lifecycle.md +45 -0
  195. package/presets/angular-express/skills/angular-developer/references/router-testing.md +87 -0
  196. package/presets/angular-express/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  197. package/presets/angular-express/skills/angular-developer/references/signal-forms.md +897 -0
  198. package/presets/angular-express/skills/angular-developer/references/signals-overview.md +94 -0
  199. package/presets/angular-express/skills/angular-developer/references/tailwind-css.md +69 -0
  200. package/presets/angular-express/skills/angular-developer/references/template-driven-forms.md +114 -0
  201. package/presets/angular-express/skills/angular-developer/references/testing-fundamentals.md +66 -0
  202. package/presets/angular-express/skills/angular-new-app/SKILL.md +62 -0
  203. package/presets/angular-express/skills/frontend-design/LICENSE.txt +177 -0
  204. package/presets/angular-express/skills/frontend-design/SKILL.md +55 -0
  205. package/presets/angular-express/skills/onna-architecture-angular/SKILL.md +229 -0
  206. package/presets/angular-express/skills/onna-architecture-bff/SKILL.md +446 -0
  207. package/presets/angular-express/skills/onna-architecture-common/SKILL.md +313 -0
  208. package/presets/angular-express/skills/onna-design-system/SKILL.md +615 -0
  209. package/presets/base/preset.yaml +25 -0
  210. package/presets/base/rules/core.md +35 -0
  211. package/presets/generic-ts/preset.yaml +44 -0
  212. package/presets/python/preset.yaml +45 -0
  213. package/presets/python/rules/python.md +10 -0
  214. package/rules/skill-quality/skill-behavior-rubric.md +63 -0
  215. package/rules/skill-quality/skill-harden-rubric.md +102 -0
  216. package/rules/skill-quality/skill-migration-brief.md +200 -0
  217. package/rules/skill-quality/skill-rubric.md +40 -0
  218. package/schema/engine.schema.json +73 -0
  219. package/schema/manifest.schema.json +152 -0
  220. package/schema/preset.schema.json +98 -0
  221. package/schema/state.schema.json +27 -0
  222. package/skills/shared/ab-testing/SKILL.md +159 -0
  223. package/skills/shared/ab-testing/evals/README.md +8 -0
  224. package/skills/shared/ab-testing/evals/cases.yaml +49 -0
  225. package/skills/shared/ab-testing/references/pitfalls.md +74 -0
  226. package/skills/shared/ab-testing/references/sample-size-and-cuped.md +128 -0
  227. package/skills/shared/ab-testing/scripts/verify.sh +89 -0
  228. package/skills/shared/accessibility/SKILL.md +216 -0
  229. package/skills/shared/accessibility/evals/README.md +3 -0
  230. package/skills/shared/accessibility/evals/cases.yaml +47 -0
  231. package/skills/shared/accessibility/references/aria-patterns.md +113 -0
  232. package/skills/shared/accessibility/references/wcag22-checklist.md +83 -0
  233. package/skills/shared/accessibility/scripts/verify.sh +103 -0
  234. package/skills/shared/agent-eval/SKILL.md +187 -0
  235. package/skills/shared/agent-eval/evals/README.md +12 -0
  236. package/skills/shared/agent-eval/evals/cases.yaml +45 -0
  237. package/skills/shared/agent-eval/references/judge-design.md +118 -0
  238. package/skills/shared/agent-eval/references/runner-and-gate.md +183 -0
  239. package/skills/shared/agent-eval/scripts/verify.sh +161 -0
  240. package/skills/shared/agent-safety/SKILL.md +169 -0
  241. package/skills/shared/agent-safety/evals/README.md +12 -0
  242. package/skills/shared/agent-safety/evals/cases.yaml +46 -0
  243. package/skills/shared/agent-safety/references/threat-model.md +51 -0
  244. package/skills/shared/analyze/SKILL.md +123 -0
  245. package/skills/shared/analyze/evals/README.md +72 -0
  246. package/skills/shared/analyze/evals/cases.yaml +74 -0
  247. package/skills/shared/angular/SKILL.md +275 -0
  248. package/skills/shared/angular/evals/README.md +3 -0
  249. package/skills/shared/angular/evals/cases.yaml +38 -0
  250. package/skills/shared/angular/references/migration.md +81 -0
  251. package/skills/shared/angular/references/signals-rxjs.md +92 -0
  252. package/skills/shared/angular/scripts/verify.sh +122 -0
  253. package/skills/shared/api-connector-builder/SKILL.md +268 -0
  254. package/skills/shared/api-connector-builder/evals/README.md +11 -0
  255. package/skills/shared/api-connector-builder/evals/cases.yaml +47 -0
  256. package/skills/shared/api-connector-builder/references/auth-flows.md +132 -0
  257. package/skills/shared/api-connector-builder/references/pagination.md +144 -0
  258. package/skills/shared/api-connector-builder/scripts/verify.sh +172 -0
  259. package/skills/shared/api-design/SKILL.md +182 -0
  260. package/skills/shared/api-design/evals/README.md +3 -0
  261. package/skills/shared/api-design/evals/cases.yaml +45 -0
  262. package/skills/shared/api-design/references/graphql-design.md +70 -0
  263. package/skills/shared/api-design/references/openapi-contract.md +86 -0
  264. package/skills/shared/api-design/references/rest-conventions.md +63 -0
  265. package/skills/shared/api-design/references/versioning-and-evolution.md +49 -0
  266. package/skills/shared/api-design/scripts/verify.sh +138 -0
  267. package/skills/shared/astro/SKILL.md +257 -0
  268. package/skills/shared/astro/evals/README.md +3 -0
  269. package/skills/shared/astro/evals/cases.yaml +41 -0
  270. package/skills/shared/astro/references/content-layer.md +118 -0
  271. package/skills/shared/astro/references/deploy-and-integrations.md +163 -0
  272. package/skills/shared/astro/scripts/verify.sh +137 -0
  273. package/skills/shared/author-skill/SKILL.md +194 -0
  274. package/skills/shared/author-skill/evals/README.md +66 -0
  275. package/skills/shared/author-skill/evals/cases.yaml +75 -0
  276. package/skills/shared/author-skill/references/description-recipe.md +85 -0
  277. package/skills/shared/author-skill/references/eval-authoring.md +108 -0
  278. package/skills/shared/author-skill/references/skill-conventions.md +95 -0
  279. package/skills/shared/automation-flows/SKILL.md +122 -0
  280. package/skills/shared/automation-flows/evals/README.md +5 -0
  281. package/skills/shared/automation-flows/evals/cases.yaml +44 -0
  282. package/skills/shared/automation-flows/references/error-handling.md +58 -0
  283. package/skills/shared/automation-flows/references/n8n-workflow-json.md +63 -0
  284. package/skills/shared/automation-flows/scripts/verify.sh +78 -0
  285. package/skills/shared/aws-essentials/SKILL.md +206 -0
  286. package/skills/shared/aws-essentials/evals/README.md +10 -0
  287. package/skills/shared/aws-essentials/evals/cases.yaml +44 -0
  288. package/skills/shared/aws-essentials/references/iam-least-privilege.md +134 -0
  289. package/skills/shared/aws-essentials/references/rds-cloudfront-recipes.md +127 -0
  290. package/skills/shared/aws-essentials/scripts/verify.sh +99 -0
  291. package/skills/shared/backups/SKILL.md +131 -0
  292. package/skills/shared/backups/evals/README.md +3 -0
  293. package/skills/shared/backups/evals/cases.yaml +42 -0
  294. package/skills/shared/backups/references/engine-recipes.md +121 -0
  295. package/skills/shared/backups/references/restore-runbook.md +65 -0
  296. package/skills/shared/backups/scripts/verify.sh +80 -0
  297. package/skills/shared/bash-scripting/SKILL.md +227 -0
  298. package/skills/shared/bash-scripting/evals/README.md +3 -0
  299. package/skills/shared/bash-scripting/evals/cases.yaml +45 -0
  300. package/skills/shared/bash-scripting/references/portability.md +97 -0
  301. package/skills/shared/bash-scripting/scripts/verify.sh +140 -0
  302. package/skills/shared/building-agents/SKILL.md +386 -0
  303. package/skills/shared/building-agents/evals/README.md +68 -0
  304. package/skills/shared/building-agents/evals/cases.yaml +60 -0
  305. package/skills/shared/building-agents/references/agent-loops-and-harness.md +371 -0
  306. package/skills/shared/building-agents/references/evals-and-observability.md +420 -0
  307. package/skills/shared/building-agents/references/mcp-servers.md +294 -0
  308. package/skills/shared/building-agents/references/provider-abstraction.md +489 -0
  309. package/skills/shared/building-agents/references/tools-and-rag.md +417 -0
  310. package/skills/shared/building-agents/scripts/verify.sh +121 -0
  311. package/skills/shared/chatbot/SKILL.md +151 -0
  312. package/skills/shared/chatbot/evals/README.md +13 -0
  313. package/skills/shared/chatbot/evals/cases.yaml +43 -0
  314. package/skills/shared/chatbot/references/handoff-and-sales.md +71 -0
  315. package/skills/shared/chatbot/references/system-prompt-and-guardrails.md +78 -0
  316. package/skills/shared/chatbot/scripts/verify.sh +162 -0
  317. package/skills/shared/chrome-extension/SKILL.md +169 -0
  318. package/skills/shared/chrome-extension/evals/README.md +12 -0
  319. package/skills/shared/chrome-extension/evals/cases.yaml +40 -0
  320. package/skills/shared/chrome-extension/references/store-and-migration.md +84 -0
  321. package/skills/shared/chrome-extension/scripts/verify.sh +62 -0
  322. package/skills/shared/clarify/SKILL.md +161 -0
  323. package/skills/shared/clarify/evals/README.md +70 -0
  324. package/skills/shared/clarify/evals/cases.yaml +71 -0
  325. package/skills/shared/clickhouse-analytics/SKILL.md +159 -0
  326. package/skills/shared/clickhouse-analytics/evals/README.md +3 -0
  327. package/skills/shared/clickhouse-analytics/evals/cases.yaml +45 -0
  328. package/skills/shared/clickhouse-analytics/references/ingestion-and-mvs.md +109 -0
  329. package/skills/shared/clickhouse-analytics/references/query-optimization.md +76 -0
  330. package/skills/shared/clickhouse-analytics/references/schema-and-engines.md +63 -0
  331. package/skills/shared/clickhouse-analytics/scripts/verify.sh +109 -0
  332. package/skills/shared/cloudflare/SKILL.md +186 -0
  333. package/skills/shared/cloudflare/evals/README.md +15 -0
  334. package/skills/shared/cloudflare/evals/cases.yaml +46 -0
  335. package/skills/shared/cloudflare/references/storage-primitives.md +104 -0
  336. package/skills/shared/cloudflare/references/wrangler-config.md +91 -0
  337. package/skills/shared/cloudflare/scripts/verify.sh +133 -0
  338. package/skills/shared/code-review/SKILL.md +132 -0
  339. package/skills/shared/code-review/evals/README.md +3 -0
  340. package/skills/shared/code-review/evals/cases.yaml +55 -0
  341. package/skills/shared/code-review/references/pr-workflow.md +67 -0
  342. package/skills/shared/codebase-onboarding/SKILL.md +128 -0
  343. package/skills/shared/codebase-onboarding/evals/README.md +3 -0
  344. package/skills/shared/codebase-onboarding/evals/cases.yaml +69 -0
  345. package/skills/shared/codebase-onboarding/references/recon-playbook.md +57 -0
  346. package/skills/shared/codebase-onboarding/scripts/verify.sh +54 -0
  347. package/skills/shared/compose-multiplatform/SKILL.md +198 -0
  348. package/skills/shared/compose-multiplatform/evals/README.md +3 -0
  349. package/skills/shared/compose-multiplatform/evals/cases.yaml +40 -0
  350. package/skills/shared/compose-multiplatform/references/ios-interop.md +91 -0
  351. package/skills/shared/compose-multiplatform/references/project-setup.md +96 -0
  352. package/skills/shared/compose-multiplatform/scripts/verify.sh +123 -0
  353. package/skills/shared/connect-tool/SKILL.md +163 -0
  354. package/skills/shared/connect-tool/evals/cases.yaml +58 -0
  355. package/skills/shared/constitution/SKILL.md +158 -0
  356. package/skills/shared/constitution/evals/README.md +68 -0
  357. package/skills/shared/constitution/evals/cases.yaml +72 -0
  358. package/skills/shared/constitution/references/constitution-template.md +100 -0
  359. package/skills/shared/context-budget/SKILL.md +114 -0
  360. package/skills/shared/context-budget/evals/README.md +11 -0
  361. package/skills/shared/context-budget/evals/cases.yaml +40 -0
  362. package/skills/shared/context-budget/references/handoff-and-compaction.md +96 -0
  363. package/skills/shared/continuous-learning/SKILL.md +106 -0
  364. package/skills/shared/continuous-learning/evals/README.md +16 -0
  365. package/skills/shared/continuous-learning/evals/cases.yaml +39 -0
  366. package/skills/shared/continuous-learning/references/lesson-routing.md +106 -0
  367. package/skills/shared/coolify/SKILL.md +194 -0
  368. package/skills/shared/coolify/evals/README.md +21 -0
  369. package/skills/shared/coolify/evals/cases.yaml +46 -0
  370. package/skills/shared/coolify/references/databases-and-backups.md +99 -0
  371. package/skills/shared/coolify/references/deploy-recipes.md +105 -0
  372. package/skills/shared/coolify/references/install-and-proxy.md +80 -0
  373. package/skills/shared/coolify/scripts/verify.sh +123 -0
  374. package/skills/shared/cost-tracking/SKILL.md +176 -0
  375. package/skills/shared/cost-tracking/evals/README.md +3 -0
  376. package/skills/shared/cost-tracking/evals/cases.yaml +45 -0
  377. package/skills/shared/cost-tracking/references/cloud-caps.md +52 -0
  378. package/skills/shared/cost-tracking/references/pricing-tables.md +51 -0
  379. package/skills/shared/cost-tracking/scripts/verify.sh +135 -0
  380. package/skills/shared/cpp/SKILL.md +302 -0
  381. package/skills/shared/cpp/evals/README.md +14 -0
  382. package/skills/shared/cpp/evals/cases.yaml +44 -0
  383. package/skills/shared/cpp/references/cmake.md +167 -0
  384. package/skills/shared/cpp/references/move-and-templates.md +130 -0
  385. package/skills/shared/cpp/references/undefined-behavior.md +86 -0
  386. package/skills/shared/cpp/scripts/verify.sh +165 -0
  387. package/skills/shared/csharp-dotnet/SKILL.md +272 -0
  388. package/skills/shared/csharp-dotnet/evals/README.md +3 -0
  389. package/skills/shared/csharp-dotnet/evals/cases.yaml +48 -0
  390. package/skills/shared/csharp-dotnet/references/aspnetcore.md +99 -0
  391. package/skills/shared/csharp-dotnet/references/async.md +82 -0
  392. package/skills/shared/csharp-dotnet/references/efcore.md +96 -0
  393. package/skills/shared/csharp-dotnet/scripts/verify.sh +90 -0
  394. package/skills/shared/data-cleaning/SKILL.md +259 -0
  395. package/skills/shared/data-cleaning/evals/README.md +16 -0
  396. package/skills/shared/data-cleaning/evals/cases.yaml +57 -0
  397. package/skills/shared/data-cleaning/references/normalization-recipes.md +136 -0
  398. package/skills/shared/data-cleaning/references/validation-patterns.md +134 -0
  399. package/skills/shared/data-cleaning/scripts/verify.sh +115 -0
  400. package/skills/shared/data-scraper/SKILL.md +130 -0
  401. package/skills/shared/data-scraper/evals/README.md +3 -0
  402. package/skills/shared/data-scraper/evals/cases.yaml +46 -0
  403. package/skills/shared/data-scraper/references/anti-bot.md +85 -0
  404. package/skills/shared/data-scraper/references/frameworks.md +116 -0
  405. package/skills/shared/data-scraper/references/legal-compliance.md +64 -0
  406. package/skills/shared/data-scraper/scripts/verify.sh +166 -0
  407. package/skills/shared/db-migrations/SKILL.md +237 -0
  408. package/skills/shared/db-migrations/evals/README.md +10 -0
  409. package/skills/shared/db-migrations/evals/cases.yaml +46 -0
  410. package/skills/shared/db-migrations/references/backfill-and-batching.md +105 -0
  411. package/skills/shared/db-migrations/references/expand-contract-playbook.md +152 -0
  412. package/skills/shared/db-migrations/references/tools-and-runners.md +88 -0
  413. package/skills/shared/db-migrations/scripts/verify.sh +112 -0
  414. package/skills/shared/debug/SKILL.md +188 -0
  415. package/skills/shared/debug/evals/README.md +88 -0
  416. package/skills/shared/debug/evals/cases.yaml +74 -0
  417. package/skills/shared/decision-challenge/SKILL.md +113 -0
  418. package/skills/shared/decision-challenge/evals/README.md +3 -0
  419. package/skills/shared/decision-challenge/evals/cases.yaml +42 -0
  420. package/skills/shared/decision-records/SKILL.md +202 -0
  421. package/skills/shared/decision-records/evals/README.md +3 -0
  422. package/skills/shared/decision-records/evals/cases.yaml +43 -0
  423. package/skills/shared/decision-records/references/templates.md +252 -0
  424. package/skills/shared/decision-records/scripts/verify.sh +105 -0
  425. package/skills/shared/deep-learning/SKILL.md +226 -0
  426. package/skills/shared/deep-learning/evals/README.md +11 -0
  427. package/skills/shared/deep-learning/evals/cases.yaml +48 -0
  428. package/skills/shared/deep-learning/references/distributed.md +105 -0
  429. package/skills/shared/deep-learning/references/training-recipes.md +135 -0
  430. package/skills/shared/deployment/SKILL.md +374 -0
  431. package/skills/shared/deployment/evals/README.md +50 -0
  432. package/skills/shared/deployment/evals/cases.yaml +53 -0
  433. package/skills/shared/deployment/references/coolify.md +216 -0
  434. package/skills/shared/deployment/references/dockerfiles-by-stack.md +319 -0
  435. package/skills/shared/deployment/references/github-actions.md +295 -0
  436. package/skills/shared/deployment/references/hosting-targets.md +272 -0
  437. package/skills/shared/deployment/scripts/verify.sh +134 -0
  438. package/skills/shared/deprecation/SKILL.md +123 -0
  439. package/skills/shared/deprecation/evals/README.md +3 -0
  440. package/skills/shared/deprecation/evals/cases.yaml +42 -0
  441. package/skills/shared/design/IMPECCABLE-LICENSE.txt +191 -0
  442. package/skills/shared/design/SKILL.md +111 -0
  443. package/skills/shared/design/THIRD_PARTY.md +26 -0
  444. package/skills/shared/design/engine/LICENSE +21 -0
  445. package/skills/shared/design/engine/RUN.md +515 -0
  446. package/skills/shared/design/engine/UPSTREAM.json +4 -0
  447. package/skills/shared/design/engine/assets/app.css +216 -0
  448. package/skills/shared/design/engine/assets/base.css +105 -0
  449. package/skills/shared/design/engine/assets/base.js +37 -0
  450. package/skills/shared/design/engine/assets/charts.js +617 -0
  451. package/skills/shared/design/engine/assets/scenes/stage.css +28 -0
  452. package/skills/shared/design/engine/assets/scenes/stage.js +133 -0
  453. package/skills/shared/design/engine/library/app.json +1327 -0
  454. package/skills/shared/design/engine/library/directions.json +1078 -0
  455. package/skills/shared/design/engine/library/heroes.json +1086 -0
  456. package/skills/shared/design/engine/library/motions.json +92 -0
  457. package/skills/shared/design/engine/library/palettes.json +1485 -0
  458. package/skills/shared/design/engine/library/photos.json +7240 -0
  459. package/skills/shared/design/engine/library/sections.json +4429 -0
  460. package/skills/shared/design/engine/library/sites.json +8350 -0
  461. package/skills/shared/design/engine/library/type.json +2024 -0
  462. package/skills/shared/design/engine/references/app-screens.md +1199 -0
  463. package/skills/shared/design/engine/references/colour.md +141 -0
  464. package/skills/shared/design/engine/references/copy.md +177 -0
  465. package/skills/shared/design/engine/references/critique.md +182 -0
  466. package/skills/shared/design/engine/references/imagery.md +791 -0
  467. package/skills/shared/design/engine/references/layout.md +292 -0
  468. package/skills/shared/design/engine/references/motion.md +980 -0
  469. package/skills/shared/design/engine/references/research.md +356 -0
  470. package/skills/shared/design/engine/references/scenes.md +174 -0
  471. package/skills/shared/design/engine/references/tells.md +115 -0
  472. package/skills/shared/design/engine/references/type.md +170 -0
  473. package/skills/shared/design/engine/scripts/assets.mjs +865 -0
  474. package/skills/shared/design/engine/scripts/draw.mjs +584 -0
  475. package/skills/shared/design/engine/scripts/inspect.mjs +303 -0
  476. package/skills/shared/design/engine/scripts/lib/app-draw.mjs +203 -0
  477. package/skills/shared/design/engine/scripts/lib/cdp.mjs +248 -0
  478. package/skills/shared/design/engine/scripts/lib/probe.mjs +909 -0
  479. package/skills/shared/design/engine/scripts/lib/rules.mjs +243 -0
  480. package/skills/shared/design/engine/scripts/lint.mjs +119 -0
  481. package/skills/shared/design/engine/scripts/scenes.mjs +124 -0
  482. package/skills/shared/design/evals/cases.yaml +45 -0
  483. package/skills/shared/design/references/design-md.md +49 -0
  484. package/skills/shared/design/references/finish-review.md +46 -0
  485. package/skills/shared/design/references/modes.md +51 -0
  486. package/skills/shared/digitalocean/SKILL.md +227 -0
  487. package/skills/shared/digitalocean/evals/README.md +10 -0
  488. package/skills/shared/digitalocean/evals/cases.yaml +37 -0
  489. package/skills/shared/digitalocean/references/app-spec.md +126 -0
  490. package/skills/shared/digitalocean/references/droplet-ops.md +95 -0
  491. package/skills/shared/digitalocean/scripts/verify.sh +102 -0
  492. package/skills/shared/django/SKILL.md +263 -0
  493. package/skills/shared/django/evals/README.md +11 -0
  494. package/skills/shared/django/evals/cases.yaml +47 -0
  495. package/skills/shared/django/references/drf.md +109 -0
  496. package/skills/shared/django/references/orm-performance.md +91 -0
  497. package/skills/shared/django/references/security.md +81 -0
  498. package/skills/shared/django/references/testing.md +86 -0
  499. package/skills/shared/django/scripts/verify.sh +115 -0
  500. package/skills/shared/docker/SKILL.md +251 -0
  501. package/skills/shared/docker/evals/README.md +10 -0
  502. package/skills/shared/docker/evals/cases.yaml +44 -0
  503. package/skills/shared/docker/references/base-images-and-stages.md +104 -0
  504. package/skills/shared/docker/references/compose-recipes.md +109 -0
  505. package/skills/shared/docker/scripts/verify.sh +149 -0
  506. package/skills/shared/domains-dns/SKILL.md +131 -0
  507. package/skills/shared/domains-dns/evals/README.md +16 -0
  508. package/skills/shared/domains-dns/evals/cases.yaml +47 -0
  509. package/skills/shared/domains-dns/references/record-cookbook.md +94 -0
  510. package/skills/shared/domains-dns/references/tls-and-acme.md +90 -0
  511. package/skills/shared/domains-dns/references/verify-and-debug.md +64 -0
  512. package/skills/shared/domains-dns/scripts/verify.sh +163 -0
  513. package/skills/shared/drizzle-orm/SKILL.md +231 -0
  514. package/skills/shared/drizzle-orm/evals/README.md +12 -0
  515. package/skills/shared/drizzle-orm/evals/cases.yaml +47 -0
  516. package/skills/shared/drizzle-orm/references/relations-and-drivers.md +118 -0
  517. package/skills/shared/drizzle-orm/scripts/verify.sh +155 -0
  518. package/skills/shared/duckdb/SKILL.md +202 -0
  519. package/skills/shared/duckdb/evals/README.md +31 -0
  520. package/skills/shared/duckdb/evals/cases.yaml +41 -0
  521. package/skills/shared/duckdb/references/python-and-interop.md +105 -0
  522. package/skills/shared/duckdb/references/remote-and-lakehouse.md +101 -0
  523. package/skills/shared/duckdb/scripts/verify.sh +71 -0
  524. package/skills/shared/dynamodb/SKILL.md +204 -0
  525. package/skills/shared/dynamodb/evals/README.md +8 -0
  526. package/skills/shared/dynamodb/evals/cases.yaml +46 -0
  527. package/skills/shared/dynamodb/references/access-patterns.md +127 -0
  528. package/skills/shared/dynamodb/references/capacity-and-limits.md +78 -0
  529. package/skills/shared/dynamodb/scripts/verify.sh +108 -0
  530. package/skills/shared/e2e-testing/SKILL.md +233 -0
  531. package/skills/shared/e2e-testing/evals/README.md +10 -0
  532. package/skills/shared/e2e-testing/evals/cases.yaml +64 -0
  533. package/skills/shared/e2e-testing/references/config-and-ci.md +156 -0
  534. package/skills/shared/e2e-testing/references/flakiness-playbook.md +124 -0
  535. package/skills/shared/e2e-testing/scripts/verify.sh +117 -0
  536. package/skills/shared/electron/SKILL.md +209 -0
  537. package/skills/shared/electron/evals/README.md +13 -0
  538. package/skills/shared/electron/evals/cases.yaml +38 -0
  539. package/skills/shared/electron/references/packaging-and-updates.md +122 -0
  540. package/skills/shared/electron/references/security-and-ipc.md +158 -0
  541. package/skills/shared/electron/scripts/verify.sh +143 -0
  542. package/skills/shared/elixir/SKILL.md +209 -0
  543. package/skills/shared/elixir/evals/README.md +3 -0
  544. package/skills/shared/elixir/evals/cases.yaml +41 -0
  545. package/skills/shared/elixir/references/mix-and-releases.md +91 -0
  546. package/skills/shared/elixir/references/otp-patterns.md +96 -0
  547. package/skills/shared/elixir/scripts/verify.sh +76 -0
  548. package/skills/shared/email-deliverability/SKILL.md +148 -0
  549. package/skills/shared/email-deliverability/evals/README.md +21 -0
  550. package/skills/shared/email-deliverability/evals/cases.yaml +45 -0
  551. package/skills/shared/email-deliverability/scripts/verify.sh +98 -0
  552. package/skills/shared/embeddings-search/SKILL.md +184 -0
  553. package/skills/shared/embeddings-search/evals/README.md +10 -0
  554. package/skills/shared/embeddings-search/evals/cases.yaml +44 -0
  555. package/skills/shared/embeddings-search/references/evaluation.md +86 -0
  556. package/skills/shared/embeddings-search/references/models.md +73 -0
  557. package/skills/shared/embeddings-search/scripts/verify.sh +103 -0
  558. package/skills/shared/error-handling/SKILL.md +273 -0
  559. package/skills/shared/error-handling/evals/README.md +12 -0
  560. package/skills/shared/error-handling/evals/cases.yaml +46 -0
  561. package/skills/shared/error-handling/references/boundaries-and-messaging.md +120 -0
  562. package/skills/shared/error-handling/references/retry-and-resilience.md +154 -0
  563. package/skills/shared/error-handling/scripts/verify.sh +110 -0
  564. package/skills/shared/expo/SKILL.md +243 -0
  565. package/skills/shared/expo/evals/README.md +13 -0
  566. package/skills/shared/expo/evals/cases.yaml +44 -0
  567. package/skills/shared/expo/references/config-plugins.md +117 -0
  568. package/skills/shared/expo/references/eas-update.md +118 -0
  569. package/skills/shared/expo/scripts/verify.sh +132 -0
  570. package/skills/shared/fal/SKILL.md +196 -0
  571. package/skills/shared/fal/evals/README.md +3 -0
  572. package/skills/shared/fal/evals/cases.yaml +42 -0
  573. package/skills/shared/fal/references/models-and-cost.md +53 -0
  574. package/skills/shared/fal/references/queue-and-webhooks.md +153 -0
  575. package/skills/shared/fal/scripts/verify.sh +72 -0
  576. package/skills/shared/fastapi/SKILL.md +469 -0
  577. package/skills/shared/fastapi/evals/README.md +50 -0
  578. package/skills/shared/fastapi/evals/cases.yaml +55 -0
  579. package/skills/shared/fastapi/references/database.md +347 -0
  580. package/skills/shared/fastapi/references/production.md +338 -0
  581. package/skills/shared/fastapi/references/security.md +330 -0
  582. package/skills/shared/fastapi/references/testing.md +349 -0
  583. package/skills/shared/fastapi/scripts/verify.sh +157 -0
  584. package/skills/shared/finetuning/SKILL.md +232 -0
  585. package/skills/shared/finetuning/evals/README.md +13 -0
  586. package/skills/shared/finetuning/evals/cases.yaml +50 -0
  587. package/skills/shared/finetuning/references/hyperparameters-and-eval.md +74 -0
  588. package/skills/shared/finetuning/references/methods.md +189 -0
  589. package/skills/shared/firebase/SKILL.md +237 -0
  590. package/skills/shared/firebase/evals/README.md +12 -0
  591. package/skills/shared/firebase/evals/cases.yaml +45 -0
  592. package/skills/shared/firebase/references/cloud-functions.md +102 -0
  593. package/skills/shared/firebase/references/data-modeling.md +108 -0
  594. package/skills/shared/firebase/references/security-rules.md +137 -0
  595. package/skills/shared/firebase/scripts/verify.sh +98 -0
  596. package/skills/shared/flutter/SKILL.md +400 -0
  597. package/skills/shared/flutter/evals/README.md +54 -0
  598. package/skills/shared/flutter/evals/cases.yaml +69 -0
  599. package/skills/shared/flutter/references/architecture-and-state.md +499 -0
  600. package/skills/shared/flutter/references/i18n-and-dependencies.md +197 -0
  601. package/skills/shared/flutter/references/performance.md +299 -0
  602. package/skills/shared/flutter/references/testing.md +385 -0
  603. package/skills/shared/flutter/references/ui-and-navigation.md +378 -0
  604. package/skills/shared/flutter/scripts/verify.sh +104 -0
  605. package/skills/shared/fly-io/SKILL.md +197 -0
  606. package/skills/shared/fly-io/evals/README.md +3 -0
  607. package/skills/shared/fly-io/evals/cases.yaml +42 -0
  608. package/skills/shared/fly-io/references/fly-toml.md +155 -0
  609. package/skills/shared/fly-io/references/multi-region.md +66 -0
  610. package/skills/shared/fly-io/scripts/verify.sh +90 -0
  611. package/skills/shared/ftd/SKILL.md +111 -0
  612. package/skills/shared/ftd/evals/cases.yaml +66 -0
  613. package/skills/shared/ftd/evals/routing.json +24 -0
  614. package/skills/shared/game-design/SKILL.md +146 -0
  615. package/skills/shared/game-design/evals/README.md +13 -0
  616. package/skills/shared/game-design/evals/cases.yaml +47 -0
  617. package/skills/shared/game-design/references/mechanics-and-loops.md +78 -0
  618. package/skills/shared/game-design/references/playtesting-and-scope.md +58 -0
  619. package/skills/shared/game-design/references/progression-and-economy.md +70 -0
  620. package/skills/shared/game-storytelling/SKILL.md +134 -0
  621. package/skills/shared/game-storytelling/evals/README.md +28 -0
  622. package/skills/shared/game-storytelling/evals/cases.yaml +51 -0
  623. package/skills/shared/game-storytelling/references/branching-and-state.md +134 -0
  624. package/skills/shared/game-storytelling/references/dialogue-tools.md +117 -0
  625. package/skills/shared/game-storytelling/references/environmental-storytelling.md +71 -0
  626. package/skills/shared/gamedev-multiplayer/SKILL.md +237 -0
  627. package/skills/shared/gamedev-multiplayer/evals/README.md +12 -0
  628. package/skills/shared/gamedev-multiplayer/evals/cases.yaml +44 -0
  629. package/skills/shared/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
  630. package/skills/shared/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
  631. package/skills/shared/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
  632. package/skills/shared/gamedev-pathing/SKILL.md +233 -0
  633. package/skills/shared/gamedev-pathing/evals/README.md +14 -0
  634. package/skills/shared/gamedev-pathing/evals/cases.yaml +49 -0
  635. package/skills/shared/gamedev-pathing/references/navmesh-workflow.md +110 -0
  636. package/skills/shared/gamedev-pathing/references/search-algorithms.md +135 -0
  637. package/skills/shared/gamedev-pathing/references/steering-and-avoidance.md +120 -0
  638. package/skills/shared/gamedev-physics/SKILL.md +225 -0
  639. package/skills/shared/gamedev-physics/evals/README.md +12 -0
  640. package/skills/shared/gamedev-physics/evals/cases.yaml +54 -0
  641. package/skills/shared/gamedev-physics/references/character-controllers.md +120 -0
  642. package/skills/shared/gamedev-physics/references/determinism-and-queries.md +124 -0
  643. package/skills/shared/gamedev-physics/references/layers-and-masks.md +115 -0
  644. package/skills/shared/gamedev-shaders/SKILL.md +232 -0
  645. package/skills/shared/gamedev-shaders/evals/README.md +14 -0
  646. package/skills/shared/gamedev-shaders/evals/cases.yaml +45 -0
  647. package/skills/shared/gamedev-shaders/references/effect-recipes.md +205 -0
  648. package/skills/shared/gamedev-shaders/references/godot-shading-language.md +133 -0
  649. package/skills/shared/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
  650. package/skills/shared/gamedev-shipping/SKILL.md +220 -0
  651. package/skills/shared/gamedev-shipping/evals/README.md +9 -0
  652. package/skills/shared/gamedev-shipping/evals/cases.yaml +55 -0
  653. package/skills/shared/gamedev-shipping/references/mobile-and-desktop.md +127 -0
  654. package/skills/shared/gamedev-shipping/references/stores-and-ci.md +162 -0
  655. package/skills/shared/gamedev-shipping/references/web-export-headers.md +140 -0
  656. package/skills/shared/gcp-essentials/SKILL.md +324 -0
  657. package/skills/shared/gcp-essentials/evals/README.md +12 -0
  658. package/skills/shared/gcp-essentials/evals/cases.yaml +38 -0
  659. package/skills/shared/gcp-essentials/references/deploy-recipes.md +81 -0
  660. package/skills/shared/gcp-essentials/references/iam-and-auth.md +94 -0
  661. package/skills/shared/gcp-essentials/references/networking-and-sql.md +74 -0
  662. package/skills/shared/gcp-essentials/scripts/verify.sh +158 -0
  663. package/skills/shared/git-workflow/SKILL.md +214 -0
  664. package/skills/shared/git-workflow/evals/README.md +10 -0
  665. package/skills/shared/git-workflow/evals/cases.yaml +52 -0
  666. package/skills/shared/git-workflow/references/gitmoji.md +157 -0
  667. package/skills/shared/git-workflow/references/interactive-rebase.md +89 -0
  668. package/skills/shared/github-actions/SKILL.md +244 -0
  669. package/skills/shared/github-actions/evals/README.md +3 -0
  670. package/skills/shared/github-actions/evals/cases.yaml +45 -0
  671. package/skills/shared/github-actions/references/caching-and-matrix.md +92 -0
  672. package/skills/shared/github-actions/references/oidc-deploys.md +130 -0
  673. package/skills/shared/github-actions/scripts/verify.sh +105 -0
  674. package/skills/shared/gitlab-auth/SKILL.md +99 -0
  675. package/skills/shared/gitlab-workflow/SKILL.md +138 -0
  676. package/skills/shared/go/SKILL.md +390 -0
  677. package/skills/shared/go/evals/README.md +56 -0
  678. package/skills/shared/go/evals/cases.yaml +55 -0
  679. package/skills/shared/go/references/concurrency.md +557 -0
  680. package/skills/shared/go/references/http-services.md +529 -0
  681. package/skills/shared/go/references/testing.md +338 -0
  682. package/skills/shared/go/scripts/verify.sh +134 -0
  683. package/skills/shared/godot/SKILL.md +300 -0
  684. package/skills/shared/godot/evals/README.md +13 -0
  685. package/skills/shared/godot/evals/cases.yaml +50 -0
  686. package/skills/shared/godot/references/export-and-testing.md +102 -0
  687. package/skills/shared/godot/references/gdscript-style.md +84 -0
  688. package/skills/shared/godot/references/godot3-to-4-traps.md +89 -0
  689. package/skills/shared/godot/references/nodes-scenes-resources.md +109 -0
  690. package/skills/shared/harness/SKILL.md +316 -0
  691. package/skills/shared/harness/assets/_TEMPLATE/.env.example +8 -0
  692. package/skills/shared/harness/assets/_TEMPLATE/CREDENTIALS.md +25 -0
  693. package/skills/shared/harness/assets/_TEMPLATE/README.md +25 -0
  694. package/skills/shared/harness/assets/_TEMPLATE/gitignore +10 -0
  695. package/skills/shared/harness/assets/_TEMPLATE/test_connection.sh +30 -0
  696. package/skills/shared/harness/evals/README.md +54 -0
  697. package/skills/shared/harness/evals/cases.yaml +72 -0
  698. package/skills/shared/harness/examples/audit-example.md +120 -0
  699. package/skills/shared/harness/references/agents-md-template.md +41 -0
  700. package/skills/shared/harness/references/audit-report-template.html +140 -0
  701. package/skills/shared/harness/references/audit-report-template.md +116 -0
  702. package/skills/shared/harness/references/claude-md-template.md +85 -0
  703. package/skills/shared/harness/references/daily-curation-automation.md +68 -0
  704. package/skills/shared/harness/references/inbox-readme-template.md +51 -0
  705. package/skills/shared/harness/references/ingest-formats.md +185 -0
  706. package/skills/shared/harness/references/ingest-ignore-defaults.md +48 -0
  707. package/skills/shared/harness/references/obsidian-scaffolding.md +103 -0
  708. package/skills/shared/harness/references/providers.yaml +3546 -0
  709. package/skills/shared/harness/references/tools-readme-template.md +88 -0
  710. package/skills/shared/harness/references/wiki-archive-template.html +81 -0
  711. package/skills/shared/harness/references/wiki-article-template.md +60 -0
  712. package/skills/shared/harness/references/wiki-dashboard-template.html +136 -0
  713. package/skills/shared/harness/references/wiki-deep-improve-report-template.html +126 -0
  714. package/skills/shared/harness/references/wiki-gaps-template.md +22 -0
  715. package/skills/shared/harness/references/wiki-index-template.md +32 -0
  716. package/skills/shared/harness/references/wiki-protocol.md +926 -0
  717. package/skills/shared/harness/references/wiki-raw-template.md +7 -0
  718. package/skills/shared/harness/references/wiki-worklog-template.md +60 -0
  719. package/skills/shared/hetzner/SKILL.md +203 -0
  720. package/skills/shared/hetzner/evals/README.md +35 -0
  721. package/skills/shared/hetzner/evals/cases.yaml +46 -0
  722. package/skills/shared/hetzner/references/cloud-init.md +120 -0
  723. package/skills/shared/hetzner/references/plans-and-locations.md +56 -0
  724. package/skills/shared/hetzner/scripts/verify.sh +122 -0
  725. package/skills/shared/htmx/SKILL.md +261 -0
  726. package/skills/shared/htmx/evals/README.md +3 -0
  727. package/skills/shared/htmx/evals/cases.yaml +38 -0
  728. package/skills/shared/htmx/references/patterns.md +113 -0
  729. package/skills/shared/htmx/references/server-contract.md +91 -0
  730. package/skills/shared/htmx/scripts/verify.sh +93 -0
  731. package/skills/shared/huggingface/SKILL.md +191 -0
  732. package/skills/shared/huggingface/evals/README.md +11 -0
  733. package/skills/shared/huggingface/evals/cases.yaml +41 -0
  734. package/skills/shared/huggingface/references/endpoints-and-spaces.md +99 -0
  735. package/skills/shared/huggingface/references/hub-and-cli.md +85 -0
  736. package/skills/shared/huggingface/references/inference-providers.md +115 -0
  737. package/skills/shared/huggingface/scripts/verify.sh +123 -0
  738. package/skills/shared/idea-refinement/SKILL.md +121 -0
  739. package/skills/shared/idea-refinement/evals/README.md +3 -0
  740. package/skills/shared/idea-refinement/evals/cases.yaml +42 -0
  741. package/skills/shared/implement/SKILL.md +383 -0
  742. package/skills/shared/implement/evals/README.md +56 -0
  743. package/skills/shared/implement/evals/cases.yaml +43 -0
  744. package/skills/shared/implement/references/per-task-review.md +46 -0
  745. package/skills/shared/implement/scripts/review-package +59 -0
  746. package/skills/shared/implement/scripts/sdd-workspace +47 -0
  747. package/skills/shared/implement/scripts/task-brief +77 -0
  748. package/skills/shared/init/SKILL.md +209 -0
  749. package/skills/shared/init/evals/README.md +49 -0
  750. package/skills/shared/init/evals/cases.yaml +74 -0
  751. package/skills/shared/init/references/accompaniment-and-profile.md +122 -0
  752. package/skills/shared/init/references/discovery.md +90 -0
  753. package/skills/shared/init/references/recommend-skills.md +115 -0
  754. package/skills/shared/init/scripts/verify.sh +118 -0
  755. package/skills/shared/java/SKILL.md +341 -0
  756. package/skills/shared/java/evals/README.md +23 -0
  757. package/skills/shared/java/evals/cases.yaml +43 -0
  758. package/skills/shared/java/references/builds.md +133 -0
  759. package/skills/shared/java/references/concurrency.md +108 -0
  760. package/skills/shared/java/references/streams.md +102 -0
  761. package/skills/shared/java/scripts/verify.sh +107 -0
  762. package/skills/shared/knowledge-ops/SKILL.md +122 -0
  763. package/skills/shared/knowledge-ops/evals/README.md +16 -0
  764. package/skills/shared/knowledge-ops/evals/cases.yaml +50 -0
  765. package/skills/shared/knowledge-ops/references/gardening-playbook.md +126 -0
  766. package/skills/shared/kotlin-android/SKILL.md +245 -0
  767. package/skills/shared/kotlin-android/evals/README.md +13 -0
  768. package/skills/shared/kotlin-android/evals/cases.yaml +56 -0
  769. package/skills/shared/kotlin-android/references/architecture.md +200 -0
  770. package/skills/shared/kotlin-android/references/gradle-setup.md +125 -0
  771. package/skills/shared/kotlin-android/scripts/verify.sh +109 -0
  772. package/skills/shared/laravel/SKILL.md +301 -0
  773. package/skills/shared/laravel/evals/README.md +10 -0
  774. package/skills/shared/laravel/evals/cases.yaml +45 -0
  775. package/skills/shared/laravel/references/eloquent-patterns.md +126 -0
  776. package/skills/shared/laravel/references/queues-and-scheduling.md +153 -0
  777. package/skills/shared/laravel/scripts/verify.sh +128 -0
  778. package/skills/shared/level-design/SKILL.md +143 -0
  779. package/skills/shared/level-design/evals/README.md +35 -0
  780. package/skills/shared/level-design/evals/cases.yaml +58 -0
  781. package/skills/shared/level-design/references/blockout-to-art.md +118 -0
  782. package/skills/shared/level-design/references/guidance-and-readability.md +152 -0
  783. package/skills/shared/level-design/references/pacing-and-encounters.md +142 -0
  784. package/skills/shared/llm-pipeline/SKILL.md +150 -0
  785. package/skills/shared/llm-pipeline/evals/README.md +3 -0
  786. package/skills/shared/llm-pipeline/evals/cases.yaml +44 -0
  787. package/skills/shared/llm-pipeline/references/caching-layers.md +60 -0
  788. package/skills/shared/llm-pipeline/references/litellm-router.md +101 -0
  789. package/skills/shared/llm-pipeline/scripts/verify.sh +169 -0
  790. package/skills/shared/machine-learning/SKILL.md +228 -0
  791. package/skills/shared/machine-learning/evals/README.md +15 -0
  792. package/skills/shared/machine-learning/evals/cases.yaml +54 -0
  793. package/skills/shared/machine-learning/references/gbdt-and-tuning.md +83 -0
  794. package/skills/shared/machine-learning/references/metrics-and-imbalance.md +82 -0
  795. package/skills/shared/machine-learning/references/pipelines-and-cv.md +135 -0
  796. package/skills/shared/modal/SKILL.md +290 -0
  797. package/skills/shared/modal/evals/README.md +29 -0
  798. package/skills/shared/modal/evals/cases.yaml +50 -0
  799. package/skills/shared/modal/references/images-gpu-cookbook.md +160 -0
  800. package/skills/shared/modal/references/web-and-scaling.md +138 -0
  801. package/skills/shared/modal/scripts/verify.sh +127 -0
  802. package/skills/shared/mongodb/SKILL.md +342 -0
  803. package/skills/shared/mongodb/evals/README.md +29 -0
  804. package/skills/shared/mongodb/evals/cases.yaml +41 -0
  805. package/skills/shared/mongodb/references/aggregation.md +115 -0
  806. package/skills/shared/mongodb/references/data-modeling.md +135 -0
  807. package/skills/shared/mongodb/references/transactions-and-ops.md +128 -0
  808. package/skills/shared/mongodb/scripts/verify.sh +151 -0
  809. package/skills/shared/monitoring/SKILL.md +155 -0
  810. package/skills/shared/monitoring/evals/README.md +3 -0
  811. package/skills/shared/monitoring/evals/cases.yaml +47 -0
  812. package/skills/shared/monitoring/references/burn-rate-and-oncall.md +128 -0
  813. package/skills/shared/monitoring/references/tool-setup.md +154 -0
  814. package/skills/shared/monitoring/scripts/verify.sh +145 -0
  815. package/skills/shared/mysql/SKILL.md +249 -0
  816. package/skills/shared/mysql/evals/README.md +12 -0
  817. package/skills/shared/mysql/evals/cases.yaml +49 -0
  818. package/skills/shared/mysql/references/indexing-and-explain.md +161 -0
  819. package/skills/shared/mysql/references/mysql-vs-mariadb.md +78 -0
  820. package/skills/shared/mysql/references/online-ddl-and-migrations.md +120 -0
  821. package/skills/shared/mysql/references/replication-and-ha.md +115 -0
  822. package/skills/shared/mysql/scripts/verify.sh +141 -0
  823. package/skills/shared/neon/SKILL.md +218 -0
  824. package/skills/shared/neon/evals/README.md +11 -0
  825. package/skills/shared/neon/evals/cases.yaml +45 -0
  826. package/skills/shared/neon/references/branching-ci.md +86 -0
  827. package/skills/shared/neon/scripts/verify.sh +78 -0
  828. package/skills/shared/nestjs/SKILL.md +217 -0
  829. package/skills/shared/nestjs/evals/README.md +3 -0
  830. package/skills/shared/nestjs/evals/cases.yaml +38 -0
  831. package/skills/shared/nestjs/references/cross-cutting.md +135 -0
  832. package/skills/shared/nestjs/references/testing-recipes.md +105 -0
  833. package/skills/shared/nestjs/scripts/verify.sh +98 -0
  834. package/skills/shared/netlify/SKILL.md +208 -0
  835. package/skills/shared/netlify/evals/README.md +13 -0
  836. package/skills/shared/netlify/evals/cases.yaml +43 -0
  837. package/skills/shared/netlify/references/functions.md +97 -0
  838. package/skills/shared/netlify/references/netlify-toml.md +115 -0
  839. package/skills/shared/netlify/scripts/verify.sh +95 -0
  840. package/skills/shared/nextjs/SKILL.md +400 -0
  841. package/skills/shared/nextjs/evals/README.md +59 -0
  842. package/skills/shared/nextjs/evals/cases.yaml +56 -0
  843. package/skills/shared/nextjs/references/data-and-caching.md +309 -0
  844. package/skills/shared/nextjs/references/metadata.md +208 -0
  845. package/skills/shared/nextjs/references/performance.md +325 -0
  846. package/skills/shared/nextjs/references/react.md +383 -0
  847. package/skills/shared/nextjs/references/security.md +239 -0
  848. package/skills/shared/nextjs/references/testing.md +290 -0
  849. package/skills/shared/nextjs/scripts/verify.sh +141 -0
  850. package/skills/shared/nlp/SKILL.md +225 -0
  851. package/skills/shared/nlp/evals/README.md +10 -0
  852. package/skills/shared/nlp/evals/cases.yaml +45 -0
  853. package/skills/shared/nlp/references/evaluation.md +107 -0
  854. package/skills/shared/nlp/references/tokenization.md +95 -0
  855. package/skills/shared/no-code-app/SKILL.md +145 -0
  856. package/skills/shared/no-code-app/evals/README.md +3 -0
  857. package/skills/shared/no-code-app/evals/cases.yaml +43 -0
  858. package/skills/shared/no-code-app/references/platform-limits.md +100 -0
  859. package/skills/shared/nodejs/SKILL.md +229 -0
  860. package/skills/shared/nodejs/evals/README.md +3 -0
  861. package/skills/shared/nodejs/evals/cases.yaml +39 -0
  862. package/skills/shared/nodejs/references/express5-migration.md +53 -0
  863. package/skills/shared/nodejs/references/graceful-shutdown.md +73 -0
  864. package/skills/shared/nodejs/scripts/verify.sh +122 -0
  865. package/skills/shared/observability/SKILL.md +235 -0
  866. package/skills/shared/observability/evals/README.md +3 -0
  867. package/skills/shared/observability/evals/cases.yaml +51 -0
  868. package/skills/shared/observability/references/collector-config.md +98 -0
  869. package/skills/shared/observability/references/instrumentation-recipes.md +115 -0
  870. package/skills/shared/observability/scripts/verify.sh +156 -0
  871. package/skills/shared/ollama/SKILL.md +213 -0
  872. package/skills/shared/ollama/evals/README.md +9 -0
  873. package/skills/shared/ollama/evals/cases.yaml +43 -0
  874. package/skills/shared/ollama/references/api.md +148 -0
  875. package/skills/shared/ollama/references/hardware-sizing.md +87 -0
  876. package/skills/shared/ollama/scripts/verify.sh +116 -0
  877. package/skills/shared/open-weights/SKILL.md +239 -0
  878. package/skills/shared/open-weights/evals/README.md +14 -0
  879. package/skills/shared/open-weights/evals/cases.yaml +42 -0
  880. package/skills/shared/open-weights/references/licenses.md +123 -0
  881. package/skills/shared/open-weights/references/model-families.md +83 -0
  882. package/skills/shared/open-weights/references/sizing-and-quant.md +89 -0
  883. package/skills/shared/orient/SKILL.md +92 -0
  884. package/skills/shared/orient/evals/README.md +18 -0
  885. package/skills/shared/orient/evals/cases.yaml +67 -0
  886. package/skills/shared/orient/references/explain-ladder.md +93 -0
  887. package/skills/shared/orient/references/orientation-contract.md +86 -0
  888. package/skills/shared/parallel/SKILL.md +168 -0
  889. package/skills/shared/parallel/evals/README.md +62 -0
  890. package/skills/shared/parallel/evals/cases.yaml +44 -0
  891. package/skills/shared/performance/SKILL.md +229 -0
  892. package/skills/shared/performance/evals/README.md +3 -0
  893. package/skills/shared/performance/evals/cases.yaml +49 -0
  894. package/skills/shared/performance/references/profiling-playbook.md +54 -0
  895. package/skills/shared/performance/scripts/verify.sh +94 -0
  896. package/skills/shared/phoenix/SKILL.md +169 -0
  897. package/skills/shared/phoenix/evals/README.md +3 -0
  898. package/skills/shared/phoenix/evals/cases.yaml +40 -0
  899. package/skills/shared/phoenix/references/auth-and-scopes.md +82 -0
  900. package/skills/shared/phoenix/references/ecto-patterns.md +93 -0
  901. package/skills/shared/phoenix/references/liveview.md +134 -0
  902. package/skills/shared/phoenix/scripts/verify.sh +73 -0
  903. package/skills/shared/php/SKILL.md +397 -0
  904. package/skills/shared/php/evals/README.md +12 -0
  905. package/skills/shared/php/evals/cases.yaml +45 -0
  906. package/skills/shared/php/references/tooling.md +170 -0
  907. package/skills/shared/php/references/type-system.md +220 -0
  908. package/skills/shared/php/scripts/verify.sh +155 -0
  909. package/skills/shared/plan/SKILL.md +166 -0
  910. package/skills/shared/plan/evals/README.md +62 -0
  911. package/skills/shared/plan/evals/cases.yaml +49 -0
  912. package/skills/shared/plan/references/plan-template.md +153 -0
  913. package/skills/shared/planetscale/SKILL.md +198 -0
  914. package/skills/shared/planetscale/evals/README.md +11 -0
  915. package/skills/shared/planetscale/evals/cases.yaml +46 -0
  916. package/skills/shared/planetscale/references/deploy-requests.md +75 -0
  917. package/skills/shared/planetscale/references/no-foreign-keys.md +88 -0
  918. package/skills/shared/planetscale/scripts/verify.sh +115 -0
  919. package/skills/shared/planning-with-files/SKILL.md +278 -0
  920. package/skills/shared/planning-with-files/examples.md +202 -0
  921. package/skills/shared/planning-with-files/reference.md +218 -0
  922. package/skills/shared/planning-with-files/scripts/attest-plan.ps1 +118 -0
  923. package/skills/shared/planning-with-files/scripts/attest-plan.sh +110 -0
  924. package/skills/shared/planning-with-files/scripts/check-complete.ps1 +44 -0
  925. package/skills/shared/planning-with-files/scripts/check-complete.sh +46 -0
  926. package/skills/shared/planning-with-files/scripts/init-session.ps1 +166 -0
  927. package/skills/shared/planning-with-files/scripts/init-session.sh +284 -0
  928. package/skills/shared/planning-with-files/scripts/resolve-plan-dir.ps1 +44 -0
  929. package/skills/shared/planning-with-files/scripts/resolve-plan-dir.sh +76 -0
  930. package/skills/shared/planning-with-files/scripts/session-catchup.py +438 -0
  931. package/skills/shared/planning-with-files/scripts/set-active-plan.ps1 +50 -0
  932. package/skills/shared/planning-with-files/scripts/set-active-plan.sh +50 -0
  933. package/skills/shared/planning-with-files/templates/findings.md +95 -0
  934. package/skills/shared/planning-with-files/templates/progress.md +114 -0
  935. package/skills/shared/planning-with-files/templates/task_plan.md +132 -0
  936. package/skills/shared/postgresdb/SKILL.md +354 -0
  937. package/skills/shared/postgresdb/evals/README.md +55 -0
  938. package/skills/shared/postgresdb/evals/cases.yaml +57 -0
  939. package/skills/shared/postgresdb/references/migrations.md +279 -0
  940. package/skills/shared/postgresdb/references/operations-and-security.md +267 -0
  941. package/skills/shared/postgresdb/references/query-optimization.md +374 -0
  942. package/skills/shared/postgresdb/references/schema-and-indexing.md +379 -0
  943. package/skills/shared/postgresdb/scripts/verify.sh +191 -0
  944. package/skills/shared/prisma-orm/SKILL.md +313 -0
  945. package/skills/shared/prisma-orm/evals/README.md +12 -0
  946. package/skills/shared/prisma-orm/evals/cases.yaml +56 -0
  947. package/skills/shared/prisma-orm/references/migrations-and-v7-upgrade.md +197 -0
  948. package/skills/shared/prisma-orm/references/queries-and-performance.md +169 -0
  949. package/skills/shared/prisma-orm/scripts/verify.sh +137 -0
  950. package/skills/shared/prompt-engineering/SKILL.md +127 -0
  951. package/skills/shared/prompt-engineering/evals/README.md +11 -0
  952. package/skills/shared/prompt-engineering/evals/cases.yaml +46 -0
  953. package/skills/shared/prompt-engineering/references/eval-templates.md +94 -0
  954. package/skills/shared/prompt-engineering/references/output-contracts.md +120 -0
  955. package/skills/shared/prompt-engineering/scripts/verify.sh +84 -0
  956. package/skills/shared/python/SKILL.md +320 -0
  957. package/skills/shared/python/evals/README.md +19 -0
  958. package/skills/shared/python/evals/cases.yaml +46 -0
  959. package/skills/shared/python/references/async.md +136 -0
  960. package/skills/shared/python/references/stdlib.md +162 -0
  961. package/skills/shared/python/references/typing.md +160 -0
  962. package/skills/shared/python/scripts/verify.sh +125 -0
  963. package/skills/shared/rag/SKILL.md +209 -0
  964. package/skills/shared/rag/evals/README.md +13 -0
  965. package/skills/shared/rag/evals/cases.yaml +45 -0
  966. package/skills/shared/rag/references/evaluation.md +99 -0
  967. package/skills/shared/rag/references/pipeline.md +151 -0
  968. package/skills/shared/rag/scripts/verify.sh +99 -0
  969. package/skills/shared/rails/SKILL.md +264 -0
  970. package/skills/shared/rails/evals/README.md +12 -0
  971. package/skills/shared/rails/evals/cases.yaml +47 -0
  972. package/skills/shared/rails/references/activerecord.md +148 -0
  973. package/skills/shared/rails/references/hotwire.md +139 -0
  974. package/skills/shared/rails/references/testing.md +110 -0
  975. package/skills/shared/rails/scripts/verify.sh +128 -0
  976. package/skills/shared/railway/SKILL.md +245 -0
  977. package/skills/shared/railway/evals/README.md +14 -0
  978. package/skills/shared/railway/evals/cases.yaml +44 -0
  979. package/skills/shared/railway/references/cli-cookbook.md +137 -0
  980. package/skills/shared/railway/references/config-as-code.md +120 -0
  981. package/skills/shared/railway/scripts/verify.sh +162 -0
  982. package/skills/shared/react/SKILL.md +182 -0
  983. package/skills/shared/react/evals/README.md +3 -0
  984. package/skills/shared/react/evals/cases.yaml +43 -0
  985. package/skills/shared/react/references/data-and-state.md +152 -0
  986. package/skills/shared/react/references/performance.md +75 -0
  987. package/skills/shared/react/references/routing.md +99 -0
  988. package/skills/shared/react/scripts/verify.sh +123 -0
  989. package/skills/shared/react-native/SKILL.md +215 -0
  990. package/skills/shared/react-native/evals/README.md +3 -0
  991. package/skills/shared/react-native/evals/cases.yaml +42 -0
  992. package/skills/shared/react-native/references/native-modules.md +123 -0
  993. package/skills/shared/react-native/references/performance-debugging.md +46 -0
  994. package/skills/shared/react-native/scripts/verify.sh +120 -0
  995. package/skills/shared/redis/SKILL.md +298 -0
  996. package/skills/shared/redis/evals/README.md +10 -0
  997. package/skills/shared/redis/evals/cases.yaml +43 -0
  998. package/skills/shared/redis/references/caching.md +116 -0
  999. package/skills/shared/redis/references/locks-and-rate-limiting.md +140 -0
  1000. package/skills/shared/redis/references/queues.md +102 -0
  1001. package/skills/shared/redis/scripts/verify.sh +164 -0
  1002. package/skills/shared/render/SKILL.md +256 -0
  1003. package/skills/shared/render/evals/README.md +12 -0
  1004. package/skills/shared/render/evals/cases.yaml +45 -0
  1005. package/skills/shared/render/references/blueprint-reference.md +203 -0
  1006. package/skills/shared/render/scripts/verify.sh +167 -0
  1007. package/skills/shared/replicate/SKILL.md +210 -0
  1008. package/skills/shared/replicate/evals/README.md +9 -0
  1009. package/skills/shared/replicate/evals/cases.yaml +45 -0
  1010. package/skills/shared/replicate/references/cog-packaging.md +89 -0
  1011. package/skills/shared/replicate/references/deployments-api.md +87 -0
  1012. package/skills/shared/replicate/references/webhooks-and-async.md +110 -0
  1013. package/skills/shared/replicate/scripts/verify.sh +162 -0
  1014. package/skills/shared/research-ops/SKILL.md +200 -0
  1015. package/skills/shared/research-ops/evals/README.md +13 -0
  1016. package/skills/shared/research-ops/evals/cases.yaml +38 -0
  1017. package/skills/shared/research-ops/references/credibility-rubric.md +78 -0
  1018. package/skills/shared/research-ops/references/memo-template.md +63 -0
  1019. package/skills/shared/research-ops/scripts/verify.sh +181 -0
  1020. package/skills/shared/review/SKILL.md +314 -0
  1021. package/skills/shared/review/evals/README.md +84 -0
  1022. package/skills/shared/review/evals/cases.yaml +55 -0
  1023. package/skills/shared/ruby/SKILL.md +295 -0
  1024. package/skills/shared/ruby/evals/README.md +12 -0
  1025. package/skills/shared/ruby/evals/cases.yaml +41 -0
  1026. package/skills/shared/ruby/references/gems-and-testing.md +208 -0
  1027. package/skills/shared/ruby/references/metaprogramming.md +161 -0
  1028. package/skills/shared/ruby/scripts/verify.sh +83 -0
  1029. package/skills/shared/runpod/SKILL.md +238 -0
  1030. package/skills/shared/runpod/evals/README.md +11 -0
  1031. package/skills/shared/runpod/evals/cases.yaml +47 -0
  1032. package/skills/shared/runpod/references/cost-and-scaling.md +85 -0
  1033. package/skills/shared/runpod/references/serverless-workers.md +101 -0
  1034. package/skills/shared/runpod/scripts/verify.sh +126 -0
  1035. package/skills/shared/rust/SKILL.md +320 -0
  1036. package/skills/shared/rust/evals/README.md +12 -0
  1037. package/skills/shared/rust/evals/cases.yaml +42 -0
  1038. package/skills/shared/rust/references/async-tokio.md +141 -0
  1039. package/skills/shared/rust/references/axum-service.md +132 -0
  1040. package/skills/shared/rust/references/ownership.md +86 -0
  1041. package/skills/shared/rust/references/testing.md +108 -0
  1042. package/skills/shared/rust/scripts/verify.sh +91 -0
  1043. package/skills/shared/scaling/SKILL.md +137 -0
  1044. package/skills/shared/scaling/evals/README.md +3 -0
  1045. package/skills/shared/scaling/evals/cases.yaml +42 -0
  1046. package/skills/shared/scaling/references/load-testing-k6.md +127 -0
  1047. package/skills/shared/scaling/scripts/example.load.js +24 -0
  1048. package/skills/shared/scaling/scripts/verify.sh +70 -0
  1049. package/skills/shared/sdd/SKILL.md +250 -0
  1050. package/skills/shared/sdd/evals/README.md +60 -0
  1051. package/skills/shared/sdd/evals/cases.yaml +90 -0
  1052. package/skills/shared/sdd/references/model-routing.md +194 -0
  1053. package/skills/shared/sdd-init/SKILL.md +189 -0
  1054. package/skills/shared/sdd-init/evals/README.md +3 -0
  1055. package/skills/shared/sdd-init/evals/cases.yaml +43 -0
  1056. package/skills/shared/secure-coding/SKILL.md +336 -0
  1057. package/skills/shared/secure-coding/evals/README.md +68 -0
  1058. package/skills/shared/secure-coding/evals/cases.yaml +55 -0
  1059. package/skills/shared/secure-coding/references/authn-authz.md +249 -0
  1060. package/skills/shared/secure-coding/references/owasp-by-stack.md +574 -0
  1061. package/skills/shared/secure-coding/references/secrets-and-supply-chain.md +205 -0
  1062. package/skills/shared/secure-coding/references/threat-modeling.md +213 -0
  1063. package/skills/shared/secure-coding/scripts/verify.sh +208 -0
  1064. package/skills/shared/security-scan/SKILL.md +219 -0
  1065. package/skills/shared/security-scan/evals/README.md +14 -0
  1066. package/skills/shared/security-scan/evals/cases.yaml +50 -0
  1067. package/skills/shared/security-scan/references/tools.md +97 -0
  1068. package/skills/shared/security-scan/references/triage.md +92 -0
  1069. package/skills/shared/security-scan/scripts/verify.sh +108 -0
  1070. package/skills/shared/ship/SKILL.md +272 -0
  1071. package/skills/shared/ship/evals/README.md +89 -0
  1072. package/skills/shared/ship/evals/cases.yaml +44 -0
  1073. package/skills/shared/shopify/SKILL.md +229 -0
  1074. package/skills/shared/shopify/evals/README.md +14 -0
  1075. package/skills/shared/shopify/evals/cases.yaml +41 -0
  1076. package/skills/shared/shopify/references/apps-graphql.md +103 -0
  1077. package/skills/shared/shopify/references/checkout-extensibility.md +71 -0
  1078. package/skills/shared/shopify/references/liquid-themes.md +89 -0
  1079. package/skills/shared/shopify/scripts/verify.sh +120 -0
  1080. package/skills/shared/simplify-code/SKILL.md +101 -0
  1081. package/skills/shared/simplify-code/evals/README.md +3 -0
  1082. package/skills/shared/simplify-code/evals/cases.yaml +42 -0
  1083. package/skills/shared/skill-scout/SKILL.md +169 -0
  1084. package/skills/shared/skill-scout/evals/README.md +12 -0
  1085. package/skills/shared/skill-scout/evals/cases.yaml +56 -0
  1086. package/skills/shared/skill-scout/references/install-commands.md +76 -0
  1087. package/skills/shared/skill-scout/scripts/verify.sh +154 -0
  1088. package/skills/shared/solid-js/SKILL.md +260 -0
  1089. package/skills/shared/solid-js/evals/README.md +3 -0
  1090. package/skills/shared/solid-js/evals/cases.yaml +38 -0
  1091. package/skills/shared/solid-js/references/reactivity-deep-dive.md +89 -0
  1092. package/skills/shared/solid-js/references/router-and-start.md +93 -0
  1093. package/skills/shared/solid-js/scripts/verify.sh +130 -0
  1094. package/skills/shared/source-grounded-development/SKILL.md +108 -0
  1095. package/skills/shared/source-grounded-development/evals/README.md +3 -0
  1096. package/skills/shared/source-grounded-development/evals/cases.yaml +42 -0
  1097. package/skills/shared/specify/SKILL.md +391 -0
  1098. package/skills/shared/specify/evals/README.md +73 -0
  1099. package/skills/shared/specify/evals/cases.yaml +93 -0
  1100. package/skills/shared/specify/references/eliciting-requirements.md +117 -0
  1101. package/skills/shared/specify/references/spec-template.md +101 -0
  1102. package/skills/shared/speckit-analyze/SKILL.md +35 -0
  1103. package/skills/shared/speckit-assess-decide/SKILL.md +36 -0
  1104. package/skills/shared/speckit-assess-define/SKILL.md +36 -0
  1105. package/skills/shared/speckit-assess-intake/SKILL.md +38 -0
  1106. package/skills/shared/speckit-assess-research/SKILL.md +36 -0
  1107. package/skills/shared/speckit-assess-shape/SKILL.md +36 -0
  1108. package/skills/shared/speckit-bug-assess/SKILL.md +38 -0
  1109. package/skills/shared/speckit-bug-fix/SKILL.md +37 -0
  1110. package/skills/shared/speckit-bug-test/SKILL.md +37 -0
  1111. package/skills/shared/speckit-checklist/SKILL.md +35 -0
  1112. package/skills/shared/speckit-clarify/SKILL.md +32 -0
  1113. package/skills/shared/speckit-constitution/SKILL.md +35 -0
  1114. package/skills/shared/speckit-converge/SKILL.md +36 -0
  1115. package/skills/shared/speckit-implement/SKILL.md +32 -0
  1116. package/skills/shared/speckit-plan/SKILL.md +37 -0
  1117. package/skills/shared/speckit-specify/SKILL.md +36 -0
  1118. package/skills/shared/speckit-tasks/SKILL.md +34 -0
  1119. package/skills/shared/spreadsheet-ops/SKILL.md +180 -0
  1120. package/skills/shared/spreadsheet-ops/evals/README.md +33 -0
  1121. package/skills/shared/spreadsheet-ops/evals/cases.yaml +42 -0
  1122. package/skills/shared/spreadsheet-ops/references/formula-cookbook.md +70 -0
  1123. package/skills/shared/spreadsheet-ops/references/python-excel.md +87 -0
  1124. package/skills/shared/spreadsheet-ops/references/sheets-api-appsscript.md +118 -0
  1125. package/skills/shared/spreadsheet-ops/scripts/verify.sh +152 -0
  1126. package/skills/shared/spring-boot/SKILL.md +350 -0
  1127. package/skills/shared/spring-boot/evals/README.md +11 -0
  1128. package/skills/shared/spring-boot/evals/cases.yaml +49 -0
  1129. package/skills/shared/spring-boot/references/jpa.md +94 -0
  1130. package/skills/shared/spring-boot/references/security.md +92 -0
  1131. package/skills/shared/spring-boot/references/testing.md +95 -0
  1132. package/skills/shared/spring-boot/scripts/verify.sh +115 -0
  1133. package/skills/shared/sql/SKILL.md +286 -0
  1134. package/skills/shared/sql/evals/README.md +9 -0
  1135. package/skills/shared/sql/evals/cases.yaml +49 -0
  1136. package/skills/shared/sql/references/ctes-and-recursion.md +63 -0
  1137. package/skills/shared/sql/references/joins-and-sets.md +71 -0
  1138. package/skills/shared/sql/references/portability.md +38 -0
  1139. package/skills/shared/sql/references/window-functions.md +72 -0
  1140. package/skills/shared/sql/scripts/verify.sh +139 -0
  1141. package/skills/shared/sqlite-turso/SKILL.md +214 -0
  1142. package/skills/shared/sqlite-turso/evals/README.md +24 -0
  1143. package/skills/shared/sqlite-turso/evals/cases.yaml +45 -0
  1144. package/skills/shared/sqlite-turso/references/embedded-replicas.md +96 -0
  1145. package/skills/shared/sqlite-turso/scripts/verify.sh +95 -0
  1146. package/skills/shared/structured-extraction/SKILL.md +230 -0
  1147. package/skills/shared/structured-extraction/evals/README.md +13 -0
  1148. package/skills/shared/structured-extraction/evals/cases.yaml +70 -0
  1149. package/skills/shared/structured-extraction/references/providers.md +152 -0
  1150. package/skills/shared/structured-extraction/scripts/verify.sh +160 -0
  1151. package/skills/shared/suggest/SKILL.md +123 -0
  1152. package/skills/shared/suggest/evals/README.md +17 -0
  1153. package/skills/shared/suggest/evals/cases.yaml +78 -0
  1154. package/skills/shared/supabase/SKILL.md +268 -0
  1155. package/skills/shared/supabase/evals/README.md +12 -0
  1156. package/skills/shared/supabase/evals/cases.yaml +42 -0
  1157. package/skills/shared/supabase/references/auth-ssr.md +173 -0
  1158. package/skills/shared/supabase/references/rls-cookbook.md +122 -0
  1159. package/skills/shared/supabase/scripts/verify.sh +149 -0
  1160. package/skills/shared/svelte/SKILL.md +238 -0
  1161. package/skills/shared/svelte/evals/README.md +3 -0
  1162. package/skills/shared/svelte/evals/cases.yaml +41 -0
  1163. package/skills/shared/svelte/references/runes.md +97 -0
  1164. package/skills/shared/svelte/references/sveltekit-data.md +156 -0
  1165. package/skills/shared/svelte/scripts/verify.sh +128 -0
  1166. package/skills/shared/swift-ios/SKILL.md +224 -0
  1167. package/skills/shared/swift-ios/evals/README.md +3 -0
  1168. package/skills/shared/swift-ios/evals/cases.yaml +46 -0
  1169. package/skills/shared/swift-ios/references/concurrency.md +132 -0
  1170. package/skills/shared/swift-ios/references/testing.md +112 -0
  1171. package/skills/shared/swift-ios/scripts/verify.sh +98 -0
  1172. package/skills/shared/tasks/SKILL.md +265 -0
  1173. package/skills/shared/tasks/evals/README.md +70 -0
  1174. package/skills/shared/tasks/evals/cases.yaml +75 -0
  1175. package/skills/shared/tauri/SKILL.md +219 -0
  1176. package/skills/shared/tauri/evals/README.md +12 -0
  1177. package/skills/shared/tauri/evals/cases.yaml +46 -0
  1178. package/skills/shared/tauri/references/bundling-distribution.md +129 -0
  1179. package/skills/shared/tauri/references/security.md +143 -0
  1180. package/skills/shared/tauri/scripts/verify.sh +178 -0
  1181. package/skills/shared/technical-writing/SKILL.md +230 -0
  1182. package/skills/shared/technical-writing/evals/README.md +12 -0
  1183. package/skills/shared/technical-writing/evals/cases.yaml +53 -0
  1184. package/skills/shared/technical-writing/references/diataxis-modes.md +131 -0
  1185. package/skills/shared/technical-writing/references/vale-starter.md +90 -0
  1186. package/skills/shared/technical-writing/scripts/verify.sh +83 -0
  1187. package/skills/shared/testing-go/SKILL.md +263 -0
  1188. package/skills/shared/testing-go/evals/README.md +3 -0
  1189. package/skills/shared/testing-go/evals/cases.yaml +46 -0
  1190. package/skills/shared/testing-go/references/coverage-and-benchmarks.md +85 -0
  1191. package/skills/shared/testing-go/references/mocks-and-fakes.md +140 -0
  1192. package/skills/shared/testing-go/references/synctest-and-concurrency.md +82 -0
  1193. package/skills/shared/testing-go/scripts/verify.sh +72 -0
  1194. package/skills/shared/testing-py/SKILL.md +197 -0
  1195. package/skills/shared/testing-py/evals/README.md +5 -0
  1196. package/skills/shared/testing-py/evals/cases.yaml +44 -0
  1197. package/skills/shared/testing-py/references/mocking.md +141 -0
  1198. package/skills/shared/testing-py/references/property-testing.md +99 -0
  1199. package/skills/shared/testing-py/scripts/verify.sh +117 -0
  1200. package/skills/shared/testing-web/SKILL.md +244 -0
  1201. package/skills/shared/testing-web/evals/README.md +11 -0
  1202. package/skills/shared/testing-web/evals/cases.yaml +52 -0
  1203. package/skills/shared/testing-web/references/jest-setup.md +88 -0
  1204. package/skills/shared/testing-web/references/recipes.md +116 -0
  1205. package/skills/shared/testing-web/scripts/verify.sh +111 -0
  1206. package/skills/shared/together-fireworks/SKILL.md +176 -0
  1207. package/skills/shared/together-fireworks/evals/README.md +3 -0
  1208. package/skills/shared/together-fireworks/evals/cases.yaml +50 -0
  1209. package/skills/shared/together-fireworks/references/batch-and-tuning.md +59 -0
  1210. package/skills/shared/together-fireworks/references/models-and-pricing.md +79 -0
  1211. package/skills/shared/together-fireworks/scripts/verify.sh +165 -0
  1212. package/skills/shared/training-data/SKILL.md +226 -0
  1213. package/skills/shared/training-data/evals/README.md +13 -0
  1214. package/skills/shared/training-data/evals/cases.yaml +41 -0
  1215. package/skills/shared/training-data/references/formats.md +118 -0
  1216. package/skills/shared/training-data/references/synthesis-dedup-quality.md +134 -0
  1217. package/skills/shared/translation-l10n/SKILL.md +229 -0
  1218. package/skills/shared/translation-l10n/evals/README.md +3 -0
  1219. package/skills/shared/translation-l10n/evals/cases.yaml +39 -0
  1220. package/skills/shared/translation-l10n/references/icu-cookbook.md +82 -0
  1221. package/skills/shared/translation-l10n/references/rtl-and-bidi.md +60 -0
  1222. package/skills/shared/typescript/SKILL.md +225 -0
  1223. package/skills/shared/typescript/evals/README.md +15 -0
  1224. package/skills/shared/typescript/evals/cases.yaml +46 -0
  1225. package/skills/shared/typescript/references/build-and-monorepo.md +141 -0
  1226. package/skills/shared/typescript/references/type-system.md +162 -0
  1227. package/skills/shared/typescript/scripts/verify.sh +52 -0
  1228. package/skills/shared/ui-engineering/SKILL.md +113 -0
  1229. package/skills/shared/ui-engineering/evals/cases.yaml +38 -0
  1230. package/skills/shared/unity/SKILL.md +282 -0
  1231. package/skills/shared/unity/evals/README.md +8 -0
  1232. package/skills/shared/unity/evals/cases.yaml +43 -0
  1233. package/skills/shared/unity/references/build-and-platforms.md +65 -0
  1234. package/skills/shared/unity/references/input-system.md +102 -0
  1235. package/skills/shared/unity/references/lifecycle-deep-dive.md +75 -0
  1236. package/skills/shared/unreal/SKILL.md +270 -0
  1237. package/skills/shared/unreal/evals/README.md +12 -0
  1238. package/skills/shared/unreal/evals/cases.yaml +45 -0
  1239. package/skills/shared/unreal/references/blueprint-cpp-parity.md +109 -0
  1240. package/skills/shared/unreal/references/gameplay-framework.md +95 -0
  1241. package/skills/shared/unreal/references/packaging.md +83 -0
  1242. package/skills/shared/unslop/SKILL.md +143 -0
  1243. package/skills/shared/unslop/evals/README.md +25 -0
  1244. package/skills/shared/unslop/evals/cases.yaml +61 -0
  1245. package/skills/shared/unsloth/SKILL.md +254 -0
  1246. package/skills/shared/unsloth/evals/README.md +10 -0
  1247. package/skills/shared/unsloth/evals/cases.yaml +42 -0
  1248. package/skills/shared/unsloth/references/export.md +75 -0
  1249. package/skills/shared/unsloth/references/grpo.md +91 -0
  1250. package/skills/shared/unsloth/references/masking-and-templates.md +91 -0
  1251. package/skills/shared/variant-explorer/SKILL.md +93 -0
  1252. package/skills/shared/variant-explorer/evals/cases.yaml +38 -0
  1253. package/skills/shared/vector-db/SKILL.md +189 -0
  1254. package/skills/shared/vector-db/evals/README.md +10 -0
  1255. package/skills/shared/vector-db/evals/cases.yaml +45 -0
  1256. package/skills/shared/vector-db/references/engines.md +175 -0
  1257. package/skills/shared/vector-db/references/tuning.md +62 -0
  1258. package/skills/shared/vector-db/scripts/verify.sh +110 -0
  1259. package/skills/shared/vercel/SKILL.md +242 -0
  1260. package/skills/shared/vercel/evals/README.md +23 -0
  1261. package/skills/shared/vercel/evals/cases.yaml +45 -0
  1262. package/skills/shared/vercel/references/cli-cookbook.md +98 -0
  1263. package/skills/shared/vercel/references/vercel-json.md +120 -0
  1264. package/skills/shared/vercel/scripts/verify.sh +168 -0
  1265. package/skills/shared/verify/SKILL.md +230 -0
  1266. package/skills/shared/verify/evals/README.md +78 -0
  1267. package/skills/shared/verify/evals/cases.yaml +104 -0
  1268. package/skills/shared/vllm/SKILL.md +235 -0
  1269. package/skills/shared/vllm/evals/README.md +9 -0
  1270. package/skills/shared/vllm/evals/cases.yaml +47 -0
  1271. package/skills/shared/vllm/references/flags-and-endpoints.md +105 -0
  1272. package/skills/shared/vllm/references/memory-and-throughput.md +78 -0
  1273. package/skills/shared/vue-nuxt/SKILL.md +323 -0
  1274. package/skills/shared/vue-nuxt/evals/README.md +11 -0
  1275. package/skills/shared/vue-nuxt/evals/cases.yaml +49 -0
  1276. package/skills/shared/vue-nuxt/references/data-and-state.md +127 -0
  1277. package/skills/shared/vue-nuxt/references/migration-nuxt4.md +79 -0
  1278. package/skills/shared/vue-nuxt/references/nitro-and-rendering.md +117 -0
  1279. package/skills/shared/vue-nuxt/references/reactivity.md +135 -0
  1280. package/skills/shared/vue-nuxt/scripts/verify.sh +148 -0
  1281. package/skills/shared/webhooks/SKILL.md +229 -0
  1282. package/skills/shared/webhooks/evals/README.md +15 -0
  1283. package/skills/shared/webhooks/evals/cases.yaml +46 -0
  1284. package/skills/shared/webhooks/references/framework-raw-body.md +97 -0
  1285. package/skills/shared/webhooks/references/signature-schemes.md +66 -0
  1286. package/skills/shared/webhooks/scripts/verify.sh +142 -0
  1287. package/skills/shared/wordpress/SKILL.md +224 -0
  1288. package/skills/shared/wordpress/evals/README.md +3 -0
  1289. package/skills/shared/wordpress/evals/cases.yaml +50 -0
  1290. package/skills/shared/wordpress/references/hardening.md +108 -0
  1291. package/skills/shared/wordpress/references/performance.md +80 -0
  1292. package/skills/shared/wordpress/references/woocommerce.md +65 -0
  1293. package/skills/shared/wordpress/scripts/verify.sh +96 -0
  1294. package/skills/shared/worktrees/SKILL.md +204 -0
  1295. package/skills/shared/worktrees/evals/README.md +78 -0
  1296. package/skills/shared/worktrees/evals/cases.yaml +47 -0
@@ -0,0 +1,2024 @@
1
+ [
2
+ {
3
+ "id": "switzer-semibold",
4
+ "name": "Switzer",
5
+ "class": "grotesk-tight",
6
+ "display": {
7
+ "family": "Switzer",
8
+ "source": "fontshare",
9
+ "slug": "switzer",
10
+ "weights": [
11
+ 600
12
+ ],
13
+ "italic": false,
14
+ "settings": "weight 600 · tracking -0.04em · leading 0.95 · sentence case; charcoal rather than pure black",
15
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=switzer@400,500,600&display=swap\" rel=\"stylesheet\">"
16
+ },
17
+ "text": {
18
+ "family": "Switzer",
19
+ "source": "fontshare",
20
+ "slug": "switzer",
21
+ "weights": [
22
+ 400,
23
+ 500
24
+ ],
25
+ "italic": false,
26
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking -0.005em",
27
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=switzer@400,500,600&display=swap\" rel=\"stylesheet\">"
28
+ },
29
+ "standsInFor": [
30
+ "Suisse Intl",
31
+ "Neue Haas Grotesk"
32
+ ],
33
+ "note": "One neo-grotesk doing everything: semibold headings pulled tight, small regular text, no capitals and no second voice. Suits software, hardware and studio pages that want to look exact and unshowy.",
34
+ "seenIn": [
35
+ "aww-noho",
36
+ "opl-vessa",
37
+ "aww-aspen-search",
38
+ "opl-rows"
39
+ ],
40
+ "links": [
41
+ "https://api.fontshare.com/v2/css?f[]=switzer@400,500,600&display=swap"
42
+ ],
43
+ "scale": {
44
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
45
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
46
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
47
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
48
+ }
49
+ },
50
+ {
51
+ "id": "general-sans-bold",
52
+ "name": "General Sans",
53
+ "class": "grotesk-tight",
54
+ "display": {
55
+ "family": "General Sans",
56
+ "source": "fontshare",
57
+ "slug": "general-sans",
58
+ "weights": [
59
+ 700
60
+ ],
61
+ "italic": false,
62
+ "settings": "weight 700 · tracking -0.02em · leading 0.9 · sentence case; sizes jump straight from 16px text to 10vw and larger",
63
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=general-sans@400,500,700&display=swap\" rel=\"stylesheet\">"
64
+ },
65
+ "text": {
66
+ "family": "General Sans",
67
+ "source": "fontshare",
68
+ "slug": "general-sans",
69
+ "weights": [
70
+ 400,
71
+ 500
72
+ ],
73
+ "italic": false,
74
+ "settings": "400 for body and lists, 500 for emphasis · leading 1.45 · tracking 0",
75
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=general-sans@400,500,700&display=swap\" rel=\"stylesheet\">"
76
+ },
77
+ "standsInFor": [
78
+ "PP Neue Montreal",
79
+ "Aeonik"
80
+ ],
81
+ "note": "A grotesk with slightly geometric bowls, set bold and very large against plain 16px text with nothing in between. Suits studios, type and product launches, and finance or tech brands that lead with the name.",
82
+ "seenIn": [
83
+ "aww-pp-neue-montreal",
84
+ "aww-moto-finance",
85
+ "opl-brikkenco",
86
+ "aww-nothin"
87
+ ],
88
+ "links": [
89
+ "https://api.fontshare.com/v2/css?f[]=general-sans@400,500,700&display=swap"
90
+ ],
91
+ "scale": {
92
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
93
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
94
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
95
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
96
+ }
97
+ },
98
+ {
99
+ "id": "schibsted-heavy",
100
+ "name": "Schibsted Grotesk",
101
+ "class": "grotesk-tight",
102
+ "display": {
103
+ "family": "Schibsted Grotesk",
104
+ "source": "google",
105
+ "weights": [
106
+ 800
107
+ ],
108
+ "italic": false,
109
+ "settings": "weight 800 · tracking -0.05em · leading 0.88 · sentence case or all lowercase",
110
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@400;600;800&display=swap\" rel=\"stylesheet\">"
111
+ },
112
+ "text": {
113
+ "family": "Schibsted Grotesk",
114
+ "source": "google",
115
+ "weights": [
116
+ 400,
117
+ 600
118
+ ],
119
+ "italic": false,
120
+ "settings": "400 for paragraphs, 600 for navigation and other functional text · leading 1.4 · tracking -0.01em",
121
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@400;600;800&display=swap\" rel=\"stylesheet\">"
122
+ },
123
+ "standsInFor": [
124
+ "ABC Diatype",
125
+ "Khteka"
126
+ ],
127
+ "note": "A compact, warm grotesk set heavy with letters almost touching; small text stays in the same family at semibold. Suits music, events and culture pages where the type is the image.",
128
+ "seenIn": [
129
+ "aww-paul-kalkbrenner",
130
+ "opl-rendez-vous-franceclat",
131
+ "aww-monolog"
132
+ ],
133
+ "links": [
134
+ "https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@400;600;800&display=swap"
135
+ ],
136
+ "scale": {
137
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
138
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
139
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
140
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
141
+ }
142
+ },
143
+ {
144
+ "id": "hanken-medium",
145
+ "name": "Hanken Grotesk",
146
+ "class": "grotesk-tight",
147
+ "display": {
148
+ "family": "Hanken Grotesk",
149
+ "source": "google",
150
+ "weights": [
151
+ 500
152
+ ],
153
+ "italic": false,
154
+ "settings": "weight 500 · tracking -0.05em · leading 0.9 · sentence case; one statement size (about 6vw) used for every heading",
155
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500&display=swap\" rel=\"stylesheet\">"
156
+ },
157
+ "text": {
158
+ "family": "Hanken Grotesk",
159
+ "source": "google",
160
+ "weights": [
161
+ 400,
162
+ 500
163
+ ],
164
+ "italic": false,
165
+ "settings": "400 for body, 500 for emphasis · leading 1.45 · tracking -0.005em",
166
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500&display=swap\" rel=\"stylesheet\">"
167
+ },
168
+ "standsInFor": [
169
+ "Akzidenz Grotesk",
170
+ "LayGrotesk"
171
+ ],
172
+ "note": "Medium-weight grotesk statements at one large size against caption-size text: a two-size system with no bold. Suits portfolios, agencies and tools that speak in short declarative lines.",
173
+ "seenIn": [
174
+ "aww-bleibtgleich26",
175
+ "aww-made-with-gsap-1",
176
+ "opl-locker-land",
177
+ "opl-builders-table"
178
+ ],
179
+ "links": [
180
+ "https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500&display=swap"
181
+ ],
182
+ "scale": {
183
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
184
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
185
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
186
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
187
+ }
188
+ },
189
+ {
190
+ "id": "bricolage-contrast",
191
+ "name": "Bricolage Grotesque",
192
+ "class": "grotesk-tight",
193
+ "display": {
194
+ "family": "Bricolage Grotesque",
195
+ "source": "google",
196
+ "weights": [
197
+ 600
198
+ ],
199
+ "italic": false,
200
+ "settings": "weight 600 · tracking -0.04em · leading 0.92 · sentence case; leave optical sizing on so large sizes tighten and gain contrast",
201
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;500;600&display=swap\" rel=\"stylesheet\">"
202
+ },
203
+ "text": {
204
+ "family": "Bricolage Grotesque",
205
+ "source": "google",
206
+ "weights": [
207
+ 400,
208
+ 500
209
+ ],
210
+ "italic": false,
211
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
212
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;500;600&display=swap\" rel=\"stylesheet\">"
213
+ },
214
+ "standsInFor": [
215
+ "Beausite Classic",
216
+ "F37 Analog"
217
+ ],
218
+ "note": "A grotesk with visible stroke contrast and slightly irregular curves, so headings look drawn rather than engineered. Suits reports, consultancies and design-led software that want warmth without a serif.",
219
+ "seenIn": [
220
+ "aww-ai-in-design-report-2026",
221
+ "aww-illoca",
222
+ "opl-ohhmydesign"
223
+ ],
224
+ "links": [
225
+ "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;500;600&display=swap"
226
+ ],
227
+ "scale": {
228
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
229
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
230
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
231
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
232
+ }
233
+ },
234
+ {
235
+ "id": "franklin-source",
236
+ "name": "Libre Franklin / Source Serif 4",
237
+ "class": "grotesk-tight",
238
+ "display": {
239
+ "family": "Libre Franklin",
240
+ "source": "google",
241
+ "weights": [
242
+ 700
243
+ ],
244
+ "italic": false,
245
+ "settings": "weight 700 · tracking -0.035em · leading 0.92 · uppercase for the title, sentence case for section headings",
246
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Libre+Franklin:wght@700&family=Source+Serif+4:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
247
+ },
248
+ "text": {
249
+ "family": "Source Serif 4",
250
+ "source": "google",
251
+ "weights": [
252
+ 400,
253
+ 600
254
+ ],
255
+ "italic": true,
256
+ "settings": "400 for body, 600 for emphasis, italic for quotations · leading 1.55 · tracking 0",
257
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Libre+Franklin:wght@700&family=Source+Serif+4:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
258
+ },
259
+ "standsInFor": [
260
+ "Founders Grotesk",
261
+ "Die Grotesk",
262
+ "NON Natural Grotesk"
263
+ ],
264
+ "note": "An American gothic for headings over a sober transitional serif for reading, the pairing of a newspaper front page. Suits essays, annual reports, archives and finance pages that have real paragraphs.",
265
+ "seenIn": [
266
+ "aww-dragonfly-redux",
267
+ "aww-trevor-noah",
268
+ "aww-mosbys-files"
269
+ ],
270
+ "links": [
271
+ "https://fonts.googleapis.com/css2?family=Libre+Franklin:wght@700&family=Source+Serif+4:ital,wght@0,400;0,600;1,400;1,600&display=swap"
272
+ ],
273
+ "scale": {
274
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
275
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
276
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
277
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
278
+ }
279
+ },
280
+ {
281
+ "id": "switzer-roman",
282
+ "name": "Switzer",
283
+ "class": "grotesk-light",
284
+ "display": {
285
+ "family": "Switzer",
286
+ "source": "fontshare",
287
+ "slug": "switzer",
288
+ "weights": [
289
+ 400
290
+ ],
291
+ "italic": false,
292
+ "settings": "weight 400 · tracking -0.03em · leading 1.1 · sentence case; headings stay small (28–40px) and at most one line jumps to 5vw",
293
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=switzer@400,500&display=swap\" rel=\"stylesheet\">"
294
+ },
295
+ "text": {
296
+ "family": "Switzer",
297
+ "source": "fontshare",
298
+ "slug": "switzer",
299
+ "weights": [
300
+ 400,
301
+ 500
302
+ ],
303
+ "italic": false,
304
+ "settings": "400 for everything, 500 only for names and links · leading 1.45 · tracking -0.01em; hierarchy by ink against mid-grey",
305
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=switzer@400,500&display=swap\" rel=\"stylesheet\">"
306
+ },
307
+ "standsInFor": [
308
+ "Neue Haas Grotesk 55 Roman",
309
+ "Helvetica Now"
310
+ ],
311
+ "note": "A single roman weight of a Swiss neo-grotesk at two or three modest sizes; position and grey value do the work that size and bold usually do. Suits architects, galleries, studios and any quiet page where photographs carry the scale.",
312
+ "seenIn": [
313
+ "aww-revelatio-studio",
314
+ "opl-spatial",
315
+ "aww-pensatori-irrazionali",
316
+ "opl-compile"
317
+ ],
318
+ "links": [
319
+ "https://api.fontshare.com/v2/css?f[]=switzer@400,500&display=swap"
320
+ ],
321
+ "scale": {
322
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
323
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
324
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
325
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
326
+ }
327
+ },
328
+ {
329
+ "id": "archivo-regular",
330
+ "name": "Archivo",
331
+ "class": "grotesk-light",
332
+ "display": {
333
+ "family": "Archivo",
334
+ "source": "google",
335
+ "weights": [
336
+ 400
337
+ ],
338
+ "italic": false,
339
+ "settings": "weight 400 · tracking -0.02em · leading 1.0 · sentence case; never bold, inactive items fade to grey",
340
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo:wght@400;600&display=swap\" rel=\"stylesheet\">"
341
+ },
342
+ "text": {
343
+ "family": "Archivo",
344
+ "source": "google",
345
+ "weights": [
346
+ 400,
347
+ 600
348
+ ],
349
+ "italic": false,
350
+ "settings": "400 for body, 600 for buttons and short emphasis · leading 1.5 · tracking 0",
351
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo:wght@400;600&display=swap\" rel=\"stylesheet\">"
352
+ },
353
+ "standsInFor": [
354
+ "Scto Grotesk A",
355
+ "Cash Sans"
356
+ ],
357
+ "note": "A sturdy grotesque kept at regular weight even at 88px, so the page reads as composed rather than loud. Suits finance, infrastructure and research pages that need to look sober and current.",
358
+ "seenIn": [
359
+ "aww-sharplink",
360
+ "opl-plastic",
361
+ "opl-lovably",
362
+ "opl-berd"
363
+ ],
364
+ "links": [
365
+ "https://fonts.googleapis.com/css2?family=Archivo:wght@400;600&display=swap"
366
+ ],
367
+ "scale": {
368
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
369
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
370
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
371
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
372
+ }
373
+ },
374
+ {
375
+ "id": "clash-grotesk-regular",
376
+ "name": "Clash Grotesk",
377
+ "class": "grotesk-light",
378
+ "display": {
379
+ "family": "Clash Grotesk",
380
+ "source": "fontshare",
381
+ "slug": "clash-grotesk",
382
+ "weights": [
383
+ 400
384
+ ],
385
+ "italic": false,
386
+ "settings": "weight 400 · tracking -0.03em · leading 0.95 · sentence case, or uppercase for one statement",
387
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=clash-grotesk@400,500&display=swap\" rel=\"stylesheet\">"
388
+ },
389
+ "text": {
390
+ "family": "Clash Grotesk",
391
+ "source": "fontshare",
392
+ "slug": "clash-grotesk",
393
+ "weights": [
394
+ 400,
395
+ 500
396
+ ],
397
+ "italic": false,
398
+ "settings": "400 for body, 500 for emphasis · leading 1.4 · tracking 0",
399
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=clash-grotesk@400,500&display=swap\" rel=\"stylesheet\">"
400
+ },
401
+ "standsInFor": [
402
+ "Sneak",
403
+ "ABC Monument Grotesk"
404
+ ],
405
+ "note": "A slightly narrow neo-grotesk with closed apertures, used at regular weight from marquee size down to paragraphs. Suits agencies and digital studios that want large type without heaviness.",
406
+ "seenIn": [
407
+ "aww-px-push",
408
+ "opl-wild-as",
409
+ "aww-sstr-friction-reduction"
410
+ ],
411
+ "links": [
412
+ "https://api.fontshare.com/v2/css?f[]=clash-grotesk@400,500&display=swap"
413
+ ],
414
+ "scale": {
415
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
416
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
417
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
418
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
419
+ }
420
+ },
421
+ {
422
+ "id": "work-sans-light",
423
+ "name": "Work Sans",
424
+ "class": "grotesk-light",
425
+ "display": {
426
+ "family": "Work Sans",
427
+ "source": "google",
428
+ "weights": [
429
+ 300
430
+ ],
431
+ "italic": false,
432
+ "settings": "weight 300 · tracking -0.035em · leading 1.0 · sentence case",
433
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500&display=swap\" rel=\"stylesheet\">"
434
+ },
435
+ "text": {
436
+ "family": "Work Sans",
437
+ "source": "google",
438
+ "weights": [
439
+ 400,
440
+ 500
441
+ ],
442
+ "italic": false,
443
+ "settings": "400 for body, 500 for emphasis · leading 1.55 · tracking 0",
444
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500&display=swap\" rel=\"stylesheet\">"
445
+ },
446
+ "standsInFor": [
447
+ "ABC Favorit",
448
+ "Clarkson Light",
449
+ "PP Mori"
450
+ ],
451
+ "note": "A light grotesque with open, slightly old-fashioned shapes; large headings look airy and the text weight beneath stays easy to read. Suits AI and research products, fashion houses and calm brand sites.",
452
+ "seenIn": [
453
+ "aww-cerebrium",
454
+ "aww-squarespace-foundations",
455
+ "aww-boc-studio"
456
+ ],
457
+ "links": [
458
+ "https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;500&display=swap"
459
+ ],
460
+ "scale": {
461
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
462
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
463
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
464
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
465
+ }
466
+ },
467
+ {
468
+ "id": "anton-work",
469
+ "name": "Anton / Work Sans",
470
+ "class": "condensed-heavy",
471
+ "display": {
472
+ "family": "Anton",
473
+ "source": "google",
474
+ "weights": [
475
+ 400
476
+ ],
477
+ "italic": false,
478
+ "settings": "weight 400 (single heavy cut) · tracking -0.01em · leading 0.86 · uppercase",
479
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Anton:wght@400&family=Work+Sans:wght@400;600&display=swap\" rel=\"stylesheet\">"
480
+ },
481
+ "text": {
482
+ "family": "Work Sans",
483
+ "source": "google",
484
+ "weights": [
485
+ 400,
486
+ 600
487
+ ],
488
+ "italic": false,
489
+ "settings": "400 for body, 600 for links and short emphasis · leading 1.5 · tracking 0",
490
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Anton:wght@400&family=Work+Sans:wght@400;600&display=swap\" rel=\"stylesheet\">"
491
+ },
492
+ "standsInFor": [
493
+ "Druk",
494
+ "Thunder",
495
+ "Acme Gothic"
496
+ ],
497
+ "note": "Compressed heavy capitals stacked tight, with a neutral grotesque kept small beneath. Suits fashion drops, sport, nightlife and any page built as a poster.",
498
+ "seenIn": [
499
+ "aww-serotoninn",
500
+ "opl-juggle",
501
+ "opl-lorenzo-bocchi-photography"
502
+ ],
503
+ "links": [
504
+ "https://fonts.googleapis.com/css2?family=Anton:wght@400&family=Work+Sans:wght@400;600&display=swap"
505
+ ],
506
+ "scale": {
507
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
508
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
509
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
510
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
511
+ }
512
+ },
513
+ {
514
+ "id": "big-shoulders-public",
515
+ "name": "Big Shoulders / Public Sans",
516
+ "class": "condensed-heavy",
517
+ "display": {
518
+ "family": "Big Shoulders",
519
+ "source": "google",
520
+ "weights": [
521
+ 800
522
+ ],
523
+ "italic": false,
524
+ "settings": "weight 800 · tracking -0.005em · leading 0.88 · uppercase",
525
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Big+Shoulders:wght@800&family=Public+Sans:wght@400;600&display=swap\" rel=\"stylesheet\">"
526
+ },
527
+ "text": {
528
+ "family": "Public Sans",
529
+ "source": "google",
530
+ "weights": [
531
+ 400,
532
+ 600
533
+ ],
534
+ "italic": false,
535
+ "settings": "400 for body, 600 for emphasis · leading 1.5 · tracking 0",
536
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Big+Shoulders:wght@800&family=Public+Sans:wght@400;600&display=swap\" rel=\"stylesheet\">"
537
+ },
538
+ "standsInFor": [
539
+ "Founders Grotesk Condensed",
540
+ "PP Neue York",
541
+ "Knockout"
542
+ ],
543
+ "note": "A tall American gothic taken from city signage, blunt and civic, over a plain public-service sans. Suits culture indexes, community projects, bars, sport clubs and local campaigns.",
544
+ "seenIn": [
545
+ "aww-mosbys-files",
546
+ "opl-the-sapphic-bar-index",
547
+ "opl-the-deep-end",
548
+ "aww-colonia-zacamil"
549
+ ],
550
+ "links": [
551
+ "https://fonts.googleapis.com/css2?family=Big+Shoulders:wght@800&family=Public+Sans:wght@400;600&display=swap"
552
+ ],
553
+ "scale": {
554
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
555
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
556
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
557
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
558
+ }
559
+ },
560
+ {
561
+ "id": "archivo-compressed",
562
+ "name": "Archivo",
563
+ "class": "condensed-heavy",
564
+ "display": {
565
+ "family": "Archivo",
566
+ "source": "google",
567
+ "weights": [
568
+ 800
569
+ ],
570
+ "italic": false,
571
+ "settings": "weight 800 at font-stretch 62% (load the wdth axis and use its narrowest setting) · tracking -0.01em · leading 0.86 · uppercase",
572
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo:wdth,wght@62..125,100..900&display=swap\" rel=\"stylesheet\">"
573
+ },
574
+ "text": {
575
+ "family": "Archivo",
576
+ "source": "google",
577
+ "weights": [
578
+ 400,
579
+ 500
580
+ ],
581
+ "italic": false,
582
+ "settings": "normal width · 400 for body, 500 for buttons and emphasis · leading 1.5 · tracking 0",
583
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo:wdth,wght@62..125,100..900&display=swap\" rel=\"stylesheet\">"
584
+ },
585
+ "standsInFor": [
586
+ "Helvetica Now Display Condensed"
587
+ ],
588
+ "note": "One variable family pushed to its narrowest, heaviest setting for headlines and relaxed to normal width for text, so display and body share a skeleton. Suits sportswear, campaigns and fintech pages that speak in capitals.",
589
+ "seenIn": [
590
+ "aww-decathlon-yestalgia",
591
+ "opl-uglycash",
592
+ "opl-juggle"
593
+ ],
594
+ "links": [
595
+ "https://fonts.googleapis.com/css2?family=Archivo:wdth,wght@62..125,100..900&display=swap"
596
+ ],
597
+ "scale": {
598
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
599
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
600
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
601
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
602
+ }
603
+ },
604
+ {
605
+ "id": "bebas-garamond",
606
+ "name": "Bebas Neue / EB Garamond",
607
+ "class": "condensed-heavy",
608
+ "display": {
609
+ "family": "Bebas Neue",
610
+ "source": "google",
611
+ "weights": [
612
+ 400
613
+ ],
614
+ "italic": false,
615
+ "settings": "weight 400 (single cut, capitals only) · tracking -0.02em, tightening to -0.06em above 15vw · leading 0.85 · uppercase",
616
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bebas+Neue:wght@400&family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&display=swap\" rel=\"stylesheet\">"
617
+ },
618
+ "text": {
619
+ "family": "EB Garamond",
620
+ "source": "google",
621
+ "weights": [
622
+ 400,
623
+ 500
624
+ ],
625
+ "italic": true,
626
+ "settings": "leading 1.45 · tracking 0",
627
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bebas+Neue:wght@400&family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&display=swap\" rel=\"stylesheet\">"
628
+ },
629
+ "standsInFor": [
630
+ "Founders Grotesk Condensed",
631
+ "Cardinal Classic Long",
632
+ "Signifier"
633
+ ],
634
+ "note": "Huge condensed capitals against a light old-style serif with italics: an industrial voice and a literary one, with a twenty-fold size gap between them. Suits crafted physical products, spirits, outdoor goods and hospitality.",
635
+ "seenIn": [
636
+ "aww-longbow",
637
+ "aww-white-desert",
638
+ "aww-mosbys-files"
639
+ ],
640
+ "links": [
641
+ "https://fonts.googleapis.com/css2?family=Bebas+Neue:wght@400&family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&display=swap"
642
+ ],
643
+ "scale": {
644
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
645
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
646
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
647
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
648
+ }
649
+ },
650
+ {
651
+ "id": "barlow-condensed",
652
+ "name": "Barlow Condensed / Barlow",
653
+ "class": "condensed-heavy",
654
+ "display": {
655
+ "family": "Barlow Condensed",
656
+ "source": "google",
657
+ "weights": [
658
+ 700
659
+ ],
660
+ "italic": false,
661
+ "settings": "weight 700 · tracking -0.02em · leading 0.9 · uppercase for statements, mixed case for item titles",
662
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@700&family=Barlow:wght@400;500&display=swap\" rel=\"stylesheet\">"
663
+ },
664
+ "text": {
665
+ "family": "Barlow",
666
+ "source": "google",
667
+ "weights": [
668
+ 400,
669
+ 500
670
+ ],
671
+ "italic": false,
672
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
673
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@700&family=Barlow:wght@400;500&display=swap\" rel=\"stylesheet\">"
674
+ },
675
+ "standsInFor": [
676
+ "FF DIN Condensed",
677
+ "Helvetica Now Display Condensed"
678
+ ],
679
+ "note": "Road-sign condensed type with squared curves, bold but not compressed into a wall, with its normal-width sibling for text. Suits logistics, motorsport, hardware and directories with many short titles.",
680
+ "seenIn": [
681
+ "aww-julien-calot",
682
+ "opl-medium-rare",
683
+ "opl-uglycash"
684
+ ],
685
+ "links": [
686
+ "https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@700&family=Barlow:wght@400;500&display=swap"
687
+ ],
688
+ "scale": {
689
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
690
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
691
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
692
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
693
+ }
694
+ },
695
+ {
696
+ "id": "panchang-switzer",
697
+ "name": "Panchang / Switzer",
698
+ "class": "extended-heavy",
699
+ "display": {
700
+ "family": "Panchang",
701
+ "source": "fontshare",
702
+ "slug": "panchang",
703
+ "weights": [
704
+ 700
705
+ ],
706
+ "italic": false,
707
+ "settings": "weight 700 · tracking -0.02em · leading 1.0 · uppercase; four words or fewer per line because the face is very wide",
708
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=panchang@700&display=swap\" rel=\"stylesheet\">\n<link href=\"https://api.fontshare.com/v2/css?f[]=switzer@400,500&display=swap\" rel=\"stylesheet\">"
709
+ },
710
+ "text": {
711
+ "family": "Switzer",
712
+ "source": "fontshare",
713
+ "slug": "switzer",
714
+ "weights": [
715
+ 400,
716
+ 500
717
+ ],
718
+ "italic": false,
719
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
720
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=panchang@700&display=swap\" rel=\"stylesheet\">\n<link href=\"https://api.fontshare.com/v2/css?f[]=switzer@400,500&display=swap\" rel=\"stylesheet\">"
721
+ },
722
+ "standsInFor": [
723
+ "Monument Extended",
724
+ "Owners Wide",
725
+ "Nimbus Sans Extended"
726
+ ],
727
+ "note": "A flat-sided extended grotesk in heavy capitals, wide enough that two words fill the screen, with a neutral sans kept small. Suits portfolios, real estate, travel and brand sites that want a broad, confident wordmark.",
728
+ "seenIn": [
729
+ "opl-belen-jones",
730
+ "aww-lxl-creative",
731
+ "aww-realevate",
732
+ "aww-the-tuscan-journey-begins"
733
+ ],
734
+ "links": [
735
+ "https://api.fontshare.com/v2/css?f[]=panchang@700&display=swap",
736
+ "https://api.fontshare.com/v2/css?f[]=switzer@400,500&display=swap"
737
+ ],
738
+ "scale": {
739
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
740
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
741
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
742
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
743
+ }
744
+ },
745
+ {
746
+ "id": "tiktok-sans-wide",
747
+ "name": "TikTok Sans",
748
+ "class": "extended-heavy",
749
+ "display": {
750
+ "family": "TikTok Sans",
751
+ "source": "google",
752
+ "weights": [
753
+ 800
754
+ ],
755
+ "italic": false,
756
+ "settings": "weight 800 at font-stretch 150% (load the wdth axis and use its widest setting) · tracking -0.01em · leading 1.0 · uppercase",
757
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=TikTok+Sans:wdth,wght@75..150,300..900&display=swap\" rel=\"stylesheet\">"
758
+ },
759
+ "text": {
760
+ "family": "TikTok Sans",
761
+ "source": "google",
762
+ "weights": [
763
+ 400,
764
+ 500
765
+ ],
766
+ "italic": false,
767
+ "settings": "normal width · 400 for body, 500 for emphasis · leading 1.45 · tracking 0",
768
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=TikTok+Sans:wdth,wght@75..150,300..900&display=swap\" rel=\"stylesheet\">"
769
+ },
770
+ "standsInFor": [
771
+ "Herokid Wide",
772
+ "At Aero",
773
+ "Wintyr"
774
+ ],
775
+ "note": "One variable grotesk stretched wide and bold for the headline and the closing statement, then returned to normal width for reading. Suits personal portfolios, apps and tech brands that want width without a second family.",
776
+ "seenIn": [
777
+ "aww-haoqi-design",
778
+ "opl-tara",
779
+ "aww-produx-design",
780
+ "opl-proooof"
781
+ ],
782
+ "links": [
783
+ "https://fonts.googleapis.com/css2?family=TikTok+Sans:wdth,wght@75..150,300..900&display=swap"
784
+ ],
785
+ "scale": {
786
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
787
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
788
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
789
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
790
+ }
791
+ },
792
+ {
793
+ "id": "unbounded-onest",
794
+ "name": "Unbounded / Onest",
795
+ "class": "extended-heavy",
796
+ "display": {
797
+ "family": "Unbounded",
798
+ "source": "google",
799
+ "weights": [
800
+ 800
801
+ ],
802
+ "italic": false,
803
+ "settings": "weight 800 · tracking -0.03em · leading 1.0 · uppercase",
804
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Unbounded:wght@800&family=Onest:wght@400;500&display=swap\" rel=\"stylesheet\">"
805
+ },
806
+ "text": {
807
+ "family": "Onest",
808
+ "source": "google",
809
+ "weights": [
810
+ 400,
811
+ 500
812
+ ],
813
+ "italic": false,
814
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
815
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Unbounded:wght@800&family=Onest:wght@400;500&display=swap\" rel=\"stylesheet\">"
816
+ },
817
+ "standsInFor": [
818
+ "IntraNet",
819
+ "Nekst",
820
+ "Owners Wide"
821
+ ],
822
+ "note": "A wide display sans built from rounded squares, heavy and a little architectural, beside a clean text grotesk. Suits architecture indexes, watches, mobility and events that want a title with a constructed feel.",
823
+ "seenIn": [
824
+ "opl-belgrade-architecture",
825
+ "aww-the-watch",
826
+ "aww-risk",
827
+ "aww-house-of-honey-1"
828
+ ],
829
+ "links": [
830
+ "https://fonts.googleapis.com/css2?family=Unbounded:wght@800&family=Onest:wght@400;500&display=swap"
831
+ ],
832
+ "scale": {
833
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
834
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
835
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
836
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
837
+ }
838
+ },
839
+ {
840
+ "id": "chivo-black",
841
+ "name": "Chivo",
842
+ "class": "heavy-black",
843
+ "display": {
844
+ "family": "Chivo",
845
+ "source": "google",
846
+ "weights": [
847
+ 900
848
+ ],
849
+ "italic": false,
850
+ "settings": "weight 900 · tracking -0.05em · leading 0.88 · uppercase",
851
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Chivo:wght@400;700;900&display=swap\" rel=\"stylesheet\">"
852
+ },
853
+ "text": {
854
+ "family": "Chivo",
855
+ "source": "google",
856
+ "weights": [
857
+ 400,
858
+ 700
859
+ ],
860
+ "italic": false,
861
+ "settings": "400 for paragraphs, 700 for navigation, tags and links · leading 1.35 · tracking -0.01em",
862
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Chivo:wght@400;700;900&display=swap\" rel=\"stylesheet\">"
863
+ },
864
+ "standsInFor": [
865
+ "Elza",
866
+ "ABC Diatype Heavy",
867
+ "Suisse Intl Black"
868
+ ],
869
+ "note": "A black grotesque in capitals with letters nearly colliding, and only two sizes on the page: enormous and small. Suits agencies, city and culture projects and musicians who want the type to land like a headline.",
870
+ "seenIn": [
871
+ "aww-glitch-grit",
872
+ "opl-city-of-angels",
873
+ "aww-warm-fuzzy"
874
+ ],
875
+ "links": [
876
+ "https://fonts.googleapis.com/css2?family=Chivo:wght@400;700;900&display=swap"
877
+ ],
878
+ "scale": {
879
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
880
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
881
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
882
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
883
+ }
884
+ },
885
+ {
886
+ "id": "cabinet-grotesk-black",
887
+ "name": "Cabinet Grotesk",
888
+ "class": "heavy-black",
889
+ "display": {
890
+ "family": "Cabinet Grotesk",
891
+ "source": "fontshare",
892
+ "slug": "cabinet-grotesk",
893
+ "weights": [
894
+ 800
895
+ ],
896
+ "italic": false,
897
+ "settings": "weight 800 · tracking -0.035em · leading 0.9 · lowercase or sentence case, one or two words per line",
898
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=cabinet-grotesk@400,500,800&display=swap\" rel=\"stylesheet\">"
899
+ },
900
+ "text": {
901
+ "family": "Cabinet Grotesk",
902
+ "source": "fontshare",
903
+ "slug": "cabinet-grotesk",
904
+ "weights": [
905
+ 400,
906
+ 500
907
+ ],
908
+ "italic": false,
909
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
910
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=cabinet-grotesk@400,500,800&display=swap\" rel=\"stylesheet\">"
911
+ },
912
+ "standsInFor": [
913
+ "Champ",
914
+ "Uncut Sans"
915
+ ],
916
+ "note": "A heavy sans with tight joins and an eccentric lowercase, friendly but loud. Suits bookshops, food, consumer subscriptions and marketing studios.",
917
+ "seenIn": [
918
+ "aww-aardvark-book-club",
919
+ "opl-protip-marketing",
920
+ "opl-rendez-vous-franceclat"
921
+ ],
922
+ "links": [
923
+ "https://api.fontshare.com/v2/css?f[]=cabinet-grotesk@400,500,800&display=swap"
924
+ ],
925
+ "scale": {
926
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
927
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
928
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
929
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
930
+ }
931
+ },
932
+ {
933
+ "id": "epilogue-black",
934
+ "name": "Epilogue",
935
+ "class": "heavy-black",
936
+ "display": {
937
+ "family": "Epilogue",
938
+ "source": "google",
939
+ "weights": [
940
+ 900
941
+ ],
942
+ "italic": false,
943
+ "settings": "weight 900 · tracking -0.04em · leading 0.9 · sentence case or title case",
944
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Epilogue:wght@400;500;900&display=swap\" rel=\"stylesheet\">"
945
+ },
946
+ "text": {
947
+ "family": "Epilogue",
948
+ "source": "google",
949
+ "weights": [
950
+ 400,
951
+ 500
952
+ ],
953
+ "italic": false,
954
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
955
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Epilogue:wght@400;500;900&display=swap\" rel=\"stylesheet\">"
956
+ },
957
+ "standsInFor": [
958
+ "Die Grotesk D",
959
+ "Acme Gothic",
960
+ "FH Oscar"
961
+ ],
962
+ "note": "A broad black grotesque with a slightly uneven rhythm, at its best as a name set very large in mixed case. Suits entertainers, podcasts, consumer apps and blunt SaaS pages; emphasis comes from colour, not from a change of weight.",
963
+ "seenIn": [
964
+ "aww-trevor-noah",
965
+ "opl-juggle"
966
+ ],
967
+ "links": [
968
+ "https://fonts.googleapis.com/css2?family=Epilogue:wght@400;500;900&display=swap"
969
+ ],
970
+ "scale": {
971
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
972
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
973
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
974
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
975
+ }
976
+ },
977
+ {
978
+ "id": "red-hat-black",
979
+ "name": "Red Hat Display / Red Hat Text",
980
+ "class": "heavy-black",
981
+ "display": {
982
+ "family": "Red Hat Display",
983
+ "source": "google",
984
+ "weights": [
985
+ 900
986
+ ],
987
+ "italic": false,
988
+ "settings": "weight 900 · tracking -0.03em · leading 0.92 · uppercase; centred three-line stacks work well",
989
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Red+Hat+Display:wght@900&family=Red+Hat+Text:wght@400;500&display=swap\" rel=\"stylesheet\">"
990
+ },
991
+ "text": {
992
+ "family": "Red Hat Text",
993
+ "source": "google",
994
+ "weights": [
995
+ 400,
996
+ 500
997
+ ],
998
+ "italic": false,
999
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1000
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Red+Hat+Display:wght@900&family=Red+Hat+Text:wght@400;500&display=swap\" rel=\"stylesheet\">"
1001
+ },
1002
+ "standsInFor": [
1003
+ "FH Oscar",
1004
+ "Futura Bold"
1005
+ ],
1006
+ "note": "A geometric black with round bowls and flat terminals, cleaner and more even than a grotesque at the same weight. Suits fintech, apps and portfolios that want heavy type with a tidy, technical finish.",
1007
+ "seenIn": [
1008
+ "aww-risk",
1009
+ "aww-leo-parpeix-portfolio-2026"
1010
+ ],
1011
+ "links": [
1012
+ "https://fonts.googleapis.com/css2?family=Red+Hat+Display:wght@900&family=Red+Hat+Text:wght@400;500&display=swap"
1013
+ ],
1014
+ "scale": {
1015
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1016
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1017
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1018
+ "step-head": "clamp(2.5rem, 1.2rem + 5vw, 5.5rem)"
1019
+ }
1020
+ },
1021
+ {
1022
+ "id": "jost-caps",
1023
+ "name": "Jost",
1024
+ "class": "geometric",
1025
+ "display": {
1026
+ "family": "Jost",
1027
+ "source": "google",
1028
+ "weights": [
1029
+ 700
1030
+ ],
1031
+ "italic": false,
1032
+ "settings": "weight 700 · tracking -0.03em · leading 0.9 · uppercase",
1033
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Jost:wght@400;500;700&display=swap\" rel=\"stylesheet\">"
1034
+ },
1035
+ "text": {
1036
+ "family": "Jost",
1037
+ "source": "google",
1038
+ "weights": [
1039
+ 400,
1040
+ 500
1041
+ ],
1042
+ "italic": false,
1043
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1044
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Jost:wght@400;500;700&display=swap\" rel=\"stylesheet\">"
1045
+ },
1046
+ "standsInFor": [
1047
+ "Futura Std Bold",
1048
+ "Futura PT"
1049
+ ],
1050
+ "note": "The pointed, circular geometry of the 1920s in bold capitals, with the same family at reading size. Suits space, science, museums, architecture and anything that should feel like a mid-century poster.",
1051
+ "seenIn": [
1052
+ "aww-21-hrs-on-the-moon",
1053
+ "aww-leo-parpeix-portfolio-2026"
1054
+ ],
1055
+ "links": [
1056
+ "https://fonts.googleapis.com/css2?family=Jost:wght@400;500;700&display=swap"
1057
+ ],
1058
+ "scale": {
1059
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1060
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1061
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1062
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1063
+ }
1064
+ },
1065
+ {
1066
+ "id": "stack-sans-light",
1067
+ "name": "Stack Sans Headline / Stack Sans Text",
1068
+ "class": "geometric",
1069
+ "display": {
1070
+ "family": "Stack Sans Headline",
1071
+ "source": "google",
1072
+ "weights": [
1073
+ 300
1074
+ ],
1075
+ "italic": false,
1076
+ "settings": "weight 300 · tracking -0.022em · leading 1.05 · sentence case; a heading may be two-tone, grey then full ink",
1077
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Stack+Sans+Headline:wght@300&family=Stack+Sans+Text:wght@400;500&display=swap\" rel=\"stylesheet\">"
1078
+ },
1079
+ "text": {
1080
+ "family": "Stack Sans Text",
1081
+ "source": "google",
1082
+ "weights": [
1083
+ 400,
1084
+ 500
1085
+ ],
1086
+ "italic": false,
1087
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1088
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Stack+Sans+Headline:wght@300&family=Stack+Sans+Text:wght@400;500&display=swap\" rel=\"stylesheet\">"
1089
+ },
1090
+ "standsInFor": [
1091
+ "Mluvka",
1092
+ "Roobert"
1093
+ ],
1094
+ "note": "A geometric sans in a light weight at large size, soft and exact at once, with its text cut underneath. Suits consumer apps, utilities and developer tools that want to feel calm and modern.",
1095
+ "seenIn": [
1096
+ "opl-screentune",
1097
+ "opl-dialkit",
1098
+ "opl-typewave"
1099
+ ],
1100
+ "links": [
1101
+ "https://fonts.googleapis.com/css2?family=Stack+Sans+Headline:wght@300&family=Stack+Sans+Text:wght@400;500&display=swap"
1102
+ ],
1103
+ "scale": {
1104
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1105
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1106
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1107
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1108
+ }
1109
+ },
1110
+ {
1111
+ "id": "albert-sans-semibold",
1112
+ "name": "Albert Sans",
1113
+ "class": "geometric",
1114
+ "display": {
1115
+ "family": "Albert Sans",
1116
+ "source": "google",
1117
+ "weights": [
1118
+ 600
1119
+ ],
1120
+ "italic": false,
1121
+ "settings": "weight 600 · tracking -0.035em · leading 1.0 · sentence case",
1122
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Albert+Sans:wght@400;500;600&display=swap\" rel=\"stylesheet\">"
1123
+ },
1124
+ "text": {
1125
+ "family": "Albert Sans",
1126
+ "source": "google",
1127
+ "weights": [
1128
+ 400,
1129
+ 500
1130
+ ],
1131
+ "italic": false,
1132
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1133
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Albert+Sans:wght@400;500;600&display=swap\" rel=\"stylesheet\">"
1134
+ },
1135
+ "standsInFor": [
1136
+ "BT Steinhart",
1137
+ "TT Norms Pro",
1138
+ "Objektiv"
1139
+ ],
1140
+ "note": "A geometric grotesque with Scandinavian restraint: round letters, even colour, nothing decorative. Suits logistics, health, property and corporate sites that need to look clear and dependable.",
1141
+ "seenIn": [
1142
+ "aww-united-carriers",
1143
+ "aww-likova"
1144
+ ],
1145
+ "links": [
1146
+ "https://fonts.googleapis.com/css2?family=Albert+Sans:wght@400;500;600&display=swap"
1147
+ ],
1148
+ "scale": {
1149
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1150
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1151
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1152
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1153
+ }
1154
+ },
1155
+ {
1156
+ "id": "spartan-figtree",
1157
+ "name": "League Spartan / Figtree",
1158
+ "class": "geometric",
1159
+ "display": {
1160
+ "family": "League Spartan",
1161
+ "source": "google",
1162
+ "weights": [
1163
+ 700
1164
+ ],
1165
+ "italic": false,
1166
+ "settings": "weight 700 · tracking -0.04em · leading 0.88 · lowercase or sentence case",
1167
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=League+Spartan:wght@700&family=Figtree:wght@400;600&display=swap\" rel=\"stylesheet\">"
1168
+ },
1169
+ "text": {
1170
+ "family": "Figtree",
1171
+ "source": "google",
1172
+ "weights": [
1173
+ 400,
1174
+ 600
1175
+ ],
1176
+ "italic": false,
1177
+ "settings": "400 for body, 600 for emphasis · leading 1.5 · tracking 0",
1178
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=League+Spartan:wght@700&family=Figtree:wght@400;600&display=swap\" rel=\"stylesheet\">"
1179
+ },
1180
+ "standsInFor": [
1181
+ "Degular",
1182
+ "Roobert"
1183
+ ],
1184
+ "note": "A compact bold geometric with a low waist, punchy in short lowercase lines, over a friendly open text sans. Suits newsletters, consumer products, creators and small shops.",
1185
+ "seenIn": [
1186
+ "opl-lennys-newsletter-product-pass",
1187
+ "opl-near",
1188
+ "opl-sand-studio",
1189
+ "aww-aardvark-book-club"
1190
+ ],
1191
+ "links": [
1192
+ "https://fonts.googleapis.com/css2?family=League+Spartan:wght@700&family=Figtree:wght@400;600&display=swap"
1193
+ ],
1194
+ "scale": {
1195
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1196
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1197
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1198
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1199
+ }
1200
+ },
1201
+ {
1202
+ "id": "pilcrow-rounded",
1203
+ "name": "Pilcrow Rounded",
1204
+ "class": "rounded-friendly",
1205
+ "display": {
1206
+ "family": "Pilcrow Rounded",
1207
+ "source": "fontshare",
1208
+ "slug": "pilcrow-rounded",
1209
+ "weights": [
1210
+ 700
1211
+ ],
1212
+ "italic": false,
1213
+ "settings": "weight 700 · tracking -0.05em · leading 0.9 · all lowercase, one or two words per line",
1214
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=pilcrow-rounded@400,500,700&display=swap\" rel=\"stylesheet\">"
1215
+ },
1216
+ "text": {
1217
+ "family": "Pilcrow Rounded",
1218
+ "source": "fontshare",
1219
+ "slug": "pilcrow-rounded",
1220
+ "weights": [
1221
+ 400,
1222
+ 500
1223
+ ],
1224
+ "italic": false,
1225
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0; lowercase throughout is fine",
1226
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=pilcrow-rounded@400,500,700&display=swap\" rel=\"stylesheet\">"
1227
+ },
1228
+ "standsInFor": [
1229
+ "Milling Triplex",
1230
+ "Ease"
1231
+ ],
1232
+ "note": "A sturdy sans with fully rounded stroke ends, set bold and tight in lowercase with one small size for everything else. Suits toys, gadgets, cosmetics and other objects with soft moulded edges.",
1233
+ "seenIn": [
1234
+ "opl-when-you-wish-upon-a-starboy",
1235
+ "opl-anidachi",
1236
+ "aww-artem-shcherbakov"
1237
+ ],
1238
+ "links": [
1239
+ "https://api.fontshare.com/v2/css?f[]=pilcrow-rounded@400,500,700&display=swap"
1240
+ ],
1241
+ "scale": {
1242
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1243
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1244
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1245
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1246
+ }
1247
+ },
1248
+ {
1249
+ "id": "roundo-soft",
1250
+ "name": "Roundo",
1251
+ "class": "rounded-friendly",
1252
+ "display": {
1253
+ "family": "Roundo",
1254
+ "source": "fontshare",
1255
+ "slug": "roundo",
1256
+ "weights": [
1257
+ 500
1258
+ ],
1259
+ "italic": false,
1260
+ "settings": "weight 500 · tracking -0.025em · leading 1.05 · sentence case; colour the type to its section instead of black",
1261
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=roundo@400,500,600&display=swap\" rel=\"stylesheet\">"
1262
+ },
1263
+ "text": {
1264
+ "family": "Roundo",
1265
+ "source": "fontshare",
1266
+ "slug": "roundo",
1267
+ "weights": [
1268
+ 400,
1269
+ 600
1270
+ ],
1271
+ "italic": false,
1272
+ "settings": "400 for body, 600 for emphasis · leading 1.5 · tracking 0",
1273
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=roundo@400,500,600&display=swap\" rel=\"stylesheet\">"
1274
+ },
1275
+ "standsInFor": [
1276
+ "Ease",
1277
+ "Open Runde"
1278
+ ],
1279
+ "note": "A rounded geometric sans at medium weight and a generous text size, gentle without looking childish. Suits wellness, home goods, family apps and everyday money tools.",
1280
+ "seenIn": [
1281
+ "opl-anidachi",
1282
+ "opl-billow"
1283
+ ],
1284
+ "links": [
1285
+ "https://api.fontshare.com/v2/css?f[]=roundo@400,500,600&display=swap"
1286
+ ],
1287
+ "scale": {
1288
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1289
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1290
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1291
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1292
+ }
1293
+ },
1294
+ {
1295
+ "id": "chillax-semibold",
1296
+ "name": "Chillax",
1297
+ "class": "rounded-friendly",
1298
+ "display": {
1299
+ "family": "Chillax",
1300
+ "source": "fontshare",
1301
+ "slug": "chillax",
1302
+ "weights": [
1303
+ 600
1304
+ ],
1305
+ "italic": false,
1306
+ "settings": "weight 600 · tracking -0.03em · leading 1.0 · sentence case",
1307
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=chillax@400,500,600&display=swap\" rel=\"stylesheet\">"
1308
+ },
1309
+ "text": {
1310
+ "family": "Chillax",
1311
+ "source": "fontshare",
1312
+ "slug": "chillax",
1313
+ "weights": [
1314
+ 400,
1315
+ 500
1316
+ ],
1317
+ "italic": false,
1318
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1319
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=chillax@400,500,600&display=swap\" rel=\"stylesheet\">"
1320
+ },
1321
+ "standsInFor": [
1322
+ "SF Pro Rounded",
1323
+ "Open Runde"
1324
+ ],
1325
+ "note": "A soft geometric sans with wide round letters and relaxed joins, warm at semibold and easy at text size. Suits consumer apps, community products, cafes and small friendly brands.",
1326
+ "seenIn": [
1327
+ "opl-uncle-rudy",
1328
+ "opl-mat"
1329
+ ],
1330
+ "links": [
1331
+ "https://api.fontshare.com/v2/css?f[]=chillax@400,500,600&display=swap"
1332
+ ],
1333
+ "scale": {
1334
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1335
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1336
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1337
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1338
+ }
1339
+ },
1340
+ {
1341
+ "id": "gambarino-general",
1342
+ "name": "Gambarino / General Sans",
1343
+ "class": "serif-display",
1344
+ "display": {
1345
+ "family": "Gambarino",
1346
+ "source": "fontshare",
1347
+ "slug": "gambarino",
1348
+ "weights": [
1349
+ 400
1350
+ ],
1351
+ "italic": false,
1352
+ "settings": "weight 400 (single cut) · tracking -0.02em · leading 0.92 · sentence case",
1353
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=gambarino@400&display=swap\" rel=\"stylesheet\">\n<link href=\"https://api.fontshare.com/v2/css?f[]=general-sans@400,500&display=swap\" rel=\"stylesheet\">"
1354
+ },
1355
+ "text": {
1356
+ "family": "General Sans",
1357
+ "source": "fontshare",
1358
+ "slug": "general-sans",
1359
+ "weights": [
1360
+ 400,
1361
+ 500
1362
+ ],
1363
+ "italic": false,
1364
+ "settings": "400 for body, navigation and buttons, 500 for emphasis · leading 1.5",
1365
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=gambarino@400&display=swap\" rel=\"stylesheet\">\n<link href=\"https://api.fontshare.com/v2/css?f[]=general-sans@400,500&display=swap\" rel=\"stylesheet\">"
1366
+ },
1367
+ "standsInFor": [
1368
+ "PP Editorial New",
1369
+ "Migra"
1370
+ ],
1371
+ "note": "A narrow, sharp display serif for headlines against a small plain sans: a five-to-one jump with nothing between. Suits agencies, bakeries and restaurants, fashion and editorial brands.",
1372
+ "seenIn": [
1373
+ "aww-hilden-kaira",
1374
+ "opl-tab-kitchen-bakery",
1375
+ "opl-glide-typeface",
1376
+ "aww-milledollars"
1377
+ ],
1378
+ "links": [
1379
+ "https://api.fontshare.com/v2/css?f[]=gambarino@400&display=swap",
1380
+ "https://api.fontshare.com/v2/css?f[]=general-sans@400,500&display=swap"
1381
+ ],
1382
+ "scale": {
1383
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1384
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1385
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1386
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1387
+ }
1388
+ },
1389
+ {
1390
+ "id": "bodoni-jost",
1391
+ "name": "Bodoni Moda / Jost",
1392
+ "class": "serif-display",
1393
+ "display": {
1394
+ "family": "Bodoni Moda",
1395
+ "source": "google",
1396
+ "weights": [
1397
+ 500
1398
+ ],
1399
+ "italic": true,
1400
+ "settings": "weight 500 with optical sizing on · tracking -0.02em · leading 0.95 · uppercase or sentence case; italic for a whole line, never for one word",
1401
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,wght@0,500;1,500&family=Jost:wght@400;500&display=swap\" rel=\"stylesheet\">"
1402
+ },
1403
+ "text": {
1404
+ "family": "Jost",
1405
+ "source": "google",
1406
+ "weights": [
1407
+ 400,
1408
+ 500
1409
+ ],
1410
+ "italic": false,
1411
+ "settings": "400 for body, 500 for emphasis · leading 1.6 · tracking 0.01em",
1412
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,wght@0,500;1,500&family=Jost:wght@400;500&display=swap\" rel=\"stylesheet\">"
1413
+ },
1414
+ "standsInFor": [
1415
+ "TT Ramillas",
1416
+ "Freight Big"
1417
+ ],
1418
+ "note": "A true didone with hairline serifs and vertical stress over a light geometric sans, the classic fashion-magazine pairing. Suits luxury property, jewellery, fragrance and fashion.",
1419
+ "seenIn": [
1420
+ "aww-sobha-privy-collection",
1421
+ "opl-april-leihuanani-evangelista"
1422
+ ],
1423
+ "links": [
1424
+ "https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,wght@0,500;1,500&family=Jost:wght@400;500&display=swap"
1425
+ ],
1426
+ "scale": {
1427
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1428
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1429
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1430
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1431
+ }
1432
+ },
1433
+ {
1434
+ "id": "imbue-albert",
1435
+ "name": "Imbue / Albert Sans",
1436
+ "class": "serif-display",
1437
+ "display": {
1438
+ "family": "Imbue",
1439
+ "source": "google",
1440
+ "weights": [
1441
+ 400
1442
+ ],
1443
+ "italic": false,
1444
+ "settings": "weight 400 with optical sizing on · tracking -0.01em · leading 0.9 · uppercase, sized so one short word fills its column (6–12vw)",
1445
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Imbue:wght@400&family=Albert+Sans:wght@400;500&display=swap\" rel=\"stylesheet\">"
1446
+ },
1447
+ "text": {
1448
+ "family": "Albert Sans",
1449
+ "source": "google",
1450
+ "weights": [
1451
+ 400,
1452
+ 500
1453
+ ],
1454
+ "italic": false,
1455
+ "settings": "400 for body, 500 for emphasis · leading 1.55 · tracking 0",
1456
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Imbue:wght@400&family=Albert+Sans:wght@400;500&display=swap\" rel=\"stylesheet\">"
1457
+ },
1458
+ "standsInFor": [
1459
+ "Ambroise Francois"
1460
+ ],
1461
+ "note": "A tall, condensed high-contrast serif whose capitals read like a masthead or a shop fascia. Suits residences, hotels, restaurants and wine, where a short name can stand floor to ceiling.",
1462
+ "seenIn": [
1463
+ "aww-era-residence",
1464
+ "opl-le-petit-bleu"
1465
+ ],
1466
+ "links": [
1467
+ "https://fonts.googleapis.com/css2?family=Imbue:wght@400&family=Albert+Sans:wght@400;500&display=swap"
1468
+ ],
1469
+ "scale": {
1470
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1471
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1472
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1473
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1474
+ }
1475
+ },
1476
+ {
1477
+ "id": "erode-sharp",
1478
+ "name": "Erode",
1479
+ "class": "serif-display",
1480
+ "display": {
1481
+ "family": "Erode",
1482
+ "source": "fontshare",
1483
+ "slug": "erode",
1484
+ "weights": [
1485
+ 500
1486
+ ],
1487
+ "italic": false,
1488
+ "settings": "weight 500 · tracking -0.025em · leading 0.95 · sentence case, or tight capitals at 32–40px for a single statement",
1489
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=erode@400,500,600&display=swap\" rel=\"stylesheet\">"
1490
+ },
1491
+ "text": {
1492
+ "family": "Erode",
1493
+ "source": "fontshare",
1494
+ "slug": "erode",
1495
+ "weights": [
1496
+ 400,
1497
+ 600
1498
+ ],
1499
+ "italic": true,
1500
+ "settings": "400 for body, 600 for emphasis, italic for titles of works · leading 1.5 · tracking 0",
1501
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=erode@400,500,600&display=swap\" rel=\"stylesheet\">"
1502
+ },
1503
+ "standsInFor": [
1504
+ "Noe Text",
1505
+ "Reckless",
1506
+ "Migra"
1507
+ ],
1508
+ "note": "A serif with chiselled, angular curves and wedge serifs, sharp at display size and firm in text. Suits studios, galleries, advisory firms and written guides.",
1509
+ "seenIn": [
1510
+ "aww-house-of-honey-1",
1511
+ "aww-milledollars",
1512
+ "aww-colonia-zacamil"
1513
+ ],
1514
+ "links": [
1515
+ "https://api.fontshare.com/v2/css?f[]=erode@400,500,600&display=swap"
1516
+ ],
1517
+ "scale": {
1518
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1519
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1520
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1521
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1522
+ }
1523
+ },
1524
+ {
1525
+ "id": "boska-roman-italic",
1526
+ "name": "Boska",
1527
+ "class": "serif-display",
1528
+ "display": {
1529
+ "family": "Boska",
1530
+ "source": "fontshare",
1531
+ "slug": "boska",
1532
+ "weights": [
1533
+ 400
1534
+ ],
1535
+ "italic": true,
1536
+ "settings": "weight 400 · tracking -0.02em · leading 0.95 · roman capitals for the main words with lowercase italic for the connecting words at the same size, or sentence case throughout; centred lines work",
1537
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=boska@400,500&display=swap\" rel=\"stylesheet\">"
1538
+ },
1539
+ "text": {
1540
+ "family": "Boska",
1541
+ "source": "fontshare",
1542
+ "slug": "boska",
1543
+ "weights": [
1544
+ 400,
1545
+ 500
1546
+ ],
1547
+ "italic": true,
1548
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0.005em",
1549
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=boska@400,500&display=swap\" rel=\"stylesheet\">"
1550
+ },
1551
+ "standsInFor": [
1552
+ "Louize Display",
1553
+ "PP Pangaia"
1554
+ ],
1555
+ "note": "A high-contrast serif with pointed serifs and a lively italic, used roman and italic together at one size. Suits perfume, jewellery, lodges, weddings and other occasions for ceremony.",
1556
+ "seenIn": [
1557
+ "aww-vero-new-york",
1558
+ "opl-eagles-nest",
1559
+ "opl-sarah-matt-wedding"
1560
+ ],
1561
+ "links": [
1562
+ "https://api.fontshare.com/v2/css?f[]=boska@400,500&display=swap"
1563
+ ],
1564
+ "scale": {
1565
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1566
+ "step-body": "clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem)",
1567
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1568
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1569
+ }
1570
+ },
1571
+ {
1572
+ "id": "newsreader-light",
1573
+ "name": "Newsreader",
1574
+ "class": "serif-light-large",
1575
+ "display": {
1576
+ "family": "Newsreader",
1577
+ "source": "google",
1578
+ "weights": [
1579
+ 300
1580
+ ],
1581
+ "italic": false,
1582
+ "settings": "weight 300 with optical sizing on · tracking -0.05em · leading 0.9 · sentence case at 12–14vw; chapter headings drop to the text weight at about 30px",
1583
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Newsreader:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap\" rel=\"stylesheet\">"
1584
+ },
1585
+ "text": {
1586
+ "family": "Newsreader",
1587
+ "source": "google",
1588
+ "weights": [
1589
+ 400,
1590
+ 500
1591
+ ],
1592
+ "italic": true,
1593
+ "settings": "400 for body, 500 for emphasis, italic for titles · leading 1.6 · tracking 0",
1594
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Newsreader:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap\" rel=\"stylesheet\">"
1595
+ },
1596
+ "standsInFor": [
1597
+ "Self Modern",
1598
+ "PP Editorial New Light"
1599
+ ],
1600
+ "note": "One news serif with optical sizes: light and very tight when huge, open and bookish at 18px. Suits long-form stories, culture pieces, journals and research write-ups.",
1601
+ "seenIn": [
1602
+ "opl-the-queue",
1603
+ "opl-leedlime",
1604
+ "opl-le-petit-bleu"
1605
+ ],
1606
+ "links": [
1607
+ "https://fonts.googleapis.com/css2?family=Newsreader:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap"
1608
+ ],
1609
+ "scale": {
1610
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1611
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1612
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1613
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1614
+ }
1615
+ },
1616
+ {
1617
+ "id": "zodiak-hairline",
1618
+ "name": "Zodiak / Hanken Grotesk",
1619
+ "class": "serif-light-large",
1620
+ "display": {
1621
+ "family": "Zodiak",
1622
+ "source": "fontshare",
1623
+ "slug": "zodiak",
1624
+ "weights": [
1625
+ 100,
1626
+ 300
1627
+ ],
1628
+ "italic": false,
1629
+ "settings": "weight 100 above 96px, 300 for 28–36px statements · tracking -0.01em · leading 1.0 · capitals for the headline, sentence case for statements; never bold",
1630
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500&display=swap\" rel=\"stylesheet\">\n<link href=\"https://api.fontshare.com/v2/css?f[]=zodiak@100,300&display=swap\" rel=\"stylesheet\">"
1631
+ },
1632
+ "text": {
1633
+ "family": "Hanken Grotesk",
1634
+ "source": "google",
1635
+ "weights": [
1636
+ 400,
1637
+ 500
1638
+ ],
1639
+ "italic": false,
1640
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1641
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500&display=swap\" rel=\"stylesheet\">\n<link href=\"https://api.fontshare.com/v2/css?f[]=zodiak@100,300&display=swap\" rel=\"stylesheet\">"
1642
+ },
1643
+ "standsInFor": [
1644
+ "PP Fragment",
1645
+ "PP Editorial New Ultralight",
1646
+ "Cardinal Classic Long"
1647
+ ],
1648
+ "note": "Hairline serif capitals set large enough that the thin strokes read as drawing, with a small neutral sans for everything practical. Suits lodges, spas, architecture and interiors; keep it on flat pale or dark fields where the strokes have full contrast.",
1649
+ "seenIn": [
1650
+ "aww-tengile-malamala-collection",
1651
+ "opl-deeo-studio-2",
1652
+ "aww-normal-is-boring",
1653
+ "aww-white-desert"
1654
+ ],
1655
+ "links": [
1656
+ "https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500&display=swap",
1657
+ "https://api.fontshare.com/v2/css?f[]=zodiak@100,300&display=swap"
1658
+ ],
1659
+ "scale": {
1660
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1661
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1662
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1663
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1664
+ }
1665
+ },
1666
+ {
1667
+ "id": "sentient-light",
1668
+ "name": "Sentient",
1669
+ "class": "serif-light-large",
1670
+ "display": {
1671
+ "family": "Sentient",
1672
+ "source": "fontshare",
1673
+ "slug": "sentient",
1674
+ "weights": [
1675
+ 300
1676
+ ],
1677
+ "italic": false,
1678
+ "settings": "weight 300 · tracking -0.015em · leading 1.0 · sentence case; about 8vw for the headline, 40px for statements",
1679
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=sentient@300,400,500&display=swap\" rel=\"stylesheet\">"
1680
+ },
1681
+ "text": {
1682
+ "family": "Sentient",
1683
+ "source": "fontshare",
1684
+ "slug": "sentient",
1685
+ "weights": [
1686
+ 400,
1687
+ 500
1688
+ ],
1689
+ "italic": true,
1690
+ "settings": "400 for body, 500 for emphasis · leading 1.55 · tracking 0",
1691
+ "css": "<link rel=\"preconnect\" href=\"https://api.fontshare.com\">\n<link rel=\"preconnect\" href=\"https://cdn.fontshare.com\" crossorigin>\n<link href=\"https://api.fontshare.com/v2/css?f[]=sentient@300,400,500&display=swap\" rel=\"stylesheet\">"
1692
+ },
1693
+ "standsInFor": [
1694
+ "Season Mix",
1695
+ "Exposure",
1696
+ "Self Modern"
1697
+ ],
1698
+ "note": "A soft, low-contrast serif in a light weight, more book than fashion magazine, large and calm in sentence case. Suits outdoor and craft products, restaurants, cameras and slow consumer goods.",
1699
+ "seenIn": [
1700
+ "aww-seasats",
1701
+ "opl-poetry-camera",
1702
+ "opl-le-petit-bleu"
1703
+ ],
1704
+ "links": [
1705
+ "https://api.fontshare.com/v2/css?f[]=sentient@300,400,500&display=swap"
1706
+ ],
1707
+ "scale": {
1708
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1709
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1710
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1711
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1712
+ }
1713
+ },
1714
+ {
1715
+ "id": "eb-garamond-quiet",
1716
+ "name": "EB Garamond",
1717
+ "class": "serif-text",
1718
+ "display": {
1719
+ "family": "EB Garamond",
1720
+ "source": "google",
1721
+ "weights": [
1722
+ 400
1723
+ ],
1724
+ "italic": true,
1725
+ "settings": "weight 400, italic for the title · tracking -0.01em · leading 1.1 · sentence case or all lowercase; the largest size stays near 40px",
1726
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&display=swap\" rel=\"stylesheet\">"
1727
+ },
1728
+ "text": {
1729
+ "family": "EB Garamond",
1730
+ "source": "google",
1731
+ "weights": [
1732
+ 400,
1733
+ 500
1734
+ ],
1735
+ "italic": true,
1736
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1737
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&display=swap\" rel=\"stylesheet\">"
1738
+ },
1739
+ "standsInFor": [
1740
+ "Edict",
1741
+ "Louize"
1742
+ ],
1743
+ "note": "A humanist Garamond in roman and italic at two modest sizes, with no capitals and no bold. Suits set designers, antique dealers, wine, publishers and portfolios that whisper.",
1744
+ "seenIn": [
1745
+ "aww-depo-luxe",
1746
+ "opl-hebbia"
1747
+ ],
1748
+ "links": [
1749
+ "https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&display=swap"
1750
+ ],
1751
+ "scale": {
1752
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1753
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1754
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1755
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1756
+ }
1757
+ },
1758
+ {
1759
+ "id": "literata-book",
1760
+ "name": "Literata",
1761
+ "class": "serif-text",
1762
+ "display": {
1763
+ "family": "Literata",
1764
+ "source": "google",
1765
+ "weights": [
1766
+ 500
1767
+ ],
1768
+ "italic": false,
1769
+ "settings": "weight 500 with optical sizing on · tracking -0.02em · leading 1.05 · sentence case",
1770
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Literata:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap\" rel=\"stylesheet\">"
1771
+ },
1772
+ "text": {
1773
+ "family": "Literata",
1774
+ "source": "google",
1775
+ "weights": [
1776
+ 400,
1777
+ 600
1778
+ ],
1779
+ "italic": true,
1780
+ "settings": "400 for body, 600 for emphasis, italic for titles · leading 1.6 · tracking 0",
1781
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Literata:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap\" rel=\"stylesheet\">"
1782
+ },
1783
+ "standsInFor": [
1784
+ "Albra Book",
1785
+ "Signifier",
1786
+ "Domaine Text"
1787
+ ],
1788
+ "note": "A sturdy screen-reading serif with a large x-height; headings are simply the text face at medium weight and a larger size. Suits essays, reports, newsletters and knowledge products.",
1789
+ "seenIn": [
1790
+ "opl-the-new-industrials",
1791
+ "aww-mosbys-files",
1792
+ "opl-monte"
1793
+ ],
1794
+ "links": [
1795
+ "https://fonts.googleapis.com/css2?family=Literata:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap"
1796
+ ],
1797
+ "scale": {
1798
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1799
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1800
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1801
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1802
+ }
1803
+ },
1804
+ {
1805
+ "id": "stix-plain-roman",
1806
+ "name": "STIX Two Text",
1807
+ "class": "serif-text",
1808
+ "display": {
1809
+ "family": "STIX Two Text",
1810
+ "source": "google",
1811
+ "weights": [
1812
+ 400
1813
+ ],
1814
+ "italic": true,
1815
+ "settings": "weight 400 · tracking -0.026em · leading 1.1 · sentence case at 2.6–3.6vw; one running line may be set in italic capitals",
1816
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=STIX+Two+Text:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
1817
+ },
1818
+ "text": {
1819
+ "family": "STIX Two Text",
1820
+ "source": "google",
1821
+ "weights": [
1822
+ 400,
1823
+ 600
1824
+ ],
1825
+ "italic": false,
1826
+ "settings": "400 for body, 600 for emphasis · leading 1.45 · tracking 0",
1827
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=STIX+Two+Text:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
1828
+ },
1829
+ "standsInFor": [
1830
+ "Untitled Serif",
1831
+ "Times New Roman",
1832
+ "FK Roman Standard"
1833
+ ],
1834
+ "note": "The plain Times-style roman of a typed document, slightly tightened and never larger than a few vw. Suits vehicles and tools presented dryly, artists' pages, investment memos and anything meant to look undesigned on purpose.",
1835
+ "seenIn": [
1836
+ "opl-transport",
1837
+ "opl-shawn-golden",
1838
+ "aww-dragonfly-redux"
1839
+ ],
1840
+ "links": [
1841
+ "https://fonts.googleapis.com/css2?family=STIX+Two+Text:ital,wght@0,400;0,600;1,400;1,600&display=swap"
1842
+ ],
1843
+ "scale": {
1844
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1845
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1846
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1847
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1848
+ }
1849
+ },
1850
+ {
1851
+ "id": "young-source",
1852
+ "name": "Young Serif / Source Serif 4",
1853
+ "class": "serif-text",
1854
+ "display": {
1855
+ "family": "Young Serif",
1856
+ "source": "google",
1857
+ "weights": [
1858
+ 400
1859
+ ],
1860
+ "italic": false,
1861
+ "settings": "weight 400 (single heavy cut) · tracking -0.02em · leading 0.95 · sentence case",
1862
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Young+Serif:wght@400&family=Source+Serif+4:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
1863
+ },
1864
+ "text": {
1865
+ "family": "Source Serif 4",
1866
+ "source": "google",
1867
+ "weights": [
1868
+ 400,
1869
+ 600
1870
+ ],
1871
+ "italic": true,
1872
+ "settings": "400 for body, 600 for emphasis, italic for quotations · leading 1.55 · tracking 0",
1873
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Young+Serif:wght@400&family=Source+Serif+4:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
1874
+ },
1875
+ "standsInFor": [
1876
+ "FS Kim",
1877
+ "Recoleta",
1878
+ "Gelica"
1879
+ ],
1880
+ "note": "A heavy, round old-style headline face with soft bracketed serifs over a clear transitional text serif. Suits essays, food, independent publishers and personal sites that want warmth with weight.",
1881
+ "seenIn": [
1882
+ "opl-applied-imagination",
1883
+ "opl-flowjam-2",
1884
+ "opl-marina-rachello"
1885
+ ],
1886
+ "links": [
1887
+ "https://fonts.googleapis.com/css2?family=Young+Serif:wght@400&family=Source+Serif+4:ital,wght@0,400;0,600;1,400;1,600&display=swap"
1888
+ ],
1889
+ "scale": {
1890
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1891
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1892
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1893
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1894
+ }
1895
+ },
1896
+ {
1897
+ "id": "zilla-slab-even",
1898
+ "name": "Zilla Slab",
1899
+ "class": "slab",
1900
+ "display": {
1901
+ "family": "Zilla Slab",
1902
+ "source": "google",
1903
+ "weights": [
1904
+ 600
1905
+ ],
1906
+ "italic": false,
1907
+ "settings": "weight 600 · tracking -0.025em · leading 1.0 · sentence case",
1908
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Zilla+Slab:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap\" rel=\"stylesheet\">"
1909
+ },
1910
+ "text": {
1911
+ "family": "Zilla Slab",
1912
+ "source": "google",
1913
+ "weights": [
1914
+ 400,
1915
+ 500
1916
+ ],
1917
+ "italic": true,
1918
+ "settings": "400 for body, 500 for emphasis · leading 1.5 · tracking 0",
1919
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Zilla+Slab:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap\" rel=\"stylesheet\">"
1920
+ },
1921
+ "standsInFor": [
1922
+ "Museo Slab"
1923
+ ],
1924
+ "note": "A contemporary slab with smooth curves and unbracketed serifs, even enough to carry headings and paragraphs alike. Suits developer tools, personal sites, open-source and nonprofit projects.",
1925
+ "seenIn": [
1926
+ "opl-justin-lerner"
1927
+ ],
1928
+ "links": [
1929
+ "https://fonts.googleapis.com/css2?family=Zilla+Slab:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&display=swap"
1930
+ ],
1931
+ "scale": {
1932
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1933
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1934
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1935
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1936
+ }
1937
+ },
1938
+ {
1939
+ "id": "besley-franklin",
1940
+ "name": "Besley / Libre Franklin",
1941
+ "class": "slab",
1942
+ "display": {
1943
+ "family": "Besley",
1944
+ "source": "google",
1945
+ "weights": [
1946
+ 800
1947
+ ],
1948
+ "italic": false,
1949
+ "settings": "weight 800 · tracking -0.02em · leading 0.95 · sentence case or uppercase",
1950
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Besley:wght@800&family=Libre+Franklin:wght@400;600&display=swap\" rel=\"stylesheet\">"
1951
+ },
1952
+ "text": {
1953
+ "family": "Libre Franklin",
1954
+ "source": "google",
1955
+ "weights": [
1956
+ 400,
1957
+ 600
1958
+ ],
1959
+ "italic": false,
1960
+ "settings": "400 for body, 600 for emphasis · leading 1.5 · tracking 0",
1961
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Besley:wght@800&family=Libre+Franklin:wght@400;600&display=swap\" rel=\"stylesheet\">"
1962
+ },
1963
+ "standsInFor": [
1964
+ "FS Kim",
1965
+ "Museo Slab"
1966
+ ],
1967
+ "note": "A fat Clarendon with ball terminals and bracketed slabs over a plain gothic, the look of a nineteenth-century bill poster. Suits breweries, barbers, markets, fairs and heritage goods.",
1968
+ "seenIn": [
1969
+ "opl-applied-imagination",
1970
+ "opl-justin-lerner"
1971
+ ],
1972
+ "links": [
1973
+ "https://fonts.googleapis.com/css2?family=Besley:wght@800&family=Libre+Franklin:wght@400;600&display=swap"
1974
+ ],
1975
+ "scale": {
1976
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
1977
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
1978
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
1979
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
1980
+ }
1981
+ },
1982
+ {
1983
+ "id": "rokkitt-literata",
1984
+ "name": "Rokkitt / Literata",
1985
+ "class": "slab",
1986
+ "display": {
1987
+ "family": "Rokkitt",
1988
+ "source": "google",
1989
+ "weights": [
1990
+ 800
1991
+ ],
1992
+ "italic": false,
1993
+ "settings": "weight 800 · tracking -0.01em · leading 0.85 · uppercase, sized by cap height (about 14vw)",
1994
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Rokkitt:wght@800&family=Literata:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
1995
+ },
1996
+ "text": {
1997
+ "family": "Literata",
1998
+ "source": "google",
1999
+ "weights": [
2000
+ 400,
2001
+ 600
2002
+ ],
2003
+ "italic": true,
2004
+ "settings": "400 for body, 600 for emphasis · leading 1.6 · tracking 0",
2005
+ "css": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Rokkitt:wght@800&family=Literata:ital,wght@0,400;0,600;1,400;1,600&display=swap\" rel=\"stylesheet\">"
2006
+ },
2007
+ "standsInFor": [
2008
+ "Albra Book"
2009
+ ],
2010
+ "note": "Narrow geometric slab capitals as a tall title block, then a bookish serif for a long essay beneath. Suits manufacturing, trades, manifestos and industrial history.",
2011
+ "seenIn": [
2012
+ "opl-the-new-industrials"
2013
+ ],
2014
+ "links": [
2015
+ "https://fonts.googleapis.com/css2?family=Rokkitt:wght@800&family=Literata:ital,wght@0,400;0,600;1,400;1,600&display=swap"
2016
+ ],
2017
+ "scale": {
2018
+ "step-small": "clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem)",
2019
+ "step-body": "clamp(1.125rem, 1.05rem + 0.3vw, 1.3125rem)",
2020
+ "step-lead": "clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem)",
2021
+ "step-head": "clamp(2rem, 1.3rem + 3.2vw, 4rem)"
2022
+ }
2023
+ }
2024
+ ]