ai-delivery-workflow 0.4.0 → 0.5.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 (207) hide show
  1. package/README.md +2 -2
  2. package/bin/release-check.mjs +8 -2
  3. package/docs/DUAL-REPOSITORY-WORKSPACE.zh-CN.md +13 -0
  4. package/docs/FILE-REFERENCE.zh-CN.md +11 -8
  5. package/docs/NPM-RELEASE-MANAGEMENT.zh-CN.md +2 -1
  6. package/docs/PROJECT-MANUAL.zh-CN.md +27 -5
  7. package/docs/STATE-CLI-USER-GUIDE.zh-CN.md +1 -1
  8. package/docs/adr/0006-product-line-candidate-inventory.md +20 -0
  9. package/docs/agents/domain.md +31 -6
  10. package/docs/agents/issue-tracker.md +17 -18
  11. package/docs/agents/triage-labels.md +7 -7
  12. package/docs/agents/workflow-manager-current-state.md +2 -2
  13. package/lib/npm-auth.mjs +16 -0
  14. package/package.json +1 -1
  15. package/skills/ai-delivery-assemble-release/SKILL.md +10 -8
  16. package/skills/ai-delivery-assemble-release/agents/openai.yaml +3 -3
  17. package/skills/ai-delivery-assemble-release/assets/release-candidate-manifest.yaml +16 -4
  18. package/skills/ai-delivery-assemble-release/assets/release-git-plan.yaml +96 -6
  19. package/skills/ai-delivery-assemble-release/assets/version-inclusion.csv +2 -2
  20. package/skills/ai-delivery-assemble-release/references/release-assembly-contract.md +16 -2
  21. package/skills/ai-delivery-assemble-release/scripts/plan-release.mjs +127 -3
  22. package/skills/ai-delivery-bootstrap/agents/openai.yaml +3 -3
  23. package/skills/ai-delivery-checkpoint-task/agents/openai.yaml +3 -3
  24. package/skills/ai-delivery-close-version/agents/openai.yaml +3 -3
  25. package/skills/ai-delivery-define-product/agents/openai.yaml +4 -4
  26. package/skills/ai-delivery-deploy-production/agents/openai.yaml +3 -3
  27. package/skills/ai-delivery-design-experience/agents/openai.yaml +4 -4
  28. package/skills/ai-delivery-develop-iteration/agents/openai.yaml +3 -3
  29. package/skills/ai-delivery-evolve-workflow/agents/openai.yaml +3 -3
  30. package/skills/ai-delivery-execute-test/agents/openai.yaml +4 -4
  31. package/skills/ai-delivery-execute-work-package/agents/openai.yaml +4 -4
  32. package/skills/ai-delivery-manage-git/SKILL.md +9 -7
  33. package/skills/ai-delivery-manage-git/agents/openai.yaml +3 -3
  34. package/skills/ai-delivery-manage-git/references/git-policy.md +7 -3
  35. package/skills/ai-delivery-manage-git/scripts/release-git.mjs +995 -0
  36. package/skills/ai-delivery-manage-standards/agents/openai.yaml +4 -4
  37. package/skills/ai-delivery-orchestrate/agents/openai.yaml +3 -3
  38. package/skills/ai-delivery-orchestrate/assets/project-template/AGENTS.md +5 -3
  39. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/CONTRIBUTING.md +25 -25
  40. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airbnb/DESIGN.md +545 -545
  41. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airbnb/README.md +5 -5
  42. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airtable/DESIGN.md +554 -554
  43. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/airtable/README.md +5 -5
  44. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/apple/DESIGN.md +562 -562
  45. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/apple/README.md +5 -5
  46. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/binance/DESIGN.md +634 -634
  47. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/binance/README.md +5 -5
  48. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw/DESIGN.md +544 -544
  49. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw/README.md +5 -5
  50. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw-m/DESIGN.md +503 -503
  51. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bmw-m/README.md +5 -5
  52. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bugatti/DESIGN.md +454 -454
  53. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/bugatti/README.md +5 -5
  54. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cal/DESIGN.md +542 -542
  55. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cal/README.md +5 -5
  56. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/claude/DESIGN.md +589 -589
  57. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/claude/README.md +5 -5
  58. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clay/DESIGN.md +541 -541
  59. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clay/README.md +5 -5
  60. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clickhouse/DESIGN.md +544 -544
  61. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/clickhouse/README.md +5 -5
  62. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cohere/DESIGN.md +451 -451
  63. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cohere/README.md +5 -5
  64. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/coinbase/DESIGN.md +570 -570
  65. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/coinbase/README.md +5 -5
  66. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/composio/DESIGN.md +506 -506
  67. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/composio/README.md +5 -5
  68. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cursor/DESIGN.md +537 -537
  69. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/cursor/README.md +5 -5
  70. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/dell-1996/DESIGN.md +632 -632
  71. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/dell-1996/README.md +5 -5
  72. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/elevenlabs/DESIGN.md +504 -504
  73. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/elevenlabs/README.md +5 -5
  74. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/expo/DESIGN.md +526 -526
  75. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/expo/README.md +5 -5
  76. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ferrari/DESIGN.md +531 -531
  77. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ferrari/README.md +5 -5
  78. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/figma/DESIGN.md +578 -578
  79. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/figma/README.md +5 -5
  80. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/framer/DESIGN.md +544 -544
  81. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/framer/README.md +5 -5
  82. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hashicorp/DESIGN.md +575 -575
  83. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hashicorp/README.md +5 -5
  84. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hp/DESIGN.md +670 -670
  85. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/hp/README.md +5 -5
  86. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ibm/DESIGN.md +550 -550
  87. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ibm/README.md +5 -5
  88. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/intercom/DESIGN.md +546 -546
  89. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/intercom/README.md +5 -5
  90. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/kraken/DESIGN.md +125 -125
  91. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/kraken/README.md +5 -5
  92. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lamborghini/DESIGN.md +288 -288
  93. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lamborghini/README.md +5 -5
  94. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/linear.app/DESIGN.md +548 -548
  95. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/linear.app/README.md +5 -5
  96. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lovable/DESIGN.md +298 -298
  97. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/lovable/README.md +5 -5
  98. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mastercard/DESIGN.md +365 -365
  99. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mastercard/README.md +5 -5
  100. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/meta/DESIGN.md +683 -683
  101. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/meta/README.md +5 -5
  102. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/minimax/DESIGN.md +746 -746
  103. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/minimax/README.md +5 -5
  104. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mintlify/DESIGN.md +852 -852
  105. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mintlify/README.md +5 -5
  106. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/miro/DESIGN.md +825 -825
  107. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/miro/README.md +5 -5
  108. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mistral.ai/DESIGN.md +773 -773
  109. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mistral.ai/README.md +5 -5
  110. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mongodb/DESIGN.md +767 -767
  111. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/mongodb/README.md +5 -5
  112. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nike/DESIGN.md +575 -575
  113. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nike/README.md +5 -5
  114. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nintendo-2001/DESIGN.md +649 -649
  115. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nintendo-2001/README.md +5 -5
  116. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/notion/DESIGN.md +821 -821
  117. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/notion/README.md +5 -5
  118. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nvidia/DESIGN.md +640 -640
  119. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/nvidia/README.md +5 -5
  120. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ollama/DESIGN.md +539 -539
  121. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/ollama/README.md +5 -5
  122. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/opencode.ai/DESIGN.md +521 -521
  123. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/opencode.ai/README.md +5 -5
  124. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/pinterest/DESIGN.md +597 -597
  125. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/pinterest/README.md +5 -5
  126. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/playstation/DESIGN.md +661 -661
  127. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/playstation/README.md +5 -5
  128. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/posthog/DESIGN.md +690 -690
  129. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/posthog/README.md +5 -5
  130. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/raycast/DESIGN.md +669 -669
  131. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/raycast/README.md +5 -5
  132. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/renault/DESIGN.md +589 -589
  133. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/renault/README.md +5 -5
  134. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/replicate/DESIGN.md +616 -616
  135. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/replicate/README.md +5 -5
  136. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/resend/DESIGN.md +585 -585
  137. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/resend/README.md +5 -5
  138. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/revolut/DESIGN.md +636 -636
  139. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/revolut/README.md +5 -5
  140. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/runwayml/DESIGN.md +244 -244
  141. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/runwayml/README.md +5 -5
  142. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sanity/DESIGN.md +357 -357
  143. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sanity/README.md +5 -5
  144. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sentry/DESIGN.md +551 -551
  145. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/sentry/README.md +5 -5
  146. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/shopify/DESIGN.md +516 -516
  147. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/shopify/README.md +5 -5
  148. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/slack/DESIGN.md +482 -482
  149. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spacex/DESIGN.md +363 -363
  150. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spacex/README.md +5 -5
  151. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spotify/DESIGN.md +246 -246
  152. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/spotify/README.md +5 -5
  153. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/starbucks/DESIGN.md +580 -580
  154. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/starbucks/README.md +5 -5
  155. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/stripe/DESIGN.md +487 -487
  156. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/stripe/README.md +5 -5
  157. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/supabase/DESIGN.md +462 -462
  158. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/supabase/README.md +5 -5
  159. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/superhuman/DESIGN.md +448 -448
  160. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/superhuman/README.md +5 -5
  161. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/tesla/DESIGN.md +286 -286
  162. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/tesla/README.md +5 -5
  163. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/theverge/DESIGN.md +339 -339
  164. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/theverge/README.md +5 -5
  165. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/together.ai/DESIGN.md +633 -633
  166. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/together.ai/README.md +5 -5
  167. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/uber/DESIGN.md +636 -636
  168. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/uber/README.md +5 -5
  169. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vercel/DESIGN.md +736 -736
  170. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vercel/README.md +5 -5
  171. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vodafone/DESIGN.md +538 -538
  172. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/vodafone/README.md +5 -5
  173. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/voltagent/DESIGN.md +521 -521
  174. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/voltagent/README.md +5 -5
  175. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/warp/DESIGN.md +526 -526
  176. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/warp/README.md +5 -5
  177. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/webflow/DESIGN.md +588 -588
  178. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/webflow/README.md +5 -5
  179. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wired/DESIGN.md +497 -497
  180. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wired/README.md +5 -5
  181. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wise/DESIGN.md +544 -544
  182. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/wise/README.md +5 -5
  183. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/x.ai/DESIGN.md +465 -465
  184. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/x.ai/README.md +5 -5
  185. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/zapier/DESIGN.md +537 -537
  186. package/skills/ai-delivery-orchestrate/assets/project-template/ref/ui/design-md/zapier/README.md +5 -5
  187. package/skills/ai-delivery-orchestrate/references/workflow-model.md +1 -1
  188. package/skills/ai-delivery-orchestrate-release/SKILL.md +10 -10
  189. package/skills/ai-delivery-orchestrate-release/agents/openai.yaml +4 -4
  190. package/skills/ai-delivery-orchestrate-release/assets/release-request.yaml +4 -1
  191. package/skills/ai-delivery-orchestrate-release/assets/version-selection.yaml +13 -1
  192. package/skills/ai-delivery-orchestrate-release/references/release-workflow-contract.md +14 -0
  193. package/skills/ai-delivery-plan-iteration/agents/openai.yaml +4 -4
  194. package/skills/ai-delivery-prepare-platform/agents/openai.yaml +4 -4
  195. package/skills/ai-delivery-prepare-release/SKILL.md +6 -5
  196. package/skills/ai-delivery-prepare-release/agents/openai.yaml +4 -4
  197. package/skills/ai-delivery-prepare-release/assets/release-template/release-manifest.yaml +23 -2
  198. package/skills/ai-delivery-prepare-release/references/release-contract.md +5 -1
  199. package/skills/ai-delivery-review-change/agents/openai.yaml +4 -4
  200. package/skills/ai-delivery-triage-failure/agents/openai.yaml +4 -4
  201. package/skills/ai-delivery-validate-artifacts/agents/openai.yaml +4 -4
  202. package/skills/ai-delivery-verify-candidate/agents/openai.yaml +3 -3
  203. package/skills/ai-delivery-verify-production/SKILL.md +7 -4
  204. package/skills/ai-delivery-verify-production/agents/openai.yaml +3 -3
  205. package/skills/ai-delivery-verify-production/assets/production-verification-template/production-verification.json +9 -0
  206. package/skills/ai-delivery-verify-production/assets/production-verification-template/production-verification.md +20 -0
  207. package/skills/ai-delivery-verify-production/references/production-verification-contract.md +19 -3
