savant-code 0.0.22 → 0.0.23

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 (79) hide show
  1. package/README.md +5 -0
  2. package/launcher.js +192 -5
  3. package/package.json +3 -2
  4. package/savant-design-systems/SKILL.md +12 -0
  5. package/savant-design-systems/manifest.json +2541 -0
  6. package/savant-design-systems/resources/airbnb-design-analysis.json +983 -0
  7. package/savant-design-systems/resources/airtable-design-analysis.json +931 -0
  8. package/savant-design-systems/resources/apple-design-analysis.json +920 -0
  9. package/savant-design-systems/resources/binance-design-analysis.json +1068 -0
  10. package/savant-design-systems/resources/bmw-design-analysis.json +912 -0
  11. package/savant-design-systems/resources/bmw-m-design-analysis.json +824 -0
  12. package/savant-design-systems/resources/bugatti-design-analysis.json +746 -0
  13. package/savant-design-systems/resources/cal-com-design-analysis.json +913 -0
  14. package/savant-design-systems/resources/claude-design-analysis.json +1007 -0
  15. package/savant-design-systems/resources/clay-design-analysis.json +919 -0
  16. package/savant-design-systems/resources/clickhouse-design-analysis.json +926 -0
  17. package/savant-design-systems/resources/cohere-design-analysis.json +725 -0
  18. package/savant-design-systems/resources/coinbase-design-analysis.json +998 -0
  19. package/savant-design-systems/resources/composio-design-analysis.json +851 -0
  20. package/savant-design-systems/resources/cursor-design-analysis.json +934 -0
  21. package/savant-design-systems/resources/dell-1996-inspired.json +1042 -0
  22. package/savant-design-systems/resources/elevenlabs.json +551 -0
  23. package/savant-design-systems/resources/expo-design-analysis.json +879 -0
  24. package/savant-design-systems/resources/ferrari-design-analysis.json +874 -0
  25. package/savant-design-systems/resources/figma-design-analysis.json +928 -0
  26. package/savant-design-systems/resources/framer-design-analysis.json +891 -0
  27. package/savant-design-systems/resources/hashicorp-design-analysis.json +909 -0
  28. package/savant-design-systems/resources/hp-design-analysis.json +1077 -0
  29. package/savant-design-systems/resources/ibm-design-analysis.json +881 -0
  30. package/savant-design-systems/resources/intercom-design-analysis.json +876 -0
  31. package/savant-design-systems/resources/kraken.json +172 -0
  32. package/savant-design-systems/resources/lamborghini.json +335 -0
  33. package/savant-design-systems/resources/linear-design-analysis.json +890 -0
  34. package/savant-design-systems/resources/lovable.json +345 -0
  35. package/savant-design-systems/resources/mastercard.json +412 -0
  36. package/savant-design-systems/resources/meta-design-analysis.json +1121 -0
  37. package/savant-design-systems/resources/minimax-design-analysis.json +1220 -0
  38. package/savant-design-systems/resources/mintlify-design-analysis.json +1418 -0
  39. package/savant-design-systems/resources/miro-design-analysis.json +1364 -0
  40. package/savant-design-systems/resources/mistral-ai-design-analysis.json +1286 -0
  41. package/savant-design-systems/resources/mongodb-design-analysis.json +1276 -0
  42. package/savant-design-systems/resources/nike-design-analysis.json +938 -0
  43. package/savant-design-systems/resources/nintendo-com-2001-analysis.json +1082 -0
  44. package/savant-design-systems/resources/notion-design-analysis.json +1368 -0
  45. package/savant-design-systems/resources/nvidia-design-analysis.json +1023 -0
  46. package/savant-design-systems/resources/ollama-design-analysis.json +863 -0
  47. package/savant-design-systems/resources/opencode-design-analysis.json +806 -0
  48. package/savant-design-systems/resources/pinterest-design-analysis.json +953 -0
  49. package/savant-design-systems/resources/playstation-design-analysis.json +1053 -0
  50. package/savant-design-systems/resources/posthog-design-analysis.json +1146 -0
  51. package/savant-design-systems/resources/raycast.json +716 -0
  52. package/savant-design-systems/resources/renault-design-analysis.json +916 -0
  53. package/savant-design-systems/resources/replicate-design-analysis.json +986 -0
  54. package/savant-design-systems/resources/resend-design-analysis.json +942 -0
  55. package/savant-design-systems/resources/revolut-design-analysis.json +1008 -0
  56. package/savant-design-systems/resources/runwayml.json +291 -0
  57. package/savant-design-systems/resources/sanity.json +404 -0
  58. package/savant-design-systems/resources/sentri-inspired-design-analysis.json +953 -0
  59. package/savant-design-systems/resources/shopifi-inspired-design-analysis.json +921 -0
  60. package/savant-design-systems/resources/slacc-inspired-design-analysis.json +799 -0
  61. package/savant-design-systems/resources/spacex-inspired-design-analysis.json +598 -0
  62. package/savant-design-systems/resources/spotify.json +293 -0
  63. package/savant-design-systems/resources/starbucks.json +627 -0
  64. package/savant-design-systems/resources/stripi-inspired-design-analysis.json +805 -0
  65. package/savant-design-systems/resources/supabase.json +509 -0
  66. package/savant-design-systems/resources/superhumon-inspired-design-analysis.json +740 -0
  67. package/savant-design-systems/resources/tesla.json +333 -0
  68. package/savant-design-systems/resources/theverge.json +386 -0
  69. package/savant-design-systems/resources/together-ai-inspired-design-analysis.json +1099 -0
  70. package/savant-design-systems/resources/uber-inspired-design-analysis.json +1067 -0
  71. package/savant-design-systems/resources/vercel-inspired-design-analysis.json +1261 -0
  72. package/savant-design-systems/resources/vodafone-inspired-design-analysis.json +912 -0
  73. package/savant-design-systems/resources/voltagent-inspired-design-analysis.json +929 -0
  74. package/savant-design-systems/resources/warp-inspired-design-analysis.json +946 -0
  75. package/savant-design-systems/resources/webflow-inspired-design-analysis.json +1033 -0
  76. package/savant-design-systems/resources/wired-inspired-design-analysis.json +877 -0
  77. package/savant-design-systems/resources/wise-inspired-design-analysis.json +916 -0
  78. package/savant-design-systems/resources/xai-inspired-design-analysis.json +820 -0
  79. package/savant-design-systems/resources/zapier-inspired-design-analysis.json +915 -0
