create-ailk 0.8.0 → 0.10.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 (238) hide show
  1. package/README.md +71 -3
  2. package/component-catalog.json +279 -45
  3. package/dist/add-module.d.ts +20 -0
  4. package/dist/add-module.js +43 -7
  5. package/dist/add-route.d.ts +56 -0
  6. package/dist/add-route.js +286 -0
  7. package/dist/apply-design-md.d.ts +7 -0
  8. package/dist/apply-design-md.js +50 -0
  9. package/dist/apply-design.d.ts +64 -0
  10. package/dist/apply-design.js +273 -0
  11. package/dist/claude-md.d.ts +111 -0
  12. package/dist/claude-md.js +334 -0
  13. package/dist/cli.js +104 -5
  14. package/dist/derive-architecture.js +41 -36
  15. package/dist/design-compile.d.ts +71 -0
  16. package/dist/design-compile.js +98 -0
  17. package/dist/design-package.d.ts +83 -0
  18. package/dist/design-package.js +468 -0
  19. package/dist/design-presets.d.ts +86 -0
  20. package/dist/design-presets.js +642 -0
  21. package/dist/design-scaffold.d.ts +76 -0
  22. package/dist/design-scaffold.js +220 -0
  23. package/dist/index.d.ts +2 -1
  24. package/dist/index.js +4 -1
  25. package/dist/legacy-nav-renderers.d.ts +45 -0
  26. package/dist/legacy-nav-renderers.js +545 -0
  27. package/dist/lib/auth-secret-file.d.ts +19 -0
  28. package/dist/lib/auth-secret-file.js +112 -0
  29. package/dist/lib/design-checks.d.ts +78 -0
  30. package/dist/lib/design-checks.js +174 -0
  31. package/dist/lib/license-key-files.d.ts +9 -0
  32. package/dist/lib/license-key-files.js +2 -2
  33. package/dist/lib/module-license-gate.d.ts +48 -32
  34. package/dist/lib/module-license-gate.js +117 -8
  35. package/dist/lib/render-verdict.d.ts +52 -0
  36. package/dist/lib/render-verdict.js +77 -0
  37. package/dist/lib/scaffold-render-sweep.d.ts +105 -0
  38. package/dist/lib/scaffold-render-sweep.js +236 -0
  39. package/dist/module-architecture.d.ts +19 -16
  40. package/dist/module-architecture.js +67 -23
  41. package/dist/parse-args.d.ts +12 -2
  42. package/dist/parse-args.js +74 -13
  43. package/dist/programmatic.d.ts +30 -6
  44. package/dist/programmatic.js +216 -19
  45. package/dist/site-chrome.d.ts +19 -9
  46. package/dist/site-chrome.js +23 -13
  47. package/dist/site-manifest.d.ts +25 -0
  48. package/dist/site-manifest.js +254 -0
  49. package/dist/site-roster.d.ts +41 -0
  50. package/dist/site-roster.js +141 -8
  51. package/dist/starter-grid.d.ts +16 -63
  52. package/dist/starter-grid.js +102 -84
  53. package/dist/surfaces.d.ts +41 -9
  54. package/dist/surfaces.js +200 -83
  55. package/dist/template-manifest.d.ts +30 -13
  56. package/dist/template-manifest.js +53 -28
  57. package/package.json +6 -3
  58. package/release-scope.json +25 -0
  59. package/site-templates/_base/content/en/UseCase/persona-1.mdx +7 -6
  60. package/site-templates/_base/content/en/UseCase/persona-2.mdx +7 -6
  61. package/site-templates/_base/content/en/UseCase/persona-3.mdx +7 -6
  62. package/site-templates/designs/minimalism/DESIGN.md +98 -6
  63. package/site-templates/designs/minimalism/sample/README.md +48 -0
  64. package/site-templates/{minimalism-site → designs/minimalism/sample}/content/en/HomePage/home.mdx +1 -1
  65. package/site-templates/designs/standard/DESIGN.md +98 -6
  66. package/site-templates/marketing-site/DESIGN.md +98 -6
  67. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +60 -27
  68. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +50 -30
  69. package/site-templates/marketing-site-free/DESIGN.md +98 -6
  70. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +60 -24
  71. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +44 -27
  72. package/site-templates/marketing-site-free/ailk-template.json +1 -1
  73. package/site-templates/saas-product/DESIGN.md +98 -6
  74. package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.json +127 -18
  75. package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +74 -20
  76. package/site-templates/shapes/local-business-service/ailk-template.json +1 -1
  77. package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.json +127 -18
  78. package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +74 -20
  79. package/site-templates/shapes/organization-service/ailk-template.json +1 -1
  80. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +127 -18
  81. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +75 -21
  82. package/site-templates/shapes/person-service/ailk-template.json +1 -1
  83. package/site-templates/shapes/person-service/content/en/AboutPage/about.mdx +1 -1
  84. package/site-templates/shapes/person-service/content/en/HomePage/home.mdx +2 -2
  85. package/site-templates/shapes/person-service/content/en/PortfolioList/portfolio.mdx +4 -2
  86. package/site-templates/shapes/person-service/content/en/ServicesList/services.mdx +1 -1
  87. package/templates/.claude/agents/web.md +10 -8
  88. package/templates/.claude/rules/architecture.md +17 -7
  89. package/templates/.claude/skills/README.md +3 -2
  90. package/templates/.claude/skills/add-auth/SKILL.md +142 -90
  91. package/templates/.claude/skills/add-auth/references/env-vars.md +32 -17
  92. package/templates/.claude/skills/add-auth/references/oauth-app-setup.md +17 -8
  93. package/templates/.claude/skills/add-page/SKILL.md +241 -238
  94. package/templates/.claude/skills/add-page/references/page-types.md +94 -86
  95. package/templates/.claude/skills/add-page/scripts/site-pages.mjs +87 -0
  96. package/templates/.claude/skills/add-page/templates/comparison-page.mdx.tmpl +99 -0
  97. package/templates/.claude/skills/add-page/templates/content.mdx.tmpl +8 -18
  98. package/templates/.claude/skills/add-page/templates/flow-landing-page.mdx.tmpl +43 -0
  99. package/templates/.claude/skills/add-page/templates/report-page.mdx.tmpl +52 -0
  100. package/templates/.claude/skills/add-page/templates/reports-list.mdx.tmpl +38 -0
  101. package/templates/.claude/skills/check-site/SKILL.md +51 -18
  102. package/templates/.claude/skills/check-site/references/common-errors.md +12 -9
  103. package/templates/.claude/skills/check-site/references/findings-glossary.md +4 -4
  104. package/templates/.claude/skills/check-site/references/severity-levels.md +3 -3
  105. package/templates/.claude/skills/fill-page/SKILL.md +26 -7
  106. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +1 -1
  107. package/templates/.claude/skills/setup-deploy/SKILL.md +75 -38
  108. package/templates/.claude/skills/update-page/SKILL.md +117 -0
  109. package/templates/.claude/skills/update-page/scripts/update-page.ts +640 -0
  110. package/templates/.claude/skills/update-page/templates/redirects.mjs.tmpl +31 -0
  111. package/templates/.claude/skills/upgrade-plan/SKILL.md +12 -8
  112. package/templates/.env.example +23 -2
  113. package/templates/.github/workflows/ci.yml +4 -0
  114. package/templates/.prettierignore +1 -0
  115. package/templates/CLAUDE.md +146 -103
  116. package/templates/DESIGN.md +98 -6
  117. package/templates/README.md +50 -38
  118. package/templates/apps/api/.env.example +2 -1
  119. package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +2 -0
  120. package/templates/apps/api/src/__tests__/server.test.ts +116 -0
  121. package/templates/apps/api/src/lib/stripe.ts +9 -0
  122. package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +140 -0
  123. package/templates/apps/api/src/middleware/auth.ts +54 -0
  124. package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +5 -2
  125. package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +628 -0
  126. package/templates/apps/api/src/routes/checkout/sessions.ts +222 -24
  127. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +1 -1
  128. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +5 -1
  129. package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +521 -20
  130. package/templates/apps/api/src/routes/webhooks/stripe.ts +124 -32
  131. package/templates/apps/api/src/server.ts +28 -0
  132. package/templates/apps/api/src/services/__tests__/revalidation.test.ts +90 -15
  133. package/templates/apps/api/src/services/checkout-buyer.ts +72 -0
  134. package/templates/apps/api/src/services/revalidation.ts +60 -15
  135. package/templates/apps/mcp/__tests__/tools/create_project.test.ts +30 -24
  136. package/templates/apps/mcp/src/tools/purchase.ts +4 -2
  137. package/templates/apps/web/.env.example +13 -0
  138. package/templates/apps/web/CLAUDE.md +22 -28
  139. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +1 -1
  140. package/templates/apps/web/app/[locale]/(authed)/leads/__tests__/page.test.tsx +24 -0
  141. package/templates/apps/web/app/[locale]/(authed)/leads/page.tsx +17 -6
  142. package/templates/apps/web/app/[locale]/[slug]/[detail]/__tests__/page.test.tsx +110 -0
  143. package/templates/apps/web/app/[locale]/[slug]/[detail]/page.tsx +60 -0
  144. package/templates/apps/web/app/[locale]/[slug]/page.tsx +1 -1
  145. package/templates/apps/web/app/[locale]/alternatives/__tests__/page.test.tsx +161 -0
  146. package/templates/apps/web/app/[locale]/alternatives/page.tsx +104 -0
  147. package/templates/apps/web/app/[locale]/{use-cases → for}/[slug]/page.tsx +4 -3
  148. package/templates/apps/web/app/[locale]/for/__tests__/page-renderer-migration.test.tsx +73 -0
  149. package/templates/apps/web/app/[locale]/{use-cases → for}/page.tsx +8 -7
  150. package/templates/apps/web/app/[locale]/glossary/page.tsx +1 -1
  151. package/templates/apps/web/app/[locale]/layout.tsx +35 -19
  152. package/templates/apps/web/app/[locale]/newsletter/page.tsx +1 -1
  153. package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +1 -1
  154. package/templates/apps/web/app/[locale]/portfolio/page.tsx +1 -1
  155. package/templates/apps/web/app/[locale]/vs/[slug]/__tests__/page.test.tsx +112 -0
  156. package/templates/apps/web/app/[locale]/vs/[slug]/page.tsx +70 -0
  157. package/templates/apps/web/app/api/revalidate/__tests__/route.test.ts +236 -44
  158. package/templates/apps/web/app/api/revalidate/route.ts +78 -36
  159. package/templates/apps/web/lib/__tests__/site-brand.test.ts +79 -0
  160. package/templates/apps/web/lib/__tests__/site-theme.test.ts +104 -11
  161. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +21 -4
  162. package/templates/apps/web/lib/locale-guard.ts +18 -0
  163. package/templates/apps/web/lib/meet-placeholder.ts +5 -0
  164. package/templates/apps/web/lib/nav-config.ts +14 -13
  165. package/templates/apps/web/lib/site-brand.tsx +13 -9
  166. package/templates/apps/web/lib/site-logo.tsx +36 -0
  167. package/templates/apps/web/lib/site-theme.ts +46 -26
  168. package/templates/apps/web/messages/en.json +23 -9
  169. package/templates/apps/web/middleware.ts +28 -4
  170. package/templates/content/en/BookCall/book-a-call.mdx +80 -0
  171. package/templates/content/en/BookCall/onsite-estimate.mdx +56 -0
  172. package/templates/content/en/BookCall/onsite-service.mdx +56 -0
  173. package/templates/content/en/BookCall/start-project.mdx +56 -0
  174. package/templates/content/en/ContactPage/contact.mdx +40 -1
  175. package/templates/content/en/HomePage/home.mdx +2 -6
  176. package/templates/content/en/LandingPage/meet.mdx +59 -0
  177. package/templates/content/en/UseCasesList/{use-cases.mdx → for.mdx} +19 -18
  178. package/templates/database/CHANGELOG.md +7 -0
  179. package/templates/database/package.json +1 -1
  180. package/templates/package.json +4 -1
  181. package/templates/tools/check-claude-md.ts +128 -0
  182. package/versions.json +33 -33
  183. package/dist/modules/commerce/0.6.0.tar.gz +0 -0
  184. package/dist/modules/commerce/0.6.1.tar.gz +0 -0
  185. package/dist/modules/docs-blog/0.6.0.tar.gz +0 -0
  186. package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
  187. package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
  188. package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
  189. package/dist/modules/multi-tenant/0.6.0.tar.gz +0 -0
  190. package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
  191. package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
  192. package/dist/modules/scheduling/0.6.0.tar.gz +0 -0
  193. package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
  194. package/dist/modules/signal-collectors/0.6.0.tar.gz +0 -0
  195. package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
  196. package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
  197. package/dist/modules/workspace/0.6.0.tar.gz +0 -0
  198. package/dist/modules/workspace/0.6.1.tar.gz +0 -0
  199. package/site-templates/_base/content/en/BookCall/book-call.mdx +0 -52
  200. package/site-templates/minimalism-site/DESIGN.md +0 -162
  201. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +0 -506
  202. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +0 -458
  203. package/site-templates/minimalism-site/ailk-template.json +0 -23
  204. package/site-templates/minimalism-site/content/en/AboutPage/about.mdx +0 -110
  205. package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +0 -52
  206. package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +0 -34
  207. package/site-templates/minimalism-site/content/en/FAQPage/faq.mdx +0 -57
  208. package/site-templates/minimalism-site/content/en/LandingPage/referral.mdx +0 -77
  209. package/site-templates/minimalism-site/content/en/LandingPage/reports.mdx +0 -73
  210. package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +0 -123
  211. package/site-templates/minimalism-site/content/en/ReportPage/annual-letter-2024.mdx +0 -52
  212. package/site-templates/minimalism-site/content/en/ReportPage/field-notes-2023.mdx +0 -52
  213. package/site-templates/minimalism-site/content/en/ReportPage/platform-shift-2025.mdx +0 -52
  214. package/site-templates/minimalism-site/content/en/ReportPage/state-of-the-market-2026.mdx +0 -52
  215. package/site-templates/minimalism-site/content/en/Service/first-engagement.mdx +0 -38
  216. package/site-templates/minimalism-site/content/en/Service/second-engagement.mdx +0 -38
  217. package/site-templates/minimalism-site/content/en/Service/third-engagement.mdx +0 -38
  218. package/site-templates/minimalism-site/content/en/ServicesList/services.mdx +0 -73
  219. package/site-templates/minimalism-site/flows/referral.flow.json +0 -71
  220. package/site-templates/minimalism-site/provenance.json +0 -4
  221. package/templates/.claude/skills/add-page/templates/route.tsx.tmpl +0 -28
  222. package/templates/.claude/skills/setup-deploy/references/env-vars-template.md +0 -175
  223. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-31.552Z-fallback-1789916251590-037e9005.json +0 -8
  224. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.840Z-fallback-1789916253842-b52659e9.json +0 -12
  225. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.844Z-fallback-1789916253845-6b266f8c.json +0 -12
  226. package/templates/apps/web/app/[locale]/book-a-call/page.tsx +0 -50
  227. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +0 -72
  228. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-1.svg +0 -0
  229. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-2.svg +0 -0
  230. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-3.svg +0 -0
  231. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-4.svg +0 -0
  232. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-5.svg +0 -0
  233. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-6.svg +0 -0
  234. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/hero-backdrop.svg +0 -0
  235. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-1.svg +0 -0
  236. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-2.svg +0 -0
  237. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-3.svg +0 -0
  238. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/wordmark-placeholder.svg +0 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Standard
