getrelay 0.1.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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/bin/relay.js +362 -0
  4. package/design-md/airbnb/DESIGN.md +545 -0
  5. package/design-md/airbnb/README.md +5 -0
  6. package/design-md/airtable/DESIGN.md +554 -0
  7. package/design-md/airtable/README.md +5 -0
  8. package/design-md/apple/DESIGN.md +562 -0
  9. package/design-md/apple/README.md +5 -0
  10. package/design-md/binance/DESIGN.md +634 -0
  11. package/design-md/binance/README.md +5 -0
  12. package/design-md/bmw/DESIGN.md +544 -0
  13. package/design-md/bmw/README.md +5 -0
  14. package/design-md/bmw-m/DESIGN.md +503 -0
  15. package/design-md/bmw-m/README.md +5 -0
  16. package/design-md/bugatti/DESIGN.md +454 -0
  17. package/design-md/bugatti/README.md +5 -0
  18. package/design-md/cal/DESIGN.md +542 -0
  19. package/design-md/cal/README.md +5 -0
  20. package/design-md/claude/DESIGN.md +589 -0
  21. package/design-md/claude/README.md +5 -0
  22. package/design-md/clay/DESIGN.md +541 -0
  23. package/design-md/clay/README.md +5 -0
  24. package/design-md/clickhouse/DESIGN.md +544 -0
  25. package/design-md/clickhouse/README.md +5 -0
  26. package/design-md/cohere/DESIGN.md +451 -0
  27. package/design-md/cohere/README.md +5 -0
  28. package/design-md/coinbase/DESIGN.md +570 -0
  29. package/design-md/coinbase/README.md +5 -0
  30. package/design-md/composio/DESIGN.md +506 -0
  31. package/design-md/composio/README.md +5 -0
  32. package/design-md/cursor/DESIGN.md +537 -0
  33. package/design-md/cursor/README.md +5 -0
  34. package/design-md/elevenlabs/DESIGN.md +504 -0
  35. package/design-md/elevenlabs/README.md +5 -0
  36. package/design-md/expo/DESIGN.md +526 -0
  37. package/design-md/expo/README.md +5 -0
  38. package/design-md/ferrari/DESIGN.md +531 -0
  39. package/design-md/ferrari/README.md +5 -0
  40. package/design-md/figma/DESIGN.md +578 -0
  41. package/design-md/figma/README.md +5 -0
  42. package/design-md/framer/DESIGN.md +544 -0
  43. package/design-md/framer/README.md +5 -0
  44. package/design-md/hashicorp/DESIGN.md +575 -0
  45. package/design-md/hashicorp/README.md +5 -0
  46. package/design-md/ibm/DESIGN.md +550 -0
  47. package/design-md/ibm/README.md +5 -0
  48. package/design-md/intercom/DESIGN.md +546 -0
  49. package/design-md/intercom/README.md +5 -0
  50. package/design-md/kraken/DESIGN.md +125 -0
  51. package/design-md/kraken/README.md +5 -0
  52. package/design-md/lamborghini/DESIGN.md +288 -0
  53. package/design-md/lamborghini/README.md +5 -0
  54. package/design-md/linear.app/DESIGN.md +548 -0
  55. package/design-md/linear.app/README.md +5 -0
  56. package/design-md/lovable/DESIGN.md +298 -0
  57. package/design-md/lovable/README.md +5 -0
  58. package/design-md/mastercard/DESIGN.md +365 -0
  59. package/design-md/mastercard/README.md +5 -0
  60. package/design-md/meta/DESIGN.md +683 -0
  61. package/design-md/meta/README.md +5 -0
  62. package/design-md/minimax/DESIGN.md +746 -0
  63. package/design-md/minimax/README.md +5 -0
  64. package/design-md/mintlify/DESIGN.md +852 -0
  65. package/design-md/mintlify/README.md +5 -0
  66. package/design-md/miro/DESIGN.md +825 -0
  67. package/design-md/miro/README.md +5 -0
  68. package/design-md/mistral.ai/DESIGN.md +773 -0
  69. package/design-md/mistral.ai/README.md +5 -0
  70. package/design-md/mongodb/DESIGN.md +767 -0
  71. package/design-md/mongodb/README.md +5 -0
  72. package/design-md/nike/DESIGN.md +575 -0
  73. package/design-md/nike/README.md +5 -0
  74. package/design-md/notion/DESIGN.md +821 -0
  75. package/design-md/notion/README.md +5 -0
  76. package/design-md/nvidia/DESIGN.md +640 -0
  77. package/design-md/nvidia/README.md +5 -0
  78. package/design-md/ollama/DESIGN.md +539 -0
  79. package/design-md/ollama/README.md +5 -0
  80. package/design-md/opencode.ai/DESIGN.md +521 -0
  81. package/design-md/opencode.ai/README.md +5 -0
  82. package/design-md/pinterest/DESIGN.md +597 -0
  83. package/design-md/pinterest/README.md +5 -0
  84. package/design-md/playstation/DESIGN.md +661 -0
  85. package/design-md/playstation/README.md +5 -0
  86. package/design-md/posthog/DESIGN.md +690 -0
  87. package/design-md/posthog/README.md +5 -0
  88. package/design-md/raycast/DESIGN.md +669 -0
  89. package/design-md/raycast/README.md +5 -0
  90. package/design-md/renault/DESIGN.md +589 -0
  91. package/design-md/renault/README.md +5 -0
  92. package/design-md/replicate/DESIGN.md +616 -0
  93. package/design-md/replicate/README.md +5 -0
  94. package/design-md/resend/DESIGN.md +585 -0
  95. package/design-md/resend/README.md +5 -0
  96. package/design-md/revolut/DESIGN.md +636 -0
  97. package/design-md/revolut/README.md +5 -0
  98. package/design-md/runwayml/DESIGN.md +244 -0
  99. package/design-md/runwayml/README.md +5 -0
  100. package/design-md/sanity/DESIGN.md +357 -0
  101. package/design-md/sanity/README.md +5 -0
  102. package/design-md/sentry/DESIGN.md +551 -0
  103. package/design-md/sentry/README.md +5 -0
  104. package/design-md/shopify/DESIGN.md +516 -0
  105. package/design-md/shopify/README.md +5 -0
  106. package/design-md/slack/DESIGN.md +482 -0
  107. package/design-md/spacex/DESIGN.md +363 -0
  108. package/design-md/spacex/README.md +5 -0
  109. package/design-md/spotify/DESIGN.md +246 -0
  110. package/design-md/spotify/README.md +5 -0
  111. package/design-md/starbucks/DESIGN.md +580 -0
  112. package/design-md/starbucks/README.md +5 -0
  113. package/design-md/stripe/DESIGN.md +487 -0
  114. package/design-md/stripe/README.md +5 -0
  115. package/design-md/supabase/DESIGN.md +462 -0
  116. package/design-md/supabase/README.md +5 -0
  117. package/design-md/superhuman/DESIGN.md +448 -0
  118. package/design-md/superhuman/README.md +5 -0
  119. package/design-md/tesla/DESIGN.md +286 -0
  120. package/design-md/tesla/README.md +5 -0
  121. package/design-md/theverge/DESIGN.md +339 -0
  122. package/design-md/theverge/README.md +5 -0
  123. package/design-md/together.ai/DESIGN.md +633 -0
  124. package/design-md/together.ai/README.md +5 -0
  125. package/design-md/uber/DESIGN.md +636 -0
  126. package/design-md/uber/README.md +5 -0
  127. package/design-md/vercel/DESIGN.md +736 -0
  128. package/design-md/vercel/README.md +5 -0
  129. package/design-md/vodafone/DESIGN.md +538 -0
  130. package/design-md/vodafone/README.md +5 -0
  131. package/design-md/voltagent/DESIGN.md +521 -0
  132. package/design-md/voltagent/README.md +5 -0
  133. package/design-md/warp/DESIGN.md +526 -0
  134. package/design-md/warp/README.md +5 -0
  135. package/design-md/webflow/DESIGN.md +588 -0
  136. package/design-md/webflow/README.md +5 -0
  137. package/design-md/wired/DESIGN.md +497 -0
  138. package/design-md/wired/README.md +5 -0
  139. package/design-md/wise/DESIGN.md +544 -0
  140. package/design-md/wise/README.md +5 -0
  141. package/design-md/x.ai/DESIGN.md +465 -0
  142. package/design-md/x.ai/README.md +5 -0
  143. package/design-md/zapier/DESIGN.md +537 -0
  144. package/design-md/zapier/README.md +5 -0
  145. package/package.json +31 -0
