@salifbiaye/create-boutique 0.3.6 → 0.4.1

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 (30) hide show
  1. package/package.json +5 -2
  2. package/templates/backend/src/scripts/seed.ts +47 -12
  3. package/templates/storefront/locales/en.json +16 -1
  4. package/templates/storefront/locales/fr.json +16 -1
  5. package/templates/storefront/src/app/(main)/page.tsx +123 -0
  6. package/templates/storefront/src/app/layout.tsx +4 -0
  7. package/templates/storefront/src/lib/boutique/schema.ts +1 -1
  8. package/templates/storefront/src/modules/ub/album.tsx +137 -0
  9. package/templates/storefront/src/modules/ub/cinema.tsx +180 -0
  10. package/templates/storefront/src/modules/ub/gala.tsx +178 -0
  11. package/templates/storefront/src/modules/ub/tech.tsx +279 -0
  12. package/templates/storefront/src/styles/ub/album.css +205 -0
  13. package/templates/storefront/src/styles/ub/cinema.css +169 -0
  14. package/templates/storefront/src/styles/ub/gala.css +242 -0
  15. package/templates/storefront/src/styles/ub/tech.css +441 -0
  16. package/templates/storefront/src/styles/ub/variants.css +1 -5
  17. package/templates/storefront/themes/cyber-monday/theme.json +4 -3
  18. package/templates/storefront/themes/cyber-monday-2/campaign.en.json +1 -1
  19. package/templates/storefront/themes/cyber-monday-2/campaign.fr.json +1 -1
  20. package/templates/storefront/themes/cyber-monday-2/theme.json +5 -4
  21. package/templates/storefront/themes/halloween/theme.json +3 -2
  22. package/templates/storefront/themes/halloween-2/theme.json +2 -1
  23. package/templates/storefront/themes/noel/theme.json +3 -2
  24. package/templates/storefront/themes/noel-2/theme.json +3 -2
  25. package/templates/storefront/themes/nouvel-an/campaign.en.json +3 -3
  26. package/templates/storefront/themes/nouvel-an/campaign.fr.json +2 -2
  27. package/templates/storefront/themes/nouvel-an/theme.json +2 -1
  28. package/templates/storefront/themes/nouvel-an-2/campaign.en.json +5 -5
  29. package/templates/storefront/themes/nouvel-an-2/campaign.fr.json +5 -5
  30. package/templates/storefront/themes/nouvel-an-2/theme.json +4 -3