3
- description: The standard design — the black-on-white foundation any shape wears by default: full navigation, a multi-column footer, the document-scroll home.
3
+ description: "The standard design — the black-on-white foundation any shape wears by default: full navigation, a multi-column footer, the document-scroll home."
4
4
  colors:
5
5
  bg: "#ffffff"
6
6
  fg: "#000000"
@@ -15,6 +15,19 @@ colors:
15
15
  fg-dark: "#ffffff"
16
16
  border-dark: "#ffffff"
17
17
  brand-dark: "#ffffff"
18
+ text-muted-dark: "#cccccc"
19
+ treatments:
20
+ corners: square
21
+ eyebrowCase: sentence
22
+ placeholders: fill
23
+ checkmarks: plain
24
+ layout:
25
+ nav: full
26
+ footer: columns
27
+ announcementBanner: false
28
+ home: default
29
+ copy:
30
+ density: standard
18
31
  typography:
19
32
  display:
20
33
  fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
@@ -69,9 +82,12 @@ spacing:
69
82
  stays on-system.
70
83
  Edit the canonical file, never a copy — a test holds every copy to it.
71
84
 
72
- The tokens above describe what the site RENDERS today. Colours come from
73
- content/_site.mdx (`theme.colors`); type, radius and spacing are platform
74
- defaults a site cannot override yet — see "Where this is heading" below.
85
+ The tokens above describe what the site RENDERS today. The design's own
86
+ colours and shape knobs live in content/_site.mdx `theme:`, which
87
+ `create-ailk apply-design` replaces wholesale; the owner's brand colours and
88
+ fonts live beside it in `brand.colors` and `brand.fonts`, which applying a
89
+ design never rewrites. Radius and spacing are platform defaults a site
90
+ cannot override yet — see "Where this is heading" below.
75
91
  -->