@@ -0,0 +1,916 @@
1
+ {
2
+ "schemaVersion": "1",
3
+ "id": "renault-design-analysis",
4
+ "displayName": "Renault-design-analysis",
5
+ "description": "Renault's web presence pairs the freshly-modernised Renault diamond\n(the 2021 flat-line rhombus mark) with a stark black-and-white canvas, a\nsignature Sunlight Yellow accent, and the proprietary NouvelR display\ntypeface. The system reads as confident, photography-first automotive — large\nhero cars on neutral or atmospheric backdrops, square-edged or barely-rounded\ncontainers, and a small disciplined palette where every coloured element is\nintentional. Tile grids, full-bleed banners, and a recurring \"configurator\"\nsurface (white card, yellow accent dots, neutral product chrome) carry the\nmass-market dealership tone without crossing into luxury.\n",
6
+ "source": "embedded",
7
+ "status": "curated-reference",
8
+ "targets": [
9
+ "terminal",
10
+ "react",
11
+ "web"
12
+ ],
13
+ "contentPath": "packages/design-systems/library/renault.design.md",
14
+ "sourceContentHash": "b343df9a67e57f248e9eee704f52b17dff9cf6a46d1dc9f8d7ab36741940db59",
15
+ "normalizedContentHash": "3cccd7576b9623bfa58beab1e1eccaaf2dab5976c5f6066fbf9908db94ac1f60",
16
+ "provenance": {
17
+ "sourceRepository": "VoltAgent/awesome-design-md",
18
+ "sourceRevision": "working-tree-curated-snapshot",
19
+ "sourcePath": "packages/design-systems/library/renault.design.md",
20
+ "license": "MIT"
21
+ },
22
+ "fonts": [
23
+ {
24
+ "family": "NouvelR",
25
+ "fallback": [
26
+ "system-ui",
27
+ "sans-serif"
28
+ ],
29
+ "redistributable": false
30
+ }
31
+ ],
32
+ "tokens": {
33
+ "colors": {
34
+ "ash": "#8a8a8a",
35
+ "badge-new": "#ffed00",
36
+ "body": "#222222",
37
+ "canvas": "#ffffff",
38
+ "charcoal": "#333333",
39
+ "divider-dark": "rgba(255,255,255,0.16)",
40
+ "error": "#be6464",
41
+ "hairline": "#f2f2f2",
42
+ "hairline-strong": "#000000",
43
+ "info": "#337ab7",
44
+ "ink": "#000000",
45
+ "link": "#0000ee",
46
+ "mute": "#666666",
47
+ "on-dark": "#ffffff",
48
+ "on-dark-mute": "rgba(255,255,255,0.72)",
49
+ "on-primary": "#000000",
50
+ "primary": "#ffed00",
51
+ "primary-deep": "#e6d200",
52
+ "stone": "#c4c4c4",
53
+ "success": "#8dc572",
54
+ "surface-card": "#ffffff",
55
+ "surface-dark": "#000000",
56
+ "surface-deep": "#111111",
57
+ "surface-soft": "#f7f7f7",
58
+ "warning": "#f0ad4e"
59
+ },
60
+ "typography": {
61
+ "display-xl": {
62
+ "fontFamily": "NouvelR",
63
+ "fontSize": "56px",
64
+ "fontWeight": 700,
65
+ "letterSpacing": 0,
66
+ "lineHeight": 0.95
67
+ },
68
+ "display-lg": {
69
+ "fontFamily": "NouvelR",
70
+ "fontSize": "40px",
71
+ "fontWeight": 700,
72
+ "letterSpacing": 0,
73
+ "lineHeight": 0.95
74
+ },
75
+ "display-md": {
76
+ "fontFamily": "NouvelR",
77
+ "fontSize": "32px",
78
+ "fontWeight": 700,
79
+ "letterSpacing": 0,
80
+ "lineHeight": 0.95
81
+ },
82
+ "heading-lg": {
83
+ "fontFamily": "NouvelR",
84
+ "fontSize": "24px",
85
+ "fontWeight": 700,
86
+ "letterSpacing": 0,
87
+ "lineHeight": 0.95
88
+ },
89
+ "heading-md": {
90
+ "fontFamily": "NouvelR",
91
+ "fontSize": "20px",
92
+ "fontWeight": 700,
93
+ "letterSpacing": 0,
94
+ "lineHeight": 0.95
95
+ },
96
+ "heading-sm": {
97
+ "fontFamily": "NouvelR",
98
+ "fontSize": "18px",
99
+ "fontWeight": 700,
100
+ "letterSpacing": 0,
101
+ "lineHeight": 1
102
+ },
103
+ "subtitle": {
104
+ "fontFamily": "NouvelR",
105
+ "fontSize": "19.2px",
106
+ "fontWeight": 600,
107
+ "letterSpacing": 0,
108
+ "lineHeight": 1.3
109
+ },
110
+ "body-lg": {
111
+ "fontFamily": "NouvelR",
112
+ "fontSize": "18px",
113
+ "fontWeight": 400,
114
+ "letterSpacing": 0,
115
+ "lineHeight": 1.5
116
+ },
117
+ "body-md": {
118
+ "fontFamily": "NouvelR",
119
+ "fontSize": "16px",
120
+ "fontWeight": 400,
121
+ "letterSpacing": 0,
122
+ "lineHeight": 1.4
123
+ },
124
+ "body-sm": {
125
+ "fontFamily": "NouvelR",
126
+ "fontSize": "14px",
127
+ "fontWeight": 400,
128
+ "letterSpacing": 0,
129
+ "lineHeight": 1.57
130
+ },
131
+ "button-lg": {
132
+ "fontFamily": "NouvelR",
133
+ "fontSize": "16px",
134
+ "fontWeight": 700,
135
+ "letterSpacing": 0,
136
+ "lineHeight": 1
137
+ },
138
+ "button-md": {
139
+ "fontFamily": "NouvelR",
140
+ "fontSize": "14.4px",
141
+ "fontWeight": 700,
142
+ "letterSpacing": "0.144px",
143
+ "lineHeight": 1
144
+ },
145
+ "button-sm": {
146
+ "fontFamily": "NouvelR",
147
+ "fontSize": "13px",
148
+ "fontWeight": 600,
149
+ "letterSpacing": "0.13px",
150
+ "lineHeight": 1.2
151
+ },
152
+ "caption": {
153
+ "fontFamily": "NouvelR",
154
+ "fontSize": "12px",
155
+ "fontWeight": 400,
156
+ "letterSpacing": 0,
157
+ "lineHeight": 1.4
158
+ },
159
+ "overline": {
160
+ "fontFamily": "NouvelR",
161
+ "fontSize": "10px",
162
+ "fontWeight": 700,
163
+ "letterSpacing": 0,
164
+ "lineHeight": 1.45
165
+ }
166
+ },
167
+ "spacing": {
168
+ "lg": "20px",
169
+ "md": "16px",
170
+ "section": "80px",
171
+ "sm": "12px",
172
+ "xl": "24px",
173
+ "xs": "8px",
174
+ "xxl": "32px",
175
+ "xxs": "4px",
176
+ "xxxl": "40px"
177
+ },
178
+ "radius": {
179
+ "full": "9999px",
180
+ "md": "4px",
181
+ "none": "0px",
182
+ "pill": "46px",
183
+ "sm": "3px",
184
+ "xs": "2px"
185
+ },
186
+ "components": {
187
+ "button-primary": {
188
+ "backgroundColor": "{colors.primary}",
189
+ "height": "48px",
190
+ "padding": "14px 24px",
191
+ "rounded": "{rounded.xs}",
192
+ "textColor": "{colors.on-primary}",
193
+ "typography": "{typography.button-md}"
194
+ },
195
+ "button-primary-pressed": {
196
+ "backgroundColor": "{colors.primary-deep}",
197
+ "rounded": "{rounded.xs}",
198
+ "textColor": "{colors.on-primary}",
199
+ "typography": "{typography.button-md}"
200
+ },
201
+ "button-secondary-dark": {
202
+ "backgroundColor": "{colors.surface-dark}",
203
+ "padding": "14px 24px",
204
+ "rounded": "{rounded.xs}",
205
+ "textColor": "{colors.on-dark}",
206
+ "typography": "{typography.button-md}"
207
+ },
208
+ "button-outline-dark": {
209
+ "backgroundColor": "{colors.canvas}",
210
+ "padding": "13px 23px",
211
+ "rounded": "{rounded.xs}",
212
+ "textColor": "{colors.ink}",
213
+ "typography": "{typography.button-md}"
214
+ },
215
+ "button-outline-light": {
216
+ "backgroundColor": "{colors.surface-dark}",
217
+ "padding": "13px 23px",
218
+ "rounded": "{rounded.xs}",
219
+ "textColor": "{colors.on-dark}",
220
+ "typography": "{typography.button-md}"
221
+ },
222
+ "button-pill": {
223
+ "backgroundColor": "{colors.canvas}",
224
+ "height": "36px",
225
+ "padding": "8px 16px",
226
+ "rounded": "{rounded.pill}",
227
+ "textColor": "{colors.ink}",
228
+ "typography": "{typography.button-sm}"
229
+ },
230
+ "button-icon-square": {
231
+ "backgroundColor": "{colors.canvas}",
232
+ "rounded": "{rounded.xs}",
233
+ "size": "40px",
234
+ "textColor": "{colors.ink}"
235
+ },
236
+ "text-input": {
237
+ "backgroundColor": "{colors.canvas}",
238
+ "height": "48px",
239
+ "padding": "12px 16px",
240
+ "rounded": "{rounded.none}",
241
+ "textColor": "{colors.ink}",
242
+ "typography": "{typography.body-md}"
243
+ },
244
+ "hero-banner": {
245
+ "backgroundColor": "{colors.surface-dark}",
246
+ "padding": 0,
247
+ "rounded": "{rounded.none}",
248
+ "textColor": "{colors.on-dark}"
249
+ },
250
+ "promo-tile-light": {
251
+ "backgroundColor": "{colors.canvas}",
252
+ "padding": "32px",
253
+ "rounded": "{rounded.none}",
254
+ "textColor": "{colors.ink}",
255
+ "typography": "{typography.heading-lg}"
256
+ },
257
+ "promo-tile-dark": {
258
+ "backgroundColor": "{colors.surface-dark}",
259
+ "padding": "32px",
260
+ "rounded": "{rounded.none}",
261
+ "textColor": "{colors.on-dark}",
262
+ "typography": "{typography.heading-lg}"
263
+ },
264
+ "promo-tile-yellow": {
265
+ "backgroundColor": "{colors.primary}",
266
+ "padding": "32px",
267
+ "rounded": "{rounded.none}",
268
+ "textColor": "{colors.on-primary}",
269
+ "typography": "{typography.heading-lg}"
270
+ },
271
+ "vehicle-card": {
272
+ "backgroundColor": "{colors.canvas}",
273
+ "padding": 0,
274
+ "rounded": "{rounded.none}",
275
+ "textColor": "{colors.ink}"
276
+ },
277
+ "configurator-row": {
278
+ "backgroundColor": "{colors.canvas}",
279
+ "padding": "24px 0",
280
+ "rounded": "{rounded.none}",
281
+ "textColor": "{colors.ink}",
282
+ "typography": "{typography.body-md}"
283
+ },
284
+ "configurator-swatch": {
285
+ "backgroundColor": "{colors.surface-soft}",
286
+ "rounded": "{rounded.full}",
287
+ "size": "56px"
288
+ },
289
+ "badge-new": {
290
+ "backgroundColor": "{colors.badge-new}",
291
+ "padding": "6px 14px",
292
+ "rounded": "{rounded.full}",
293
+ "textColor": "{colors.on-primary}",
294
+ "typography": "{typography.button-md}"
295
+ },
296
+ "nav-bar": {
297
+ "backgroundColor": "{colors.canvas}",
298
+ "height": "60px",
299
+ "rounded": "{rounded.none}",
300
+ "textColor": "{colors.ink}",
301
+ "typography": "{typography.button-md}"
302
+ },
303
+ "sub-nav-pill": {
304
+ "backgroundColor": "{colors.canvas}",
305
+ "padding": "8px 16px",
306
+ "rounded": "{rounded.pill}",
307
+ "textColor": "{colors.ink}",
308
+ "typography": "{typography.button-sm}"
309
+ },
310
+ "footer": {
311
+ "backgroundColor": "{colors.surface-dark}",
312
+ "padding": "64px 24px",
313
+ "rounded": "{rounded.none}",
314
+ "textColor": "{colors.on-dark}",
315
+ "typography": "{typography.body-sm}"
316
+ }
317
+ },
318
+ "extensions": {
319
+ "description": "Renault's web presence pairs the freshly-modernised Renault diamond\n(the 2021 flat-line rhombus mark) with a stark black-and-white canvas, a\nsignature Sunlight Yellow accent, and the proprietary NouvelR display\ntypeface. The system reads as confident, photography-first automotive — large\nhero cars on neutral or atmospheric backdrops, square-edged or barely-rounded\ncontainers, and a small disciplined palette where every coloured element is\nintentional. Tile grids, full-bleed banners, and a recurring \"configurator\"\nsurface (white card, yellow accent dots, neutral product chrome) carry the\nmass-market dealership tone without crossing into luxury.\n",
320
+ "name": "Renault-design-analysis",
321
+ "version": "alpha"
322
+ }
323
+ }
324
+ }
325
+
326
+ ---
327
+
328
+ ---
329
+ version: alpha
330
+ name: Renault-design-analysis
331
+ description: |
332
+ Renault's web presence pairs the freshly-modernised Renault diamond
333
+ (the 2021 flat-line rhombus mark) with a stark black-and-white canvas, a
334
+ signature Sunlight Yellow accent, and the proprietary NouvelR display
335
+ typeface. The system reads as confident, photography-first automotive — large
336
+ hero cars on neutral or atmospheric backdrops, square-edged or barely-rounded
337
+ containers, and a small disciplined palette where every coloured element is
338
+ intentional. Tile grids, full-bleed banners, and a recurring "configurator"
339
+ surface (white card, yellow accent dots, neutral product chrome) carry the
340
+ mass-market dealership tone without crossing into luxury.
341
+
342
+ colors:
343
+ primary: "#ffed00"
344
+ primary-deep: "#e6d200"
345
+ on-primary: "#000000"
346
+ ink: "#000000"
347
+ body: "#222222"
348
+ charcoal: "#333333"
349
+ mute: "#666666"
350
+ ash: "#8a8a8a"
351
+ stone: "#c4c4c4"
352
+ on-dark: "#ffffff"
353
+ on-dark-mute: "rgba(255,255,255,0.72)"
354
+ canvas: "#ffffff"
355
+ surface-soft: "#f7f7f7"
356
+ surface-card: "#ffffff"
357
+ surface-dark: "#000000"
358
+ surface-deep: "#111111"
359
+ hairline: "#f2f2f2"
360
+ hairline-strong: "#000000"
361
+ divider-dark: "rgba(255,255,255,0.16)"
362
+ badge-new: "#ffed00"
363
+ link: "#0000ee"
364
+ error: "#be6464"
365
+ warning: "#f0ad4e"
366
+ success: "#8dc572"
367
+ info: "#337ab7"
368
+
369
+ typography:
370
+ display-xl:
371
+ fontFamily: NouvelR
372
+ fontSize: 56px
373
+ fontWeight: 700
374
+ lineHeight: 0.95
375
+ letterSpacing: 0
376
+ display-lg:
377
+ fontFamily: NouvelR
378
+ fontSize: 40px
379
+ fontWeight: 700
380
+ lineHeight: 0.95
381
+ letterSpacing: 0
382
+ display-md:
383
+ fontFamily: NouvelR
384
+ fontSize: 32px
385
+ fontWeight: 700
386
+ lineHeight: 0.95
387
+ letterSpacing: 0
388
+ heading-lg:
389
+ fontFamily: NouvelR
390
+ fontSize: 24px
391
+ fontWeight: 700
392
+ lineHeight: 0.95
393
+ letterSpacing: 0
394
+ heading-md:
395
+ fontFamily: NouvelR
396
+ fontSize: 20px
397
+ fontWeight: 700
398
+ lineHeight: 0.95
399
+ letterSpacing: 0
400
+ heading-sm:
401
+ fontFamily: NouvelR
402
+ fontSize: 18px
403
+ fontWeight: 700
404
+ lineHeight: 1.0
405
+ letterSpacing: 0
406
+ subtitle:
407
+ fontFamily: NouvelR
408
+ fontSize: 19.2px
409
+ fontWeight: 600
410
+ lineHeight: 1.3
411
+ letterSpacing: 0
412
+ body-lg:
413
+ fontFamily: NouvelR
414
+ fontSize: 18px
415
+ fontWeight: 400
416
+ lineHeight: 1.5
417
+ letterSpacing: 0
418
+ body-md:
419
+ fontFamily: NouvelR
420
+ fontSize: 16px
421
+ fontWeight: 400
422
+ lineHeight: 1.4
423
+ letterSpacing: 0
424
+ body-sm:
425
+ fontFamily: NouvelR
426
+ fontSize: 14px
427
+ fontWeight: 400
428
+ lineHeight: 1.57
429
+ letterSpacing: 0
430
+ button-lg:
431
+ fontFamily: NouvelR
432
+ fontSize: 16px
433
+ fontWeight: 700
434
+ lineHeight: 1.0
435
+ letterSpacing: 0
436
+ button-md:
437
+ fontFamily: NouvelR
438
+ fontSize: 14.4px
439
+ fontWeight: 700
440
+ lineHeight: 1.0
441
+ letterSpacing: 0.144px
442
+ button-sm:
443
+ fontFamily: NouvelR
444
+ fontSize: 13px
445
+ fontWeight: 600
446
+ lineHeight: 1.2
447
+ letterSpacing: 0.13px
448
+ caption:
449
+ fontFamily: NouvelR
450
+ fontSize: 12px
451
+ fontWeight: 400
452
+ lineHeight: 1.4
453
+ letterSpacing: 0
454
+ overline:
455
+ fontFamily: NouvelR
456
+ fontSize: 10px
457
+ fontWeight: 700
458
+ lineHeight: 1.45
459
+ letterSpacing: 0
460
+
461
+ rounded:
462
+ none: 0px
463
+ xs: 2px
464
+ sm: 3px
465
+ md: 4px
466
+ pill: 46px
467
+ full: 9999px
468
+
469
+ spacing:
470
+ xxs: 4px
471
+ xs: 8px
472
+ sm: 12px
473
+ md: 16px
474
+ lg: 20px
475
+ xl: 24px
476
+ xxl: 32px
477
+ xxxl: 40px
478
+ section: 80px
479
+
480
+ components:
481
+ button-primary:
482
+ backgroundColor: "{colors.primary}"
483
+ textColor: "{colors.on-primary}"
484
+ typography: "{typography.button-md}"
485
+ rounded: "{rounded.xs}"
486
+ padding: 14px 24px
487
+ height: 48px
488
+ button-primary-pressed:
489
+ backgroundColor: "{colors.primary-deep}"
490
+ textColor: "{colors.on-primary}"
491
+ typography: "{typography.button-md}"
492
+ rounded: "{rounded.xs}"
493
+ button-secondary-dark:
494
+ backgroundColor: "{colors.surface-dark}"
495
+ textColor: "{colors.on-dark}"
496
+ typography: "{typography.button-md}"
497
+ rounded: "{rounded.xs}"
498
+ padding: 14px 24px
499
+ button-outline-dark:
500
+ backgroundColor: "{colors.canvas}"
501
+ textColor: "{colors.ink}"
502
+ typography: "{typography.button-md}"
503
+ rounded: "{rounded.xs}"
504
+ padding: 13px 23px
505
+ button-outline-light:
506
+ backgroundColor: "{colors.surface-dark}"
507
+ textColor: "{colors.on-dark}"
508
+ typography: "{typography.button-md}"
509
+ rounded: "{rounded.xs}"
510
+ padding: 13px 23px
511
+ button-pill:
512
+ backgroundColor: "{colors.canvas}"
513
+ textColor: "{colors.ink}"
514
+ typography: "{typography.button-sm}"
515
+ rounded: "{rounded.pill}"
516
+ padding: 8px 16px
517
+ height: 36px
518
+ button-icon-square:
519
+ backgroundColor: "{colors.canvas}"
520
+ textColor: "{colors.ink}"
521
+ rounded: "{rounded.xs}"
522
+ size: 40px
523
+ text-input:
524
+ backgroundColor: "{colors.canvas}"
525
+ textColor: "{colors.ink}"
526
+ typography: "{typography.body-md}"
527
+ rounded: "{rounded.none}"
528
+ padding: 12px 16px
529
+ height: 48px
530
+ hero-banner:
531
+ backgroundColor: "{colors.surface-dark}"
532
+ textColor: "{colors.on-dark}"
533
+ rounded: "{rounded.none}"
534
+ padding: 0
535
+ promo-tile-light:
536
+ backgroundColor: "{colors.canvas}"
537
+ textColor: "{colors.ink}"
538
+ typography: "{typography.heading-lg}"
539
+ rounded: "{rounded.none}"
540
+ padding: 32px
541
+ promo-tile-dark:
542
+ backgroundColor: "{colors.surface-dark}"
543
+ textColor: "{colors.on-dark}"
544
+ typography: "{typography.heading-lg}"
545
+ rounded: "{rounded.none}"
546
+ padding: 32px
547
+ promo-tile-yellow:
548
+ backgroundColor: "{colors.primary}"
549
+ textColor: "{colors.on-primary}"
550
+ typography: "{typography.heading-lg}"
551
+ rounded: "{rounded.none}"
552
+ padding: 32px
553
+ vehicle-card:
554
+ backgroundColor: "{colors.canvas}"
555
+ textColor: "{colors.ink}"
556
+ rounded: "{rounded.none}"
557
+ padding: 0
558
+ configurator-row:
559
+ backgroundColor: "{colors.canvas}"
560
+ textColor: "{colors.ink}"
561
+ typography: "{typography.body-md}"
562
+ rounded: "{rounded.none}"
563
+ padding: 24px 0
564
+ configurator-swatch:
565
+ backgroundColor: "{colors.surface-soft}"
566
+ rounded: "{rounded.full}"
567
+ size: 56px
568
+ badge-new:
569
+ backgroundColor: "{colors.badge-new}"
570
+ textColor: "{colors.on-primary}"
571
+ typography: "{typography.button-md}"
572
+ rounded: "{rounded.full}"
573
+ padding: 6px 14px
574
+ nav-bar:
575
+ backgroundColor: "{colors.canvas}"
576
+ textColor: "{colors.ink}"
577
+ typography: "{typography.button-md}"
578
+ rounded: "{rounded.none}"
579
+ height: 60px
580
+ sub-nav-pill:
581
+ backgroundColor: "{colors.canvas}"
582
+ textColor: "{colors.ink}"
583
+ typography: "{typography.button-sm}"
584
+ rounded: "{rounded.pill}"
585
+ padding: 8px 16px
586
+ footer:
587
+ backgroundColor: "{colors.surface-dark}"
588
+ textColor: "{colors.on-dark}"
589
+ typography: "{typography.body-sm}"
590
+ rounded: "{rounded.none}"
591
+ padding: 64px 24px
592
+ ---
593
+
594
+ ## Overview
595
+
596
+ Renault's Turkish marketing surfaces are unapologetically high-contrast: a
597
+ white canvas for browsing, a black canvas for product storytelling, and a
598
+ single Sunlight Yellow accent (`{colors.primary}` — `#ffed00`) reserved for
599
+ the most consequential actions. The brand's modernised flat diamond logo sets
600
+ the tone — geometric, confident, slightly industrial — and the system follows
601
+ suit. Square corners dominate, hairline borders are rare, and elevation is
602
+ expressed through colour blocking rather than shadow.
603
+
604
+ The typography is monolithic. Every text on the site is set in **NouvelR**,
605
+ Renault's bespoke display family, with a strong preference for weight 700 at
606
+ display sizes (with a tight `lineHeight: 0.95`) and weight 400 for body. There
607
+ is no secondary serif, no decorative italic, no script — the discipline is
608
+ the signature.
609
+
610
+ Page rhythm cycles between three surface modes: a **white catalogue mode** for
611
+ listings and configurators (`{colors.canvas}` with hairline-thin
612
+ `{colors.hairline}` dividers), a **black storytelling mode** for hero
613
+ sections, lifestyle imagery, and the lower half of campaign pages, and brief
614
+ **yellow accent moments** (`{colors.primary}` tiles, "NEW" badges, R5-coded
615
+ yellow paint shots) that punctuate the otherwise neutral palette.
616
+
617
+ **Key Characteristics:**
618
+ - Two-tone canvas system — `{colors.canvas}` (white) for browsing, `{colors.surface-dark}` (black) for storytelling — switched in full-bleed bands rather than subtle gradations.
619
+ - A single brand accent — `{colors.primary}` Sunlight Yellow — used scarcely on primary CTAs, "NEW" badges, R5 hero photography, and configurator dot indicators.
620
+ - **NouvelR everywhere**, with `{typography.display-xl}` headlines at 56px / weight 700 / `lineHeight: 0.95` so condensed multi-line headlines stack cleanly.
621
+ - Square geometry: `{rounded.xs}` (2px) on buttons, `{rounded.none}` on tiles and product cards, `{rounded.pill}` reserved exclusively for sub-nav chips and decorative badges.
622
+ - Photography-first product tiles — vehicle photos full-bleed inside otherwise neutral cards, with copy stacked beneath rather than overlaid.
623
+ - Page-level rhythm cycles white → black → yellow accent → black, with the wordmark and footer always closing on `{colors.surface-dark}`.
624
+
625
+ ## Colors
626
+
627
+ ### Brand & Accent
628
+ - **Sunlight Yellow** (`{colors.primary}` — `#ffed00`): the brand accent. Reserved for primary CTAs, "NEW" / "yeni" badges, configurator dot indicators, and full-bleed promotional tiles. Never decorative.
629
+ - **Sunlight Yellow Pressed** (`{colors.primary-deep}` — `#e6d200`): the active/pressed state of `{colors.primary}` buttons and tiles.
630
+ - **On-Primary** (`{colors.on-primary}` — `#000000`): label colour on top of `{colors.primary}` surfaces. Yellow always pairs with black text — never white.
631
+
632
+ ### Surface
633
+ - **Canvas** (`{colors.canvas}` — `#ffffff`): the default page background and card surface.
634
+ - **Surface Soft** (`{colors.surface-soft}` — `#f7f7f7`): subtle elevation step for grouped configurator rows and inactive form fields.
635
+ - **Surface Dark** (`{colors.surface-dark}` — `#000000`): the alternate canvas, used for hero bands, footer, and full-bleed storytelling sections.
636
+ - **Surface Deep** (`{colors.surface-deep}` — `#111111`): a one-step-up elevation inside `{colors.surface-dark}` regions for inset cards and form panels.
637
+ - **Hairline** (`{colors.hairline}` — `#f2f2f2`): the soft 1px divider between rows on white surfaces.
638
+ - **Hairline Strong** (`{colors.hairline-strong}` — `#000000`): full-strength dividers on white, plus all card / button outlines.
639
+ - **Divider Dark** (`{colors.divider-dark}` — `rgba(255,255,255,0.16)`): the corresponding low-contrast divider used inside `{colors.surface-dark}` regions.
640
+
641
+ ### Text
642
+ - **Ink** (`{colors.ink}` — `#000000`): primary text colour on white surfaces. The same value also drives logos, icons, and outline borders — black is structural, not decorative.
643
+ - **Body** (`{colors.body}` — `#222222`): secondary body text where pure black would feel too heavy in long paragraphs.
644
+ - **Charcoal** (`{colors.charcoal}` — `#333333`): captions, metadata, and small labels.
645
+ - **Mute** (`{colors.mute}` — `#666666`): supporting text and inactive nav labels.
646
+ - **Ash** (`{colors.ash}` — `#8a8a8a`): placeholder text, disabled labels.
647
+ - **Stone** (`{colors.stone}` — `#c4c4c4`): disabled-state foreground.
648
+ - **On-Dark** (`{colors.on-dark}` — `#ffffff`): primary text on `{colors.surface-dark}` surfaces.
649
+ - **On-Dark Mute** (`{colors.on-dark-mute}` — `rgba(255,255,255,0.72)`): secondary text in dark regions; preserves the brand's high-contrast feel without resorting to mid-grey.
650
+
651
+ ### Semantic
652
+ - **Error** (`{colors.error}` — `#be6464`): muted desaturated red used for inline form errors. Notably warmer than typical pure-red error states.
653
+ - **Warning** (`{colors.warning}` — `#f0ad4e`): amber alert.
654
+ - **Success** (`{colors.success}` — `#8dc572`): muted green confirmation.
655
+ - **Info** (`{colors.info}` — `#337ab7`): a desaturated mid-blue used in informational chips.
656
+ - **Link** (`{colors.link}` — `#0000ee`): the unstyled-anchor default kept for fallback inline text links — production links inherit `{colors.ink}` and rely on underline/weight rather than colour.
657
+
658
+ ## Typography
659
+
660
+ ### Font Family
661
+
662
+ The entire system is set in **NouvelR**, Renault's proprietary display
663
+ family, used across navigation, headlines, body, captions, and button
664
+ labels. The family carries a slightly geometric, semi-condensed personality
665
+ with tall x-heights and squared apexes that pair naturally with the diamond
666
+ logomark.
667
+
668
+ When NouvelR cannot be licensed, suitable open-source substitutes include
669
+ **Inter Tight**, **Manrope**, or **HK Grotesk Semi Condensed** — all share
670
+ the geometric-with-warmth feel and adapt cleanly to weights 400 / 600 / 700.
671
+ Tighten `lineHeight` on display sizes to ~0.95 to match the original; do not
672
+ relax it.
673
+
674
+ ### Hierarchy
675
+
676
+ | Token | Size | Weight | Line Height | Letter Spacing | Use |
677
+ |---|---|---|---|---|---|
678
+ | `{typography.display-xl}` | 56px | 700 | 0.95 | 0 | Hero headlines, campaign titles ("E-TECH ELEKTRİKLİ", "REVOLUTION"). |
679
+ | `{typography.display-lg}` | 40px | 700 | 0.95 | 0 | Secondary section titles. |
680
+ | `{typography.display-md}` | 32px | 700 | 0.95 | 0 | Page-level H1 on sub-pages and configurator panels. |
681
+ | `{typography.heading-lg}` | 24px | 700 | 0.95 | 0 | Section headers, card titles. |
682
+ | `{typography.heading-md}` | 20px | 700 | 0.95 | 0 | Sub-section headers, prominent labels. |
683
+ | `{typography.heading-sm}` | 18px | 700 | 1.0 | 0 | Tile titles, list group headers. |
684
+ | `{typography.subtitle}` | 19.2px | 600 | 1.3 | 0 | Lead paragraphs, hero subtitles. |
685
+ | `{typography.body-lg}` | 18px | 400 | 1.5 | 0 | Long-form body. |
686
+ | `{typography.body-md}` | 16px | 400 | 1.4 | 0 | Default body and form fields. |
687
+ | `{typography.body-sm}` | 14px | 400 | 1.57 | 0 | Captions, metadata. |
688
+ | `{typography.button-lg}` | 16px | 700 | 1.0 | 0 | Large CTAs in hero bands. |
689
+ | `{typography.button-md}` | 14.4px | 700 | 1.0 | 0.144px | Default button label across the system. |
690
+ | `{typography.button-sm}` | 13px | 600 | 1.2 | 0.13px | Sub-nav pills, small in-card actions. |
691
+ | `{typography.caption}` | 12px | 400 | 1.4 | 0 | Footer disclosure, regulatory text. |
692
+ | `{typography.overline}` | 10px | 700 | 1.45 | 0 | Short uppercase labels above titles. |
693
+
694
+ ### Principles
695
+ - Display sizes always weight 700, always at `lineHeight: 0.95`. The tightness is what makes the brand feel confident rather than corporate.
696
+ - Body copy stays at weight 400 — never 500. The contrast between body and display is part of the system.
697
+ - Button labels carry a tiny positive letter-spacing (`0.144px` on `{typography.button-md}`) — almost imperceptible, but it adds the small bit of mechanical precision the brand wants on CTAs.
698
+ - No italics, no script, no decorative ligatures.
699
+
700
+ ### Note on Font Substitutes
701
+
702
+ NouvelR is licensed; substitutes (Inter Tight / Manrope / HK Grotesk Semi
703
+ Condensed) preserve the geometric character but typically render with
704
+ slightly looser line heights at display sizes — clamp display
705
+ `lineHeight` to 0.95 explicitly to match the source.
706
+
707
+ ## Layout
708
+
709
+ ### Spacing System
710
+ - **Base unit**: 4px, with the working scale built on multiples of 4 and 8.
711
+ - **Tokens**: `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 16px · `{spacing.lg}` 20px · `{spacing.xl}` 24px · `{spacing.xxl}` 32px · `{spacing.xxxl}` 40px · `{spacing.section}` 80px.
712
+ - Section padding (full-bleed band → next band): `{spacing.section}` (80px) on desktop, collapsing to `{spacing.xxxl}` (40px) on mobile.
713
+ - Promo-tile internal padding: `{spacing.xxl}` (32px) all sides on desktop.
714
+ - Configurator row vertical padding: `{spacing.xl}` (24px) top/bottom with hairline divider between rows.
715
+
716
+ ### Grid & Container
717
+ - **Max content width** ≈ 1440px. Beyond that, content remains centred and the dark/light bands extend full-bleed.
718
+ - **Promo grid** on the homepage: a 2-column tile grid on desktop, dropping to 1-up on mobile. Each tile is square-cornered (`{rounded.none}`) with the photography or solid colour as the background.
719
+ - **Vehicle range grids**: 3 to 4 cars per row at desktop, collapsing 2-up at tablet and 1-up at small mobile.
720
+ - **Configurator** uses a fixed left visualisation pane (~60% width) with a right-hand scrolling option list (~40% width) on desktop.
721
+
722
+ ### Whitespace Philosophy
723
+ - Whitespace is structural, not decorative. Sections are separated by colour-blocking (white → black) rather than soft padding ramps.
724
+ - Inside cards and configurator rows, padding is generous but never airy — the brand is mass-market, so density is acceptable.
725
+ - Hairline `{colors.hairline}` dividers on white surfaces create the sense of catalogue precision; on dark surfaces, `{colors.divider-dark}` carries the same role.
726
+
727
+ ## Elevation & Depth
728
+
729
+ | Level | Treatment | Use |
730
+ |---|---|---|
731
+ | 0 — flat | No shadow, no border | Default page surface, full-bleed bands. |
732
+ | 1 — outline | 1px solid `{colors.hairline-strong}` or `{colors.hairline}` | Promo tiles on light, vehicle cards, configurator panels. |
733
+ | 2 — colour-blocked elevation | Surface colour shift (e.g. `{colors.canvas}` card sitting inside a `{colors.surface-soft}` band) | Configurator detail cards, related-content rows. |
734
+ | 3 — dark inversion | Card swaps to `{colors.surface-dark}` against a `{colors.canvas}` band | "Ticari araç" hero promo tiles, lifestyle storytelling cards. |
735
+
736
+ Drop shadows are extracted from the system but rarely visible on the marketing
737
+ surfaces. When they appear, they are very subtle (~10% opacity, 2–4px blur)
738
+ and used on floating elements like the configurator's sticky summary bar.
739
+
740
+ ### Decorative Depth
741
+ - The R5 hero band uses an atmospheric mesh-gradient backdrop — purple-to-pink-to-yellow glow behind the car silhouette — that acts as the only true atmospheric depth in the system. Everywhere else, depth is structural (colour-blocking + outlines), not atmospheric.
742
+ - E-TECH electric powertrain pages use a luminous magenta-to-violet gradient behind cutaway diagrams, reserved for the electric sub-brand.
743
+
744
+ ## Shapes
745
+
746
+ ### Border Radius Scale
747
+
748
+ | Token | Value | Use |
749
+ |---|---|---|
750
+ | `{rounded.none}` | 0px | Tiles, vehicle cards, dividers, banner bands, full-bleed images. |
751
+ | `{rounded.xs}` | 2px | Default buttons (primary yellow, secondary black, outline). |
752
+ | `{rounded.sm}` | 3px | Tab panels, small chips. |
753
+ | `{rounded.md}` | 4px | Form labels, inline tags. |
754
+ | `{rounded.pill}` | 46px | Sub-nav pills, "yeni" / "NEW" badges, decorative carousel chips. |
755
+ | `{rounded.full}` | 9999px | Configurator colour swatches, avatar dots. |
756
+
757
+ ### Photography Geometry
758
+ - Vehicle photography is **always square-cornered** (`{rounded.none}`). No rounded vehicle hero shots, no soft-edged car cards.
759
+ - Aspect ratios cluster around **16:9** (hero bands), **1:1** (square promo tiles), and **4:3** (vehicle range cards). Lifestyle imagery sometimes runs **2:1 wide** for full-bleed bands.
760
+ - Avatars and small profile cues — when present — use `{rounded.full}` circles to contrast with the otherwise square geometry.
761
+
762
+ ## Components
763
+
764
+ ### Buttons
765
+
766
+ **`button-primary`** — yellow CTA
767
+ - Background `{colors.primary}`, label `{colors.on-primary}`, type `{typography.button-md}`, padding `14px 24px`, `rounded: {rounded.xs}`.
768
+ - The single most important action on a page (e.g. "Hemen randevu al", "Hesapla", "Konfigüratörü başlat").
769
+ - Pressed state lives in `button-primary-pressed` (background `{colors.primary-deep}`).
770
+
771
+ **`button-secondary-dark`** — solid black CTA
772
+ - Background `{colors.surface-dark}`, label `{colors.on-dark}`, type `{typography.button-md}`, `rounded: {rounded.xs}`.
773
+ - Equal-weight secondary action paired with `{component.button-primary}`, or the primary action when used on a yellow tile background.
774
+
775
+ **`button-outline-dark`** — outlined CTA on light
776
+ - Background `{colors.canvas}`, label `{colors.ink}`, 1px solid `{colors.hairline-strong}`, type `{typography.button-md}`, `rounded: {rounded.xs}`.
777
+ - Tertiary action; appears alongside primary/secondary for "Detayları gör", "Modeller", etc.
778
+
779
+ **`button-outline-light`** — outlined CTA on dark
780
+ - Background `{colors.surface-dark}`, label `{colors.on-dark}`, 1px solid `{colors.on-dark}`, type `{typography.button-md}`, `rounded: {rounded.xs}`.
781
+ - The dark-canvas counterpart to `{component.button-outline-dark}`.
782
+
783
+ **`button-pill`** — sub-nav chip
784
+ - Background `{colors.canvas}`, label `{colors.ink}`, 1px solid `{colors.hairline-strong}`, type `{typography.button-sm}`, `rounded: {rounded.pill}`, height 36px.
785
+ - The only place the system uses a pill — for top-level filter chips ("Servis & randevu", "Sahiplik dönemi geçişi", "Kampanyalar") and configurator tab switches.
786
+
787
+ **`button-icon-square`** — small icon button
788
+ - Background `{colors.canvas}`, 1px solid `{colors.hairline-strong}`, `rounded: {rounded.xs}`, 40×40px square.
789
+ - Carousel arrows, share, language switcher.
790
+
791
+ ### Cards & Containers
792
+
793
+ **`promo-tile-light`** — white promo tile
794
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.heading-lg}`, padding `{spacing.xxl}`, `rounded: {rounded.none}`.
795
+ - Used in the homepage 2-up grid for "Hybrid araç modelleri", "binek araç satış kampanyaları" tiles.
796
+
797
+ **`promo-tile-dark`** — black promo tile
798
+ - Background `{colors.surface-dark}`, text `{colors.on-dark}`, type `{typography.heading-lg}`, padding `{spacing.xxl}`, `rounded: {rounded.none}`.
799
+ - Lifestyle / commercial-vehicle storytelling tiles ("ticari araç satış kampanyaları").
800
+
801
+ **`promo-tile-yellow`** — accent promo tile
802
+ - Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.heading-lg}`, padding `{spacing.xxl}`, `rounded: {rounded.none}`.
803
+ - The single "PARLAK SARI" / "Sunlight Yellow" attention tile that anchors a campaign band. Reserved — usually one per page maximum.
804
+
805
+ **`vehicle-card`** — car listing card
806
+ - Background `{colors.canvas}`, full-bleed product photography on top, text below, `rounded: {rounded.none}`, no outer border.
807
+ - Includes vehicle name (`{typography.heading-md}`), variant subtitle (`{typography.body-sm}`), and a single trailing arrow icon.
808
+
809
+ **`hero-banner`** — full-bleed hero
810
+ - Background `{colors.surface-dark}` with full-bleed photo or atmospheric gradient, content stacked left, type `{typography.display-xl}` for the title.
811
+ - "SCENIC E-TECH ELEKTRİKLİ" hero on the homepage.
812
+
813
+ ### Inputs & Forms
814
+
815
+ **`text-input`** — default input
816
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-md}`, 1px bottom border `{colors.hairline-strong}`, `rounded: {rounded.none}`, padding `{spacing.sm} {spacing.md}`, height 48px.
817
+ - Inputs intentionally minimal — borderless on top and sides, single hairline at the bottom — keeping the catalogue feel.
818
+
819
+ ### Configurator
820
+
821
+ **`configurator-row`** — option list row
822
+ - Background `{colors.canvas}`, separator hairline `{colors.hairline}` between rows, padding `{spacing.xl}` top/bottom, type `{typography.body-md}`.
823
+ - Right-side scrolling list on the configurator: "kasa tipi", "motor seçimi", "versiyon seçimi", "renk seçenekleri", etc.
824
+
825
+ **`configurator-swatch`** — circular colour pick
826
+ - Background `{colors.surface-soft}` (or the actual car colour), `rounded: {rounded.full}`, 56×56px.
827
+ - Used for paint colour selection. Active state adds a 1px solid `{colors.hairline-strong}` ring.
828
+
829
+ ### Navigation
830
+
831
+ **`nav-bar`** — top nav (desktop)
832
+ - Background `{colors.canvas}`, type `{typography.button-md}`, height 60px, hairline `{colors.hairline}` bottom border.
833
+ - Left: diamond logomark. Centre: top-level nav ("Modeller", "Hizmetler", "Renault Yaşamı", "MyRenault"). Right: language switcher + login icon.
834
+
835
+ **`nav-bar`** (mobile)
836
+ - Same height 60px, collapses centre nav into a hamburger icon. Logo stays left, login stays right.
837
+
838
+ **`sub-nav-pill`** — pill-style sub-nav
839
+ - Pill chips set in a horizontal scroll bar between hero and content body (e.g. "Servis & randevu", "Sahiplik dönemi geçişi", "Kampanyalar"), `{component.button-pill}` styling.
840
+
841
+ ### Signature Components
842
+
843
+ **`badge-new`** — "yeni" badge
844
+ - Background `{colors.primary}`, label `{colors.on-primary}`, type `{typography.button-md}`, `rounded: {rounded.full}`, padding `6px 14px`.
845
+ - Anchored on the bottom-left of new vehicle cards.
846
+
847
+ **`footer`** — global footer
848
+ - Background `{colors.surface-dark}`, text `{colors.on-dark}`, type `{typography.body-sm}`, padding `64px 24px`.
849
+ - Three-column legal/quick-links/locale grid above a single-line copyright row separated by `{colors.divider-dark}`.
850
+
851
+ ## Do's and Don'ts
852
+
853
+ ### Do
854
+ - Reserve `{colors.primary}` exclusively for primary CTAs, "yeni"/"NEW" badges, and at most one accent promo tile per band — `{component.promo-tile-yellow}` is intentionally rare.
855
+ - Pair `{colors.primary}` only with `{colors.on-primary}` text. Yellow + white is forbidden.
856
+ - Set everything in **NouvelR** — no secondary serif, no script, no decorative italic.
857
+ - Hold display headlines at `{typography.display-xl}` weight 700 with `lineHeight: 0.95` so they stack tightly on multi-line wraps.
858
+ - Use `{rounded.xs}` (2px) on every standard button — the near-flat corner is part of the brand.
859
+ - Switch full bands between `{colors.canvas}` and `{colors.surface-dark}` for storytelling rhythm. Avoid mid-greys as section backgrounds.
860
+ - Show vehicle photography full-bleed inside `{component.vehicle-card}` with copy stacked beneath, never overlaid.
861
+ - Use `{component.sub-nav-pill}` (`{rounded.pill}`) only for sub-nav and small filter rows — never for primary CTAs.
862
+
863
+ ### Don't
864
+ - Don't introduce a secondary accent colour. Yellow is the only brand accent; semantic colours (`{colors.error}`, `{colors.success}`, `{colors.warning}`) are functional, not decorative.
865
+ - Don't round vehicle cards or promo tiles. Square-cornered photography is core to the brand expression.
866
+ - Don't soften body weights to 500 or 600 — the system relies on the 400 / 700 contrast.
867
+ - Don't apply `{colors.primary}` to body text or large surfaces beyond the single accent tile per band.
868
+ - Don't add atmospheric gradient washes outside the dedicated R5 / E-TECH hero contexts.
869
+ - Don't pair light grey text on white. Body text steps through `{colors.body}`, `{colors.charcoal}`, `{colors.mute}` — `{colors.ash}` and `{colors.stone}` are reserved for placeholders and disabled states.
870
+ - Don't add drop shadows to vehicle cards or promo tiles — the system is shadow-free at the catalogue level.
871
+
872
+ ## Responsive Behavior
873
+
874
+ ### Breakpoints
875
+
876
+ | Name | Width | Key Changes |
877
+ |---|---|---|
878
+ | Desktop XL | ≥ 1440px | Full max-width container, 3–4 column vehicle grid, 2-up promo tile grid. |
879
+ | Desktop | 1280–1439px | Same layout, container shrinks to viewport with `{spacing.xl}` side padding. |
880
+ | Tablet Large | 1024–1279px | Vehicle grid drops to 3-up, configurator left/right panes resize to 55/45. |
881
+ | Tablet | 768–1023px | Promo tile grid collapses to 2-up, sub-nav pills become horizontal scroll. |
882
+ | Mobile Large | 426–767px | Vehicle grid 2-up, configurator switches to stacked panes (visualisation on top, options below), nav collapses to hamburger. |
883
+ | Mobile | ≤ 425px | All grids 1-up, hero `{typography.display-xl}` clamps to ~40px, section padding `{spacing.section}` collapses to `{spacing.xxxl}`. |
884
+
885
+ ### Touch Targets
886
+ - All buttons ship at minimum 44×44px on mobile; default `{component.button-primary}` is 48px tall, comfortably exceeding WCAG AAA.
887
+ - `{component.sub-nav-pill}` (36px) is bumped to 40px tall on mobile via increased vertical padding.
888
+ - `{component.button-icon-square}` (40px) sits at the WCAG AA minimum and remains tappable, but should grow to 44px when used as a primary navigation control.
889
+
890
+ ### Collapsing Strategy
891
+ - Top-level nav collapses to hamburger at < 1024px; the logo and login icon stay anchored.
892
+ - 2-up promo grid collapses to 1-up at < 768px; tile padding shrinks from `{spacing.xxl}` to `{spacing.lg}`.
893
+ - Configurator switches from side-by-side to stacked at < 1024px, with the visualisation pinned to the top of the viewport on scroll.
894
+ - Display headlines clamp: `{typography.display-xl}` 56px → 40px → 32px across the breakpoint ladder.
895
+ - Sub-nav pills convert from a wrap row to a horizontal scroll-rail at < 768px.
896
+
897
+ ### Image Behavior
898
+ - Vehicle photography is served at 1.5× and 2× DPR; below 768px, the system swaps to a portrait-oriented composition where art direction allows.
899
+ - Hero atmospheric gradients (R5, E-TECH) load lazily after primary content; they are not blocking.
900
+ - Lifestyle / commercial photography in `{component.promo-tile-dark}` keeps the same 16:9 framing across breakpoints, cropping inward rather than letterboxing.
901
+
902
+ ## Iteration Guide
903
+
904
+ 1. Focus on ONE component at a time. Most components share `{rounded.xs}`, `{colors.canvas}` / `{colors.surface-dark}`, and NouvelR — only the role-specific tokens (`{colors.primary}`, `{component.promo-tile-yellow}`) shift between variants.
905
+ 2. Reference component names and tokens directly (`{colors.primary}`, `{component.button-primary-pressed}`, `{rounded.pill}`) — do not paraphrase.
906
+ 3. Run `npx @google/design.md lint DESIGN.md` after edits; the orphaned-tokens warning will catch unused entries before they ship.
907
+ 4. Add new variants as separate entries (`-pressed`, `-disabled`, `-outline`) — do not bury them in prose.
908
+ 5. Default body type to `{typography.body-md}`; reach for `{typography.subtitle}` only on hero subtitles and lead paragraphs.
909
+ 6. Keep `{colors.primary}` scarce — if more than one yellow element appears per viewport, ask whether one of them should drop to `{colors.surface-dark}` or `{colors.canvas}` instead.
910
+
911
+ ## Known Gaps
912
+
913
+ - Active/pressed visual states are not consistently observable in static surfaces; `button-primary-pressed` documents the extracted darkened-yellow value, but no other component has a pressed variant promoted to the YAML.
914
+ - Drop-shadow values exist in the extracted tokens but are rarely surfaced visually; only the configurator's sticky summary bar uses them on the captured pages.
915
+ - The MyRenault application surfaces (logged-in product) are out of scope for this extraction — only the public marketing canvas is documented.
916
+ - Form-field focus styling is not extracted; the system likely relies on a thicker bottom border at `{colors.ink}`, but this is not visually confirmed on the captured pages.