@@ -0,0 +1,441 @@
1
+ /* Accueil « Tech » (thèmes Cyber Monday) — modules/ub/tech.tsx. Lancement produit : grille lumineuse, bandeau défilant,
2
+ flash deals, bento, fiche technique. Cyber Monday 1 : nuit violette, visuel sur le côté.
3
+ Cyber Monday 2 : blanc studio, le visuel couvre le hero, mot en lettres « tuiles ».
4
+ Les jetons ci-dessous s'appliquent à tout le site (produit, panier, checkout, compte). */
5
+
6
+ [data-theme="cyber-monday"]:not([data-variant]) {
7
+ --bg: #0b0716; --surface: #140d27; --tint-1: #1d1338; --tint-2: #181032; --tint-3: #16122c; --tint-4: #221440;
8
+ --ink: #f4f0ff; --ink-muted: #a69dc9; --border: #2a1f4a;
9
+ --primary: #8b5cf6; --on-primary: #ffffff; --accent: #c4b5fd; --on-accent: #1a0f33;
10
+ --sale: #f0abfc; --star: #facc15; --success: #4ade80;
11
+ --hero-bg: #05030b; --hero-ink: #ffffff; --hero-muted: #b9b0dc;
12
+ --band-bg: #8b5cf6; --band-ink: #ffffff; --bubble-bg: #8b5cf6; --bubble-ink: #ffffff;
13
+ --topbar-bg: #6d28d9; --topbar-ink: #ffffff; --focus: #c4b5fd;
14
+ --shadow-card: 0 18px 40px -24px rgb(0 0 0 / 0.8);
15
+ --ub-font-head: var(--font-space-grotesk); --ub-font-body: var(--font-inter);
16
+ --ub-head-weight: 700; --ub-head-case: none; --ub-head-track: -0.03em;
17
+ --ub-r-card: 18px; --ub-r-btn: 12px; --ub-r-tile: 18px; --ub-r-media: 14px;
18
+ --tc-glow: 0 0 0 1px rgb(139 92 246 / 0.35), 0 18px 60px -18px rgb(139 92 246 / 0.65);
19
+ --tc-card: linear-gradient(180deg, #171030 0%, #110b22 100%);
20
+ color-scheme: dark;
21
+ }
22
+ [data-variant="cyber-monday-2"] {
23
+ --bg: #ffffff; --surface: #f4f4f6; --tint-1: #efeff2; --tint-2: #f1f0fb; --tint-3: #eef3f2; --tint-4: #f6f1ee;
24
+ --ink: #0b0b0f; --ink-muted: #5f616c; --border: #e4e4ea;
25
+ --primary: #0b0b0f; --on-primary: #ffffff; --accent: #5b3df5; --on-accent: #ffffff;
26
+ --sale: #e11d48; --star: #f59e0b; --success: #15803d;
27
+ --hero-bg: #ececec; --hero-ink: #0b0b0f; --hero-muted: #4d4f59;
28
+ --band-bg: #0b0b0f; --band-ink: #ffffff; --bubble-bg: #0b0b0f; --bubble-ink: #ffffff;
29
+ --topbar-bg: #0b0b0f; --topbar-ink: #ffffff; --focus: #5b3df5;
30
+ --shadow-card: 0 14px 34px -22px rgb(11 11 15 / 0.35);
31
+ --ub-font-head: var(--font-sora); --ub-font-body: var(--font-inter);
32
+ --ub-head-weight: 700; --ub-head-case: none; --ub-head-track: -0.035em;
33
+ --ub-r-card: 14px; --ub-r-btn: 999px; --ub-r-tile: 14px; --ub-r-hero: 0px; --ub-r-media: 10px;
34
+ --tc-glow: 0 18px 40px -26px rgb(11 11 15 / 0.45);
35
+ --tc-card: #ffffff;
36
+ color-scheme: light;
37
+ }
38
+
39
+ /* ---------- En-tête et pied de page ---------- */
40
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-nav { background: rgb(11 7 22 / 0.82); backdrop-filter: blur(14px); border-bottom: 1px solid var(--border); }
41
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-search { background: var(--surface); border-color: var(--border); color: var(--ink); }
42
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-nav__cta { background: var(--primary); color: #fff; box-shadow: var(--tc-glow); }
43
+ [data-variant="cyber-monday-2"] .ub-nav { background: rgb(255 255 255 / 0.9); backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); }
44
+ [data-variant="cyber-monday-2"] .ub-nav__cta { background: var(--ink); color: #fff; }
45
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-footwrap { --foot-bg: #120b24; --foot-ink: var(--ink); --cta-bg: var(--primary); --cta-ink: #ffffff; }
46
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-footwrap .ub-footer { border: 1px solid var(--border); }
47
+ [data-variant="cyber-monday-2"] .ub-footwrap { --foot-bg: #0b0b0f; --foot-ink: #f4f4f6; --cta-bg: #ececec; --cta-ink: #0b0b0f; }
48
+
49
+ /* Cartes produits du reste du site (boutique, recherche, produits liés) */
50
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-card { background: var(--tc-card); border: 1px solid var(--border); }
51
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-card__media { background: #1a1233; }
52
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-card__cart { background: var(--surface); color: var(--ink); border-color: var(--border); }
53
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-badge { background: var(--primary); color: #fff; }
54
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-tile { background: var(--surface); border: 1px solid var(--border); box-shadow: none; }
55
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-tile__ic { color: var(--accent); }
56
+ [data-theme="cyber-monday"]:not([data-variant]) .ub-eyebrow { background: rgb(139 92 246 / 0.18); color: var(--accent); }
57
+ [data-variant="cyber-monday-2"] .ub-card { border: 1px solid var(--border); box-shadow: none; }
58
+ [data-variant="cyber-monday-2"] .ub-card:hover { box-shadow: var(--shadow-card); }
59
+ [data-variant="cyber-monday-2"] .ub-badge { background: var(--sale); color: #fff; }
60
+ [data-variant="cyber-monday-2"] .ub-eyebrow { background: var(--ink); color: #fff; }
61
+ [data-variant="cyber-monday-2"] .ub-tile__ic { color: var(--accent); }
62
+
63
+ /* ---------- Hero ---------- */
64
+ .ub-tc-hero {
65
+ position: relative;
66
+ isolation: isolate;
67
+ overflow: hidden;
68
+ background: radial-gradient(55% 75% at 78% 45%, #170a33 0%, var(--hero-bg) 70%);
69
+ color: var(--hero-ink);
70
+ }
71
+ .ub-tc-hero__grid {
72
+ position: absolute;
73
+ inset: 0;
74
+ z-index: -2;
75
+ background-image:
76
+ linear-gradient(rgb(139 92 246 / 0.12) 1px, transparent 1px),
77
+ linear-gradient(90deg, rgb(139 92 246 / 0.12) 1px, transparent 1px);
78
+ background-size: 56px 56px;
79
+ mask-image: radial-gradient(70% 70% at 30% 60%, #000 20%, transparent 75%);
80
+ }
81
+ .ub-tc-hero__beam {
82
+ position: absolute;
83
+ top: -30%;
84
+ left: 38%;
85
+ z-index: -1;
86
+ width: 38%;
87
+ height: 160%;
88
+ background: linear-gradient(180deg, rgb(167 139 250 / 0.35), transparent 70%);
89
+ filter: blur(40px);
90
+ transform: rotate(-24deg);
91
+ pointer-events: none;
92
+ }
93
+ /* Cyber Monday 1 : le visuel fait partie du fond (comme Black Friday) : posé à droite sur toute la hauteur,
94
+ fondu dans le noir à gauche, en haut et en bas. Pas de cadre, pas d'ombre. */
95
+ .ub-tc-hero[data-has-image] .ub-tc-hero__beam { display: none; }
96
+ .ub-tc-hero__cover { position: absolute; inset: 0 0 0 34%; z-index: -1; }
97
+ .ub-tc-hero__cover img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 62%; animation: ub-tc-fadein 1.2s ease both; }
98
+ .ub-tc-hero__cover::after {
99
+ content: "";
100
+ position: absolute;
101
+ inset: 0;
102
+ background:
103
+ linear-gradient(90deg, var(--hero-bg) 0%, rgb(5 3 11 / 0.55) 20%, transparent 45%),
104
+ linear-gradient(0deg, var(--hero-bg) 0%, transparent 18%),
105
+ linear-gradient(180deg, var(--hero-bg) 0%, transparent 12%);
106
+ }
107
+ .ub-tc-hero[data-has-image] .ub-tc-hero__side > img { display: none; }
108
+ .ub-tc-hero[data-has-image] .ub-tc-hero__side { aspect-ratio: auto; align-self: end; }
109
+ .ub-tc-hero[data-has-image] .ub-tc-badge { position: relative; left: auto; bottom: auto; justify-self: start; width: max-content; }
110
+ .ub-tc-hero__in {
111
+ display: grid;
112
+ grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
113
+ gap: var(--space-12);
114
+ align-items: center;
115
+ min-height: clamp(560px, 46vw, 720px);
116
+ padding-top: var(--space-12);
117
+ padding-bottom: var(--space-12);
118
+ }
119
+ .ub-tc-hero__text { display: grid; gap: var(--space-6); justify-items: start; animation: ub-rise 0.7s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
120
+ .ub-tc-chip {
121
+ display: inline-flex;
122
+ align-items: center;
123
+ gap: 8px;
124
+ padding: 6px 14px 6px 10px;
125
+ border: 1px solid rgb(196 181 253 / 0.35);
126
+ border-radius: 999px;
127
+ background: rgb(139 92 246 / 0.14);
128
+ color: var(--accent);
129
+ font: 600 13px/18px var(--ub-font-body);
130
+ letter-spacing: 0.08em;
131
+ text-transform: uppercase;
132
+ }
133
+ .ub-tc-chip__dot { width: 8px; height: 8px; border-radius: 50%; background: #4ade80; box-shadow: 0 0 0 4px rgb(74 222 128 / 0.2); animation: ub-tc-pulse 1.6s ease-in-out infinite; }
134
+ @keyframes ub-tc-pulse { 50% { box-shadow: 0 0 0 8px rgb(74 222 128 / 0); } }
135
+ .ub-tc-title {
136
+ margin: 0;
137
+ font: 700 clamp(44px, 6vw, 88px) / 0.98 var(--ub-font-head);
138
+ letter-spacing: -0.04em;
139
+ text-wrap: balance;
140
+ }
141
+ .ub-tc-title__hl {
142
+ background: linear-gradient(92deg, #c4b5fd 0%, #8b5cf6 45%, #f0abfc 100%);
143
+ -webkit-background-clip: text;
144
+ background-clip: text;
145
+ color: transparent;
146
+ filter: drop-shadow(0 0 22px rgb(139 92 246 / 0.55));
147
+ }
148
+ .ub-tc-tile { display: inline; }
149
+ .ub-tc-sub { max-width: 34em; margin: 0; color: var(--hero-muted); font-size: 18px; line-height: 28px; }
150
+ .ub-tc-actions { display: flex; flex-wrap: wrap; gap: 12px; }
151
+ .ub-tc-btn {
152
+ display: inline-flex;
153
+ align-items: center;
154
+ justify-content: center;
155
+ gap: 10px;
156
+ min-height: 52px;
157
+ padding: 0 26px;
158
+ border-radius: var(--ub-r-btn);
159
+ font: 600 16px/20px var(--ub-font-body);
160
+ transition: transform 0.2s, box-shadow 0.2s, background 0.2s;
161
+ }
162
+ .ub-tc-btn svg { width: 18px; height: 18px; }
163
+ .ub-tc-btn--solid { background: var(--primary); color: var(--on-primary); box-shadow: var(--tc-glow); }
164
+ .ub-tc-btn--solid:hover { transform: translateY(-2px); }
165
+ .ub-tc-btn--ghost { border: 1px solid rgb(255 255 255 / 0.22); color: var(--hero-ink); }
166
+ .ub-tc-btn--ghost:hover { background: rgb(255 255 255 / 0.06); }
167
+ .ub-tc-hero__cd .ub-countdown__c,
168
+ .ub-tc-flash__cd .ub-countdown__c {
169
+ min-width: 70px;
170
+ height: 70px;
171
+ border: 1px solid var(--border);
172
+ background: rgb(20 13 39 / 0.8);
173
+ color: var(--ink);
174
+ box-shadow: inset 0 0 22px rgb(139 92 246 / 0.18);
175
+ }
176
+ .ub-tc-hero__cd .ub-countdown__c b,
177
+ .ub-tc-flash__cd .ub-countdown__c b { font: 700 26px/30px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; color: var(--accent); }
178
+
179
+ /* Visuel sur le côté (Cyber Monday 1) */
180
+ /* Pas de cadre : le visuel se fond dans la nuit du hero (bords en fondu) */
181
+ .ub-tc-hero__side { position: relative; justify-self: end; width: min(115%, 640px); margin-right: -6%; aspect-ratio: 4 / 5; }
182
+ .ub-tc-hero__side > img,
183
+ .ub-tc-hero__side > .ub-ph {
184
+ width: 100%;
185
+ height: 100%;
186
+ object-fit: cover;
187
+ -webkit-mask-image: radial-gradient(72% 68% at 55% 55%, #000 45%, transparent 100%);
188
+ mask-image: radial-gradient(72% 68% at 55% 55%, #000 45%, transparent 100%);
189
+ animation: ub-tc-fadein 1.2s 0.1s ease both;
190
+ }
191
+ @keyframes ub-tc-fadein { from { opacity: 0; transform: scale(1.03); } }
192
+ .ub-tc-badge {
193
+ position: absolute;
194
+ left: -34px;
195
+ bottom: 48px;
196
+ z-index: 2;
197
+ display: grid;
198
+ justify-items: center;
199
+ margin: 0;
200
+ padding: 16px 22px;
201
+ border: 1px solid rgb(196 181 253 / 0.4);
202
+ border-radius: 20px;
203
+ background: rgb(20 13 39 / 0.72);
204
+ backdrop-filter: blur(14px);
205
+ color: #fff;
206
+ box-shadow: var(--tc-glow);
207
+ }
208
+ .ub-tc-badge small { color: var(--hero-muted); font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; }
209
+ .ub-tc-badge b { font: 700 44px/1 var(--ub-font-head); color: var(--accent); }
210
+
211
+ /* ---------- Bandeau défilant ---------- */
212
+ .ub-tc-ticker { overflow: hidden; border-block: 1px solid var(--border); background: var(--band-bg); color: var(--band-ink); }
213
+ .ub-tc-ticker__track { display: flex; width: max-content; animation: ub-tc-marquee 32s linear infinite; }
214
+ .ub-tc-ticker__row { display: flex; gap: 48px; margin: 0; padding: 14px 24px; list-style: none; }
215
+ .ub-tc-ticker__row li { display: inline-flex; align-items: center; gap: 12px; white-space: nowrap; font: 600 15px/20px var(--ub-font-head); letter-spacing: 0.04em; text-transform: uppercase; }
216
+ .ub-tc-ticker__row svg { width: 16px; height: 16px; opacity: 0.8; }
217
+ @keyframes ub-tc-marquee { to { transform: translateX(-50%); } }
218
+ @media (prefers-reduced-motion: reduce) { .ub-tc-ticker__track { animation: none; } }
219
+
220
+ /* ---------- Fiche technique (avantages) ---------- */
221
+ .ub-tc-specs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-top: var(--space-12); }
222
+ .ub-tc-spec { display: flex; align-items: center; gap: 14px; padding: 18px; border: 1px solid var(--border); border-radius: var(--ub-r-card); background: var(--surface); }
223
+ .ub-tc-spec svg { flex: none; width: 26px; height: 26px; color: var(--accent); }
224
+ .ub-tc-spec span { display: grid; }
225
+ .ub-tc-spec b { font-size: 15px; line-height: 20px; }
226
+ .ub-tc-spec small { color: var(--ink-muted); font-size: 13px; line-height: 18px; }
227
+
228
+ /* ---------- Sections ---------- */
229
+ .ub-tc-section { padding-top: var(--space-16); }
230
+ .ub-tech > :last-child { padding-bottom: var(--space-16); }
231
+ .ub-tc-kicker { display: inline-flex; align-items: center; gap: 8px; margin: 0; color: var(--accent); font: 600 13px/18px var(--ub-font-body); letter-spacing: 0.12em; text-transform: uppercase; }
232
+ .ub-tc-kicker svg { width: 15px; height: 15px; }
233
+ .ub-tc-h2 { margin: 8px 0 0; font: 700 clamp(28px, 3.4vw, 44px) / 1.05 var(--ub-font-head); letter-spacing: -0.03em; }
234
+ .ub-tc-head { display: flex; align-items: end; justify-content: space-between; gap: var(--space-6); margin-bottom: var(--space-8); }
235
+ .ub-tc-link { display: inline-flex; align-items: center; gap: 8px; color: var(--accent); font-weight: 600; white-space: nowrap; }
236
+ .ub-tc-link svg { width: 16px; height: 16px; }
237
+
238
+ /* Flash deals */
239
+ .ub-tc-flash__head { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: var(--space-6); margin-bottom: var(--space-8); }
240
+ .ub-tc-flash__row {
241
+ display: grid;
242
+ grid-auto-flow: column;
243
+ grid-auto-columns: minmax(240px, 1fr);
244
+ gap: 16px;
245
+ margin: 0;
246
+ padding: 0 0 12px;
247
+ list-style: none;
248
+ overflow-x: auto;
249
+ scroll-snap-type: x mandatory;
250
+ scrollbar-width: thin;
251
+ }
252
+ .ub-tc-flash__row > li { scroll-snap-align: start; }
253
+ @media (min-width: 1100px) { .ub-tc-flash__row { grid-auto-columns: calc((100% - 48px) / 4); } }
254
+
255
+ /* Carte produit */
256
+ .ub-tc-card {
257
+ position: relative;
258
+ display: grid;
259
+ height: 100%;
260
+ overflow: hidden;
261
+ border: 1px solid var(--border);
262
+ border-radius: var(--ub-r-card);
263
+ background: var(--tc-card);
264
+ color: var(--ink);
265
+ transition: transform 0.25s, border-color 0.25s, box-shadow 0.25s;
266
+ }
267
+ .ub-tc-card:hover { transform: translateY(-4px); border-color: var(--primary); box-shadow: var(--tc-glow); }
268
+ .ub-tc-card__media { position: relative; display: block; aspect-ratio: 1; margin: 10px 10px 0; overflow: hidden; border-radius: var(--ub-r-media); background: var(--surface); }
269
+ .ub-tc-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s; }
270
+ .ub-tc-card:hover .ub-tc-card__media img { transform: scale(1.05); }
271
+ .ub-tc-off {
272
+ position: absolute;
273
+ top: 10px;
274
+ left: 10px;
275
+ padding: 4px 10px;
276
+ border-radius: 999px;
277
+ background: var(--primary);
278
+ color: var(--on-primary);
279
+ font: 700 13px/18px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
280
+ }
281
+ .ub-tc-card__rank { position: absolute; right: 10px; top: 10px; padding: 3px 8px; border-radius: 8px; background: rgb(0 0 0 / 0.55); color: #fff; font: 600 12px/16px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
282
+ .ub-tc-card__body { display: grid; gap: 6px; padding: 14px 16px 18px; }
283
+ .ub-tc-card__name { padding-right: 34px; font-weight: 600; font-size: 15px; line-height: 20px; }
284
+ .ub-tc-card__price { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; }
285
+ .ub-tc-card__price b { font: 700 18px/22px var(--ub-font-head); color: var(--accent); }
286
+ .ub-tc-card__price s { color: var(--ink-muted); font-size: 14px; }
287
+ .ub-tc-card__price--lg b { font-size: 34px; line-height: 38px; }
288
+ .ub-tc-card__price--lg .ub-tc-off { position: static; }
289
+ .ub-tc-card__go {
290
+ position: absolute;
291
+ right: 14px;
292
+ bottom: 16px;
293
+ display: grid;
294
+ place-items: center;
295
+ width: 30px;
296
+ height: 30px;
297
+ border-radius: 50%;
298
+ background: var(--surface);
299
+ color: var(--ink);
300
+ transition: background 0.2s, color 0.2s;
301
+ }
302
+ .ub-tc-card__go svg { width: 16px; height: 16px; }
303
+ .ub-tc-card:hover .ub-tc-card__go { background: var(--primary); color: var(--on-primary); }
304
+
305
+ /* Bento */
306
+ .ub-tc-bento { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: auto; gap: 16px; }
307
+ .ub-tc-bento__main {
308
+ grid-column: span 2;
309
+ grid-row: span 2;
310
+ position: relative;
311
+ display: grid;
312
+ grid-template-rows: 1fr auto;
313
+ overflow: hidden;
314
+ border: 1px solid var(--border);
315
+ border-radius: var(--ub-r-card);
316
+ background: radial-gradient(80% 70% at 50% 20%, #2a1263 0%, #120b24 70%);
317
+ color: #fff;
318
+ }
319
+ .ub-tc-bento__img { display: block; min-height: 300px; padding: 24px 24px 0; }
320
+ .ub-tc-bento__img img { width: 100%; height: 100%; max-height: 380px; object-fit: cover; border-radius: 16px; }
321
+ .ub-tc-bento__txt { display: grid; justify-items: start; gap: 10px; padding: 24px; }
322
+ .ub-tc-bento__name { font: 700 clamp(24px, 2.4vw, 32px) / 1.1 var(--ub-font-head); letter-spacing: -0.03em; }
323
+
324
+ /* Grille */
325
+ .ub-tc-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin: 0; padding: 0; list-style: none; }
326
+
327
+ /* Bannière finale */
328
+ .ub-tc-final {
329
+ position: relative;
330
+ isolation: isolate;
331
+ display: grid;
332
+ justify-items: center;
333
+ gap: 14px;
334
+ overflow: hidden;
335
+ padding: clamp(48px, 7vw, 96px) 24px;
336
+ border: 1px solid var(--border);
337
+ border-radius: 28px;
338
+ background: #0e0820;
339
+ color: #fff;
340
+ text-align: center;
341
+ }
342
+ .ub-tc-final__glow { position: absolute; inset: auto 10% -60% 10%; z-index: -1; height: 120%; background: radial-gradient(closest-side, rgb(139 92 246 / 0.7), transparent); filter: blur(30px); }
343
+ .ub-tc-final__title { max-width: 18em; margin: 0; font: 700 clamp(30px, 4.4vw, 58px) / 1.02 var(--ub-font-head); letter-spacing: -0.04em; text-wrap: balance; }
344
+ .ub-tc-final__text { max-width: 36em; margin: 0; color: #cfc8ea; font-size: 17px; line-height: 26px; }
345
+
346
+ /* ================= Cyber Monday 2 : blanc studio ================= */
347
+ [data-variant="cyber-monday-2"] .ub-tc-hero { background: var(--hero-bg); }
348
+ [data-variant="cyber-monday-2"] .ub-tc-hero__grid,
349
+ [data-variant="cyber-monday-2"] .ub-tc-hero__beam,
350
+ [data-variant="cyber-monday-2"] .ub-tc-hero__side { display: none; }
351
+ /* Le visuel couvre tout le hero ; un voile blanc à gauche garde le texte lisible */
352
+ /* Fond du hero = gris béton clair du visuel : l'image posée à droite se fond dans toute la largeur */
353
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cover { display: block; position: absolute; inset: 0 0 0 30%; z-index: -1; }
354
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cover img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 78%; animation: ub-tc-zoom 1.4s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
355
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cover::after {
356
+ content: "";
357
+ position: absolute;
358
+ inset: 0;
359
+ background: linear-gradient(90deg, var(--hero-bg) 0%, rgb(236 236 236 / 0.7) 18%, transparent 42%);
360
+ }
361
+ @keyframes ub-tc-zoom { from { transform: scale(1.06); opacity: 0; } }
362
+ [data-variant="cyber-monday-2"] .ub-tc-hero__in { grid-template-columns: minmax(0, 620px); min-height: clamp(580px, 48vw, 760px); }
363
+ [data-variant="cyber-monday-2"] .ub-tc-chip { border-color: var(--ink); background: #fff; color: var(--ink); }
364
+ [data-variant="cyber-monday-2"] .ub-tc-title { font-size: clamp(42px, 5.6vw, 80px); }
365
+ /* Mot en lettres « tuiles », comme les lettres posées sur le visuel */
366
+ [data-variant="cyber-monday-2"] .ub-tc-title__hl { display: inline-flex; flex-wrap: wrap; gap: 0.08em; background: none; color: var(--ink); filter: none; vertical-align: 0.06em; }
367
+ [data-variant="cyber-monday-2"] .ub-tc-tile {
368
+ display: inline-grid;
369
+ place-items: center;
370
+ min-width: 0.78em;
371
+ height: 1.06em;
372
+ padding: 0 0.06em;
373
+ border: 1px solid rgb(11 11 15 / 0.12);
374
+ border-radius: 0.08em;
375
+ background: rgb(255 255 255 / 0.72);
376
+ box-shadow: 0 0.06em 0.14em rgb(11 11 15 / 0.14);
377
+ font-size: 0.9em;
378
+ line-height: 1;
379
+ text-transform: uppercase;
380
+ }
381
+ [data-variant="cyber-monday-2"] .ub-tc-tile:nth-child(odd) { transform: rotate(-2deg); }
382
+ [data-variant="cyber-monday-2"] .ub-tc-tile:nth-child(3n) { transform: rotate(2.5deg) translateY(0.03em); }
383
+ [data-variant="cyber-monday-2"] .ub-tc-tile--sp { min-width: 0.3em; border: 0; background: none; box-shadow: none; }
384
+ [data-variant="cyber-monday-2"] .ub-tc-sub { color: var(--hero-muted); }
385
+ [data-variant="cyber-monday-2"] .ub-tc-btn--solid { background: var(--ink); color: #fff; }
386
+ [data-variant="cyber-monday-2"] .ub-tc-btn--ghost { border-color: var(--ink); color: var(--ink); background: rgb(255 255 255 / 0.6); }
387
+ [data-variant="cyber-monday-2"] .ub-tc-btn--ghost:hover { background: #fff; }
388
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cd .ub-countdown__c,
389
+ [data-variant="cyber-monday-2"] .ub-tc-flash__cd .ub-countdown__c { border-color: var(--border); background: #fff; box-shadow: var(--shadow-card); }
390
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cd .ub-countdown__c b,
391
+ [data-variant="cyber-monday-2"] .ub-tc-flash__cd .ub-countdown__c b { color: var(--ink); }
392
+ [data-variant="cyber-monday-2"] .ub-tc-ticker { border-color: var(--ink); }
393
+ [data-variant="cyber-monday-2"] .ub-tc-spec { background: #fff; }
394
+ [data-variant="cyber-monday-2"] .ub-tc-kicker,
395
+ [data-variant="cyber-monday-2"] .ub-tc-link { color: var(--accent); }
396
+ [data-variant="cyber-monday-2"] .ub-tc-card { border-color: var(--border); }
397
+ [data-variant="cyber-monday-2"] .ub-tc-card:hover { border-color: var(--ink); }
398
+ [data-variant="cyber-monday-2"] .ub-tc-card__price b { color: var(--ink); }
399
+ [data-variant="cyber-monday-2"] .ub-tc-off { background: var(--sale); color: #fff; }
400
+ [data-variant="cyber-monday-2"] .ub-tc-card:hover .ub-tc-card__go { background: var(--ink); color: #fff; }
401
+ [data-variant="cyber-monday-2"] .ub-tc-bento__main { background: var(--surface); color: var(--ink); }
402
+ [data-variant="cyber-monday-2"] .ub-tc-bento__main .ub-tc-btn--solid { background: var(--ink); color: #fff; }
403
+ [data-variant="cyber-monday-2"] .ub-tc-final { background: #0b0b0f; border-color: #0b0b0f; }
404
+ [data-variant="cyber-monday-2"] .ub-tc-final__glow { background: radial-gradient(closest-side, rgb(91 61 245 / 0.55), transparent); }
405
+ [data-variant="cyber-monday-2"] .ub-tc-final .ub-tc-kicker { color: #b9adff; }
406
+ [data-variant="cyber-monday-2"] .ub-tc-final .ub-tc-btn--solid { background: #fff; color: var(--ink); }
407
+
408
+ /* ---------- Responsive ---------- */
409
+ @media (max-width: 1024px) {
410
+ .ub-tc-specs, .ub-tc-grid { grid-template-columns: repeat(2, 1fr); }
411
+ .ub-tc-bento { grid-template-columns: repeat(2, 1fr); }
412
+ }
413
+ @media (max-width: 900px) {
414
+ .ub-tc-hero__in { grid-template-columns: 1fr; gap: var(--space-8); min-height: 0; padding-top: var(--space-8); }
415
+ .ub-tc-hero__side { justify-self: center; width: min(100%, 440px); margin-right: 0; }
416
+ .ub-tc-hero__cover { inset: 38% 0 0 0; }
417
+ .ub-tc-hero__cover img { object-position: 60% 60%; }
418
+ .ub-tc-hero__cover::after { background: linear-gradient(180deg, var(--hero-bg) 0%, rgb(5 3 11 / 0.4) 35%, transparent 60%), linear-gradient(0deg, var(--hero-bg) 0%, transparent 20%); }
419
+ .ub-tc-hero[data-has-image] .ub-tc-hero__side { min-height: 300px; justify-self: stretch; width: 100%; }
420
+ .ub-tc-badge { left: 12px; bottom: 16px; padding: 10px 16px; }
421
+ .ub-tc-badge b { font-size: 32px; }
422
+ /* Cyber Monday 2 mobile : visuel en haut, texte dessous sur fond blanc */
423
+ [data-variant="cyber-monday-2"] .ub-tc-hero { display: grid; background: #fff; }
424
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cover { position: relative; inset: auto; z-index: 0; aspect-ratio: 1; max-height: 460px; }
425
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cover::after { background: linear-gradient(0deg, #fff 0%, transparent 30%); }
426
+ [data-variant="cyber-monday-2"] .ub-tc-hero__cover img { object-position: center; }
427
+ [data-variant="cyber-monday-2"] .ub-tc-hero__in { grid-template-columns: 1fr; min-height: 0; padding-top: 0; }
428
+ }
429
+ @media (max-width: 600px) {
430
+ .ub-tc-title { font-size: 40px; }
431
+ [data-variant="cyber-monday-2"] .ub-tc-title { font-size: 36px; }
432
+ .ub-tc-specs { grid-template-columns: 1fr; }
433
+ .ub-tc-grid, .ub-tc-bento { grid-template-columns: repeat(2, 1fr); gap: 10px; }
434
+ .ub-tc-bento__main { grid-column: span 2; grid-row: auto; }
435
+ .ub-tc-bento__img { min-height: 0; padding: 12px 12px 0; }
436
+ .ub-tc-head { flex-direction: column; align-items: start; }
437
+ .ub-tc-hero__cd .ub-countdown__c, .ub-tc-flash__cd .ub-countdown__c { min-width: 58px; height: 58px; }
438
+ .ub-tc-hero__cd .ub-countdown__c b, .ub-tc-flash__cd .ub-countdown__c b { font-size: 20px; }
439
+ .ub-tc-card__body { padding: 10px 12px 14px; }
440
+ .ub-tc-card__name { font-size: 14px; }
441
+ }
@@ -16,11 +16,7 @@
16
16
  --ub-head-weight:700;--ub-head-case:uppercase;--ub-head-track:0.005em;
17
17
  --ub-r-card:var(--radius-lg);--ub-r-btn:var(--radius-pill);--ub-r-tile:var(--radius-lg);--ub-r-hero:0px;--ub-r-media:var(--radius-lg);
18
18
  }
19
- [data-variant="cyber-monday-2"]{--bg:#070b18;--surface:#0e1426;--tint-1:#10213a;--tint-2:#1a1238;--tint-3:#0d2a2a;--tint-4:#2a1030;--ink:#e6f1ff;--ink-muted:#8ea0bf;--border:#1b2540;--primary:#22d3ee;--on-primary:#04111a;--accent:#e879f9;--on-accent:#0a0a14;--sale:#f472b6;--star:#facc15;--success:#34d399;--hero-bg:#0a1022;--hero-ink:#e6f1ff;--hero-muted:#9fb2d3;--band-bg:#111a36;--band-ink:#e6f1ff;--bubble-bg:#22d3ee;--bubble-ink:#04111a;--topbar-bg:#22d3ee;--topbar-ink:#04111a;--focus:#e879f9;
20
- --ub-font-head:var(--font-sora);--ub-font-body:var(--font-inter);
21
- --ub-head-weight:600;--ub-head-case:uppercase;--ub-head-track:0.02em;
22
- --ub-r-card:var(--radius-lg);--ub-r-btn:var(--radius-md);--ub-r-tile:var(--radius-lg);--ub-r-hero:0px;--ub-r-media:var(--radius-lg);
23
- }
19
+ /* cyber-monday-2 : jetons dans styles/ub/tech.css (variante blanche) */
24
20
  [data-variant="noel-2"]{--bg:#0f1d17;--surface:#16271f;--tint-1:#1d3328;--tint-2:#2a1d1d;--tint-3:#2b2715;--tint-4:#1a2633;--ink:#f7f3e8;--ink-muted:#b5b39f;--border:#243a2f;--primary:#d4af37;--on-primary:#0f1d17;--accent:#c0392b;--on-accent:#ffffff;--sale:#e25c4b;--star:#d4af37;--success:#6fcf97;--hero-bg:#132a20;--hero-ink:#f7f3e8;--hero-muted:#c2c0ab;--band-bg:#7f1d1d;--band-ink:#f7f3e8;--bubble-bg:#d4af37;--bubble-ink:#0f1d17;--topbar-bg:#7f1d1d;--topbar-ink:#f7f3e8;--focus:#d4af37;
25
21
  --ub-font-head:var(--font-jakarta);--ub-font-body:var(--font-inter);
26
22
  --ub-head-weight:800;--ub-head-case:none;--ub-head-track:-0.02em;
@@ -3,7 +3,8 @@
3
3
  "name": "Cyber Monday",
4
4
  "reference": "NovaTech",
5
5
  "fonts": {
6
- "head": "outfit",
7
- "body": "outfit"
8
- }
6
+ "head": "space-grotesk",
7
+ "body": "inter"
8
+ },
9
+ "home": "tech"
9
10
  }
@@ -5,7 +5,7 @@
5
5
  "2-year warranty on tech"
6
6
  ],
7
7
  "hero": {
8
- "eyebrow": "Cyber Monday · Neon",
8
+ "eyebrow": "Cyber Monday · 24 h",
9
9
  "title": "24 hours to upgrade your setup",
10
10
  "highlight": "upgrade",
11
11
  "sub": "Audio, gaming, accessories and gadgets up to {discount} off. Web-only deals, until {endDate}.",
@@ -5,7 +5,7 @@
5
5
  "Garantie 2 ans sur la tech"
6
6
  ],
7
7
  "hero": {
8
- "eyebrow": "Cyber Monday · Neon",
8
+ "eyebrow": "Cyber Monday · 24 h",
9
9
  "title": "24 heures pour upgrader votre setup",
10
10
  "highlight": "upgrader",
11
11
  "sub": "Audio, gaming, accessoires et gadgets jusqu'à -{discount}. Offres réservées au site, jusqu'au {endDate}.",
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "id": "cyber-monday-2",
3
- "name": "Cyber Monday · Neon",
4
- "reference": "variante, mise en page halloween",
5
- "layout": "halloween",
3
+ "name": "Cyber Monday · Studio",
4
+ "reference": "variante blanche, mise en page cyber-monday",
5
+ "layout": "cyber-monday",
6
6
  "fonts": {
7
7
  "head": "sora",
8
8
  "body": "inter"
9
- }
9
+ },
10
+ "home": "tech"
10
11
  }
@@ -3,7 +3,8 @@
3
3
  "name": "Halloween",
4
4
  "reference": "Nexora (sombre)",
5
5
  "fonts": {
6
- "head": "space-grotesk",
6
+ "head": "oswald",
7
7
  "body": "inter"
8
- }
8
+ },
9
+ "home": "cinema"
9
10
  }
@@ -6,5 +6,6 @@
6
6
  "fonts": {
7
7
  "head": "oswald",
8
8
  "body": "inter"
9
- }
9
+ },
10
+ "home": "cinema"
10
11
  }
@@ -4,6 +4,7 @@
4
4
  "reference": "Crescendo",
5
5
  "fonts": {
6
6
  "head": "poppins",
7
- "body": "poppins"
8
- }
7
+ "body": "inter"
8
+ },
9
+ "home": "album"
9
10
  }
@@ -4,7 +4,8 @@
4
4
  "reference": "variante, mise en page nouvel-an",
5
5
  "layout": "nouvel-an",
6
6
  "fonts": {
7
- "head": "jakarta",
7
+ "head": "poppins",
8
8
  "body": "inter"
9
- }
9
+ },
10
+ "home": "album"
10
11
  }
@@ -6,10 +6,10 @@
6
6
  ],
7
7
  "hero": {
8
8
  "eyebrow": "New Year Sale",
9
- "title": "New year new you",
10
- "highlight": "new",
9
+ "title": "Happy New Year",
10
+ "highlight": "New Year",
11
11
  "sub": "Start the year with up to {discount} off our best sellers. Ends {endDate}.",
12
- "cta": "Explore the sale",
12
+ "cta": "Shop the sale",
13
13
  "cta2": "New arrivals",
14
14
  "bubble": [
15
15
  "Up to",
@@ -6,8 +6,8 @@
6
6
  ],
7
7
  "hero": {
8
8
  "eyebrow": "Soldes du Nouvel An",
9
- "title": "Nouvelle année, nouveau vous",
10
- "highlight": "nouveau",
9
+ "title": "Bonne Année",
10
+ "highlight": "Année",
11
11
  "sub": "Commencez l'année avec jusqu'à -{discount} sur nos meilleures ventes. Jusqu'au {endDate}.",
12
12
  "cta": "Voir les soldes",
13
13
  "cta2": "Nouveautés",
@@ -5,5 +5,6 @@
5
5
  "fonts": {
6
6
  "head": "sora",
7
7
  "body": "inter"
8
- }
8
+ },
9
+ "home": "gala"
9
10
  }
@@ -5,12 +5,12 @@
5
5
  "Free 30-day returns"
6
6
  ],
7
7
  "hero": {
8
- "eyebrow": "New Year · Midnight",
9
- "title": "New year, new you",
10
- "highlight": "new you",
8
+ "eyebrow": "Happy",
9
+ "title": "New Year",
10
+ "highlight": "Year",
11
11
  "sub": "Fashion, party and wellness up to {discount} off. Start the year right, before {endDate}.",
12
- "cta": "Start the year",
13
- "cta2": "Party outfits",
12
+ "cta": "Shop now",
13
+ "cta2": "Read more",
14
14
  "bubble": [
15
15
  "Up to",
16
16
  "{discount}",
@@ -5,12 +5,12 @@
5
5
  "Retours gratuits 30 jours"
6
6
  ],
7
7
  "hero": {
8
- "eyebrow": "Nouvel An · Minuit",
9
- "title": "Nouvelle année, nouveau vous",
10
- "highlight": "nouveau vous",
8
+ "eyebrow": "Bonne année",
9
+ "title": "Nouvel An",
10
+ "highlight": "An",
11
11
  "sub": "Mode, soirée et bien-être jusqu'à -{discount}. Commencez l'année du bon pied, avant le {endDate}.",
12
- "cta": "Commencer l'année",
13
- "cta2": "Tenues de soirée",
12
+ "cta": "Voir les offres",
13
+ "cta2": "En savoir plus",
14
14
  "bubble": [
15
15
  "Jusqu'à",
16
16
  "{discount}",
@@ -4,7 +4,8 @@
4
4
  "reference": "variante, mise en page thanksgiving",
5
5
  "layout": "thanksgiving",
6
6
  "fonts": {
7
- "head": "space-grotesk",
8
- "body": "outfit"
9
- }
7
+ "head": "outfit",
8
+ "body": "inter"
9
+ },
10
+ "home": "gala"
10
11
  }