76
92
 
77
93
  # Standard
@@ -84,6 +100,27 @@ Every page is composed from the AI Launch Kit component library (`@working-theor
84
100
 
85
101
  ## Colors
86
102
 
103
+ <!-- generated:begin colors -->
104
+
105
+ | Key | Value | Compiles to |
106
+ | ------------------- | --------- | -------------------------------------------------------------------------------------------------------------- |
107
+ | `bg` | `#ffffff` | `light.bg` |
108
+ | `fg` | `#000000` | `light.text` |
109
+ | `surface` | `#ffffff` | `light.surface` |
110
+ | `surface-secondary` | `#ffffff` | `light.bgMuted` |
111
+ | `border` | `#000000` | `light.border` |
112
+ | `text-muted` | `#333333` | `light.textMuted` |
113
+ | `brand` | `#000000` | `light.primary` |
114
+ | `fg-on-brand` | `#ffffff` | `light.primaryFg` |
115
+ | `accent` | `#000000` | `light.accent` |
116
+ | `bg-dark` | `#000000` | `dark.bg`, `dark.bgMuted` (fallback of L1), `dark.surface` (fallback of L2), `dark.primaryFg` (fallback of L4) |
117
+ | `fg-dark` | `#ffffff` | `dark.text` |
118
+ | `border-dark` | `#ffffff` | `dark.border` |
119
+ | `brand-dark` | `#ffffff` | `dark.primary`, `dark.accent` (fallback of L5) |
120
+ | `text-muted-dark` | `#cccccc` | `dark.textMuted` |
121
+
122
+ <!-- generated:end -->
123
+
87
124
  ### Primary
88
125
 
89
126
  **Black** (`brand` `#000000`) fills the primary button; its label is white. The secondary button is white with a black hairline and black label.
@@ -100,6 +137,18 @@ Dark mode inverts: black ground, white ink, white rules, white primary button wi
100
137
 
101
138
  ## Typography
102
139
 
140
+ <!-- generated:begin typography -->
141
+
142
+ | Role | Family | Size | Weight | Line height | Tracking |
143
+ | ----------------- | ------------------------------------------------------------------------ | ---------- | ------ | ----------- | -------- |
144
+ | `display` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3.5rem` | 700 | 1.1 | `normal` |
145
+ | `heading-section` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3rem` | 700 | 1.1 | `normal` |
146
+ | `heading-item` | — | `2rem` | 700 | 1.375 | `normal` |
147
+ | `body` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `1.125rem` | 400 | 1.5 | — |
148
+ | `eyebrow` | — | `0.875rem` | 600 | 1.4 | `0.05em` |
149
+
150
+ <!-- generated:end -->
151
+
103
152
  System sans throughout; no web font.
104
153
 
105
154
  ### Hierarchy
@@ -118,10 +167,53 @@ The small label above a section heading is **kept** as part of this foundation's
118
167
 
119
168
  ## Layout
120
169
 
170
+ <!-- generated:begin layout -->
171
+
172
+ | Knob | Value |
173
+ | -------------------- | --------- |
174
+ | `nav` | `full` |
175
+ | `footer` | `columns` |
176
+ | `announcementBanner` | `false` |
177
+ | `home` | `default` |
178
+
179
+ | Spacing | Value |
180
+ | ---------------- | -------- |
181
+ | `section` | `7rem` |
182
+ | `section-mobile` | `4rem` |
183
+ | `card` | `1.5rem` |
184
+ | `grid` | `1.5rem` |
185
+ | `container` | `1280px` |
186
+ | `measure` | `36rem` |
187
+
188
+ <!-- generated:end -->
189
+
121
190
  Full navigation; a multi-column footer; the default home. The home-only announcement banner is off by default (`layout.announcementBanner`). Every page this site carries is listed in its roster of record, `.ailk-site-manifest.json` at the site root. Shared foundation: a 1280px container, sections at 7rem (4rem below 1024px), card grids at 1.5rem, breakpoints 320 / 768 / 1024 / 1440.
122
191
 
192
+ ## Copy
193
+
194
+ <!-- generated:begin copy -->
195
+
196
+ Copy density: standard — pages carry the ordinary amount of body copy for their section.
197
+ <!-- generated:end -->
198
+
123
199
  ## Shapes
124
200
 
201
+ <!-- generated:begin shapes -->
202
+
203
+ | Rounded | Value |
204
+ | -------- | --------- |
205
+ | `button` | `0.5rem` |
206
+ | `card` | `0.75rem` |
207
+
208
+ | Treatment | Value |
209
+ | ------------------------- | ---------- |
210
+ | `treatments.corners` | `square` |
211
+ | `treatments.eyebrowCase` | `sentence` |
212
+ | `treatments.placeholders` | `fill` |
213
+ | `treatments.checkmarks` | `plain` |
214
+
215
+ <!-- generated:end -->
216
+
125
217
  Square corners everywhere (`theme.corners: square`) — buttons, cards, the auth card, image placeholders; the tokens above are the base foundation's defaults a site overrides.
126
218
 
127
219
  ## Components
@@ -156,8 +248,8 @@ The foundation's pinned direction is the pacing of a classic wireframe marketing
156
248
  ## Do's and Don'ts
157
249
 
158
250
  - **Do** keep every page built from registered sections. If a section you need does not exist, request it rather than writing one-off markup.
159
- - **Do** change colours in `content/_site.mdx` `theme.colors`; they reach every section.
160
- - **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through the theme.
251
+ - **Do** set your brand colours (`primary`, `primaryFg`, `accent`, per mode) in `content/_site.mdx` `brand.colors` and your fonts (`display`, `body`) in `brand.fonts`; they reach every section and survive applying another design, which replaces `theme:`.
252
+ - **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through `brand.colors`.
161
253
  - **Don't** replace a black rule with a shadow or a grey fill.
162
254
  - **Don't** hard-code the "heading toward" values above into a page. They arrive through the platform, or not at all.
163
255
 
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "shape": "organization-product",
19
19
  "design": "standard",
20
- "generatedHash": "2fd8ca4f5860bc4ac7ccf086daa46c56d65a8d92e106e428ca838c435a335a76",
20
+ "generatedHash": "bc9ceb909dc92d2f442fd5cadddc073363a7be19e780f36e26b703d99c6e680a",
21
21
  "layout": {
22
22
  "nav": "full",
23
23
  "footer": "columns",
@@ -173,7 +173,7 @@
173
173
  "sections": []
174
174
  },
175
175
  {
176
- "route": "/use-cases",
176
+ "route": "/for",
177
177
  "kind": "page",
178
178
  "pageType": "UseCasesList",
179
179
  "schema": "UseCasesList",
@@ -213,7 +213,7 @@
213
213
  ]
214
214
  },
