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,550 @@
1
+ ---
2
+ version: alpha
3
+ name: IBM
4
+ description: "An enterprise-marketing canvas faithful to Carbon Design System: white surfaces, charcoal type, IBM Blue (#0f62fe) as the single confident accent, and a deliberately flat-square aesthetic where corners stay at 0–4px. Type runs IBM Plex Sans at light weight 300 for display sizes (a brand signature) and 400/600 for body and emphasis. Cards live as thin-bordered tiles with no shadow; sections separate via subtle gray rows. The chrome is square, the typography is light, and the only color in the system is one assertive blue — the result reads as old-world enterprise gravitas reframed for the cloud era."
5
+
6
+ colors:
7
+ primary: "#0f62fe"
8
+ on-primary: "#ffffff"
9
+ ink: "#161616"
10
+ ink-muted: "#525252"
11
+ ink-subtle: "#8c8c8c"
12
+ canvas: "#ffffff"
13
+ surface-1: "#f4f4f4"
14
+ surface-2: "#e0e0e0"
15
+ inverse-canvas: "#161616"
16
+ inverse-surface-1: "#262626"
17
+ inverse-ink: "#ffffff"
18
+ inverse-ink-muted: "#c6c6c6"
19
+ hairline: "#e0e0e0"
20
+ hairline-strong: "#161616"
21
+ blue-60: "#0043ce"
22
+ blue-80: "#002d9c"
23
+ blue-hover: "#0050e6"
24
+ semantic-success: "#24a148"
25
+ semantic-warning: "#f1c21b"
26
+ semantic-error: "#da1e28"
27
+ semantic-info: "#0f62fe"
28
+
29
+ typography:
30
+ display-xl:
31
+ fontFamily: IBM Plex Sans
32
+ fontSize: 76px
33
+ fontWeight: 300
34
+ lineHeight: 1.17
35
+ letterSpacing: -0.5px
36
+ display-lg:
37
+ fontFamily: IBM Plex Sans
38
+ fontSize: 60px
39
+ fontWeight: 300
40
+ lineHeight: 1.17
41
+ letterSpacing: -0.4px
42
+ display-md:
43
+ fontFamily: IBM Plex Sans
44
+ fontSize: 42px
45
+ fontWeight: 300
46
+ lineHeight: 1.20
47
+ letterSpacing: 0
48
+ headline:
49
+ fontFamily: IBM Plex Sans
50
+ fontSize: 32px
51
+ fontWeight: 400
52
+ lineHeight: 1.25
53
+ letterSpacing: 0
54
+ card-title:
55
+ fontFamily: IBM Plex Sans
56
+ fontSize: 24px
57
+ fontWeight: 400
58
+ lineHeight: 1.33
59
+ letterSpacing: 0
60
+ subhead:
61
+ fontFamily: IBM Plex Sans
62
+ fontSize: 20px
63
+ fontWeight: 400
64
+ lineHeight: 1.40
65
+ letterSpacing: 0
66
+ body-lg:
67
+ fontFamily: IBM Plex Sans
68
+ fontSize: 18px
69
+ fontWeight: 400
70
+ lineHeight: 1.50
71
+ letterSpacing: 0
72
+ body:
73
+ fontFamily: IBM Plex Sans
74
+ fontSize: 16px
75
+ fontWeight: 400
76
+ lineHeight: 1.50
77
+ letterSpacing: 0.16px
78
+ body-sm:
79
+ fontFamily: IBM Plex Sans
80
+ fontSize: 14px
81
+ fontWeight: 400
82
+ lineHeight: 1.29
83
+ letterSpacing: 0.16px
84
+ body-emphasis:
85
+ fontFamily: IBM Plex Sans
86
+ fontSize: 14px
87
+ fontWeight: 600
88
+ lineHeight: 1.29
89
+ letterSpacing: 0.16px
90
+ caption:
91
+ fontFamily: IBM Plex Sans
92
+ fontSize: 12px
93
+ fontWeight: 400
94
+ lineHeight: 1.33
95
+ letterSpacing: 0.32px
96
+ button:
97
+ fontFamily: IBM Plex Sans
98
+ fontSize: 14px
99
+ fontWeight: 400
100
+ lineHeight: 1.29
101
+ letterSpacing: 0.16px
102
+ eyebrow:
103
+ fontFamily: IBM Plex Sans
104
+ fontSize: 14px
105
+ fontWeight: 400
106
+ lineHeight: 1.29
107
+ letterSpacing: 0.16px
108
+
109
+ rounded:
110
+ none: 0px
111
+ xs: 2px
112
+ sm: 4px
113
+ md: 6px
114
+ lg: 8px
115
+ pill: 9999px
116
+ full: 9999px
117
+
118
+ spacing:
119
+ xxs: 4px
120
+ xs: 8px
121
+ sm: 12px
122
+ md: 16px
123
+ lg: 24px
124
+ xl: 32px
125
+ xxl: 48px
126
+ section: 96px
127
+
128
+ components:
129
+ button-primary:
130
+ backgroundColor: "{colors.primary}"
131
+ textColor: "{colors.on-primary}"
132
+ typography: "{typography.button}"
133
+ rounded: "{rounded.none}"
134
+ padding: 12px 16px
135
+ button-primary-pressed:
136
+ backgroundColor: "{colors.blue-80}"
137
+ textColor: "{colors.on-primary}"
138
+ typography: "{typography.button}"
139
+ rounded: "{rounded.none}"
140
+ button-secondary:
141
+ backgroundColor: "{colors.ink}"
142
+ textColor: "{colors.inverse-ink}"
143
+ typography: "{typography.button}"
144
+ rounded: "{rounded.none}"
145
+ padding: 12px 16px
146
+ button-tertiary:
147
+ backgroundColor: "{colors.canvas}"
148
+ textColor: "{colors.primary}"
149
+ typography: "{typography.button}"
150
+ rounded: "{rounded.none}"
151
+ padding: 12px 16px
152
+ button-ghost:
153
+ backgroundColor: "{colors.canvas}"
154
+ textColor: "{colors.primary}"
155
+ typography: "{typography.button}"
156
+ rounded: "{rounded.none}"
157
+ padding: 12px 16px
158
+ button-danger:
159
+ backgroundColor: "{colors.semantic-error}"
160
+ textColor: "{colors.on-primary}"
161
+ typography: "{typography.button}"
162
+ rounded: "{rounded.none}"
163
+ padding: 12px 16px
164
+ feature-card:
165
+ backgroundColor: "{colors.canvas}"
166
+ textColor: "{colors.ink}"
167
+ typography: "{typography.body}"
168
+ rounded: "{rounded.none}"
169
+ padding: 24px
170
+ feature-card-elevated:
171
+ backgroundColor: "{colors.surface-1}"
172
+ textColor: "{colors.ink}"
173
+ typography: "{typography.body}"
174
+ rounded: "{rounded.none}"
175
+ padding: 24px
176
+ product-card:
177
+ backgroundColor: "{colors.canvas}"
178
+ textColor: "{colors.ink}"
179
+ typography: "{typography.body}"
180
+ rounded: "{rounded.none}"
181
+ padding: 32px
182
+ hero-card:
183
+ backgroundColor: "{colors.canvas}"
184
+ textColor: "{colors.ink}"
185
+ typography: "{typography.display-md}"
186
+ rounded: "{rounded.none}"
187
+ padding: 48px
188
+ cta-banner:
189
+ backgroundColor: "{colors.primary}"
190
+ textColor: "{colors.on-primary}"
191
+ typography: "{typography.headline}"
192
+ rounded: "{rounded.none}"
193
+ padding: 48px
194
+ text-input:
195
+ backgroundColor: "{colors.surface-1}"
196
+ textColor: "{colors.ink}"
197
+ typography: "{typography.body}"
198
+ rounded: "{rounded.none}"
199
+ padding: 11px 16px
200
+ text-input-focused:
201
+ backgroundColor: "{colors.surface-1}"
202
+ textColor: "{colors.ink}"
203
+ typography: "{typography.body}"
204
+ rounded: "{rounded.none}"
205
+ padding: 11px 16px
206
+ text-input-error:
207
+ backgroundColor: "{colors.surface-1}"
208
+ textColor: "{colors.ink}"
209
+ typography: "{typography.body}"
210
+ rounded: "{rounded.none}"
211
+ padding: 11px 16px
212
+ newsletter-input:
213
+ backgroundColor: "{colors.surface-1}"
214
+ textColor: "{colors.ink}"
215
+ typography: "{typography.body}"
216
+ rounded: "{rounded.none}"
217
+ padding: 11px 16px
218
+ product-tab:
219
+ backgroundColor: "{colors.canvas}"
220
+ textColor: "{colors.ink-muted}"
221
+ typography: "{typography.body-sm}"
222
+ rounded: "{rounded.none}"
223
+ padding: 16px 20px
224
+ product-tab-selected:
225
+ backgroundColor: "{colors.canvas}"
226
+ textColor: "{colors.ink}"
227
+ typography: "{typography.body-emphasis}"
228
+ rounded: "{rounded.none}"
229
+ padding: 16px 20px
230
+ resource-tile:
231
+ backgroundColor: "{colors.canvas}"
232
+ textColor: "{colors.ink}"
233
+ typography: "{typography.body-sm}"
234
+ rounded: "{rounded.none}"
235
+ padding: 16px
236
+ customer-logo-tile:
237
+ backgroundColor: "{colors.canvas}"
238
+ textColor: "{colors.ink-muted}"
239
+ typography: "{typography.caption}"
240
+ rounded: "{rounded.none}"
241
+ padding: 24px
242
+ top-nav:
243
+ backgroundColor: "{colors.canvas}"
244
+ textColor: "{colors.ink}"
245
+ typography: "{typography.body-sm}"
246
+ rounded: "{rounded.none}"
247
+ height: 48px
248
+ utility-bar:
249
+ backgroundColor: "{colors.surface-1}"
250
+ textColor: "{colors.ink-muted}"
251
+ typography: "{typography.caption}"
252
+ rounded: "{rounded.none}"
253
+ height: 32px
254
+ footer:
255
+ backgroundColor: "{colors.inverse-canvas}"
256
+ textColor: "{colors.inverse-ink-muted}"
257
+ typography: "{typography.body-sm}"
258
+ rounded: "{rounded.none}"
259
+ padding: 64px 32px
260
+ ---
261
+
262
+ ## Overview
263
+
264
+ IBM's marketing system is a faithful application of **Carbon Design System** — IBM's open-source enterprise design system. The dominant surface is `{colors.canvas}` pure white with `{colors.surface-1}` light gray for elevation, charcoal `{colors.ink}` (#161616) for text, and IBM Blue `{colors.primary}` (#0f62fe) as the single brand accent.
265
+
266
+ The defining choice is **flat geometry**: every CTA, every card, every input, every container uses square corners (`{rounded.none}` 0px) with thin 1px borders. There are no rounded pills, no soft shadows, no atmospheric gradients. The system is engineered, not stylized.
267
+
268
+ **IBM Plex Sans** carries the entire type hierarchy. Display sizes (76 / 60 / 42px) run at weight **300** — IBM's signature light display treatment that makes 76px feel calmer than competing brands' 700-weight display. Body type sits at weight 400 with `letter-spacing: 0.16px` (a Carbon precision detail) and line-height 1.50. The voice reads as careful, technical, and trustworthy.
269
+
270
+ The system reaches for color rarely — IBM Blue marks links, primary CTAs, and the rare full-bleed CTA banner. Charcoal carries every other surface that isn't white. The result is enterprise gravitas without the enterprise stiffness: rigorous, light-weighted, and intentionally restrained.
271
+
272
+ **Key Characteristics:**
273
+ - **Carbon Design System** — IBM's marketing chrome IS Carbon. Buttons are square, inputs are square-with-bottom-rule, corners stay at 0px.
274
+ - **Light-weight display type**: Plex Sans at weight 300 for 42–76px headlines is the brand's typographic signature.
275
+ - **One accent color**: `{colors.primary}` IBM Blue carries every link, primary CTA, and CTA banner. There is no second brand color.
276
+ - White canvas + light gray (`{colors.surface-1}`) + charcoal (`{colors.ink}`) cover 95% of surfaces.
277
+ - Footer inverts to charcoal (`{colors.inverse-canvas}` #161616) — the only dark surface above the page break.
278
+ - Card hierarchy is carried by 1px hairlines and surface change, never by drop shadow.
279
+ - `letter-spacing: 0.16px` on body is a Carbon precision detail — the small positive tracking is part of the brand voice.
280
+ - Page rhythm: utility bar → top nav → hero with light-weight headline → feature card grid → customer logo marquee → enterprise feature row → training section → newsletter / sign-in CTA → dark footer.
281
+
282
+ ## Colors
283
+
284
+ > Source pages: ibm.com (home), /software/ai-productivity, /consulting, /products/cloud-pak-for-aiops, /products/bare-metal-servers, community.ibm.com.
285
+
286
+ ### Brand & Accent
287
+ - **IBM Blue** ({colors.primary}): The single brand accent. Links, primary CTAs, CTA banner backgrounds, focus rings.
288
+ - **Blue 60** ({colors.blue-60}): Hovered link state.
289
+ - **Blue 80** ({colors.blue-80}): Pressed primary button.
290
+ - **Blue Hover** ({colors.blue-hover}): Hover state for primary buttons.
291
+
292
+ ### Surface
293
+ - **Canvas** ({colors.canvas}): Default page background.
294
+ - **Surface 1** ({colors.surface-1}): Light gray (#f4f4f4) — input fields, alternate-row stripes, subtle section bands.
295
+ - **Surface 2** ({colors.surface-2}): Slightly darker gray (#e0e0e0) — disabled fields, hairline-as-fill for separators.
296
+ - **Hairline** ({colors.hairline}): 1px borders on cards, inputs, dividers.
297
+ - **Hairline Strong** ({colors.hairline-strong}): 1px charcoal underline on focused inputs (Carbon's signature focus treatment).
298
+ - **Inverse Canvas** ({colors.inverse-canvas}): Charcoal #161616 — footer surface.
299
+ - **Inverse Surface 1** ({colors.inverse-surface-1}): One step lighter than inverse canvas — footer column dividers, hovered footer items.
300
+
301
+ ### Text
302
+ - **Ink** ({colors.ink}): All headlines and emphasized body type — charcoal #161616.
303
+ - **Ink Muted** ({colors.ink-muted}): Secondary type at #525252 — meta, sub-headlines, footer body.
304
+ - **Ink Subtle** ({colors.ink-subtle}): Tertiary type at #8c8c8c — disabled, helper text, captions.
305
+ - **Inverse Ink** ({colors.inverse-ink}): White on charcoal — footer headings.
306
+ - **Inverse Ink Muted** ({colors.inverse-ink-muted}): Light gray on charcoal — footer body.
307
+
308
+ ### Semantic
309
+ - **Success Green** ({colors.semantic-success}): Carbon green-50 — success states.
310
+ - **Warning Yellow** ({colors.semantic-warning}): Carbon yellow-30 — warning states.
311
+ - **Error Red** ({colors.semantic-error}): Carbon red-60 — error states; danger button background.
312
+ - **Info Blue** ({colors.semantic-info}): Identical to primary — informational badges.
313
+
314
+ ## Typography
315
+
316
+ ### Font Family
317
+
318
+ - **IBM Plex Sans** — IBM's open-source proprietary typeface (free for any use). Geometric, slightly humanist, designed specifically for enterprise UI. Fallback: `Helvetica Neue, Arial, sans-serif`.
319
+
320
+ The same family carries display, body, and caption — there is no display + body pairing. Hierarchy is carried by **size + weight** rather than by family change. Plex Sans is also free / open-source under the SIL Open Font License — making it the easiest custom face on this list to substitute for in implementation.
321
+
322
+ ### Hierarchy
323
+
324
+ | Token | Size | Weight | Line Height | Letter Spacing | Use |
325
+ |---|---|---|---|---|---|
326
+ | `{typography.display-xl}` | 76px | 300 | 1.17 | -0.5px | Largest hero headline |
327
+ | `{typography.display-lg}` | 60px | 300 | 1.17 | -0.4px | Section opener headlines |
328
+ | `{typography.display-md}` | 42px | 300 | 1.20 | 0 | Sub-section headlines, hero card title |
329
+ | `{typography.headline}` | 32px | 400 | 1.25 | 0 | Card collection heading, FAQ category |
330
+ | `{typography.card-title}` | 24px | 400 | 1.33 | 0 | Feature card title |
331
+ | `{typography.subhead}` | 20px | 400 | 1.40 | 0 | Lead body next to display headlines |
332
+ | `{typography.body-lg}` | 18px | 400 | 1.50 | 0 | Hero subhead, lead paragraphs |
333
+ | `{typography.body}` | 16px | 400 | 1.50 | 0.16px | Default body |
334
+ | `{typography.body-sm}` | 14px | 400 | 1.29 | 0.16px | Card body, footer columns |
335
+ | `{typography.body-emphasis}` | 14px | 600 | 1.29 | 0.16px | Selected tab label, emphasized body line |
336
+ | `{typography.caption}` | 12px | 400 | 1.33 | 0.32px | Captions, meta, utility bar |
337
+ | `{typography.button}` | 14px | 400 | 1.29 | 0.16px | All button labels |
338
+ | `{typography.eyebrow}` | 14px | 400 | 1.29 | 0.16px | Section eyebrows (Carbon avoids strong eyebrows; uses sentence case 14px) |
339
+
340
+ ### Principles
341
+
342
+ - **Light-weight display is the brand voice.** Plex Sans at weight 300 for 76px headlines reads as quietly authoritative — switching to 700 would make it look like every other enterprise site.
343
+ - **Carbon's `letter-spacing: 0.16px`** on body sizes is a precision detail. Don't remove it.
344
+ - **No mono** on marketing surfaces (Plex Mono exists but lives in product surfaces only).
345
+ - **Eyebrow typography uses sentence case 14px** — Carbon resists the all-caps tracked eyebrow common to other enterprise brands.
346
+ - **Line-heights tighten on display, relax on body**: 1.17 at display-xl, 1.50 at body — proportional to size.
347
+
348
+ ### Note on Font Substitutes
349
+
350
+ IBM Plex Sans is **free and open-source** (SIL OFL license) and available on Google Fonts. It is the recommended implementation. The Plex family also includes Plex Mono and Plex Serif if expanded typographic needs arise.
351
+
352
+ ## Layout
353
+
354
+ ### Spacing System
355
+
356
+ - **Base unit**: 4px (Carbon's signature 4-pixel grid).
357
+ - **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.
358
+ - Card interior padding: `{spacing.lg}` 24px on feature cards; `{spacing.xl}` 32px on product cards; `{spacing.xxl}` 48px on hero cards and CTA banners.
359
+ - Button padding: 12px vertical · 16px horizontal — Carbon spec.
360
+ - Form input padding: 11px vertical · 16px horizontal.
361
+
362
+ ### Grid & Container
363
+
364
+ - Carbon's 16-column grid at desktop, scaling to 8 / 4 columns at tablet / mobile.
365
+ - Max content width sits around 1584px (Carbon's max-grid breakpoint).
366
+ - Card grids are 4-up at desktop, 2-up at tablet, 1-up at mobile.
367
+ - The customer logo marquee uses fixed-width tiles in a flex row, scrolling horizontally on smaller viewports.
368
+
369
+ ### Whitespace Philosophy
370
+
371
+ Carbon uses precise alignment to a 4-pixel grid as its whitespace system. Sections separate via thin gray rows (`{colors.surface-1}`) rather than via large vertical gaps. Content is dense by design — IBM's customers expect to see a lot on a page, not a lot of air.
372
+
373
+ ## Elevation & Depth
374
+
375
+ | Level | Treatment | Use |
376
+ |---|---|---|
377
+ | 0 (flat) | No shadow, no border | Default for body type, hero text, footer body |
378
+ | 1 (hairline) | 1px `{colors.hairline}` border on canvas | Feature cards, inputs, list items |
379
+ | 2 (surface lift) | `{colors.surface-1}` background on canvas | Alternate-row banners, hovered cards |
380
+ | 3 (focus ring) | 2px `{colors.primary}` outline + 1px `{colors.hairline-strong}` underline | Focused input, focused button |
381
+
382
+ Carbon resists drop shadows on marketing — depth is carried by surface change and 1px hairlines. The exception is product / app surfaces (Carbon documents shadow tokens for elevated panels), but the marketing site barely uses them.
383
+
384
+ ### Decorative Depth
385
+
386
+ - **Soft blue gradient backdrops** appear behind some hero illustrations — a faint blue-to-white wash that warms the canvas without competing with the headline.
387
+ - **No atmospheric depth.** No spotlight cards, no pastel section blocks, no gradient panels.
388
+
389
+ ## Shapes
390
+
391
+ ### Border Radius Scale
392
+
393
+ | Token | Value | Use |
394
+ |---|---|---|
395
+ | `{rounded.none}` | 0px | Default — every button, card, input, container |
396
+ | `{rounded.xs}` | 2px | Small badges (rare exception) |
397
+ | `{rounded.sm}` | 4px | Avatar circles squared, dropdown menus |
398
+ | `{rounded.md}` | 6px | (Used rarely; documented for completeness) |
399
+ | `{rounded.lg}` | 8px | (Used rarely; documented for completeness) |
400
+ | `{rounded.pill}` | 9999px | Status pills, badges in product UI (rare on marketing) |
401
+
402
+ The brand commits to flat 0px corners. The other tokens exist for product / mobile surfaces but rarely surface on marketing.
403
+
404
+ ### Photography & Illustration Geometry
405
+
406
+ - IBM uses photography (people, hardware, sports cars) and abstract illustration (geometric mesh, dotted patterns) interchangeably.
407
+ - Image frames are flat — no rounded corners.
408
+ - Customer logo tiles sit on `{rounded.none}` 0px tiles with thin 1px borders.
409
+
410
+ ## Components
411
+
412
+ ### Buttons
413
+
414
+ **`button-primary`** — Blue solid CTA. The default primary across all pages.
415
+ - Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button}`, padding 12px 16px, rounded `{rounded.none}`.
416
+ - Pressed state lives in `button-primary-pressed` (background shifts to `{colors.blue-80}`).
417
+
418
+ **`button-secondary`** — Charcoal solid button — Carbon's "secondary" treatment.
419
+ - Background `{colors.ink}`, text `{colors.inverse-ink}`, type `{typography.button}`, padding 12px 16px, rounded `{rounded.none}`.
420
+
421
+ **`button-tertiary`** — White button with blue 1px border + blue text. Used for tertiary CTAs.
422
+ - Background `{colors.canvas}`, text `{colors.primary}`, type `{typography.button}`, rounded `{rounded.none}`, padding 12px 16px. (Border in implementation: 1px `{colors.primary}`.)
423
+
424
+ **`button-ghost`** — Plain text + chevron, no background until hover.
425
+ - Background `{colors.canvas}`, text `{colors.primary}`, type `{typography.button}`, rounded `{rounded.none}`, padding 12px 16px.
426
+
427
+ **`button-danger`** — Carbon's destructive variant.
428
+ - Background `{colors.semantic-error}`, text `{colors.on-primary}`, type `{typography.button}`, rounded `{rounded.none}`, padding 12px 16px.
429
+
430
+ ### Cards & Containers
431
+
432
+ **`feature-card`** — Default feature highlight tile on the home and product pages.
433
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.none}`, padding 24px. Stroked with 1px `{colors.hairline}`.
434
+
435
+ **`feature-card-elevated`** — Same shape on `{colors.surface-1}` ground — used for "Recommended" cards in the latest-content carousel.
436
+ - Background `{colors.surface-1}`, otherwise identical structure.
437
+
438
+ **`product-card`** — Larger product showcase tile.
439
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.none}`, padding 32px.
440
+
441
+ **`hero-card`** — Hero composition card with light-weight title, body, and CTA.
442
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.display-md}`, rounded `{rounded.none}`, padding 48px.
443
+
444
+ **`cta-banner`** — Full-width blue CTA panel near the bottom of the page.
445
+ - Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.headline}`, rounded `{rounded.none}`, padding 48px.
446
+
447
+ **`resource-tile`** — Smaller article / case-study tile.
448
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-sm}`, rounded `{rounded.none}`, padding 16px.
449
+
450
+ **`customer-logo-tile`** — Single tile in the customer marquee on the home page (Ferrari, Pfizer, etc.).
451
+ - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.caption}`, rounded `{rounded.none}`, padding 24px. 1px hairline border.
452
+
453
+ ### Inputs & Forms
454
+
455
+ **`text-input`** + **`text-input-focused`** + **`text-input-error`** — Carbon's input chrome.
456
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.none}`, padding 11px 16px.
457
+ - Focus state replaces the bottom 1px hairline with a 2px `{colors.primary}` underline (Carbon's signature focus treatment).
458
+ - Error state adds 2px `{colors.semantic-error}` bottom underline.
459
+
460
+ **`newsletter-input`** — The "Stay connected" newsletter capture on the home page.
461
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.none}`, padding 11px 16px. Adjacent submit is `button-primary`.
462
+
463
+ ### Tabs
464
+
465
+ **`product-tab`** + **`product-tab-selected`** — The horizontal tab strip on product pages and the home "Recommended" carousel.
466
+ - Default: `{colors.canvas}` background, `{colors.ink-muted}` text, rounded `{rounded.none}`, padding 16px 20px. Bottom 1px hairline.
467
+ - Selected: `{colors.canvas}` background, `{colors.ink}` text, `{typography.body-emphasis}` weight, bottom 2px `{colors.primary}` underline. Same padding / rounding.
468
+
469
+ ### Navigation
470
+
471
+ **`top-nav`** — Sticky white bar with the IBM logomark left, nav categories center, and search / sign-in icons right.
472
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-sm}`, height 48px. 1px bottom hairline.
473
+
474
+ **`utility-bar`** — Slim gray ribbon above the top nav with location switch, contact, search shortcuts.
475
+ - Background `{colors.surface-1}`, text `{colors.ink-muted}`, type `{typography.caption}`, height 32px.
476
+
477
+ ### Footer
478
+
479
+ **`footer`** — Charcoal footer (`{colors.inverse-canvas}`) with the IBM wordmark left and 5–6 columns of caption-sized links. The only inverted surface above the page break.
480
+ - Background `{colors.inverse-canvas}`, text `{colors.inverse-ink-muted}`, type `{typography.body-sm}`, padding 64px 32px.
481
+
482
+ ## Do's and Don'ts
483
+
484
+ ### Do
485
+
486
+ - Use `{rounded.none}` 0px on every CTA, card, input, and container. The flat-square aesthetic is the brand.
487
+ - Pair Plex Sans weight 300 for display sizes (42px+) with weight 400 for body. Resist the urge to bold the headline.
488
+ - Reserve `{colors.primary}` IBM Blue for primary CTAs, links, focused-input underlines, and CTA banner. Do not use it as a card background or eyebrow color.
489
+ - Apply `letter-spacing: 0.16px` to body sizes. It's a Carbon precision detail and part of the typographic voice.
490
+ - Use surface change (`canvas` → `surface-1`) and 1px hairlines for card hierarchy. Skip drop shadows.
491
+ - Stick to sentence case for eyebrows and section labels — Carbon resists all-caps tracking.
492
+ - Invert to `{colors.inverse-canvas}` only at the footer; the rest of the page stays light.
493
+
494
+ ### Don't
495
+
496
+ - Don't round corners on buttons, cards, or inputs. Even 4px rounded corners break the Carbon look.
497
+ - Don't bold display headlines. Plex Sans at weight 300 is the brand voice; weight 700 makes it look generic.
498
+ - Don't add atmospheric depth (gradient backdrops, drop shadows, atmospheric overlays) outside the documented soft-blue hero gradient.
499
+ - Don't introduce a second brand color. IBM Blue is the only chromatic accent; status semantics use the documented green / yellow / red.
500
+ - Don't replace IBM Plex Sans with Inter or Helvetica without preserving the `letter-spacing: 0.16px` and weight-300 display treatment.
501
+ - Don't use pill-shaped buttons. Carbon uses square corners; pills read as a different brand.
502
+ - Don't write all-caps tracked eyebrows. Carbon's eyebrows are sentence case at 14px.
503
+
504
+ ## Responsive Behavior
505
+
506
+ ### Breakpoints
507
+
508
+ | Name | Width | Key Changes |
509
+ |---|---|---|
510
+ | Max | 1584px | Carbon max grid; gutters expand |
511
+ | Desktop-XL | 1312px | Default desktop layout |
512
+ | Desktop | 1056px | Card grid 4-up maintained |
513
+ | Tablet | 672px | Card grid 4-up → 2-up; nav becomes hamburger |
514
+ | Mobile | 320px | Single-column; display-xl scales 76px → ~32px |
515
+
516
+ ### Touch Targets
517
+
518
+ - Carbon spec: 48px minimum tap target. Buttons and inputs hold 48px on touch viewports.
519
+ - Top-nav links grow from 36px to 48px tap height on touch.
520
+ - Tab strip rows hold 48px tap height.
521
+
522
+ ### Collapsing Strategy
523
+
524
+ - **Top nav**: links collapse to a hamburger overlay below 672px. Logomark and search icon stay on the bar.
525
+ - **Utility bar**: hides below 672px to reclaim vertical space.
526
+ - **Card grid**: 4-up → 2-up at 1056px → 1-up below 672px.
527
+ - **Display type**: `{typography.display-xl}` 76px scales toward 42px on mobile while preserving the weight-300 treatment.
528
+ - **Footer**: 6-column link grid → 3-column at tablet → 1-column at mobile.
529
+
530
+ ### Image Behavior
531
+
532
+ - Customer logos in the marquee maintain aspect ratio and may collapse to 2-row scroll below 672px.
533
+ - Hero illustrations scale proportionally; below 672px they may stack above the headline rather than sit beside it.
534
+
535
+ ## Iteration Guide
536
+
537
+ 1. Focus on ONE component at a time and reference it by its `components:` token name.
538
+ 2. Default body to `{typography.body}` at weight 400 with `letter-spacing: 0.16px`. Don't remove the tracking.
539
+ 3. When introducing a new section, decide whether it sits on `{colors.canvas}` (default) or on `{colors.surface-1}` (alternate band). The two-surface rhythm is the rhythm.
540
+ 4. Run `npx @google/design.md lint DESIGN.md` after edits.
541
+ 5. Add new variants as separate component entries (`button-primary-pressed`, `text-input-error`, `text-input-focused`).
542
+ 6. Treat IBM Blue as scarce: links, primary CTA, CTA banner, focus underline. Anything beyond that is drift.
543
+ 7. Resist rounded corners. If a designer pushes for 4px rounding, the brand is shifting away from Carbon.
544
+
545
+ ## Known Gaps
546
+
547
+ - IBM's product surfaces (cloud-pak, watson, datacap) have richer Carbon component usage (data tables, graph cells, breadcrumbs, contextual menus) that aren't present on the marketing pages inspected — those components live in Carbon's documentation rather than in the marketing extraction.
548
+ - Form-field error and validation styling is documented in Carbon docs; the inspected pages didn't render error states.
549
+ - Dark mode is documented in Carbon as Gray-100 theme but isn't exposed on these marketing pages — only the footer inverts. The full dark theme is a separate Carbon palette not extracted here.
550
+ - The community.ibm.com sub-domain uses a different chrome (community-platform white-label) that approximates Carbon but isn't strict — the documented system applies to ibm.com proper.
@@ -0,0 +1,5 @@
1
+ # IBM Inspired Design System
2
+
3
+ Design system details have been moved to: https://getdesign.md/ibm/design-md
4
+
5
+ You can also view previews, dark mode examples, and download options on getdesign.md.