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.
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/bin/relay.js +362 -0
- package/design-md/airbnb/DESIGN.md +545 -0
- package/design-md/airbnb/README.md +5 -0
- package/design-md/airtable/DESIGN.md +554 -0
- package/design-md/airtable/README.md +5 -0
- package/design-md/apple/DESIGN.md +562 -0
- package/design-md/apple/README.md +5 -0
- package/design-md/binance/DESIGN.md +634 -0
- package/design-md/binance/README.md +5 -0
- package/design-md/bmw/DESIGN.md +544 -0
- package/design-md/bmw/README.md +5 -0
- package/design-md/bmw-m/DESIGN.md +503 -0
- package/design-md/bmw-m/README.md +5 -0
- package/design-md/bugatti/DESIGN.md +454 -0
- package/design-md/bugatti/README.md +5 -0
- package/design-md/cal/DESIGN.md +542 -0
- package/design-md/cal/README.md +5 -0
- package/design-md/claude/DESIGN.md +589 -0
- package/design-md/claude/README.md +5 -0
- package/design-md/clay/DESIGN.md +541 -0
- package/design-md/clay/README.md +5 -0
- package/design-md/clickhouse/DESIGN.md +544 -0
- package/design-md/clickhouse/README.md +5 -0
- package/design-md/cohere/DESIGN.md +451 -0
- package/design-md/cohere/README.md +5 -0
- package/design-md/coinbase/DESIGN.md +570 -0
- package/design-md/coinbase/README.md +5 -0
- package/design-md/composio/DESIGN.md +506 -0
- package/design-md/composio/README.md +5 -0
- package/design-md/cursor/DESIGN.md +537 -0
- package/design-md/cursor/README.md +5 -0
- package/design-md/elevenlabs/DESIGN.md +504 -0
- package/design-md/elevenlabs/README.md +5 -0
- package/design-md/expo/DESIGN.md +526 -0
- package/design-md/expo/README.md +5 -0
- package/design-md/ferrari/DESIGN.md +531 -0
- package/design-md/ferrari/README.md +5 -0
- package/design-md/figma/DESIGN.md +578 -0
- package/design-md/figma/README.md +5 -0
- package/design-md/framer/DESIGN.md +544 -0
- package/design-md/framer/README.md +5 -0
- package/design-md/hashicorp/DESIGN.md +575 -0
- package/design-md/hashicorp/README.md +5 -0
- package/design-md/ibm/DESIGN.md +550 -0
- package/design-md/ibm/README.md +5 -0
- package/design-md/intercom/DESIGN.md +546 -0
- package/design-md/intercom/README.md +5 -0
- package/design-md/kraken/DESIGN.md +125 -0
- package/design-md/kraken/README.md +5 -0
- package/design-md/lamborghini/DESIGN.md +288 -0
- package/design-md/lamborghini/README.md +5 -0
- package/design-md/linear.app/DESIGN.md +548 -0
- package/design-md/linear.app/README.md +5 -0
- package/design-md/lovable/DESIGN.md +298 -0
- package/design-md/lovable/README.md +5 -0
- package/design-md/mastercard/DESIGN.md +365 -0
- package/design-md/mastercard/README.md +5 -0
- package/design-md/meta/DESIGN.md +683 -0
- package/design-md/meta/README.md +5 -0
- package/design-md/minimax/DESIGN.md +746 -0
- package/design-md/minimax/README.md +5 -0
- package/design-md/mintlify/DESIGN.md +852 -0
- package/design-md/mintlify/README.md +5 -0
- package/design-md/miro/DESIGN.md +825 -0
- package/design-md/miro/README.md +5 -0
- package/design-md/mistral.ai/DESIGN.md +773 -0
- package/design-md/mistral.ai/README.md +5 -0
- package/design-md/mongodb/DESIGN.md +767 -0
- package/design-md/mongodb/README.md +5 -0
- package/design-md/nike/DESIGN.md +575 -0
- package/design-md/nike/README.md +5 -0
- package/design-md/notion/DESIGN.md +821 -0
- package/design-md/notion/README.md +5 -0
- package/design-md/nvidia/DESIGN.md +640 -0
- package/design-md/nvidia/README.md +5 -0
- package/design-md/ollama/DESIGN.md +539 -0
- package/design-md/ollama/README.md +5 -0
- package/design-md/opencode.ai/DESIGN.md +521 -0
- package/design-md/opencode.ai/README.md +5 -0
- package/design-md/pinterest/DESIGN.md +597 -0
- package/design-md/pinterest/README.md +5 -0
- package/design-md/playstation/DESIGN.md +661 -0
- package/design-md/playstation/README.md +5 -0
- package/design-md/posthog/DESIGN.md +690 -0
- package/design-md/posthog/README.md +5 -0
- package/design-md/raycast/DESIGN.md +669 -0
- package/design-md/raycast/README.md +5 -0
- package/design-md/renault/DESIGN.md +589 -0
- package/design-md/renault/README.md +5 -0
- package/design-md/replicate/DESIGN.md +616 -0
- package/design-md/replicate/README.md +5 -0
- package/design-md/resend/DESIGN.md +585 -0
- package/design-md/resend/README.md +5 -0
- package/design-md/revolut/DESIGN.md +636 -0
- package/design-md/revolut/README.md +5 -0
- package/design-md/runwayml/DESIGN.md +244 -0
- package/design-md/runwayml/README.md +5 -0
- package/design-md/sanity/DESIGN.md +357 -0
- package/design-md/sanity/README.md +5 -0
- package/design-md/sentry/DESIGN.md +551 -0
- package/design-md/sentry/README.md +5 -0
- package/design-md/shopify/DESIGN.md +516 -0
- package/design-md/shopify/README.md +5 -0
- package/design-md/slack/DESIGN.md +482 -0
- package/design-md/spacex/DESIGN.md +363 -0
- package/design-md/spacex/README.md +5 -0
- package/design-md/spotify/DESIGN.md +246 -0
- package/design-md/spotify/README.md +5 -0
- package/design-md/starbucks/DESIGN.md +580 -0
- package/design-md/starbucks/README.md +5 -0
- package/design-md/stripe/DESIGN.md +487 -0
- package/design-md/stripe/README.md +5 -0
- package/design-md/supabase/DESIGN.md +462 -0
- package/design-md/supabase/README.md +5 -0
- package/design-md/superhuman/DESIGN.md +448 -0
- package/design-md/superhuman/README.md +5 -0
- package/design-md/tesla/DESIGN.md +286 -0
- package/design-md/tesla/README.md +5 -0
- package/design-md/theverge/DESIGN.md +339 -0
- package/design-md/theverge/README.md +5 -0
- package/design-md/together.ai/DESIGN.md +633 -0
- package/design-md/together.ai/README.md +5 -0
- package/design-md/uber/DESIGN.md +636 -0
- package/design-md/uber/README.md +5 -0
- package/design-md/vercel/DESIGN.md +736 -0
- package/design-md/vercel/README.md +5 -0
- package/design-md/vodafone/DESIGN.md +538 -0
- package/design-md/vodafone/README.md +5 -0
- package/design-md/voltagent/DESIGN.md +521 -0
- package/design-md/voltagent/README.md +5 -0
- package/design-md/warp/DESIGN.md +526 -0
- package/design-md/warp/README.md +5 -0
- package/design-md/webflow/DESIGN.md +588 -0
- package/design-md/webflow/README.md +5 -0
- package/design-md/wired/DESIGN.md +497 -0
- package/design-md/wired/README.md +5 -0
- package/design-md/wise/DESIGN.md +544 -0
- package/design-md/wise/README.md +5 -0
- package/design-md/x.ai/DESIGN.md +465 -0
- package/design-md/x.ai/README.md +5 -0
- package/design-md/zapier/DESIGN.md +537 -0
- package/design-md/zapier/README.md +5 -0
- package/package.json +31 -0
|
@@ -0,0 +1,588 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: alpha
|
|
3
|
+
name: Webflow Inspired
|
|
4
|
+
description: An inspired interpretation of Webflow's design language — a visual web development platform whose surface contrasts a deep near-black `#080808` primary against a generous white canvas, broken by a five-stop chromatic accent system (purple / pink / blue / orange / green) that maps to the brand's product categories, and anchored by the proprietary WF Visual Sans family used at restrained 500 / 600 weights with negative tracking.
|
|
5
|
+
|
|
6
|
+
colors:
|
|
7
|
+
primary: "#080808"
|
|
8
|
+
on-primary: "#ffffff"
|
|
9
|
+
ink: "#080808"
|
|
10
|
+
ink-strong: "#222222"
|
|
11
|
+
body: "#363636"
|
|
12
|
+
body-mid: "#5a5a5a"
|
|
13
|
+
mute: "#898989"
|
|
14
|
+
mute-soft: "#ababab"
|
|
15
|
+
hairline: "#d8d8d8"
|
|
16
|
+
canvas: "#ffffff"
|
|
17
|
+
accent-purple: "#7a3dff"
|
|
18
|
+
accent-pink: "#ed52cb"
|
|
19
|
+
accent-blue: "#3b89ff"
|
|
20
|
+
accent-blue-deep: "#006acc"
|
|
21
|
+
accent-blue-info: "#146ef5"
|
|
22
|
+
accent-orange: "#ff6b00"
|
|
23
|
+
accent-green: "#00d722"
|
|
24
|
+
accent-yellow: "#ffae13"
|
|
25
|
+
accent-red: "#ee1d36"
|
|
26
|
+
|
|
27
|
+
typography:
|
|
28
|
+
display-xxl:
|
|
29
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, -apple-system, sans-serif
|
|
30
|
+
fontSize: 80px
|
|
31
|
+
fontWeight: 600
|
|
32
|
+
lineHeight: 83.2px
|
|
33
|
+
letterSpacing: -0.8px
|
|
34
|
+
display-xl:
|
|
35
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
36
|
+
fontSize: 56px
|
|
37
|
+
fontWeight: 600
|
|
38
|
+
lineHeight: 58.24px
|
|
39
|
+
display-lg:
|
|
40
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
41
|
+
fontSize: 44.8px
|
|
42
|
+
fontWeight: 600
|
|
43
|
+
lineHeight: 46.6px
|
|
44
|
+
display-md:
|
|
45
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
46
|
+
fontSize: 32px
|
|
47
|
+
fontWeight: 500
|
|
48
|
+
lineHeight: 41.6px
|
|
49
|
+
display-sm:
|
|
50
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
51
|
+
fontSize: 24px
|
|
52
|
+
fontWeight: 500
|
|
53
|
+
lineHeight: 31.2px
|
|
54
|
+
display-xs:
|
|
55
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
56
|
+
fontSize: 20px
|
|
57
|
+
fontWeight: 500
|
|
58
|
+
lineHeight: 28px
|
|
59
|
+
eyebrow-uppercase:
|
|
60
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
61
|
+
fontSize: 15px
|
|
62
|
+
fontWeight: 500
|
|
63
|
+
lineHeight: 19.5px
|
|
64
|
+
letterSpacing: 1.5px
|
|
65
|
+
eyebrow-uppercase-sm:
|
|
66
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
67
|
+
fontSize: 12px
|
|
68
|
+
fontWeight: 500
|
|
69
|
+
lineHeight: 12px
|
|
70
|
+
letterSpacing: 0.6px
|
|
71
|
+
body-lg:
|
|
72
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
73
|
+
fontSize: 28.8px
|
|
74
|
+
fontWeight: 400
|
|
75
|
+
lineHeight: 46.08px
|
|
76
|
+
letterSpacing: -0.288px
|
|
77
|
+
body-md:
|
|
78
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
79
|
+
fontSize: 16px
|
|
80
|
+
fontWeight: 400
|
|
81
|
+
lineHeight: 25.6px
|
|
82
|
+
letterSpacing: -0.16px
|
|
83
|
+
body-md-strong:
|
|
84
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
85
|
+
fontSize: 16px
|
|
86
|
+
fontWeight: 500
|
|
87
|
+
lineHeight: 25.6px
|
|
88
|
+
letterSpacing: -0.16px
|
|
89
|
+
body-sm:
|
|
90
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
91
|
+
fontSize: 14px
|
|
92
|
+
fontWeight: 400
|
|
93
|
+
lineHeight: 22.4px
|
|
94
|
+
body-sm-strong:
|
|
95
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
96
|
+
fontSize: 14px
|
|
97
|
+
fontWeight: 500
|
|
98
|
+
lineHeight: 22.4px
|
|
99
|
+
caption:
|
|
100
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
101
|
+
fontSize: 12.8px
|
|
102
|
+
fontWeight: 550
|
|
103
|
+
lineHeight: 15.36px
|
|
104
|
+
caption-mono:
|
|
105
|
+
fontFamily: WFVisualSans-Mono, Inconsolata, ui-monospace, SFMono-Regular, Menlo, monospace
|
|
106
|
+
fontSize: 12px
|
|
107
|
+
fontWeight: 400
|
|
108
|
+
lineHeight: 18px
|
|
109
|
+
button-md:
|
|
110
|
+
fontFamily: WF Visual Sans Variable, Inter, system-ui, sans-serif
|
|
111
|
+
fontSize: 16px
|
|
112
|
+
fontWeight: 500
|
|
113
|
+
lineHeight: 25.6px
|
|
114
|
+
letterSpacing: -0.16px
|
|
115
|
+
|
|
116
|
+
rounded:
|
|
117
|
+
none: 0px
|
|
118
|
+
xs: 2px
|
|
119
|
+
sm: 4px
|
|
120
|
+
md: 8px
|
|
121
|
+
full: 9999px
|
|
122
|
+
|
|
123
|
+
spacing:
|
|
124
|
+
xxs: 2px
|
|
125
|
+
xs: 4px
|
|
126
|
+
sm: 8px
|
|
127
|
+
md: 12px
|
|
128
|
+
lg: 16px
|
|
129
|
+
xl: 20px
|
|
130
|
+
2xl: 24px
|
|
131
|
+
3xl: 32px
|
|
132
|
+
|
|
133
|
+
components:
|
|
134
|
+
nav-bar:
|
|
135
|
+
backgroundColor: "{colors.canvas}"
|
|
136
|
+
textColor: "{colors.ink}"
|
|
137
|
+
typography: "{typography.body-sm-strong}"
|
|
138
|
+
padding: "{spacing.lg} {spacing.3xl}"
|
|
139
|
+
nav-link:
|
|
140
|
+
textColor: "{colors.ink}"
|
|
141
|
+
typography: "{typography.body-sm-strong}"
|
|
142
|
+
button-primary:
|
|
143
|
+
backgroundColor: "{colors.primary}"
|
|
144
|
+
textColor: "{colors.on-primary}"
|
|
145
|
+
typography: "{typography.button-md}"
|
|
146
|
+
rounded: "{rounded.sm}"
|
|
147
|
+
padding: "{spacing.md} {spacing.xl}"
|
|
148
|
+
button-secondary:
|
|
149
|
+
backgroundColor: "{colors.canvas}"
|
|
150
|
+
textColor: "{colors.ink}"
|
|
151
|
+
borderColor: "{colors.hairline}"
|
|
152
|
+
typography: "{typography.button-md}"
|
|
153
|
+
rounded: "{rounded.sm}"
|
|
154
|
+
padding: "{spacing.md} {spacing.xl}"
|
|
155
|
+
button-text-arrow:
|
|
156
|
+
backgroundColor: "{colors.canvas}"
|
|
157
|
+
textColor: "{colors.ink}"
|
|
158
|
+
typography: "{typography.button-md}"
|
|
159
|
+
padding: "{spacing.xl} 0"
|
|
160
|
+
button-icon-circular:
|
|
161
|
+
backgroundColor: "{colors.canvas}"
|
|
162
|
+
textColor: "{colors.ink}"
|
|
163
|
+
rounded: "{rounded.full}"
|
|
164
|
+
padding: "{spacing.sm}"
|
|
165
|
+
text-input:
|
|
166
|
+
backgroundColor: "{colors.canvas}"
|
|
167
|
+
textColor: "{colors.ink}"
|
|
168
|
+
borderColor: "{colors.hairline}"
|
|
169
|
+
typography: "{typography.body-md}"
|
|
170
|
+
rounded: "{rounded.sm}"
|
|
171
|
+
padding: "{spacing.md} {spacing.lg}"
|
|
172
|
+
badge-info:
|
|
173
|
+
backgroundColor: "{colors.accent-blue-info}"
|
|
174
|
+
textColor: "{colors.on-primary}"
|
|
175
|
+
typography: "{typography.caption}"
|
|
176
|
+
rounded: "{rounded.sm}"
|
|
177
|
+
padding: "{spacing.xs} {spacing.sm}"
|
|
178
|
+
badge-info-soft:
|
|
179
|
+
backgroundColor: "{colors.canvas}"
|
|
180
|
+
textColor: "{colors.accent-blue-info}"
|
|
181
|
+
typography: "{typography.caption}"
|
|
182
|
+
rounded: "{rounded.sm}"
|
|
183
|
+
padding: "{spacing.xs} {spacing.sm}"
|
|
184
|
+
card-feature:
|
|
185
|
+
backgroundColor: "{colors.canvas}"
|
|
186
|
+
textColor: "{colors.ink}"
|
|
187
|
+
borderColor: "{colors.hairline}"
|
|
188
|
+
typography: "{typography.body-md}"
|
|
189
|
+
rounded: "{rounded.md}"
|
|
190
|
+
padding: "{spacing.3xl}"
|
|
191
|
+
card-feature-dark:
|
|
192
|
+
backgroundColor: "{colors.primary}"
|
|
193
|
+
textColor: "{colors.on-primary}"
|
|
194
|
+
typography: "{typography.body-md}"
|
|
195
|
+
rounded: "{rounded.md}"
|
|
196
|
+
padding: "{spacing.3xl}"
|
|
197
|
+
card-pricing:
|
|
198
|
+
backgroundColor: "{colors.canvas}"
|
|
199
|
+
textColor: "{colors.ink}"
|
|
200
|
+
borderColor: "{colors.hairline}"
|
|
201
|
+
typography: "{typography.body-md}"
|
|
202
|
+
rounded: "{rounded.md}"
|
|
203
|
+
padding: "{spacing.3xl}"
|
|
204
|
+
hero-band:
|
|
205
|
+
backgroundColor: "{colors.canvas}"
|
|
206
|
+
textColor: "{colors.ink}"
|
|
207
|
+
typography: "{typography.display-xxl}"
|
|
208
|
+
padding: "{spacing.3xl} {spacing.3xl}"
|
|
209
|
+
hero-band-dark:
|
|
210
|
+
backgroundColor: "{colors.primary}"
|
|
211
|
+
textColor: "{colors.on-primary}"
|
|
212
|
+
typography: "{typography.display-xxl}"
|
|
213
|
+
padding: "{spacing.3xl} {spacing.3xl}"
|
|
214
|
+
content-band:
|
|
215
|
+
backgroundColor: "{colors.canvas}"
|
|
216
|
+
textColor: "{colors.ink}"
|
|
217
|
+
typography: "{typography.display-lg}"
|
|
218
|
+
padding: "{spacing.3xl} {spacing.3xl}"
|
|
219
|
+
category-card-purple:
|
|
220
|
+
backgroundColor: "{colors.accent-purple}"
|
|
221
|
+
textColor: "{colors.on-primary}"
|
|
222
|
+
typography: "{typography.display-md}"
|
|
223
|
+
rounded: "{rounded.md}"
|
|
224
|
+
padding: "{spacing.3xl}"
|
|
225
|
+
category-card-blue:
|
|
226
|
+
backgroundColor: "{colors.accent-blue}"
|
|
227
|
+
textColor: "{colors.on-primary}"
|
|
228
|
+
typography: "{typography.display-md}"
|
|
229
|
+
rounded: "{rounded.md}"
|
|
230
|
+
padding: "{spacing.3xl}"
|
|
231
|
+
category-card-orange:
|
|
232
|
+
backgroundColor: "{colors.accent-orange}"
|
|
233
|
+
textColor: "{colors.on-primary}"
|
|
234
|
+
typography: "{typography.display-md}"
|
|
235
|
+
rounded: "{rounded.md}"
|
|
236
|
+
padding: "{spacing.3xl}"
|
|
237
|
+
category-card-green:
|
|
238
|
+
backgroundColor: "{colors.accent-green}"
|
|
239
|
+
textColor: "{colors.primary}"
|
|
240
|
+
typography: "{typography.display-md}"
|
|
241
|
+
rounded: "{rounded.md}"
|
|
242
|
+
padding: "{spacing.3xl}"
|
|
243
|
+
category-card-pink:
|
|
244
|
+
backgroundColor: "{colors.accent-pink}"
|
|
245
|
+
textColor: "{colors.on-primary}"
|
|
246
|
+
typography: "{typography.display-md}"
|
|
247
|
+
rounded: "{rounded.md}"
|
|
248
|
+
padding: "{spacing.3xl}"
|
|
249
|
+
footer:
|
|
250
|
+
backgroundColor: "{colors.canvas}"
|
|
251
|
+
textColor: "{colors.body-mid}"
|
|
252
|
+
typography: "{typography.body-sm}"
|
|
253
|
+
padding: "{spacing.3xl} {spacing.3xl}"
|
|
254
|
+
|
|
255
|
+
# ─── Examples (illustrative) — auto-derived; resolve any TO_FILL markers below ───
|
|
256
|
+
ex-pricing-tier:
|
|
257
|
+
description: "Default Pricing tier card. Re-uses feature-card chrome with brand canvas-soft surface."
|
|
258
|
+
backgroundColor: "{colors.canvas}"
|
|
259
|
+
textColor: "{colors.ink}"
|
|
260
|
+
borderColor: "{colors.hairline}"
|
|
261
|
+
rounded: "{rounded.md}"
|
|
262
|
+
padding: "{spacing.3xl}"
|
|
263
|
+
ex-pricing-tier-featured:
|
|
264
|
+
description: "Featured/highlighted tier — polarity-flipped surface (dark fill + light text in light mode, light fill + dark text in dark mode)."
|
|
265
|
+
backgroundColor: "{colors.ink}"
|
|
266
|
+
textColor: "{colors.on-primary}"
|
|
267
|
+
rounded: "{rounded.md}"
|
|
268
|
+
padding: "{spacing.3xl}"
|
|
269
|
+
ex-product-selector:
|
|
270
|
+
description: "What's Included summary card — re-purposed for SaaS / B2B verticals (NOT a literal product gallery)."
|
|
271
|
+
backgroundColor: "{colors.canvas}"
|
|
272
|
+
rounded: "{rounded.md}"
|
|
273
|
+
padding: "{spacing.3xl}"
|
|
274
|
+
ex-cart-drawer:
|
|
275
|
+
description: "Subscription summary — re-purposed for SaaS / B2B (line items per add-on, not literal cart)."
|
|
276
|
+
backgroundColor: "{colors.canvas}"
|
|
277
|
+
rounded: "{rounded.md}"
|
|
278
|
+
padding: "{spacing.2xl}"
|
|
279
|
+
item-divider: "{colors.hairline}"
|
|
280
|
+
ex-app-shell-row:
|
|
281
|
+
description: "Sidebar nav row inside the App Shell example. Active state uses brand primary as the indicator."
|
|
282
|
+
backgroundColor: "{colors.canvas}"
|
|
283
|
+
activeIndicator: "{colors.primary}"
|
|
284
|
+
rounded: "{rounded.sm}"
|
|
285
|
+
padding: "{spacing.md} {spacing.lg}"
|
|
286
|
+
ex-data-table-cell:
|
|
287
|
+
description: "Default data-table th + td chrome. Header uses mono-caps eyebrow typography; body uses body-sm."
|
|
288
|
+
headerBackground: "{colors.canvas}"
|
|
289
|
+
headerTypography: "{typography.caption}"
|
|
290
|
+
bodyTypography: "{typography.body-sm}"
|
|
291
|
+
cellPadding: "{spacing.md} {spacing.lg}"
|
|
292
|
+
rowBorder: "{colors.hairline}"
|
|
293
|
+
ex-auth-form-card:
|
|
294
|
+
description: "Sign-in / sign-up card. Re-uses feature-card chrome with text-input primitives inside."
|
|
295
|
+
backgroundColor: "{colors.canvas}"
|
|
296
|
+
rounded: "{rounded.md}"
|
|
297
|
+
padding: "{spacing.3xl}"
|
|
298
|
+
ex-modal-card:
|
|
299
|
+
description: "Modal dialog surface — same chrome as feature-card with elevated shadow."
|
|
300
|
+
backgroundColor: "{colors.canvas}"
|
|
301
|
+
rounded: "{rounded.md}"
|
|
302
|
+
padding: "{spacing.3xl}"
|
|
303
|
+
ex-empty-state-card:
|
|
304
|
+
description: "Empty-state illustration frame."
|
|
305
|
+
backgroundColor: "{colors.canvas}"
|
|
306
|
+
rounded: "{rounded.md}"
|
|
307
|
+
padding: "{spacing.3xl}"
|
|
308
|
+
captionTypography: "{typography.body-md}"
|
|
309
|
+
ex-toast:
|
|
310
|
+
description: "Toast notification surface — feature-card shape + medium shadow."
|
|
311
|
+
backgroundColor: "{colors.canvas}"
|
|
312
|
+
rounded: "{rounded.md}"
|
|
313
|
+
padding: "{spacing.md} {spacing.lg}"
|
|
314
|
+
typography: "{typography.body-sm}"
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
## Overview
|
|
320
|
+
|
|
321
|
+
Webflow positions itself as the visual web development platform — the marketing surface reads as a confident professional product, not a tech startup. The default page is a generous white canvas (`{colors.canvas}`) with a deep near-black `{colors.primary}` (`#080808`) for the brand's primary CTA, typography, and ink. Around this restrained primary, the brand layers a five-stop chromatic accent system — `{colors.accent-purple}` `#7a3dff`, `{colors.accent-pink}` `#ed52cb`, `{colors.accent-blue}` `#3b89ff`, `{colors.accent-orange}` `#ff6b00`, `{colors.accent-green}` `#00d722` — each mapped to one of the platform's product categories (design, CMS, hosting, ecommerce, etc.). These accents appear as full-card fills inside the product-category grid, not as button colours; the brand's primary CTA stays near-black.
|
|
322
|
+
|
|
323
|
+
Type carries the second decisive voice. The proprietary `WF Visual Sans Variable` family carries every display, body, and label role at weight 500 / 600 — the brand never goes heavier than semibold, never lighter than regular. Hero display sits at 80 px / weight 600 / `-0.8 px` tracking — confident but not shouting. Uppercase eyebrows in 15 px weight 500 with `1.5 px` positive tracking mark every section header.
|
|
324
|
+
|
|
325
|
+
The shape system is restrained. Buttons take a tight `{rounded.sm}` 4 px radius — neither pill nor square; the brand reads as engineered. Cards step up to `{rounded.md}` 8 px. Pill (`{rounded.full}` 9999 px) is reserved for circular icon containers. Layered drop-shadows on featured cards add modest elevation but never feel material-heavy.
|
|
326
|
+
|
|
327
|
+
**Key Characteristics:**
|
|
328
|
+
- A two-colour conversion hierarchy — `{colors.primary}` near-black for every primary CTA, white-on-hairline for every secondary. Chromatic accents are used as full surface fills on category cards, never as button backgrounds.
|
|
329
|
+
- The brand's signature is its **five-stop chromatic category palette**: purple / pink / blue / orange / green, each tied to a product surface. Used at full saturation as card fills.
|
|
330
|
+
- Hero typography at 80 px weight 600 with `-0.8 px` tracking — restrained, confident, never billboard-loud.
|
|
331
|
+
- WF Visual Sans Variable is the single family; the brand uses no separate sans for body / display. WFVisualSans-Mono / Inconsolata appears only for technical captions.
|
|
332
|
+
- Tight `{rounded.sm}` 4 px button geometry; cards at `{rounded.md}` 8 px. The brand never uses pill CTAs.
|
|
333
|
+
- Layered multi-offset drop-shadows on featured cards — the brand's only elevation cue.
|
|
334
|
+
|
|
335
|
+
## Colors
|
|
336
|
+
|
|
337
|
+
### Brand & Accent
|
|
338
|
+
- **Ink Black** (`{colors.primary}` — `#080808`): The brand's primary conversion colour. Every primary CTA, every heading, every wordmark. Deeper than pure black to read as branded.
|
|
339
|
+
- **Accent Purple** (`{colors.accent-purple}` — `#7a3dff`): One of the five chromatic category accents — used for design / build product surfaces.
|
|
340
|
+
- **Accent Pink** (`{colors.accent-pink}` — `#ed52cb`): Magenta accent — used for animation / interaction product surfaces.
|
|
341
|
+
- **Accent Blue** (`{colors.accent-blue}` — `#3b89ff`): Bright cyan-blue — used for SEO / analytics product surfaces.
|
|
342
|
+
- **Accent Blue Deep** (`{colors.accent-blue-deep}` — `#006acc`): The deeper blue used for emphasis links.
|
|
343
|
+
- **Accent Blue Info** (`{colors.accent-blue-info}` — `#146ef5`): The badge-info blue.
|
|
344
|
+
- **Accent Orange** (`{colors.accent-orange}` — `#ff6b00`): Used for hosting / infrastructure product surfaces.
|
|
345
|
+
- **Accent Green** (`{colors.accent-green}` — `#00d722`): Used for ecommerce / status-success surfaces.
|
|
346
|
+
- **Accent Yellow** (`{colors.accent-yellow}` — `#ffae13`): Used for warning / collaboration product surfaces.
|
|
347
|
+
- **Accent Red** (`{colors.accent-red}` — `#ee1d36`): Used for error / destructive states.
|
|
348
|
+
|
|
349
|
+
### Surface
|
|
350
|
+
- **Canvas** (`{colors.canvas}` — `#ffffff`): The default page background.
|
|
351
|
+
- **Hairline** (`{colors.hairline}` — `#d8d8d8`): 1 px solid borders — input borders, card chrome, divider lines.
|
|
352
|
+
|
|
353
|
+
### Text
|
|
354
|
+
- **Ink** (`{colors.ink}` — `#080808`): Default text and headings.
|
|
355
|
+
- **Ink Strong** (`{colors.ink-strong}` — `#222222`): Near-black emphasis.
|
|
356
|
+
- **Body** (`{colors.body}` — `#363636`): Default body paragraph color.
|
|
357
|
+
- **Body Mid** (`{colors.body-mid}` — `#5a5a5a`): Mid-emphasis secondary text — footer lines, captions.
|
|
358
|
+
- **Mute** (`{colors.mute}` — `#898989`): Lower-priority text.
|
|
359
|
+
- **Mute Soft** (`{colors.mute-soft}` — `#ababab`): The lightest text role — placeholder text, fine print.
|
|
360
|
+
|
|
361
|
+
### Semantic
|
|
362
|
+
- **Info Blue** (`{colors.accent-blue-info}` — `#146ef5`): Info badge / notification.
|
|
363
|
+
- **Success Green** (`{colors.accent-green}` — `#00d722`): Success indicators.
|
|
364
|
+
- **Warning Yellow** (`{colors.accent-yellow}` — `#ffae13`): Warning states.
|
|
365
|
+
- **Error Red** (`{colors.accent-red}` — `#ee1d36`): Validation / destructive.
|
|
366
|
+
|
|
367
|
+
## Typography
|
|
368
|
+
|
|
369
|
+
### Font Family
|
|
370
|
+
A single proprietary family carries every typographic role: **WF Visual Sans Variable** (with `Arial` system fallback). Weights 400 / 500 / 550 / 600 are present; the brand never uses 700 / 800 / 900. A monospace variant — **WFVisualSans-Mono** with `Inconsolata` fallback — handles rare technical caption moments and code-style labels. OpenType features `"ss02"`, `"ss10"`, `"zero"` are enabled in the mono variant for the styled zero glyph.
|
|
371
|
+
|
|
372
|
+
### Hierarchy
|
|
373
|
+
|
|
374
|
+
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
|
375
|
+
|---|---|---|---|---|---|
|
|
376
|
+
| `{typography.display-xxl}` | 80px | 600 | 83.2px | -0.8px | Hero headline. |
|
|
377
|
+
| `{typography.display-xl}` | 56px | 600 | 58.24px | 0 | Sub-hero displays. |
|
|
378
|
+
| `{typography.display-lg}` | 44.8px | 600 | 46.6px | 0 | Section headlines. |
|
|
379
|
+
| `{typography.display-md}` | 32px | 500 | 41.6px | 0 | Card-cluster headlines. |
|
|
380
|
+
| `{typography.display-sm}` | 24px | 500 | 31.2px | 0 | Sub-section displays. |
|
|
381
|
+
| `{typography.display-xs}` | 20px | 500 | 28px | 0 | Inline display micro-headings. |
|
|
382
|
+
| `{typography.eyebrow-uppercase}` | 15px | 500 | 19.5px | 1.5px | UPPERCASE eyebrow tags above sections. |
|
|
383
|
+
| `{typography.eyebrow-uppercase-sm}` | 12px | 500 | 12px | 0.6px | Small uppercase metadata. |
|
|
384
|
+
| `{typography.body-lg}` | 28.8px | 400 | 46.08px | -0.288px | Lead paragraphs. |
|
|
385
|
+
| `{typography.body-md}` | 16px | 400 | 25.6px | -0.16px | Default body. |
|
|
386
|
+
| `{typography.body-md-strong}` | 16px | 500 | 25.6px | -0.16px | Bolded inline body. |
|
|
387
|
+
| `{typography.body-sm}` | 14px | 400 | 22.4px | 0 | Secondary body. |
|
|
388
|
+
| `{typography.body-sm-strong}` | 14px | 500 | 22.4px | 0 | Bold caption / nav-link. |
|
|
389
|
+
| `{typography.caption}` | 12.8px | 550 | 15.36px | 0 | Badge labels (the brand's signature 550 weight). |
|
|
390
|
+
| `{typography.caption-mono}` | 12px | 400 | 18px | 0 | Mono code captions. |
|
|
391
|
+
| `{typography.button-md}` | 16px | 500 | 25.6px | -0.16px | Button labels. |
|
|
392
|
+
|
|
393
|
+
### Principles
|
|
394
|
+
- **Weight ceiling at 600.** The brand never uses 700+. Confident, not loud.
|
|
395
|
+
- **Negative tracking at display sizes.** `-0.8 px` at 80 px, scaling through. Tight kerning is part of the voice.
|
|
396
|
+
- **Uppercase eyebrows mark every section.** 15 px / weight 500 / `1.5 px` positive tracking is the brand's signature label style.
|
|
397
|
+
- **Single family across the system.** No separate display vs body face. The variable axes do the work.
|
|
398
|
+
|
|
399
|
+
### Note on Font Substitutes
|
|
400
|
+
WF Visual Sans Variable is proprietary. Open-source substitutes:
|
|
401
|
+
- **Display + body** — *Inter* weights 400 / 500 / 600 with `font-feature-settings: "ss01"` enabled is the closest stylistic match.
|
|
402
|
+
- **Mono** — *Inconsolata* (the documented fallback) or *DM Mono*.
|
|
403
|
+
|
|
404
|
+
## Layout
|
|
405
|
+
|
|
406
|
+
### Spacing System
|
|
407
|
+
- **Base unit**: 4 px (with frequent 0.4 / 0.8 sub-multiples for fine padding).
|
|
408
|
+
- **Tokens**: `{spacing.xxs}` 2 px · `{spacing.xs}` 4 px · `{spacing.sm}` 8 px · `{spacing.md}` 12 px · `{spacing.lg}` 16 px · `{spacing.xl}` 20 px · `{spacing.2xl}` 24 px · `{spacing.3xl}` 32 px.
|
|
409
|
+
- **Section padding**: hero / content bands use `{spacing.3xl}` 32 px gutters with generous vertical spacing.
|
|
410
|
+
- **Card interior padding**: feature and pricing cards sit at `{spacing.3xl}` 32 px.
|
|
411
|
+
|
|
412
|
+
### Grid & Container
|
|
413
|
+
- Marketing container is wide (effectively edge-to-edge with `{spacing.3xl}` gutters).
|
|
414
|
+
- Category card grid: 2 / 3-up at desktop with mixed sizing (some larger feature cards span 2 columns).
|
|
415
|
+
- Pricing tier grid: 3-up at desktop, 1-up at mobile.
|
|
416
|
+
|
|
417
|
+
### Responsive Strategy
|
|
418
|
+
|
|
419
|
+
#### Breakpoints
|
|
420
|
+
|
|
421
|
+
| Name | Width | Key Changes |
|
|
422
|
+
|---|---|---|
|
|
423
|
+
| Mobile | < 479px | Hero stacks; all grids 1-up. |
|
|
424
|
+
| Mobile-Large | 479–767px | Same as Mobile. |
|
|
425
|
+
| Tablet | 768–991px | 2-up grids. |
|
|
426
|
+
| Desktop | ≥ 992px | Full multi-up grids. |
|
|
427
|
+
|
|
428
|
+
#### Touch Targets
|
|
429
|
+
Buttons render at ~44 px (12 px vertical padding + 25.6 px line-height). WCAG AAA met.
|
|
430
|
+
|
|
431
|
+
#### Collapsing Strategy
|
|
432
|
+
- Nav: full link row at desktop. Hamburger at mobile.
|
|
433
|
+
- Category card grid: 2 / 3 / 4-up at desktop, drops to 1-up at mobile.
|
|
434
|
+
- Pricing tier: 3 / 4-up at desktop, 1-up at mobile.
|
|
435
|
+
|
|
436
|
+
#### Image Behavior
|
|
437
|
+
- Category cards: full-bleed solid colour fills (no photography).
|
|
438
|
+
- Product screenshots: 16:9 inside `{rounded.md}` card chrome.
|
|
439
|
+
- No portrait imagery in the marketing surface.
|
|
440
|
+
|
|
441
|
+
## Elevation & Depth
|
|
442
|
+
|
|
443
|
+
| Level | Treatment | Use |
|
|
444
|
+
|---|---|---|
|
|
445
|
+
| Level 0 — Flat | No shadow, no border. | Default bands. |
|
|
446
|
+
| Level 1 — Hairline | 1 px solid `{colors.hairline}` border on `{colors.canvas}`. | Default card chrome and input borders. |
|
|
447
|
+
| Level 2 — Layered Drop | Multi-stop layered shadow with subtle warm offsets — `0 84px 24px rgba(0,0,0,0), 0 54px 22px rgba(0,0,0,0.01), 0 30px 18px rgba(0,0,0,0.04), 0 13px 13px rgba(0,0,0,0.08), 0 3px 7px rgba(0,0,0,0.09)`. | Featured cards needing visible lift. |
|
|
448
|
+
| Level 3 — Layered Drop Strong | Deeper version of Level 2 with `0.12` final offset opacity. | Pricing / modal-level emphasis. |
|
|
449
|
+
| Level 4 — Heavy Modal | Extremely heavy multi-stop — `0 24px 24px rgba(0,0,0,0.26), 0 6px 13px rgba(0,0,0,0.29)` final stops. | Modal / dialog surfaces. |
|
|
450
|
+
|
|
451
|
+
### Decorative Depth
|
|
452
|
+
- The chromatic category cards (full-saturation purple / pink / blue / orange / green fills) provide visual depth through pure colour contrast against the white canvas.
|
|
453
|
+
- Layered shadow recipes are the brand's only true atmospheric effect — they're 5-stop drop-shadow stacks with very low individual opacities.
|
|
454
|
+
|
|
455
|
+
## Shapes
|
|
456
|
+
|
|
457
|
+
### Border Radius Scale
|
|
458
|
+
|
|
459
|
+
| Token | Value | Use |
|
|
460
|
+
|---|---|---|
|
|
461
|
+
| `{rounded.none}` | 0px | Full-bleed bands. |
|
|
462
|
+
| `{rounded.xs}` | 2px | Tight inline pills. |
|
|
463
|
+
| `{rounded.sm}` | 4px | The brand's canonical button + badge + small-element radius. |
|
|
464
|
+
| `{rounded.md}` | 8px | Card chrome and feature / category cards. |
|
|
465
|
+
| `{rounded.full}` | 9999px | Circular icon containers only. |
|
|
466
|
+
|
|
467
|
+
## Components
|
|
468
|
+
|
|
469
|
+
### Buttons
|
|
470
|
+
|
|
471
|
+
**`button-primary`** — the canonical near-black CTA.
|
|
472
|
+
- Background `{colors.primary}` (`#080808`), text `{colors.on-primary}` white, label `{typography.button-md}` (16 px weight 500), padding `{spacing.md} {spacing.xl}`, shape `{rounded.sm}` 4 px.
|
|
473
|
+
|
|
474
|
+
**`button-secondary`** — the white outline CTA.
|
|
475
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}` border, same typography + padding + shape.
|
|
476
|
+
|
|
477
|
+
**`button-text-arrow`** — the underlined text-link CTA with arrow used in long-form sections.
|
|
478
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, no border, body in `{typography.button-md}`, padding `{spacing.xl}` 0.
|
|
479
|
+
|
|
480
|
+
**`button-icon-circular`** — the circular icon button for carousel controls.
|
|
481
|
+
- Background `{colors.canvas}`, ink icon, shape `{rounded.full}`.
|
|
482
|
+
|
|
483
|
+
### Cards & Containers
|
|
484
|
+
|
|
485
|
+
**`card-feature`** — the canonical feature card on canvas.
|
|
486
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}`, padding `{spacing.3xl}`, shape `{rounded.md}`. Often elevated to Level 2 shadow when featured.
|
|
487
|
+
|
|
488
|
+
**`card-feature-dark`** — the polarity-flipped feature card on near-black.
|
|
489
|
+
- Background `{colors.primary}`, text `{colors.on-primary}`, padding `{spacing.3xl}`, shape `{rounded.md}`.
|
|
490
|
+
|
|
491
|
+
**`card-pricing`** — the pricing-tier card.
|
|
492
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, hairline border, padding `{spacing.3xl}`, shape `{rounded.md}`. Layered shadow on the featured tier.
|
|
493
|
+
|
|
494
|
+
### Inputs & Forms
|
|
495
|
+
|
|
496
|
+
**`text-input`** — the canonical text input.
|
|
497
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, 1 px solid `{colors.hairline}`, body in `{typography.body-md}`, padding `{spacing.md} {spacing.lg}`, shape `{rounded.sm}`.
|
|
498
|
+
|
|
499
|
+
### Navigation
|
|
500
|
+
|
|
501
|
+
**`nav-bar`** — the sticky top nav.
|
|
502
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.lg} {spacing.3xl}`.
|
|
503
|
+
|
|
504
|
+
**`nav-link`** — link items inside `nav-bar`.
|
|
505
|
+
- Text `{colors.ink}`, set in `{typography.body-sm-strong}`.
|
|
506
|
+
|
|
507
|
+
**`footer`** — the footer band.
|
|
508
|
+
- Background `{colors.canvas}`, text `{colors.body-mid}`, padding `{spacing.3xl} {spacing.3xl}`. Body in `{typography.body-sm}`.
|
|
509
|
+
|
|
510
|
+
### Signature Components
|
|
511
|
+
|
|
512
|
+
**`hero-band`** — the white hero band.
|
|
513
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.3xl} {spacing.3xl}`. Headline in `{typography.display-xxl}` (80 px weight 600).
|
|
514
|
+
|
|
515
|
+
**`hero-band-dark`** — the polarity-flipped near-black hero band (used on some campaign pages).
|
|
516
|
+
- Background `{colors.primary}`, text `{colors.on-primary}`, same padding / headline scale.
|
|
517
|
+
|
|
518
|
+
**`content-band`** — the standard content band on canvas.
|
|
519
|
+
- Background `{colors.canvas}`, text `{colors.ink}`, padding `{spacing.3xl} {spacing.3xl}`. Section headline in `{typography.display-lg}`.
|
|
520
|
+
|
|
521
|
+
**`category-card-purple`** — full-fill purple category card.
|
|
522
|
+
- Background `{colors.accent-purple}`, text white, padding `{spacing.3xl}`, shape `{rounded.md}`.
|
|
523
|
+
|
|
524
|
+
**`category-card-pink`** — full-fill pink category card.
|
|
525
|
+
- Background `{colors.accent-pink}`, text white, padding `{spacing.3xl}`, shape `{rounded.md}`.
|
|
526
|
+
|
|
527
|
+
**`category-card-blue`** — full-fill blue category card.
|
|
528
|
+
- Background `{colors.accent-blue}`, text white, padding `{spacing.3xl}`, shape `{rounded.md}`.
|
|
529
|
+
|
|
530
|
+
**`category-card-orange`** — full-fill orange category card.
|
|
531
|
+
- Background `{colors.accent-orange}`, text white, padding `{spacing.3xl}`, shape `{rounded.md}`.
|
|
532
|
+
|
|
533
|
+
**`category-card-green`** — full-fill green category card (uses ink text for legibility against the lighter green).
|
|
534
|
+
- Background `{colors.accent-green}`, text `{colors.primary}` (ink), padding `{spacing.3xl}`, shape `{rounded.md}`.
|
|
535
|
+
|
|
536
|
+
**`badge-info`** + **`badge-info-soft`** — info badges in solid blue or soft outline.
|
|
537
|
+
- Filled: bg `{colors.accent-blue-info}` text white. Soft: bg canvas, text `{colors.accent-blue-info}`. Both at `{typography.caption}` (12.8 px weight 550) — the brand's signature 550-weight caption.
|
|
538
|
+
|
|
539
|
+
### Examples (illustrative)
|
|
540
|
+
|
|
541
|
+
> Auto-derived kit-mirror demonstration surfaces (`scripts/derive-examples-block.mjs`). Each `ex-*` entry references brand-native primitives so downstream consumers (`/preview-design`, `/generate-kit`) re-skin the same 10 surfaces consistently. `TO_FILL` markers indicate missing primitives — resolve in the LLM judgment pass.
|
|
542
|
+
|
|
543
|
+
**`ex-pricing-tier`** — Default Pricing tier card. Re-uses feature-card chrome with brand canvas-soft surface.
|
|
544
|
+
- Properties: `backgroundColor`, `textColor`, `borderColor`, `rounded`, `padding`
|
|
545
|
+
|
|
546
|
+
**`ex-pricing-tier-featured`** — Featured/highlighted tier — polarity-flipped surface (dark fill + light text in light mode, light fill + dark text in dark mode).
|
|
547
|
+
- Properties: `backgroundColor`, `textColor`, `rounded`, `padding`
|
|
548
|
+
|
|
549
|
+
**`ex-product-selector`** — What's Included summary card — re-purposed for SaaS / B2B verticals (NOT a literal product gallery).
|
|
550
|
+
- Properties: `backgroundColor`, `rounded`, `padding`
|
|
551
|
+
|
|
552
|
+
**`ex-cart-drawer`** — Subscription summary — re-purposed for SaaS / B2B (line items per add-on, not literal cart).
|
|
553
|
+
- Properties: `backgroundColor`, `rounded`, `padding`, `item-divider`
|
|
554
|
+
|
|
555
|
+
**`ex-app-shell-row`** — Sidebar nav row inside the App Shell example. Active state uses brand primary as the indicator.
|
|
556
|
+
- Properties: `backgroundColor`, `activeIndicator`, `rounded`, `padding`
|
|
557
|
+
|
|
558
|
+
**`ex-data-table-cell`** — Default data-table th + td chrome. Header uses mono-caps eyebrow typography; body uses body-sm.
|
|
559
|
+
- Properties: `headerBackground`, `headerTypography`, `bodyTypography`, `cellPadding`, `rowBorder`
|
|
560
|
+
|
|
561
|
+
**`ex-auth-form-card`** — Sign-in / sign-up card. Re-uses feature-card chrome with text-input primitives inside.
|
|
562
|
+
- Properties: `backgroundColor`, `rounded`, `padding`
|
|
563
|
+
|
|
564
|
+
**`ex-modal-card`** — Modal dialog surface — same chrome as feature-card with elevated shadow.
|
|
565
|
+
- Properties: `backgroundColor`, `rounded`, `padding`
|
|
566
|
+
|
|
567
|
+
**`ex-empty-state-card`** — Empty-state illustration frame.
|
|
568
|
+
- Properties: `backgroundColor`, `rounded`, `padding`, `captionTypography`
|
|
569
|
+
|
|
570
|
+
**`ex-toast`** — Toast notification surface — feature-card shape + medium shadow.
|
|
571
|
+
- Properties: `backgroundColor`, `rounded`, `padding`, `typography`
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
## Do's and Don'ts
|
|
575
|
+
|
|
576
|
+
### Do
|
|
577
|
+
- Reserve `{colors.primary}` (`#080808`) for every primary CTA, every heading, and every wordmark. Near-black is the conversion colour.
|
|
578
|
+
- Use the five chromatic accents (purple / pink / blue / orange / green) as full-fill category cards, NOT as button backgrounds.
|
|
579
|
+
- Set hero headlines in `{typography.display-xxl}` weight 600 with `-0.8 px` tracking.
|
|
580
|
+
- Pair the proprietary WF Visual Sans family across every typographic role.
|
|
581
|
+
- Use `{rounded.sm}` 4 px for buttons, `{rounded.md}` 8 px for cards. The brand never uses pill CTAs.
|
|
582
|
+
- Use layered multi-stop drop-shadows on featured cards — the brand's distinctive elevation recipe.
|
|
583
|
+
|
|
584
|
+
### Don't
|
|
585
|
+
- Don't promote button-medium weight to 700+. The brand's weight ceiling is 600.
|
|
586
|
+
- Don't use chromatic accents as button backgrounds. They're surface fills, not actions.
|
|
587
|
+
- Don't render CTAs as pills. The brand's button geometry is tight 4 px rectangle.
|
|
588
|
+
- Don't introduce a sixth accent colour. The 5-stop palette is the system.
|