215
215
  {
216
- "route": "/use-cases/[slug]",
216
+ "route": "/for/[slug]",
217
217
  "kind": "page",
218
218
  "contentDir": "content/en/UseCase",
219
219
  "seeds": [
@@ -335,6 +335,13 @@
335
335
  {
336
336
  "type": "hero",
337
337
  "component": "Hero"
338
+ },
339
+ {
340
+ "type": "items",
341
+ "component": "Items",
342
+ "options": {
343
+ "columns": 2
344
+ }
338
345
  }
339
346
  ]
340
347
  },
@@ -378,27 +385,6 @@
378
385
  }
379
386
  ]
380
387
  },
381
- {
382
- "route": "/book-a-call",
383
- "kind": "page",
384
- "pageType": "BookCall",
385
- "schema": "BookCall",
386
- "shell": "MarketingShell",
387
- "chrome": "on",
388
- "sections": [
389
- {
390
- "type": "hero",
391
- "component": "Hero"
392
- },
393
- {
394
- "type": "items",
395
- "component": "Items",
396
- "options": {
397
- "columns": 3
398
- }
399
- }
400
- ]
401
- },
402
388
  {
403
389
  "route": "/sign-in",
404
390
  "kind": "route",
@@ -522,6 +508,46 @@
522
508
  "chrome": "on",
523
509
  "sections": []
524
510
  },
