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,636 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: alpha
|
|
3
|
+
name: Revolut
|
|
4
|
+
description: |
|
|
5
|
+
Revolut's marketing surfaces pair a stark black canvas with the brand's
|
|
6
|
+
cobalt-violet (`#494fdf`) and a wide accent palette of deep, fully-saturated
|
|
7
|
+
product colours — teal, light-blue, deep pink, light-green, warning orange.
|
|
8
|
+
The system reads as fintech-meets-product-brochure: oversized 80px–136px
|
|
9
|
+
Aeonik Pro display headlines, generous whitespace, photography-led hero
|
|
10
|
+
bands, and full-width product mockups (cards, phones, terminals) shown as
|
|
11
|
+
hero objects inside near-black sections. Most surfaces are either black or
|
|
12
|
+
off-white; pill-shaped buttons and rounded-12/20px content cards carry the
|
|
13
|
+
consumer-financial-app feel without crossing into playful territory.
|
|
14
|
+
|
|
15
|
+
colors:
|
|
16
|
+
primary: "#494fdf"
|
|
17
|
+
primary-bright: "#4f55f1"
|
|
18
|
+
primary-deep: "#3a40c4"
|
|
19
|
+
on-primary: "#ffffff"
|
|
20
|
+
ink: "#191c1f"
|
|
21
|
+
body: "#1f2226"
|
|
22
|
+
charcoal: "#3a3d40"
|
|
23
|
+
mute: "#505a63"
|
|
24
|
+
ash: "#5c5e60"
|
|
25
|
+
stone: "#8d969e"
|
|
26
|
+
faint: "#c9c9cd"
|
|
27
|
+
on-dark: "#ffffff"
|
|
28
|
+
on-dark-mute: "rgba(255,255,255,0.72)"
|
|
29
|
+
canvas-light: "#ffffff"
|
|
30
|
+
canvas-dark: "#000000"
|
|
31
|
+
surface-soft: "#f4f4f4"
|
|
32
|
+
surface-card: "#ffffff"
|
|
33
|
+
surface-deep: "#0a0a0a"
|
|
34
|
+
surface-elevated: "#16181a"
|
|
35
|
+
hairline-light: "#e2e2e7"
|
|
36
|
+
hairline-dark: "rgba(255,255,255,0.12)"
|
|
37
|
+
hairline-strong: "#191c1f"
|
|
38
|
+
divider-soft: "rgba(255,255,255,0.06)"
|
|
39
|
+
accent-teal: "#00a87e"
|
|
40
|
+
accent-blue-link: "#376cd5"
|
|
41
|
+
accent-light-blue: "#007bc2"
|
|
42
|
+
accent-light-green: "#428619"
|
|
43
|
+
accent-green-text: "#006400"
|
|
44
|
+
accent-yellow: "#b09000"
|
|
45
|
+
accent-warning: "#ec7e00"
|
|
46
|
+
accent-pink: "#e61e49"
|
|
47
|
+
accent-danger: "#e23b4a"
|
|
48
|
+
accent-deep-red: "#8b0000"
|
|
49
|
+
accent-brown: "#936d62"
|
|
50
|
+
link: "#376cd5"
|
|
51
|
+
|
|
52
|
+
typography:
|
|
53
|
+
display-xxl:
|
|
54
|
+
fontFamily: Aeonik Pro
|
|
55
|
+
fontSize: 136px
|
|
56
|
+
fontWeight: 500
|
|
57
|
+
lineHeight: 1.0
|
|
58
|
+
letterSpacing: -2.72px
|
|
59
|
+
display-xl:
|
|
60
|
+
fontFamily: Aeonik Pro
|
|
61
|
+
fontSize: 80px
|
|
62
|
+
fontWeight: 500
|
|
63
|
+
lineHeight: 1.0
|
|
64
|
+
letterSpacing: -0.8px
|
|
65
|
+
display-lg:
|
|
66
|
+
fontFamily: Aeonik Pro
|
|
67
|
+
fontSize: 48px
|
|
68
|
+
fontWeight: 500
|
|
69
|
+
lineHeight: 1.21
|
|
70
|
+
letterSpacing: -0.48px
|
|
71
|
+
display-md:
|
|
72
|
+
fontFamily: Aeonik Pro
|
|
73
|
+
fontSize: 40px
|
|
74
|
+
fontWeight: 500
|
|
75
|
+
lineHeight: 1.2
|
|
76
|
+
letterSpacing: -0.4px
|
|
77
|
+
heading-lg:
|
|
78
|
+
fontFamily: Aeonik Pro
|
|
79
|
+
fontSize: 32px
|
|
80
|
+
fontWeight: 500
|
|
81
|
+
lineHeight: 1.19
|
|
82
|
+
letterSpacing: -0.32px
|
|
83
|
+
heading-md:
|
|
84
|
+
fontFamily: Aeonik Pro
|
|
85
|
+
fontSize: 24px
|
|
86
|
+
fontWeight: 500
|
|
87
|
+
lineHeight: 1.33
|
|
88
|
+
letterSpacing: 0
|
|
89
|
+
heading-sm:
|
|
90
|
+
fontFamily: Aeonik Pro
|
|
91
|
+
fontSize: 20px
|
|
92
|
+
fontWeight: 500
|
|
93
|
+
lineHeight: 1.4
|
|
94
|
+
letterSpacing: 0
|
|
95
|
+
body-lg:
|
|
96
|
+
fontFamily: Inter
|
|
97
|
+
fontSize: 18px
|
|
98
|
+
fontWeight: 400
|
|
99
|
+
lineHeight: 1.56
|
|
100
|
+
letterSpacing: -0.09px
|
|
101
|
+
body-md:
|
|
102
|
+
fontFamily: Inter
|
|
103
|
+
fontSize: 16px
|
|
104
|
+
fontWeight: 400
|
|
105
|
+
lineHeight: 1.5
|
|
106
|
+
letterSpacing: 0.24px
|
|
107
|
+
body-md-bold:
|
|
108
|
+
fontFamily: Inter
|
|
109
|
+
fontSize: 16px
|
|
110
|
+
fontWeight: 600
|
|
111
|
+
lineHeight: 1.5
|
|
112
|
+
letterSpacing: 0.16px
|
|
113
|
+
body-sm:
|
|
114
|
+
fontFamily: Inter
|
|
115
|
+
fontSize: 14px
|
|
116
|
+
fontWeight: 400
|
|
117
|
+
lineHeight: 1.43
|
|
118
|
+
button-lg:
|
|
119
|
+
fontFamily: Aeonik Pro
|
|
120
|
+
fontSize: 20px
|
|
121
|
+
fontWeight: 500
|
|
122
|
+
lineHeight: 1.4
|
|
123
|
+
button-md:
|
|
124
|
+
fontFamily: Inter
|
|
125
|
+
fontSize: 16px
|
|
126
|
+
fontWeight: 600
|
|
127
|
+
lineHeight: 1.5
|
|
128
|
+
letterSpacing: 0.24px
|
|
129
|
+
button-sm:
|
|
130
|
+
fontFamily: Inter
|
|
131
|
+
fontSize: 14px
|
|
132
|
+
fontWeight: 600
|
|
133
|
+
lineHeight: 1.43
|
|
134
|
+
caption:
|
|
135
|
+
fontFamily: Inter
|
|
136
|
+
fontSize: 13px
|
|
137
|
+
fontWeight: 400
|
|
138
|
+
lineHeight: 1.4
|
|
139
|
+
link-emph:
|
|
140
|
+
fontFamily: Inter
|
|
141
|
+
fontSize: 16px
|
|
142
|
+
fontWeight: 700
|
|
143
|
+
lineHeight: 1.5
|
|
144
|
+
letterSpacing: 0.24px
|
|
145
|
+
|
|
146
|
+
rounded:
|
|
147
|
+
none: 0px
|
|
148
|
+
sm: 8px
|
|
149
|
+
md: 12px
|
|
150
|
+
lg: 20px
|
|
151
|
+
xl: 28px
|
|
152
|
+
full: 9999px
|
|
153
|
+
|
|
154
|
+
spacing:
|
|
155
|
+
xxs: 4px
|
|
156
|
+
xs: 6px
|
|
157
|
+
sm: 8px
|
|
158
|
+
md: 14px
|
|
159
|
+
lg: 16px
|
|
160
|
+
xl: 24px
|
|
161
|
+
xxl: 32px
|
|
162
|
+
xxxl: 48px
|
|
163
|
+
block: 80px
|
|
164
|
+
section: 88px
|
|
165
|
+
band: 120px
|
|
166
|
+
|
|
167
|
+
components:
|
|
168
|
+
button-primary:
|
|
169
|
+
backgroundColor: "{colors.canvas-light}"
|
|
170
|
+
textColor: "{colors.canvas-dark}"
|
|
171
|
+
typography: "{typography.button-md}"
|
|
172
|
+
rounded: "{rounded.full}"
|
|
173
|
+
padding: 14px 28px
|
|
174
|
+
height: 48px
|
|
175
|
+
button-primary-pressed:
|
|
176
|
+
backgroundColor: "{colors.faint}"
|
|
177
|
+
textColor: "{colors.canvas-dark}"
|
|
178
|
+
typography: "{typography.button-md}"
|
|
179
|
+
rounded: "{rounded.full}"
|
|
180
|
+
button-dark:
|
|
181
|
+
backgroundColor: "{colors.canvas-dark}"
|
|
182
|
+
textColor: "{colors.on-dark}"
|
|
183
|
+
typography: "{typography.button-md}"
|
|
184
|
+
rounded: "{rounded.full}"
|
|
185
|
+
padding: 14px 28px
|
|
186
|
+
height: 48px
|
|
187
|
+
button-soft:
|
|
188
|
+
backgroundColor: "{colors.surface-soft}"
|
|
189
|
+
textColor: "{colors.ink}"
|
|
190
|
+
typography: "{typography.button-md}"
|
|
191
|
+
rounded: "{rounded.full}"
|
|
192
|
+
padding: 14px 28px
|
|
193
|
+
height: 48px
|
|
194
|
+
button-outline-light:
|
|
195
|
+
backgroundColor: "{colors.canvas-light}"
|
|
196
|
+
textColor: "{colors.ink}"
|
|
197
|
+
typography: "{typography.button-md}"
|
|
198
|
+
rounded: "{rounded.full}"
|
|
199
|
+
padding: 13px 27px
|
|
200
|
+
height: 48px
|
|
201
|
+
button-outline-dark:
|
|
202
|
+
backgroundColor: "{colors.canvas-dark}"
|
|
203
|
+
textColor: "{colors.on-dark}"
|
|
204
|
+
typography: "{typography.button-md}"
|
|
205
|
+
rounded: "{rounded.full}"
|
|
206
|
+
padding: 13px 27px
|
|
207
|
+
height: 48px
|
|
208
|
+
button-pill-sm:
|
|
209
|
+
backgroundColor: "{colors.surface-soft}"
|
|
210
|
+
textColor: "{colors.ink}"
|
|
211
|
+
typography: "{typography.button-sm}"
|
|
212
|
+
rounded: "{rounded.full}"
|
|
213
|
+
padding: 8px 16px
|
|
214
|
+
height: 36px
|
|
215
|
+
text-input:
|
|
216
|
+
backgroundColor: "{colors.canvas-light}"
|
|
217
|
+
textColor: "{colors.ink}"
|
|
218
|
+
typography: "{typography.body-md}"
|
|
219
|
+
rounded: "{rounded.md}"
|
|
220
|
+
padding: 14px 16px
|
|
221
|
+
height: 56px
|
|
222
|
+
hero-band-dark:
|
|
223
|
+
backgroundColor: "{colors.canvas-dark}"
|
|
224
|
+
textColor: "{colors.on-dark}"
|
|
225
|
+
typography: "{typography.display-xxl}"
|
|
226
|
+
rounded: "{rounded.none}"
|
|
227
|
+
padding: 88px 24px
|
|
228
|
+
hero-band-photo:
|
|
229
|
+
backgroundColor: "{colors.canvas-dark}"
|
|
230
|
+
textColor: "{colors.on-dark}"
|
|
231
|
+
typography: "{typography.display-xl}"
|
|
232
|
+
rounded: "{rounded.none}"
|
|
233
|
+
padding: 0
|
|
234
|
+
feature-card-light:
|
|
235
|
+
backgroundColor: "{colors.canvas-light}"
|
|
236
|
+
textColor: "{colors.ink}"
|
|
237
|
+
typography: "{typography.body-md}"
|
|
238
|
+
rounded: "{rounded.lg}"
|
|
239
|
+
padding: 32px
|
|
240
|
+
feature-card-dark:
|
|
241
|
+
backgroundColor: "{colors.surface-elevated}"
|
|
242
|
+
textColor: "{colors.on-dark}"
|
|
243
|
+
typography: "{typography.body-md}"
|
|
244
|
+
rounded: "{rounded.lg}"
|
|
245
|
+
padding: 32px
|
|
246
|
+
plan-card:
|
|
247
|
+
backgroundColor: "{colors.surface-elevated}"
|
|
248
|
+
textColor: "{colors.on-dark}"
|
|
249
|
+
typography: "{typography.body-md}"
|
|
250
|
+
rounded: "{rounded.lg}"
|
|
251
|
+
padding: 32px
|
|
252
|
+
plan-card-featured:
|
|
253
|
+
backgroundColor: "{colors.primary}"
|
|
254
|
+
textColor: "{colors.on-primary}"
|
|
255
|
+
typography: "{typography.body-md}"
|
|
256
|
+
rounded: "{rounded.lg}"
|
|
257
|
+
padding: 32px
|
|
258
|
+
product-mockup:
|
|
259
|
+
backgroundColor: "{colors.canvas-dark}"
|
|
260
|
+
textColor: "{colors.on-dark}"
|
|
261
|
+
rounded: "{rounded.xl}"
|
|
262
|
+
padding: 48px
|
|
263
|
+
download-tile:
|
|
264
|
+
backgroundColor: "{colors.surface-soft}"
|
|
265
|
+
textColor: "{colors.ink}"
|
|
266
|
+
typography: "{typography.body-sm}"
|
|
267
|
+
rounded: "{rounded.md}"
|
|
268
|
+
padding: 12px 20px
|
|
269
|
+
height: 56px
|
|
270
|
+
badge-tag:
|
|
271
|
+
backgroundColor: "{colors.surface-soft}"
|
|
272
|
+
textColor: "{colors.ink}"
|
|
273
|
+
typography: "{typography.caption}"
|
|
274
|
+
rounded: "{rounded.full}"
|
|
275
|
+
padding: 4px 12px
|
|
276
|
+
badge-feature:
|
|
277
|
+
backgroundColor: "{colors.primary}"
|
|
278
|
+
textColor: "{colors.on-primary}"
|
|
279
|
+
typography: "{typography.caption}"
|
|
280
|
+
rounded: "{rounded.full}"
|
|
281
|
+
padding: 4px 12px
|
|
282
|
+
nav-bar:
|
|
283
|
+
backgroundColor: "{colors.canvas-dark}"
|
|
284
|
+
textColor: "{colors.on-dark}"
|
|
285
|
+
typography: "{typography.button-md}"
|
|
286
|
+
rounded: "{rounded.none}"
|
|
287
|
+
height: 64px
|
|
288
|
+
sub-nav-pill:
|
|
289
|
+
backgroundColor: "{colors.surface-elevated}"
|
|
290
|
+
textColor: "{colors.on-dark}"
|
|
291
|
+
typography: "{typography.button-sm}"
|
|
292
|
+
rounded: "{rounded.full}"
|
|
293
|
+
padding: 8px 16px
|
|
294
|
+
footer:
|
|
295
|
+
backgroundColor: "{colors.canvas-dark}"
|
|
296
|
+
textColor: "{colors.on-dark-mute}"
|
|
297
|
+
typography: "{typography.body-sm}"
|
|
298
|
+
rounded: "{rounded.none}"
|
|
299
|
+
padding: 80px 24px
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Overview
|
|
303
|
+
|
|
304
|
+
Revolut's marketing canvas operates in a high-contrast two-mode system: a
|
|
305
|
+
**near-black storytelling canvas** (`{colors.canvas-dark}` — `#000000`)
|
|
306
|
+
that hosts hero bands, product mockups, and the planning section, alternating
|
|
307
|
+
with **white catalogue bands** (`{colors.canvas-light}` — `#ffffff`) that
|
|
308
|
+
host comparison tables, FAQ rows, and download tiles. The two modes switch
|
|
309
|
+
in full-bleed bands rather than soft transitions; sections slam against each
|
|
310
|
+
other to create the magazine-spread rhythm the brand is known for.
|
|
311
|
+
|
|
312
|
+
The display typography is **Aeonik Pro at weight 500**, used at sizes from
|
|
313
|
+
20px to 136px. The flagship hero ("Banking & Beyond", "Join the 70+ million
|
|
314
|
+
using Revolut") sits at 80–136px with `lineHeight: 1.0` and tight negative
|
|
315
|
+
letter-spacing. Body type is **Inter** at weight 400 — open-source,
|
|
316
|
+
no-nonsense, paired with positive tracking (`0.24px`) on UI labels for
|
|
317
|
+
slightly more mechanical precision.
|
|
318
|
+
|
|
319
|
+
The brand accent is `{colors.primary}` (`#494fdf`) — a saturated cobalt
|
|
320
|
+
violet — but it appears scarcely on marketing surfaces. The actual primary
|
|
321
|
+
CTA on the hero is the **white pill on black** ("Choose your subscription"),
|
|
322
|
+
and the cobalt violet is reserved for featured plan cards, secondary CTAs in
|
|
323
|
+
white sections, and the brand glyph itself. A wide secondary palette of deep
|
|
324
|
+
teal, light-blue, deep-pink, light-green, warning orange, and yellow appears
|
|
325
|
+
inside product mockups and feature illustrations — never as button surfaces.
|
|
326
|
+
|
|
327
|
+
**Key Characteristics:**
|
|
328
|
+
- Two-mode canvas system — `{colors.canvas-dark}` (true black) for storytelling, `{colors.canvas-light}` (white) for browsing — switched in full-bleed bands.
|
|
329
|
+
- Display typography is **Aeonik Pro 500** at sizes 20–136px with tight `lineHeight: 1.0` and large negative letter-spacing on display sizes.
|
|
330
|
+
- The actual primary CTA is `{component.button-primary}` — a **white pill with black text**, sitting on the dark canvas as the brightest pixel. Cobalt-violet `{colors.primary}` is reserved for featured plan cards and secondary CTAs.
|
|
331
|
+
- Eight saturated accent colours live inside product mockups and illustrations only, never as button surfaces — teal, light-blue, deep-pink, light-green, warning orange, yellow, brown, danger red.
|
|
332
|
+
- All buttons are pill-shaped (`{rounded.full}`); content cards use `{rounded.lg}` (20px); inputs and small chips use `{rounded.md}` (12px).
|
|
333
|
+
- Photography is product-led — phone mockups, card mockups, terminal mockups — shown full-bleed inside dark sections with no caption overlay.
|
|
334
|
+
|
|
335
|
+
## Colors
|
|
336
|
+
|
|
337
|
+
### Brand & Accent
|
|
338
|
+
- **Cobalt Violet** (`{colors.primary}` — `#494fdf`): the brand accent. Reserved for featured plan cards (`{component.plan-card-featured}`), the brand wordmark icon, and secondary CTAs in white-canvas regions.
|
|
339
|
+
- **Cobalt Bright** (`{colors.primary-bright}` — `#4f55f1`): a one-step-up bright variant used in inline link colour and accent-photo headers.
|
|
340
|
+
- **Cobalt Deep** (`{colors.primary-deep}` — `#3a40c4`): the active/pressed state of cobalt elements.
|
|
341
|
+
- **On-Primary** (`{colors.on-primary}` — `#ffffff`): label colour on top of `{colors.primary}` surfaces.
|
|
342
|
+
|
|
343
|
+
### Surface
|
|
344
|
+
- **Canvas Light** (`{colors.canvas-light}` — `#ffffff`): the white catalogue mode for FAQ, download tiles, comparison tables.
|
|
345
|
+
- **Canvas Dark** (`{colors.canvas-dark}` — `#000000`): the storytelling canvas — true black, never near-black.
|
|
346
|
+
- **Surface Soft** (`{colors.surface-soft}` — `#f4f4f4`): a subtle off-white used on download tiles, soft buttons, and inset card groups inside white bands.
|
|
347
|
+
- **Surface Card** (`{colors.surface-card}` — `#ffffff`): pure white card surface, used for feature cards in white-canvas regions.
|
|
348
|
+
- **Surface Deep** (`{colors.surface-deep}` — `#0a0a0a`): a one-step-up dark surface for inset cards inside black-canvas regions.
|
|
349
|
+
- **Surface Elevated** (`{colors.surface-elevated}` — `#16181a`): the planning-section card background — slightly luminous, lifts plan cards off the black canvas.
|
|
350
|
+
- **Hairline Light** (`{colors.hairline-light}` — `#e2e2e7`): 1px dividers inside white bands.
|
|
351
|
+
- **Hairline Dark** (`{colors.hairline-dark}` — `rgba(255,255,255,0.12)`): the corresponding low-contrast divider in dark regions.
|
|
352
|
+
- **Hairline Strong** (`{colors.hairline-strong}` — `#191c1f`): structural full-strength dividers and the outline of light cards.
|
|
353
|
+
|
|
354
|
+
### Text
|
|
355
|
+
- **Ink** (`{colors.ink}` — `#191c1f`): primary text colour. Notably warmer than pure black, paired with the white canvas for body legibility.
|
|
356
|
+
- **Body** (`{colors.body}` — `#1f2226`): long-form body where `{colors.ink}` would feel slightly too sharp.
|
|
357
|
+
- **Charcoal** (`{colors.charcoal}` — `#3a3d40`): captions, secondary nav.
|
|
358
|
+
- **Mute** (`{colors.mute}` — `#505a63`): supporting text.
|
|
359
|
+
- **Ash** (`{colors.ash}` — `#5c5e60`): tertiary text, footer copy.
|
|
360
|
+
- **Stone** (`{colors.stone}` — `#8d969e`): metadata, subtle captions.
|
|
361
|
+
- **Faint** (`{colors.faint}` — `#c9c9cd`): disabled foreground, hairline replacements.
|
|
362
|
+
- **On-Dark** (`{colors.on-dark}` — `#ffffff`): primary text on `{colors.canvas-dark}`.
|
|
363
|
+
- **On-Dark Mute** (`{colors.on-dark-mute}` — `rgba(255,255,255,0.72)`): secondary text in dark regions.
|
|
364
|
+
|
|
365
|
+
### Semantic
|
|
366
|
+
- **Accent Teal** (`{colors.accent-teal}` — `#00a87e`): used in product mockup illustrations.
|
|
367
|
+
- **Accent Light Blue** (`{colors.accent-light-blue}` — `#007bc2`): inline link colour in dark photo headers.
|
|
368
|
+
- **Accent Blue Link** (`{colors.accent-blue-link}` — `#376cd5`): default inline link colour on white surfaces.
|
|
369
|
+
- **Accent Light Green** (`{colors.accent-light-green}` — `#428619`): success / positive product callouts.
|
|
370
|
+
- **Accent Green Text** (`{colors.accent-green-text}` — `#006400`): inline success text.
|
|
371
|
+
- **Accent Yellow** (`{colors.accent-yellow}` — `#b09000`): caution / pending state in product mockups.
|
|
372
|
+
- **Accent Warning** (`{colors.accent-warning}` — `#ec7e00`): full-saturation orange used in warning illustrations.
|
|
373
|
+
- **Accent Pink** (`{colors.accent-pink}` — `#e61e49`): deep pink — used inside product photography and category iconography.
|
|
374
|
+
- **Accent Danger** (`{colors.accent-danger}` — `#e23b4a`): destructive / error state.
|
|
375
|
+
- **Accent Deep Red** (`{colors.accent-deep-red}` — `#8b0000`): inline error text.
|
|
376
|
+
- **Accent Brown** (`{colors.accent-brown}` — `#936d62`): a single warm-neutral used in metals tier card chrome.
|
|
377
|
+
- **Link** (`{colors.link}` — `#376cd5`): default inline link colour. Same as `{colors.accent-blue-link}`.
|
|
378
|
+
|
|
379
|
+
## Typography
|
|
380
|
+
|
|
381
|
+
### Font Family
|
|
382
|
+
|
|
383
|
+
Revolut ships a two-family stack:
|
|
384
|
+
|
|
385
|
+
- **Aeonik Pro** — proprietary humanist sans-serif used for all display sizes (20px+) at weight 500. Carries the brand's editorial confidence; tightens dramatically with negative letter-spacing at large sizes.
|
|
386
|
+
- **Inter** — open-source workhorse for body, button labels, captions, and metadata. Always at weight 400 or 600, with positive tracking (`0.16–0.24px`) on UI labels.
|
|
387
|
+
|
|
388
|
+
When Aeonik Pro cannot be licensed, **Inter Display**, **General Sans**, or **Söhne** are credible substitutes — all share the warm geometric character. Apply -1% letter-spacing on display sizes to match the original tightness.
|
|
389
|
+
|
|
390
|
+
### Hierarchy
|
|
391
|
+
|
|
392
|
+
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
|
393
|
+
|---|---|---|---|---|---|
|
|
394
|
+
| `{typography.display-xxl}` | 136px | 500 | 1.0 | -2.72px | The flagship hero ("Banking & Beyond"). One per page. |
|
|
395
|
+
| `{typography.display-xl}` | 80px | 500 | 1.0 | -0.8px | Section openers ("Join the 70+ million using Revolut"). |
|
|
396
|
+
| `{typography.display-lg}` | 48px | 500 | 1.21 | -0.48px | Sub-section titles. |
|
|
397
|
+
| `{typography.display-md}` | 40px | 500 | 1.2 | -0.4px | Feature card titles. |
|
|
398
|
+
| `{typography.heading-lg}` | 32px | 500 | 1.19 | -0.32px | Plan card titles. |
|
|
399
|
+
| `{typography.heading-md}` | 24px | 500 | 1.33 | 0 | Section sub-titles. |
|
|
400
|
+
| `{typography.heading-sm}` | 20px | 500 | 1.4 | 0 | List headers, prominent labels. |
|
|
401
|
+
| `{typography.body-lg}` | 18px | 400 | 1.56 | -0.09px | Marketing prose. |
|
|
402
|
+
| `{typography.body-md}` | 16px | 400 | 1.5 | 0.24px | Default body. |
|
|
403
|
+
| `{typography.body-md-bold}` | 16px | 600 | 1.5 | 0.16px | Emphatic body. |
|
|
404
|
+
| `{typography.body-sm}` | 14px | 400 | 1.43 | 0 | Captions, metadata. |
|
|
405
|
+
| `{typography.button-lg}` | 20px | 500 | 1.4 | 0 | Hero CTAs (Aeonik Pro). |
|
|
406
|
+
| `{typography.button-md}` | 16px | 600 | 1.5 | 0.24px | Default button label. |
|
|
407
|
+
| `{typography.button-sm}` | 14px | 600 | 1.43 | 0 | Pill chips, sub-nav. |
|
|
408
|
+
| `{typography.caption}` | 13px | 400 | 1.4 | 0 | Footer disclosure, regulatory text. |
|
|
409
|
+
| `{typography.link-emph}` | 16px | 700 | 1.5 | 0.24px | Emphatic inline link in dark mode. |
|
|
410
|
+
|
|
411
|
+
### Principles
|
|
412
|
+
- Display sizes always run at weight 500 with `lineHeight: 1.0` (or 1.19–1.21 below 48px). The negative letter-spacing scales with size — bigger types tighten more.
|
|
413
|
+
- Body Inter sits at weight 400 with positive tracking (`0.24px`) — the small spacing nudge makes UI labels feel slightly mechanical, fitting fintech precision.
|
|
414
|
+
- Hero CTAs use the Aeonik Pro `{typography.button-lg}` variant; everything below the hero uses the Inter `{typography.button-md}`.
|
|
415
|
+
- Inline links inside dark photo regions step up to weight 700 (`{typography.link-emph}`) so they hold contrast against the canvas without using the cobalt accent.
|
|
416
|
+
|
|
417
|
+
### Note on Font Substitutes
|
|
418
|
+
|
|
419
|
+
When Aeonik Pro is unavailable, clamp display `lineHeight` to 1.0 explicitly and apply -1% letter-spacing on display sizes. Inter Display, General Sans, or Söhne will read closest to the original. Inter is open-source and should be used directly.
|
|
420
|
+
|
|
421
|
+
## Layout
|
|
422
|
+
|
|
423
|
+
### Spacing System
|
|
424
|
+
- **Base unit**: 4px, with the working scale on multiples of 4 / 8 / 16.
|
|
425
|
+
- **Tokens**: `{spacing.xxs}` 4px · `{spacing.xs}` 6px · `{spacing.sm}` 8px · `{spacing.md}` 14px · `{spacing.lg}` 16px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.xxxl}` 48px · `{spacing.block}` 80px · `{spacing.section}` 88px · `{spacing.band}` 120px.
|
|
426
|
+
- Section padding: `{spacing.section}` (88px) vertical between bands; `{spacing.band}` (120px) on the hero band and the closing planning section.
|
|
427
|
+
- Card internal padding: `{spacing.xxl}` (32px) on `{component.feature-card-light}`, `{component.plan-card}`, `{component.feature-card-dark}`.
|
|
428
|
+
|
|
429
|
+
### Grid & Container
|
|
430
|
+
- **Max content width** ≈ 1200px on body sections; hero bands run full-bleed.
|
|
431
|
+
- **Plan grid**: 4-up plan cards on the home page, stacking 2-up at tablet and 1-up at small mobile.
|
|
432
|
+
- **Feature grid**: 3-up at desktop, 2-up at tablet, 1-up at mobile.
|
|
433
|
+
- **Product mockup bands**: a single full-width hero photo of a phone or card mockup, no surrounding chrome — the asset itself is the section.
|
|
434
|
+
|
|
435
|
+
### Whitespace Philosophy
|
|
436
|
+
- Whitespace is generous and editorial — sections breathe at 88–120px so display headlines have room to register at 80–136px without feeling cramped.
|
|
437
|
+
- Inside cards, padding stays at 32px so feature copy and plan tiers have a consistent rhythm.
|
|
438
|
+
- Hairline `{colors.hairline-light}` dividers replace shadow on white surfaces; `{colors.hairline-dark}` carries the corresponding role in dark regions.
|
|
439
|
+
|
|
440
|
+
## Elevation & Depth
|
|
441
|
+
|
|
442
|
+
| Level | Treatment | Use |
|
|
443
|
+
|---|---|---|
|
|
444
|
+
| 0 — flat | No shadow, no border | Default canvas bands (light or dark), full-bleed hero. |
|
|
445
|
+
| 1 — surface card | `{colors.surface-card}` (white) on `{colors.surface-soft}` band | Feature cards inside light bands. |
|
|
446
|
+
| 2 — surface elevated dark | `{colors.surface-elevated}` (`#16181a`) on `{colors.canvas-dark}` | Plan cards inside the planning section. |
|
|
447
|
+
| 3 — featured surface | `{colors.primary}` on `{colors.canvas-dark}` | Featured plan card (cobalt violet inversion). |
|
|
448
|
+
| 4 — product mockup | Full-bleed photo asset | Hero phone / card / terminal mockup bands. |
|
|
449
|
+
|
|
450
|
+
The system has **no traditional drop-shadow language**. Surfaces register depth via colour-blocking (light → dark band switches) and surface-luminance shifts (`{colors.canvas-dark}` → `{colors.surface-elevated}`). Photography mockups carry their own depth from the asset itself.
|
|
451
|
+
|
|
452
|
+
### Decorative Depth
|
|
453
|
+
- **Product mockup hero bands** — the home page features a phone mockup full-bleed against `{colors.canvas-dark}`, with the device's own glow providing the only atmospheric depth. No additional gradients, no shadows.
|
|
454
|
+
- **Featured plan card** — the cobalt-violet `{component.plan-card-featured}` sits inside the otherwise dark planning grid as a single saturated colour block, marking the recommended tier visually.
|
|
455
|
+
- **Card metals tier** — the brand uses `{colors.accent-brown}` and a deep gradient on metals card mockups to signal premium without resorting to gold-on-black metallic effects.
|
|
456
|
+
|
|
457
|
+
## Shapes
|
|
458
|
+
|
|
459
|
+
### Border Radius Scale
|
|
460
|
+
|
|
461
|
+
| Token | Value | Use |
|
|
462
|
+
|---|---|---|
|
|
463
|
+
| `{rounded.none}` | 0px | Hero bands, full-bleed sections, footer. |
|
|
464
|
+
| `{rounded.sm}` | 8px | Inline tags, small chips. |
|
|
465
|
+
| `{rounded.md}` | 12px | Form inputs, download tiles. |
|
|
466
|
+
| `{rounded.lg}` | 20px | Feature cards, plan cards. |
|
|
467
|
+
| `{rounded.xl}` | 28px | Product mockup containers. |
|
|
468
|
+
| `{rounded.full}` | 9999px | Buttons, pills, badges, tabs. |
|
|
469
|
+
|
|
470
|
+
### Photography Geometry
|
|
471
|
+
- Phone mockups: 9:19.5 (vertical) with `{rounded.xl}` corners on the device chrome.
|
|
472
|
+
- Card mockups: 1.586:1 (credit-card aspect) with `{rounded.lg}` corners.
|
|
473
|
+
- Terminal/POS mockups: 4:3 with `{rounded.xl}` corners and substantial padding around the device.
|
|
474
|
+
- Lifestyle photography (rare): 16:9 with `{rounded.lg}` corners.
|
|
475
|
+
|
|
476
|
+
## Components
|
|
477
|
+
|
|
478
|
+
### Buttons
|
|
479
|
+
|
|
480
|
+
**`button-primary`** — white CTA on dark
|
|
481
|
+
- Background `{colors.canvas-light}`, label `{colors.canvas-dark}`, type `{typography.button-md}`, padding `14px 28px`, `rounded: {rounded.full}`, height 48px.
|
|
482
|
+
- The brand's primary CTA, used on every dark hero band ("Choose your subscription", "Get started").
|
|
483
|
+
- Pressed state lives in `button-primary-pressed` (background `{colors.faint}`).
|
|
484
|
+
|
|
485
|
+
**`button-dark`** — dark CTA on light
|
|
486
|
+
- Background `{colors.canvas-dark}`, label `{colors.on-dark}`, type `{typography.button-md}`, `rounded: {rounded.full}`.
|
|
487
|
+
- The reverse-canvas equivalent of `{component.button-primary}` — used inside white catalogue bands.
|
|
488
|
+
|
|
489
|
+
**`button-soft`** — soft surface CTA
|
|
490
|
+
- Background `{colors.surface-soft}`, label `{colors.ink}`, type `{typography.button-md}`, `rounded: {rounded.full}`.
|
|
491
|
+
- Tertiary action in white-canvas regions ("Learn more", "View FAQs").
|
|
492
|
+
|
|
493
|
+
**`button-outline-light`** — outlined CTA on light
|
|
494
|
+
- Background `{colors.canvas-light}`, label `{colors.ink}`, 1px solid `{colors.hairline-strong}`, type `{typography.button-md}`, `rounded: {rounded.full}`.
|
|
495
|
+
- Secondary action when paired with `{component.button-dark}`.
|
|
496
|
+
|
|
497
|
+
**`button-outline-dark`** — outlined CTA on dark
|
|
498
|
+
- Background `{colors.canvas-dark}`, label `{colors.on-dark}`, 1px solid `{colors.on-dark}`, type `{typography.button-md}`, `rounded: {rounded.full}`, padding `13px 27px`, height 48px.
|
|
499
|
+
- Dark-canvas counterpart of `{component.button-outline-light}`; used inside dark hero bands as a tertiary action when paired with `{component.button-primary}`.
|
|
500
|
+
|
|
501
|
+
**`button-pill-sm`** — small pill chip
|
|
502
|
+
- Background `{colors.surface-soft}`, label `{colors.ink}`, type `{typography.button-sm}`, `rounded: {rounded.full}`, padding `8px 16px`, height 36px.
|
|
503
|
+
- Sub-nav chips, filter pills.
|
|
504
|
+
|
|
505
|
+
### Cards & Containers
|
|
506
|
+
|
|
507
|
+
**`hero-band-dark`** — full-bleed dark hero
|
|
508
|
+
- Background `{colors.canvas-dark}`, text `{colors.on-dark}`, type `{typography.display-xxl}` for the title, padding `{spacing.section}` (88px) vertical, `rounded: {rounded.none}`.
|
|
509
|
+
- Used only on the home page hero band.
|
|
510
|
+
|
|
511
|
+
**`hero-band-photo`** — photo-led hero
|
|
512
|
+
- Background `{colors.canvas-dark}` with full-bleed product photography, text `{colors.on-dark}`, type `{typography.display-xl}`, `rounded: {rounded.none}`.
|
|
513
|
+
- Used on product pages — phone or card mockup as the full-band canvas.
|
|
514
|
+
|
|
515
|
+
**`feature-card-light`** — feature card on white
|
|
516
|
+
- Background `{colors.surface-card}`, text `{colors.ink}`, 1px solid `{colors.hairline-light}`, type `{typography.body-md}`, `rounded: {rounded.lg}`, padding `{spacing.xxl}` (32px).
|
|
517
|
+
- Used in white catalogue bands for feature comparisons.
|
|
518
|
+
|
|
519
|
+
**`feature-card-dark`** — feature card on dark
|
|
520
|
+
- Background `{colors.surface-elevated}`, text `{colors.on-dark}`, type `{typography.body-md}`, `rounded: {rounded.lg}`, padding `{spacing.xxl}`.
|
|
521
|
+
- Used inside dark storytelling sections.
|
|
522
|
+
|
|
523
|
+
**`plan-card`** — subscription plan card
|
|
524
|
+
- Background `{colors.surface-elevated}`, text `{colors.on-dark}`, type `{typography.body-md}`, `rounded: {rounded.lg}`, padding `{spacing.xxl}` (32px).
|
|
525
|
+
- Plan name in `{typography.heading-lg}` ("Standard", "Plus", "Premium", "Metal", "Ultra").
|
|
526
|
+
|
|
527
|
+
**`plan-card-featured`** — featured plan card
|
|
528
|
+
- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.body-md}`, `rounded: {rounded.lg}`, padding `{spacing.xxl}`.
|
|
529
|
+
- Cobalt-violet inversion of `{component.plan-card}` — used on the recommended tier.
|
|
530
|
+
|
|
531
|
+
**`product-mockup`** — full-bleed product asset
|
|
532
|
+
- Background `{colors.canvas-dark}`, the asset itself fills the band, `rounded: {rounded.xl}` on the device chrome.
|
|
533
|
+
- Phone, card, and terminal mockups — no caption overlay, no surrounding chrome.
|
|
534
|
+
|
|
535
|
+
**`download-tile`** — app store download tile
|
|
536
|
+
- Background `{colors.surface-soft}`, text `{colors.ink}`, type `{typography.body-sm}`, `rounded: {rounded.md}`, padding `12px 20px`, height 56px.
|
|
537
|
+
- App Store + Google Play download buttons, side-by-side.
|
|
538
|
+
|
|
539
|
+
### Inputs & Forms
|
|
540
|
+
|
|
541
|
+
**`text-input`** — default input
|
|
542
|
+
- Background `{colors.canvas-light}`, text `{colors.ink}`, type `{typography.body-md}`, 1px solid `{colors.hairline-light}`, `rounded: {rounded.md}`, padding `14px 16px`, height 56px.
|
|
543
|
+
- Generous height for fintech accessibility — comfortably exceeds WCAG AAA touch target.
|
|
544
|
+
|
|
545
|
+
### Navigation
|
|
546
|
+
|
|
547
|
+
**`nav-bar`** — top nav (desktop)
|
|
548
|
+
- Background `{colors.canvas-dark}`, text `{colors.on-dark}`, type `{typography.button-md}`, height 64px.
|
|
549
|
+
- Left: wordmark logo. Centre: top-level nav ("Personal", "Business", "Company"). Right: language switcher + "Log in" + `{component.button-primary}`.
|
|
550
|
+
|
|
551
|
+
**`nav-bar`** (mobile)
|
|
552
|
+
- Same height 64px, collapses centre nav into a hamburger icon. Logo stays left, sign-in CTA stays right.
|
|
553
|
+
|
|
554
|
+
**`sub-nav-pill`** — sub-nav chip
|
|
555
|
+
- Pill chips set in a horizontal row inside dark sections (e.g. "Personal", "Business", "Premium"), `{component.sub-nav-pill}` styling.
|
|
556
|
+
|
|
557
|
+
### Signature Components
|
|
558
|
+
|
|
559
|
+
**`badge-tag`** — neutral tag
|
|
560
|
+
- Background `{colors.surface-soft}`, text `{colors.ink}`, type `{typography.caption}`, `rounded: {rounded.full}`, padding `4px 12px`.
|
|
561
|
+
- Inline tags inside feature cards.
|
|
562
|
+
|
|
563
|
+
**`badge-feature`** — feature highlight badge
|
|
564
|
+
- Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.caption}`, `rounded: {rounded.full}`, padding `4px 12px`.
|
|
565
|
+
- "New", "Most popular" badges anchored on plan cards.
|
|
566
|
+
|
|
567
|
+
**`footer`** — global footer
|
|
568
|
+
- Background `{colors.canvas-dark}`, text `{colors.on-dark-mute}`, type `{typography.body-sm}`, `rounded: {rounded.none}`, padding `80px 24px`.
|
|
569
|
+
- Multi-column quick-links grid above a copyright + regulatory disclosure block separated by `{colors.divider-soft}`.
|
|
570
|
+
|
|
571
|
+
## Do's and Don'ts
|
|
572
|
+
|
|
573
|
+
### Do
|
|
574
|
+
- Switch full bands between `{colors.canvas-dark}` (storytelling) and `{colors.canvas-light}` (catalogue). The two-mode rhythm is core.
|
|
575
|
+
- Use `{component.button-primary}` (white pill on dark) as the primary CTA on every dark hero band. It's the brand's loudest action.
|
|
576
|
+
- Reserve `{colors.primary}` for the featured plan card and the brand wordmark — the cobalt should feel like a deliberate stamp, not a colour theme.
|
|
577
|
+
- Set hero headlines in **Aeonik Pro 500** at 80–136px with `lineHeight: 1.0` and large negative letter-spacing.
|
|
578
|
+
- Use **Inter** for body, button labels, captions — never substitute Aeonik Pro for body type.
|
|
579
|
+
- Apply `{rounded.full}` to every button and pill; `{rounded.lg}` (20px) to feature and plan cards; `{rounded.md}` (12px) to inputs.
|
|
580
|
+
- Show product mockups full-bleed inside dark sections — the asset IS the section.
|
|
581
|
+
- Use the wide accent palette (`{colors.accent-teal}`, `{colors.accent-pink}`, `{colors.accent-light-green}`, etc.) inside product illustrations and iconography only.
|
|
582
|
+
|
|
583
|
+
### Don't
|
|
584
|
+
- Don't use accent colours (`{colors.accent-teal}`, `{colors.accent-pink}`, etc.) as button surfaces. They live inside illustrations only.
|
|
585
|
+
- Don't use a near-black canvas. The brand is `#000000`, not `#0a0a0a`.
|
|
586
|
+
- Don't pair white text with cobalt violet inside body content — `{colors.primary}` is for the featured plan card surface, not large prose.
|
|
587
|
+
- Don't add drop shadows on cards. Elevation is canvas + surface-luminance shifts.
|
|
588
|
+
- Don't introduce a secondary brand colour. Cobalt violet is the only brand stamp.
|
|
589
|
+
- Don't loosen Aeonik Pro `lineHeight` past 1.0 on display sizes. Tight stacking is structural.
|
|
590
|
+
- Don't bump body Inter to weight 500. Use 400 (default) or 600 (emphatic) — never the in-between.
|
|
591
|
+
- Don't pair `{colors.canvas-dark}` with another dark surface beyond `{colors.surface-elevated}`. The surface ladder has only two dark steps.
|
|
592
|
+
|
|
593
|
+
## Responsive Behavior
|
|
594
|
+
|
|
595
|
+
### Breakpoints
|
|
596
|
+
|
|
597
|
+
| Name | Width | Key Changes |
|
|
598
|
+
|---|---|---|
|
|
599
|
+
| Desktop XL | ≥ 1440px | 4-up plan grid, full-bleed product mockup bands, max content 1200. |
|
|
600
|
+
| Desktop | 1280–1439px | Container shrinks; xl side padding. |
|
|
601
|
+
| Tablet Large | 1024–1279px | Plan grid 4-up; feature grid 3-up. |
|
|
602
|
+
| Tablet | 768–1023px | Plan grid 2-up; feature grid 2-up. |
|
|
603
|
+
| Mobile Large | 426–767px | Plan grid 1-up; feature grid 1-up; nav collapses to hamburger; hero `display-xxl` clamps to 64px. |
|
|
604
|
+
| Mobile | ≤ 425px | All grids 1-up; hero clamps to 48px; section padding `{spacing.section}` collapses to 64px. |
|
|
605
|
+
|
|
606
|
+
### Touch Targets
|
|
607
|
+
- All buttons ship at minimum 48px tall — comfortably exceeds WCAG AAA (44px). Default `{component.button-primary}` is 48px.
|
|
608
|
+
- `{component.text-input}` is 56px tall — fintech-grade accessibility.
|
|
609
|
+
- `{component.button-pill-sm}` (36px) is bumped to 44px on mobile via padding adjustment.
|
|
610
|
+
|
|
611
|
+
### Collapsing Strategy
|
|
612
|
+
- Top-level nav collapses to hamburger at < 1024px; the wordmark and `{component.button-primary}` stay anchored.
|
|
613
|
+
- Hero `{typography.display-xxl}` clamps: 136px → 80px → 64px → 48px across the breakpoint ladder.
|
|
614
|
+
- Plan grid steps from 4-up to 2-up at < 1024px to 1-up at < 768px.
|
|
615
|
+
- Product mockup bands maintain full-bleed at every breakpoint; the asset crops inward rather than letterboxing.
|
|
616
|
+
- Sub-nav pills convert from a wrap row to a horizontal scroll-rail at < 768px.
|
|
617
|
+
|
|
618
|
+
### Image Behavior
|
|
619
|
+
- Phone and card mockups are served at 1.5× and 2× DPR; below 768px the system swaps to a smaller hero crop.
|
|
620
|
+
- Product photography retains its own atmospheric lighting at every breakpoint — no responsive variant assets.
|
|
621
|
+
|
|
622
|
+
## Iteration Guide
|
|
623
|
+
|
|
624
|
+
1. Focus on ONE component at a time. Most surfaces share the `{colors.canvas-dark}` / `{colors.canvas-light}` pair with `{rounded.full}` for buttons and `{rounded.lg}` for cards.
|
|
625
|
+
2. Reference component names and tokens directly (`{colors.primary}`, `{component.plan-card-featured}`, `{rounded.lg}`) — do not paraphrase.
|
|
626
|
+
3. Run `npx @google/design.md lint DESIGN.md` after edits; orphaned-tokens warnings will catch unused entries.
|
|
627
|
+
4. Add new variants as separate entries (`-pressed`, `-featured`, `-disabled`) — do not bury them in prose.
|
|
628
|
+
5. Default body type to `{typography.body-md}` (Inter 400 with positive tracking); reach for `{typography.body-md-bold}` only on emphasis.
|
|
629
|
+
6. Keep `{colors.primary}` scarce — if more than one cobalt-violet element appears per viewport, ask whether one should drop to `{component.plan-card}` (`{colors.surface-elevated}`) instead.
|
|
630
|
+
|
|
631
|
+
## Known Gaps
|
|
632
|
+
|
|
633
|
+
- Pressed/active visual states are documented for `button-primary-pressed` only; other components rely on focus-ring (browser default) for interactive feedback.
|
|
634
|
+
- Logged-in app surfaces (transactions, transfers, account settings) are out of scope — only the public marketing canvas is documented.
|
|
635
|
+
- The wide accent palette (`{colors.accent-teal}` through `{colors.accent-brown}`) is captured from the extracted token set, but exact usage inside product illustrations varies per market and product line; document per-illustration rather than as system buttons.
|
|
636
|
+
- Mobile-app screenshot art direction (phone bezels, status bars) is product-photography territory and not standardised as design tokens.
|