@@ -0,0 +1,575 @@
1
+ ---
2
+ version: alpha
3
+ name: HashiCorp
4
+ description: "An enterprise-infrastructure marketing canvas built around a near-black ground (#000000) and a system of per-product accent colors — Terraform purple, Vault yellow, Consul pink, Waypoint cyan, Vagrant blue — that act as identity tokens rather than decorative palette. Display type is hashicorpSans set in 600/700 with tight 1.17–1.21 line-heights; body type runs the same family at 500 weight with relaxed 1.50–1.71 line-heights. Cards live as charcoal surfaces with 1px translucent gray borders; product showcase cards lift into per-product chromatic gradients. The system reads as confident, technical, and intentionally multi-product — every section quietly signals which HashiCorp tool it represents."
5
+
6
+ colors:
7
+ primary: "#000000"
8
+ on-primary: "#ffffff"
9
+ accent-blue: "#2b89ff"
10
+ ink: "#ffffff"
11
+ ink-muted: "#b2b6bd"
12
+ ink-subtle: "#656a76"
13
+ canvas: "#000000"
14
+ surface-1: "#15181e"
15
+ surface-2: "#1f232b"
16
+ surface-3: "#3b3d45"
17
+ hairline: "#3b3d45"
18
+ hairline-soft: "#252830"
19
+ inverse-canvas: "#ffffff"
20
+ inverse-ink: "#000000"
21
+ product-terraform: "#7b42bc"
22
+ product-terraform-bright: "#911ced"
23
+ product-vault: "#ffcf25"
24
+ product-consul: "#e62b1e"
25
+ product-waypoint: "#14c6cb"
26
+ product-waypoint-deep: "#12b6bb"
27
+ product-vagrant: "#1868f2"
28
+ product-nomad: "#00ca8e"
29
+ product-boundary: "#f24c53"
30
+ amber-100: "#fbeabf"
31
+ amber-200: "#bb5a00"
32
+ blue-7: "#101a59"
33
+ semantic-success: "#00ca8e"
34
+ semantic-warning: "#ffcf25"
35
+ semantic-error: "#e62b1e"
36
+ semantic-visited: "#a737ff"
37
+
38
+ typography:
39
+ display-xl:
40
+ fontFamily: hashicorpSans
41
+ fontSize: 80px
42
+ fontWeight: 700
43
+ lineHeight: 1.17
44
+ letterSpacing: -2.5px
45
+ display-lg:
46
+ fontFamily: hashicorpSans
47
+ fontSize: 56px
48
+ fontWeight: 700
49
+ lineHeight: 1.18
50
+ letterSpacing: -1.6px
51
+ display-md:
52
+ fontFamily: hashicorpSans
53
+ fontSize: 40px
54
+ fontWeight: 600
55
+ lineHeight: 1.19
56
+ letterSpacing: -1.0px
57
+ headline:
58
+ fontFamily: hashicorpSans
59
+ fontSize: 28px
60
+ fontWeight: 600
61
+ lineHeight: 1.21
62
+ letterSpacing: -0.6px
63
+ card-title:
64
+ fontFamily: hashicorpSans
65
+ fontSize: 22px
66
+ fontWeight: 600
67
+ lineHeight: 1.18
68
+ letterSpacing: -0.4px
69
+ subhead:
70
+ fontFamily: hashicorpSans
71
+ fontSize: 20px
72
+ fontWeight: 600
73
+ lineHeight: 1.35
74
+ letterSpacing: -0.2px
75
+ body-lg:
76
+ fontFamily: hashicorpSans
77
+ fontSize: 18px
78
+ fontWeight: 500
79
+ lineHeight: 1.69
80
+ letterSpacing: 0
81
+ body:
82
+ fontFamily: hashicorpSans
83
+ fontSize: 16px
84
+ fontWeight: 500
85
+ lineHeight: 1.50
86
+ letterSpacing: 0
87
+ body-sm:
88
+ fontFamily: hashicorpSans
89
+ fontSize: 14px
90
+ fontWeight: 500
91
+ lineHeight: 1.71
92
+ letterSpacing: 0
93
+ caption:
94
+ fontFamily: hashicorpSans
95
+ fontSize: 13px
96
+ fontWeight: 500
97
+ lineHeight: 1.38
98
+ letterSpacing: 0.2px
99
+ button:
100
+ fontFamily: hashicorpSans
101
+ fontSize: 14px
102
+ fontWeight: 600
103
+ lineHeight: 1.29
104
+ letterSpacing: 0
105
+ eyebrow:
106
+ fontFamily: hashicorpSans
107
+ fontSize: 12px
108
+ fontWeight: 600
109
+ lineHeight: 1.23
110
+ letterSpacing: 0.6px
111
+
112
+ rounded:
113
+ xs: 4px
114
+ sm: 6px
115
+ md: 8px
116
+ lg: 12px
117
+ xl: 16px
118
+ xxl: 24px
119
+ pill: 9999px
120
+ full: 9999px
121
+
122
+ spacing:
123
+ hair: 1px
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.inverse-canvas}"
136
+ textColor: "{colors.inverse-ink}"
137
+ typography: "{typography.button}"
138
+ rounded: "{rounded.md}"
139
+ padding: 10px 18px
140
+ button-primary-pressed:
141
+ backgroundColor: "{colors.inverse-canvas}"
142
+ textColor: "{colors.inverse-ink}"
143
+ typography: "{typography.button}"
144
+ rounded: "{rounded.md}"
145
+ button-secondary:
146
+ backgroundColor: "{colors.surface-2}"
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-product-terraform:
158
+ backgroundColor: "{colors.product-terraform}"
159
+ textColor: "{colors.ink}"
160
+ typography: "{typography.button}"
161
+ rounded: "{rounded.md}"
162
+ padding: 10px 18px
163
+ button-product-vault:
164
+ backgroundColor: "{colors.product-vault}"
165
+ textColor: "{colors.inverse-ink}"
166
+ typography: "{typography.button}"
167
+ rounded: "{rounded.md}"
168
+ padding: 10px 18px
169
+ button-product-waypoint:
170
+ backgroundColor: "{colors.product-waypoint}"
171
+ textColor: "{colors.inverse-ink}"
172
+ typography: "{typography.button}"
173
+ rounded: "{rounded.md}"
174
+ padding: 10px 18px
175
+ product-card:
176
+ backgroundColor: "{colors.surface-1}"
177
+ textColor: "{colors.ink}"
178
+ typography: "{typography.body}"
179
+ rounded: "{rounded.lg}"
180
+ padding: 24px
181
+ product-card-terraform:
182
+ backgroundColor: "{colors.product-terraform}"
183
+ textColor: "{colors.ink}"
184
+ typography: "{typography.body}"
185
+ rounded: "{rounded.lg}"
186
+ padding: 24px
187
+ product-card-vault:
188
+ backgroundColor: "{colors.product-vault}"
189
+ textColor: "{colors.inverse-ink}"
190
+ typography: "{typography.body}"
191
+ rounded: "{rounded.lg}"
192
+ padding: 24px
193
+ product-card-waypoint:
194
+ backgroundColor: "{colors.product-waypoint}"
195
+ textColor: "{colors.inverse-ink}"
196
+ typography: "{typography.body}"
197
+ rounded: "{rounded.lg}"
198
+ padding: 24px
199
+ feature-card:
200
+ backgroundColor: "{colors.surface-1}"
201
+ textColor: "{colors.ink}"
202
+ typography: "{typography.body}"
203
+ rounded: "{rounded.lg}"
204
+ padding: 24px
205
+ pricing-card:
206
+ backgroundColor: "{colors.surface-1}"
207
+ textColor: "{colors.ink}"
208
+ typography: "{typography.body}"
209
+ rounded: "{rounded.lg}"
210
+ padding: 32px
211
+ pricing-card-featured:
212
+ backgroundColor: "{colors.surface-2}"
213
+ textColor: "{colors.ink}"
214
+ typography: "{typography.body}"
215
+ rounded: "{rounded.lg}"
216
+ padding: 32px
217
+ resource-card:
218
+ backgroundColor: "{colors.surface-1}"
219
+ textColor: "{colors.ink}"
220
+ typography: "{typography.body-sm}"
221
+ rounded: "{rounded.lg}"
222
+ padding: 16px
223
+ text-input:
224
+ backgroundColor: "{colors.surface-1}"
225
+ textColor: "{colors.ink}"
226
+ typography: "{typography.body}"
227
+ rounded: "{rounded.md}"
228
+ padding: 10px 14px
229
+ text-input-focused:
230
+ backgroundColor: "{colors.surface-1}"
231
+ textColor: "{colors.ink}"
232
+ typography: "{typography.body}"
233
+ rounded: "{rounded.md}"
234
+ padding: 10px 14px
235
+ product-pill:
236
+ backgroundColor: "{colors.surface-1}"
237
+ textColor: "{colors.ink-muted}"
238
+ typography: "{typography.caption}"
239
+ rounded: "{rounded.pill}"
240
+ padding: 4px 10px
241
+ top-nav:
242
+ backgroundColor: "{colors.canvas}"
243
+ textColor: "{colors.ink}"
244
+ typography: "{typography.body-sm}"
245
+ rounded: "{rounded.xs}"
246
+ height: 64px
247
+ comparison-row:
248
+ backgroundColor: "{colors.canvas}"
249
+ textColor: "{colors.ink-muted}"
250
+ typography: "{typography.body-sm}"
251
+ rounded: "{rounded.xs}"
252
+ cta-banner:
253
+ backgroundColor: "{colors.surface-1}"
254
+ textColor: "{colors.ink}"
255
+ typography: "{typography.subhead}"
256
+ rounded: "{rounded.xxl}"
257
+ padding: 48px
258
+ footer:
259
+ backgroundColor: "{colors.canvas}"
260
+ textColor: "{colors.ink-muted}"
261
+ typography: "{typography.caption}"
262
+ rounded: "{rounded.xs}"
263
+ padding: 64px 32px
264
+ ---
265
+
266
+ ## Overview
267
+
268
+ HashiCorp's marketing canvas is a near-black ground that serves a multi-product portfolio without ever feeling generic. The dominant surface is `{colors.canvas}` (pure black) layered with `{colors.surface-1}` charcoal cards and 1px translucent gray hairlines. The chrome is monochrome — white pill-rounded buttons (`{components.button-primary}`), white type, gray secondary type — but the system is held together by a **palette of per-product accent colors** that signal which HashiCorp tool a given section belongs to: Terraform purple, Vault yellow, Consul red, Waypoint cyan, Vagrant blue, Nomad green, Boundary coral.
269
+
270
+ Display type is **hashicorpSans** at weights 600/700 with tight line-heights (1.17–1.21); body type is the same family at 500 weight with deliberately relaxed line-heights (1.50–1.71) — the contrast feels editorial, not enterprise-templated. CTAs use small `{rounded.md}` 8px corners rather than pills, which keeps the system reading as developer-facing rather than consumer-y.
271
+
272
+ The signature device is the **product-card** family — each HashiCorp product gets its own colored card variant on the home and infrastructure pages, lifting Terraform into a violet ground, Vault into yellow, Waypoint into cyan. These aren't decorative gradients — they're identity surfaces. A reader scrolling the page can tell which product a section is about from the corner of their eye.
273
+
274
+ **Key Characteristics:**
275
+ - Black-canvas marketing system: `{colors.canvas}` is the surface for hero, body, pricing, comparison tables, and footer alike.
276
+ - **Per-product color identity**: Terraform `{colors.product-terraform}`, Vault `{colors.product-vault}`, Waypoint `{colors.product-waypoint}`, Vagrant `{colors.product-vagrant}`, Consul `{colors.product-consul}`, Nomad `{colors.product-nomad}`, Boundary `{colors.product-boundary}` — each with its own button + card variant.
277
+ - Display headlines run hashicorpSans 600/700 with line-height 1.17–1.21 (tight); body runs the same family at 500 with 1.50–1.71 (relaxed) — the proportional gap is the brand's voice.
278
+ - CTA shape is `{rounded.md}` 8px — not a pill — keeping the system reading as developer-tool rather than consumer-app.
279
+ - Charcoal surface lift (canvas → surface-1 → surface-2) instead of shadow-driven elevation.
280
+ - 1px translucent gray hairlines (`rgba(178,182,189,0.1)`) define cards and dividers — the borders are felt more than seen.
281
+ - Eyebrow typography (12–13px, 600 weight, 0.6px positive tracking, uppercase) marks every section as a category label.
282
+
283
+ ## Colors
284
+
285
+ > Source pages: hashicorp.com/en (home), /en/infrastructure-cloud, /en/products/terraform, /en/pricing, /en/resources?contentType=PDF.
286
+
287
+ ### Brand & Accent
288
+ - **Black** ({colors.primary}): The system primary surface. Canvas, footer, comparison tables, hero — all black.
289
+ - **White** ({colors.on-primary}): Inverse text on black; canvas of `button-primary`.
290
+ - **Accent Blue** ({colors.accent-blue}): Hyperlinks across the marketing surface.
291
+ - **Visited Purple** ({colors.semantic-visited}): Visited-link state.
292
+
293
+ ### Surface
294
+ - **Canvas** ({colors.canvas}): Default page background.
295
+ - **Surface 1** ({colors.surface-1}): Charcoal one step above canvas — feature cards, pricing cards, resource tiles.
296
+ - **Surface 2** ({colors.surface-2}): Two steps above — featured pricing card, secondary buttons, hovered product chrome.
297
+ - **Surface 3** ({colors.surface-3}): Three steps above — small chips, badges, sub-nav backgrounds.
298
+ - **Hairline** ({colors.hairline}): 1px borders on cards and dividers.
299
+ - **Hairline Soft** ({colors.hairline-soft}): Subtler dividers — comparison-table rows.
300
+ - **Inverse Canvas** ({colors.inverse-canvas}): Pure white — used as the surface of `button-primary` only.
301
+
302
+ ### Text
303
+ - **Ink** ({colors.ink}): All headline and emphasized body type — pure white.
304
+ - **Ink Muted** ({colors.ink-muted}): Secondary type at #b2b6bd — meta info, footer columns.
305
+ - **Ink Subtle** ({colors.ink-subtle}): Tertiary type at #656a76 — form helper text, timestamps, footnotes.
306
+
307
+ ### Per-Product Identity (signature)
308
+ HashiCorp's marketing isn't held together by a single accent color — it's held together by a system of product-specific accents, each used to mark which tool a section represents.
309
+
310
+ - **Terraform Purple** ({colors.product-terraform}): Terraform sections, terraform CTAs, the violet 3D cube on the home hero.
311
+ - **Terraform Bright** ({colors.product-terraform-bright}): Saturated highlight — link emphasis on Terraform pages.
312
+ - **Vault Yellow** ({colors.product-vault}): Vault sections and CTAs.
313
+ - **Consul Red** ({colors.product-consul}): Consul sections.
314
+ - **Waypoint Cyan** ({colors.product-waypoint}): Waypoint sections, deep variant `{colors.product-waypoint-deep}` for hover/active.
315
+ - **Vagrant Blue** ({colors.product-vagrant}): Vagrant sections.
316
+ - **Nomad Green** ({colors.product-nomad}): Nomad sections.
317
+ - **Boundary Coral** ({colors.product-boundary}): Boundary sections.
318
+
319
+ ### Semantic
320
+ - **Success** ({colors.semantic-success}): Positive states (also reused as Nomad green).
321
+ - **Warning** ({colors.semantic-warning}): Warning states (also Vault yellow).
322
+ - **Error** ({colors.semantic-error}): Error states (also Consul red).
323
+ - **Amber 100** ({colors.amber-100}): Soft warm highlight — extracted but used sparingly.
324
+ - **Amber 200** ({colors.amber-200}): Saturated amber for caution badges.
325
+ - **Blue 7** ({colors.blue-7}): Deep navy used in unified-core gradients.
326
+
327
+ ## Typography
328
+
329
+ ### Font Family
330
+
331
+ - **hashicorpSans** — HashiCorp's proprietary marketing typeface. Geometric, clean, slightly humanist. Fallback stack `__hashicorpSans_Fallback_96f0ca` (system font), then `-apple-system, BlinkMacSystemFont, Segoe UI, helvetica, arial`.
332
+
333
+ The same family carries display, body, button, and caption — no separate display + body pairing. Hierarchy is carried by weight (500 body / 600 emphasis / 700 display) and by a deliberate line-height contrast (tight on display, relaxed on body).
334
+
335
+ ### Hierarchy
336
+
337
+ | Token | Size | Weight | Line Height | Letter Spacing | Use |
338
+ |---|---|---|---|---|---|
339
+ | `{typography.display-xl}` | 80px | 700 | 1.17 | -2.5px | Largest hero headline |
340
+ | `{typography.display-lg}` | 56px | 700 | 1.18 | -1.6px | Section opener headlines |
341
+ | `{typography.display-md}` | 40px | 600 | 1.19 | -1.0px | Sub-section headlines |
342
+ | `{typography.headline}` | 28px | 600 | 1.21 | -0.6px | Pricing tier titles, CTA banner heading |
343
+ | `{typography.card-title}` | 22px | 600 | 1.18 | -0.4px | Feature card title |
344
+ | `{typography.subhead}` | 20px | 600 | 1.35 | -0.2px | Long-form intro paragraphs |
345
+ | `{typography.body-lg}` | 18px | 500 | 1.69 | 0 | Hero subhead, lead body |
346
+ | `{typography.body}` | 16px | 500 | 1.50 | 0 | Default body |
347
+ | `{typography.body-sm}` | 14px | 500 | 1.71 | 0 | Card body, footer columns |
348
+ | `{typography.caption}` | 13px | 500 | 1.38 | 0.2px | Meta, comparison cell labels |
349
+ | `{typography.button}` | 14px | 600 | 1.29 | 0 | Pill / square CTA buttons |
350
+ | `{typography.eyebrow}` | 12px | 600 | 1.23 | 0.6px | Uppercase section eyebrows |
351
+
352
+ ### Principles
353
+
354
+ - **Tight on display, relaxed on body.** Display sits at line-height 1.17–1.21; body lifts to 1.50–1.71. The size + line-height contrast carries hierarchy.
355
+ - **Weight hierarchy is small.** 500 body / 600 emphasis / 700 display. No light / black extremes — the brand reads as engineered.
356
+ - **Eyebrow positive-tracked uppercase 12px is the section header.** Every meaningful section has one above the headline.
357
+ - **No mono.** Despite being a developer-tools brand, the marketing surface uses no monospace face — code voice is reserved for in-product surfaces.
358
+
359
+ ### Note on Font Substitutes
360
+
361
+ If implementing without hashicorpSans, suitable open-source substitutes include **Inter** (closest geometric character set), **Geist Sans**, or **IBM Plex Sans**. Inter at weights 500 / 600 / 700 closely approximates hashicorpSans's proportions; expect to manually adjust line-heights down by ~0.02 to match.
362
+
363
+ ## Layout
364
+
365
+ ### Spacing System
366
+
367
+ - **Base unit**: 8px (the primary increments are 4 / 8 / 12 / 16 / 24 / 32 / 48).
368
+ - **Tokens (front matter)**: `{spacing.hair}` 1px · `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 24px · `{spacing.xl}` 32px · `{spacing.xxl}` 48px · `{spacing.section}` 96px.
369
+ - Card interior padding: `{spacing.lg}` 24px on product cards; `{spacing.xl}` 32px on pricing cards; `{spacing.xxl}` 48px on CTA banners.
370
+ - Button padding: 10px vertical · 18px horizontal on `{components.button-primary}`.
371
+ - Universal rhythm constant: `{spacing.section}` (96px) vertical gap between major sections.
372
+
373
+ ### Grid & Container
374
+
375
+ - Max content width sits around 1280px with side gutters scaling from `{spacing.xxl}` on desktop down to `{spacing.lg}` on mobile.
376
+ - Product card grids are 3-up on desktop, 2-up at tablet, 1-up on mobile.
377
+ - Pricing tier grid is 3-up across desktop; comparison table beneath uses fixed-width left column.
378
+ - Resource directory (PDF library) uses 4-up dense thumbnail grid.
379
+
380
+ ### Whitespace Philosophy
381
+
382
+ The dark canvas IS the whitespace. Sections separate by surface lift (canvas → surface-1) rather than by gaps in white. Within a section, generous `{spacing.xl}` 32px gaps separate cards; `{spacing.lg}` 24px separates rows.
383
+
384
+ ## Elevation & Depth
385
+
386
+ | Level | Treatment | Use |
387
+ |---|---|---|
388
+ | 0 (flat) | No shadow, no border | Canvas-mounted display type, hero, footer |
389
+ | 1 (charcoal lift) | `{colors.surface-1}` background + 1px `rgba(178,182,189,0.1)` border | Default cards, resource tiles, pricing cards |
390
+ | 2 (surface-2 lift) | `{colors.surface-2}` background + 1px `{colors.hairline}` border | Featured pricing card, hovered cards, sub-nav |
391
+ | 3 (product chromatic) | Per-product accent color background — Terraform purple, Vault yellow, Waypoint cyan | Product showcase cards |
392
+
393
+ The product chromatic level isn't a "modal lift" — it's an identity device. A Terraform card sits at the same z-plane as a feature-card; the difference is meaning, not depth.
394
+
395
+ ### Decorative Depth
396
+
397
+ - **3D product visuals** — isometric purple cubes (Terraform), translucent yellow safes (Vault), and similar product-tinted illustrations sit in the right column of hero sections.
398
+ - **1px translucent gray hairlines** are the dominant edge — borders are visible without competing.
399
+ - **No drop shadows on dark.** Cards lift via surface change, never shadow.
400
+
401
+ ## Shapes
402
+
403
+ ### Border Radius Scale
404
+
405
+ | Token | Value | Use |
406
+ |---|---|---|
407
+ | `{rounded.xs}` | 4px | Small chips / badges |
408
+ | `{rounded.sm}` | 6px | Inline tag |
409
+ | `{rounded.md}` | 8px | All CTA buttons, form inputs, list items |
410
+ | `{rounded.lg}` | 12px | Feature cards, product cards, pricing cards |
411
+ | `{rounded.xl}` | 16px | Large illustrative tiles |
412
+ | `{rounded.xxl}` | 24px | CTA banner panels |
413
+ | `{rounded.pill}` | 9999px | Eyebrow-style product pills (small chips) |
414
+ | `{rounded.full}` | 9999px | Avatar circles (rare on marketing) |
415
+
416
+ ### Photography & Illustration Geometry
417
+
418
+ - Product 3D illustrations use full-bleed within their container — no rounded inner mask.
419
+ - Logo chips in the customer marquee sit on `{rounded.sm}` 6px tiles with 1px hairline.
420
+ - Resource thumbnails use `{rounded.lg}` 12px corners.
421
+
422
+ ## Components
423
+
424
+ ### Buttons
425
+
426
+ **`button-primary`** — White rounded-rect CTA. Used as primary CTA on all pages.
427
+ - Background `{colors.inverse-canvas}`, text `{colors.inverse-ink}`, type `{typography.button}`, padding 10px 18px, rounded `{rounded.md}`.
428
+ - Pressed state lives in `button-primary-pressed`.
429
+
430
+ **`button-secondary`** — Charcoal rounded-rect. Secondary CTA, "Read docs" / "Talk to sales".
431
+ - Background `{colors.surface-2}`, text `{colors.ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
432
+
433
+ **`button-tertiary`** — Bare ghost button on canvas with text-only treatment.
434
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
435
+
436
+ **`button-product-terraform`** — Terraform-tinted CTA on Terraform pages.
437
+ - Background `{colors.product-terraform}`, text `{colors.ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
438
+
439
+ **`button-product-vault`** — Vault-yellow CTA.
440
+ - Background `{colors.product-vault}`, text `{colors.inverse-ink}` (yellow needs dark text), type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
441
+
442
+ **`button-product-waypoint`** — Waypoint-cyan CTA.
443
+ - Background `{colors.product-waypoint}`, text `{colors.inverse-ink}`, type `{typography.button}`, rounded `{rounded.md}`, padding 10px 18px.
444
+
445
+ (Vagrant blue, Nomad green, Consul red, Boundary coral follow the same pattern with their respective `{colors.product-*}` token.)
446
+
447
+ ### Cards & Containers
448
+
449
+ **`product-card`** — Default product showcase card — surface-1 charcoal.
450
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.
451
+
452
+ **`product-card-terraform`** — Product card with Terraform purple ground (used as identity surface, not modal elevation).
453
+ - Background `{colors.product-terraform}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.
454
+
455
+ **`product-card-vault`** — Vault-yellow ground.
456
+ - Background `{colors.product-vault}`, text `{colors.inverse-ink}`, otherwise identical structure.
457
+
458
+ **`product-card-waypoint`** — Waypoint-cyan ground.
459
+ - Background `{colors.product-waypoint}`, text `{colors.inverse-ink}`, otherwise identical structure.
460
+
461
+ (Other product variants follow the same shape with their respective product token.)
462
+
463
+ **`feature-card`** — Generic feature highlight on surface-1.
464
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 24px.
465
+
466
+ **`pricing-card`** — Pricing tier on `/en/pricing`.
467
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.lg}`, padding 32px.
468
+
469
+ **`pricing-card-featured`** — Recommended tier (visually emphasized via surface lift).
470
+ - Background `{colors.surface-2}`, otherwise identical structure.
471
+
472
+ **`resource-card`** — PDF / whitepaper / guide tile in the resources directory.
473
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body-sm}`, rounded `{rounded.lg}`, padding 16px.
474
+
475
+ ### Inputs & Forms
476
+
477
+ **`text-input`** + **`text-input-focused`** — Form fields on pricing seat-count and contact forms.
478
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 10px 14px.
479
+ - Focused state retains the same surface; the focus ring is a 1px `{colors.accent-blue}` outline.
480
+
481
+ ### Pills & Chips
482
+
483
+ **`product-pill`** — Small product-name chip used above hero headlines and on resource cards to label which product a piece of content belongs to.
484
+ - Background `{colors.surface-1}`, text `{colors.ink-muted}`, type `{typography.caption}`, rounded `{rounded.pill}`, padding 4px 10px.
485
+
486
+ ### Comparison Table
487
+
488
+ **`comparison-row`** — Single row inside the pricing comparison table.
489
+ - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.body-sm}`. Row separator is `{colors.hairline-soft}`.
490
+
491
+ ### CTA Banner
492
+
493
+ **`cta-banner`** — Large rounded panel used at the bottom of long-form pages with a closing CTA.
494
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.subhead}`, rounded `{rounded.xxl}`, padding 48px.
495
+
496
+ ### Navigation
497
+
498
+ **`top-nav`** — Sticky black bar with HashiCorp logomark left, primary nav links centered, and a `button-primary` ("Sign up") + `button-secondary` ("Sign in") pair right.
499
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-sm}`, height 64px.
500
+ - Mobile: collapses primary links into a hamburger; the primary CTA remains visible.
501
+
502
+ ### Footer
503
+
504
+ **`footer`** — Dense link grid on `{colors.canvas}` with the wordmark at left and 5–6 columns of caption-sized links.
505
+ - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.caption}`, padding 64px 32px.
506
+
507
+ ## Do's and Don'ts
508
+
509
+ ### Do
510
+
511
+ - Reserve `{colors.canvas}` (black) and `{colors.surface-1}` (charcoal) as the system's two anchor surfaces. Every band of the page is one or the other.
512
+ - When introducing a section about a specific HashiCorp product, use that product's `{colors.product-*}` token consistently — for the section pill, the CTA button, and (where appropriate) the showcase card background.
513
+ - Use `{rounded.md}` 8px on CTA buttons; HashiCorp's brand reads as engineered, not consumer.
514
+ - Pair tight display line-heights (1.17–1.21) with relaxed body line-heights (1.50–1.71). The contrast IS the brand voice.
515
+ - Use the eyebrow typography (`{typography.eyebrow}`, uppercase, 0.6px tracking) above every meaningful section.
516
+ - Use surface lift (canvas → surface-1 → surface-2) to express hierarchy on dark.
517
+ - Reserve product-chromatic cards for product identity; keep generic feature cards on `{colors.surface-1}`.
518
+
519
+ ### Don't
520
+
521
+ - Don't ship a light-mode marketing page. HashiCorp's marketing brand IS dark.
522
+ - Don't introduce mid-tone gray text outside the documented `ink` / `ink-muted` / `ink-subtle` set.
523
+ - Don't square off CTA corners — use `{rounded.md}` 8px, not 0px.
524
+ - Don't use a product accent color for a CTA on a page that isn't about that product. Terraform purple on the Vault page is a brand violation.
525
+ - Don't combine multiple product accents in the same viewport — the system says "this section is about THIS tool", and mixing accents breaks that signal.
526
+ - Don't add drop shadows on dark; surface lift carries elevation.
527
+ - Don't replace `hashicorpSans` with a display-only sans for headlines and a different family for body. The brand is held together by one family across the full hierarchy.
528
+
529
+ ## Responsive Behavior
530
+
531
+ ### Breakpoints
532
+
533
+ | Name | Width | Key Changes |
534
+ |---|---|---|
535
+ | Desktop-XL | 1440px | Default desktop layout |
536
+ | Desktop | 1280px | Pricing 3-up grid maintained |
537
+ | Tablet | 1024px | Product card grid 3-up → 2-up |
538
+ | Mobile-Lg | 768px | Pricing comparison becomes per-tier accordion; nav becomes hamburger |
539
+ | Mobile | 480px | Single-column everything; display-xl scales 80px → ~36px |
540
+
541
+ ### Touch Targets
542
+
543
+ - CTA buttons (`button-primary`, `button-secondary`) maintain ≥40px tap height across viewports.
544
+ - Product pills are 24px tall on desktop and grow to 28px on touch viewports.
545
+ - Form inputs hold ≥44px tap target on touch viewports.
546
+
547
+ ### Collapsing Strategy
548
+
549
+ - **Nav**: horizontal nav with right-anchored CTAs collapses to a hamburger overlay below 768px. The primary CTA stays visible on the bar.
550
+ - **Product card grid**: 3-up → 2-up at 1024px → 1-up below 768px.
551
+ - **Pricing comparison table**: collapses into per-tier accordions below 768px to avoid horizontal scroll.
552
+ - **Display type**: `{typography.display-xl}` 80px scales toward `{typography.display-md}` 40px on mobile while preserving the negative-tracking percentage.
553
+
554
+ ### Image Behavior
555
+
556
+ - 3D product illustrations (cubes, safes, etc.) maintain aspect ratio and never crop; below 768px they shrink rather than reflow.
557
+ - Customer logo marquee scales horizontally and may wrap to a second row at narrow widths.
558
+
559
+ ## Iteration Guide
560
+
561
+ 1. Focus on ONE component at a time and reference it by its `components:` token name.
562
+ 2. When introducing a new section, decide first whether it's a generic feature (surface-1) or a product-identity section (product-* color).
563
+ 3. Default body to `{typography.body}` at 500 weight; reach for `{typography.subhead}` only inside CTA banners and feature cards.
564
+ 4. Run `npx @google/design.md lint DESIGN.md` after edits.
565
+ 5. Add new product variants as separate component entries (`product-card-nomad`, `button-product-consul`, etc.).
566
+ 6. Treat the per-product palette as identity tokens, not decoration. If you reach for a product color outside its product context, the brand is drifting.
567
+ 7. Eyebrow type is mandatory above every section — skipping it makes sections read as floating.
568
+
569
+ ## Known Gaps
570
+
571
+ - The exact product-color hex values come from the `--mds-color-*` CSS variable set extracted directly; they are HashiCorp's canonical brand spec.
572
+ - Shadow tokens are not extensively documented because the dark surface system uses surface lift instead of shadow elevation.
573
+ - Form-field error and validation styling is not visible on the inspected pages.
574
+ - Dark mode is the only marketing mode — light-mode adaptation is not documented.
575
+ - Product-card variants for Consul, Nomad, Vagrant, and Boundary follow the documented Terraform / Vault / Waypoint pattern but are referenced in prose only; if they need formal entries they can be added as `product-card-consul`, `product-card-nomad`, etc.
@@ -0,0 +1,5 @@
1
+ # HashiCorp Inspired Design System
2
+
3
+ Design system details have been moved to: https://getdesign.md/hashicorp/design-md
4
+
5
+ You can also view previews, dark mode examples, and download options on getdesign.md.