511
+ {
512
+ "route": "/reports",
513
+ "kind": "page",
514
+ "pageType": "ReportsList",
515
+ "schema": "ReportsList",
516
+ "shell": "MarketingShell",
517
+ "chrome": "on",
518
+ "sections": [
519
+ {
520
+ "type": "hero",
521
+ "component": "Hero"
522
+ },
523
+ {
524
+ "type": "cta",
525
+ "component": "CTA"
526
+ }
527
+ ]
528
+ },
529
+ {
530
+ "route": "/referral",
531
+ "kind": "page",
532
+ "pageType": "LandingPage",
533
+ "schema": "WebPage",
534
+ "shell": "MarketingShell",
535
+ "chrome": "on",
536
+ "sections": [
537
+ {
538
+ "type": "hero",
539
+ "component": "Hero"
540
+ },
541
+ {
542
+ "type": "stair-steps",
543
+ "component": "StairSteps"
544
+ },
545
+ {
546
+ "type": "cta",
547
+ "component": "CTA"
548
+ }
549
+ ]
550
+ },
525
551
  {
526
552
  "route": "/portfolio",
527
553
  "kind": "page",
@@ -659,9 +685,16 @@
659
685
  },
660
686
  {
661
687
  "route": "/reports/[slug]",
662
- "kind": "route",
663
- "pageType": null,
664
- "schema": null,
688
+ "kind": "page",
689
+ "contentDir": "content/en/ReportPage",
690
+ "seeds": [
691
+ "content/en/ReportPage/annual-letter-2024.mdx",
692
+ "content/en/ReportPage/field-notes-2023.mdx",
693
+ "content/en/ReportPage/platform-shift-2025.mdx",
694
+ "content/en/ReportPage/state-of-the-market-2026.mdx"
695
+ ],
696
+ "pageType": "ReportPage",
697
+ "schema": "ReportPage",
665
698
  "shell": "MarketingShell",
666
699
  "chrome": "on",
667
700
  "sections": []
@@ -92,24 +92,24 @@ The base rows come first, exactly as the base layer and the always-copied overla
92
92
 
93
93
  <!-- generated:end -->
94
94
 
95
- `/use-cases` (a UseCasesList page composing sections — operator ruling 2026-09-23; a list of the three use cases since #6658 D4):
95
+ `/for` (a UseCasesList page composing sections — operator ruling 2026-09-23; a list of the three use cases since #6658 D4):
96
96
 
97
- <!-- generated:begin page=/use-cases -->
97
+ <!-- generated:begin page=/for -->
98
98
 
99
99
  | # | Section | Component | Copy (first line) |
100
100
  | --- | -------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
101
- | 1 | `hero` (eyebrow "Use cases" · 2 CTAs) | `Hero` | {Use cases: who your product is for} |
102
- | 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product to do} |
101
+ | 1 | `hero` (eyebrow "Customers" · 2 CTAs) | `Hero` | {Customers: who your product or service is for} |
102
+ | 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product or service to do} |
103
103
  | 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
104
104
  | 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
105
- | 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
105
+ | 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product or service in time amount or less} |
106
106
  | 6 | `faq` (accordion · items ×5 · 1 CTA · initialOpen first) | `FAQ` | FAQs |
