@salifbiaye/create-boutique 0.6.0 → 0.7.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/cli/dist/code.js +110 -0
- package/cli/dist/commands.js +143 -10
- package/cli/dist/create.js +54 -7
- package/cli/dist/generate.js +65 -4
- package/cli/dist/guide.js +10 -2
- package/cli/dist/index.js +20 -7
- package/cli/dist/payments.js +150 -0
- package/docs/fiche-client.en.html +2 -2
- package/docs/fiche-client.html +2 -2
- package/docs/guide-complet.fr.html +681 -256
- package/docs/guide-images/categories.jpg +0 -0
- package/docs/guide-images/clients.jpg +0 -0
- package/docs/guide-images/collections.jpg +0 -0
- package/docs/guide-images/commande-detail.jpg +0 -0
- package/docs/guide-images/commande-expedier.jpg +0 -0
- package/docs/guide-images/commande-menu.jpg +0 -0
- package/docs/guide-images/commande-paiement.jpg +0 -0
- package/docs/guide-images/commandes-liste.jpg +0 -0
- package/docs/guide-images/connexion.jpg +0 -0
- package/docs/guide-images/groupes-clients.jpg +0 -0
- package/docs/guide-images/inventaire.jpg +0 -0
- package/docs/guide-images/listes-prix.jpg +0 -0
- package/docs/guide-images/menu.jpg +0 -0
- package/docs/guide-images/mes-boutiques-fermer.jpg +0 -0
- package/docs/guide-images/mes-boutiques-panneau.jpg +0 -0
- package/docs/guide-images/mes-boutiques.jpg +0 -0
- package/docs/guide-images/parametres-boutique.jpg +0 -0
- package/docs/guide-images/parametres-canaux.jpg +0 -0
- package/docs/guide-images/parametres-emplacements.jpg +0 -0
- package/docs/guide-images/parametres-profil.jpg +0 -0
- package/docs/guide-images/parametres-regions.jpg +0 -0
- package/docs/guide-images/parametres-utilisateurs.jpg +0 -0
- package/docs/guide-images/produit-creer-details.jpg +0 -0
- package/docs/guide-images/produit-detail.jpg +0 -0
- package/docs/guide-images/produit-variantes-menu.jpg +0 -0
- package/docs/guide-images/produit-variantes.jpg +0 -0
- package/docs/guide-images/produits-liste.jpg +0 -0
- package/docs/guide-images/promotion-details.jpg +0 -0
- package/docs/guide-images/promotion-type.jpg +0 -0
- package/docs/guide-images/promotions-liste.jpg +0 -0
- package/docs/guide-images/site-boutique.jpg +0 -0
- package/docs/guide-images/site-fermee.png +0 -0
- package/docs/guide-images/vue-ensemble.jpg +0 -0
- package/package.json +3 -2
- package/templates/backend/medusa-config.ts +31 -25
- package/templates/backend/package-lock.json +21 -0
- package/templates/backend/package.json +2 -0
- package/templates/backend/src/admin/i18n/json/en.json +51 -3
- package/templates/backend/src/admin/i18n/json/fr.json +51 -3
- package/templates/backend/src/admin/routes/boutique-campaigns/campaign-drawer.tsx +2 -0
- package/templates/backend/src/admin/routes/boutique-campaigns/page.tsx +36 -1
- package/templates/backend/src/admin/routes/reviews/page.tsx +259 -0
- package/templates/backend/src/api/admin/boutique-campaigns/route.ts +3 -1
- package/templates/backend/src/api/admin/boutique-online/[salesChannelId]/route.ts +22 -0
- package/templates/backend/src/api/admin/reviews/[id]/route.ts +15 -0
- package/templates/backend/src/api/admin/reviews/route.ts +47 -0
- package/templates/backend/src/api/middlewares.ts +7 -0
- package/templates/backend/src/api/store/campaign/route.ts +5 -1
- package/templates/backend/src/api/store/reviews/latest/route.ts +39 -0
- package/templates/backend/src/api/store/reviews/order/route.ts +36 -0
- package/templates/backend/src/api/store/reviews/route.ts +43 -0
- package/templates/backend/src/api/store/reviews/summary/route.ts +28 -0
- package/templates/backend/src/emails/en.json +3 -1
- package/templates/backend/src/emails/fr.json +3 -1
- package/templates/backend/src/lib/email-config.ts +14 -0
- package/templates/backend/src/lib/emails.ts +9 -0
- package/templates/backend/src/lib/notify.ts +14 -8
- package/templates/backend/src/lib/payment-config.ts +66 -0
- package/templates/backend/src/lib/project.ts +12 -0
- package/templates/backend/src/lib/redirect-payment.ts +264 -0
- package/templates/backend/src/lib/review-token.ts +40 -0
- package/templates/backend/src/lib/reviews.ts +25 -0
- package/templates/backend/src/modules/naboopay/index.ts +6 -0
- package/templates/backend/src/modules/naboopay/service.ts +92 -0
- package/templates/backend/src/modules/paydunya/index.ts +6 -0
- package/templates/backend/src/modules/paydunya/service.ts +89 -0
- package/templates/backend/src/modules/paytech/index.ts +6 -0
- package/templates/backend/src/modules/paytech/service.ts +114 -0
- package/templates/backend/src/modules/product-review/index.ts +8 -0
- package/templates/backend/src/modules/product-review/migrations/Migration20261001090000.ts +18 -0
- package/templates/backend/src/modules/product-review/models/review.ts +25 -0
- package/templates/backend/src/modules/product-review/service.ts +6 -0
- package/templates/backend/src/modules/product-review/validators.ts +27 -0
- package/templates/backend/src/modules/smtp/index.ts +6 -0
- package/templates/backend/src/modules/smtp/service.ts +73 -0
- package/templates/backend/src/scripts/seed.ts +52 -36
- package/templates/backend/src/subscribers/fulfillment-emails.ts +1 -1
- package/templates/backend/src/workflows/reviews.ts +21 -0
- package/templates/backend/src/workflows/steps/create-review.ts +52 -0
- package/templates/backend/src/workflows/steps/update-review.ts +36 -0
- package/templates/storefront/PERSONNALISER.md +134 -0
- package/templates/storefront/locales/en.json +198 -11
- package/templates/storefront/locales/fr.json +198 -11
- package/templates/storefront/public/custom/LISEZMOI.txt +2 -0
- package/templates/storefront/src/app/(checkout)/layout.tsx +1 -1
- package/templates/storefront/src/app/(main)/layout.tsx +8 -1
- package/templates/storefront/src/app/(main)/legal/[page]/page.tsx +42 -7
- package/templates/storefront/src/app/(main)/page.tsx +149 -4
- package/templates/storefront/src/app/(main)/review/page.tsx +60 -0
- package/templates/storefront/src/app/(main)/store/page.tsx +3 -1
- package/templates/storefront/src/app/(main)/template.tsx +17 -2
- package/templates/storefront/src/app/layout.tsx +13 -1
- package/templates/storefront/src/lib/boutique/campaign.ts +5 -1
- package/templates/storefront/src/lib/boutique/page-name.ts +25 -0
- package/templates/storefront/src/lib/boutique/schema.ts +3 -1
- package/templates/storefront/src/lib/constants.tsx +17 -0
- package/templates/storefront/src/lib/data/review-actions.ts +28 -0
- package/templates/storefront/src/lib/data/reviews.ts +64 -0
- package/templates/storefront/src/modules/checkout/components/payment/index.tsx +26 -4
- package/templates/storefront/src/modules/checkout/components/payment-button/index.tsx +85 -2
- package/templates/storefront/src/modules/products/templates/index.tsx +5 -0
- package/templates/storefront/src/modules/store/components/shop-search.tsx +85 -0
- package/templates/storefront/src/modules/store/templates/index.tsx +16 -8
- package/templates/storefront/src/modules/store/templates/paginated-products.tsx +15 -3
- package/templates/storefront/src/modules/ub/album.tsx +2 -0
- package/templates/storefront/src/modules/ub/arena.tsx +182 -0
- package/templates/storefront/src/modules/ub/campaign-blocks.tsx +3 -2
- package/templates/storefront/src/modules/ub/campaign-ended.tsx +27 -13
- package/templates/storefront/src/modules/ub/cinema.tsx +2 -0
- package/templates/storefront/src/modules/ub/cookie-banner.tsx +62 -0
- package/templates/storefront/src/modules/ub/gala.tsx +2 -0
- package/templates/storefront/src/modules/ub/grimoire.tsx +35 -8
- package/templates/storefront/src/modules/ub/harvest.tsx +2 -1
- package/templates/storefront/src/modules/ub/hero-image.tsx +14 -0
- package/templates/storefront/src/modules/ub/home-kit.ts +45 -0
- package/templates/storefront/src/modules/ub/lantern.tsx +244 -0
- package/templates/storefront/src/modules/ub/locker.tsx +180 -0
- package/templates/storefront/src/modules/ub/mosaic.tsx +189 -0
- package/templates/storefront/src/modules/ub/nav.tsx +8 -5
- package/templates/storefront/src/modules/ub/review-form.tsx +62 -0
- package/templates/storefront/src/modules/ub/reviews.tsx +131 -0
- package/templates/storefront/src/modules/ub/riviera.tsx +175 -0
- package/templates/storefront/src/modules/ub/souk.tsx +214 -0
- package/templates/storefront/src/modules/ub/sunset-checklist.tsx +95 -0
- package/templates/storefront/src/modules/ub/sunset.tsx +164 -0
- package/templates/storefront/src/modules/ub/tech.tsx +2 -2
- package/templates/storefront/src/modules/ub/training.tsx +196 -0
- package/templates/storefront/src/proxy.ts +2 -0
- package/templates/storefront/src/styles/custom.css +26 -0
- package/templates/storefront/src/styles/ub/album.css +1 -1
- package/templates/storefront/src/styles/ub/arena.css +120 -0
- package/templates/storefront/src/styles/ub/cinema.css +1 -1
- package/templates/storefront/src/styles/ub/gala.css +1 -1
- package/templates/storefront/src/styles/ub/grimoire.css +23 -7
- package/templates/storefront/src/styles/ub/harvest.css +7 -6
- package/templates/storefront/src/styles/ub/lantern.css +157 -0
- package/templates/storefront/src/styles/ub/locker.css +115 -0
- package/templates/storefront/src/styles/ub/media.css +10 -0
- package/templates/storefront/src/styles/ub/mosaic.css +118 -0
- package/templates/storefront/src/styles/ub/motion.css +0 -3
- package/templates/storefront/src/styles/ub/overrides.css +10 -0
- package/templates/storefront/src/styles/ub/pages.css +176 -0
- package/templates/storefront/src/styles/ub/reviews.css +85 -0
- package/templates/storefront/src/styles/ub/riviera.css +103 -0
- package/templates/storefront/src/styles/ub/souk.css +144 -0
- package/templates/storefront/src/styles/ub/sunset.css +123 -0
- package/templates/storefront/src/styles/ub/tech.css +2 -5
- package/templates/storefront/src/styles/ub/training.css +120 -0
- package/templates/storefront/themes/jeux/campaign.en.json +31 -0
- package/templates/storefront/themes/jeux/campaign.fr.json +31 -0
- package/templates/storefront/themes/jeux/theme.json +11 -0
- package/templates/storefront/themes/jeux-2/campaign.en.json +31 -0
- package/templates/storefront/themes/jeux-2/campaign.fr.json +31 -0
- package/templates/storefront/themes/jeux-2/theme.json +11 -0
- package/templates/storefront/themes/mubarak/campaign.en.json +31 -0
- package/templates/storefront/themes/mubarak/campaign.fr.json +31 -0
- package/templates/storefront/themes/mubarak/theme.json +11 -0
- package/templates/storefront/themes/mubarak-2/campaign.en.json +31 -0
- package/templates/storefront/themes/mubarak-2/campaign.fr.json +31 -0
- package/templates/storefront/themes/mubarak-2/theme.json +11 -0
- package/templates/storefront/themes/sport/campaign.en.json +31 -0
- package/templates/storefront/themes/sport/campaign.fr.json +31 -0
- package/templates/storefront/themes/sport/theme.json +11 -0
- package/templates/storefront/themes/sport-2/campaign.en.json +31 -0
- package/templates/storefront/themes/sport-2/campaign.fr.json +31 -0
- package/templates/storefront/themes/sport-2/theme.json +11 -0
- package/templates/storefront/themes/summer/campaign.en.json +31 -0
- package/templates/storefront/themes/summer/campaign.fr.json +31 -0
- package/templates/storefront/themes/summer/theme.json +11 -0
- package/templates/storefront/themes/summer-2/campaign.en.json +31 -0
- package/templates/storefront/themes/summer-2/campaign.fr.json +31 -0
- package/templates/storefront/themes/summer-2/theme.json +11 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/* Accueil « Sunset » (Summer 2) — modules/ub/sunset.tsx. Affiche de plage : rouge couchant, soleil orangé, mer bleue, sable. */
|
|
2
|
+
|
|
3
|
+
[data-variant="summer-2"] {
|
|
4
|
+
--bg: #fff6e6; --surface: #ffecc8; --tint-1: #ffe2ad; --tint-2: #ffd9c7; --tint-3: #dff0ff; --tint-4: #fff0d9;
|
|
5
|
+
--ink: #1d1208; --ink-muted: #6b4f35; --border: #f2d9ae;
|
|
6
|
+
--primary: #e8330f; --on-primary: #fff6e6; --accent: #0b4f8a; --on-accent: #fff6e6;
|
|
7
|
+
--sale: #e8330f; --star: #ffa51a; --success: #1d7a4a;
|
|
8
|
+
--hero-bg: #ff5a1a; --hero-ink: #fff9ef; --hero-muted: #ffe7cf;
|
|
9
|
+
--band-bg: #0b4f8a; --band-ink: #fff6e6; --bubble-bg: #ffc21a; --bubble-ink: #1d1208;
|
|
10
|
+
--topbar-bg: #0b4f8a; --topbar-ink: #ffd66b; --focus: #0b4f8a;
|
|
11
|
+
--shadow-card: 0 16px 34px -22px rgb(106 40 0 / 0.45);
|
|
12
|
+
--ub-font-head: var(--font-oswald); --ub-font-body: var(--font-outfit);
|
|
13
|
+
--ub-head-weight: 700; --ub-head-case: uppercase; --ub-head-track: 0.01em;
|
|
14
|
+
--ub-r-card: 14px; --ub-r-btn: 999px; --ub-r-tile: 14px; --ub-r-hero: 0px; --ub-r-media: 10px;
|
|
15
|
+
--ss-red: #e8330f; --ss-sun: #ffa51a; --ss-yellow: #ffc21a; --ss-sea: #0b4f8a; --ss-sand: #fff6e6;
|
|
16
|
+
color-scheme: light;
|
|
17
|
+
}
|
|
18
|
+
[data-variant="summer-2"] .ub-nav { background: var(--ss-sand); border-bottom: 1px solid var(--border); }
|
|
19
|
+
[data-variant="summer-2"] .ub-nav__cta { background: var(--ss-red); color: #fff6e6; }
|
|
20
|
+
[data-variant="summer-2"] .ub-footwrap { --foot-bg: var(--ss-sea); --foot-ink: #fff6e6; --cta-bg: var(--ss-yellow); --cta-ink: #1d1208; }
|
|
21
|
+
[data-variant="summer-2"] .ub-badge { background: var(--ss-red); color: #fff6e6; }
|
|
22
|
+
|
|
23
|
+
.ub-ss-kicker { margin: 0; color: var(--ss-red); font: 700 13px/18px var(--ub-font-body); letter-spacing: 0.24em; text-transform: uppercase; }
|
|
24
|
+
.ub-ss-h2 { margin: 6px 0 0; font: 700 clamp(34px, 4.4vw, 60px) / 0.98 var(--font-oswald); text-transform: uppercase; }
|
|
25
|
+
.ub-ss-lead { max-width: 34em; margin: 0; color: var(--ink-muted); font-size: 17px; line-height: 26px; }
|
|
26
|
+
.ub-ss-btn { display: inline-flex; align-items: center; gap: 10px; min-height: 54px; padding: 0 28px; border: 0; border-radius: 999px; background: var(--ss-yellow); color: #1d1208; font: 700 15px/18px var(--ub-font-body); letter-spacing: 0.04em; text-transform: uppercase; cursor: pointer; transition: transform 0.2s; }
|
|
27
|
+
.ub-ss-btn:hover { transform: translateY(-2px) rotate(-1deg); }
|
|
28
|
+
.ub-ss-btn:disabled { opacity: 0.55; cursor: default; transform: none; }
|
|
29
|
+
.ub-ss-btn svg { width: 18px; height: 18px; }
|
|
30
|
+
.ub-ss-btn--ghost { background: transparent; color: #fff9ef; box-shadow: inset 0 0 0 2px rgb(255 249 239 / 0.8); }
|
|
31
|
+
|
|
32
|
+
/* ---------- Hero affiche ---------- */
|
|
33
|
+
.ub-ss-hero { position: relative; isolation: isolate; overflow: hidden; background: linear-gradient(180deg, #ff3d12 0%, #ff7a1a 55%, #ffc21a 100%); color: var(--hero-ink); }
|
|
34
|
+
/* Voile chaud centré : titre lisible au milieu du soleil */
|
|
35
|
+
.ub-ss-hero::before { content: ""; position: absolute; z-index: -1; right: -10%; bottom: -30%; width: 70vw; aspect-ratio: 1; border-radius: 50%; background: radial-gradient(circle, #ffd84a 0 45%, rgb(255 190 40 / 0.5) 60%, transparent 70%); }
|
|
36
|
+
.ub-ss-hero__in { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); align-items: center; gap: var(--space-12); min-height: clamp(620px, 50vw, 800px); padding-top: var(--space-12); padding-bottom: 110px; }
|
|
37
|
+
.ub-ss-hero__text { display: grid; justify-items: start; gap: 18px; }
|
|
38
|
+
/* Carte postale : cadre blanc, légère inclinaison, ombre ; le visuel garde ses proportions */
|
|
39
|
+
.ub-ss-poster { position: relative; justify-self: center; width: min(100%, 440px); margin: 0; padding: 14px 14px 46px; background: #fffaf0; transform: rotate(3deg); box-shadow: 0 30px 60px -24px rgb(90 20 0 / 0.55); }
|
|
40
|
+
.ub-ss-poster__img { display: block; aspect-ratio: 4 / 5; overflow: hidden; background: #ffb347; }
|
|
41
|
+
.ub-ss-poster__img img { display: block; width: 100%; height: 100%; object-fit: cover; }
|
|
42
|
+
.ub-ss-hero .ub-ss-kicker { color: #fff3c4; }
|
|
43
|
+
.ub-ss-title { display: grid; margin: 0; font: 700 clamp(56px, 6.6vw, 118px) / 0.88 var(--font-oswald); text-transform: uppercase; letter-spacing: 0.005em; text-shadow: 0 6px 0 rgb(120 30 0 / 0.35); }
|
|
44
|
+
.ub-ss-title__hl { color: #fff3c4; -webkit-text-stroke: 0; font-style: italic; }
|
|
45
|
+
.ub-ss-sub { max-width: 34em; margin: 0; color: #fff4e3; font-size: 18px; line-height: 27px; text-shadow: 0 1px 12px rgb(80 20 0 / 0.5); }
|
|
46
|
+
.ub-ss-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 6px; }
|
|
47
|
+
/* Pastille « autocollant » de remise */
|
|
48
|
+
.ub-ss-sticker { position: absolute; z-index: 2; top: -34px; right: -34px; display: grid; place-items: center; width: 132px; height: 132px; margin: 0; border-radius: 50%; background: var(--ss-yellow); color: #1d1208; transform: rotate(12deg); box-shadow: 0 10px 0 rgb(120 30 0 / 0.25); }
|
|
49
|
+
.ub-ss-sticker small { margin-top: 18px; font-size: 12px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }
|
|
50
|
+
.ub-ss-sticker b { margin-bottom: 22px; font: 700 40px/1 var(--font-oswald); }
|
|
51
|
+
.ub-ss-wave { position: absolute; left: 0; right: 0; bottom: -1px; width: 100%; height: 70px; fill: var(--ss-sand); }
|
|
52
|
+
|
|
53
|
+
/* ---------- Sections ---------- */
|
|
54
|
+
.ub-ss-section { padding-top: var(--space-16); }
|
|
55
|
+
.ub-sunset > :last-child { padding-bottom: 0; }
|
|
56
|
+
.ub-ss-head { display: grid; justify-items: center; gap: 4px; margin-bottom: 40px; text-align: center; }
|
|
57
|
+
|
|
58
|
+
/* Cartes postales */
|
|
59
|
+
.ub-ss-cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px 22px; margin: 0; padding: 0; list-style: none; }
|
|
60
|
+
.ub-ss-cards > li { transform: rotate(var(--tilt, 0deg)); transition: transform 0.3s cubic-bezier(0.2, 0.7, 0.2, 1); }
|
|
61
|
+
.ub-ss-cards > li:hover { transform: rotate(0) translateY(-6px); }
|
|
62
|
+
.ub-ss-card { position: relative; display: grid; padding: 10px 10px 14px; background: #fffdf8; color: var(--ink); box-shadow: var(--shadow-card); }
|
|
63
|
+
.ub-ss-card__img { display: block; aspect-ratio: 4 / 3; overflow: hidden; background: var(--surface); }
|
|
64
|
+
.ub-ss-card__img img { width: 100%; height: 100%; object-fit: cover; }
|
|
65
|
+
.ub-ss-card__back { display: grid; gap: 4px; padding: 12px 4px 0; border-top: 1px dashed #e6cfa7; margin-top: 10px; }
|
|
66
|
+
.ub-ss-card__name { font: 700 17px/1.2 var(--ub-font-body); }
|
|
67
|
+
.ub-ss-card__price { display: flex; gap: 8px; align-items: baseline; }
|
|
68
|
+
.ub-ss-card__price b { color: var(--ss-red); font: 700 20px/1 var(--font-oswald); }
|
|
69
|
+
.ub-ss-card__price s { color: var(--ink-muted); font-size: 14px; }
|
|
70
|
+
/* Timbre dentelé (remise) et cachet (date) */
|
|
71
|
+
.ub-ss-stamp { position: absolute; z-index: 2; top: 16px; right: 16px; display: grid; width: 66px; height: 78px; padding: 5px; transform: rotate(6deg);
|
|
72
|
+
background: radial-gradient(circle, transparent 3px, var(--ss-yellow) 3.5px) -6px -6px / 12px 12px; filter: drop-shadow(0 4px 6px rgb(0 0 0 / 0.2)); }
|
|
73
|
+
.ub-ss-stamp b { position: relative; z-index: 1; display: grid; place-items: center; background: var(--ss-yellow); outline: 1px dashed rgb(29 18 8 / 0.35); outline-offset: -4px; font: 700 19px/1 var(--font-oswald); color: #1d1208; }
|
|
74
|
+
.ub-ss-postmark { position: absolute; top: 24px; left: 20px; padding: 6px 12px; border: 2px solid rgb(11 79 138 / 0.75); border-radius: 999px; color: rgb(11 79 138 / 0.85); font: 700 11px/1 var(--ub-font-body); letter-spacing: 0.08em; text-transform: uppercase; transform: rotate(-10deg); background: rgb(255 253 248 / 0.7); }
|
|
75
|
+
|
|
76
|
+
/* Checklist de vacances */
|
|
77
|
+
.ub-ss-check__in { display: grid; grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr); gap: 40px; align-items: start; padding: clamp(28px, 4vw, 52px); border-radius: 22px; background: var(--surface); }
|
|
78
|
+
.ub-ss-check__text { display: grid; gap: 10px; position: sticky; top: 110px; }
|
|
79
|
+
.ub-ss-list { background: #fffdf8; border-radius: 16px; box-shadow: var(--shadow-card); overflow: hidden; }
|
|
80
|
+
.ub-ss-list ul { margin: 0; padding: 6px 0; list-style: none; }
|
|
81
|
+
.ub-ss-list li + li { border-top: 1px dashed #efdcb8; }
|
|
82
|
+
.ub-ss-item { display: grid; grid-template-columns: 26px 54px 1fr auto; align-items: center; gap: 14px; padding: 12px 18px; color: var(--ink); cursor: pointer; }
|
|
83
|
+
.ub-ss-item input { position: absolute; opacity: 0; pointer-events: none; }
|
|
84
|
+
.ub-ss-item__box { display: grid; place-items: center; width: 26px; height: 26px; border: 2px solid var(--ss-sea); border-radius: 8px; color: var(--ss-sea); font-weight: 700; transition: background 0.15s; }
|
|
85
|
+
.ub-ss-item input:focus-visible + .ub-ss-item__box { outline: 3px solid var(--ss-yellow); outline-offset: 2px; }
|
|
86
|
+
li.is-on .ub-ss-item__box { background: var(--ss-sea); }
|
|
87
|
+
li.is-on .ub-ss-item__box::after { content: ""; width: 10px; height: 6px; border: 3px solid #fff; border-top: 0; border-right: 0; transform: rotate(-45deg) translate(1px, -1px); }
|
|
88
|
+
.ub-ss-item__box--link { border-style: dashed; }
|
|
89
|
+
.ub-ss-item__img { display: block; width: 54px; height: 54px; overflow: hidden; border-radius: 10px; background: var(--surface); }
|
|
90
|
+
.ub-ss-item__img img { width: 100%; height: 100%; object-fit: cover; }
|
|
91
|
+
.ub-ss-item__name { font-weight: 600; }
|
|
92
|
+
.ub-ss-item__name small { display: block; color: var(--ink-muted); font-weight: 400; font-size: 13px; }
|
|
93
|
+
li.is-on .ub-ss-item__name { text-decoration: line-through; text-decoration-color: rgb(232 51 15 / 0.6); }
|
|
94
|
+
.ub-ss-item__price { font: 700 17px/1 var(--font-oswald); color: var(--ss-red); }
|
|
95
|
+
.ub-ss-list__foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 18px; background: var(--ss-sea); color: #fff6e6; }
|
|
96
|
+
.ub-ss-list__foot b { font: 700 26px/1 var(--font-oswald); color: var(--ss-yellow); margin-left: 6px; }
|
|
97
|
+
|
|
98
|
+
/* Bande coucher de soleil */
|
|
99
|
+
.ub-ss-band { position: relative; isolation: isolate; overflow: hidden; margin-top: var(--space-16); padding: var(--space-16) 0 140px; background: linear-gradient(180deg, #ffc21a 0%, #ff7a1a 45%, #e8330f 100%); color: #fff9ef; text-align: center; }
|
|
100
|
+
.ub-ss-band__sun { position: absolute; left: 50%; bottom: 40px; z-index: -1; width: min(560px, 80vw); aspect-ratio: 2 / 1; transform: translateX(-50%); border-radius: 999px 999px 0 0; background: radial-gradient(circle at 50% 100%, #ffe07a, #ffb21a 60%, transparent 61%); opacity: 0.9; }
|
|
101
|
+
.ub-ss-band__in { display: grid; justify-items: center; gap: 14px; }
|
|
102
|
+
.ub-ss-band .ub-ss-kicker { color: #fff3c4; }
|
|
103
|
+
.ub-ss-band .ub-ss-lead { color: #fff4e3; }
|
|
104
|
+
.ub-ss-cd .ub-countdown__c { background: rgb(29 18 8 / 0.25); color: #fff9ef; box-shadow: none; }
|
|
105
|
+
.ub-ss-cd .ub-countdown__c small { color: #ffe7cf; }
|
|
106
|
+
.ub-ss-wave--sea { fill: var(--ss-sea); height: 90px; }
|
|
107
|
+
|
|
108
|
+
@media (max-width: 1024px) { .ub-ss-cards { grid-template-columns: repeat(2, 1fr); } }
|
|
109
|
+
@media (max-width: 900px) {
|
|
110
|
+
.ub-ss-check__in { grid-template-columns: 1fr; }
|
|
111
|
+
.ub-ss-check__text { position: static; }
|
|
112
|
+
.ub-ss-hero .ub-ss-hero__in { grid-template-columns: 1fr; gap: var(--space-8); padding-top: 40px; padding-bottom: 100px; }
|
|
113
|
+
.ub-ss-poster { width: min(86%, 360px); }
|
|
114
|
+
.ub-ss-sticker { top: -20px; right: -16px; width: 96px; height: 96px; }
|
|
115
|
+
.ub-ss-sticker b { font-size: 28px; margin-bottom: 14px; }
|
|
116
|
+
.ub-ss-sticker small { margin-top: 12px; font-size: 10px; }
|
|
117
|
+
}
|
|
118
|
+
@media (max-width: 600px) {
|
|
119
|
+
.ub-ss-title { font-size: 56px; }
|
|
120
|
+
.ub-ss-cards { gap: 18px 12px; }
|
|
121
|
+
.ub-ss-item { grid-template-columns: 24px 46px 1fr; }
|
|
122
|
+
.ub-ss-item__price { grid-column: 3; }
|
|
123
|
+
}
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
fondu dans le noir à gauche, en haut et en bas. Pas de cadre, pas d'ombre. */
|
|
95
95
|
.ub-tc-hero[data-has-image] .ub-tc-hero__beam { display: none; }
|
|
96
96
|
.ub-tc-hero__cover { position: absolute; inset: 0 0 0 34%; z-index: -1; overflow: hidden; }
|
|
97
|
-
.ub-tc-hero__cover img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 62%;
|
|
97
|
+
.ub-tc-hero__cover img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 62%; }
|
|
98
98
|
.ub-tc-hero__cover::after {
|
|
99
99
|
content: "";
|
|
100
100
|
position: absolute;
|
|
@@ -186,9 +186,7 @@
|
|
|
186
186
|
object-fit: cover;
|
|
187
187
|
-webkit-mask-image: radial-gradient(72% 68% at 55% 55%, #000 45%, transparent 100%);
|
|
188
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
189
|
}
|
|
191
|
-
@keyframes ub-tc-fadein { from { opacity: 0; transform: scale(1.03); } }
|
|
192
190
|
.ub-tc-badge {
|
|
193
191
|
position: absolute;
|
|
194
192
|
left: -34px;
|
|
@@ -351,14 +349,13 @@
|
|
|
351
349
|
/* Le visuel couvre tout le hero ; un voile blanc à gauche garde le texte lisible */
|
|
352
350
|
/* Fond du hero = gris béton clair du visuel : l'image posée à droite se fond dans toute la largeur */
|
|
353
351
|
[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% 60%;
|
|
352
|
+
[data-variant="cyber-monday-2"] .ub-tc-hero__cover img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 60%; }
|
|
355
353
|
[data-variant="cyber-monday-2"] .ub-tc-hero__cover::after {
|
|
356
354
|
content: "";
|
|
357
355
|
position: absolute;
|
|
358
356
|
inset: 0;
|
|
359
357
|
background: linear-gradient(90deg, var(--hero-bg) 0%, rgb(255 255 255 / 0.7) 16%, transparent 38%);
|
|
360
358
|
}
|
|
361
|
-
@keyframes ub-tc-zoom { from { transform: scale(1.06); opacity: 0; } }
|
|
362
359
|
[data-variant="cyber-monday-2"] .ub-tc-hero__in { grid-template-columns: minmax(0, 620px); min-height: clamp(580px, 48vw, 760px); }
|
|
363
360
|
[data-variant="cyber-monday-2"] .ub-tc-chip { border-color: var(--ink); background: #fff; color: var(--ink); }
|
|
364
361
|
[data-variant="cyber-monday-2"] .ub-tc-title { font-size: clamp(42px, 5.6vw, 80px); }
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* Accueil « Training » (Sport 2) — modules/ub/training.tsx. Salle de sport : noir mat, blanc, accent citron vert (contraste AA). */
|
|
2
|
+
|
|
3
|
+
[data-variant="sport-2"] {
|
|
4
|
+
--bg: #0c0d0f; --surface: #15171a; --tint-1: #1b1e22; --tint-2: #171a1d; --tint-3: #1d2016; --tint-4: #1a1a1a;
|
|
5
|
+
--ink: #f2f3f0; --ink-muted: #a3a8a0; --border: #262a2e;
|
|
6
|
+
--primary: #c6ff3d; --on-primary: #0c0d0f; --accent: #c6ff3d; --on-accent: #0c0d0f;
|
|
7
|
+
--sale: #c6ff3d; --star: #c6ff3d; --success: #7ee081;
|
|
8
|
+
--hero-bg: #0c0d0f; --hero-ink: #ffffff; --hero-muted: #c3c8c0;
|
|
9
|
+
--band-bg: #c6ff3d; --band-ink: #0c0d0f; --bubble-bg: #c6ff3d; --bubble-ink: #0c0d0f;
|
|
10
|
+
--topbar-bg: #c6ff3d; --topbar-ink: #0c0d0f; --focus: #c6ff3d;
|
|
11
|
+
--shadow-card: 0 20px 40px -26px rgb(0 0 0 / 0.9);
|
|
12
|
+
--ub-font-head: var(--font-space-grotesk); --ub-font-body: var(--font-inter);
|
|
13
|
+
--ub-head-weight: 700; --ub-head-case: uppercase; --ub-head-track: -0.01em;
|
|
14
|
+
--ub-r-card: 10px; --ub-r-btn: 8px; --ub-r-tile: 10px; --ub-r-hero: 0px; --ub-r-media: 8px;
|
|
15
|
+
--tr-lime: #c6ff3d;
|
|
16
|
+
color-scheme: dark;
|
|
17
|
+
}
|
|
18
|
+
[data-variant="sport-2"] .ub-nav { background: #0c0d0f; border-bottom: 1px solid var(--border); }
|
|
19
|
+
[data-variant="sport-2"] .ub-nav__cta { background: var(--tr-lime); color: #0c0d0f; }
|
|
20
|
+
[data-variant="sport-2"] .ub-footwrap { --foot-bg: #15171a; --foot-ink: #f2f3f0; --cta-bg: var(--tr-lime); --cta-ink: #0c0d0f; }
|
|
21
|
+
[data-variant="sport-2"] .ub-footwrap .ub-footer { border: 1px solid var(--border); }
|
|
22
|
+
[data-variant="sport-2"] .ub-card { background: var(--surface); border: 1px solid var(--border); }
|
|
23
|
+
[data-variant="sport-2"] .ub-badge { background: var(--tr-lime); color: #0c0d0f; }
|
|
24
|
+
|
|
25
|
+
.ub-tr-kicker { margin: 0; color: var(--tr-lime); font: 600 12px/16px var(--ub-font-body); letter-spacing: 0.26em; text-transform: uppercase; }
|
|
26
|
+
.ub-tr-h2 { margin: 6px 0 0; font: 700 clamp(30px, 3.8vw, 52px) / 1 var(--font-space-grotesk); letter-spacing: -0.02em; text-transform: uppercase; }
|
|
27
|
+
.ub-tr-h3 { margin: 0 0 16px; font: 700 18px/1.2 var(--font-space-grotesk); letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-muted); }
|
|
28
|
+
.ub-tr-lead { max-width: 34em; margin: 0; color: var(--ink-muted); font-size: 16px; line-height: 25px; }
|
|
29
|
+
.ub-tr-btn { display: inline-flex; align-items: center; gap: 10px; min-height: 52px; padding: 0 24px; border-radius: 8px; background: var(--tr-lime); color: #0c0d0f; font: 700 15px/18px var(--font-space-grotesk); letter-spacing: 0.04em; text-transform: uppercase; transition: transform 0.2s; }
|
|
30
|
+
.ub-tr-btn:hover { transform: translateY(-2px); }
|
|
31
|
+
.ub-tr-btn svg { width: 18px; height: 18px; }
|
|
32
|
+
.ub-tr-btn--ghost { background: transparent; color: #fff; box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.4); }
|
|
33
|
+
.ub-tr-price { display: inline-flex; gap: 8px; align-items: baseline; color: var(--tr-lime); font: 700 16px/1 var(--font-space-grotesk); }
|
|
34
|
+
.ub-tr-price s { color: var(--ink-muted); font-weight: 400; font-size: 13px; }
|
|
35
|
+
|
|
36
|
+
/* ---------- Hero ---------- */
|
|
37
|
+
.ub-tr-hero { position: relative; isolation: isolate; overflow: hidden; display: flex; align-items: center; min-height: clamp(600px, 52vw, 800px); background: var(--hero-bg); color: #fff; }
|
|
38
|
+
.ub-tr-hero::before { content: ""; position: absolute; inset: 0; z-index: -1; background: radial-gradient(40% 60% at 20% 50%, rgb(198 255 61 / 0.07), transparent 70%); }
|
|
39
|
+
/* Visuel (854 px de large) : à droite, à sa taille réelle, fondu dans le noir du hero */
|
|
40
|
+
.ub-tr-hero .ub-tr-hero__img { left: auto; width: min(854px, 55%); -webkit-mask-image: linear-gradient(90deg, transparent, #000 45%); mask-image: linear-gradient(90deg, transparent, #000 45%); }
|
|
41
|
+
.ub-tr-hero__in { display: grid; width: 100%; padding-top: var(--space-12); padding-bottom: var(--space-16); }
|
|
42
|
+
.ub-tr-hero__text { display: grid; justify-items: start; gap: 22px; max-width: 620px; }
|
|
43
|
+
.ub-tr-title { margin: 0; font: 700 clamp(52px, 7vw, 110px) / 0.92 var(--font-space-grotesk); letter-spacing: -0.04em; text-transform: uppercase; }
|
|
44
|
+
.ub-tr-title__hl { color: var(--tr-lime); }
|
|
45
|
+
.ub-tr-sub { max-width: 32em; margin: 0; color: var(--hero-muted); font-size: 17px; line-height: 27px; }
|
|
46
|
+
.ub-tr-actions { display: flex; flex-wrap: wrap; gap: 12px; }
|
|
47
|
+
/* Mots de la campagne en lettres de tableau */
|
|
48
|
+
.ub-tr-words { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0; }
|
|
49
|
+
.ub-tr-words span { padding: 6px 10px; border: 1px solid #2c2f33; background: repeating-linear-gradient(0deg, #1b1b1b 0 3px, #151515 3px 6px); font: 600 13px/1 var(--font-space-grotesk); letter-spacing: 0.2em; text-transform: uppercase; color: #f4f4f4; }
|
|
50
|
+
.ub-tr-words b { padding: 5px 12px; background: var(--tr-lime); color: #0c0d0f; font: 700 18px/1 var(--font-space-grotesk); }
|
|
51
|
+
|
|
52
|
+
/* ---------- Sections ---------- */
|
|
53
|
+
.ub-tr-section { padding-top: var(--space-16); }
|
|
54
|
+
.ub-training > :last-child { padding-bottom: var(--space-16); }
|
|
55
|
+
.ub-tr-head { display: grid; gap: 4px; margin-bottom: var(--space-8); }
|
|
56
|
+
|
|
57
|
+
/* Les plus choisis : bande juste sous le hero */
|
|
58
|
+
.ub-tr-top { margin-top: -54px; position: relative; z-index: 2; }
|
|
59
|
+
.ub-tr-top .ub-tr-h3 { color: #fff; }
|
|
60
|
+
.ub-tr-top__list { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin: 0; padding: 0; list-style: none; }
|
|
61
|
+
.ub-tr-rank { display: grid; grid-template-columns: auto 60px 1fr; align-items: center; gap: 12px; padding: 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); color: var(--ink); transition: border-color 0.2s, transform 0.2s; }
|
|
62
|
+
.ub-tr-rank:hover { border-color: var(--tr-lime); transform: translateY(-2px); }
|
|
63
|
+
.ub-tr-rank__n { font: 700 22px/1 var(--font-space-grotesk); color: var(--tr-lime); }
|
|
64
|
+
.ub-tr-rank__img { display: block; width: 60px; height: 60px; overflow: hidden; border-radius: 8px; background: #1f2226; }
|
|
65
|
+
.ub-tr-rank__img img { width: 100%; height: 100%; object-fit: cover; }
|
|
66
|
+
.ub-tr-rank__body { display: grid; gap: 4px; min-width: 0; }
|
|
67
|
+
.ub-tr-rank__body b { overflow: hidden; font-size: 14px; line-height: 18px; text-overflow: ellipsis; white-space: nowrap; }
|
|
68
|
+
|
|
69
|
+
/* Programme de la semaine */
|
|
70
|
+
.ub-tr-week { display: grid; grid-template-columns: repeat(7, 1fr); gap: 10px; margin: 0; padding: 0; list-style: none; counter-reset: d; }
|
|
71
|
+
.ub-tr-day { display: grid; gap: 8px; height: 100%; padding: 14px 12px 16px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); color: var(--ink); transition: border-color 0.2s; }
|
|
72
|
+
.ub-tr-day:hover { border-color: var(--tr-lime); }
|
|
73
|
+
.ub-tr-day__d { font: 700 13px/1 var(--font-space-grotesk); letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-muted); }
|
|
74
|
+
.ub-tr-day__f { font: 700 17px/1.1 var(--font-space-grotesk); color: var(--tr-lime); text-transform: uppercase; }
|
|
75
|
+
.ub-tr-day__img { display: block; aspect-ratio: 1; overflow: hidden; border-radius: 8px; background: #1f2226; }
|
|
76
|
+
.ub-tr-day__img img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(0.2); }
|
|
77
|
+
.ub-tr-day__name { font-size: 13px; line-height: 17px; }
|
|
78
|
+
.is-rest .ub-tr-day { border-style: dashed; }
|
|
79
|
+
.is-rest .ub-tr-day__f { color: var(--ink); }
|
|
80
|
+
|
|
81
|
+
/* Pack de départ */
|
|
82
|
+
.ub-tr-pack { display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr); gap: 40px; align-items: center; padding: clamp(28px, 4vw, 56px); border-radius: 16px; background: linear-gradient(135deg, #15171a, #101113); border: 1px solid var(--border); }
|
|
83
|
+
.ub-tr-pack__text { display: grid; justify-items: start; gap: 14px; }
|
|
84
|
+
.ub-tr-pack__total { display: grid; gap: 4px; margin: 6px 0 0; }
|
|
85
|
+
.ub-tr-pack__total span { color: var(--ink-muted); font-size: 13px; letter-spacing: 0.14em; text-transform: uppercase; }
|
|
86
|
+
.ub-tr-pack__total b { font: 700 44px/1 var(--font-space-grotesk); color: var(--tr-lime); }
|
|
87
|
+
.ub-tr-pack__total em { font-style: normal; color: #fff; font-weight: 600; }
|
|
88
|
+
.ub-tr-cd .ub-countdown__c { background: #0c0d0f; color: var(--tr-lime); box-shadow: none; border: 1px solid var(--border); }
|
|
89
|
+
.ub-tr-pack__items { position: relative; display: grid; grid-template-columns: repeat(3, 1fr); gap: 34px; margin: 0; padding: 0; list-style: none; }
|
|
90
|
+
.ub-tr-pack__items li + li::before { content: "+"; position: absolute; margin: 30% 0 0 -26px; color: var(--tr-lime); font: 700 28px/1 var(--font-space-grotesk); }
|
|
91
|
+
.ub-tr-pack__items li { position: relative; }
|
|
92
|
+
.ub-tr-pack__item { display: grid; gap: 8px; color: var(--ink); }
|
|
93
|
+
.ub-tr-pack__img { display: block; aspect-ratio: 1; overflow: hidden; border-radius: 10px; background: #1f2226; }
|
|
94
|
+
.ub-tr-pack__img img { width: 100%; height: 100%; object-fit: cover; }
|
|
95
|
+
.ub-tr-pack__name { font-size: 14px; line-height: 18px; font-weight: 600; }
|
|
96
|
+
|
|
97
|
+
/* Engagements */
|
|
98
|
+
.ub-tr-promise { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin: 0; padding: 0; list-style: none; }
|
|
99
|
+
.ub-tr-promise li { display: flex; gap: 12px; align-items: center; padding: 18px; border-radius: 10px; border: 1px solid var(--border); background: var(--surface); }
|
|
100
|
+
.ub-tr-promise svg { flex: none; width: 26px; height: 26px; color: var(--tr-lime); }
|
|
101
|
+
.ub-tr-promise span { display: grid; }
|
|
102
|
+
.ub-tr-promise b { font-size: 15px; } .ub-tr-promise small { color: var(--ink-muted); font-size: 13px; }
|
|
103
|
+
|
|
104
|
+
@media (max-width: 1024px) {
|
|
105
|
+
.ub-tr-top__list, .ub-tr-promise { grid-template-columns: repeat(2, 1fr); }
|
|
106
|
+
.ub-tr-week { grid-auto-flow: column; grid-template-columns: none; grid-auto-columns: minmax(150px, 1fr); overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 8px; }
|
|
107
|
+
.ub-tr-week li { scroll-snap-align: start; }
|
|
108
|
+
}
|
|
109
|
+
@media (max-width: 900px) {
|
|
110
|
+
.ub-tr-hero { display: block; min-height: 0; }
|
|
111
|
+
.ub-tr-hero .ub-tr-hero__img { width: 100%; bottom: auto; height: 380px; -webkit-mask-image: linear-gradient(180deg, #000 50%, transparent); mask-image: linear-gradient(180deg, #000 50%, transparent); }
|
|
112
|
+
.ub-tr-hero .ub-tr-hero__in { padding-top: 300px; padding-bottom: 40px; }
|
|
113
|
+
.ub-tr-top { margin-top: var(--space-8); }
|
|
114
|
+
.ub-tr-pack { grid-template-columns: 1fr; }
|
|
115
|
+
}
|
|
116
|
+
@media (max-width: 600px) {
|
|
117
|
+
.ub-tr-title { font-size: 50px; }
|
|
118
|
+
.ub-tr-top__list, .ub-tr-promise { grid-template-columns: 1fr; }
|
|
119
|
+
.ub-tr-pack__items { gap: 22px; }
|
|
120
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"The summer Games: up to {discount} off",
|
|
4
|
+
"Free shipping over {freeShipping}",
|
|
5
|
+
"48h express delivery"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "The summer Games",
|
|
9
|
+
"title": "Let the price flame burn",
|
|
10
|
+
"highlight": "flame",
|
|
11
|
+
"sub": "Gear, outfits and everything for a sporty summer, up to {discount} off. Until {endDate}.",
|
|
12
|
+
"cta": "Enter the arena",
|
|
13
|
+
"cta2": "See the podium",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Up to",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"champions"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Record to beat",
|
|
22
|
+
"title": "Record-breaking prices",
|
|
23
|
+
"text": "The best deals of the sporting summer, until {endDate}.",
|
|
24
|
+
"cta": "Break the record",
|
|
25
|
+
"seal": "Until {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "Disciplines",
|
|
29
|
+
"products": "Store champions"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Les Jeux de l'été : jusqu'à -{discount}",
|
|
4
|
+
"Livraison offerte dès {freeShipping}",
|
|
5
|
+
"Livraison express 48 h"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "Les Jeux de l'été",
|
|
9
|
+
"title": "Que la flamme des prix s'allume",
|
|
10
|
+
"highlight": "flamme",
|
|
11
|
+
"sub": "Équipements, tenues et tout pour vivre l'été sportif jusqu'à -{discount}. Jusqu'au {endDate}.",
|
|
12
|
+
"cta": "Entrer dans l'arène",
|
|
13
|
+
"cta2": "Voir le podium",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Jusqu'à",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"champions"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Record à battre",
|
|
22
|
+
"title": "Des prix qui battent des records",
|
|
23
|
+
"text": "Les meilleures offres de l'été sportif, jusqu'au {endDate}.",
|
|
24
|
+
"cta": "Battre le record",
|
|
25
|
+
"seal": "Jusqu'au {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "Les disciplines",
|
|
29
|
+
"products": "Les champions de la boutique"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Every discipline up to {discount} off",
|
|
4
|
+
"Free shipping over {freeShipping}",
|
|
5
|
+
"Free 30-day returns"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "The summer of every sport",
|
|
9
|
+
"title": "Every sport has its champion",
|
|
10
|
+
"highlight": "champion",
|
|
11
|
+
"sub": "Running, swimming, cycling, rackets, balls: up to {discount} off every discipline, until {endDate}.",
|
|
12
|
+
"cta": "Pick my discipline",
|
|
13
|
+
"cta2": "Medal table",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Up to",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"all sports"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Relay",
|
|
22
|
+
"title": "Pass the baton to great deals",
|
|
23
|
+
"text": "One deal after another, until {endDate}.",
|
|
24
|
+
"cta": "Take the baton",
|
|
25
|
+
"seal": "Until {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "Every discipline",
|
|
29
|
+
"products": "The medal table"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Toutes les disciplines jusqu'à -{discount}",
|
|
4
|
+
"Livraison offerte dès {freeShipping}",
|
|
5
|
+
"Retours gratuits 30 jours"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "L'été de tous les sports",
|
|
9
|
+
"title": "Chaque sport a son champion",
|
|
10
|
+
"highlight": "champion",
|
|
11
|
+
"sub": "Course, natation, vélo, raquettes, ballons : jusqu'à -{discount} sur toutes les disciplines, jusqu'au {endDate}.",
|
|
12
|
+
"cta": "Choisir ma discipline",
|
|
13
|
+
"cta2": "Tableau des médailles",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Jusqu'à",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"tous sports"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Relais",
|
|
22
|
+
"title": "Passez le relais aux bonnes affaires",
|
|
23
|
+
"text": "Une offre après l'autre, jusqu'au {endDate}.",
|
|
24
|
+
"cta": "Prendre le relais",
|
|
25
|
+
"seal": "Jusqu'au {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "Toutes les disciplines",
|
|
29
|
+
"products": "Le tableau des médailles"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Ramadan Mubarak: up to {discount} off",
|
|
4
|
+
"Free shipping over {freeShipping}",
|
|
5
|
+
"Gift boxes ready to give"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "Ramadan Mubarak",
|
|
9
|
+
"title": "Nights that shine, gifts that matter",
|
|
10
|
+
"highlight": "shine",
|
|
11
|
+
"sub": "Lanterns, fragrances, gift boxes and festive outfits up to {discount} off. Until {endDate}, to share with the ones you love.",
|
|
12
|
+
"cta": "Discover the selection",
|
|
13
|
+
"cta2": "Gift ideas",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Up to",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"off gifts"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Until Eid",
|
|
22
|
+
"title": "Get ready for the celebration",
|
|
23
|
+
"text": "Order today, receive it before Eid. Offers valid until {endDate}.",
|
|
24
|
+
"cta": "Get ready",
|
|
25
|
+
"seal": "Until {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "By occasion",
|
|
29
|
+
"products": "Tonight's selection"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Ramadan Moubarak : jusqu'à -{discount}",
|
|
4
|
+
"Livraison offerte dès {freeShipping}",
|
|
5
|
+
"Coffrets cadeaux prêts à offrir"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "Ramadan Moubarak",
|
|
9
|
+
"title": "Des nuits qui brillent, des cadeaux qui comptent",
|
|
10
|
+
"highlight": "brillent",
|
|
11
|
+
"sub": "Lanternes, parfums, coffrets et tenues de fête jusqu'à -{discount}. Jusqu'au {endDate}, pour partager avec ceux qu'on aime.",
|
|
12
|
+
"cta": "Découvrir la sélection",
|
|
13
|
+
"cta2": "Idées cadeaux",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Jusqu'à",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"sur la fête"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Jusqu'à l'Aïd",
|
|
22
|
+
"title": "Préparez la fête en avance",
|
|
23
|
+
"text": "Commandez aujourd'hui, recevez avant l'Aïd. Offres valables jusqu'au {endDate}.",
|
|
24
|
+
"cta": "Je prépare la fête",
|
|
25
|
+
"seal": "Jusqu'au {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "Par occasion",
|
|
29
|
+
"products": "La sélection de la nuit"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Eid Mubarak: up to {discount} off",
|
|
4
|
+
"Free shipping over {freeShipping}",
|
|
5
|
+
"Free gift wrapping"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "Eid Mubarak",
|
|
9
|
+
"title": "The festive souk is open",
|
|
10
|
+
"highlight": "souk",
|
|
11
|
+
"sub": "Kaftans, tea, incense, sweets and decor up to {discount} off. Until {endDate}, for a family celebration.",
|
|
12
|
+
"cta": "Enter the souk",
|
|
13
|
+
"cta2": "Our wishes",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Up to",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"at the souk"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "The Eid gift box",
|
|
22
|
+
"title": "Share a little sweetness",
|
|
23
|
+
"text": "Ideas for everyone, wrapped with care. Until {endDate}.",
|
|
24
|
+
"cta": "See gift boxes",
|
|
25
|
+
"seal": "Until {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "Who is it for?",
|
|
29
|
+
"products": "Souk treasures"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Aïd Moubarak : jusqu'à -{discount}",
|
|
4
|
+
"Livraison offerte dès {freeShipping}",
|
|
5
|
+
"Emballage cadeau offert"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "Aïd Moubarak",
|
|
9
|
+
"title": "Le souk de la fête est ouvert",
|
|
10
|
+
"highlight": "souk",
|
|
11
|
+
"sub": "Caftans, thé, encens, douceurs et décoration jusqu'à -{discount}. Jusqu'au {endDate}, pour une fête en famille.",
|
|
12
|
+
"cta": "Entrer dans le souk",
|
|
13
|
+
"cta2": "Nos vœux",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Jusqu'à",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"au souk"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Le coffret de l'Aïd",
|
|
22
|
+
"title": "Offrez un peu de douceur",
|
|
23
|
+
"text": "Des idées pour chacun, emballées avec soin. Jusqu'au {endDate}.",
|
|
24
|
+
"cta": "Voir les coffrets",
|
|
25
|
+
"seal": "Jusqu'au {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "Pour qui ?",
|
|
29
|
+
"products": "Les trésors du souk"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"topbar": [
|
|
3
|
+
"Match day: up to {discount} off",
|
|
4
|
+
"Free shipping over {freeShipping}",
|
|
5
|
+
"Free size exchange"
|
|
6
|
+
],
|
|
7
|
+
"hero": {
|
|
8
|
+
"eyebrow": "Match day",
|
|
9
|
+
"title": "Wear your colours",
|
|
10
|
+
"highlight": "colours",
|
|
11
|
+
"sub": "Jerseys, shorts and gear up to {discount} off. Final whistle on {endDate}.",
|
|
12
|
+
"cta": "Pick my jersey",
|
|
13
|
+
"cta2": "See the team",
|
|
14
|
+
"bubble": [
|
|
15
|
+
"Up to",
|
|
16
|
+
"{discount}",
|
|
17
|
+
"off jerseys"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"promo": {
|
|
21
|
+
"eyebrow": "Half time",
|
|
22
|
+
"title": "Half-time prices",
|
|
23
|
+
"text": "The best deals of the season, until the final whistle on {endDate}.",
|
|
24
|
+
"cta": "Step on the pitch",
|
|
25
|
+
"seal": "Until {endDate}"
|
|
26
|
+
},
|
|
27
|
+
"sections": {
|
|
28
|
+
"categories": "By sport",
|
|
29
|
+
"products": "Team of the moment"
|
|
30
|
+
}
|
|
31
|
+
}
|