@@ -1,546 +1,546 @@
1
- ---
2
- version: alpha
3
- name: Intercom-design-analysis
4
- description: "An editorial customer-service marketing canvas built around a soft cream-white ground, charcoal type set in Saans (Intercom's proprietary geometric sans), and a single confident Fin Orange (#ff5600) reserved for the Fin AI brand. Cards live as floating white tiles with thin hairline borders and minimal radii (8–16px). Display headlines run Saans at weight 500 with measured negative tracking. The system reads as a careful, product-led publication: product screenshots dominate, ornament is rare, and the only place chromatic energy enters is the Fin Orange CTA."
5
-
6
- colors:
7
- primary: "#111111"
8
- on-primary: "#ffffff"
9
- ink: "#111111"
10
- ink-muted: "#626260"
11
- ink-subtle: "#7b7b78"
12
- ink-tertiary: "#9c9fa5"
13
- canvas: "#f5f1ec"
14
- surface-1: "#ffffff"
15
- surface-2: "#ebe7e1"
16
- inverse-canvas: "#000000"
17
- inverse-surface-1: "#313130"
18
- inverse-ink: "#ffffff"
19
- inverse-ink-muted: "#9c9fa5"
20
- hairline: "#d3cec6"
21
- hairline-soft: "#ebe7e1"
22
- fin-orange: "#ff5600"
23
- report-orange: "#fe4c02"
24
- report-blue: "#65b5ff"
25
- report-green: "#0bdf50"
26
- report-pink: "#ff2067"
27
- report-lime: "#b3e01c"
28
- report-cyan: "#03b2cb"
29
- brand-blue: "#0007cb"
30
- semantic-error: "#c41c1c"
31
- semantic-success: "#0bdf50"
32
-
33
- typography:
34
- display-xl:
35
- fontFamily: Saans
36
- fontSize: 72px
37
- fontWeight: 500
38
- lineHeight: 1.05
39
- letterSpacing: -2.0px
40
- display-lg:
41
- fontFamily: Saans
42
- fontSize: 56px
43
- fontWeight: 500
44
- lineHeight: 1.10
45
- letterSpacing: -1.4px
46
- display-md:
47
- fontFamily: Saans
48
- fontSize: 40px
49
- fontWeight: 500
50
- lineHeight: 1.15
51
- letterSpacing: -0.8px
52
- headline:
53
- fontFamily: Saans
54
- fontSize: 28px
55
- fontWeight: 500
56
- lineHeight: 1.20
57
- letterSpacing: -0.5px
58
- card-title:
59
- fontFamily: Saans
60
- fontSize: 22px
61
- fontWeight: 500
62
- lineHeight: 1.25
63
- letterSpacing: -0.3px
64
- subhead:
65
- fontFamily: Saans
66
- fontSize: 20px
67
- fontWeight: 400
68
- lineHeight: 1.40
69
- letterSpacing: -0.2px
70
- body-lg:
71
- fontFamily: Saans
72
- fontSize: 18px
73
- fontWeight: 400
74
- lineHeight: 1.50
75
- letterSpacing: -0.1px
76
- body:
77
- fontFamily: Saans
78
- fontSize: 16px
79
- fontWeight: 400
80
- lineHeight: 1.50
81
- letterSpacing: 0
82
- body-sm:
83
- fontFamily: Saans
84
- fontSize: 14px
85
- fontWeight: 400
86
- lineHeight: 1.50
87
- letterSpacing: 0
88
- caption:
89
- fontFamily: Saans
90
- fontSize: 12px
91
- fontWeight: 400
92
- lineHeight: 1.40
93
- letterSpacing: 0
94
- button:
95
- fontFamily: Saans
96
- fontSize: 15px
97
- fontWeight: 500
98
- lineHeight: 1.20
99
- letterSpacing: 0
100
- eyebrow:
101
- fontFamily: Saans
102
- fontSize: 14px
103
- fontWeight: 500
104
- lineHeight: 1.30
105
- letterSpacing: 0
106
- mono:
107
- fontFamily: SaansMono
108
- fontSize: 13px
109
- fontWeight: 400
110
- lineHeight: 1.50
111
- letterSpacing: 0
112
-
113
- rounded:
114
- xs: 4px
115
- sm: 6px
116
- md: 8px
117
- lg: 12px
118
- xl: 16px
119
- xxl: 24px
120
- pill: 9999px
121
- full: 9999px
122
-
123
- spacing:
124
- xxs: 4px
125
- xs: 8px
126
- sm: 12px
127
- md: 16px
128
- lg: 24px
129
- xl: 32px
130
- xxl: 48px
131
- section: 96px
132
-
133
- components:
134
- button-primary:
135
- backgroundColor: "{colors.ink}"
136
- textColor: "{colors.on-primary}"
137
- typography: "{typography.button}"
138
- rounded: "{rounded.md}"
139
- padding: 10px 18px
140
- button-primary-pressed:
141
- backgroundColor: "{colors.inverse-canvas}"
142
- textColor: "{colors.on-primary}"
143
- typography: "{typography.button}"
144
- rounded: "{rounded.md}"
145
- button-secondary:
146
- backgroundColor: "{colors.surface-1}"
147
- textColor: "{colors.ink}"
148
- typography: "{typography.button}"
149
- rounded: "{rounded.md}"
150
- padding: 10px 18px
151
- button-tertiary:
152
- backgroundColor: "{colors.canvas}"
153
- textColor: "{colors.ink}"
154
- typography: "{typography.button}"
155
- rounded: "{rounded.md}"
156
- padding: 10px 18px
157
- button-fin:
158
- backgroundColor: "{colors.fin-orange}"
159
- textColor: "{colors.on-primary}"
160
- typography: "{typography.button}"
161
- rounded: "{rounded.md}"
162
- padding: 10px 18px
163
- pricing-card:
164
- backgroundColor: "{colors.surface-1}"
165
- textColor: "{colors.ink}"
166
- typography: "{typography.body}"
167
- rounded: "{rounded.lg}"
168
- padding: 24px
169
- pricing-card-featured:
170
- backgroundColor: "{colors.ink}"
171
- textColor: "{colors.on-primary}"
172
- typography: "{typography.body}"
173
- rounded: "{rounded.lg}"
174
- padding: 24px
175
- feature-card:
176
- backgroundColor: "{colors.surface-1}"
177
- textColor: "{colors.ink}"
178
- typography: "{typography.body}"
179
- rounded: "{rounded.lg}"
180
- padding: 24px
181
- product-mockup-card:
182
- backgroundColor: "{colors.surface-1}"
183
- textColor: "{colors.ink}"
184
- typography: "{typography.body}"
185
- rounded: "{rounded.xl}"
186
- padding: 24px
187
- testimonial-card:
188
- backgroundColor: "{colors.surface-1}"
189
- textColor: "{colors.ink}"
190
- typography: "{typography.body-lg}"
191
- rounded: "{rounded.lg}"
192
- padding: 32px
193
- customer-logo-tile:
194
- backgroundColor: "{colors.canvas}"
195
- textColor: "{colors.ink-muted}"
196
- typography: "{typography.caption}"
197
- rounded: "{rounded.xs}"
198
- padding: 16px
199
- text-input:
200
- backgroundColor: "{colors.surface-1}"
201
- textColor: "{colors.ink}"
202
- typography: "{typography.body}"
203
- rounded: "{rounded.md}"
204
- padding: 10px 14px
205
- text-input-focused:
206
- backgroundColor: "{colors.surface-1}"
207
- textColor: "{colors.ink}"
208
- typography: "{typography.body}"
209
- rounded: "{rounded.md}"
210
- padding: 10px 14px
211
- pricing-tab-default:
212
- backgroundColor: "{colors.canvas}"
213
- textColor: "{colors.ink-muted}"
214
- typography: "{typography.button}"
215
- rounded: "{rounded.pill}"
216
- padding: 8px 16px
217
- pricing-tab-selected:
218
- backgroundColor: "{colors.surface-1}"
219
- textColor: "{colors.ink}"
220
- typography: "{typography.button}"
221
- rounded: "{rounded.pill}"
222
- padding: 8px 16px
223
- faq-row:
224
- backgroundColor: "{colors.canvas}"
225
- textColor: "{colors.ink}"
226
- typography: "{typography.body}"
227
- rounded: "{rounded.md}"
228
- padding: 24px
229
- cta-banner:
230
- backgroundColor: "{colors.surface-1}"
231
- textColor: "{colors.ink}"
232
- typography: "{typography.headline}"
233
- rounded: "{rounded.lg}"
234
- padding: 48px
235
- startup-discount-card:
236
- backgroundColor: "{colors.surface-2}"
237
- textColor: "{colors.ink}"
238
- typography: "{typography.body}"
239
- rounded: "{rounded.lg}"
240
- padding: 32px
241
- top-nav:
242
- backgroundColor: "{colors.canvas}"
243
- textColor: "{colors.ink}"
244
- typography: "{typography.body-sm}"
245
- rounded: "{rounded.xs}"
246
- height: 56px
247
- footer:
248
- backgroundColor: "{colors.canvas}"
249
- textColor: "{colors.ink-muted}"
250
- typography: "{typography.caption}"
251
- rounded: "{rounded.xs}"
252
- padding: 64px 32px
253
- ---
254
-
255
- ## Overview
256
-
257
- Intercom's marketing canvas is a soft cream-white ground (`{colors.canvas}` ≈ #f5f1ec) — not pure white. The warmth is the brand's signal: this is editorial, calm, and product-focused, not bright SaaS. On top of the cream canvas sit white floating cards (`{colors.surface-1}`), thin hairline dividers (`{colors.hairline}`), and charcoal type (`{colors.ink}` #111111).
258
-
259
- Display type is **Saans** — Intercom's proprietary geometric sans — set at weight 500 with measured negative letter-spacing (-2.0px on 72px display). Body type is the same family at weight 400. The single proprietary mono is **SaansMono**, used sparingly for code snippets and product UI screenshots embedded in the marketing surface.
260
-
261
- The single chromatic accent is **Fin Orange** (`{colors.fin-orange}` #ff5600) — Intercom's AI-product brand color. It surfaces on the Fin product CTA, the Fin badge in pricing, and a few inline emphasis moments. It is NOT a system primary; the system primary is charcoal `{colors.ink}`. Intercom also maintains a small **report palette** (`{colors.report-blue}`, `{colors.report-green}`, `{colors.report-pink}`, `{colors.report-lime}`) used inside in-product analytics surfaces shown in mockups.
262
-
263
- The page rhythm is heavy on **product mockups**: every section's payload is a high-fidelity screenshot of Intercom's product UI, framed in white cards with `{rounded.xl}` 16px corners. The marketing chrome is intentionally quiet so the product can be the protagonist.
264
-
265
- **Key Characteristics:**
266
- - **Cream canvas** (`{colors.canvas}` #f5f1ec) is the brand's defining surface — neither white nor gray, deliberately warm.
267
- - Product-screenshot-led page rhythm: every section centers a product mockup card, marketing chrome stays minimal.
268
- - **Saans** proprietary sans-serif carries the entire hierarchy; SaansMono for code-only contexts.
269
- - **Charcoal** `{colors.ink}` (#111111) is the system primary — buttons, headlines, body type all sit on charcoal.
270
- - **Fin Orange** (`{colors.fin-orange}` #ff5600) is the AI product color — used on the Fin CTA and Fin badge, never decoratively.
271
- - Display tracking pulls aggressively negative (-2.0px on 72px); body stays at 0.
272
- - Card corners stay modest at `{rounded.lg}` 12px and `{rounded.xl}` 16px — never pill-rounded; never square.
273
-
274
- ## Colors
275
-
276
- > Source pages: intercom.com (home), /pricing, /helpdesk, /customers, /helpdesk/inbox.
277
-
278
- ### Brand & Accent
279
- - **Charcoal** ({colors.ink}): The system primary surface. Headlines, body type, primary CTA pill background — all charcoal.
280
- - **White** ({colors.on-primary}): Text on charcoal CTAs; canvas of floating cards.
281
- - **Fin Orange** ({colors.fin-orange}): The AI-product accent. Used on the Fin CTA, Fin badge, and a small set of inline emphasis moments.
282
- - **Report Orange** ({colors.report-orange}): A slightly different orange used inside the report / analytics palette for in-product mockups.
283
- - **Brand Blue** ({colors.brand-blue}): Saturated brand blue (#0007cb) — used on a small set of marketing illustrations.
284
-
285
- ### Surface
286
- - **Canvas** ({colors.canvas}): Default page background — soft cream-white #f5f1ec.
287
- - **Surface 1** ({colors.surface-1}): Pure white — used for floating cards (pricing, feature, product-mockup).
288
- - **Surface 2** ({colors.surface-2}): Slightly darker cream — startup-discount banner, alt-row stripes.
289
- - **Hairline** ({colors.hairline}): 1px borders on cards — soft warm gray (#d3cec6).
290
- - **Hairline Soft** ({colors.hairline-soft}): Even softer dividers between FAQ rows and footer columns.
291
- - **Inverse Canvas** ({colors.inverse-canvas}): Pure black — only on the testimonial / quote callout strip.
292
- - **Inverse Surface 1** ({colors.inverse-surface-1}): One step lighter — hovered footer items in dark contexts.
293
-
294
- ### Text
295
- - **Ink** ({colors.ink}): All headlines, body type, button labels — charcoal #111111.
296
- - **Ink Muted** ({colors.ink-muted}): Secondary type at #626260 — meta info, deselected pricing tabs.
297
- - **Ink Subtle** ({colors.ink-subtle}): Tertiary type at #7b7b78 — footer columns, helper text.
298
- - **Ink Tertiary** ({colors.ink-tertiary}): Quaternary type at #9c9fa5 — disabled, footnotes.
299
- - **Inverse Ink** ({colors.inverse-ink}): White on black — quote-strip type.
300
- - **Inverse Ink Muted** ({colors.inverse-ink-muted}): Light gray on black — quote-strip meta.
301
-
302
- ### Semantic & Report Palette (in-product mockups)
303
- - **Error Red** ({colors.semantic-error}): Form validation, destructive states.
304
- - **Success Green** ({colors.semantic-success}): Positive states (also `{colors.report-green}`).
305
- - **Report Blue** ({colors.report-blue}): Analytics chart blue.
306
- - **Report Pink** ({colors.report-pink}): Analytics chart pink.
307
- - **Report Lime** ({colors.report-lime}): Analytics chart lime.
308
- - **Report Cyan** ({colors.report-cyan}): Phone country selector accent.
309
-
310
- The report palette appears INSIDE product UI mockups — these are Intercom's in-product chart colors, not marketing surface colors.
311
-
312
- ## Typography
313
-
314
- ### Font Family
315
-
316
- - **Saans** — Intercom's proprietary geometric sans, fallback `Saans Fallback, ui-sans-serif, system-ui`. Carries display, body, eyebrow, and button.
317
- - **SaansMono** — Proprietary mono, fallback `SaansMono Fallback, ui-monospace`. Used inside code snippets shown in product mockups.
318
-
319
- The same family carries the entire hierarchy. Hierarchy is carried by size + weight + tracking, not by family change.
320
-
321
- ### Hierarchy
322
-
323
- | Token | Size | Weight | Line Height | Letter Spacing | Use |
324
- |---|---|---|---|---|---|
325
- | `{typography.display-xl}` | 72px | 500 | 1.05 | -2.0px | Largest hero headline |
326
- | `{typography.display-lg}` | 56px | 500 | 1.10 | -1.4px | Section opener headlines |
327
- | `{typography.display-md}` | 40px | 500 | 1.15 | -0.8px | Sub-section headlines |
328
- | `{typography.headline}` | 28px | 500 | 1.20 | -0.5px | Pricing tier titles, CTA banner |
329
- | `{typography.card-title}` | 22px | 500 | 1.25 | -0.3px | Card title, feature card |
330
- | `{typography.subhead}` | 20px | 400 | 1.40 | -0.2px | Lead body, intro paragraphs |
331
- | `{typography.body-lg}` | 18px | 400 | 1.50 | -0.1px | Hero subhead, lead paragraphs |
332
- | `{typography.body}` | 16px | 400 | 1.50 | 0 | Default body |
333
- | `{typography.body-sm}` | 14px | 400 | 1.50 | 0 | Card body, footer |
334
- | `{typography.caption}` | 12px | 400 | 1.40 | 0 | Captions, meta |
335
- | `{typography.button}` | 15px | 500 | 1.20 | 0 | Pill / square button labels |
336
- | `{typography.eyebrow}` | 14px | 500 | 1.30 | 0 | Section eyebrow (sentence case) |
337
- | `{typography.mono}` | 13px | 400 | 1.50 | 0 | SaansMono for code in mockups |
338
-
339
- ### Principles
340
-
341
- - **Weight 500 carries display.** Saans at 500 reads as confident without bold.
342
- - **Negative letter-spacing scales with size.** -2.0px at 72px (≈3% of size), down to 0 on body.
343
- - **Line-heights tighten on display, relax on body.** 1.05 at display-xl, 1.50 at body.
344
- - **No mono on chrome.** SaansMono lives in product UI; marketing chrome stays in Saans.
345
- - **Eyebrow uses sentence case** at 14px / 500 weight — no all-caps tracking.
346
-
347
- ### Note on Font Substitutes
348
-
349
- If implementing without Saans, suitable substitutes include **Söhne** (paid), **Inter** (free, weight 500), or **Geist Sans** (free). Inter at weight 500 is the closest free substitute; SaansMono can be approximated with **JetBrains Mono** at weight 400.
350
-
351
- ## Layout
352
-
353
- ### Spacing System
354
-
355
- - **Base unit**: 8px.
356
- - **Tokens (front matter)**: `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 24px · `{spacing.xl}` 32px · `{spacing.xxl}` 48px · `{spacing.section}` 96px.
357
- - Card interior padding: `{spacing.lg}` 24px on pricing/feature cards; `{spacing.xl}` 32px on testimonial/discount cards; `{spacing.xxl}` 48px on CTA banners.
358
- - Pill button padding: 10px vertical · 18px horizontal.
359
-
360
- ### Grid & Container
361
-
362
- - Max content width sits around 1280px.
363
- - Card grids are 3-up at desktop, 2-up at tablet, 1-up at mobile.
364
- - Pricing tier grid is 3-up; comparison strip below shows checkmarks per tier.
365
- - Product mockup cards span full content width — they're the protagonist of every section.
366
-
367
- ### Whitespace Philosophy
368
-
369
- The cream canvas does the work white space would in another brand. Sections separate by ample vertical breathing room (`{spacing.section}` 96px) plus the lift-onto-white cards.
370
-
371
- ## Elevation & Depth
372
-
373
- | Level | Treatment | Use |
374
- |---|---|---|
375
- | 0 (flat) | No shadow, no border | Default for body type, hero text, footer |
376
- | 1 (lift on cream) | `{colors.surface-1}` white background on `{colors.canvas}` cream | Pricing cards, feature cards, product mockups |
377
- | 2 (hairline lift) | `{colors.surface-1}` + 1px `{colors.hairline}` border | Floating tiles with extra definition |
378
- | 3 (deep accent) | `{colors.inverse-canvas}` true black | Quote / testimonial callout strip |
379
-
380
- Intercom resists drop shadows. Depth is communicated by the white-on-cream surface change.
381
-
382
- ### Decorative Depth
383
-
384
- - **Product UI mockups** dominate every section's right column or center band — these are screenshots, not illustrations.
385
- - **No atmospheric gradients, no spotlight cards, no pastel section blocks.** The cream + white system is deliberately restrained.
386
-
387
- ## Shapes
388
-
389
- ### Border Radius Scale
390
-
391
- | Token | Value | Use |
392
- |---|---|---|
393
- | `{rounded.xs}` | 4px | Small chips, badges |
394
- | `{rounded.sm}` | 6px | Inline tags |
395
- | `{rounded.md}` | 8px | All buttons, form inputs |
396
- | `{rounded.lg}` | 12px | Pricing cards, feature cards, FAQ rows |
397
- | `{rounded.xl}` | 16px | Product mockup cards |
398
- | `{rounded.xxl}` | 24px | Oversized CTA banners |
399
- | `{rounded.pill}` | 9999px | Tab toggles |
400
- | `{rounded.full}` | 9999px | Avatar circles |
401
-
402
- ### Photography & Illustration Geometry
403
-
404
- - Product UI screenshots dominate the marketing surface; they sit in `{rounded.xl}` 16px tiles.
405
- - Customer logo tiles render at small sizes (~24–32px logo height) on `{colors.canvas}` cream with no border.
406
- - Avatar circles in testimonial cards use `{rounded.full}` at 40–48px sizes.
407
-
408
- ## Components
409
-
410
- ### Buttons
411
-
412
- **`button-primary`** — Charcoal CTA. The default primary CTA across all pages.
413
- - Background `{colors.ink}`, text `{colors.on-primary}`, type `{typography.button}`, padding 10px 18px, rounded `{rounded.md}`.
414
- - Pressed state lives in `button-primary-pressed`.
415
-
416
- **`button-secondary`** — White button on cream. Used for secondary CTAs.
417
- - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.button}`, padding 10px 18px, rounded `{rounded.md}`. 1px `{colors.hairline}` border.
418
-
419
- **`button-tertiary`** — Plain text button.
420
- - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
421
-
422
- **`button-fin`** — Fin Orange CTA — reserved for Fin AI product CTAs.
423
- - Background `{colors.fin-orange}`, text `{colors.on-primary}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
424
-
425
- ### Pricing Tabs
426
-
427
- **`pricing-tab-default`** + **`pricing-tab-selected`** — Pill-toggle on `/pricing`.
428
- - Default: `{colors.canvas}` background, `{colors.ink-muted}` text, rounded `{rounded.pill}`.
429
- - Selected: `{colors.surface-1}` white background, `{colors.ink}` text — selected = lift onto white.
430
-
431
- ### Cards & Containers
432
-
433
- **`pricing-card`** — Each tier on `/pricing`.
434
- - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.
435
-
436
- **`pricing-card-featured`** — Featured / recommended tier — inverts to charcoal.
437
- - Background `{colors.ink}`, text `{colors.on-primary}`, otherwise identical structure.
438
-
439
- **`feature-card`** — Generic feature highlight.
440
- - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.
441
-
442
- **`product-mockup-card`** — The dominant card type — frames a high-fidelity product UI screenshot.
443
- - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.xl}`, padding 24px.
444
-
445
- **`testimonial-card`** — Customer quote with avatar + name + company.
446
- - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body-lg}`, rounded `{rounded.lg}`, padding 32px.
447
-
448
- **`startup-discount-card`** — The "Startups get 90% off" tinted card.
449
- - Background `{colors.surface-2}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 32px.
450
-
451
- **`customer-logo-tile`** — Small tile in the customer marquee.
452
- - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.caption}`, rounded `{rounded.xs}`, padding 16px.
453
-
454
- **`cta-banner`** — Closing CTA panel near page bottom.
455
- - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.headline}`, rounded `{rounded.lg}`, padding 48px.
456
-
457
- ### Inputs & Forms
458
-
459
- **`text-input`** + **`text-input-focused`** — Form fields on contact and search overlays.
460
- - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 10px 14px.
461
-
462
- ### FAQ
463
-
464
- **`faq-row`** — Expandable accordion row in the pricing FAQ.
465
- - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 24px. 1px `{colors.hairline-soft}` bottom rule.
466
-
467
- ### Navigation
468
-
469
- **`top-nav`** — Sticky cream bar with the Intercom wordmark left, nav links centered, log-in + sign-up pair right.
470
- - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-sm}`, height 56px.
471
-
472
- ### Footer
473
-
474
- **`footer`** — Dense link grid on `{colors.canvas}` cream with the Intercom wordmark left.
475
- - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.caption}`, padding 64px 32px.
476
-
477
- ## Do's and Don'ts
478
-
479
- ### Do
480
-
481
- - Reserve `{colors.canvas}` cream as the system's anchor surface — never replace with pure white.
482
- - Lift cards from cream onto white (`{colors.surface-1}`) for hierarchy.
483
- - Use **`button-fin`** Fin Orange ONLY on Fin AI product CTAs and Fin badges.
484
- - Pair Saans display at weight 500 with body at 400.
485
- - Use product UI screenshots as the protagonist of every section.
486
- - Use `{rounded.lg}` 12px for cards and `{rounded.xl}` 16px for product mockup tiles.
487
- - Apply negative tracking proportionally to display sizes.
488
-
489
- ### Don't
490
-
491
- - Don't use pure white as the canvas.
492
- - Don't use Fin Orange as a section background or as a generic primary CTA.
493
- - Don't add drop shadows to floating cards.
494
- - Don't introduce a second display family.
495
- - Don't pill-round CTAs.
496
- - Don't write all-caps tracked eyebrows.
497
- - Don't promote the report palette colors to brand-level surfaces.
498
- - Don't combine charcoal CTAs and Fin Orange CTAs in the same viewport.
499
-
500
- ## Responsive Behavior
501
-
502
- ### Breakpoints
503
-
504
- | Name | Width | Key Changes |
505
- |---|---|---|
506
- | Desktop-XL | 1440px | Default desktop layout |
507
- | Desktop | 1280px | Card grid 3-up maintained |
508
- | Tablet | 1024px | Card grid 3-up → 2-up |
509
- | Mobile-Lg | 768px | Pricing comparison becomes accordion; nav hamburger |
510
- | Mobile | 480px | Single-column; display-xl scales 72px → ~32px |
511
-
512
- ### Touch Targets
513
-
514
- - CTAs hold ≥40px tap height across viewports.
515
- - Pricing tab pills hold ≥40px tap height.
516
- - Form inputs hold ≥44px tap target on touch.
517
-
518
- ### Collapsing Strategy
519
-
520
- - **Top nav**: links collapse to hamburger below 768px; primary CTA stays visible.
521
- - **Card grids**: 3-up → 2-up at 1024px → 1-up below 768px.
522
- - **Pricing comparison**: collapses into per-tier accordion below 768px.
523
- - **Display type**: `{typography.display-xl}` 72px scales toward `{typography.display-md}` 40px on mobile.
524
-
525
- ### Image Behavior
526
-
527
- - Product UI screenshots maintain aspect ratio and never crop.
528
- - Customer logos in the marquee may collapse from 6-up to 3-up below 768px.
529
-
530
- ## Iteration Guide
531
-
532
- 1. Focus on ONE component at a time and reference it by its `components:` token name.
533
- 2. When introducing a section, decide first whether it sits on `{colors.canvas}` cream (default) or whether it lifts onto a `{colors.surface-1}` white card.
534
- 3. Default body to `{typography.body}` at weight 400.
535
- 4. Run `npx @google/design.md lint DESIGN.md` after edits.
536
- 5. Add new variants as separate component entries.
537
- 6. Treat Fin Orange as a product accent: Fin CTA and Fin badge only.
538
- 7. Lead every section with a product screenshot.
539
-
540
- ## Known Gaps
541
-
542
- - The **report palette** lives in product analytics dashboards rendered inside marketing mockups; they are documented for completeness but are not brand surface colors.
543
- - Form-field error and validation styling is not visible on the inspected pages.
544
- - Dark mode is not documented because the marketing site does not ship a dark theme.
545
- - The helpdesk / inbox product surfaces show in-product UI states that aren't formal marketing chrome.
546
- - Saans and SaansMono are proprietary; an open-source substitute (Inter, Söhne, Geist) is acceptable.
1
+ ---
2
+ version: alpha
3
+ name: Intercom-design-analysis
4
+ description: "An editorial customer-service marketing canvas built around a soft cream-white ground, charcoal type set in Saans (Intercom's proprietary geometric sans), and a single confident Fin Orange (#ff5600) reserved for the Fin AI brand. Cards live as floating white tiles with thin hairline borders and minimal radii (8–16px). Display headlines run Saans at weight 500 with measured negative tracking. The system reads as a careful, product-led publication: product screenshots dominate, ornament is rare, and the only place chromatic energy enters is the Fin Orange CTA."
5
+
6
+ colors:
7
+ primary: "#111111"
8
+ on-primary: "#ffffff"
9
+ ink: "#111111"
10
+ ink-muted: "#626260"
11
+ ink-subtle: "#7b7b78"
12
+ ink-tertiary: "#9c9fa5"
13
+ canvas: "#f5f1ec"
14
+ surface-1: "#ffffff"
15
+ surface-2: "#ebe7e1"
16
+ inverse-canvas: "#000000"
17
+ inverse-surface-1: "#313130"
18
+ inverse-ink: "#ffffff"
19
+ inverse-ink-muted: "#9c9fa5"
20
+ hairline: "#d3cec6"
21
+ hairline-soft: "#ebe7e1"
22
+ fin-orange: "#ff5600"
23
+ report-orange: "#fe4c02"
24
+ report-blue: "#65b5ff"
25
+ report-green: "#0bdf50"
26
+ report-pink: "#ff2067"
27
+ report-lime: "#b3e01c"
28
+ report-cyan: "#03b2cb"
29
+ brand-blue: "#0007cb"
30
+ semantic-error: "#c41c1c"
31
+ semantic-success: "#0bdf50"
32
+
33
+ typography:
34
+ display-xl:
35
+ fontFamily: Saans
36
+ fontSize: 72px
37
+ fontWeight: 500
38
+ lineHeight: 1.05
39
+ letterSpacing: -2.0px
40
+ display-lg:
41
+ fontFamily: Saans
42
+ fontSize: 56px
43
+ fontWeight: 500
44
+ lineHeight: 1.10
45
+ letterSpacing: -1.4px
46
+ display-md:
47
+ fontFamily: Saans
48
+ fontSize: 40px
49
+ fontWeight: 500
50
+ lineHeight: 1.15
51
+ letterSpacing: -0.8px
52
+ headline:
53
+ fontFamily: Saans
54
+ fontSize: 28px
55
+ fontWeight: 500
56
+ lineHeight: 1.20
57
+ letterSpacing: -0.5px
58
+ card-title:
59
+ fontFamily: Saans
60
+ fontSize: 22px
61
+ fontWeight: 500
62
+ lineHeight: 1.25
63
+ letterSpacing: -0.3px
64
+ subhead:
65
+ fontFamily: Saans
66
+ fontSize: 20px
67
+ fontWeight: 400
68
+ lineHeight: 1.40
69
+ letterSpacing: -0.2px
70
+ body-lg:
71
+ fontFamily: Saans
72
+ fontSize: 18px
73
+ fontWeight: 400
74
+ lineHeight: 1.50
75
+ letterSpacing: -0.1px
76
+ body:
77
+ fontFamily: Saans
78
+ fontSize: 16px
79
+ fontWeight: 400
80
+ lineHeight: 1.50
81
+ letterSpacing: 0
82
+ body-sm:
83
+ fontFamily: Saans
84
+ fontSize: 14px
85
+ fontWeight: 400
86
+ lineHeight: 1.50
87
+ letterSpacing: 0
88
+ caption:
89
+ fontFamily: Saans
90
+ fontSize: 12px
91
+ fontWeight: 400
92
+ lineHeight: 1.40
93
+ letterSpacing: 0
94
+ button:
95
+ fontFamily: Saans
96
+ fontSize: 15px
97
+ fontWeight: 500
98
+ lineHeight: 1.20
99
+ letterSpacing: 0
100
+ eyebrow:
101
+ fontFamily: Saans
102
+ fontSize: 14px
103
+ fontWeight: 500
104
+ lineHeight: 1.30
105
+ letterSpacing: 0
106
+ mono:
107
+ fontFamily: SaansMono
108
+ fontSize: 13px
109
+ fontWeight: 400
110
+ lineHeight: 1.50
111
+ letterSpacing: 0
112
+
113
+ rounded:
114
+ xs: 4px
115
+ sm: 6px
116
+ md: 8px
117
+ lg: 12px
118
+ xl: 16px
119
+ xxl: 24px
120
+ pill: 9999px
121
+ full: 9999px
122
+
123
+ spacing:
124
+ xxs: 4px
125
+ xs: 8px
126
+ sm: 12px
127
+ md: 16px
128
+ lg: 24px
129
+ xl: 32px
130
+ xxl: 48px
131
+ section: 96px
132
+
133
+ components:
134
+ button-primary:
135
+ backgroundColor: "{colors.ink}"
136
+ textColor: "{colors.on-primary}"
137
+ typography: "{typography.button}"
138
+ rounded: "{rounded.md}"
139
+ padding: 10px 18px
140
+ button-primary-pressed:
141
+ backgroundColor: "{colors.inverse-canvas}"
142
+ textColor: "{colors.on-primary}"
143
+ typography: "{typography.button}"
144
+ rounded: "{rounded.md}"
145
+ button-secondary:
146
+ backgroundColor: "{colors.surface-1}"
147
+ textColor: "{colors.ink}"
148
+ typography: "{typography.button}"
149
+ rounded: "{rounded.md}"
150
+ padding: 10px 18px
151
+ button-tertiary:
152
+ backgroundColor: "{colors.canvas}"
153
+ textColor: "{colors.ink}"
154
+ typography: "{typography.button}"
155
+ rounded: "{rounded.md}"
156
+ padding: 10px 18px
157
+ button-fin:
158
+ backgroundColor: "{colors.fin-orange}"
159
+ textColor: "{colors.on-primary}"
160
+ typography: "{typography.button}"
161
+ rounded: "{rounded.md}"
162
+ padding: 10px 18px
163
+ pricing-card:
164
+ backgroundColor: "{colors.surface-1}"
165
+ textColor: "{colors.ink}"
166
+ typography: "{typography.body}"
167
+ rounded: "{rounded.lg}"
168
+ padding: 24px
169
+ pricing-card-featured:
170
+ backgroundColor: "{colors.ink}"
171
+ textColor: "{colors.on-primary}"
172
+ typography: "{typography.body}"
173
+ rounded: "{rounded.lg}"
174
+ padding: 24px
175
+ feature-card:
176
+ backgroundColor: "{colors.surface-1}"
177
+ textColor: "{colors.ink}"
178
+ typography: "{typography.body}"
179
+ rounded: "{rounded.lg}"
180
+ padding: 24px
181
+ product-mockup-card:
182
+ backgroundColor: "{colors.surface-1}"
183
+ textColor: "{colors.ink}"
184
+ typography: "{typography.body}"
185
+ rounded: "{rounded.xl}"
186
+ padding: 24px
187
+ testimonial-card:
188
+ backgroundColor: "{colors.surface-1}"
189
+ textColor: "{colors.ink}"
190
+ typography: "{typography.body-lg}"
191
+ rounded: "{rounded.lg}"
192
+ padding: 32px
193
+ customer-logo-tile:
194
+ backgroundColor: "{colors.canvas}"
195
+ textColor: "{colors.ink-muted}"
196
+ typography: "{typography.caption}"
197
+ rounded: "{rounded.xs}"
198
+ padding: 16px
199
+ text-input:
200
+ backgroundColor: "{colors.surface-1}"
201
+ textColor: "{colors.ink}"
202
+ typography: "{typography.body}"
203
+ rounded: "{rounded.md}"
204
+ padding: 10px 14px
205
+ text-input-focused:
206
+ backgroundColor: "{colors.surface-1}"
207
+ textColor: "{colors.ink}"
208
+ typography: "{typography.body}"
209
+ rounded: "{rounded.md}"
210
+ padding: 10px 14px
211
+ pricing-tab-default:
212
+ backgroundColor: "{colors.canvas}"
213
+ textColor: "{colors.ink-muted}"
214
+ typography: "{typography.button}"
215
+ rounded: "{rounded.pill}"
216
+ padding: 8px 16px
217
+ pricing-tab-selected:
218
+ backgroundColor: "{colors.surface-1}"
219
+ textColor: "{colors.ink}"
220
+ typography: "{typography.button}"
221
+ rounded: "{rounded.pill}"
222
+ padding: 8px 16px
223
+ faq-row:
224
+ backgroundColor: "{colors.canvas}"
225
+ textColor: "{colors.ink}"
226
+ typography: "{typography.body}"
227
+ rounded: "{rounded.md}"
228
+ padding: 24px
229
+ cta-banner:
230
+ backgroundColor: "{colors.surface-1}"
231
+ textColor: "{colors.ink}"
232
+ typography: "{typography.headline}"
233
+ rounded: "{rounded.lg}"
234
+ padding: 48px
235
+ startup-discount-card:
236
+ backgroundColor: "{colors.surface-2}"
237
+ textColor: "{colors.ink}"
238
+ typography: "{typography.body}"
239
+ rounded: "{rounded.lg}"
240
+ padding: 32px
241
+ top-nav:
242
+ backgroundColor: "{colors.canvas}"
243
+ textColor: "{colors.ink}"
244
+ typography: "{typography.body-sm}"
245
+ rounded: "{rounded.xs}"
246
+ height: 56px
247
+ footer:
248
+ backgroundColor: "{colors.canvas}"
249
+ textColor: "{colors.ink-muted}"
250
+ typography: "{typography.caption}"
251
+ rounded: "{rounded.xs}"
252
+ padding: 64px 32px
253
+ ---
254
+
255
+ ## Overview
256
+
257
+ Intercom's marketing canvas is a soft cream-white ground (`{colors.canvas}` ≈ #f5f1ec) — not pure white. The warmth is the brand's signal: this is editorial, calm, and product-focused, not bright SaaS. On top of the cream canvas sit white floating cards (`{colors.surface-1}`), thin hairline dividers (`{colors.hairline}`), and charcoal type (`{colors.ink}` #111111).
258
+
259
+ Display type is **Saans** — Intercom's proprietary geometric sans — set at weight 500 with measured negative letter-spacing (-2.0px on 72px display). Body type is the same family at weight 400. The single proprietary mono is **SaansMono**, used sparingly for code snippets and product UI screenshots embedded in the marketing surface.
260
+
261
+ The single chromatic accent is **Fin Orange** (`{colors.fin-orange}` #ff5600) — Intercom's AI-product brand color. It surfaces on the Fin product CTA, the Fin badge in pricing, and a few inline emphasis moments. It is NOT a system primary; the system primary is charcoal `{colors.ink}`. Intercom also maintains a small **report palette** (`{colors.report-blue}`, `{colors.report-green}`, `{colors.report-pink}`, `{colors.report-lime}`) used inside in-product analytics surfaces shown in mockups.
262
+
263
+ The page rhythm is heavy on **product mockups**: every section's payload is a high-fidelity screenshot of Intercom's product UI, framed in white cards with `{rounded.xl}` 16px corners. The marketing chrome is intentionally quiet so the product can be the protagonist.
264
+
265
+ **Key Characteristics:**
266
+ - **Cream canvas** (`{colors.canvas}` #f5f1ec) is the brand's defining surface — neither white nor gray, deliberately warm.
267
+ - Product-screenshot-led page rhythm: every section centers a product mockup card, marketing chrome stays minimal.
268
+ - **Saans** proprietary sans-serif carries the entire hierarchy; SaansMono for code-only contexts.
269
+ - **Charcoal** `{colors.ink}` (#111111) is the system primary — buttons, headlines, body type all sit on charcoal.
270
+ - **Fin Orange** (`{colors.fin-orange}` #ff5600) is the AI product color — used on the Fin CTA and Fin badge, never decoratively.
271
+ - Display tracking pulls aggressively negative (-2.0px on 72px); body stays at 0.
272
+ - Card corners stay modest at `{rounded.lg}` 12px and `{rounded.xl}` 16px — never pill-rounded; never square.
273
+
274
+ ## Colors
275
+
276
+ > Source pages: intercom.com (home), /pricing, /helpdesk, /customers, /helpdesk/inbox.
277
+
278
+ ### Brand & Accent
279
+ - **Charcoal** ({colors.ink}): The system primary surface. Headlines, body type, primary CTA pill background — all charcoal.
280
+ - **White** ({colors.on-primary}): Text on charcoal CTAs; canvas of floating cards.
281
+ - **Fin Orange** ({colors.fin-orange}): The AI-product accent. Used on the Fin CTA, Fin badge, and a small set of inline emphasis moments.
282
+ - **Report Orange** ({colors.report-orange}): A slightly different orange used inside the report / analytics palette for in-product mockups.
283
+ - **Brand Blue** ({colors.brand-blue}): Saturated brand blue (#0007cb) — used on a small set of marketing illustrations.
284
+
285
+ ### Surface
286
+ - **Canvas** ({colors.canvas}): Default page background — soft cream-white #f5f1ec.
287
+ - **Surface 1** ({colors.surface-1}): Pure white — used for floating cards (pricing, feature, product-mockup).
288
+ - **Surface 2** ({colors.surface-2}): Slightly darker cream — startup-discount banner, alt-row stripes.
289
+ - **Hairline** ({colors.hairline}): 1px borders on cards — soft warm gray (#d3cec6).
290
+ - **Hairline Soft** ({colors.hairline-soft}): Even softer dividers between FAQ rows and footer columns.
291
+ - **Inverse Canvas** ({colors.inverse-canvas}): Pure black — only on the testimonial / quote callout strip.
292
+ - **Inverse Surface 1** ({colors.inverse-surface-1}): One step lighter — hovered footer items in dark contexts.
293
+
294
+ ### Text
295
+ - **Ink** ({colors.ink}): All headlines, body type, button labels — charcoal #111111.
296
+ - **Ink Muted** ({colors.ink-muted}): Secondary type at #626260 — meta info, deselected pricing tabs.
297
+ - **Ink Subtle** ({colors.ink-subtle}): Tertiary type at #7b7b78 — footer columns, helper text.
298
+ - **Ink Tertiary** ({colors.ink-tertiary}): Quaternary type at #9c9fa5 — disabled, footnotes.
299
+ - **Inverse Ink** ({colors.inverse-ink}): White on black — quote-strip type.
300
+ - **Inverse Ink Muted** ({colors.inverse-ink-muted}): Light gray on black — quote-strip meta.
301
+
302
+ ### Semantic & Report Palette (in-product mockups)
303
+ - **Error Red** ({colors.semantic-error}): Form validation, destructive states.
304
+ - **Success Green** ({colors.semantic-success}): Positive states (also `{colors.report-green}`).
305
+ - **Report Blue** ({colors.report-blue}): Analytics chart blue.
306
+ - **Report Pink** ({colors.report-pink}): Analytics chart pink.
307
+ - **Report Lime** ({colors.report-lime}): Analytics chart lime.
308
+ - **Report Cyan** ({colors.report-cyan}): Phone country selector accent.
309
+
310
+ The report palette appears INSIDE product UI mockups — these are Intercom's in-product chart colors, not marketing surface colors.
311
+
312
+ ## Typography
313
+
314
+ ### Font Family
315
+
316
+ - **Saans** — Intercom's proprietary geometric sans, fallback `Saans Fallback, ui-sans-serif, system-ui`. Carries display, body, eyebrow, and button.
317
+ - **SaansMono** — Proprietary mono, fallback `SaansMono Fallback, ui-monospace`. Used inside code snippets shown in product mockups.
318
+
319
+ The same family carries the entire hierarchy. Hierarchy is carried by size + weight + tracking, not by family change.
320
+
321
+ ### Hierarchy
322
+
323
+ | Token | Size | Weight | Line Height | Letter Spacing | Use |
324
+ |---|---|---|---|---|---|
325
+ | `{typography.display-xl}` | 72px | 500 | 1.05 | -2.0px | Largest hero headline |
326
+ | `{typography.display-lg}` | 56px | 500 | 1.10 | -1.4px | Section opener headlines |
327
+ | `{typography.display-md}` | 40px | 500 | 1.15 | -0.8px | Sub-section headlines |
328
+ | `{typography.headline}` | 28px | 500 | 1.20 | -0.5px | Pricing tier titles, CTA banner |
329
+ | `{typography.card-title}` | 22px | 500 | 1.25 | -0.3px | Card title, feature card |
330
+ | `{typography.subhead}` | 20px | 400 | 1.40 | -0.2px | Lead body, intro paragraphs |
331
+ | `{typography.body-lg}` | 18px | 400 | 1.50 | -0.1px | Hero subhead, lead paragraphs |
332
+ | `{typography.body}` | 16px | 400 | 1.50 | 0 | Default body |
333
+ | `{typography.body-sm}` | 14px | 400 | 1.50 | 0 | Card body, footer |
334
+ | `{typography.caption}` | 12px | 400 | 1.40 | 0 | Captions, meta |
335
+ | `{typography.button}` | 15px | 500 | 1.20 | 0 | Pill / square button labels |
336
+ | `{typography.eyebrow}` | 14px | 500 | 1.30 | 0 | Section eyebrow (sentence case) |
337
+ | `{typography.mono}` | 13px | 400 | 1.50 | 0 | SaansMono for code in mockups |
338
+
339
+ ### Principles
340
+
341
+ - **Weight 500 carries display.** Saans at 500 reads as confident without bold.
342
+ - **Negative letter-spacing scales with size.** -2.0px at 72px (≈3% of size), down to 0 on body.
343
+ - **Line-heights tighten on display, relax on body.** 1.05 at display-xl, 1.50 at body.
344
+ - **No mono on chrome.** SaansMono lives in product UI; marketing chrome stays in Saans.
345
+ - **Eyebrow uses sentence case** at 14px / 500 weight — no all-caps tracking.
346
+
347
+ ### Note on Font Substitutes
348
+
349
+ If implementing without Saans, suitable substitutes include **Söhne** (paid), **Inter** (free, weight 500), or **Geist Sans** (free). Inter at weight 500 is the closest free substitute; SaansMono can be approximated with **JetBrains Mono** at weight 400.
350
+
351
+ ## Layout
352
+
353
+ ### Spacing System
354
+
355
+ - **Base unit**: 8px.
356
+ - **Tokens (front matter)**: `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 24px · `{spacing.xl}` 32px · `{spacing.xxl}` 48px · `{spacing.section}` 96px.
357
+ - Card interior padding: `{spacing.lg}` 24px on pricing/feature cards; `{spacing.xl}` 32px on testimonial/discount cards; `{spacing.xxl}` 48px on CTA banners.
358
+ - Pill button padding: 10px vertical · 18px horizontal.
359
+
360
+ ### Grid & Container
361
+
362
+ - Max content width sits around 1280px.
363
+ - Card grids are 3-up at desktop, 2-up at tablet, 1-up at mobile.
364
+ - Pricing tier grid is 3-up; comparison strip below shows checkmarks per tier.
365
+ - Product mockup cards span full content width — they're the protagonist of every section.
366
+
367
+ ### Whitespace Philosophy
368
+
369
+ The cream canvas does the work white space would in another brand. Sections separate by ample vertical breathing room (`{spacing.section}` 96px) plus the lift-onto-white cards.
370
+
371
+ ## Elevation & Depth
372
+
373
+ | Level | Treatment | Use |
374
+ |---|---|---|
375
+ | 0 (flat) | No shadow, no border | Default for body type, hero text, footer |
376
+ | 1 (lift on cream) | `{colors.surface-1}` white background on `{colors.canvas}` cream | Pricing cards, feature cards, product mockups |
377
+ | 2 (hairline lift) | `{colors.surface-1}` + 1px `{colors.hairline}` border | Floating tiles with extra definition |
378
+ | 3 (deep accent) | `{colors.inverse-canvas}` true black | Quote / testimonial callout strip |
379
+
380
+ Intercom resists drop shadows. Depth is communicated by the white-on-cream surface change.
381
+
382
+ ### Decorative Depth
383
+
384
+ - **Product UI mockups** dominate every section's right column or center band — these are screenshots, not illustrations.
385
+ - **No atmospheric gradients, no spotlight cards, no pastel section blocks.** The cream + white system is deliberately restrained.
386
+
387
+ ## Shapes
388
+
389
+ ### Border Radius Scale
390
+
391
+ | Token | Value | Use |
392
+ |---|---|---|
393
+ | `{rounded.xs}` | 4px | Small chips, badges |
394
+ | `{rounded.sm}` | 6px | Inline tags |
395
+ | `{rounded.md}` | 8px | All buttons, form inputs |
396
+ | `{rounded.lg}` | 12px | Pricing cards, feature cards, FAQ rows |
397
+ | `{rounded.xl}` | 16px | Product mockup cards |
398
+ | `{rounded.xxl}` | 24px | Oversized CTA banners |
399
+ | `{rounded.pill}` | 9999px | Tab toggles |
400
+ | `{rounded.full}` | 9999px | Avatar circles |
401
+
402
+ ### Photography & Illustration Geometry
403
+
404
+ - Product UI screenshots dominate the marketing surface; they sit in `{rounded.xl}` 16px tiles.
405
+ - Customer logo tiles render at small sizes (~24–32px logo height) on `{colors.canvas}` cream with no border.
406
+ - Avatar circles in testimonial cards use `{rounded.full}` at 40–48px sizes.
407
+
408
+ ## Components
409
+
410
+ ### Buttons
411
+
412
+ **`button-primary`** — Charcoal CTA. The default primary CTA across all pages.
413
+ - Background `{colors.ink}`, text `{colors.on-primary}`, type `{typography.button}`, padding 10px 18px, rounded `{rounded.md}`.
414
+ - Pressed state lives in `button-primary-pressed`.
415
+
416
+ **`button-secondary`** — White button on cream. Used for secondary CTAs.
417
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.button}`, padding 10px 18px, rounded `{rounded.md}`. 1px `{colors.hairline}` border.
418
+
419
+ **`button-tertiary`** — Plain text button.
420
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
421
+
422
+ **`button-fin`** — Fin Orange CTA — reserved for Fin AI product CTAs.
423
+ - Background `{colors.fin-orange}`, text `{colors.on-primary}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
424
+
425
+ ### Pricing Tabs
426
+
427
+ **`pricing-tab-default`** + **`pricing-tab-selected`** — Pill-toggle on `/pricing`.
428
+ - Default: `{colors.canvas}` background, `{colors.ink-muted}` text, rounded `{rounded.pill}`.
429
+ - Selected: `{colors.surface-1}` white background, `{colors.ink}` text — selected = lift onto white.
430
+
431
+ ### Cards & Containers
432
+
433
+ **`pricing-card`** — Each tier on `/pricing`.
434
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.
435
+
436
+ **`pricing-card-featured`** — Featured / recommended tier — inverts to charcoal.
437
+ - Background `{colors.ink}`, text `{colors.on-primary}`, otherwise identical structure.
438
+
439
+ **`feature-card`** — Generic feature highlight.
440
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.
441
+
442
+ **`product-mockup-card`** — The dominant card type — frames a high-fidelity product UI screenshot.
443
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.xl}`, padding 24px.
444
+
445
+ **`testimonial-card`** — Customer quote with avatar + name + company.
446
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body-lg}`, rounded `{rounded.lg}`, padding 32px.
447
+
448
+ **`startup-discount-card`** — The "Startups get 90% off" tinted card.
449
+ - Background `{colors.surface-2}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 32px.
450
+
451
+ **`customer-logo-tile`** — Small tile in the customer marquee.
452
+ - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.caption}`, rounded `{rounded.xs}`, padding 16px.
453
+
454
+ **`cta-banner`** — Closing CTA panel near page bottom.
455
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.headline}`, rounded `{rounded.lg}`, padding 48px.
456
+
457
+ ### Inputs & Forms
458
+
459
+ **`text-input`** + **`text-input-focused`** — Form fields on contact and search overlays.
460
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 10px 14px.
461
+
462
+ ### FAQ
463
+
464
+ **`faq-row`** — Expandable accordion row in the pricing FAQ.
465
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 24px. 1px `{colors.hairline-soft}` bottom rule.
466
+
467
+ ### Navigation
468
+
469
+ **`top-nav`** — Sticky cream bar with the Intercom wordmark left, nav links centered, log-in + sign-up pair right.
470
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-sm}`, height 56px.
471
+
472
+ ### Footer
473
+
474
+ **`footer`** — Dense link grid on `{colors.canvas}` cream with the Intercom wordmark left.
475
+ - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.caption}`, padding 64px 32px.
476
+
477
+ ## Do's and Don'ts
478
+
479
+ ### Do
480
+
481
+ - Reserve `{colors.canvas}` cream as the system's anchor surface — never replace with pure white.
482
+ - Lift cards from cream onto white (`{colors.surface-1}`) for hierarchy.
483
+ - Use **`button-fin`** Fin Orange ONLY on Fin AI product CTAs and Fin badges.
484
+ - Pair Saans display at weight 500 with body at 400.
485
+ - Use product UI screenshots as the protagonist of every section.
486
+ - Use `{rounded.lg}` 12px for cards and `{rounded.xl}` 16px for product mockup tiles.
487
+ - Apply negative tracking proportionally to display sizes.
488
+
489
+ ### Don't
490
+
491
+ - Don't use pure white as the canvas.
492
+ - Don't use Fin Orange as a section background or as a generic primary CTA.
493
+ - Don't add drop shadows to floating cards.
494
+ - Don't introduce a second display family.
495
+ - Don't pill-round CTAs.
496
+ - Don't write all-caps tracked eyebrows.
497
+ - Don't promote the report palette colors to brand-level surfaces.
498
+ - Don't combine charcoal CTAs and Fin Orange CTAs in the same viewport.
499
+
500
+ ## Responsive Behavior
501
+
502
+ ### Breakpoints
503
+
504
+ | Name | Width | Key Changes |
505
+ |---|---|---|
506
+ | Desktop-XL | 1440px | Default desktop layout |
507
+ | Desktop | 1280px | Card grid 3-up maintained |
508
+ | Tablet | 1024px | Card grid 3-up → 2-up |
509
+ | Mobile-Lg | 768px | Pricing comparison becomes accordion; nav hamburger |
510
+ | Mobile | 480px | Single-column; display-xl scales 72px → ~32px |
511
+
512
+ ### Touch Targets
513
+
514
+ - CTAs hold ≥40px tap height across viewports.
515
+ - Pricing tab pills hold ≥40px tap height.
516
+ - Form inputs hold ≥44px tap target on touch.
517
+
518
+ ### Collapsing Strategy
519
+
520
+ - **Top nav**: links collapse to hamburger below 768px; primary CTA stays visible.
521
+ - **Card grids**: 3-up → 2-up at 1024px → 1-up below 768px.
522
+ - **Pricing comparison**: collapses into per-tier accordion below 768px.
523
+ - **Display type**: `{typography.display-xl}` 72px scales toward `{typography.display-md}` 40px on mobile.
524
+
525
+ ### Image Behavior
526
+
527
+ - Product UI screenshots maintain aspect ratio and never crop.
528
+ - Customer logos in the marquee may collapse from 6-up to 3-up below 768px.
529
+
530
+ ## Iteration Guide
531
+
532
+ 1. Focus on ONE component at a time and reference it by its `components:` token name.
533
+ 2. When introducing a section, decide first whether it sits on `{colors.canvas}` cream (default) or whether it lifts onto a `{colors.surface-1}` white card.
534
+ 3. Default body to `{typography.body}` at weight 400.
535
+ 4. Run `npx @google/design.md lint DESIGN.md` after edits.
536
+ 5. Add new variants as separate component entries.
537
+ 6. Treat Fin Orange as a product accent: Fin CTA and Fin badge only.
538
+ 7. Lead every section with a product screenshot.
539
+
540
+ ## Known Gaps
541
+
542
+ - The **report palette** lives in product analytics dashboards rendered inside marketing mockups; they are documented for completeness but are not brand surface colors.
543
+ - Form-field error and validation styling is not visible on the inspected pages.
544
+ - Dark mode is not documented because the marketing site does not ship a dark theme.
545
+ - The helpdesk / inbox product surfaces show in-product UI states that aren't formal marketing chrome.
546
+ - Saans and SaansMono are proprietary; an open-source substitute (Inter, Söhne, Geist) is acceptable.