107
107
 
108
108
  <!-- generated:end -->
109
109
 
110
- `/use-cases/[slug]` (#6658 D4):
110
+ `/for/[slug]` (#6658 D4):
111
111
 
112
- <!-- generated:begin page=/use-cases/[slug] -->
112
+ <!-- generated:begin page=/for/[slug] -->
113
113
 
114
114
  _Detail route over `content/en/UseCase/` — 3 seed pages: `persona-1.mdx`, `persona-2.mdx`, `persona-3.mdx`._
115
115
  <!-- generated:end -->
@@ -177,13 +177,14 @@ _Detail route over `content/en/Feature/` — 3 seed pages: `feature-1.mdx`, `fea
177
177
 
178
178
  <!-- generated:begin page=/contact -->
179
179
 
180
- | # | Section | Component | Copy (first line) |
181
- | --- | --------------------------------------------------------- | --------- | ------------------------------------- |
182
- | 1 | `hero` (split · eyebrow "Contact" · checklist ×3 · 1 CTA) | `Hero` | Get every message in your email, free |
180
+ | # | Section | Component | Copy (first line) |
181
+ | --- | --------------------------------------------------------- | --------- | ----------------------------------------- |
182
+ | 1 | `hero` (split · eyebrow "Contact" · checklist ×3 · 1 CTA) | `Hero` | Get every message in your email, free |
183
+ | 2 | `items` (tiles · columns=2 · items ×4) | `Items` | {Add appointment scheduling to your site} |
183
184
 
184
185
  <!-- generated:end -->
185
186
 
186
- `/glossary`, `/newsletter`, `/book-a-call` (#6658 D5 — every starter carries them):
187
+ `/glossary`, `/newsletter` (#6658 D5 — every starter carries them). `/book-a-call` is retired (#6897 D10); this template's `scheduling` module serves its own live `/meet` and `/meet/[slug]` pages instead.
187
188
 
188
189
  <!-- generated:begin page=/glossary -->
189
190
 
@@ -204,15 +205,6 @@ _Detail route over `content/en/Feature/` — 3 seed pages: `feature-1.mdx`, `fea
204
205
 
205
206
  <!-- generated:end -->
206
207
 
207
- <!-- generated:begin page=/book-a-call -->
208
-
209
- | # | Section | Component | Copy (first line) |
210
- | --- | -------------------------------------- | --------- | ------------------------------------------ |
211
- | 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
212
- | 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
213
-
214
- <!-- generated:end -->
215
-
216
208
  `/sign-in`:
217
209
 
218
210
  <!-- generated:begin page=/sign-in -->
@@ -380,7 +372,7 @@ _Code route — no content, no sections._
380
372
 
381
373
  <!-- generated:begin page=/reports/[slug] -->
382
374
 
383
- _Code route — no content, no sections._
375
+ _Detail route over `content/en/ReportPage/` — 4 seed pages: `annual-letter-2024.mdx`, `field-notes-2023.mdx`, `platform-shift-2025.mdx`, `state-of-the-market-2026.mdx`._
384
376
  <!-- generated:end -->
385
377
 
386
378
  ### `/projects`, `/projects/<slug>`, `/projects/apply` — CollectionPage / WebPage · schema `ProjectsList` / `Project` · signal-collectors
@@ -415,6 +407,33 @@ Authored per form (#3960): `contact` (if the Pro contact form redirects), `newsl
415
407
  _Detail route over `content/en/ThankYouPage/` — 3 seed pages: `apply.mdx`, `contact.mdx`, `newsletter.mdx`._
416
408
  <!-- generated:end -->
417
409
 
410
+ ### `/reports` — ReportsList hub · schema `CollectionPage` · signal-collectors
411
+
412
+ Spec 6892 D2/D3 — a signal-collectors module sample, self-seeded alongside its four `ReportPage` spokes at `/reports/<slug>` (below). Its seed carries `hero` and `cta`; the card grid is a generated `reports-list` section the route appends from the module's own seeds (never hand-authored).
413
+
414
+ <!-- generated:begin page=/reports -->
415
+
416
+ | # | Section | Component | Copy (first line) |
417
+ | --- | ------------------------------------- | --------- | ------------------------------------------- |
418
+ | 1 | `hero` (centered · eyebrow "Reports") | `Hero` | Research on {your field}, published in full |
419
+ | 2 | `cta` (minimal · 1 CTA) | `CTA` | Want the next one as it lands? |
420
+
421
+ <!-- generated:end -->
422
+
423
+ ### `/referral` — flow landing page · schema `LandingPage` · signal-collectors
424
+
425
+ Spec 6892 D3 — a signal-collectors module sample: the referral magnet, whose CTA opens the `referral` flow at `/flows/referral/start`.
426
+
427
+ <!-- generated:begin page=/referral -->
428
+
429
+ | # | Section | Component | Copy (first line) |
430
+ | --- | -------------------------------------------------------------- | ------------ | ---------------------------------------- |
431
+ | 1 | `hero` (centered · eyebrow "Referrals" · checklist ×3 · 1 CTA) | `Hero` | Know someone who should be on this list? |
432
+ | 2 | `stair-steps` (tiles ×3) | `StairSteps` | Three steps, about a minute |
433
+ | 3 | `cta` (minimal · 1 CTA) | `CTA` | Make an introduction |
434
+
435
+ <!-- generated:end -->
436
+
418
437
  <!-- generated:begin page=/portfolio -->
419
438
 
420
439
  | # | Section | Component | Copy (first line) |
@@ -462,15 +481,14 @@ marketing-site:
462
481
  - { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
463
482
  - { route: "/features", kind: page, content: ["content/en/FeaturesList/features.mdx"] }
464
483
  - { route: "/features/[slug]", kind: page, contentDir: "content/en/Feature" }
465
- - { route: "/use-cases", kind: page, content: ["content/en/UseCasesList/use-cases.mdx"] }
466
- - { route: "/use-cases/[slug]", kind: page, contentDir: "content/en/UseCase" }
484
+ - { route: "/for", kind: page, content: ["content/en/UseCasesList/for.mdx"] }
485
+ - { route: "/for/[slug]", kind: page, contentDir: "content/en/UseCase" }
467
486
  - { route: "/pricing", kind: page, content: ["content/en/Pricing/pricing.mdx"] }
468
487
  - { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
469
488
  - { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
470
489
  - { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
471
490
  - { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
472
491
  - { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
473
- - { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
474
492
  - { route: "/sign-in", kind: route }
475
493
  - { route: "/sign-up", kind: route }
476
494
  - { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
@@ -479,6 +497,8 @@ marketing-site:
479
497
  - { route: "/projects", kind: page, content: ["content/en/ProjectsList/projects.mdx"] }
480
498
  - { route: "/projects/[slug]", kind: page, contentDir: "content/en/Project" }
481
499
  - { route: "/thanks/[slug]", kind: page, contentDir: "content/en/ThankYouPage" }
500
+ - { route: "/reports", kind: page, content: ["content/en/ReportsList/reports.mdx"] }
501
+ - { route: "/referral", kind: page, content: ["content/en/LandingPage/referral.mdx"] }
482
502
  - { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
483
503
  - { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
484
504
  - { route: "/blog", kind: page, content: ["apps/web/content/en/blog/index.mdx", "apps/web/content/en/blog/01-8-things-that-prove-coding-skills-are-directly-linked-to-successfully-assembling-ikea-furniture.mdx", "apps/web/content/en/blog/02-5-ways-to-guarantee-your-startup-goes-nowhere-fast.mdx", "apps/web/content/en/blog/03-10-ideas-that-will-guarantee-1000x-growth.mdx", "apps/web/content/en/blog/04-7-keys-to-saas-success-the-elite-doesnt-want-you-to-know.mdx", "apps/web/content/en/blog/launching-ailk.mdx"] }
@@ -490,7 +510,7 @@ marketing-site:
490
510
  - { route: "/flows/[slug]", kind: route }
491
511
  - { route: "/flows/[slug]/start", kind: route }
492
512
  - { route: "/flows/[slug]/results/[payload]", kind: route }
493
- - { route: "/reports/[slug]", kind: route }
513
+ - { route: "/reports/[slug]", kind: page, contentDir: "content/en/ReportPage" }
494
514
  ```
495
515
 
496
516
  <!-- generated:end -->
@@ -512,11 +532,11 @@ Every component the roster rows' seed content composes today (generated):
512
532
 
513
533
  <!-- generated:begin inventory -->
514
534
 
515
- | Tier | Used by this template |
516
- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
517
- | Shell | `MarketingShell` |
518
- | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
519
- | Sections | `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `Newsletter`, `Pricing`, `Team`, `Testimonials` |
535
+ | Tier | Used by this template |
536
+ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
537
+ | Shell | `MarketingShell` |
538
+ | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
539
+ | Sections | `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `Newsletter`, `Pricing`, `StairSteps`, `Team`, `Testimonials` |
520
540
 
521
541
  <!-- generated:end -->
522
542
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Standard
3
- description: The standard design — the black-on-white foundation any shape wears by default: full navigation, a multi-column footer, the document-scroll home.
3
+ description: "The standard design — the black-on-white foundation any shape wears by default: full navigation, a multi-column footer, the document-scroll home."
4
4
  colors:
5
5
  bg: "#ffffff"
6
6
  fg: "#000000"
@@ -15,6 +15,19 @@ colors:
15
15
  fg-dark: "#ffffff"
16
16
  border-dark: "#ffffff"
17
17
  brand-dark: "#ffffff"
18
+ text-muted-dark: "#cccccc"
19
+ treatments:
20
+ corners: square
21
+ eyebrowCase: sentence
22
+ placeholders: fill
23
+ checkmarks: plain
24
+ layout:
25
+ nav: full
26
+ footer: columns
27
+ announcementBanner: false
28
+ home: default
29
+ copy:
30
+ density: standard
18
31
  typography:
19
32
  display:
20
33
  fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
@@ -69,9 +82,12 @@ spacing:
69
82
  stays on-system.
70
83
  Edit the canonical file, never a copy — a test holds every copy to it.
71
84
 
72
- The tokens above describe what the site RENDERS today. Colours come from
73
- content/_site.mdx (`theme.colors`); type, radius and spacing are platform
74
- defaults a site cannot override yet — see "Where this is heading" below.
85
+ The tokens above describe what the site RENDERS today. The design's own
86
+ colours and shape knobs live in content/_site.mdx `theme:`, which
87
+ `create-ailk apply-design` replaces wholesale; the owner's brand colours and
88
+ fonts live beside it in `brand.colors` and `brand.fonts`, which applying a
89
+ design never rewrites. Radius and spacing are platform defaults a site
90
+ cannot override yet — see "Where this is heading" below.
75
91
  -->
76
92
 
77
93
  # Standard
@@ -84,6 +100,27 @@ Every page is composed from the AI Launch Kit component library (`@working-theor
84
100
 
85
101
  ## Colors
86
102
 
103
+ <!-- generated:begin colors -->
104
+
105
+ | Key | Value | Compiles to |
106
+ | ------------------- | --------- | -------------------------------------------------------------------------------------------------------------- |
107
+ | `bg` | `#ffffff` | `light.bg` |
108
+ | `fg` | `#000000` | `light.text` |
109
+ | `surface` | `#ffffff` | `light.surface` |
110
+ | `surface-secondary` | `#ffffff` | `light.bgMuted` |
111
+ | `border` | `#000000` | `light.border` |
112
+ | `text-muted` | `#333333` | `light.textMuted` |
113
+ | `brand` | `#000000` | `light.primary` |
114
+ | `fg-on-brand` | `#ffffff` | `light.primaryFg` |
115
+ | `accent` | `#000000` | `light.accent` |
116
+ | `bg-dark` | `#000000` | `dark.bg`, `dark.bgMuted` (fallback of L1), `dark.surface` (fallback of L2), `dark.primaryFg` (fallback of L4) |
117
+ | `fg-dark` | `#ffffff` | `dark.text` |
118
+ | `border-dark` | `#ffffff` | `dark.border` |
119
+ | `brand-dark` | `#ffffff` | `dark.primary`, `dark.accent` (fallback of L5) |
120
+ | `text-muted-dark` | `#cccccc` | `dark.textMuted` |
121
+
122
+ <!-- generated:end -->
123
+
87
124
  ### Primary
88
125
 
89
126
  **Black** (`brand` `#000000`) fills the primary button; its label is white. The secondary button is white with a black hairline and black label.
@@ -100,6 +137,18 @@ Dark mode inverts: black ground, white ink, white rules, white primary button wi
100
137
 
101
138
  ## Typography
102
139
 
140
+ <!-- generated:begin typography -->
141
+
142
+ | Role | Family | Size | Weight | Line height | Tracking |
143
+ | ----------------- | ------------------------------------------------------------------------ | ---------- | ------ | ----------- | -------- |
144
+ | `display` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3.5rem` | 700 | 1.1 | `normal` |
145
+ | `heading-section` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3rem` | 700 | 1.1 | `normal` |
146
+ | `heading-item` | — | `2rem` | 700 | 1.375 | `normal` |
147
+ | `body` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `1.125rem` | 400 | 1.5 | — |
148
+ | `eyebrow` | — | `0.875rem` | 600 | 1.4 | `0.05em` |
149
+
150
+ <!-- generated:end -->
151
+
103
152
  System sans throughout; no web font.
104
153
 
105
154
  ### Hierarchy
@@ -118,10 +167,53 @@ The small label above a section heading is **kept** as part of this foundation's
118
167
 
119
168
  ## Layout
120
169
 
170
+ <!-- generated:begin layout -->
171
+
172
+ | Knob | Value |
173
+ | -------------------- | --------- |
174
+ | `nav` | `full` |
175
+ | `footer` | `columns` |
176
+ | `announcementBanner` | `false` |
177
+ | `home` | `default` |
178
+
179
+ | Spacing | Value |
180
+ | ---------------- | -------- |
181
+ | `section` | `7rem` |
182
+ | `section-mobile` | `4rem` |
183
+ | `card` | `1.5rem` |
184
+ | `grid` | `1.5rem` |
185
+ | `container` | `1280px` |
186
+ | `measure` | `36rem` |
187
+
188
+ <!-- generated:end -->
189
+
121
190
  Full navigation; a multi-column footer; the default home. The home-only announcement banner is off by default (`layout.announcementBanner`). Every page this site carries is listed in its roster of record, `.ailk-site-manifest.json` at the site root. Shared foundation: a 1280px container, sections at 7rem (4rem below 1024px), card grids at 1.5rem, breakpoints 320 / 768 / 1024 / 1440.
122
191
 
192
+ ## Copy
193
+
194
+ <!-- generated:begin copy -->
195
+
196
+ Copy density: standard — pages carry the ordinary amount of body copy for their section.
197
+ <!-- generated:end -->
198
+
123
199
  ## Shapes
124
200
 
201
+ <!-- generated:begin shapes -->
202
+
203
+ | Rounded | Value |
204
+ | -------- | --------- |
205
+ | `button` | `0.5rem` |
206
+ | `card` | `0.75rem` |
207
+
208
+ | Treatment | Value |
209
+ | ------------------------- | ---------- |
210
+ | `treatments.corners` | `square` |
211
+ | `treatments.eyebrowCase` | `sentence` |
212
+ | `treatments.placeholders` | `fill` |
213
+ | `treatments.checkmarks` | `plain` |
214
+
215
+ <!-- generated:end -->
216
+
125
217
  Square corners everywhere (`theme.corners: square`) — buttons, cards, the auth card, image placeholders; the tokens above are the base foundation's defaults a site overrides.
126
218
 
127
219
  ## Components
@@ -156,8 +248,8 @@ The foundation's pinned direction is the pacing of a classic wireframe marketing
156
248
  ## Do's and Don'ts
157
249
 
158
250
  - **Do** keep every page built from registered sections. If a section you need does not exist, request it rather than writing one-off markup.
159
- - **Do** change colours in `content/_site.mdx` `theme.colors`; they reach every section.
160
- - **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through the theme.
251
+ - **Do** set your brand colours (`primary`, `primaryFg`, `accent`, per mode) in `content/_site.mdx` `brand.colors` and your fonts (`display`, `body`) in `brand.fonts`; they reach every section and survive applying another design, which replaces `theme:`.
252
+ - **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through `brand.colors`.
161
253
  - **Don't** replace a black rule with a shadow or a grey fill.
162
254
  - **Don't** hard-code the "heading toward" values above into a page. They arrive through the platform, or not at all.
163
255