PageSourceSearch

https://www.beauteprivee.fr/account/login?return_url=%2Faccount%3Fm%3Dwishlist

html beauteprivee.fr collected 2026-09-26 02:33:50 UTC 253,779 bytes, 4,954 lines download raw bytes

1<!doctype html>
2<html class="js" lang="fr">
3    
4    
5    
6        <head>
7            
8            
8<script>
9window.axeptioSettings = {
10  clientId: "67ff71e7398e6801d5a29dca",
11  cookiesVersion: "beaute privee-fr-EU",
12  googleConsentMode: {
13    default: {
14      analytics_storage: "denied",
15      ad_storage: "denied",
16      ad_user_data: "denied",
17      ad_personalization: "denied",
18      wait_for_update: 500
19    }
20  }
21};
22 
23(function(d, s) {
24  var t = d.getElementsByTagName(s)[0], e = d.createElement(s);
25  e.async = true; e.src = "//static.axept.io/tcf/sdk.js"; e.type = "module";
26  t.parentNode.insertBefore(e, t);
27})(document, "script");
28</script>
28
29
30
31<script>
32  //Ajout 23/03 - Check clarity 
33  window._axcb = window._axcb || [];
34  window._axcb.push(function(sdk) {
35  sdk.on('cookies:consent:accept', function() {
36    if (typeof window.clarity === 'function') {
37      window.clarity('consent');
38      }
39    })
40  });
41
42  void 0 === window._axcb && (window._axcb = []);
43  window._axcb.push(function (axeptio) {
44    axeptio.on("consent:saved", function (payload) {
45      const choices = payload.preferences.vendors;
46
47		   // Chargement API de consentement Shopify
48		   window.Shopify.loadFeatures([
49			{
50			  name: "consent-tracking-api",
51			  version: "0.1",
52			},
53		  ]);
54      
55      window.Shopify.customerPrivacy.setTrackingConsent(
56          {
57			preferences: choices.shopify_preferences,
58            analytics: choices.shopify_analytics,
59            marketing: choices.shopify_marketing,
60            sale_of_data: choices.shopify_sale_of_data, 
61          },
62          () => {}
63        );
64    
65    });
66  });
67</script>
67
68
69
70
71
72
73            
74            
75                
76                    
76<script
77                        type="text/javascript"
78                        src="https://js-cdn.dynatrace.com/jstag/15fc9f135f3/bf16440rul/3cbd7b0a9e3898e8_complete.js"
79                        crossorigin="anonymous"
80                    ></script>
80
81                
82            
83�
83<script>
84  window.dataLayer = window.dataLayer || [];
85
86  const permanentDomain = "beauteprivee-prod.myshopify.com";
87  const environnement = permanentDomain.includes('beauteprivee-prod')
88    ? 'shopify_prod'
89    : 'shopify_preprod';
90
91     function getDeviceType() {
92        const e = navigator.userAgent;
93        if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(e)) {
94            return "tablette";
95        }
96        if (/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(e)) {
97            return "webmobile";
98        }
99
100        return "desktop";
101    }
102
103  window.bpDataLayerContext = {
104    environnement: environnement,
105
106    content_group: "login",
107    page_url: window.location.href,
108    page_title: "Compte",
109
110    device: getDeviceType(),
111    platform: "web",
112
113    country: "fr",
114    language: "fr",
115
116    user_status: "guest",
117    user_id: "",
118    user_type: "",
119    customer_segment: "",
120
121    user_first_purchase: false,
122    visitor_type: "",
123
124    user_birth_date: "",
125
126    first_name: "",
127    last_name: "",
128    email_address: "",
129
130    user_club_status: "",
131
132    user_derniere_commande: "",
133    user_date_inscription: "",
134    user_date_premiere_commande: "",
135      user_derniere_connexion_app:
136        
137          ""
138        ,
139
140      user_derniere_connexion_web:
141        
142          ""
143        ,
144
145      user_derniere_connexion_mobile: "",
146    app_version: "",
147    os_version: "",
148
149    collection_id: "",
150    collection_name: "",
151    collection_type: "",
152
153    sale_id:
154         
155            ""
156          ,
157
158    sale_name:
159        
160          ""
161        ,
162          page_universes: "",
163
164    page_universes: "",
165
166    sale_start: "",
167    sale_end: ""
168  };
169
170  window.dataLayer.push({
171    event: "dl_first_ready",
172    ...window.bpDataLayerContext
173  });
174</script>
174
175
176
177
178            <!-- Détection first order -->
179            
180                
180<script>
181                    // Si pas de client connecté, on considère une première commande
182                    localStorage.setItem('FirstOrder', 'true');
183                </script>
183
184            
185
186            
187
188            
188<script>
189                document.addEventListener('DOMContentLoaded', () => {
190                    const ua = navigator.userAgent || '';
191                    const url = window.location.pathname;
192                   
193                    // 1️⃣ Vérifier la WebView Flutter
194                    const isFlutter = ua.includes('flutter');
195                    // 2️⃣ Vérifier qu’on est sur la page jeu-concours
196                    const isGamePage = url.includes('jeu-concours');
197                    if (!isFlutter) {
198                        return;
199                    }
200                    if (!isGamePage) {
201                        return;
202                    }
203                    // Sélecteurs du header / wrapper
204                    const headerSection = document.querySelector('#shopify-section-sections--26159070576985__header');
205                    const stickyWrapper =
206                        document.querySelector('w3-sticky-header') ||
207                        document.querySelector('[data-header-wrapper]') ||
208                        document.querySelector('.header-wrapper');
209                    // 1️⃣ Suppression de la section du header
210                    if (headerSection) {
211                        console.log('🧹 Suppression de la section header');
212                        headerSection.remove();
213                    } else {
214                        console.warn('⚠️ Section header introuvable');
215                    }
216                    // 2️⃣ Suppression du wrapper autour
217                    if (stickyWrapper) {
218                        console.log('🧹 Suppression du wrapper sticky');
219                        stickyWrapper.remove();
220                    }
221                    // 3️⃣ Nettoyage des marges globales
222                    document.body.style.margin = '0';
223                    document.body.style.padding = '0';
224                    // 4️⃣ Corriger le premier élément de la page
225                    const firstElement = document.body.firstElementChild;
226                    if (firstElement) {
227                        firstElement.style.marginTop = '0';
228                        firstElement.style.paddingTop = '0';
229                    }
230                    // 6️⃣ Décalage vers le haut : -130px
231                    // ----------------------------------------------------
232                    const mainContainer =
233                        document.querySelector('main') || document.querySelector('#MainContent') || firstElement;
234                    if (mainContainer) {
235                        console.log('⬆️ Décalage du container principal de -130px');
236                        mainContainer.style.position = 'relative';
237                        mainContainer.style.top = '-130px';
238                    } else {
239                        console.warn('⚠️ Aucun conteneur principal trouvé pour appliquer le décalage.');
240                    }
241
242                    const iframe = document.querySelector('#addictiz-game iframe');
243                    if (iframe) {
244                        iframe.style.width = '100vw';
245                        iframe.style.maxWidth = '100vw';
246                        iframe.style.margin = '0';
247                        iframe.style.padding = '0';
248                        iframe.style.border = 'none';
249                        iframe.style.display = 'block';
250                    }
251                    console.log('✅ Full width appliqué sans réactiver le header');
252                    console.log('✅ Header & zone blanche totalement supprimés');
253                });
254            </script>
254
255            
255<script>
256    window.diagnosticCustomerEmail = '';
257
258    // This code block is used to connect with the app **RevenueHunt: Recommender Quiz**
259    // For more information please see : https://docs.revenuehunt.com/
260
261    window.prq_vars = {};
262
263    // Autofill email for PEAU diagnostic
264    window.prq_vars.N1iAomZ = '';
265
266    // Autofill email for CHEVEUX diagnostic
267    window.prq_vars.laievYB = '';
268
269    /**
270     * Callback function for the quiz
271     * @see https://docs.revenuehunt.com/how-to-guides/use-callback-function/
272     * @param quizResponse
273     */
274    function prqQuizCallback(quizResponse) {
275        if (quizResponse.action === 'quiz_callback') {
276            handleQuizSubmit(quizResponse);
277        }
278    }
279
280    /**
281     * Handle the quiz submission
282     * @param quizResponse
283     */
284    function handleQuizSubmit(quizResponse) {
285        console.log('📝 Received quiz completion', quizResponse);
286        const localStorageKey = `quiz_results_${quizResponse.quizid}`;
287        localStorage.setItem(localStorageKey, JSON.stringify(quizResponse));
288
289        // Redirect to the quiz results page
290        window.location.href = `/pages/resultat-diagnostic?view=diagnostic-results&quizid=${quizResponse.quizid}`;
291    }
292</script>
292
293
294
295            
295<script>
296  function getOrigin(element) {
297      const url = new URL(window.location);
298      const path = url.pathname;
299      const attachedBrand =false;
300      const attachedVP =false;
301      const attachedVPBrand =false;
302
303      const isSearch =false;
304      const isDiag =false;
305      const baseOrigin = {
306          "Page Marque": attachedBrand,
307          "Vente Marque": attachedVP && attachedVPBrand,
308          "Vente Transverse": attachedVP && !attachedVPBrand,
309          "Search engine": isSearch,
310          "Favoris": url.search.includes('m=wishlist'),
311          "Diagnostique": isDiag,
312          "Potion": !!element?.closest('w3-potions-experience'),
313          "Reetaags": false
314      };
315      baseOrigin["Page Categ"] = !attachedBrand && !attachedVP && path.includes('/collections/');
316      baseOrigin["Autres"] = Object.values(baseOrigin).every(v => !v);
317      return baseOrigin;
318  }
319
320  function setCartOrigin() {
321      localStorage.removeItem('cart-origin');
322
323      const handle = "";
324      const origin = getOrigin();
325      for (const key in origin) {
326          if (origin[key]) {
327              localStorage.setItem('cart-origin', JSON.stringify({"cart_origin": {"info1": key, "info2": handle}}));
328              console.log("🔵 Cart origin — updated", localStorage.getItem('cart-origin'));
329              return;
330          }
331      }
332  }
333  // Set the cart origin when the page loads
334  document.addEventListener('DOMContentLoaded', function() {
335      console.log('🔵 Cart origin — script loaded');setCartOrigin();// In some case setCartOrigin needs to be updated on click
336      const main = document.querySelector("main");
337      main.addEventListener('click', (event) => {
338          const recoButton = event.targetHpBlocks?.closest('[data-reco-click]');
339          if (recoButton && main.contains(recoButton)) {
340              setCartOrigin(recoButton)
341          }
342      });
343  });
344
345  window.getOrigin = getOrigin;
346  window.setCartOrigin = setCartOrigin;
347</script>
347
348
349
350            
351
352            
353
354            <meta charset="utf-8">
355            <meta http-equiv="X-UA-Compatible" content="IE=edge">
356            <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
357            <meta name="theme-color" content="">
358            <link rel="canonical" href="https://www.beauteprivee.fr/account/login">
359
360            <meta name="domain-check" content="www.beauteprivee.fr">
361
362            <meta name="domain-check" content="www.beauteprivee.fr">
363
364            
365                <meta name="robots" content="noindex, nofollow">
366            
367<link rel="icon" type="image/png" href="//www.beauteprivee.fr/cdn/shop/files/logo_app_rose_1.png?crop=center&height=32&v=1780901238&width=32"><title>
368                
369                    Compte
370 &ndash; Beauté Privée
371            </title>
372
373            
374                
375            
376
377
378
379  <link href="//www.beauteprivee.fr/cdn/shop/t/582/assets/main.css?v=2911149496467511051787728116" rel="stylesheet" type="text/css" media="all" />
380
381
382
383
384  
384<script src="//www.beauteprivee.fr/cdn/shop/t/582/assets/main.js?v=53740370638311342681785398383" type="module" crossorigin="anonymous"></script>
384
385  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/drawer.js?v=85991630003007229211784102099" crossorigin="anonymous">
386  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/shopify.js?v=21637899808311371561785398384" crossorigin="anonymous">
387  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/more-breadcrumbs.js?v=80276642231020276641784102103" crossorigin="anonymous">
388  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/utils.js?v=156139978954507691051784102108" crossorigin="anonymous">
389  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/wishlist-grid.js?v=97799465959277564231784102109" crossorigin="anonymous">
390  <link href="//www.beauteprivee.fr/cdn/shop/t/582/assets/main2.css?v=106979511380621932181784102102" rel="stylesheet" type="text/css" media="all" />
391
392
393
394
395  
395<script src="//www.beauteprivee.fr/cdn/shop/t/582/assets/customer.js?v=177830879502785405471784102098" type="module" crossorigin="anonymous"></script>
395
396  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/wishlist-grid.js?v=97799465959277564231784102109" crossorigin="anonymous">
397  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/algolia-config.js?v=53598118976721863621784836953" crossorigin="anonymous">
398  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/shopify.js?v=21637899808311371561785398384" crossorigin="anonymous">
399  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/hits.js?v=174306018405119069061784102099" crossorigin="anonymous">
400  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/utils.js?v=156139978954507691051784102108" crossorigin="anonymous">
401  <link rel="modulepreload" href="//www.beauteprivee.fr/cdn/shop/t/582/assets/_commonjsHelpers.js?v=140665410930842208561784102093" crossorigin="anonymous">
402
403<!-- Start Content for header -->
404            
404<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
404<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/59307819143/digital_wallets/dialog">
405<meta id="in-context-paypal-metadata" data-shop-id="59307819143" data-venmo-supported="false" data-environment="production" data-locale="fr_FR" data-paypal-v4="true" data-currency="EUR">
406<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
406<script async="async" src="/checkouts/internal/preloads.js?locale=fr-FR&default_configuration_id=846233735"></script>
vendor: 1 bytes, line 406
406
407<script id="shopify-features" type="application/json">{"accessToken":"4deb9cb3873427ba7f9f0307370bdcea","betas":["rich-media-storefront-analytics"],"domain":"www.beauteprivee.fr","predictiveSearch":true,"shopId":59307819143,"locale":"fr"}</script>
vendor: 1 bytes, line 407
407
408<script>var Shopify = Shopify || {};
409Shopify.shop = "beauteprivee-prod.myshopify.com";
410Shopify.locale = "fr";
411Shopify.currency = {"active":"EUR","rate":"1.0"};
412Shopify.country = "FR";
413Shopify.theme = {"name":"master-250926","id":198254788943,"schema_name":"W3lead","schema_version":"15.2.0","theme_store_id":null,"role":"main"};
414Shopify.theme.handle = "null";
415Shopify.theme.style = {"id":null,"handle":null};
416Shopify.cdnHost = "www.beauteprivee.fr/cdn";
417Shopify.routes = Shopify.routes || {};
418Shopify.routes.root = "/";
419Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
420Shopify.SignInWithShop = Shopify.SignInWithShop || {};
421Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
422Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 422
422
423<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 423
423
424<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 424
424
425<script>
426  window.Shopify = window.Shopify || {};
427  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
428  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
429  window.Shopify.SignInWithShop.eligible = true;
430</script>
vendor: 1 bytes, line 430
430
431<script id="shop-js-analytics" type="application/json">{"pageType":"customers/login"}</script>
vendor: 1 bytes, line 431
431
432<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts.fr.esm.js"></script>
vendor: 1 bytes, line 432
432
433<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts-sign-up.fr.esm.js"></script>
vendor: 1 bytes, line 433
433
434<script type="module">
435  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts.fr.esm.js");
436await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-customer-accounts-sign-up.fr.esm.js");
437
438  window.Shopify.SignInWithShop?.initCustomerAccounts?.(true, {"fedCMEnabled":true,"windoidEnabled":true});
439window.Shopify.SignInWithShop?.initCustomerAccountsSignUp?.({"fedCMEnabled":true,"windoidEnabled":true});
440
441</script>
vendor: 1 bytes, line 441
441
442<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.fr.esm.js"></script>
vendor: 1 bytes, line 442
442
443<script type="module">
444  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.fr.esm.js");
445
446  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
447
448</script>
vendor: 1 bytes, line 448
448
449<script>
450  window.Shopify = window.Shopify || {};
451  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
452  window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.fr.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.fr.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.fr.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.fr.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.fr.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.fr.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.fr.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.fr.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.fr.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.fr.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.fr.esm.js"],"listener":["modules/v2/loader.listener.fr.esm.js"],"pay-button":["modules/v2/loader.pay-button.fr.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.fr.esm.js"],"shop-button":["modules/v2/loader.shop-button.fr.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.fr.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.fr.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.fr.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.fr.esm.js"],"shop-login":["modules/v2/loader.shop-login.fr.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.fr.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.fr.esm.js"]};
453</script>
vendor: 1 bytes, line 453
453
454<script>(function() {
455  var isLoaded = false;
456  function asyncLoad() {
457    if (isLoaded) return;
458    isLoaded = true;
459    var urls = ["https:\/\/admin.revenuehunt.com\/embed.js?shop=beauteprivee-prod.myshopify.com","\/\/cdn.shopify.com\/proxy\/228501812a61959c4593beba290ed8548dcc0de5c38c9998f6d8606e3ae2d0e5\/web.baback.co\/internal\/v2\/shopify-embed?shop=beauteprivee-prod.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA","https:\/\/assets.loyoly.io\/public\/scripts\/referral.js?shop=beauteprivee-prod.myshopify.com"];
460    for (var i = 0; i < urls.length; i++) {
461      var s = document.createElement('script');
462      s.type = 'text/javascript';
463      s.async = true;
464      s.src = urls[i];
465      var x = document.getElementsByTagName('script')[0];
466      x.parentNode.insertBefore(s, x);
467    }
468  };
469  if(window.attachEvent) {
470    window.attachEvent('onload', asyncLoad);
471  } else {
472    window.addEventListener('load', asyncLoad, false);
473  }
474})();</script>
vendor: 1 bytes, line 474
474
475<script id="__st">var __st={"a":59307819143,"offset":7200,"reqid":"ccf597b1-16c2-4a0a-b155-65e290d92c00-1790390030","pageurl":"www.beauteprivee.fr\/account\/login?return_url=%2Faccount%3Fm%3Dwishlist","u":"b71ab2e5d1a0"};</script>
vendor: 1 bytes, line 475
475
476<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 476
476
477<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protégé par hCaptcha',privacyText:'Confidentialité',termsText:'Conditions'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!1,!0)}();</script>
vendor: 1 bytes, line 477
477
478<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//www.beauteprivee.fr/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 478
478
479<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//www.beauteprivee.fr/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
479<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 479
479
480<script>
481  window.Shopify = window.Shopify || {};
482  window.Shopify.MCP = window.Shopify.MCP || {};
483  window.Shopify.MCP.enabled = true;
484  window.Shopify.MCP.shop = "beauteprivee-prod.myshopify.com";
485  window.Shopify.MCP.mcpEndpoint = "https:\/\/www.beauteprivee.fr\/api\/mcp";
486  window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n  - What is your return policy?\n  - What is your shipping policy?\n  - What is your phone number?\n  - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}];
487</script>
vendor: 1 bytes, line 487
487
488<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/www.beauteprivee.fr\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
489</script>
vendor: 1 bytes, line 489
489
490<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://www.beauteprivee.fr/cdn/shopifycloud/portable-wallets/latest/portable-wallets.fr.js",t.type="module",document.head.appendChild(t)}};
491</script>
vendor: 1 bytes, line 491
491
492<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
493  function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent);
494</script>
vendor: 1 bytes, line 494
494
495<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}}));
496</script>
496
497<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://www.beauteprivee.fr/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous">
498<style id="shopify-accelerated-checkout-cart">
499        #shopify-buyer-consent {
500  margin-top: 1em;
501  display: inline-block;
502  width: 100%;
503}
504
505#shopify-buyer-consent.hidden {
506  display: none;
507}
508
509#shopify-subscription-policy-button {
510  background: none;
511  border: none;
512  padding: 0;
513  text-decoration: underline;
514  font-size: inherit;
515  cursor: pointer;
516}
517
518#shopify-subscription-policy-button::before {
519  box-shadow: none;
520}
521
522      </style>
523
524<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
524
525            <!-- End Content for header -->
526
527            
527<script src="//www.beauteprivee.fr/cdn/shop/t/582/assets/pubsub.js?v=126169999182897356041783959851" type="text/javascript"></script>
527
528
529            
530
531<!-- Ajout prise en compte du metafield first order -->
532
533
534<script>
535
536/* ===============================
537   DEBUG dataLayer (TEMPORAIRE)
538   Activation via ?dl_debug=1
539   =============================== */
540(function () {
541  window.dataLayer = window.dataLayer || [];
542
543  const originalPush = window.dataLayer.push;
544
545  window.dataLayer.push = function () {
546    const payload = arguments[0];
547
548    if (payload && payload.event === "search_ta") {
549      payload.search_has_results = Number(payload.results_count || 0) > 0;
550      payload.search_suggestion_selected = payload.search_suggestion_selected ?? false;
551      payload.search_brand_selected = payload.search_brand_selected || "";
552      payload.search_category_selected = payload.search_category_selected || "";
553    }
554
555     // Events générés par Addingwell
556if (
557  payload &&
558  ["add_to_cart_ta", "select_item_ta"].includes(payload.event)
559) {
560  const pageContentGroup =
561    window.bpDataLayerContext?.content_group ||
562    dataLayerGlobalScopes?.environment?.env_template ||
563    "";
564
565  payload.content_group = window.__ta_cart_drawer_context
566    ? "panier"
567    : pageContentGroup;
568
569  payload.ecommerce = payload.ecommerce || {};
570  payload.ecommerce.is_reco = window.__ta_reco_context === true;
571}
572console.log("drawer_context", window.__ta_cart_drawer_context, payload?.event);
573console.log("🟢 dataLayer event :", payload);
574
575return originalPush.apply(window.dataLayer, arguments);
576};
577
578console.log("✅ dataLayer DEBUG activé");
579})();
580
581
582    const GTM_EVENTS = {
583        pageView: "page_view",
584        singIn: "sign_in",
585        signUp: "sign_up",
586        clickHP: "click_hp",
587        selectContent: "select_content",
588        clickSale: "click_sale",
589        clickUniverse: "click_universe",
590        clickMinisite: "click_minisite",
591        clickProduct: "click_product",
592        clickFilter: "click_filter",
593        search: "search",
594        addToWishlist: "add_to_wishlist",
595        removeFromCart: "remove_from_cart",
596        // Add product
597        addProductHomepage: "add_product_homepage",
598        addProductShopHomepage: "add_product_shop_homepage",
599        addProductPlpBrand: "add_product_plp_brand",
600        addProductPlpCategory: "add_product_plp_category",
601        addProductPlpPrivateSales: "add_product_plp_privates_sales",
602        addProductPlpPrivateSalesSpa: "add_product_plp_privates_sales_spa",
603        addProductPlpSpa: "add_product_plp_etablissement_spa",
604        addProductSearchResultsPage: "add_product_search_results_page",
605        addProductProductPage: "add_product_product_page",
606        addProductRecoProductPage: "add_product_reco_product_page",
607        addProductRecoFunnelCart: "add_product_reco_funnel_cart",
608        addProductFunnelCart: "add_product_funnel_cart",
609        // Click product
610        clickProductHomepage: "click_product_homepage",
611        clickProductShopHomepage: "click_product_shop_homepage",
612        clickProductPlpBrand: "click_product_plp_brand",
613        clickProductPlpCategory: "click_product_plp_category",
614        clickProductPlpPrivateSales: "click_product_plp_privates_sales",
615        clickProductSearchResultsPage: "click_product_search_results_page",
616        clickProductProductPage: "click_product_product_page",
617        clickProductRecoProductPage: "click_product_reco_product_page",
618        clickProductRecoFunnelCart: "click_product_reco_funnel_cart",
619        clickProductFunnelCart: "click_product_funnel_cart",
620    }
621
622    window.GTM_EVENTS = window.GTM_EVENTS || GTM_EVENTS;
623    
624
625    const template = ""
626    
627    const language = Shopify.locale.toUpperCase();
628    const country = "FR"; 
629    const company = "BP";
630    const currency = "EUR";
631    const deviceType = getDeviceType();
632
633    const screenName = window.location.pathname.split('?')[0];
634
635    const userId = "";
636    const userPurchaseType = "retain buyer"; // @todo: get user purchase type
637    const userFirstPurchase = "N"
638    const userBuyerType = ""
639    const userBirthDate = "";
640    const userClubStatus = "";
641    const userLastOrderCreatedAt = "";
642    const userCreatedAt  = "";
643    const userFirstOrderDate = "";
644    const userLastLoginApp = ""; // @todo
645    const userLastLoginMobile = ""; // @todo
646    const userLastLoginWeb = ""; // @todo
647    const userTotalAmountSpent = 0;
648    const userOrderCount = 0;
649    const userCustomerID = "";
650    const userRFM = "" // @todo;
651    const userGender = "";
652    const userSponsorship = ""; // @todo
653    const userBA = ""; // @todo
654    const userEmployee = "N";
655    const userEmailMd5 = "";
656    const userEmailSha256 = "";
657    const userFirstName = "";
658    const userLastname = "";
659    const userTotalAmountSpentLast12Months = 0;
660    const userOrderCountLast12Months = 0;
661    const userPhoneNumber = "";
662    const userZipCode = "";
663    const userDaysSinceLastOrder = 0;
664    const basket_revenue = 0.0;
665
666    const collectionId = "";
667    const collectionTitle = "";
668    const collectionHandle = "";
669    const universeId = "";
670
671    const pageUniverseName = "";
672    const pageUniverseId = "";
673
674    // Ajout pour singup up /login   
675
676    const customerCreatedAt = null;
677    const nowTs = Date.now();
678    const accountAgeSeconds = customerCreatedAt ? Math.floor((nowTs - customerCreatedAt) / 1000) : null;
679    const IS_SIGN_UP = accountAgeSeconds !== null && accountAgeSeconds < 60;
680    const IS_LOGIN = accountAgeSeconds !== null && accountAgeSeconds >= 60;
681
682
683
684
685    const saleId = "";
686    const saleName = "";
687    const saleDateStart = "";
688    const saleDateEnd = "";
689
690
691    const collectionType = "";
692
693    const searchTerm = getSearchTerm();
694    const searchResultsCount =document.title.match(/Recherche\s*:\s*(\d+)/)?.[1] || 0;
695    const searchHasResults = Number(searchResultsCount) > 0;
696
697    const shareMethod = "" // @todo
698    const shareContentType = "" // @todo
699
700
701    const cartTotal = 0.0;
702    const cartItems = [
703        
704    ]
705
706    window.cartItems = cartItems;
707
708    window.dataLayer = window.dataLayer || [];
709    
710    // ====================================
711    // Contexte Drawer Cart
712    // ====================================
713    window.__ta_cart_drawer_context = false;
714    window.__ta_reco_context = false;
715
716    document.addEventListener("pointerdown", function (event) {
717    window.__ta_cart_drawer_context = !!event.target.closest("w3-drawer-cart");
718    window.__ta_reco_context = !!event.target.closest("w3-potions-experience");
719    }, { capture: true });
720
721    document.addEventListener("click", function (event) {
722    window.__ta_cart_drawer_context = !!event.target.closest("w3-drawer-cart");
723    window.__ta_reco_context = !!event.target.closest("w3-potions-experience");
724    }, { capture: true });
725
726    const dataLayerGlobalScopes = {
727        environment : {
728            "env_template": template,
729            "env_work": environnement,
730            "env_language": Shopify.locale.toUpperCase(),
731            "env_country": country,
732            "env_compagny": company,
733            "env_device": deviceType
734        },
735        user: {
736            "user_id": userId,
737            "user_purchase_type": userPurchaseType,
738            "user_first_purchase": userFirstPurchase,
739            "user_acheteur": userBuyerType,
740            "user_birth_date": userBirthDate,
741            "user_club_status": userClubStatus,
742            "user_derniere_commande": userLastOrderCreatedAt,
743            "user_date_inscription": userCreatedAt,
744            "user_date_premiere_commande": userFirstOrderDate,
745            "user_derniere_connexion_app": userLastLoginApp,
746            "user_derniere_connexion_mobile": userLastLoginMobile,
747            "user_derniere_connexion_web": userLastLoginWeb,
748            "user_montant_commandes": userTotalAmountSpent,
749            "user_nb_commandes": userOrderCount,
750            "user_num": userCustomerID,
751            "user_rfm": userRFM,
752            "user_sexe": userGender,
753            "user_sponsorship": userSponsorship,
754            "user_employee": userEmployee,
755            "user_ba": userBA,
756            "user_email": userEmailMd5,
757            "user_email2": userEmailSha256,
758            "user_first_name": userFirstName,
759            "user_last_name": userLastname,
760            "user_montant_commandes_12m": userTotalAmountSpentLast12Months,
761            "user_nb_commandes_12m": userOrderCountLast12Months,
762            "user_phone_number": userPhoneNumber,
763            "user_postal_code": userZipCode,
764            "user_recence_commande":  parseInt(userDaysSinceLastOrder),
765            "basket_revenue": basket_revenue,
766        },
767        page: {
768            "page_category": collectionId,
769            "page_handle": collectionHandle,
770            "page_universe_name": pageUniverseName,
771            "page_universe_id": pageUniverseId,
772            "page_sale_id": saleId,
773            "page_sale_name": saleName,
774            "page_sale_start": saleDateStart,
775            "page_sale_end": saleDateEnd,
776            "page_collection_id": collectionId,
777            "page_collection_name": collectionHandle,
778            "page_collection_type": collectionType,
779        },
780        search: {
781            "search_term": searchTerm,
782             "results_count": Number(searchResultsCount),
783                "search_has_results": searchHasResults,
784                "search_suggestion_selected": false,
785                "search_brand_selected": "",
786                "search_category_selected": ""
787        }
788    }
789
790    window.dataLayerGlobalScopes = dataLayerGlobalScopes;
791
792    let itemArrayForPageView = [];
793
794    for(const event of Object.values(GTM_EVENTS)) {
795        subscribe(event, (data) => {
796            sendGTMEvent(event, data);
797        })
798    }
799
800    document.addEventListener("DOMContentLoaded", function() {
801        // window._axcb is the cmp callback array used by the CMP (Axeptio)
802        // It is used to ensure that the CMP is loaded before executing the GTM events
803        window._axcb = window._axcb || [];
804        window._axcb.push((sdk) => {
805
806            const main                 = document.querySelector("main");
807            const productLinkSelectors = ['a.swiper-link', 'a.product-link', 'w3-drawer-cart-item > a'];
808            const hpBlockSelectors     = ['.sale-card-link', '.home-hero-item', '.banner-link'];
809            const filterSelectors      = ['details .form-checkbox', '.ais-RefinementList-item'];
810
811
812                [...document.querySelectorAll('.navigation__item >
812 a')].forEach(el => {
813                        el.addEventListener('click', (event) => {
814                        const target = event.currentTarget;
815
816                    publish(GTM_EVENTS.selectContent, {
817                    environment: environnement,
818
819                    Location: "categories_shop",
820                    index: [...document.querySelectorAll('.navigation__item > a')].indexOf(target),
821
822                    
823
824                    sale_id: target.dataset.objectId || "",
825                    sale_name: target.dataset.objectHandle || ""
826                        });
827                         });
828                    });
829
830            // ================================
831                    // Algolia  – Search suggested content - 03/06
832                    // ================================
833
834                   document.addEventListener("click", function (event) {
835
836                    const searchContainer = event.target.closest(
837                        "#hits-products-drawer, #hits-categories, #hits-brands"
838                    );
839
840                    if (!searchContainer) return;
841
842                    const suggestedContent = event.target.closest("a");
843
844                    if (!suggestedContent) return;
845
846                    const href = suggestedContent.getAttribute("href") || "";
847                    const label = suggestedContent.textContent.trim();
848
849                    console.log("✅ suggestion détectée", {
850                        container: searchContainer.id,
851                        href,
852                        label
853                    });
854
855                    let searchBrandSelected = "";
856                    let searchCategorySelected = "";
857                    let suggestionType = "";
858
859                    if (searchContainer.id === "hits-products-drawer") {
860                        suggestionType = "product";
861                    }
862
863                    if (searchContainer.id === "hits-brands") {
864                        suggestionType = "brand";
865                        searchBrandSelected = label.trim();
866                    }
867
868                    if (searchContainer.id === "hits-categories") {
869                        suggestionType = "category";
870
871                        const collectionHandle = href
872                        .replace(/^.*\/collections\//, "")
873                        .split("?")[0]
874                        .toLowerCase();
875
876                        const isCategory =
877                        label.startsWith("CAT|") ||
878                        !collectionHandle.startsWith("brd-");
879
880                        if (isCategory) {
881                        searchCategorySelected = label.replace(/^CAT\|/i, "").trim();
882                        } else {
883                        searchBrandSelected = label.trim();
884                        suggestionType = "brand";
885                        }
886
887                        console.log("Collection handle:", collectionHandle);
888                        console.log("isCategory:", isCategory);
889                    }
890
891                    window.dataLayer.push({
892                        event: "search_ta",
893                        search_term: getSearchTerm() || "",
894                        results_count: 1,
895                        search_has_results: true,
896                        search_suggestion_selected: true,
897                        search_suggestion_type: suggestionType,
898                        search_suggestion_name: label,
899                        search_suggestion_url: href,
900                        search_brand_selected: searchBrandSelected,
901                        search_category_selected: searchCategorySelected,
902                        ecommerce: {
903                        currency: currency,
904                        items: []
905                        }
906                    });
907
908                    }, { capture: true });
909
910
911                                         // ================================
912                    // Auth Hiko social login/signup
913                    // ================================
914                    function detectSocialAuth(event) {
915                    const socialButton = event.target.closest(
916                        ".h_google_button, .h_facebook_button, .h_apple_button, [data='google'], [data='facebook'], [data='apple']"
917                    );
918
919                    if (!socialButton) return;
920
921                    const provider =
922                        socialButton.getAttribute("data") ||
923                        (socialButton.classList.contains("h_google_button") ? "google" : "") ||
924                        (socialButton.classList.contains("h_facebook_button") ? "facebook" : "") ||
925                        (socialButton.classList.contains("h_apple_button") ? "apple" : "");
926
927                    if (!provider) return;
928
929                    sessionStorage.setItem("ta_auth_intent", "social");
930                    sessionStorage.setItem("ta_auth_provider", provider);
931
932                    console.log("SOCIAL AUTH SAVED", {
933                        intent: sessionStorage.getItem("ta_auth_intent"),
934                        provider: sessionStorage.getItem("ta_auth_provider")
935                    });
936                    }
937
938                    ["pointerdown", "mousedown", "click", "touchstart"].forEach((eventName) => {
939                    document.addEventListener(eventName, detectSocialAuth, { capture: true });
940                    });
941
942            main.addEventListener('click', (event) => {
943                const targetProductLink = productLinkSelectors
944                    .map(selector => event.target.closest(selector))
945                    .find(el => el && main.contains(el));
946
947
948                    // ================================
949                    // DIAGNOSTIC – CLIC CTA - 03/02
950                    // ================================
951                    const diagnosticLink = event.target.closest('a[href^="#quiz-"]');
952
953                    if (diagnosticLink && main.contains(diagnosticLink)) {
954
955                    let diagnosticType = "";
956
957                    if (diagnosticLink.getAttribute("href") === "#quiz-koHP0DQ") {
958                     diagnosticType = "peau";
959                         }
960
961                     if (diagnosticLink.getAttribute("href") === "#quiz-rkH93Oo") {
962                        diagnosticType = "cheveux";
963                         }
964
965                    if (diagnosticType) {
966                          window.dataLayer = window.dataLayer || [];
967                         window.dataLayer.push({
968                        event: "diagnostic_clic_ta",
969                        diagnostic_type: diagnosticType
970                            });
971                         }
972                    }
973
974                    
975
976
977                if(targetProductLink) {
978                    const jsonElement =
979                        targetProductLink.closest('script[data-name="item"]') ||
980                        targetProductLink.closest('w3-product-card')?.querySelector('script[data-name="item"]');
981
982                    if (!jsonElement) return;
983
984                    const json = JSON.parse(jsonElement.innerHTML);
985                    const isReco = !!targetProductLink.closest("w3-potions-experience");
986
987                    if (isReco){ 
988                    publish(`click_product_${template}`, {
989                        items: [{
990                            item_list_id: collectionId,
991                            item_list_name: "",
992                            item_id: json.item_id,
993                            item_name: json.item_name,
994                            item_category: json.item_category,
995                            item_category2: json.item_category2,
996                            item_category3: json.item_category3,
997                            item_variant: json.item_variant,
998                            price: json.price,
999                            currency,
1000                            quantity: json.quantity,
1001                            item_brand: json.item_brand,
1002                            index: json?.index
1003                        }]
1004                    });
1005                    window.dataLayer.push({
1006                    event: "select_item_ta",
1007                    ecommerce: {
1008                        is_reco : true,
1009                        items: [{
1010                            index: json?.index || 0,
1011                            item_id: json.item_id,
1012                            item_name: json.item_name,
1013                            item_brand: json.item_brand,
1014                            item_category: json.item_category,
1015                            item_category2: json.item_category2,
1016                            item_category3: json.item_category3,
1017                            item_variant: json.item_variant,
1018                            item_list_id: collectionId,
1019                            item_list_name: "",
1020                            price: Number(json.price),
1021                            quantity: json.quantity
1022                        }]
1023                    }
1024                });
1025                }
1026                }
1027
1028                const targetHpBlocks = hpBlockSelectors
1029                    .map(selector => event.target.closest(selector))
1030                    .find(el => el && main.contains(el));
1031
1032                if (targetHpBlocks) {
1033                     console.log("👉 ELEMENT:", targetHpBlocks);
1034                    console.log("👉 tagName:", targetHpBlocks.tagName);
1035                    console.log("👉 href direct:", targetHpBlocks.href);
1036                    console.log("👉 getAttribute href:", targetHpBlocks.getAttribute('href'));
1037                    const selector = hpBlockSelectors.find(sel => targetHpBlocks.matches(sel));
1038                    const index = [...document.querySelectorAll(selector)].indexOf(targetHpBlocks);
1039                    const classes = targetHpBlocks.classList;
1040
1041                    const eventAction = classes.contains('banner-link') ? "retail media" :
1042                        classes.contains('home-hero-item') ? "hero banner" :
1043                            "vp";
1044
1045                    const isRetailMedia = eventAction === "retail media";
1046                    
1047                     const saleId = targetHpBlocks?.dataset?.saleId || "";
1048                    const saleName = targetHpBlocks?.dataset?.saleName || "";
1049                    const dataSaleType = targetHpBlocks?.dataset?.saleType || "";
1050
1051                   const banner = targetHpBlocks;
1052
1053                    const link = banner?.href || "";
1054                    const isLandingPage = link.includes("/pages");
1055
1056
1057                    const getSaleNameFromUrl = (link) => {
1058                    try {
1059                        const url = new URL(link, window.location.origin);
1060                        const hostname = url.hostname.replace(/^www\./, "");
1061
1062                        const isBeautePriveeDomain =
1063                        hostname === "www.beauteprivee.fr" ||
1064                        hostname.endsWith(".https://www.beauteprivee.fr");
1065
1066                    if (!isBeautePriveeDomain) {
1067                            return hostname;
1068                            }
1069
1070                     const pathParts = url.pathname
1071                            .split("/")
1072                             .filter(Boolean);
1073
1074                             return pathParts[pathParts.length - 1] || "";
1075                            } catch {
1076                             return "";
1077                             }
1078                            };
1079
1080                    const urlSaleName = getSaleNameFromUrl(link);
1081
1082                    const hasAttachedBrand =
1083                        targetHpBlocks?.dataset?.hasAttachedBrand === "true";
1084
1085                
1086
1087                    const saleType =
1088                        dataSaleType ||
1089                        (isRetailMedia
1090                            ? "media"
1091                            : isLandingPage
1092                            ? "landing_page"
1093                            : hasAttachedBrand
1094                            ? "Marque"
1095                            : "Transverse");
1096
1097                        const finalSaleId =
1098                        saleId && saleId.trim() !== ""
1099                            ? saleId
1100                            : isRetailMedia
1101                            ? link
1102                            : "";
1103
1104                        const finalSaleName =
1105                        saleName && saleName.trim() !== ""
1106                            ? saleName
1107                            : isRetailMedia
1108                            ? urlSaleName
1109                            : "";
1110                  
1111                    
1112
1113                publish(GTM_EVENTS.selectContent, {
1114                    environment: environnement,
1115
1116                  Location: classes.contains('home-hero-item')
1117                                        ? "hero"
1118                    : classes.contains('sale-card-link')
1119                    ? "bandeau_marque"
1120                    : classes.contains('banner-link')
1121                    ? "bandeau_media"
1122                    : "",
1123
1124                    
1125                    index,
1126
1127
1128                sale_type: saleType,
1129
1130                sale_id: finalSaleId,
1131                sale_name: finalSaleName
1132                    });
1133                    
1134                    
1135                    
1136
1137                }
1138
1139                const wishlistButton = event.target.closest('.wishlist-button');
1140                if (wishlistButton && main.contains(wishlistButton)) {
1141                    const jsonElement =
1142                        wishlistButton.closest('script[data-name="item"]') ||
1143                        wishlistButton.closest('w3-product-card')?.querySelector('script[data-name="item"]');
1144
1145                    if (!jsonElement || wishlistButton.classList.contains('added')) return;
1146
1147                    const json = JSON.parse(jsonElement.innerHTML);
1148                    /* ==========================
1149                     EVENT GA4 (existant)
1150                    ========================== */
1151                    publish(GTM_EVENTS.addToWishlist, {
1152                        item_array: [
1153                            {
1154                                item_id: json.item_id,
1155                                item_name: json.item_name,
1156                                item_category: json.item_category,
1157                                item_category2: json.item_category2,
1158                                item_category3: json.item_category3,
1159                                item_variant: json.item_variant,
1160                                price: json.price,
1161                                currency: currency,
1162                                quantity: json.quantity,
1163                                item_brand: json.item_brand,
1164                                index: json?.index
1165                            }
1166                        ]
1167                    });
1168                    
1169                    /* ==========================
1170                     EVENT (TA)
1171                     ========================== */
1172                        const isRecoContainer = !!wishlistButton.closest("w3-potions-experience");
1173
1174                      window.dataLayer = window.dataLayer || [];
1175                        window.dataLayer.push({
1176                     event: "add_to_wishlist_ta",
1177                    ecommerce: {
1178                    is_reco: isRecoContainer,
1179
1180                      items: [
1181                        {
1182                         item_name: json.item_name,
1183                        item_id: json.item_id,
1184                        sku: json.item_variant || "",
1185                        item_brand: json.item_brand || "",
1186                        item_category: json.item_category || "",
1187                         price: Number(json.price),
1188                        item_variant: json.item_variant || "",
1189                         item_variant_id: json.item_variant_id || ""
1190                        }
1191                        ]
1192                        }
1193                    });
1194                }
1195
1196                filterSelectors.some(selector => {
1197                    const target = event.target.closest(selector);
1198                    if (target && main.contains(target)) {
1199                        publish(GTM_EVENTS.clickFilter, {
1200                            event_action: target.closest('details')?.querySelector('.headline')?.textContent.split('(')[0].trim() || "",
1201                            event_category: target?.parentElement?.querySelector('label')?.textContent.trim() || target?.parentElement?.querySelector('label')?.textContent.trim() || "",
1202                        });
1203                        return true;
1204                    }
1205                });
1206            }, { capture: true });/* View product */
1207
1208
1209            (function () {
1210            const customerId = userCustomerID || null;
1211            if (!customerId) return;
1212
1213            const sessionKey = "ta_auth_sent_" + customerId;
1214
1215            if (sessionStorage.getItem(sessionKey) === "true") {
1216                return;
1217            }
1218
1219             const authMethod =
1220             sessionStorage.getItem("ta_auth_intent") === "social"
1221                ? (sessionStorage.getItem("ta_auth_provider") || "email")
1222                 : "email";
1223
1224            const customerTagsCount =
1225                0;
1226
1227            const authEventName = customerTagsCount === 0
1228                ? "sign_up_ta"
1229                : "login_ta";
1230
1231            window.dataLayer = window.dataLayer || [];
1232            window.dataLayer.push({
1233                event: authEventName,
1234                 method: authMethod,
1235                user_data: {
1236                user_id: customerId,
1237                email_address: ""
1238                }
1239            });
1240
1241            sessionStorage.setItem(sessionKey, "true");
1242            })();
1243
1244        // ======================================
1245        // DIAGNOSTIC – FIN (GENERATE LEAD) - 03/02
1246        // ======================================
1247        const isDiagnosticResultPage =
1248        window.location.pathname === "/pages/resultat-diagnostic";
1249
1250        if (isDiagnosticResultPage) {
1251
1252        const params = new URLSearchParams(window.location.search);
1253        const quizId = params.get("quizid");
1254
1255        let diagnosticType = "";
1256
1257        if (quizId === "koHP0DQ") {
1258            diagnosticType = "peau";
1259            }
1260
1261        if (quizId === "rkH93Oo") {
1262            diagnosticType = "cheveux";
1263            }
1264
1265        if (
1266            diagnosticType &&
1267            !sessionStorage.getItem("diagnostic_completed_" + quizId)
1268        ) {
1269
1270        window.dataLayer = window.dataLayer || [];
1271        window.dataLayer.push({
1272        event: "generate_lead_ta",
1273        diagnostic_type: diagnosticType,
1274        user_data: {
1275        email_address: ""
1276            }
1277            });
1278
1279        sessionStorage.setItem("diagnostic_completed_" + quizId, "true");
1280        }
1281        }
1282           
1283            const pageViewPayload = flattenObject(dataLayerGlobalScopes);
1284
1285
1286              // ================================
1287                    // Search – sans result - 03/06
1288                    // ================================
1289           if (
1290                pageViewPayload.env_template === "search_results_page" &&
1291                Number(pageViewPayload.results_count) === 0
1292                ) {
1293                window.dataLayer.push({
1294                    event: "search_ta",
1295                    search_term: pageViewPayload.search_term,
1296                    results_count: 0,
1297                    search_has_results: false,
1298                    search_suggestion_selected: false,
1299                    search_brand_selected: "",
1300                    search_category_selected: "",
1301                    ecommerce: {
1302                    currency: currency,
1303                    items: []
1304                    }
1305                });
1306                }
1307                
1308
1309            // Page View
1310            if (pageViewPayload.env_template === "funnel_cart") {
1311
1312                         publish("view_cart", {
1313                            ...pageViewPayload,
1314                        ecommerce: {
1315                            value: cartTotal,
1316                            currency: currency,
1317                            items: cartItems
1318                            }
1319                        });
1320
1321                    }
1322                    
1323                    // ================================
1324                    // Scroll tracking TA
1325                    // ================================
1326                    (function () {
1327
1328                    const allowedContentGroups = [
1329                        "homepage",
1330                        "plp_brand",
1331                        "plp_category",
1332                        "plp_transverse_sale",
1333                        "search_results_page"
1334                    ];
1335
1336                    const contentGroup =
1337                        window.bpDataLayerContext?.content_group ||
1338                        "";
1339
1340                    if (!allowedContentGroups.includes(contentGroup)) {
1341                        return;
1342                    }
1343
1344                    const firedSteps = new Set();
1345
1346                    function pushScrollEvent(step) {
1347
1348                        if (firedSteps.has(step)) return;
1349
1350                        firedSteps.add(step);
1351
1352                        window.dataLayer.push({
1353                        event: "scroll_ta",
1354                        content_group: contentGroup,
1355                        scroll_percent: `${step}%`
1356                        });
1357                    }
1358
1359                    function trackScroll() {
1360
1361                        const scrollTop = window.scrollY;
1362                        const viewportHeight = window.innerHeight;
1363                        const documentHeight = document.documentElement.scrollHeight;
1364
1365                        const maxScrollable = documentHeight - viewportHeight;
1366
1367                        if (maxScrollable <= 0) return;
1368
1369                        const percent = Math.round(
1370                        (scrollTop / maxScrollable) * 100
1371                        );
1372
1373                        [10,20,30,40,50,60,70,80,90,100].forEach((step) => {
1374                        if (percent >= step) {
1375                            pushScrollEvent(step);
1376                        }
1377                        });
1378                    }
1379
1380                    pushScrollEvent(0);
1381
1382                    window.addEventListener("scroll", trackScroll, {
1383                        passive: true
1384                    });
1385
1386                    })();
1387        })
1388    });
1389
1390    // View search
1391    // @see triggered in agolia.js
1392
1393    // Add to cart from product-form
1394    // @see product-form.js for this event
1395
1396    // Add and remove from cart ONLY
1397    document.addEventListener('drawer-cart:update', (e) => {
1398        if(!e.detail) {
1399            return;
1400        }
1401
1402        const { action, item, source } = e.detail;
1403
1404        if(source !== "cart") {
1405            return;
1406        }
1407
1408        console.log(`GTM: ${action} product from cart`, item, action === 'add' ? GTM_EVENTS.addProductFunnelCart : GTM_EVENTS.removeFromCart);
1409
1410        publish(action === 'add' ? GTM_EVENTS.addProductFunnelCart : GTM_EVENTS.removeFromCart, {
1411            screen_name: screenName,
1412            screen_class: "Cart",
1413            page_template: "funnel_cart",
1414            currency: currency,
1415            value: item.final_price / 100,
1416            item_array: [
1417                {
1418                    item_id: item.variant_id,
1419                    item_name: item.title,
1420                    item_variant: item.variant_title,
1421                    item_category: item.product_type,
1422                    price:  item.final_price / 100,
1423                    quantity: item.quantity,
1424                    item_brand: item.vendor,
1425                    index: 0
1426                }
1427            ]
1428        });
1429    });
1430
1431    /**
1432     * Get the type of device
1433     * @return {string}
1434     */
1435    function getDeviceType() {
1436        const e = navigator.userAgent;
1437        if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(e)) {
1438            return "t";
1439        }
1440        if (/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(e)) {
1441            return "m";
1442        }
1443
1444        return "d";
1445    }
1446
1447    /**
1448     * Log event to console
1449     * @param eventName
1450     * @param additionalData
1451     */
1452    function logGTM(eventName, additionalData = {}) {
1453
1454        return;
1455
1456        try {
1457            console.log(
1458                '%c[Event Logger] [Internal debug only]', 'color: green; font-weight: bold;',
1459                {
1460                    event: eventName,
1461                    timestamp: new Date().toISOString(),
1462                    hasDataLayer: !!window.dataLayer,
1463                    datalayer: additionalData
1464                }
1465            );
1466        } catch (error) {
1467            console.error('%c[Event Logger Error]', 'color: red;', error);
1468        }
1469    }
1470
1471    function getSearchTerm() {
1472        if (!window.location.search) return null;
1473
1474        const searchParams = new URLSearchParams(window.location.search);
1475
1476        return searchParams.get('q') || searchParams.get('bp_search_index_products[query]');
1477    }
1478
1479     
1480    function sendGTMEvent(event, eventData) {
1481        logGTM(event, eventData);
1482
1483        (window.dataLayer ||= []).push({ event: event, ...eventData });
1484    }
1485
1486    
1487    function flattenObject(obj) {
1488        const result = {};
1489        for (const [key, value] of Object.entries(obj)) {
1490            if (value && typeof value === 'object' && !Array.isArray(value)) {
1491                Object.assign(result, flattenObject(value));
1492            } else {
1493                result[key] = value;
1494            }
1495        }
1496        return result;
1497    }
1498
1499    window.logGTM = logGTM;
1500    window.flattenObject = flattenObject;
1501</script>
1501
1502
1503
1504            <style data-shopify>
1505                /* FONTS IMPORTS */
1506                @font-face {
1507                    font-family: 'Karla';
1508                    src: url('//www.beauteprivee.fr/cdn/shop/t/582/assets/Karla-Variable.ttf?v=52693242866265903911783959853') format('truetype');
1509                    font-weight: 100 900;
1510                    font-display: swap;
1511                }
1512
1513                @font-face {
1514                    font-family: 'Ivy Mode';
1515                    src: url('//www.beauteprivee.fr/cdn/shop/t/582/assets/IvyMode-Regular.woff2?v=14075393380182468041783959850') format('woff2');
1516                    font-weight: 400;
1517                    font-display: swap;
1518                }
1519
1520                @font-face {
1521                    font-family: 'Ivy Mode';
1522                    src: url('//www.beauteprivee.fr/cdn/shop/t/582/assets/IvyMode-Italic.woff2?v=129597851484916023451783959850') format('woff2');
1523                    font-weight: 400;
1524                    font-style: italic;
1525                    font-display: swap;
1526                }
1527
1528                @font-face {
1529                    font-family: 'Ivy Mode';
1530                    src: url('//www.beauteprivee.fr/cdn/shop/t/582/assets/IvyMode-SemiBold.woff2?v=72848738223798672671783959851') format('woff2');
1531                    font-weight: 600;
1532                    font-display: swap;
1533                }
1534
1535                @font-face {
1536                    font-family: 'Ivy Mode';
1537                    src: url('//www.beauteprivee.fr/cdn/shop/t/582/assets/IvyMode-SemiBoldItalic.woff2?v=107641638041636420521783959852') format('woff2');
1538                    font-weight: 600;
1539                    font-style: italic;
1540                    font-display: swap;
1541                }
1542
1543                :root {
1544                    /* CUSTOM */
1545                    --grid-outside-gap: 80px;
1546                    --header-outside-gap: 64px;
1547
1548                    --font-size-hero: 48px;
1549                    --font-size-large: 36px;
1550                    --font-size-h1: 28px;
1551                    --font-size-h2: 22px;
1552                    --font-size-h3: 20px;
1553                    --font-size-headline: 17px;
1554                    --font-size-body: 17px;
1555                    --font-size-body-small: 16px;
1556                    --font-size-callout: 14px;
1557                    --font-size-subhead: 15px;
1558                    --font-size-footnote: 13px;
1559                    --font-size-caption: 11px;
1560
1561                    --line-height-hero: 59px;
1562                    --line-height-large: 1.16;
1563                    --line-height-h1: 34px;
1564                    --line-height-h2: 28px;
1565                    --line-height-h3: 25px;
1566                    --line-height-headline: 22px;
1567                    --line-height-body: 22px;
1568                    --line-height-body-small: 21px;
1569                    --line-height-callout: 20px;
1570                    --line-height-subhead: 20px;
1571                    --line-height-footnote: 18px;
1572                    --line-height-caption: 16px;
1573                }
1574
1575                @media (max-width: 992px) {
1576                    :root {
1577                        --grid-outside-gap: 8px;
1578                        --header-outside-gap: 8px;
1579                    }
1580                }
1581
1582                @media (max-width: 767px) {
1583                    :root {
1584                        --font-size-hero: 40px;
1585                        --font-size-large: 31px;
1586                        --font-size-h1: 25px;
1587                        --font-size-h2: 19px;
1588                        --font-size-h3: 17px;
1589                        --font-size-headline: 14px;
1590                        --font-size-body: 16px;
1591                        --font-size-body-small: 14px;
1592                        --font-size-callout: 12px;
1593                        --font-size-subhead: 12px;
1594                        --font-size-footnote: 12px;
1595
1596                        --line-height-hero: 50px;
1597                        --line-height-large: 1.22;
1598                        --line-height-h1: 31px;
1599                        --line-height-h2: 24px;
1600                        --line-height-h3: 22px;
1601                        --line-height-headline: 19px;
1602                        --line-height-body: 21px;
1603                        --line-height-body-small: 18px;
1604                        --line-height-callout: 16px;
1605                        --line-height-subhead: 16px;
1606                        --line-height-footnote: 16px;
1607                        --line-height-caption: 13px;
1608                    }
1609                }
1610
1611                body {
1612                    overflow-x: hidden;
1613                    font-family: 'Karla';
1614                    font-size: var(--font-size-body);
1615                    color: #151515;
1616                    line-height: var(--line-height-body);
1617                }
1618            </style>
1619
1620            
1621            
1622            
1622<script src="https://client.get-potions.com/809/recos-tag.js" async></script>
1622
1623            
1623<script src="https://client.get-potions.com/1041/recos-tag.js" async></script>
1623
1624            
1625
1626            
1627            
1627<script
1628                type="text/javascript"
1629                src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js"
1630                async
1631            ></script>
1631
1632
1633            
1633<script>
1634                window.Shopify.routes = {
1635                    root: '/',
1636                    account_addresses_url: '/account/addresses',
1637                    account_login_url: '/account/login',
1638                    account_logout_url: '/account/logout',
1639                    account_recover_url: '/account/recover',
1640                    account_register_url: '/account/register',
1641                    account_url: '/account',
1642                    cart_add_url: '/cart/add',
1643                    cart_change_url: '/cart/change',
1644                    cart_clear_url: '/cart/clear',
1645                    cart_update_url: '/cart/update',
1646                    cart_url: '/cart',
1647                    collections_url: '/collections',
1648                    root_url: '/',
1649                    search_url: '/search',
1650                };
1651            </script>
1651
1652
1653            
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666<script type="application/ld+json">
1667{
1668	"@context": "http://schema.org",
1669  	"@type": "Organization",
1670	"sameAs": [],
1671	"url": "https:\/\/www.beauteprivee.fr",
1672	"name": "Beauté Privée",
1673	"description": "Découvrez des ventes privées beauté et bien-être sur Beauté Privée et bénéficiez de tarifs exclusifs sur une sélection de grandes marques.",
1674	"email": "[email protected]",
1675	"telephone": "01 59 13 46 37",
1676	"address": {
1677		"@type": "PostalAddress",
1678		"streetAddress": "1 Rue des Bles",
1679		"addressLocality": "Saint-Denis",
1680		"addressRegion": "",
1681		"postalCode": "93210",
1682		"addressCountry": "France"
1683	}
1684}
1685</script>
1685
1686
1687            
1688            <link href="//www.beauteprivee.fr/cdn/shop/t/582/assets/custom.css?v=108690650682486119231783960590" rel="stylesheet" type="text/css" media="all" />
1689        <!-- BEGIN app block: shopify://apps/pimster-custom-beaute-privee/blocks/pimster-script/019c0943-dbbe-715b-8f82-8cdb215c7cf0 --><!-- BEGIN app snippet: vite-tag -->
1690
1691
1692  
1692<script src="https://cdn.shopify.com/extensions/01a0b3e3-d9cf-77f0-af6b-4165282498fd/pimster-shopify-4/assets/pimster-embed.loader-42c382ac.js" type="module" crossorigin="anonymous"></script>
1692
1693
1694<!-- END app snippet -->
1695
1696
1697<!-- END app block --><!-- BEGIN app block: shopify://apps/loyoly/blocks/international/f8398f67-b476-4b74-89b8-cb199b7011c9 -->
1698<script>
1699  // Set the current lang
1700  window.loyoly_lang_code = 'fr'
1701  // Set the convert rate
1702  window.loyoly_convert_rate = window.Shopify.currency.rate
1703  // Set the current money code
1704  window.loyoly_money_code = 'EUR'
1705  // Localized suffix
1706  window.loyoly_lang_suffix = '/'
1707
1708
1709</script>
1709
1710
1711
1712<!-- END app block --><!-- BEGIN app block: shopify://apps/nosto/blocks/nosto-script-embed-block/a67c43f0-0fc3-4649-a7dc-65ac499cae31 --><!-- BEGIN app snippet: nosto-shop-id -->
1712<script type="application/json" id="nosto-market-tagging">{"shopId":"59307819143","market":"28196077703","locale":"fr"
1713}</script>
1713
1714<!-- END app snippet -->
1715<script>
1716  (function () {
1717    // Market/locale (when resolved) are baked in server-side above, so no DOM parsing or extra
1718    // network hop is needed to build this URL. The only thing that can't be decided server-side
1719    // is the markets-preview override, which depends on a query param/cookie only visible
1720    // client-side - so this inline check is all that's left before the script tag is created.
1721    // It's inline (not a separate asset file) so the preview check runs synchronously, before the
1722    // nosto.js fetch starts - keeping it a single request with no risk of a duplicate load.
1723    var NOSTO_MARKETS_PREVIEW_PARAM = "nostomarketspreview"
1724
1725    function getCookie(cname) {
1726      var name = cname + "="
1727      var ca = document.cookie.split(';')
1728      for (var i = 0; i < ca.length; i++) {
1729        var c = ca[i]
1730        while (c.charAt(0) === ' ') {
1731          c = c.substring(1)
1732        }
1733        if (c.indexOf(name) === 0) {
1734          try {
1735            return decodeURIComponent(c.substring(name.length, c.length))
1736          } catch (err) {
1737            console.warn('Failed to decode cookie value', cname, err)
1738          }
1739        }
1740      }
1741      return ""
1742    }
1743
1744    var storage = {
1745      getItem: function (key) { return sessionStorage && sessionStorage.getItem(key) },
1746      setItem: function (key, value) { return sessionStorage && sessionStorage.setItem(key, value) },
1747      removeItem: function (key) { return sessionStorage && sessionStorage.removeItem(key) }
1748    }
1749
1750    function isMarketsPreviewEnabled() {
1751      var urlParams = new URLSearchParams(window.location.search)
1752      var isPreviewEnabled = urlParams.get(NOSTO_MARKETS_PREVIEW_PARAM) === "true"
1753      var isPreviewEnabledFromStorage = storage.getItem(NOSTO_MARKETS_PREVIEW_PARAM) === "true"
1754
1755      if (isPreviewEnabled || isPreviewEnabledFromStorage) {
1756        !isPreviewEnabledFromStorage && storage.setItem(NOSTO_MARKETS_PREVIEW_PARAM, "true")
1757        return true
1758      }
1759
1760      if (getCookie(NOSTO_MARKETS_PREVIEW_PARAM) === "true") {
1761        storage.setItem(NOSTO_MARKETS_PREVIEW_PARAM, "true")
1762        return true
1763      }
1764
1765      storage.removeItem(NOSTO_MARKETS_PREVIEW_PARAM)
1766      return false
1767    }
1768
1769    var src = "\/apps\/proxy\/script\/shopify\/market\/nosto.js?merchant=shopify-59307819143\u0026market=28196077703\u0026locale=fr"
1770    if (isMarketsPreviewEnabled()) {
1771      src += "&preview=true"
1772    }
1773
1774    var SCRIPT_ID = "nosto-market-script"
1775    if (document.getElementById(SCRIPT_ID)) {
1776      return
1777    }
1778
1779    var nostoMarketScript = document.createElement("script")
1780    nostoMarketScript.id = SCRIPT_ID
1781    nostoMarketScript.async = true
1782    nostoMarketScript.src = src
1783    document.head.appendChild(nostoMarketScript)
1784  })()
1785</script>
1785
1786
1787
1788<!-- END app block --><!-- BEGIN app block: shopify://apps/ab-tasty/blocks/abtasty-tag/50439cd8-89e0-4240-838a-2948c07c763d -->
1789
1790
1791
1792
1793<!-- END app block --><!-- BEGIN app block: shopify://apps/addingwell/blocks/aw-gtm/c8ed21e7-0ac8-4249-8c91-cbdde850b5b8 -->
1793<script
1794  type="module"
1795>
1796  setTimeout(async function () {
1797    const keySessionStorage = 'aw_settings';
1798    let __AW__settings = JSON.parse(sessionStorage.getItem(keySessionStorage));
1799    if(!__AW__settings) {
1800      const awSettings = await fetch(
1801              "/apps/addingwell-proxy",
1802              {
1803                method: "GET",
1804                redirect: "follow",
1805                headers: {'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'}
1806              }
1807      );
1808      if (awSettings.ok) {
1809        __AW__settings = await awSettings.json();
1810        sessionStorage.setItem(keySessionStorage, JSON.stringify(__AW__settings));
1811      } else {
1812        console.error('Addingwell - Loading proxy error', awSettings.status);
1813        return;
1814      }
1815    }
1816
1817    if(__AW__settings.insertGtmTag && __AW__settings.gtmId) {
1818      let __AW__gtmUrl = 'https://www.googletagmanager.com/gtm.js';
1819      let __AW__isAddingwellCdn = false;
1820      if(__AW__settings.insertGtmUrl && __AW__settings.gtmUrl) {
1821        __AW__gtmUrl = __AW__settings.gtmUrl;
1822        __AW__isAddingwellCdn = __AW__settings.isAddingwellCdn;
1823      }
1824
1825      (function(w,d,s,l,i){
1826        w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});
1827        var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
1828        j.async=true;
1829        j.src=`${__AW__gtmUrl}?${__AW__isAddingwellCdn ? 'awl' : 'id'}=`+(__AW__isAddingwellCdn ? i.replace(/^GTM-/, '') : i)+dl;f.parentNode.insertBefore(j,f);
1830      })(window,document,'script',`${__AW__settings.dataLayerVariableName}`,`${__AW__settings.gtmId}`);
1831    }
1832
1833    const __AW__getEventNameWithSuffix = (eventName) => {
1834      return eventName + (__AW__settings.dataLayerEventSuffix ? "_" + __AW__settings.dataLayerEventSuffix : "");
1835    }
1836
1837    function __AW__waitForShopifyYCookie(maxAttempts, intervalMs) {
1838      return new Promise(function(resolve) {
1839        let attempts = 0;
1840        maxAttempts = maxAttempts || 5;
1841        intervalMs = intervalMs || 200;
1842        function check() {
1843          const match = document.cookie.match(/(?:^|;\s*)_shopify_y=([^;]*)/);
1844          if (match) {
1845            resolve(match[1]);
1846          } else if (attempts < maxAttempts) {
1847            attempts++;
1848            setTimeout(check, intervalMs);
1849          } else {
1850            console.warn('[AW] _shopify_y cookie not found after consent');
1851            resolve(null);
1852          }
1853        }
1854        check();
1855      });
1856    }
1857
1858    const __AW__CONSENT_KEY = 'aw_consent_state';
1859
1860    function __AW__getConsentState() {
1861      try {
1862        if (window.Shopify?.customerPrivacy?.currentVisitorConsent) {
1863          return JSON.stringify(window.Shopify.customerPrivacy.currentVisitorConsent());
1864        }
1865      } catch(e) {}
1866      return null;
1867    }
1868
1869    function __AW__isEmptyConsent(stateStr) {
1870      try {
1871        return Object.values(JSON.parse(stateStr)).every(v => v === '');
1872      } catch(e) {}
1873      return true;
1874    }
1875
1876    let __AW__prevConsentState = __AW__getConsentState() ?? localStorage.getItem(__AW__CONSENT_KEY);
1877
1878    document.addEventListener('visitorConsentCollected', async function(event) {
1879      const currentConsentState = __AW__getConsentState();
1880
1881      if (currentConsentState !== null && currentConsentState === __AW__prevConsentState) {
1882        return;
1883      }
1884
1885      __AW__prevConsentState = currentConsentState;
1886
1887      if (currentConsentState !== null) {
1888        if (__AW__isEmptyConsent(currentConsentState)) {
1889          localStorage.removeItem(__AW__CONSENT_KEY);
1890        } else {
1891          localStorage.setItem(__AW__CONSENT_KEY, currentConsentState);
1892        }
1893      }
1894
1895      window.Shopify.analytics.publish('addingwell:shopify_update_consent', {visitorConsentCollected: true});
1896
1897      const shopifyY = await __AW__waitForShopifyYCookie();
1898      if (!shopifyY) return;
1899
1900      window[__AW__settings.dataLayerVariableName] = window[__AW__settings.dataLayerVariableName] || [];
1901      window[__AW__settings.dataLayerVariableName].push({
1902        event: __AW__getEventNameWithSuffix('shopify_consent_updated'),
1903      });
1904    });
1905
1906    if(__AW__settings.enableDataLayer) {
1907      const MAX_ITEMS_BATCH = 10;
1908      const sendBatchEvents = (items, eventName, eventObject) => {
1909        let batch = [];
1910        for(let i  = 0; i < items.length; i++) {
1911          batch.push(items[i]);
1912          if(batch.length === MAX_ITEMS_BATCH || i === items.length - 1) {
1913            const eventClone = {
1914              ...eventObject,
1915              ecommerce: {
1916                ...eventObject.ecommerce,
1917                items: [...batch]
1918              }
1919            };
1920            window[__AW__settings.dataLayerVariableName].push({ ecommerce: null });
1921            window[__AW__settings.dataLayerVariableName].push({
1922              ...{'event': __AW__getEventNameWithSuffix(eventName)},
1923              ...eventClone
1924            });
1925
1926            batch = [];
1927          }
1928        }
1929      }
1930
1931      function __AW__filterNullOrEmpty(obj) {
1932        let filteredObj = {};
1933
1934        for (let key in obj) {
1935          if (obj.hasOwnProperty(key)) {
1936            let value = obj[key];
1937
1938            // If value is an object (and not null), recursively filter sub-elements
1939            if (typeof value === "object" && value !== null && value !== undefined) {
1940              let filteredSubObject = __AW__filterNullOrEmpty(value);
1941
1942              // Add the filtered sub-object only if it's not empty
1943              if (Object.keys(filteredSubObject).length > 0) {
1944                filteredObj[key] = filteredSubObject;
1945              }
1946            } else {
1947              // Add the value only if it's neither null nor an empty string
1948              if (value !== null && value !== "" && value !== undefined) {
1949                filteredObj[key] = value;
1950              }
1951            }
1952          }
1953        }
1954        return filteredObj;
1955      }
1956
1957      function getPageType(value) {
1958        const pageTypeMapping = {
1959          404: '404',
1960          article: 'article',
1961          blog: 'blog',
1962          cart: 'cart',
1963          collection: 'collection',
1964          gift_card: 'gift_card',
1965          index: 'homepage',
1966          product: 'product',
1967          search: 'searchresults',
1968          'customers/login': 'login',
1969          'customers/register': 'sign_up'
1970        };
1971        return pageTypeMapping[value] || 'other';
1972      }
1973      let __AW__cartReady = false;
1974
1975      function pushDataLayerEvents() {
1976        initCart();
1977        window[__AW__settings.dataLayerVariableName] = window[__AW__settings.dataLayerVariableName] || [];  // init data layer if doesn't already exist
1978        const templateName = "login";
1979
1980        const getFormattedPrice = (priceInCents) => priceInCents/100;
1981        /**********************
1982         * DATALAYER SECTIONS
1983         ***********************/
1984        /**
1985         * DATALAYER: User Data
1986         * Build user_data properties.
1987         */
1988        let newCustomer = true;
1989        window.__AW__CommonData = {
1990          user_data: {
1991            new_customer: newCustomer,
1992          }
1993        };
1994
1995        
1996
1997        window.__AW__CommonData.country = "FR"
1998        window.__AW__CommonData.market = "fr"
1999        window.__AW__CommonData.marketId = 28196077703
2000
2001        
2002          window.__AW__CommonData.language = "fr-FR";
2003        
2004        window.__AW__CommonData = __AW__filterNullOrEmpty(window.__AW__CommonData);
2005
2006        // Ajout du hash SHA256 des champs sensibles de user_data (version robuste)
2007        async function sha256(str) {
2008          if (!str) return undefined;
2009          if (!(window.crypto && window.crypto.subtle)) {
2010            console.error('Crypto.subtle non supporté, hash impossible pour :', str);
2011            return undefined;
2012          }
2013          try {
2014            const buf = await window.crypto.subtle.digest('SHA-256', new TextEncoder().encode(str));
2015            return Array.from(new Uint8Array(buf)).map(x => x.toString(16).padStart(2, '0')).join('');
2016          } catch (e) {
2017            console.error('Erreur lors du hash SHA256 pour', str, e);
2018            return undefined;
2019          }
2020        }
2021        async function getUserDataHash(user_data) {
2022          const hashObj = {};
2023          if (!user_data) return hashObj;
2024          try {
2025            if (user_data.email_address) hashObj.email_address = await sha256(user_data.email_address);
2026            if (user_data.phone_number) hashObj.phone_number = await sha256(user_data.phone_number);
2027            if (user_data.address && typeof user_data.address === 'object') {
2028              hashObj.address = {};
2029              if (user_data.address.first_name) hashObj.address.first_name = await sha256(user_data.address.first_name);
2030              if (user_data.address.last_name) hashObj.address.last_name = await sha256(user_data.address.last_name);
2031              if (user_data.address.street) hashObj.address.street = await sha256(user_data.address.street);
2032              if (user_data.address.city) hashObj.address.city = await sha256(user_data.address.city);
2033              if (user_data.address.region) hashObj.address.region = await sha256(user_data.address.region);
2034              if (user_data.address.postal_code) hashObj.address.postal_code = await sha256(user_data.address.postal_code);
2035              if (user_data.address.country) hashObj.address.country = await sha256(user_data.address.country);
2036            }
2037          } catch (e) {
2038            console.error('Erreur lors du hash user_data_hashed', e);
2039          }
2040          return __AW__filterNullOrEmpty(hashObj);
2041        }
2042        (async function() {
2043          if (window.__AW__CommonData && window.__AW__CommonData.user_data) {
2044            window.__AW__CommonData.user_data_hashed = await getUserDataHash(window.__AW__CommonData.user_data);
2045          }
2046        })();
2047
2048        window.__AW__CommonData["page_type"] = getPageType(templateName);
2049        window.__AW__CommonData["theme"] = window?.Shopify?.theme;
2050        window[__AW__settings.dataLayerVariableName].push(window.__AW__CommonData);
2051
2052        window[__AW__settings.dataLayerVariableName].push({"event": __AW__getEventNameWithSuffix("page_view")});
2053
2054        /** DATALAYER: select_item handoff */
2055        const pendingSelectItemName = "aw_pending_select_item";
2056
2057        const __AW__pushSelectItem = (payload) => {
2058          window[__AW__settings.dataLayerVariableName].push({ ecommerce: null });
2059          window[__AW__settings.dataLayerVariableName].push(payload);
2060        };
2061
2062        const __AW__flushPendingSelectItem = () => {
2063          let pending = null;
2064          try {
2065            pending = sessionStorage.getItem(pendingSelectItemName);
2066            sessionStorage.removeItem(pendingSelectItemName);
2067          } catch (e) {
2068            return;
2069          }
2070          if (!pending) return;
2071          try {
2072            __AW__pushSelectItem(JSON.parse(pending));
2073          } catch (e) {
2074            console.warn('[AW] pending select_item error', e);
2075          }
2076        };
2077
2078        __AW__flushPendingSelectItem();
2079
2080
2081        /**
2082         * DATALAYER: 404 Pages
2083         * Fire on 404 Pages */
2084        
2085
2086
2087        /**
2088         * DATALAYER: Blog Articles
2089         * Fire on Blog Article Pages */
2090        
2091
2092        
2093        let isTrackedLogin = false;
2094        document.addEventListener('submit', function(e) {
2095          const loginForm = e.target.closest('[action="/account/login"]');
2096          if(loginForm && !isTrackedLogin) {
2097            const eventData = {
2098              event: __AW__getEventNameWithSuffix('login')
2099            }
2100            isTrackedLogin = true;
2101            window[__AW__settings.dataLayerVariableName].push(eventData);
2102          }
2103        });
2104        
2105
2106        
2107
2108        /** DATALAYER: Product List Page (Collections, Category)
2109         * Fire on all product listing pages. */
2110
2111        const __AW__transformNumberToString = (value) => {
2112          if (value !== null && value !== undefined && typeof value === 'number') {
2113            return value.toString();
2114          }
2115          /** By Default return the current value */
2116          return value;
2117        };
2118
2119        let discountPrice = 0.00;
2120        
2121
2122        /** DATALAYER: Product Page
2123         * Fire on all Product View pages. */
2124        
2125
2126        /** DATALAYER: Cart View
2127         * Fire anytime a user views their cart (non-dynamic) */
2128        
2129
2130        let drawerCartAlreadyOpened = false;
2131        let pendingViewCartTimeout = null;
2132
2133        let stateObserver = null;
2134        let domObserver = null;
2135
2136        function initCart() {
2137          fetch(`${window.Shopify?.routes?.root || "/"}cart.js?adw=1&init=1`, {
2138            credentials: 'same-origin',
2139            headers: { 'Accept': 'application/json' }
2140          }).then(r => r.ok ? r.json() : null)
2141            .then(freshCart => {
2142              if (freshCart) {
2143                window.__AW__slaveShopifyCart = freshCart;
2144              } else {
2145                window.__AW__slaveShopifyCart = { items: [] };
2146              }
2147              __AW__cartReady = true;
2148            })
2149            .catch(e => {
2150              console.warn('[AW] Cart hydration failed', e);
2151              window.__AW__slaveShopifyCart = { items: [] };
2152              __AW__cartReady = true;
2153            });
2154        }
2155
2156        function fireViewCartOncePerOpen() {
2157          if (pendingViewCartTimeout) return;
2158
2159          drawerCartAlreadyOpened = true;
2160
2161          pendingViewCartTimeout = setTimeout(() => {
2162            pendingViewCartTimeout = null;
2163            if (!__AW__cartReady) return;
2164            const ecommerceDataLayer = {
2165              ecommerce: {
2166                currency: window.__AW__slaveShopifyCart.currency,
2167                value: window.__AW__slaveShopifyCart.total_price / 100,
2168                items: window.__AW__slaveShopifyCart.items.map(item => {
2169                  const price = (item.discounted_price ?? item.price) / 100;
2170                  const discount = (item.price - (item.discounted_price ?? 0)) / 100;
2171
2172                  let coupon = "";
2173                  if (Array.isArray(item?.discounts)) {
2174                    coupon = item.discounts
2175                            .filter(d => typeof d?.title === "string")
2176                            .map(d => d.title)
2177                            .join(", ");
2178                  }
2179
2180                  return {
2181                    item_id: __AW__transformNumberToString(item.product_id),
2182                    item_variant: item.variant_title,
2183                    item_variant_title: item.variant_title,
2184                    item_variant_id: __AW__transformNumberToString(item.variant_id),
2185                    item_product_id: __AW__transformNumberToString(item.product_id),
2186                    item_product_title: item.product_title,
2187                    item_name: item.product_title,
2188                    price,
2189                    discount,
2190                    item_brand: item.vendor,
2191                    item_category: item.product_type,
2192                    item_list_name: item.collection || "",
2193                    item_list_id: "",
2194                    quantity: item.quantity,
2195                    sku: __AW__transformNumberToString(item.sku),
2196                    coupon,
2197                    url: item.url,
2198                    selling_plan_id     : item?.selling_plan_allocation?.selling_plan?.id,
2199                    selling_plan_name   : item?.selling_plan_allocation?.selling_plan?.name
2200
2201                  };
2202                })
2203              }
2204            };
2205
2206            window[__AW__settings.dataLayerVariableName].push({ ecommerce: null });
2207            window[__AW__settings.dataLayerVariableName].push({
2208              event: __AW__getEventNameWithSuffix("view_cart"),
2209              ...ecommerceDataLayer
2210            });
2211          }, 1000);
2212        }
2213
2214        function resetOnClose() {
2215          drawerCartAlreadyOpened = false;
2216          if (pendingViewCartTimeout) {
2217            clearTimeout(pendingViewCartTimeout);
2218            pendingViewCartTimeout = null;
2219          }
2220        }
2221
2222        function getTargets() {
2223          const cartDrawer = document.querySelector("cart-drawer");
2224          const dialog =
2225                  document.querySelector("cart-drawer dialog") ||
2226                  document.querySelector("cart-drawer-component dialog") ||
2227                  document.querySelector("cart-drawer-component dialog[ref='dialog']");
2228
2229          return { cartDrawer, dialog };
2230        }
2231
2232        function isCartOpen({ cartDrawer, dialog }) {
2233          const openByDialog = !!dialog && (dialog.open || dialog.hasAttribute("open"));
2234          const openByClass = !!cartDrawer && cartDrawer.classList.contains("active");
2235          const openByAttr = !!cartDrawer && cartDrawer.hasAttribute("open");
2236          return openByDialog || openByClass || openByAttr;
2237        }
2238
2239        function attachStateObserver() {
2240          const { cartDrawer, dialog } = getTargets();
2241
2242          if (stateObserver) stateObserver.disconnect();
2243
2244          stateObserver = new MutationObserver(() => {
2245            const openNow = isCartOpen(getTargets());
2246
2247            if (openNow) {
2248              if (!drawerCartAlreadyOpened) fireViewCartOncePerOpen();
2249            } else {
2250              resetOnClose();
2251            }
2252          });
2253
2254          if (cartDrawer) {
2255            stateObserver.observe(cartDrawer, {
2256              attributes: true,
2257              attributeFilter: ["class", "open"]
2258            });
2259          }
2260
2261          if (dialog) {
2262            stateObserver.observe(dialog, {
2263              attributes: true,
2264              attributeFilter: ["open"]
2265            });
2266          }
2267
2268          const openNow = isCartOpen(getTargets());
2269          if (openNow) {
2270            if (!drawerCartAlreadyOpened) fireViewCartOncePerOpen();
2271          } else {
2272            resetOnClose();
2273          }
2274        }
2275
2276        function observeCartDrawerOpen() {
2277          attachStateObserver();
2278
2279          if (domObserver) domObserver.disconnect();
2280
2281          domObserver = new MutationObserver(() => {
2282            attachStateObserver();
2283          });
2284
2285          domObserver.observe(document.documentElement, {
2286            childList: true,
2287            subtree: true
2288          });
2289        }
2290
2291        observeCartDrawerOpen();
2292
2293
2294        /** DATALAYER: Search Results */
2295        var searchPage = new RegExp("search", "g");
2296        if(document.location.pathname.match(searchPage)){
2297          var __AW__items = [];
2298          
2299
2300          const awEcommerceSearch = {
2301            search_term: null,
2302            results_count: null,
2303            ecommerce: {
2304              currency: "EUR",
2305              items : []
2306            }
2307          };
2308          sendBatchEvents(__AW__items, "search", awEcommerceSearch);
2309        }
2310
2311
2312        const cartRegex = /\/cart\/(add|change|update)(\.js|\.json)?(\?.*)?$/;
2313        const pendingCartEventName = "aw_pending_cart_event";
2314        let awCartQueue = Promise.resolve();
2315
2316        if(sessionStorage.getItem(pendingCartEventName)) {
2317          scheduleCartSync();
2318        }
2319
2320        document.addEventListener('click', async function(e) {
2321          const btn = e.target.closest('[href*="/cart/add"], [action*="/cart/add"], button[name="add"]');
2322          if (!btn || !__AW__cartReady) return;
2323          snapshotCart();
2324        }, true);
2325
2326        patchFetch();
2327        patchXhr();
2328
2329        function snapshotCart() {
2330          try {
2331            sessionStorage.setItem(
2332              pendingCartEventName,
2333              JSON.stringify(window.__AW__slaveShopifyCart ?? { items: [] })
2334            );
2335          } catch (e) {
2336            console.warn('[AW] snapshot error', e);
2337          }
2338        }
2339
2340        function patchXhr() {
2341          const nativeSend = typeof XMLHttpRequest === 'function' ? XMLHttpRequest.prototype?.send : null;
2342          if (typeof nativeSend !== 'function' || nativeSend.__AW__patched) return;
2343
2344          XMLHttpRequest.prototype.send = function(body) {
2345            this.addEventListener('load', () => {
2346              try {
2347                const abs = this.responseURL || '';
2348                const u = new URL(abs, location.origin);
2349                const mt = u.pathname + (u.search || '');
2350                if (this.status === 200 && cartRegex.test(mt)) {
2351                  scheduleCartSync();
2352                }
2353              } catch (e) {
2354                console.error('[AW] XHR handler error', e);
2355              }
2356            });
2357            return nativeSend.apply(this, arguments);
2358          };
2359
2360          XMLHttpRequest.prototype.send.__AW__patched = true;
2361        }
2362
2363        function patchFetch() {
2364          const previousFetch = window.fetch;
2365          if (typeof previousFetch !== 'function' || previousFetch.__AW__patched) return;
2366
2367          window.fetch = async function (...args) {
2368            const resource = args[0];
2369            try {
2370
2371              const url = resource instanceof Request ? resource.url  : resource instanceof URL ? resource.href : String(resource);
2372              if (cartRegex.test(url)) {
2373                const response = await previousFetch.apply(this, args);
2374                if (response.ok) {
2375                  scheduleCartSync();
2376                } else {
2377                  console.warn(`Fetch for ${url} failed with status: ${response.status}`);
2378                }
2379                return response;
2380              }
2381            } catch (error) {
2382              console.error('[AW] Fetch Wrapper Error:', error);
2383            }
2384
2385            return previousFetch.apply(this, args);
2386          };
2387
2388          window.fetch.__AW__patched = true;
2389        }
2390
2391        function scheduleCartSync() {
2392          if (!__AW__cartReady) return;
2393          awCartQueue = awCartQueue
2394            .then(() => {
2395              if (!sessionStorage.getItem(pendingCartEventName)) snapshotCart();
2396              return runCartSyncOnce();
2397            }).catch(e => {
2398              console.error('[AW] scheduleCartSync error', e);
2399            });
2400        }
2401
2402        async function runCartSyncOnce() {
2403          try {
2404            const response = await fetch(`${window.Shopify.routes.root || "/"}cart.js?adw=1`, {
2405              credentials: 'same-origin',
2406              headers: { 'Accept': 'application/json' }
2407            });
2408            if (!response.ok) throw new Error('HTTP ' + response.status);
2409            const newCart = await response.json();
2410            await compareCartData(newCart);
2411          } catch (error) {
2412            console.error('[AW] Error fetching /cart.js (singleton):', error);
2413          }
2414        }
2415
2416        function compareCartData(newCartData) {
2417          return new Promise((resolve) => {
2418            setTimeout(() => {
2419              try {
2420                const oldCartData = sessionStorage.getItem(pendingCartEventName) ? JSON.parse(sessionStorage.getItem(pendingCartEventName)) : {items: []};
2421                newCartData = newCartData || {items: []};
2422                const cartItemKey = item => `${item.variant_id ?? item.id}:${item.selling_plan_allocation?.selling_plan?.id ?? ''}`;
2423                const oldItems = new Map(oldCartData.items.map(item => [cartItemKey(item), item]));
2424                const newItems = new Map(newCartData.items.map(item => [cartItemKey(item), item]));
2425
2426                newItems.forEach((newItem, key) => {
2427                  const oldItem = oldItems.get(key);
2428                  const eventName = "add_to_cart";
2429                  if (!oldItem) {
2430                    handleCartDataLayer(eventName, newItem.quantity, newItem);
2431                  } else if (newItem.quantity > oldItem.quantity) {
2432                    handleCartDataLayer(eventName, newItem.quantity - oldItem.quantity, newItem);
2433                  }
2434                });
2435
2436                oldItems.forEach((oldItem, key) => {
2437                  const newItem = newItems.get(key);
2438                  const eventName = "remove_from_cart";
2439                  if (!newItem) {
2440                    handleCartDataLayer(eventName, oldItem.quantity, oldItem);
2441                  } else if (oldItem.quantity > newItem.quantity) {
2442                    handleCartDataLayer(eventName, oldItem.quantity - newItem.quantity, newItem);
2443                  }
2444                });
2445
2446                sessionStorage.removeItem(pendingCartEventName);
2447                window.__AW__slaveShopifyCart = newCartData;
2448              } catch(e) {
2449                console.error('[AW] compareCartData error', e);
2450                sessionStorage.removeItem(pendingCartEventName);
2451              } finally {
2452                resolve();
2453              }
2454            }, 500);
2455          });
2456        }
2457
2458        function handleCartDataLayer(eventName, quantity, item) {
2459          const price = (item.discounted_price ?? item.price) / 100;
2460          const discount = (item.price - (item.discounted_price ?? 0)) / 100;
2461          const totalValue = price * quantity;
2462          let coupon = "";
2463          if(Array.isArray(item?.discounts)) {
2464            coupon = item.discounts
2465                    .filter(discount => typeof discount?.title === 'string')
2466                    .map(discount => discount.title)
2467                    .join(', ');
2468          }
2469
2470          const ecommerceCart = {
2471            ecommerce: {
2472              currency: "EUR",
2473              value: totalValue,
2474              items: [{
2475                item_id: __AW__transformNumberToString(item.product_id),
2476                item_variant: item.variant_title || "Default Variant",
2477                item_variant_id: __AW__transformNumberToString(item.variant_id),
2478                item_variant_title: item.variant_title || "Default Variant",
2479                item_name: item.product_title,
2480                item_product_id: __AW__transformNumberToString(item.product_id),
2481                item_product_title: item.product_title,
2482                sku: __AW__transformNumberToString(item.sku),
2483                discount: discount,
2484                price: price,
2485                item_brand: item.vendor,
2486                item_category: item.product_type,
2487                quantity: quantity,
2488                coupon: coupon,
2489                url: item?.url,
2490                selling_plan_id     : item?.selling_plan_allocation?.selling_plan?.id,
2491                selling_plan_name   : item?.selling_plan_allocation?.selling_plan?.name
2492              }]
2493            }
2494          };
2495
2496          window[__AW__settings.dataLayerVariableName].push({ ecommerce: null });
2497          window[__AW__settings.dataLayerVariableName].push({
2498            ...{ 'event': __AW__getEventNameWithSuffix(eventName) },
2499            ...ecommerceCart
2500          });
2501
2502        }
2503      }
2504
2505      if (document.readyState === 'loading') {
2506        // document still loading...
2507        document.addEventListener('DOMContentLoaded', () => {
2508          pushDataLayerEvents();
2509        });
2510      } else {
2511        // already loaded, chocs away!
2512        pushDataLayerEvents();
2513      }
2514    }
2515  }, 0);
2516</script>
2516
2517
2518
2519<!-- END app block -->
2519<script src="https://cdn.shopify.com/extensions/01a0d8da-dbb6-759e-90f0-31975754fa90/forms-2597/assets/shopify-forms-loader.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 2519
2519
2520<script src="https://cdn.shopify.com/extensions/01a0ae45-0695-7ba2-ab6e-d3a45e67d1d0/avada-order-limit-116/assets/avada-order-limit.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 2520
2520
2521<script src="https://cdn.shopify.com/extensions/01a0d7ba-f423-716f-ac31-9fbf68b5c662/revenuehunt-201/assets/embed.js" type="text/javascript" defer="defer"></script>
2521
2522<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
2523<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 59307819143,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "customers/login"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 2523
2523
2524<script>
2525  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
2526</script>
vendor: 1 bytes, line 2526
2526
2527<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
2527).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 59307819143,storefrontBaseUrl: "https://www.beauteprivee.fr",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://www.beauteprivee.fr/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"5062000975","configuration":"{\"company_id\":\"8735394\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e5368d2b6c6046ed02b2612274eb99b8","type":"APP","apiClientId":16915398657,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]}
2527,"dataSharingState":"unrestricted"},{"id":"5033918799","configuration":"{\"accountID\":\"shopify-59307819143\", \"endpoint\":\"https:\/\/connect.nosto.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"85848493c2a1c7a4bbf22728b6f9f31f","type":"APP","apiClientId":272825,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"4747821391","configuration":"{\"pixelCode\":\"C55FRI3G5HFBPDLNOEL0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"3317301583","configuration":"{\"appSettingSchemaVersion\":\"2.0\",\"sdkUrl\":\"sdk.fra-02.braze.eu\",\"sdkVersion\":\"5.4.0\",\"userTrackingBehavior\":\"on_login\",\"apiKey\":\"63cbd2b0-c20c-4c45-ae0f-fe77da750fbb\",\"shopDomain\":\"beauteprivee-prod.myshopify.com\",\"features\":\"WEB_SDK_FEATURE,ACCOUNT_LOGIN_FEATURE,VIEW_PRODUCTS_FEATURE,PURCHASE_COMMERCE_EVENTS_FEATURE,IN_BROWSER_MESSAGES_FEATURE\",\"appEmbedEnabled\":\"true\",\"selectedExternalId\":\"shopify-customer-id\",\"customIdEndpoint\":\"none\",\"thirdPartyTagManagerEnabled\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"822da2ffc90491a56bbbb828cb94f546","type":"APP","apiClientId":4371083,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"3057615183","configuration":"{\"cart_viewed\":\"true\",\"checkout_address_info_submitted\":\"true\",\"checkout_completed\":\"true\",\"checkout_contact_info_submitted\":\"true\",\"checkout_shipping_info_submitted\":\"true\",\"checkout_started\":\"true\",\"collection_viewed\":\"true\",\"page_viewed\":\"true\",\"payment_info_submitted\":\"true\",\"product_added_to_cart\":\"true\",\"product_removed_from_cart\":\"true\",\"product_viewed\":\"true\",\"search_submitted\":\"true\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"4b912d4db8d67578541bfae8b70a40a9","type":"APP","apiClientId":100317265921,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1645740367","configuration":"{\"swymApiEndpoint\":\"https:\/\/swymstore-v3premium-01.swymrelay.com\",\"swymTier\":\"v3premium-01\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5b6f6917e306bc7f24523662663331c0","type":"APP","apiClientId":1350849,"privacyPurposes":["ANALYTICS","MARKETING","PREFERENCES"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"237994319","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"5","type":"CUSTOM","privacyPurposes":[],"name":"JS Webview"},{"id":"262439247","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"19","type":"CUSTOM","privacyPurposes":[],"name":"Algolia Shopify Web Pixel"},{"id":"287342927","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"11","type":"CUSTOM","privacyPurposes":[],"name":"Appsflyer tracking"},{"id":"287965519","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"12","type":"CUSTOM","privacyPurposes":[],"name":"TrackAnalyse - WebPixel"},{"id":"301564239","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Pimster Conversion Pixel"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Beauté Privée","paymentSettings":{"currencyCode":"EUR"},"myshopifyDomain":"beauteprivee-prod.myshopify.com","countryCode":"FR","storefrontUrl":"https:\/\/www.beauteprivee.fr"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://www.beauteprivee.fr/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"198254788943","themePublished":"true","eventMetadataId":"8afb5cff-c52a-42af-92e1-fed3fbfea0e3","shopId":"59307819143","storefrontBaseUrl":"https:\/\/www.beauteprivee.fr","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
2527<script>
2528  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
2529  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
2530  window.ShopifyAnalytics.meta.currency = 'EUR';
2531  var meta = {"page":{"requestId":"ccf597b1-16c2-4a0a-b155-65e290d92c00-1790390030"}};
2532  for (var attr in meta) {
2533    window.ShopifyAnalytics.meta[attr] = meta[attr];
2534  }
2535</script>
vendor: 1 bytes, line 2535
2535
2536<script class="analytics">
2537  (function () {
2538    var customDocumentWrite = function(content) {
2539      var jquery = null;
2540
2541      if (window.jQuery) {
2542        jquery = window.jQuery;
2543      } else if (window.Checkout && window.Checkout.$) {
2544        jquery = window.Checkout.$;
2545      }
2546
2547      if (jquery) {
2548        jquery('body').append(content);
2549      }
2550    };
2551
2552    var hasLoggedConversion = function(token) {
2553      if (token) {
2554        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
2555      }
2556      return false;
2557    }
2558
2559    var setCookieIfConversion = function(token) {
2560      if (token) {
2561        var twoMonthsFromNow = new Date(Date.now());
2562        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
2563
2564        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
2565      }
2566    }
2567
2568    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
2569    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
2570    if (trekkie.integrations) {
2571      return;
2572    }
2573    trekkie.methods = [
2574      'identify',
2575      'page',
2576      'ready',
2577      'track',
2578      'trackForm',
2579      'trackLink'
2580    ];
2581    trekkie.factory = function(method) {
2582      return function() {
2583        var args = Array.prototype.slice.call(arguments);
2584        args.unshift(method);
2585        trekkie.push(args);
2586        if (method == 'track' || method == 'page') {
2587          var pageUrl;
2588          try {
2589            pageUrl = window.location.href;
2590          } catch (e) {}
2591          var pageReferrer;
2592          try {
2593            pageReferrer = document.referrer;
2594          } catch (e) {}
2595          try {
2596            if (window.__TREKKIE_SHIM_QUEUE == null) {
2597              window.__TREKKIE_SHIM_QUEUE = [];
2598            }
2599            window.__TREKKIE_SHIM_QUEUE.push({
2600              from: 'trekkie-stub',
2601              method: method,
2602              args: args.slice(1),
2603              pageContext: {
2604                url: pageUrl,
2605                referrer: pageReferrer
2606              }
2607            });
2608          } catch (e) {
2609            // no-op
2610          }
2611        }
2612        return trekkie;
2613      };
2614    };
2615    for (var i = 0; i < trekkie.methods.length; i++) {
2616      var key = trekkie.methods[i];
2617      trekkie[key] = trekkie.factory(key);
2618    }
2619    trekkie.load = function(config) {
2620      trekkie.config = config || {};
2621      trekkie.config.initialDocumentCookie = document.cookie;
2622      var first = document.getElementsByTagName('script')[0];
2623var script = document.createElement('script');
2624script.type = 'text/javascript';
2625script.onerror = function(e) {
2626  var scriptFallback = document.createElement('script');
2627  scriptFallback.type = 'text/javascript';
2628  scriptFallback.onerror = function(error) {
2629          var Monorail = {
2630      produce: function produce(monorailDomain, schemaId, payload) {
2631        var currentMs = new Date().getTime();
2632        var event = {
2633          schema_id: schemaId,
2634          payload: payload,
2635          metadata: {
2636            event_created_at_ms: currentMs,
2637            event_sent_at_ms: currentMs
2638          }
2639        };
2640        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
2641      },
2642      sendRequest: function sendRequest(endpointUrl, payload) {
2643        // Try the sendBeacon API
2644        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
2645          var blobData = new window.Blob([payload], {
2646            type: 'text/plain'
2647          });
2648
2649          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
2650            return true;
2651          } // sendBeacon was not successful
2652
2653        } // XHR beacon
2654
2655        var xhr = new XMLHttpRequest();
2656
2657        try {
2658          xhr.open('POST', endpointUrl);
2659          xhr.setRequestHeader('Content-Type', 'text/plain');
2660          xhr.send(payload);
2661        } catch (e) {
2662          console.log(e);
2663        }
2664
2665        return false;
2666      },
2667      isIos12: function isIos12() {
2668        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
2669      }
2670    };
2671    Monorail.produce('monorail-edge.shopifysvc.com',
2672      'trekkie_storefront_load_errors/1.1',
2673      {shop_id: 59307819143,
2674      theme_id: 198254788943,
2675      app_name: "storefront",
2676      context_url: window.location.href,
2677      source_url: "//www.beauteprivee.fr/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"});
2678
2679  };
2680  scriptFallback.async = true;
2681  scriptFallback.src = '//www.beauteprivee.fr/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
2682  first.parentNode.insertBefore(scriptFallback, first);
2683};
2684script.async = true;
2685script.src = '//www.beauteprivee.fr/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
2686first.parentNode.insertBefore(script, first);
2687
2688    };
2689    trekkie.load(
2690      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":59307819143,"isMerchantRequest":null,"themeId":198254788943,"themeCityHash":"7858968431343673361","contentLanguage":"fr","currency":"EUR","eventMetadataId":"8afb5cff-c52a-42af-92e1-fed3fbfea0e3"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}}
2691    );
2692
2693    var loaded = false;
2694    trekkie.ready(function() {
2695      if (loaded) return;
2696      loaded = true;
2697
2698      window.ShopifyAnalytics.lib = window.trekkie;
2699
2700      var originalDocumentWrite = document.write;
2701      document.write = customDocumentWrite;
2702      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
2703      document.write = originalDocumentWrite;
2704
2705      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
2706      var token = match? match[1]: undefined;
2707      if (!hasLoggedConversion(token)) {
2708        setCookieIfConversion(token);
2709        
2710      }
2711    });
2712
2713    window.ShopifyAnalytics.lib.page(null,{"requestId":"ccf597b1-16c2-4a0a-b155-65e290d92c00-1790390030","shopifyEmitted":true});
2714
2715    var eventsListenerScript = document.createElement('script');
2716    eventsListenerScript.async = true;
2717    eventsListenerScript.src = "//www.beauteprivee.fr/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
2718    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
2719})();</script>
vendor: 1 bytes, line 2719
2719
2720<script
2721  defer
2722  src="https://www.beauteprivee.fr/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
2723  data-application="storefront-renderer"
2724  data-shop-id="59307819143"
2725  data-render-region="gcp-europe-west1"
2726  data-page-type="customers/login"
2727  data-theme-instance-id="198254788943"
2728  data-theme-name="W3lead"
2729  data-theme-version="15.2.0"
2730  data-monorail-region="shop_domain"
2731  data-resource-timing-sampling-rate="10"
2732  data-shs="true"
2733  data-shs-beacon="true"
2734  data-shs-export-with-fetch="true"
2735  data-shs-logs-sample-rate="1"
2736  data-shs-beacon-endpoint="https://www.beauteprivee.fr/api/collect"
2737></script>
2737
2738<meta name="shopify-y" content="b24c578c-49a8-4702-9a16-4688fa52cf65" data-expiration="1821947630000"><meta name="shopify-s" content="89f06d1d-04db-44b9-b059-af79f2f33587" data-expiration="1790391830000"><meta name="new-cookie-storage-activated" content="t">
2739</head>
2740
2741        
2742        
2743
2744        
2745
2746        <body class="template-customers template-customers-login ">
2747            
2748            
2749
2750            
2751            
2752
2753            
2754
2755            <div class="added-to-cart fixed bottom-16 left-16 right-16 bg-success-50 border border-success-300 p-16 rounded-button flex flex-row gap-x-8 items-center z-[9] transition-all duration-300 !z-[10000]">
2756	
2757        <svg
2758            class="w-[24px] h-auto"
2759            width="16"
2760            height="16"
2761            viewBox="0 0 16 16"
2762            fill="none"
2763            xmlns="http://www.w3.org/2000/svg"
2764        >
2765            <path class="fill-success-900" fill-rule="evenodd" clip-rule="evenodd" d="M7.99967 1.83325C4.59392 1.83325 1.83301 4.59416 1.83301 7.99992C1.83301 11.4057 4.59392 14.1666 7.99967 14.1666C11.4054 14.1666 14.1663 11.4057 14.1663 7.99992C14.1663 4.59416 11.4054 1.83325 7.99967 1.83325ZM0.833008 7.99992C0.833008 4.04188 4.04163 0.833252 7.99967 0.833252C11.9577 0.833252 15.1663 4.04188 15.1663 7.99992C15.1663 11.958 11.9577 15.1666 7.99967 15.1666C4.04163 15.1666 0.833008 11.958 0.833008 7.99992ZM11.6866 5.31303C11.8818 5.50829 11.8818 5.82488 11.6866 6.02014L7.01989 10.6868C6.82463 10.8821 6.50805 10.8821 6.31279 10.6868L4.31279 8.68681C4.11753 8.49154 4.11753 8.17496 4.31279 7.9797C4.50805 7.78444 4.82463 7.78444 5.01989 7.9797L6.66634 9.62615L10.9795 5.31303C11.1747 5.11777 11.4913 5.11777 11.6866 5.31303Z" fill="#B9ABAD"/>
2766        </svg>
2767
2768
2769	<p class="font-bold text-success-900">Ajouté au panier</p>
2770</div>
2771            <template id="sale-card-template">
2772    <a
2773        href="#"
2774        class="sale-card-link block group bg-mask-8 text-white overflow-hidden transition-colors md-up:hover:bg-mask-16"
2775        data-sale-card-root
2776        data-sale-countdown-card
2777    >
2778        <div class="relative p-4 h-full">
2779            <div class="h-full flex flex-col justify-between relative z-[2]">
2780                <div class="flex justify-between h-full gap-0">
2781                    <div
2782                        class="items-center justify-center shrink-0 my-auto"
2783                        data-sale-card-logo-wrapper
2784                        style="
2785                            display: none;
2786                            width: 162px;
2787                            height: 123px;
2788                        "
2789                    >
2790                        <img
2791                            data-sale-card-logo
2792                            alt=""
2793                            loading="lazy"
2794                            style="
2795                                width: 130px;
2796                                height: 77px;
2797                                object-fit: contain;
2798                            "
2799                        >
2800                    </div>
2801
2802                    <div
2803                        class="flex-col items-end gap-0 self-start"
2804                        data-sale-card-tag-wrapper
2805                        style="display: none;"
2806                    >
2807                        <p
2808                            class="bg-white text-black font-bold whitespace-nowrap overflow-hidden text-ellipsis flex items-center justify-center"
2809                            data-sale-card-tag
2810                            style="max-width: 101px; height: 20px; border-radius: 2px; padding: 4px 8px; font-size: 9px; line-height: 12px;"
2811                        ></p>
2812                    </div>
2813                </div>
2814
2815                <div
2816                    class="absolute right-4 bottom-4 z-[3] justify-end"
2817                    data-sale-card-countdown-wrapper
2818                    style="display: none;"
2819                >
2820                    <w3-home-sale-countdown
2821                        class="home-sale-countdown"
2822                        aria-label="Temps restant avant la fin de la vente"
2823                        hidden
2824                    ></w3-home-sale-countdown>
2825                </div>
2826            </div>
2827
2828            <div class="absolute inset-0 w-full h-full z-[1] custom-gradient"></div>
2829
2830            <img
2831                class="absolute inset-0 w-full h-full object-cover z-[0]"
2832                data-sale-card-image
2833                alt=""
2834                loading="lazy"
2835                width="1140"
2836                style="display: none;"
2837            >
2838        </div>
2839    </a>
2840</template>
2841
2842
2843            <main
2844                id="MainContent"
2845                class="content-for-layout focus-none"
2846                role="main"
2847                tabindex="-1"
2848                data-template-name="login"
2849                data-template-dir="customers"
2850            >
2851                <div id="shopify-section-template--29569756463439__main" class="shopify-section"><div class="login-register-wall w-full flex flex-row h-screen lg:h-[var(--100-vh)] ">
2852    <div class="w-full relative lg:hidden">
2853        <div class="absolute top-64 left-1/2 -translate-x-1/2" style="--header-color: #ffffff">
2854            <svg
2855  class="w-[450px] h-auto xl:w-[350px] lg:w-[120px] beaute-privee"
2856  width="138"
2857  height="20"
2858  viewBox="0 0 138 20"
2859  fill="none"
2860  xmlns="http://www.w3.org/2000/svg"
2861>
2862    <path class="fill-[var(--header-color)]" d="M2.92827 15.4837H0V0.28833H3.11043V6.57693C3.41997 6.12052 3.88154 5.7543 4.49376 5.47827C5.10599 5.20224 5.77574 5.06559 6.50301 5.06559C7.44532 5.06559 8.26299 5.2938 8.95739 5.75021C9.65043 6.20661 10.186 6.84613 10.564 7.66466C10.9406 8.48456 11.1296 9.4452 11.1296 10.5466C11.1296 11.581 10.9242 12.4911 10.5133 13.2769C10.1024 14.0626 9.5299 14.6707 8.79578 15.1011C8.06165 15.5316 7.21659 15.7461 6.26059 15.7461C5.56071 15.7461 4.92383 15.6013 4.35132 15.3129C3.77881 15.0246 3.35834 14.6515 3.08852 14.1938L2.9269 15.4837H2.92827ZM3.13098 10.3854C3.13098 10.8828 3.23507 11.3228 3.44462 11.7054C3.65281 12.088 3.94317 12.3845 4.31297 12.5922C4.68277 12.8013 5.11147 12.9052 5.59495 12.9052C6.07843 12.9052 6.52082 12.7986 6.87829 12.5827C7.2344 12.3681 7.51106 12.0716 7.70692 11.6958C7.90141 11.32 8.00002 10.8828 8.00002 10.3854C8.00002 9.88795 7.90141 9.45204 7.70692 9.07488C7.51106 8.6991 7.23577 8.40394 6.87829 8.18803C6.52082 7.97349 6.09349 7.86554 5.59495 7.86554C5.0964 7.86554 4.68277 7.96939 4.31297 8.17846C3.9418 8.38754 3.65281 8.67997 3.44462 9.05575C3.23644 9.43154 3.13098 9.87565 3.13098 10.3854Z" fill="black"/>
2863    <path class="fill-[var(--header-color)]" d="M17.6148 15.7461C16.6054 15.7461 15.7056 15.5179 14.918 15.0615C14.1305 14.6051 13.5114 13.9765 13.0594 13.1771C12.6075 12.3777 12.3828 11.4608 12.3828 10.4263C12.3828 9.39191 12.602 8.4545 13.0389 7.6551C13.4772 6.8557 14.0867 6.22848 14.8674 5.7707C15.648 5.31429 16.5438 5.08609 17.5532 5.08609C18.6174 5.08609 19.5323 5.30473 20.3007 5.74064C21.069 6.17792 21.6607 6.79557 22.0785 7.59497C22.4962 8.39437 22.7044 9.34545 22.7044 10.4468V11.2326L14.0182 11.2736L14.0593 9.35911H19.6145C19.6145 8.82208 19.4323 8.39574 19.0694 8.08008C18.7064 7.76442 18.2079 7.6059 17.5751 7.6059C17.0492 7.6059 16.6219 7.70566 16.2918 7.9079C15.9617 8.11014 15.7165 8.4217 15.5549 8.84531C15.3933 9.26893 15.3125 9.81006 15.3125 10.4673C15.3125 11.4075 15.5042 12.103 15.8877 12.5526C16.2712 13.0036 16.867 13.2277 17.6751 13.2277C18.2682 13.2277 18.7585 13.1265 19.1502 12.9257C19.5405 12.7234 19.7898 12.4419 19.898 12.0784H22.7468C22.5715 13.1935 22.0196 14.0831 21.091 14.7486C20.1624 15.414 19.0036 15.7461 17.6162 15.7461H17.6148Z" fill="black"/>
2864    <path class="fill-[var(--header-color)]" d="M27.4926 15.7461C26.4284 15.7461 25.5834 15.4537 24.9574 14.8688C24.3315 14.284 24.0179 13.5023 24.0179 12.5212C24.0179 11.5933 24.3384 10.8554 24.978 10.3047C25.6176 9.75403 26.5435 9.43154 27.7556 9.33725L30.5839 9.11588V8.95463C30.5839 8.61847 30.5168 8.33971 30.3825 8.11834C30.2483 7.89697 30.0552 7.72889 29.8073 7.6141C29.558 7.49932 29.2444 7.44329 28.8677 7.44329C28.2076 7.44329 27.7063 7.56354 27.3625 7.80541C27.0187 8.04728 26.8475 8.3971 26.8475 8.85351H24.2617C24.2617 8.08828 24.4561 7.42279 24.8479 6.85843C25.2396 6.29407 25.7943 5.85816 26.5147 5.54796C27.2351 5.23914 28.0733 5.08472 29.0293 5.08472C29.9853 5.08472 30.8441 5.25963 31.5234 5.60809C32.2028 5.95791 32.7219 6.46761 33.0793 7.13993C33.4355 7.81224 33.6149 8.63077 33.6149 9.59825V15.4824H30.8674L30.6661 14.1528C30.5044 14.6092 30.1237 14.9891 29.5252 15.2911C28.9253 15.5931 28.2487 15.7447 27.4954 15.7447L27.4926 15.7461ZM28.5828 13.449C29.1759 13.449 29.6594 13.3055 30.0374 13.0159C30.414 12.7275 30.6031 12.2943 30.6031 11.7163V11.1725L29.0266 11.3132C28.3527 11.3665 27.8789 11.4785 27.6022 11.6453C27.3255 11.8133 27.1886 12.0579 27.1886 12.3804C27.
28641886 12.7426 27.3036 13.0118 27.5323 13.1867C27.7611 13.3616 28.1103 13.449 28.5828 13.449Z" fill="black"/>
2865    <path class="fill-[var(--header-color)]" d="M42.5408 5.40722H45.6512V15.4837H42.7229L42.5202 14.355C42.2107 14.7718 41.7697 15.108 41.1972 15.3621C40.6247 15.6177 40.0357 15.7447 39.4303 15.7447C38.2853 15.7447 37.38 15.3854 36.713 14.6666C36.046 13.9478 35.7132 12.9708 35.7132 11.7341V5.40585H38.8236V10.6054C38.8236 11.4253 38.9715 12.0265 39.2673 12.4091C39.5632 12.7917 40.0275 12.9831 40.6616 12.9831C41.3341 12.9831 41.8162 12.7986 42.1066 12.4283C42.3956 12.0593 42.5408 11.4649 42.5408 10.645V5.40448V5.40722Z" fill="black"/>
2866    <path class="fill-[var(--header-color)]" d="M47.0455 5.40722H53.9936V7.98715H47.0455V5.40722ZM52.0748 15.4837H48.9643V2.28341H52.0748V15.4837Z" fill="black"/>
2867    <path class="fill-[var(--header-color)]" d="M59.9734 15.7461C58.964 15.7461 58.0642 15.5179 57.2766 15.0615C56.4891 14.6051 55.87 13.9765 55.418 13.1771C54.9661 12.3777 54.7414 11.4608 54.7414 10.4263C54.7414 9.39191 54.9606 8.4545 55.3975 7.6551C55.8358 6.8557 56.4453 6.22848 57.226 5.7707C58.0066 5.31429 58.9024 5.08609 59.9118 5.08609C60.976 5.08609 61.8909 5.30473 62.6593 5.74064C63.4277 6.17792 64.0193 6.79557 64.4371 7.59497C64.8548 8.39437 65.063 9.34545 65.063 10.4468V11.2326L56.3768 11.2736L56.4179 9.35912H61.9731C61.9731 8.82208 61.7909 8.39574 61.428 8.08008C61.065 7.76442 60.5665 7.6059 59.9337 7.6059C59.4078 7.6059 58.9805 7.70566 58.6504 7.9079C58.3203 8.11014 58.0751 8.4217 57.9135 8.84531C57.7519 9.26893 57.6711 9.81006 57.6711 10.4673C57.6711 11.4075 57.8628 12.103 58.2463 12.5526C58.6298 13.0036 59.2256 13.2277 60.0337 13.2277C60.6268 13.2277 61.1171 13.1265 61.5088 12.9257C61.8991 12.7234 62.1484 12.4419 62.2566 12.0784H65.1055C64.9301 13.1935 64.3782 14.0831 63.4496 14.7486C62.521 15.414 61.3622 15.7461 59.9748 15.7461H59.9734ZM63.3263 0.832195L61.0842 4.17737H58.8421L60.5391 0.832195H63.3263Z" fill="black"/>
2868    <path class="fill-[var(--header-color)]" d="M73.6492 20.0014V5.08745H76.5775L76.7391 6.3173C77.0212 5.84723 77.4595 5.47144 78.0526 5.18857C78.6456 4.90571 79.299 4.76496 80.0125 4.76496C80.9548 4.76496 81.7835 4.97267 82.497 5.38945C83.2106 5.80623 83.7694 6.40065 84.1735 7.17272C84.5775 7.94479 84.7788 8.87538 84.7788 9.96447C84.7788 11.0536 84.5939 11.9691 84.2228 12.7958C83.8516 13.6212 83.3147 14.2703 82.6066 14.7404C81.8999 15.2104 81.0411 15.4455 80.0317 15.4455C79.3305 15.4455 78.6853 15.3252 78.0923 15.0834C77.4993 14.8415 77.0555 14.5327 76.7597 14.1569V20.0014H73.6492ZM76.7802 10.1257C76.7802 10.6231 76.8843 11.0631 77.0938 11.4457C77.302 11.8284 77.5924 12.1249 77.9622 12.3326C78.332 12.5417 78.7607 12.6455 79.2442 12.6455C79.7276 12.6455 80.17 12.5389 80.5275 12.323C80.8836 12.1085 81.1603 11.812 81.3561 11.4362C81.5506 11.0604 81.6492 10.6231 81.6492 10.1257C81.6492 9.62831 81.5506 9.1924 81.3561 8.81525C81.1603 8.43946 80.885 8.14293 80.5275 7.92839C80.17 7.71385 79.7427 7.6059 79.2442 7.6059C78.7456 7.6059 78.332 7.70976 77.9622 7.91883C77.591 8.12654 77.302 8.41897 77.0938 8.79612C76.8857 9.1719 76.7802 9.61601 76.7802 10.1257Z" fill="black"/>
2869    <path class="fill-[var(--header-color)]" d="M93.5253 5.08746V8.01039H92.5351C91.6462 8.01039 90.949 8.22493 90.445 8.65537C89.9396 9.08445 89.6876 9.79776 89.6876 10.7912V15.164H86.5772V5.10659H89.5054L89.7479 7.26291H89.4644C89.5986 6.5906 89.9054 6.03717 90.3834 5.59989C90.8614 5.16261 91.5106 4.94534 92.3324 4.94534C92.5214 4.94534 92.7131 4.95491 92.9076 4.9754C93.1021 4.9959 93.3075 5.0328 93.5239 5.08609L93.5253 5.08746Z" fill="black"/>
2870    <path class="fill-[var(--header-color)]" d="M96.5577 3.52829C96.0591 3.52829 95.6387 3.35747 95.2949 3.01448C94.9511 2.67149 94.7799 2.25198 94.7799 1.75458C94.7799 1.25717 94.9511 0.840394 95.2949 0.504236C95.6387 0.168079 96.0591 0 96.5577 0C97.0562 0 97.4562 0.168079 97.7999 0.504236C98.1437 0.840394 98.3149 1.25717 98.3149 1.75458C98.3149 2.25198 98.1437 2.67149 97.7999 3.01448C97.4562 3.35747 97.0425 3.52829 96.5577 3.52829ZM136.243 15.1995C135.744 15.1995 135.324 15.0287 134.98 14.6857C134.636 14.3427 134.465 13.9232 134.465 13.4258C134.465 12.9284 134.636 12.5116 134.98 12.1755C135.324 11.8393 135.744 11.6712 136.243 11.6712C136.741 11.6712 137.141 11.8393 137.485 12.1755C137.829 12.5116 138 12.9284 138 13.4258C138 13.9232 137.829 14.3427 137.485 14.6857C137.141 15.0287 136.728 15.1995 136.243 15.1995ZM95.0223 15.1763V5.09975H98.1328V15.1763H95.0223Z" fill="black"/>
2871    <path class="fill-[var(--header-color)]" d="M103.422 15.164L99.4832 5.08746H102.836L104.069 8.61438C104.325 9.35365 104.544 10.015 104.725 10.5999C104.907 11.1847 105.018 11.5906 105.058 11.8188C105.125 11.5236 105.256 11.0795 105.452 10.4878C105.647 9.89615 105.873 9.27166 106.129 8.61301L107.482 5.08609H110.714L106.493 15.1626H103.422V15.164Z" fill="black"/>
2872    <path class="fill-[var(--header-color)]" d="M116.169 15.4263C115.16 15.4263 114.26 15.1981 113.473 14.7417C112.685 14.2853 112.066 13.6567 111.614 12.8573C111.162 12.0579 110.937 11.141 110.937 10.1066C110.937 9.07215 111.157 8.13474 111.593 7.33534C112.032 6.53594 112.641 5.90872 113.422 5.45094C114.203 4.99453 115.098 4.76633 116.108 4.76633C117.172 4.76633 118.087 4.98497 118.855 5.42088C119.624 5.85816 120.215 6.47581 120.633 7.27521C121.051 8.07461 121.259 9.02569 121.259 10.1271V10.9128L112.573 
287210.9538L112.614 9.03936H118.169C118.169 8.50232 117.987 8.07598 117.624 7.76032C117.261 7.44466 116.762 7.28614 116.13 7.28614C115.604 7.28614 115.176 7.3859 114.846 7.58814C114.516 7.79038 114.271 8.10194 114.11 8.52555C113.948 8.94917 113.867 9.4903 113.867 10.1476C113.867 11.0877 114.059 11.7833 114.442 12.2329C114.826 12.6838 115.422 12.9079 116.23 12.9079C116.823 12.9079 117.313 12.8068 117.705 12.6059C118.095 12.4037 118.344 12.1222 118.453 11.7587H121.301C121.126 12.8737 120.574 13.7633 119.646 14.4288C118.717 15.0943 117.558 15.4263 116.171 15.4263H116.169ZM119.522 0.512435L117.28 3.85761H115.038L116.735 0.512435H119.522Z" fill="black"/>
2873    <path class="fill-[var(--header-color)]" d="M127.784 15.4263C126.774 15.4263 125.875 15.1981 125.087 14.7417C124.3 14.2853 123.68 13.6567 123.229 12.8573C122.777 12.0579 122.552 11.141 122.552 10.1066C122.552 9.07215 122.771 8.13474 123.208 7.33534C123.645 6.53594 124.256 5.90872 125.036 5.45094C125.817 4.99453 126.713 4.76633 127.722 4.76633C128.786 4.76633 129.701 4.98497 130.47 5.42088C131.238 5.85816 131.83 6.47581 132.248 7.27521C132.665 8.07461 132.873 9.02569 132.873 10.1271V10.9128L124.187 10.9538L124.228 9.03935H129.784C129.784 8.50232 129.601 8.07598 129.238 7.76032C128.876 7.44466 128.377 7.28614 127.744 7.28614C127.218 7.28614 126.791 7.3859 126.461 7.58814C126.131 7.79038 125.886 8.10194 125.724 8.52555C125.562 8.94917 125.482 9.4903 125.482 10.1476C125.482 11.0877 125.673 11.7833 126.057 12.2329C126.44 12.6838 127.036 12.9079 127.844 12.9079C128.437 12.9079 128.928 12.8068 129.319 12.6059C129.71 12.4037 129.959 12.1222 130.067 11.7587H132.916C132.741 12.8737 132.189 13.7633 131.26 14.4288C130.331 15.0943 129.173 15.4263 127.785 15.4263H127.784Z" fill="black"/>
2874</svg>
2875
2876        </div>
2877        
2878        
2879        <img src="//www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&amp;width=2740" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&amp;width=352 352w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&amp;width=832 832w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&amp;width=1200 1200w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&amp;width=1920 1920w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&amp;width=2740 2740w" width="2740" height="2160" class="h-full w-full object-cover">
2880        
2881            <a href="/?from_account=true" class="absolute left-1/2 -translate-x-1/2 bottom-64 button-primary button-small gap-x-8 cursor-pointer">
2882                Voir les ventes
2883                <svg
2884    width="14"
2885    height="14"
2886    fill="none"
2887    stroke="currentColor"
2888    stroke-width="1.5"
2889    class="icon icon-arrow-right "
2890>
2891    <use href="#arrow-right"/>
2892</svg>
2893
2894            </a>
2895        
2896    </div>
2897    <div class="bg-white w-[550px] min-w-[550px] px-24 pt-32 overflow-y-auto mb-16 h-full lg:w-full lg:min-w-[initial] relative">
2898        <div class="icon-mobile hidden lg:flex absolute top-[26px] right-24 see-homepage">
2899            <svg
2900    width="24"
2901    height="24"
2902    fill="none"
2903    stroke="currentColor"
2904    stroke-width="1.5"
2905    class="icon icon-xmark "
2906>
2907    <use href="#xmark"/>
2908</svg>
2909
2910        </div>
2911        
2912            <w3-authentification class="h-full">
2913    <div class="flex flex-row items-center justify-between mb-16">
2914        <p class="h1 font-semibold">
2915            <span class="authentification__div login ">Connexion</span>
2916            <span class="authentification__div register hidden">Créer mon compte</span>
2917            <span class="authentification__div recover hidden">Mot de passe oublié ?</span>
2918        </p>
2919        
2920    </div>
2921
2922    
2923    
2924
2925    <div class="flex flex-row gap-x-4 mb-16 hidden hidden">
2926        
2927            <div class="w-full">
2928                <img src="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-1.jpg?v=1746437189&amp;width=320" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-1.jpg?v=1746437189&amp;width=320 320w" width="320" height="260" class="w-full h-full max-h-[130px] object-cover">
2929            </div>
2930        
2931            <div class="w-full">
2932                <img src="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-2.jpg?v=1746437190&amp;width=320" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-2.jpg?v=1746437190&amp;width=320 320w" width="320" height="260" class="w-full h-full max-h-[130px] object-cover">
2933            </div>
2934        
2935            <div class="w-full">
2936                <img src="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-3.jpg?v=1746437189&amp;width=320" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-3.jpg?v=1746437189&amp;width=320 320w" width="320" height="260" class="w-full h-full max-h-[130px] object-cover">
2937            </div>
2938        
2939    </div>
2940
2941    <div class="authentification__wrapper-link flex flex-row items-center my-16 mt-0 gap-x-16 justify-center">
2942        <p
2943            class="h3 authentification__link active text-gray-0 border-b-[3px] border-white cursor-pointer"
2944            link="login"
2945        >
2946            Connexion
2947        </p>
2948        <div class="h-[30px] w-[1px] bg-gray-4"></div>
2949        <p
2950            class="h3 authentification__link text-gray-0 border-b-[3px] border-white cursor-pointer "
2951            link="register"
2952        >
2953            Inscription
2954        </p>
2955    </div>
2956    <div class="max-w-[350px] w-full mx-auto h-[calc(100%-255px+13px)]">
2957        <div class="login--container authentification__div login flex flex-col h-full ">
2958    
2959    
2960    
2961
2962    <bp-authentication url="https://api.beauteprivee.fr/shopify-authentification/customer/login" key="LtdBZY3zSVl9b5Q40P1QM7JyhJwIcwrP">
2963        
2964        
2965
2966        <form method="post" action="/account/login" id="customer_login" accept-charset="UTF-8" data-login-with-shop-sign-in="true" novalidate="novalidate"><input type="hidden" name="form_type" value="customer_login" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="return_to" value="back" />
2967            <p class="footnote my-24 mt-0 text-center max-w-[300px] mx-auto">
2968                Indiquez votre adresse mail pour vous connecter ou créez un compte.
2969            </p>
2970            <div class="flex flex-col gap-y-16">
2971                <div
2972                    class="hidden font-bold text-success-900 text-center | js-recover-success"
2973                    tabindex="-1"
2974                    autofocus
2975                >
2976                    Si votre adresse e-mail est correcte, vous avez reçu un message pour réinitialiser votre mot de passe.
2977                </div><div class="flex flex-col">
2978                    <p class="font-bold mb-4">Adresse e-mail</p>
2979                    
2980
2981
2982<div class="form-control ">
2983    <div class="form-control__inner "><input
2984                id="input--login-customeremail"
2985                class="form-control__input  w-full form-text"
2986                type="email"
2987                name="customer[email]"
2988                placeholder=""
2989                
2990	
2991	
2992	
2993	
2994	
2995	
2996	autocomplete="email"
2997	autocapitalize="off"
2998	
2999	required
3000	autocorrect="off"
3001	
3002	
3003
3004            >
3005    </div>
3006
3007    
3008</div>
3009
3010                </div><div class="flex flex-col">
3011                        <p class="font-bold mb-4">Mot de passe</p>
3012                        
3013
3014
3015<div class="form-control ">
3016    <div class="form-control__inner relative"><input
3017                id="input--login-customerpassword"
3018                class="form-control__input  w-full form-text"
3019                type="password"
3020                name="customer[password]"
3021                placeholder=""
3022                
3023	
3024	
3025	
3026	
3027	
3028	
3029	autocomplete="password"
3030	autocapitalize="off"
3031	
3032	required
3033	autocorrect="off"
3034	
3035	
3036
3037            >
3038            <div class="form-control__icon absolute top-1/2 -translate-y-1/2 right-0 icon-desktop-mobile">
3039                <button
3040                    type="button"
3041                    class="form-control-button"
3042                    onclick="const i = this.closest('.form-control__inner').querySelector('input'); i.type = i.type === 'text' ? 'password' : 'text'; this.classList.toggle('form-control-button--active')"
3043                    
3044	
3045
3046                >
3047                    <span><svg
3048    width="18"
3049    height="18"
3050    fill="none"
3051    stroke="currentColor"
3052    stroke-width="1.5"
3053    class="icon icon-eye-off "
3054>
3055    <use href="#eye-off"/>
3056</svg>
3057</span>
3058                    <span style="display: none;"><svg
3059    width="18"
3060    height="18"
3061    fill="none"
3062    stroke="currentColor"
3063    stroke-width="1.5"
3064    class="icon icon-eye "
3065>
3066    <use href="#eye"/>
3067</svg>
3068</span>
3069                </button>
3070            </div>
3071        
3072    </div>
3073
3074    
3075</div>
3076
3077                    </div></div>
3078
3079            <div class="flex flex-col items-center gap-y-24 mt-16">
3080                <button class="login-button button-primary button-large w-full relative" type="submit">
3081                    <span class="login-button-loading absolute animate-spin origin-center left-1/2 top-[14px] -translate-x-1/2 -translate-y-1/2 w-[20px] h-[20px] border-creme border-[3px] border-r-gray-0 rounded-full z-[9]"></span>
3082                    <span class="login-button-label">Se connecter</span>
3083                </button>
3084                <p
3085                    class="authentification__link--special footnote border-b border-black hover:opacity-70 duration-500 transition-all cursor-pointer"
3086                    link="recover"
3087                >
3088                    Mot de passe oublié ?
3089                </p>
3090            </div>
3091        <input type="hidden" name="return_url" value="/account?m=wishlist" /></form>
3092    </bp-authentication>
3093    <div class="mt-auto mx-auto pb-16">
3094        <p class="login-to-register footnote button-tertiary button-small w-fit">Pas de compte ? Inscrivez-vous.</p>
3095    </div>
3096</div>
3097
3098        
3099
3100
3101
3102<bp-account-invitation
3103    url="https://api.beauteprivee.fr/shopify-authentification/customer/send-invitation"
3104    key="LtdBZY3zSVl9b5Q40P1QM7JyhJwIcwrP"
3105    class="recover--container authentification__div recover hidden"
3106><form method="post" action="/account/recover" accept-charset="UTF-8"><input type="hidden" name="form_type" value="recover_customer_password" /><input type="hidden" name="utf8" value="✓" /><p class="footnote my-24 mt-0 text-center max-w-[300px] mx-auto">
3107            Saisissez l’adresse email utilisée lors de la création de votre compte pour recevoir un lien de réinitialisation. 
3108        </p>
3109
3110        <div class="flex items-center justify-center px-16">
3111            <div class="response-api-message font-bold text-success-900 text-center pb-16 hidden">Un mail vient de vous être envoyé, veuillez vérifier votre boite mail pour activer votre compte</div>
3112            <div class="response-api-message-error font-bold text-error-900 text-center pb-16 hidden">Une erreur est survenue, veuillez réessayer plus tard ou contacter notre support.</div>
3113        </div>
3114
3115        <div class="flex flex-col gap-y-16"><div class="flex flex-col">
3116                <p class="font-bold mb-4">Adresse e-mail</p>
3117                
3118
3119
3120<div class="form-control ">
3121    <div class="form-control__inner "><input
3122                id="input--recover-email"
3123                class="form-control__input  w-full form-text"
3124                type="email"
3125                name="email"
3126                placeholder=""
3127                
3128	
3129	
3130	
3131	
3132	
3133	
3134	autocomplete="email"
3135	autocapitalize="off"
3136	
3137	required
3138	autocorrect="off"
3139	
3140	
3141
3142            >
3143    </div>
3144
3145    
3146</div>
3147
3148            </div>
3149
3150            
3151        </div>
3152
3153        <button class="button-primary button-large w-full mt-16" type="submit">
3154            <span>Réinitialiser mon mot de passe</span>
3155        </button>
3156        <div class="mt-24 flex justify-center">
3157            <p class="recover-to-login footnote button-tertiary button-small w-fit ">
3158                Déjà membre ? Connectez-vous.
3159            </p>
3160        </div></form></bp-account-invitation>
3161
3162        <div class="authentification__div register hidden flex flex-col h-full">
3163    <form method="post" action="/account" id="create_customer" accept-charset="UTF-8" data-login-with-shop-sign-up="true"><input type="hidden" name="form_type" value="create_customer" /><input type="hidden" name="utf8" value="✓" />
3164        <div class="flex flex-col gap-y-16">
3165            
3166
3167            <div class="flex flex-col">
3168                <div class="flex flex-row gap-x-24">
3169                    <div class="form-item ">
3170                        <input
3171                            type="radio"
3172                            name="customer[note][gender]"
3173                            value="woman"
3174                            id="radio-woman"
3175                            class="form-radio cursor-pointer"
3176                            required
3177                            checked
3178                        >
3179                        <label for="radio-woman-template--29569756463439__main" class="cursor-pointer footnote">Madame</label>
3180                    </div>
3181                    <div class="form-item">
3182                        <input
3183                            type="radio"
3184                            name="customer[note][gender]"
3185                            value="man"
3186                            id="radio-man"
3187                            class="form-radio cursor-pointer"
3188                        >
3189                        <label for="radio-man" class="cursor-pointer footnote">Monsieur</label>
3190                    </div>
3191                    <div class="form-item">
3192                        <input
3193                            type="radio"
3194                            name="customer[note][gender]"
3195                            value="other"
3196                            id="radio-other"
3197                            class="form-radio cursor-pointer"
3198                        >
3199                        <label for="radio-other" class="cursor-pointer footnote">Autre</label>
3200                    </div>
3201                </div>
3202            </div>
3203
3204            <div class="flex flex-col register-first-name">
3205                <p class="font-bold mb-4">Prénom</p>
3206                
3207
3208
3209<div class="form-control ">
3210    <div class="form-control__inner "><input
3211                id="input--register-customerfirst_name"
3212                class="form-control__input  w-full form-text"
3213                type="text"
3214                name="customer[first_name]"
3215                placeholder=""
3216                
3217	
3218	
3219	
3220	
3221	
3222	
3223	
3224	
3225	
3226	required
3227	autocorrect="off"
3228	
3229	
3230
3231            >
3232    </div>
3233
3234    
3235</div>
3236
3237            </div>
3238
3239            <div class="flex flex-col register-last-name">
3240                <p class="font-bold mb-4">Nom</p>
3241                
3242
3243
3244<div class="form-control ">
3245    <div class="form-control__inner "><input
3246                id="input--register-customerlast_name"
3247                class="form-control__input  w-full form-text"
3248                type="text"
3249                name="customer[last_name]"
3250                placeholder=""
3251                
3252	
3253	
3254	
3255	
3256	
3257	
3258	
3259	
3260	
3261	required
3262	autocorrect="off"
3263	
3264	
3265
3266            >
3267    </div>
3268
3269    
3270</div>
3271
3272            </div>
3273
3274            <div class="flex flex-col register-email">
3275                <p class="font-bold mb-4">Adresse e-mail</p>
3276                
3277
3278
3279<div class="form-control ">
3280    <div class="form-control__inner "><input
3281                id="input--register-customeremail"
3282                class="form-control__input  w-full form-text"
3283                type="email"
3284                name="customer[email]"
3285                placeholder=""
3286                
3287	
3288	
3289	
3290	
3291	
3292	
3293	autocomplete="email"
3294	autocapitalize="off"
3295	
3296	required
3297	autocorrect="off"
3298	
3299	
3300
3301            >
3302    </div>
3303
3304    
3305</div>
3306
3307            </div>
3308
3309            <div class="flex flex-col">
3310                <p class="font-bold mb-4">Mot de passe</p>
3311                
3312
3313
3314<div class="form-control ">
3315    <div class="form-control__inner relative"><input
3316                id="input--register-customerpassword"
3317                class="form-control__input  w-full form-text"
3318                type="password"
3319                name="customer[password]"
3320                placeholder=""
3321                
3322	
3323	
3324	
3325	
3326	
3327	
3328	autocomplete="password"
3329	autocapitalize="off"
3330	
3331	required
3332	autocorrect="off"
3333	
3334	
3335
3336            >
3337            <div class="form-control__icon absolute top-1/2 -translate-y-1/2 right-0 icon-desktop-mobile">
3338                <button
3339                    type="button"
3340                    class="form-control-button"
3341                    onclick="const i = this.closest('.form-control__inner').querySelector('input'); i.type = i.type === 'text' ? 'password' : 'text'; this.classList.toggle('form-control-button--active')"
3342                    
3343	
3344
3345                >
3346                    <span><svg
3347    width="18"
3348    height="18"
3349    fill="none"
3350    stroke="currentColor"
3351    stroke-width="1.5"
3352    class="icon icon-eye-off "
3353>
3354    <use href="#eye-off"/>
3355</svg>
3356</span>
3357                    <span style="display: none;"><svg
3358    width="18"
3359    height="18"
3360    fill="none"
3361    stroke="currentColor"
3362    stroke-width="1.5"
3363    class="icon icon-eye "
3364>
3365    <use href="#eye"/>
3366</svg>
3367</span>
3368                </button>
3369            </div>
3370        
3371    </div>
3372
3373    
3374</div>
3375
3376            </div>
3377
3378            <div class="border-gray-5 rounded-button bg-gray-6 px-16 py-8 grid grid-cols-[calc(60%-2px)_calc(40%-2px)] gap-x-4 gap-y-8">
3379                <div class="condition flex flex-row items-center gap-x-8" condition="characters">
3380                    
3381        <svg
3382            class=""
3383            width="16"
3384            height="16"
3385            viewBox="0 0 16 16"
3386            fill="none"
3387            xmlns="http://www.w3.org/2000/svg"
3388        >
3389            <path class="" fill-rule="evenodd" clip-rule="evenodd" d="M7.99967 1.83325C4.59392 1.83325 1.83301 4.59416 1.83301 7.99992C1.83301 11.4057 4.59392 14.1666 7.99967 14.1666C11.4054 14.1666 14.1663 11.4057 14.1663 7.99992C14.1663 4.59416 11.4054 1.83325 7.99967 1.83325ZM0.833008 7.99992C0.833008 4.04188 4.04163 0.833252 7.99967 0.833252C11.9577 0.833252 15.1663 4.04188 15.1663 7.99992C15.1663 11.958 11.9577 15.1666 7.99967 15.1666C4.04163 15.1666 0.833008 11.958 0.833008 7.99992ZM11.6866 5.31303C11.8818 5.50829 11.8818 5.82488 11.6866 6.02014L7.01989 10.6868C6.82463 10.8821 6.50805 10.8821 6.31279 10.6868L4.31279 8.68681C4.11753 8.49154 4.11753 8.17496 4.31279 7.9797C4.50805 7.78444 4.82463 7.78444 5.01989 7.9797L6.66634 9.62615L10.9795 5.31303C11.1747 5.11777 11.4913 5.11777 11.6866 5.31303Z" fill="#B9ABAD"/>
3390        </svg>
3391
3392
3393                    <p class="caption text-gray-1">8 caractères minimum</p>
3394                </div>
3395                <div class="condition flex flex-row items-center gap-x-8" condition="number">
3396                    
3397        <svg
3398            class=""
3399            width="16"
3400            height="16"
3401            viewBox="0 0 16 16"
3402            fill="none"
3403            xmlns="http://www.w3.org/2000/svg"
3404        >
3405            <path class="" fill-rule="evenodd" clip-rule="evenodd" d="M7.99967 1.83325C4.59392 1.83325 1.83301 4.59416 1.83301 7.99992C1.83301 11.4057 4.59392 14.1666 7.99967 14.1666C11.4054 14.1666 14.1663 11.4057 14.1663 7.99992C14.1663 4.59416 11.4054 1.83325 7.99967 1.83325ZM0.833008 7.99992C0.833008 4.04188 4.04163 0.833252 7.99967 0.833252C11.9577 0.833252 15.1663 4.04188 15.1663 7.99992C15.1663 11.958 11.9577 15.1666 7.99967 15.1666C4.04163 15.1666 0.833008 11.958 0.833008 7.99992ZM11.6866 5.31303C11.8818 5.50829 11.8818 5.82488 11.6866 6.02014L7.01989 10.6868C6.82463 10.8821 6.50805 10.8821 6.31279 10.6868L4.31279 8.68681C4.11753 8.49154 4.11753 8.17496 4.31279 7.9797C4.50805 7.78444 4.82463 7.78444 5.01989 7.9797L6.66634 9.62615L10.9795 5.31303C11.1747 5.11777 11.4913 5.11777 11.6866 5.31303Z" fill="#B9ABAD"/>
3406        </svg>
3407
3408
3409                    <p class="caption text-gray-1">1 chiffre</p>
3410                </div>
3411                <div class="condition flex flex-row items-center gap-x-8" condition="special">
3412                    
3413        <svg
3414            class=""
3415            width="16"
3416            height="16"
3417            viewBox="0 0 16 16"
3418            fill="none"
3419            xmlns="http://www.w3.org/2000/svg"
3420        >
3421            <path class="" fill-rule="evenodd" clip-rule="evenodd" d="M7.99967 1.83325C4.59392 1.83325 1.83301 4.59416 1.83301 7.99992C1.83301 11.4057 4.59392 14.1666 7.99967 14.1666C11.4054 14.1666 14.1663 11.4057 14.1663 7.99992C14.1663 4.59416 11.4054 1.83325 7.99967 1.83325ZM0.833008 7.99992C0.833008 4.04188 4.04163 0.833252 7.99967 0.833252C11.9577 0.833252 15.1663 4.04188 15.1663 7.99992C15.1663 11.958 11.9577 15.1666 7.99967 15.1666C4.04163 15.1666 0.833008 11.958 0.833008 7.99992ZM11.6866 5.31303C11.8818 5.50829 11.8818 5.82488 11.6866 6.02014L7.01989 10.6868C6.82463 10.8821 6.50805 10.8821 6.31279 10.6868L4.31279 8.68681C4.11753 8.49154 4.11753 8.17496 4.31279 7.9797C4.50805 7.78444 4.82463 7.78444 5.01989 7.9797L6.66634 9.62615L10.9795 5.31303C11.1747 5.11777 11.4913 5.11777 11.6866 5.31303Z" fill="#B9ABAD"/>
3422        </svg>
3423
3424
3425                    <p class="caption text-gray-1">1 caractère spécial (&amp;, @...)</p>
3426                </div>
3427                <div class="condition flex flex-row items-center gap-x-8" condition="uppercase">
3428                    
3429        <svg
3430            class=""
3431            width="16"
3432            height="16"
3433            viewBox="0 0 16 16"
3434            fill="none"
3435            xmlns="http://www.w3.org/2000/svg"
3436        >
3437            <path class="" fill-rule="evenodd" clip-rule="evenodd" d="M7.99967 1.83325C4.59392 1.83325 1.83301 4.59416 1.83301 7.99992C1.83301 11.4057 4.59392 14.1666 7.99967 14.1666C11.4054 14.1666 14.1663 11.4057 14.1663 7.99992C14.1663 4.59416 11.4054 1.83325 7.99967 1.83325ZM0.833008 7.99992C0.833008 4.04188 4.04163 0.833252 7.99967 0.833252C11.9577 0.833252 15.1663 4.04188 15.1663 7.99992C15.1663 11.958 11.9577 15.1666 7.99967 15.1666C4.04163 15.1666 0.833008 11.958 0.833008 7.99992ZM11.6866 5.31303C11.8818 5.50829 11.8818 5.82488 11.6866 6.02014L7.01989 10.6868C6.82463 10.8821 6.50805 10.8821 6.31279 10.6868L4.31279 8.68681C4.11753 8.49154 4.11753 8.17496 4.31279 7.9797C4.50805 7.78444 4.82463 7.78444 5.01989 7.9797L6.66634 9.62615L10.9795 5.31303C11.1747 5.11777 11.4913 5.11777 11.6866 5.31303Z" fill="#B9ABAD"/>
3438        </svg>
3439
3440
3441                    <p class="caption text-gray-1">1 majuscule</p>
3442                </div>
3443            </div>
3444
3445            <div class="flex flex-col register-birthday">
3446                <div class="flex flex-row justify-between">
3447                    <p class="font-bold mb-4">Date de naissance</p>
3448                    <p class="body-small text-gray-0">Facultatif</p>
3449                </div>
3450                
3451
3452
3453<div class="form-control ">
3454    <div class="form-control__inner relative"><input
3455                id="input--register-customernotebirthday"
3456                class="form-control__input  w-full form-text"
3457                type="date"
3458                name="customer[note][birthday]"
3459                placeholder=""
3460                
3461	
3462	
3463	
3464	
3465	
3466	
3467	autocomplete="password"
3468	autocapitalize="off"
3469	
3470	
3471	autocorrect="off"
3472	
3473	
3474
3475            >
3476            <button
3477                type="button"
3478                class="absolute bg-transparent w-[calc(100%-2px)] h-[calc(100%-2px)] top-[1px] left-[1px] z-[1] md:hidden"
3479                onclick="this.closest('.form-control__inner')?.querySelector('input')?.showPicker()"
3480            ></button>
3481            <div class="form-control__icon absolute top-1/2 -translate-y-1/2 right-[1px] bg-white">
3482                <div
3483                    class="form-control-button w-[42px] min-w-[42px] h-[42px] flex justify-center items-center"
3484                    
3485	
3486
3487                >
3488                    <span><svg
3489    width="18"
3490    height="18"
3491    fill="none"
3492    stroke="currentColor"
3493    stroke-width="1.5"
3494    class="icon icon-calendar "
3495>
3496    <use href="#calendar"/>
3497</svg>
3498</span>
3499                </div>
3500            </div>
3501        
3502    </div>
3503
3504    
3505</div>
3506
3507            </div>
3508
3509            <div class="form-item">
3510                <input id="checkbox-marketing" type="checkbox" name="customer[accepts_marketing]" class="form-checkbox">
3511                <a href="/policies/terms-of-sale" class="footnote">J’accepte <u>la politique de confidentialité et les conditions générales d’utilisation</u>.</a>
3512            </div>
3513        </div>
3514
3515        <button class="register-submit button-primary button-large w-full mt-16" type="submit" disabled>
3516            <span>S&#39;inscrire</span>
3517        </button>
3518        <p class="text-center caption mt-12">En vous inscrivant, vous recevrez les offres de Beauté Privée. Vous pouvez vous désinscrire à tout moment via nos communications ou depuis « Mon compte ».</p>
3519    </form>
3520
3521    <div class="mt-auto mx-auto pb-16">
3522        <p class="register-to-login footnote button-tertiary button-small w-fit ">Déjà membre ? Connectez-vous.</p>
3523    </div>
3524</div>
3525
3526    </div>
3527</w3-authentification>
3528
3529        
3530    </div>
3531</div>
3532</div>
3533            </main>
3534
3535            
3536
3537            <w3-back-to-top class="back-to-top cursor-pointer fixed bottom-32 right-32 z-[9999] translate-y-[calc(100%+32px)] transition-transform">
3538    <svg
3539    width="16"
3540    height="16"
3541    fill="none"
3542    stroke="currentColor"
3543    stroke-width="1.5"
3544    class="icon icon-arrow-up "
3545>
3546    <use href="#arrow-up"/>
3547</svg>
3548
3549</w3-back-to-top>
3550
3551
3552            
3552<script>
3553                
3554                document.addEventListener('DOMContentLoaded', function() {
3555                    const vh = window.innerHeight * 0.01;
3556                    document.documentElement.style.setProperty('--window-inner-height', `${vh}px`);
3557                });
3558
3559                window.addEventListener('resize', () => {
3560                    const vh = window.innerHeight * 0.01;
3561                    document.documentElement.style.setProperty('--window-inner-height', `${vh}px`);
3562                });
3563            </script>
3563
3564
3565            
3566
3567
3568<svg style="display: none">
3569    <defs>
3570        <symbol id="mail_open" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3571            <path d="M7 12L12 15.5L17 12" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3572            <path d="M2 20V9.13238C2 8.42985 2.3686 7.77884 2.97101 7.41739L10.971 2.61739C11.6044 2.23738 12.3956 2.23738 13.029 2.6174L21.029 7.4174C21.6314 7.77884 22 8.42985 22 9.13238V20C22 21.1046 21.1046 22 20 22H4C2.89543 22 2 21.1046 2 20Z" stroke="#000000" stroke-width="1.5"/>
3573        </symbol>
3574
3575        <symbol id="eye" viewBox="0 0 24 24" fill="none" color="#000000">
3576            <path d="M3 13C6.6 5 17.4 5 21 13" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3577            <path d="M12 17C10.3431 17 9 15.6569 9 14C9 12.3431 10.3431 11 12 11C13.6569 11 15 12.3431 15 14C15 15.6569 13.6569 17 12 17Z" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3578        </symbol>
3579
3580        <symbol id="eye-off" viewBox="0 0 24 24" stroke-width="1.5" fill="none" color="#000000">
3581            <path d="M19.5 16L17.0248 12.6038" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3582            <path d="M12 17.5V14" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3583            <path d="M4.5 16L6.96895 12.6124" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3584            <path d="M3 8C6.6 16 17.4 16 21 8" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3585        </symbol>
3586
3587        
3588        <symbol id="search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
3589            <circle cx="11" cy="11" r="8"></circle>
3590            <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
3591        </symbol>
3592
3593        <symbol id="home" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
3594            <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
3595            <polyline points="9 22 9 12 15 12 15 22"></polyline>
3596        </symbol>
3597
3598        
3599        <symbol id="facebook" width="24" height="24" viewBox="0 0 512 512">
3600            <path fill="currentColor" d="M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z"/>
3601        </symbol>
3602
3603        <symbol id="instagram" width="24" height="24" viewBox="0 0 448 512">
3604            <path fill="currentColor" d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"/>
3605        </symbol>
3606
3607        <symbol id="pinterest" width="24" height="24" viewBox="0 0 496 512">
3608            <path fill="currentColor" d="M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3 .8-3.4 5-20.3 6.9-28.1 .6-2.5 .3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"/>
3609        </symbol>
3610
3611        <symbol id="tiktok" width="24" height="24" viewBox="0 0 448 512">
3612            <path fill="currentColor" d="M448 209.9a210.1 210.1 0 0 1 -122.8-39.3V349.4A162.6 162.6 0 1 1 185 188.3V278.2a74.6 74.6 0 1 0 52.2 71.2V0l88 0a121.2 121.2 0 0 0 1.9 22.2h0A122.2 122.2 0 0 0 381 102.4a121.4 121.4 0 0 0 67 20.1z"/>
3613        </symbol>
3614
3615        <symbol id="youtube" width="24" height="24" viewBox="0 0 576 512">
3616            <path fill="currentColor" d="M549.7 124.1c-6.3-23.7-24.8-42.3-48.3-48.6C458.8 64 288 64 288 64S117.2 64 74.6 75.5c-23.5 6.3-42 24.9-48.3 48.6-11.4 42.9-11.4 132.3-11.4 132.3s0 89.4 11.4 132.3c6.3 23.7 24.8 41.5 48.3 47.8C117.2 448 288 448 288 448s170.8 0 213.4-11.5c23.5-6.3 42-24.2 48.3-47.8 11.4-42.9 11.4-132.3 11.4-132.3s0-89.4-11.4-132.3zm-317.5 213.5V175.2l142.7 81.2-142.7 81.2z"/>
3617        </symbol>
3618
3619        
3620        <svg id="Flamme" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" ><path d="M8 18C8 20.4148 9.79086 21 12 21C15.7587 21 17 18.5 14.5 13.5C11 18 10.5 11 11 9C9.5 12 8 14.8177 8 18Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 21C17.0495 21 20 18.0956 20 13.125C20 8.15444 12 3 12 3C12 3 4 8.15444 4 13.125C4 18.0956 6.95054 21 12 21Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>
3621
3622        <symbol id="position" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 19V21" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M5 12H3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 5V3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M19 12H21" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></symbol>
3623
3624        <symbol id="bell" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3625            <path d="M18 8.4C18 6.70261 17.3679 5.07475 16.2426 3.87452C15.1174 2.67428 13.5913 2 12 2C10.4087 2 8.88258 2.67428 7.75736 3.87452C6.63214 5.07475 6 6.70261 6 8.4C6 15.8667 3 18 3 18H21C21 18 18 15.8667 18 8.4Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3626            <path d="M13.73 21C13.5542 21.3031 13.3019 21.5547 12.9982 21.7295C12.6946 21.9044 12.3504 21.9965 12 21.9965C11.6496 21.9965 11.3054 21.9044 11.0018 21.7295C10.6982 21.5547 10.4458 21.3031 10.27 21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3627        </symbol>
3628
3629        <symbol id="bell-solid" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3630            <path d="M18 8.4C18 6.70261 17.3679 5.07475 16.2426 3.87452C15.1174 2.67428 13.5913 2 12 2C10.4087 2 8.88258 2.67428 7.75736 3.87452C6.63214 5.07475 6 6.70261 6 8.4C6 15.8667 3 18 3 18H21C21 18 18 15.8667 18 8.4Z" fill="currentColor" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3631            <path d="M13.73 21C13.5542 21.3031 13.3019 21.5547 12.9982 21.7295C12.6946 21.9044 12.3504 21.9965 12 21.9965C11.6496 21.9965 11.3054 21.9044 11.0018 21.7295C10.6982 21.5547 10.4458 21.3031 10.27 21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3632        </symbol>
3633
3634        <symbol id="timer" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3635            <path d="M9 2L15 2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3636            <path d="M12 10L12 14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3637            <path d="M12 22C16.4183 22 20 18.4183 20 14C20 9.58172 16.4183 6 12 6C7.58172 6 4 9.58172 4 14C4 18.4183 7.58172 22 12 22Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3638        </symbol>
3639
3640        <symbol id="bright-star" viewBox="0 0 24 24" stroke-width="1.5" fill="none">
3641            <path d="M9.95242 9.62272L11.5109 6.31816C11.711 5.89395 12.289 5.89395 12.4891 6.31816L14.0476 9.62272L17.5329 10.1559C17.9801 10.2243 18.1583 10.7996 17.8346 11.1296L15.313 13.7001L15.9081 17.3314C15.9845 17.7978 15.5168 18.1534 15.1167 17.9331L12 16.2177L8.88328 17.9331C8.48316 18.1534 8.01545 17.7978 8.09187 17.3314L8.68695 13.7001L6.16545 11.1296C5.8417 10.7996 6.01993 10.2243 6.46711 10.1559L9.95242 9.62272Z" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3642                <path d="M22 12L23 12" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3643                    <path d="M12 2V1" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3644                <path d="M12 23V22" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3645                <path d="M20 20L19 19" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3646                <path d="M20 4L19 5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3647                <path d="M4 20L5 19" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3648                <path d="M4 4L5 5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3649                <path d="M1 12L2 12" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3650        </symbol>
3651
3652        <symbol id="info" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 11.5V16.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 7.51L12.01 7.49889" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></symbol>
3653
3654        <symbol id="arrow-down" viewBox="0 0 24 24" stroke-width="1.5" fill="none">
3655            <path d="M12 3L12 21M12 21L20.5 12.5M12 21L3.5 12.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3656        </symbol>
3657
3658        <symbol id="arrow-left" viewBox="0 0 24 24" stroke-width="1.5" fill="none">
3659            <path d="M21 12L3 12M3 12L11.5 3.5M3 12L11.5 20.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3660        </symbol>
3661
3662        <symbol id="arrow-right" viewBox="0 0 24 24" stroke-width="1.5" fill="none">
3663            <path d="M3 12L21 12M21 12L12.5 3.5M21 12L12.5 20.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3664        </symbol>
3665
3666        <symbol id="arrow-up" viewBox="0 0 24 24" stroke-width="1.5" fill="none">
3667            <path d="M12 21L12 3M12 3L20.5 11.5M12 3L3.5 11.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3668        </symbol>
3669
3670        <symbol id="check" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3671            <path d="M5 13L9 17L19 7" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3672        </symbol>
3673
3674        <symbol id="check-circle" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3675            <path d="M7 12.5L10 15.5L17 8.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3676            <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3677        </symbol>
3678
3679        <symbol id="clock" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3680            <path d="M12 6L12 12L18 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3681            <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3682        </symbol>
3683
3684        <symbol id="credit-card" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3685            <path d="M22 9V17C22 18.1046 21.1046 19 20 19H4C2.89543 19 2 18.1046 2 17V7C2 5.89543 2.89543 5 4 5H20C21.1046 5 22 5.89543 22 7V9ZM22 9H6" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3686        </symbol>
3687
3688        <symbol id="delivery-truck" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3689            <path d="M8 19C9.10457 19 10 18.1046 10 17C10 15.8954 9.10457 15 8 15C6.89543 15 6 15.8954 6 17C6 18.1046 6.89543 19 8 19Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3690            <path d="M18 19C19.1046 19 20 18.1046 20 17C20 15.8954 19.1046 15 18 15C16.8954 15 16 15.8954 16 17C16 18.1046 16.8954 19 18 19Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3691            <path d="M10.05 17H15V6.6C15 6.26863 14.7314 6 14.4 6H1" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M5.65 17H3.6C3.26863 17 3 16.7314 3 16.4V11.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
3692            <path d="M2 9L6 9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3693            <path d="M15 9H20.6101C20.8472 9 21.0621 9.13964 21.1584 9.35632L22.9483 13.3836C22.9824 13.4604 23 13.5434 23 13.6273V16.4C23 16.7314 22.7314 17 22.4 17H20.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
3694            <path d="M15 17H16" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
3695        </symbol>
3696
3697        <symbol id="emoji" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3698            <path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3699            <path d="M16.5 14.5C16.5 14.5 15 16.5 12 16.5C9 16.5 7.5 14.5 7.5 14.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3700            <path d="M15.5 9C15.2239 9 15 8.77614 15 8.5C15 8.22386 15.2239 8 15.5 8C15.7761 8 16 8.22386 16 8.5C16 8.77614 15.7761 9 15.5 9Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3701            <path d="M8.5 9C8.22386 9 8 8.77614 8 8.5C8 8.22386 8.22386 8 8.5 8C8.77614 8 9 8.22386 9 8.5C9 8.77614 8.77614 9 8.5 9Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3702        </symbol>
3703
3704        <symbol id="group" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 20V19C1 15.134 4.13401 12 8 12V12C11.866 12 15 15.134 15 19V20" stroke-width="1.5" stroke-linecap="round"></path><path d="M13 14V14C13 11.2386 15.2386 9 18 9V9C20.7614 9 23 11.2386 23 14V14.5" stroke-width="1.5" stroke-linecap="round"></path><path d="M8 12C10.2091 12 12 10.2091 12 8C12 5.79086 10.2091 4 8 4C5.79086 4 4 5.79086 4 8C4 10.2091 5.79086 12 8 12Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M18 9C19.6569 9 21 7.65685 21 6C21 4.34315 19.6569 3 18 3C16.3431 3 15 4.34315 15 6C15 7.65685 16.3431 9 18 9Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></symbol>
3705
3706        <symbol id="gift" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3707            <path d="M20 12V21.4C20 21.7314 19.7314 22 19.4 22H4.6C4.26863 22 4 21.7314 4 21.4V12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3708            <path d="M21.4 7H2.6C2.26863 7 2 7.26863 2 7.6V11.4C2 11.7314 2.26863 12 2.6 12H21.4C21.7314 12 22 11.7314 22 11.4V7.6C22 7.26863 21.7314 7 21.4 7Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3709            <path d="M12 22V7" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3710            <path d="M12 7H7.5C6.83696 7 6.20107 6.73661 5.73223 6.26777C5.26339 5.79893 5 5.16304 5 4.5C5 3.83696 5.26339 3.20107 5.73223 2.73223C6.20107 2.26339 6.83696 2 7.5 2C11 2 12 7 12 7Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3711            <path d="M12 7H16.5C17.163 7 17.7989 6.73661 18.2678 6.26777C18.7366 5.79893 19 5.16304 19 4.5C19 3.83696 18.7366 3.20107 18.2678 2.73223C17.7989 2.26339 17.163 2 16.5 2C13 2 12 7 12 7Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3712        </symbol>
3713
3714        <symbol id="globe" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3715            <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3716            <path d="M2.5 12.5L8 14.5L7 18L8 21" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3717            <path d="M17 20.5L16.5 18L14 17V13.5L17 12.5L21.5 13" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3718            <path d="M19 5.5L18.5 7L15 7.5V10.5L17.5 9.5H19.5L21.5 10.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3719            <path d="M2.5 10.5L5 8.5L7.5 8L9.5 5L8.5 3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3720        </symbol>
3721
3722        <symbol id="heart" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3723            <path d="M22 8.86222C22 10.4087 21.4062 11.8941 20.3458 12.9929C17.9049 15.523 15.5374 18.1613 13.0053 20.5997C12.4249 21.1505 11.5042 21.1304 10.9488 20.5547L3.65376 12.9929C1.44875 10.7072 1.44875 7.01723 3.65376 4.73157C5.88044 2.42345 9.50794 2.42345 11.7346 4.73157L11.9998 5.00642L12.2648 4.73173C13.3324 3.6245 14.7864 3 16.3053 3C17.8242 3 19.2781 3.62444 20.3458 4.73157C21.4063 5.83045 22 7.31577 22 8.86222Z" stroke-width="1.5" stroke-linejoin="round"></path>
3724        </symbol>
3725
3726        <symbol id="heart-solid" viewBox="0 0 24 24" fill="none" color="currentColor" stroke-width="1.5">
3727            <path fill-rule="evenodd" clip-rule="evenodd" d="M11.9999 3.94228C13.1757 2.85872 14.7069 2.25 16.3053 2.25C18.0313 2.25 19.679 2.95977 20.8854 4.21074C22.0832 5.45181 22.75 7.1248 22.75 8.86222C22.75 10.5997 22.0831 12.2728 20.8854 13.5137C20.089 14.3393 19.2938 15.1836 18.4945 16.0323C16.871 17.7562 15.2301 19.4985 13.5256 21.14L13.5216 21.1438C12.6426 21.9779 11.2505 21.9476 10.409 21.0754L3.11399 13.5136C0.62867 10.9374 0.62867 6.78707 3.11399 4.21085C5.54605 1.68984 9.46239 1.60032 11.9999 3.94228Z" fill="currentColor"></path>
3728        </symbol>
3729
3730        <symbol id="help" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3731            <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3732            <path d="M9 9C9 5.49997 14.5 5.5 14.5 9C14.5 11.5 12 10.9999 12 13.9999" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3733            <path d="M12 18.01L12.01 17.9989" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3734        </symbol>
3735
3736        <symbol id="headset-help" viewBox="0 0 24 24" stroke-width="1.5" fill="none">
3737            <path d="M4 11.4998L3.51493 11.6211C2.62459 11.8437 2 12.6436 2 13.5614V15.4382C2 16.356 2.62459 17.1559 3.51493 17.3785L5.25448 17.8134C5.63317 17.9081 6 17.6217 6 17.2313V11.7683C6 11.3779 5.63317 11.0915 5.25448 11.1862L4 11.4998ZM4 11.4998V11C4 6.58172 7.58172 3 12 3C16.4183 3 20 6.58172 20 11V11.4998M20 11.4998L20.4851 11.6211C21.3754 11.8437 22 12.6436 22 13.5614V15.4382C22 16.356 21.3754 17.1559 20.4851 17.3785L20 17.4998M20 11.4998L18.7455 11.1862C18.3668 11.0915 18 11.3779 18 11.7683V17.2313C18 17.6217 18.3668 17.9081 18.7455 17.8134L20 17.4998M15 20.5H18C19.1046 20.5 20 19.6046 20 18.5V18V17.4998M15 20.5C15 19.6716 14.3284 19 13.5 19H10.5C9.67157 19 9 19.6716 9 20.5C9 21.3284 9.67157 22 10.5 22H13.5C14.3284 22 15 21.3284 15 20.5Z"
3738                stroke="#000000" stroke-width="1.5"/>
3739        </symbol>
3740
3741        <symbol id="info-circle" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3742            <path d="M12 11.5V16.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3743            <path d="M12 7.51L12.01 7.49889" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3744            <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3745        </symbol>
3746
3747        <symbol id="list" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3748            <path d="M8 6L20 6" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3749            <path d="M4 6.01L4.01 5.99889" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3750            <path d="M4 12.01L4.01 11.9989" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3751            <path d="M4 18.01L4.01 17.9989" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3752            <path d="M8 12L20 12" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3753            <path d="M8 18L20 18" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3754        </symbol>
3755
3756        <symbol id="mail" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3757            <path d="M7 9L12 12.5L17 9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3758            <path d="M2 17V7C2 5.89543 2.89543 5 4 5H20C21.1046 5 22 5.89543 22 7V17C22 18.1046 21.1046 19 20 19H4C2.89543 19 2 18.1046 2 17Z" stroke-width="1.5"></path>
3759        </symbol>
3760
3761        <symbol id="map-pin" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3762            <path d="M20 10C20 14.4183 12 22 12 22C12 22 4 14.4183 4 10C4 5.58172 7.58172 2 12 2C16.4183 2 20 5.58172 20 10Z" stroke-width="1.5"></path>
3763            <path d="M12 11C12.5523 11 13 10.5523 13 10C13 9.44772 12.5523 9 12 9C11.4477 9 11 9.44772 11 10C11 10.5523 11.4477 11 12 11Z" fill="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3764        </symbol>
3765
3766        <symbol id="list" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 6L20 6" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M4 6.01L4.01 5.99889" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M4 12.01L4.01 11.9989" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M4 18.01L4.01 17.9989" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M8 12L20 12" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M8 18L20 18" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></symbol>
3767
3768        <symbol id="map-loc" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 19L3.78974 20.7368C3.40122 20.8663 3 20.5771 3 20.1675L3 5.43246C3 5.1742 3.16526 4.94491 3.41026 4.86325L9 3M9 19L15 21M9 19L9 3M15 21L20.5897 19.1368C20.8347 19.0551 21 18.8258 21 18.5675L21 3.83246C21 3.42292 20.5988 3.13374 20.2103 3.26325L15 5M15 21L15 5M15 5L9 3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></symbol>
3769
3770        <symbol id="map" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 19L3.78974 20.7368C3.40122 20.8663 3 20.5771 3 20.1675L3 5.43246C3 5.1742 3.16526 4.94491 3.41026 4.86325L9 3M9 19L15 21M9 19L9 3M15 21L20.5897 19.1368C20.8347 19.0551 21 18.8258 21 18.5675L21 3.83246C21 3.42292 20.5988 3.13374 20.2103 3.26325L15 5M15 21L15 5M15 5L9 3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></symbol>
3771
3772
3773        <symbol id="menu" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3774            <path d="M3 5H21" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3775            <path d="M3 12H21" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3776            <path d="M3 19H21" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3777        </symbol>
3778
3779        <symbol id="minus" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3780            <path d="M6 12H18" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3781        </symbol>
3782
3783        <symbol id="nav-arrow-down" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3784            <path d="M6 9L12 15L18 9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3785        </symbol>
3786
3787        <symbol id="nav-arrow-left" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3788            <path d="M15 6L9 12L15 18" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3789        </symbol>
3790
3791        <symbol id="nav-arrow-right" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3792            <path d="M9 6L15 12L9 18" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3793        </symbol>
3794
3795        <symbol id="nav-arrow-up" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3796            <path d="M6 15L12 9L18 15" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3797        </symbol>
3798
3799        <symbol id="open-new-window" viewBox="0 0 24 24" stroke-width="1.5" fill="none" color="currentColor">
3800            <path d="M21 3L15 3M21 3L12 12M21 3V9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3801            <path d="M21 13V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V5C3 3.89543 3.89543 3 5 3H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
3802        </symbol>
3803
3804        <symbol id="package" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3805            <path d="M20 5.99999L20 18C20 19.1046 19.1046 20 18 20H6C4.89543 20 4 19.1046 4 18V6C4 4.89543 4.89543 4 6 4H18C19.1045 4 19.9999 4.89543 20 5.99999Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3806            <path d="M12 9V4" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3807        </symbol>
3808
3809        <symbol id="phone" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3810            <path d="M18.1182 14.702L14 15.5C11.2183 14.1038 9.5 12.5 8.5 10L9.26995 5.8699L7.81452 2L4.0636 2C2.93605 2 2.04814 2.93178 2.21654 4.04668C2.63695 6.83 3.87653 11.8765 7.5 15.5C11.3052 19.3052 16.7857 20.9564 19.802 21.6127C20.9668 21.8662 22 20.9575 22 19.7655L22 16.1812L18.1182 14.702Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3811        </symbol>
3812
3813        <symbol id="plus" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3814            <path d="M6 12H12M18 12H12M12 12V6M12 12V18" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3815        </symbol>
3816
3817        <symbol id="position" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3818            <path d="M12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3819            <path d="M12 19V21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3820            <path d="M5 12H3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3821            <path d="M12 5V3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3822            <path d="M19 12H21" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3823        </symbol>
3824
3825        <symbol id="refresh-double" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3826            <path d="M21.1679 8C19.6247 4.46819 16.1006 2 11.9999 2C6.81459 2 2.55104 5.94668 2.04932 11" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3827            <path d="M17 8H21.4C21.7314 8 22 7.73137 22 7.4V3" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3828            <path d="M2.88146 16C4.42458 19.5318 7.94874 22 12.0494 22C17.2347 22 21.4983 18.0533 22 13" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3829            <path d="M7.04932 16H2.64932C2.31795 16 2.04932 16.2686 2.04932 16.6V21" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3830        </symbol>
3831
3832        <symbol id="repeat" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3833            <path d="M17 17H8C6.33333 17 3 16 3 12C3 8 6.33333 7 8 7H16C17.6667 7 21 8 21 12C21 13.4943 20.5348 14.57 19.865 15.3312" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3834            <path d="M14.5 14.5L17 17L14.5 19.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3835        </symbol>
3836
3837        <symbol id="send-mail" viewBox="0 0 24 24" stroke-width="1.5" fill="none" color="currentColor">
3838            <path d="M9 9L13.5 12L18 9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3839            <path d="M3 13.5H5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3840            <path d="M1 10.5H5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3841            <path d="M5 7.5V7C5 5.89543 5.89543 5 7 5H20C21.1046 5 22 5.89543 22 7V17C22 18.1046 21.1046 19 20 19H7C5.89543 19 5 18.1046 5 17V16.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
3842        </symbol>
3843
3844        <symbol id="shopping-bag" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3845            <path d="M19.2609 9.69589L20.6455 18.6959C20.8319 19.9074 19.8945 21 18.6688 21H5.33122C4.10545 21 3.16809 19.9074 3.35448 18.6959L4.73909 9.69589C4.8892 8.72022 5.7287 8 6.71584 8H17.2842C18.2713 8 19.1108 8.72022 19.2609 9.69589Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3846            <path d="M14 5C14 3.89543 13.1046 3 12 3C10.8954 3 10 3.89543 10 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3847        </symbol>
3848
3849        <symbol id="smartphone" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3850            <path d="M12 16.01L12.01 15.9989" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3851            <path d="M7 19.4V4.6C7 4.26863 7.26863 4 7.6 4H16.4C16.7314 4 17 4.26863 17 4.6V19.4C17 19.7314 16.7314 20 16.4 20H7.6C7.26863 20 7 19.7314 7 19.4Z" stroke-width="1.5"></path>
3852        </symbol>
3853
3854        <symbol id="sparks" viewBox="0 0 24 24" stroke-width="1.5" fill="none" color="currentColor">
3855            <path d="M8 15C12.8747 15 15 12.949 15 8C15 12.949 17.1104 15 22 15C17.1104 15 15 17.1104 15 22C15 17.1104 12.8747 15 8 15Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path>
3856            <path d="M2 6.5C5.13376 6.5 6.5 5.18153 6.5 2C6.5 5.18153 7.85669 6.5 11 6.5C7.85669 6.5 6.5 7.85669 6.5 11C6.5 7.85669 5.13376 6.5 2 6.5Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"></path>
3857        </symbol>
3858
3859        <symbol id="star-solid" viewBox="0 0 24 24" fill="none" color="currentColor" stroke-width="1.5">
3860            <path d="M8.58737 8.23597L11.1849 3.00376C11.5183 2.33208 12.4817 2.33208 12.8151 3.00376L15.4126 8.23597L21.2215 9.08017C21.9668 9.18848 22.2638 10.0994 21.7243 10.6219L17.5217 14.6918L18.5135 20.4414C18.6409 21.1798 17.8614 21.7428 17.1945 21.3941L12 18.678L6.80547 21.3941C6.1386 21.7428 5.35909 21.1798 5.48645 20.4414L6.47825 14.6918L2.27575 10.6219C1.73617 10.0994 2.03322 9.18848 2.77852 9.08017L8.58737 8.23597Z" fill="currentColor" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3861        </symbol>
3862
3863        <symbol id="truck" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3864            <path d="M7 19C8.10457 19 9 18.1046 9 17C9 15.8954 8.10457 15 7 15C5.89543 15 5 15.8954 5 17C5 18.1046 5.89543 19 7 19Z" stroke-width="1.5" stroke-miterlimit="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3865            <path d="M17 19C18.1046 19 19 18.1046 19 17C19 15.8954 18.1046 15 17 15C15.8954 15 15 15.8954 15 17C15 18.1046 15.8954 19 17 19Z" stroke-width="1.5" stroke-miterlimit="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3866            <path d="M14 17V6.6C14 6.26863 13.7314 6 13.4 6H2.6C2.26863 6 2 6.26863 2 6.6V16.4C2 16.7314 2.26863 17 2.6 17H4.65" stroke-width="1.5" stroke-linecap="round"></path>
3867            <path d="M14 17H9.05005" stroke-width="1.5" stroke-linecap="round"></path>
3868            <path d="M14 9H19.6101C19.8472 9 20.0621 9.13964 20.1584 9.35632L21.9483 13.3836C21.9824 13.4604 22 13.5434 22 13.6273V16.4C22 16.7314 21.7314 17 21.4 17H19.5" stroke-width="1.5" stroke-linecap="round"></path>
3869            <path d="M14 17H15" stroke-width="1.5" stroke-linecap="round"></path>
3870        </symbol>
3871
3872        <symbol id="user" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3873            <path d="M5 20V19C5 15.134 8.13401 12 12 12V12C15.866 12 19 15.134 19 19V20" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3874            <path d="M12 12C14.2091 12 16 10.2091 16 8C16 5.79086 14.2091 4 12 4C9.79086 4 8 5.79086 8 8C8 10.2091 9.79086 12 12 12Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3875        </symbol>
3876
3877        <symbol id="warning-circle" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3878            <path d="M12 7L12 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3879            <path d="M12 17.01L12.01 16.9989" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3880            <path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3881        </symbol>
3882
3883        <symbol id="warning-triangle" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="currentColor">
3884            <path d="M20.0429 21H3.95705C2.41902 21 1.45658 19.3364 2.22324 18.0031L10.2662 4.01533C11.0352 2.67792 12.9648 2.67791 13.7338 4.01532L21.7768 18.0031C22.5434 19.3364 21.581 21 20.0429 21Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
3885            <path d="M12 9V13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path>
3886            <path d="M12 17.01L12.01 16.9989" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3887        </symbol>
3888
3889        <symbol id="xmark" stroke-width="1.5" viewBox="0 0 24 24" fill="none">
3890            <path d="M6.75827 17.2426L12.0009 12M17.2435 6.75736L12.0009 12M12.0009 12L6.75827 6.75736M12.0009 12L17.2435 17.2426" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
3891        </symbol>
3892
3893        <symbol id="calendar" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" ><path d="M15 4V2M15 4V6M15 4H10.5M3 10V19C3 20.1046 3.89543 21 5 21H19C20.1046 21 21 20.1046 21 19V10H3Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M3 10V6C3 4.89543 3.89543 4 5 4H7" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M7 2V6" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M21 10V6C21 4.89543 20.1046 4 19 4H18.5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></symbol>
3894    </defs>
3895</svg>
3896
3897            
3898
3899<script src="//www.beauteprivee.fr/cdn/shop/t/582/assets/lozad.min.js?v=12924410133489396311783959855" defer="defer"></script>
3899
3900
3901<script>
3902    document.addEventListener('DOMContentLoaded', () => {
3903        window.lozadObserver = lozad(); // lazy loads elements with default selector as '.lozad'
3904        window.lozadObserver.observe();
3905    })
3906</script>
3906
3907            
3907<script>
3908    window.algolia = {
3909        "no_result_for": "Aucun résultat pour",
3910        "delete_all": "Tout effacer",
3911        "recommended_price": 'Prix conseillé',
3912        "articles": "Articles",
3913        "article": "Article",
3914        "review": "avis",
3915        "quick_buy": "Ajouter au panier",
3916        "number_product_stock": "Il n&#39;en reste que {{ count }} en stock",
3917        "out_of_stock": "Victime de son succès !",
3918        "exist_in": "Existe en",
3919        "alert_me": "M&#39;alerter",
3920        "array_sort_by": "",
3921        "offers_available": "Offres disponibles",
3922        "offer_available": "Offre disponible",
3923        "your_desire_text": "Votre envie ? ",
3924        "placeholder": "Rechercher une vente, une marque, une pépite...",
3925        "show_more_products": "Afficher plus de produits",
3926        "placeholder_brand_alert": "Rechercher une marque",
3927        "starting_from": "À partir de",
3928        "star": "étoile",
3929        "stars": "étoiles"
3930    }
3931</script>
3931
3932
3933
3934            
3935
3936            
3937            
3937<script type="text/javascript">
3938    console.log('Initializing global data snippet');
3939    window.beauteprivee = window.beauteprivee || {};
3940    window.beauteprivee.shopUrl = window.Shopify.shop || "beauteprivee-prod.myshopify.com";
3941    window.beauteprivee.customerId = null;
3942    window.beauteprivee.translations = window.beauteprivee.translation || {}
3943    window.beauteprivee.proxyPath = (document.location.origin.includes('localhost') || document.location.origin.includes('127.0.0.1') || document.location.origin.includes('delalonde')) ? '/apps/proxy-thomas' : '/apps/proxy';
3944
3945    // TRANSLATIONS FOR JAVASCRIPT
3946
3947      // Save translations for spa coupons error messages
3948      window.beauteprivee.translations.spa_coupon_message = {
3949          not_found: "Coupon non associé à une commande",
3950          used_coupon: "Coupon déjà utilisé",
3951          cancelled_coupon: "Coupon annulé",
3952          expired_coupon: "Coupon expiré",
3953          generic_error: "Coupon indisponible"
3954      };
3955
3956    // Save translations for account breadcrumb
3957    window.beauteprivee.translations.account_breadcrumb = {
3958        dashboard: "Mon espace personnel",
3959        orders: "Mes commandes",
3960        wishlist: "Mes favoris",
3961        infos: "Mes informations personnelles",
3962        alerts: "Mes alertes marques",
3963        loyalty: "Mon programme de fidélité",
3964        sponsorship: "Mes parrainages",
3965        optins: "Mes préférences de contact",
3966        help: "Aide et service client",
3967        addresses_notebook: "Mon carnet d&#39;adresses",
3968        contact_pref: "Mes préférences de contact",
3969        password_recovery: "Réinitialisation du mot de passe"
3970    };
3971</script>
3971
3972
3973
3974            
3975            
3976
3977            
3978            
3978<script>
3979    class ConnectionTracker {
3980        constructor() {
3981
3982            this.apiUrl = 'https://api.beauteprivee.fr/shopify-mw-auth/tracking';
3983            this.apiKey = 'DhD3EZWDClX2f4beMXcEHRSLozMyuc0PE6v4y495';
3984
3985            const shopUrl = window.beauteprivee?.shopUrl;
3986            if (!shopUrl?.includes('-prod')) {
3987                this.apiUrl = 'https://bpfr.terone.showroomprive.net/shopify-mw-auth/tracking';
3988                this.apiKey = 'NN4oJNLTZ2sGFDE57BbV';
3989            }
3990
3991            this.tenMinutesMs = 10 * 60 * 1000;
3992            this.userAgent = navigator.userAgent || navigator.vendor || window.opera;
3993        }
3994
3995        getUserId() {
3996            return window.beauteprivee?.customerId || null;
3997        }
3998
3999        hasTenMinutesPassed() {
4000            const lastConnection = parseInt(localStorage.getItem('last_connection'), 10) || 0;
4001            const now = Date.now();
4002            return now - lastConnection >= this.tenMinutesMs;
4003        }
4004
4005        getDeviceType() {
4006            const isMobileUA = /android/i.test(this.userAgent) || /iPhone|iPad|iPod/.test(this.userAgent);
4007            const isSmallScreen = window.innerWidth <= 768;
4008
4009            if (isMobileUA || isSmallScreen) {
4010                return 'mobile';
4011            }
4012
4013            return 'desktop';
4014        }
4015
4016        async sendTrackingEvent(action) {
4017            const lastConnection = parseInt(localStorage.getItem('last_connection'), 10) || 0;
4018            const now = Date.now();
4019
4020            if (now - lastConnection < 30000) return;
4021
4022            console.log('Tracking Connexion - script');
4023            const userId = this.getUserId();
4024            if (!userId) return;
4025
4026            const deviceType = this.getDeviceType();
4027            const payload = {
4028                user_id: userId,
4029                type: deviceType,
4030                timestamp: new Date().toISOString(),
4031                platform: 'browser',
4032                action,
4033            };
4034
4035            if (!this.hasTenMinutesPassed()) {
4036                console.log('Connection too recent, tracking ignored');
4037                return;
4038            }
4039
4040            try {
4041                const response = await fetch(this.apiUrl, {
4042                    method: 'POST',
4043                    headers: {
4044                        'Content-Type': 'application/json',
4045                        Accept: '*/*',
4046                        apikey: this.apiKey,
4047                    },
4048                    body: JSON.stringify(payload),
4049                });
4050
4051                if (!response.ok) {
4052                    throw new Error(`Erreur API : ${response.status}`);
4053                }
4054
4055                localStorage.setItem('last_connection', Date.now().toString());
4056                localStorage.setItem('last_connection_type', '');
4057                console.log('Tracking Login successfully registered');
4058            } catch (error) {
4059                console.error('Error tracking connection :', error);
4060            }
4061        }
4062
4063        async trackOnLoad() {
4064            const userId = this.getUserId();
4065            if (!userId) return;
4066
4067            const lastType = localStorage.getItem('last_connection_type');
4068            const action = lastType === 'auth' ? 'auth' : 'connection_web';
4069
4070            await this.sendTrackingEvent(action);
4071        }
4072    }
4073
4074    document.addEventListener('DOMContentLoaded', async () => {
4075        const tracker = new ConnectionTracker();
4076        await tracker.trackOnLoad();
4077    });
4078
4079    document.addEventListener('visibilitychange', async () => {
4080        if (document.visibilityState !== 'visible') return;
4081        const lastVisibilityTrack = parseInt(sessionStorage.getItem('last_visibility_track'), 10) || 0;
4082        const now = Date.now();
4083
4084        //Prevent running the script more than once
4085        if (now - lastVisibilityTrack < 3000) return;
4086        sessionStorage.setItem('last_visibility_track', now.toString());
4087
4088        const tracker = new ConnectionTracker();
4089        await tracker.trackOnLoad();
4090    });
4091</script>
4091
4092
4093        <div id="shopify-block-AZFd6aGFnS21FS1hVa__13768625480086291342" class="shopify-block shopify-app-block">
4093<script>
4094  window['ShopifyForms'] = {
4095    ...window['ShopifyForms'],
4096    currentPageType: "customers\/login"
4097  };
4098</script>
4098
4099
4100
4101</div><div id="shopify-block-ASXJCWWEvMUE5L1VWd__5946647744298494267" class="shopify-block shopify-app-block">
4102
4103
4104<!-- BEGIN app snippet: swymVersion -->
4104<script>var __SWYM__VERSION__ = '7.0.7';</script>
4104<!-- END app snippet -->
4105<!-- BEGIN app snippet: swymCustomCss -->
4106
4107
4108
4109
4110<style id="swym-custom-css">
4111
4112</style>
4113
4114<!-- END app snippet -->
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127<script>
4128  (function () {
4129    // Get CompanyLocation Metadata for B2B customer scenerios (SFS)
4130    
4131
4132    // Put metafields in window variable
4133    const commonCustomizationSettings = '';
4134    try {
4135      const parsedSettings = JSON.parse(commonCustomizationSettings);
4136      if (parsedSettings) {
4137        window.SwymWishlistCommonCustomizationSettings = parsedSettings[window.Shopify.theme.schema_name] || parsedSettings['global-settings'];
4138      } else {
4139        window.SwymWishlistCommonCustomizationSettings = {};
4140      }
4141    } catch (e) {
4142      window.SwymWishlistCommonCustomizationSettings = {};
4143    }
4144
4145    let enabledCommonFeatures = '{"add-to-wishlist-collections-button":false,"add-to-wishlist-pdp-button":false,"auto-add-to-wishlist-from-pdp":{"pdpViewCount":"3","notificationTimeoutDuration":"5","selectedPosition":"TopLeft","enabled":false},"multiple-wishlist":false}';
4146    try {
4147      enabledCommonFeatures = JSON.parse(enabledCommonFeatures) || {};
4148    } catch (e) {
4149      enabledCommonFeatures = {};
4150    }
4151    // Storing COMMON FEATURES data in the window object for potential use in the storefront JS code.
4152    window.SwymEnabledCommonFeatures = enabledCommonFeatures;
4153
4154    // Ghost-Intent Configuration
4155    // Defaults to disabled (false). Only enabled when metafields explicitly set to "true".
4156    try {
4157      let ghostIntentConfig = {
4158        isExplicitConsentNeeded: false,
4159        isExplicitConsentNeededEvenForLocalStorage: false,
4160        askForPermissionOnFirstClick: true
4161      };
4162      
4163      
4164      
4165      window.SwymGhostIntentConfig = ghostIntentConfig;
4166    } catch(e) {
4167      window.SwymGhostIntentConfig = {
4168        isExplicitConsentNeeded: false,
4169        isExplicitConsentNeededEvenForLocalStorage: false,
4170        askForPermissionOnFirstClick: true
4171      };
4172    }
4173
4174    // Education Layer Configuration
4175    // Reads from common enabled-features metafield first. Falls back to old standalone metafield for backward compatibility.
4176    
4177    
4178    window.SwymEducationLayerEnabled = enabledCommonFeatures?.["education-layer"] ?? true;
4179
4180    // Login Nudge Configuration
4181    // Reads from common enabled-features metafield first. Falls back to old standalone metafield for backward compatibility.
4182    
4183    
4184    window.SwymLoginNudgeEnabled = enabledCommonFeatures?.["login-nudge"] ?? true;
4185
4186    // Initialize or ensure SwymViewProducts exists
4187    if (!window.SwymViewProducts) {
4188      window.SwymViewProducts = {};
4189    }
4190    
4191  })();
4192</script>
4192
4193
4194<!-- BEGIN app snippet: swymLoadConsentManager -->
4195<script>
4196  (function () {
4197    if (document.querySelector("script[data-swym-consent-manager]")) return;
4198    var swymConsentManagerScript = document.createElement("script");
4199    swymConsentManagerScript.src = "https:\/\/cdn.shopify.com\/extensions\/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8\/swym-relay-839\/assets\/swym-consent-manager.js";
4200    swymConsentManagerScript.async = false; // run in insertion order once fetched, instead of whenever fetch resolves
4201    swymConsentManagerScript.setAttribute("data-swym-consent-manager", "true");
4202    document.head.appendChild(swymConsentManagerScript);
4203  })();
4204</script>
4204
4205<!-- END app snippet -->
4206
4207<script
4208  
4209  id="wishlist-embed-init"
4210  defer
4211  async
4212>
4213  (function () {
4214    window.swymWishlistEmbedLoaded = true;
4215    var fullAssetUrl = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/apps.bundle.js"; 
4216    var assetBaseUrl = fullAssetUrl?.substring(0, fullAssetUrl.lastIndexOf('/') + 1);
4217    var swymJsPath = '//premcdn.swymrelay.com/code/swym-shopify.js';
4218    var baseJsPath = swymJsPath?.substring(0, swymJsPath.lastIndexOf('/') + 1);
4219    window.SwymCurrentJSPath = baseJsPath;
4220    window.SwymAssetBaseUrl = assetBaseUrl;
4221    
4222      window.SwymCurrentStorePath = "//swymstore-v3premium-01.swymrelay.com";
4223    
4224    function loadSwymShopifyScript() {
4225      var element = "";
4226      var scriptSrc = "";
4227
4228      
4229        element = "swym-ext-shopify-script";
4230        window.SwymShopifyCdnInUse = true;
4231        scriptSrc = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/swym-ext-shopify.js";
4232      
4233
4234      if (document.getElementById(element)) {
4235        return;
4236      }
4237
4238      var s = document.createElement("script");
4239      s.id = element;
4240      s.type = "text/javascript";
4241      s.async = true;
4242      s.defer = true;
4243      s.src = scriptSrc;
4244
4245      s.onerror = function() {
4246        console.warn("Failed to load Swym Shopify script: ", scriptSrc, " Continuing with default");
4247        // Fallback logic here
4248        element = `swym-ext-shopify-script-${__SWYM__VERSION__}`;
4249        var fallbackJsPathVal = "\/\/premcdn.swymrelay.com\/code\/swym-shopify.js";
4250        var fallbackJsPathWithExt = fallbackJsPathVal.replace("swym-shopify", "swym-ext-shopify");
4251        scriptSrc = fallbackJsPathWithExt + '?shop=' + encodeURIComponent(window.Shopify.shop) + '&v=' + __SWYM__VERSION__;
4252
4253        var fallbackScript = document.createElement("script");
4254        fallbackScript.id = element;
4255        fallbackScript.type = "text/javascript";
4256        fallbackScript.async = true;
4257        fallbackScript.defer = true;
4258        fallbackScript.src = scriptSrc;
4259        var y = document.getElementsByTagName("script")[0];
4260        y.parentNode.insertBefore(fallbackScript, y);
4261      };
4262
4263      var x = document.getElementsByTagName("script")[0];
4264      x.parentNode.insertBefore(s, x);
4265    }
4266    
4267      var consentAPICallbackInvoked = false;
4268      function checkConsentAndLoad() {
4269        // Allow app to load in design mode (theme editor) regardless of consent
4270        if (window.Shopify?.designMode) {
4271          loadSwymShopifyScript();
4272          return;
4273        }
4274
4275        // Ghost-Intent: If merchant enabled explicit consent, block SDK until
4276        // consent is given through our Ghost-Intent flow (sync nudge accept).
4277        // This works on any store regardless of region (EU or non-EU).
4278        var ghostConfig = window.SwymGhostIntentConfig || {};
4279        if (ghostConfig.isExplicitConsentNeeded || ghostConfig.isExplicitConsentNeededEvenForLocalStorage) {
4280          try {
4281            var consentKey = 'swym-ghost-consent-' + (window.Shopify && window.Shopify.shop || '');
4282            if (localStorage.getItem(consentKey) === 'true') {
4283              // Consent was given through our flow — load SDK
4284              loadSwymShopifyScript();
4285              return;
4286            }
4287          } catch(e) {}
4288
4289          // Check if Shopify native cookie consent was given via the cookie banner.
4290          // If user accepted cookies through Shopify's banner, load SDK normally
4291          // (Ghost-Intent is only needed when NO consent mechanism has been used).
4292          var shopifyConsentGiven = window.Shopify?.customerPrivacy?.preferencesProcessingAllowed?.();
4293          if (shopifyConsentGiven) {
4294            loadSwymShopifyScript();
4295            return;
4296          }
4297
4298          console.warn("[Swym Ghost-Intent] SDK blocked until explicit consent is given");
4299          return;
4300        }
4301
4302        var isCookieBannerVisible = window.Shopify?.customerPrivacy?.shouldShowBanner?.();
4303        if(!isCookieBannerVisible) {
4304          loadSwymShopifyScript();
4305          return;
4306        }
4307        var shouldLoadSwymScript = window.Shopify?.customerPrivacy?.preferencesProcessingAllowed?.();
4308        if (shouldLoadSwymScript) {
4309          loadSwymShopifyScript();
4310        } else {
4311          console.warn("No customer consent to load Swym Wishlist Plus");
4312        }
4313      }
4314      function initialiseConsentCheck() {
4315        document.addEventListener("visitorConsentCollected", (event) => { checkConsentAndLoad(); });
4316        window.Shopify?.loadFeatures?.(
4317          [{name: 'consent-tracking-api', version: '0.1'}],
4318          error => { 
4319            consentAPICallbackInvoked = true;
4320            if (error) {
4321              if(!window.Shopify?.customerPrivacy) {
4322                loadSwymShopifyScript();
4323                return;
4324              }
4325            }
4326            checkConsentAndLoad();
4327          }
4328        );
4329      }
4330      function consentCheckFallback(retryCount) {
4331        if(!consentAPICallbackInvoked) {
4332          if (window.Shopify?.customerPrivacy) {
4333            checkConsentAndLoad();
4334          } else if (retryCount >= 1) {
4335            console.warn("Shopify.loadFeatures unsuccessful on site, refer - https://shopify.dev/docs/api/customer-privacy#loading-the-customer-privacy-api. Proceeding with normal Swym Wishlist Plus load");
4336            // Ghost-Intent: route through checkConsentAndLoad so SDK block is respected
4337            checkConsentAndLoad();
4338          } else {
4339            setTimeout(() => consentCheckFallback(retryCount + 1), 1000);
4340          }
4341        }
4342      }
4343      if (document.readyState === "loading") {
4344        document.addEventListener("DOMContentLoaded", initialiseConsentCheck);
4345        window.addEventListener("load", () => consentCheckFallback(0));
4346      } else {
4347        initialiseConsentCheck();
4348      }
4349    
4350  })();
4351</script>
4351
4352
4353<!-- BEGIN app snippet: swymSnippet -->
4353<script defer>
4354  (function () {
4355    const currentSwymJSPath = '//premcdn.swymrelay.com/code/swym-shopify.js';
4356    const currentSwymStorePath = 'https://swymstore-v3premium-01.swymrelay.com';
4357    const dnsPrefetchLink = `<link rel="dns-prefetch" href="${currentSwymStorePath}" crossorigin>`;
4358    const dnsPrefetchLink2 = `<link rel="dns-prefetch" href="${currentSwymJSPath}">`;
4359    const preConnectLink = `<link rel="preconnect" href="${currentSwymJSPath}">`;
4360    const swymSnippet = document.getElementById('wishlist-embed-init');        
4361    if(dnsPrefetchLink) {swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink);}
4362    if(dnsPrefetchLink2) {swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink2);}
4363    if(preConnectLink) {swymSnippet.insertAdjacentHTML('afterend', preConnectLink);}
4364  })()
4365</script>
vendor: 1 bytes, line 4365
4365
4366<script id="swym-snippet" type="text">
4367  window.swymLandingURL = document.URL;
4368  window.swymCart = {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"EUR","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0};
4369  window.swymPageLoad = function() {
4370    window.SwymProductVariants = window.SwymProductVariants || {};
4371    window.SwymHasCartItems = 0 > 0;
4372    window.SwymPageData = {}, window.SwymProductInfo = {};
4373      var unknown = {et: 0};
4374      window.SwymPageData = unknown;
4375    
4376    window.SwymPageData.uri = window.swymLandingURL;
4377  };
4378  if(window.selectCallback){
4379    (function(){
4380      var originalSelectCallback = window.selectCallback;
4381      window.selectCallback = function(variant){
4382        originalSelectCallback.apply(this, arguments);
4383        try{
4384          if(window.triggerSwymVariantEvent){
4385            window.triggerSwymVariantEvent(variant.id);
4386          }
4387        }catch(err){
4388          console.warn("Swym selectCallback", err);
4389        }
4390      };})();}
4391  window.swymCustomerId =null;
4392  window.swymCustomerExtraCheck =
4393    null;
4394  var swappName = ("Wishlist" || "Wishlist");
4395  var swymJSObject = {
4396    pid: "D1xcLdGphI6r0hH0c48+YGO8R+a4zViROSdfQCC8RQc=",
4397    interface: "/apps/swym" + swappName + "/interfaces/interfaceStore.php?appname=" + swappName
4398  };
4399  window.swymJSShopifyLoad = function(){
4400    if(window.swymPageLoad) swymPageLoad();
4401    if(!window._swat) {
4402      (function (s, w, r, e, l, a, y) {
4403        r['SwymRetailerConfig'] = s;
4404        r[s] = r[s] || function (k, v) {
4405          r[s][k] = v;
4406        };
4407      })('_swrc', '', window);
4408      _swrc('RetailerId', swymJSObject.pid);
4409      _swrc('Callback', function(){initSwymShopify();});
4410    }else if(window._swat.postLoader){
4411      _swrc = window._swat.postLoader;
4412      _swrc('RetailerId', swymJSObject.pid);
4413      _swrc('Callback', function(){initSwymShopify();});
4414    }else{
4415      initSwymShopify();}
4416  }
4417  if(!window._SwymPreventAutoLoad) {
4418    swymJSShopifyLoad();
4419  }
4420</script>
4420
4421
4422<style id="safari-flasher-pre"></style>
4423<script>
4424  if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {
4425    document.getElementById("safari-flasher-pre").innerHTML = '' + '#swym-plugin,#swym-hosted-plugin{display: none;}' + '.swym-button.swym-add-to-wishlist{display: none;}' + '.swym-button.swym-add-to-watchlist{display: none;}' + '#swym-plugin  #swym-notepad, #swym-hosted-plugin  #swym-notepad{opacity: 0; visibility: hidden;}' + '#swym-plugin  #swym-notepad, #swym-plugin  #swym-overlay, #swym-plugin  #swym-notification,' + '#swym-hosted-plugin  #swym-notepad, #swym-hosted-plugin  #swym-overlay, #swym-hosted-plugin  #swym-notification' + '{-webkit-transition: none; transition: none;}' + '';
4426    window.SwymCallbacks = window.SwymCallbacks || [];
4427    window.SwymCallbacks.push(function(tracker) {
4428      tracker.evtLayer.addEventListener(tracker.JSEvents.configLoaded, function() {
4429        var x = function() {
4430          SwymUtils.onDOMReady(function() {
4431            var d = document.createElement("div");
4432            d.innerHTML = "<style id='safari-flasher-post'>" + "#swym-plugin:not(.swym-ready),#swym-hosted-plugin:not(.swym-ready){display: none;}" + ".swym-button.swym-add-to-wishlist:not(.swym-loaded){display: none;}" + ".swym-button.swym-add-to-watchlist:not(.swym-loaded){display: none;}" + "#swym-plugin.swym-ready  #swym-notepad, #swym-plugin.swym-ready  #swym-overlay, #swym-plugin.swym-ready  #swym-notification," + "#swym-hosted-plugin.swym-ready  #swym-notepad, #swym-hosted-plugin.swym-ready  #swym-overlay, #swym-hosted-plugin.swym-ready  #swym-notification" + "{-webkit-transition: opacity 0.3s, visibility 0.3ms, -webkit-transform 0.3ms !important;-moz-transition: opacity 0.3s, visibility 0.3ms, -moz-transform 0.3ms !important;-ms-transition: opacity 0.3s, visibility 0.3ms, -ms-transform 0.3ms !important;-o-transition: opacity 0.3s, visibility 0.3ms, -o-transform 0.3ms !important;transition: opacity 0.3s, visibility 0.3ms, transform 0.3ms !important;}" + "</style>";
4433            document.head.appendChild(d);
4434          });};
4435        setTimeout(x, 10);
4436      });});}
4437  window.SwymOverrideMoneyFormat = "{{amount_with_comma_separator}}€";
4438</script>
4438
4439<style id="swym-product-view-defaults"> .swym-button.swym-add-to-wishlist-view-product:not(.swym-loaded) { display: none; } </style><!-- END app snippet -->
4440
4441<script
4442  
4443  id="swymSnippetCheckAndActivate"
4444>
4445  (function () {
4446    var duplicateProneIds = ['safari-flasher-pre', 'swym-product-view-defaults', 'swym-wrap-login-handler'];
4447
4448    function removeDuplicateIdNodes(id) {
4449      var nodes = document.querySelectorAll('#' + id);
4450      nodes.forEach(function (node, index) {
4451        if (index > 0) {
4452          node.remove();
4453        }
4454      });
4455    }
4456
4457    function cleanupDuplicateSnippetNodes(activeScript) {
4458      if (!activeScript) {
4459        return;
4460      }
4461      var allSwymSnippets = document.querySelectorAll('script#swym-snippet');
4462      allSwymSnippets.forEach(function (scriptNode) {
4463        if (scriptNode !== activeScript) {
4464          scriptNode.remove();
4465        }
4466      });
4467    }
4468
4469    function cleanupDuplicateActivationGuards() {
4470      var guardScripts = document.querySelectorAll('script#swymSnippetCheckAndActivate');
4471      guardScripts.forEach(function (scriptNode, index) {
4472        if (index > 0) {
4473          scriptNode.removeAttribute('id');
4474        }
4475      });
4476    }
4477
4478    function postDomLoad() {
4479      var activeScript = document.querySelector('script#swym-snippet:not([type="text"])');
4480      if (!activeScript) {
4481        var inactiveScript = document.querySelector('script#swym-snippet[type="text"]');
4482        if (inactiveScript) {
4483          inactiveScript.type = 'text/javascript';
4484          new Function(inactiveScript.textContent)();
4485          activeScript = inactiveScript;
4486        }
4487      }
4488
4489      cleanupDuplicateSnippetNodes(activeScript);
4490      cleanupDuplicateActivationGuards();
4491      duplicateProneIds.forEach(removeDuplicateIdNodes);
4492    }
4493
4494    if (document.readyState === 'loading') {
4495      document.addEventListener('DOMContentLoaded', postDomLoad);
4496    } else {
4497      postDomLoad();
4498    }
4499  })();
4500</script>
4500
4501
4502
4503
4504<script>
4505  (function () {
4506    const themeSchemaName = window.Shopify.theme.schema_name;
4507
4508    if (!window.SwymCallbacks) {
4509      window.SwymCallbacks = [];
4510    }
4511    window.SwymCallbacks.push(swat => {
4512      if (!swat) {
4513        return;
4514      }
4515
4516      // Ghost-Intent: Sync local wishlist items to cloud when SDK loads after consent
4517      if (window.SwymLocalWishlist && window.SwymLocalWishlist.getSyncableItems().length > 0) {
4518        window.SwymLocalWishlist.syncToCloud(swat);
4519      }
4520
4521      if (window._SwymSDKOnlyMode) {
4522        return;
4523      }
4524
4525      // ENABLE COMMON FEATURES
4526      let swymEnabledCommonFeatures = window.SwymEnabledCommonFeatures;
4527      Object.keys(swymEnabledCommonFeatures).forEach(key => {
4528        if (!swymEnabledCommonFeatures[key]) return;
4529
4530        switch (key) {
4531          case 'add-to-wishlist-collections-button':
4532            // Check if app block is already handling the collections button
4533            if (window.SwymCollectionsConfig) {
4534              return;
4535            }
4536
4537            // Check if v2 default collections is handling it
4538            if (window.SwymAdvancedCollectionsWishlistConfig) {
4539              return;
4540            }
4541
4542            // Fallback to old v1 behavior if v2 config is not present
4543            swat?.collectionsApi?.setDefaultCustomizationOptions();
4544            swat?.collectionsApi?.initializeCollections(swat, false, themeSchemaName);
4545
4546            break;
4547          case 'add-to-wishlist-pdp-button':
4548            // Check if app block is already handling the PDP button
4549            if (window.swymATWButtonConfig?.shopifyExtensionType === 'appblock') {
4550              return;
4551            }
4552
4553            if (!(window.SwymPageData && window.SwymPageData.et === 1)) {
4554              // Not initiating pdp button as it is not a product page
4555              return;
4556            }
4557
4558            // Inject addtowishlist.css into the document's <head>
4559            var head = document.head;
4560            var pdpButtonStylesheet = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/addtowishlistbutton.css";
4561            var pdpButtonStylesheetTag = document.createElement('link');
4562            pdpButtonStylesheetTag.id = `swym-pdp-button-stylesheet`;
4563            pdpButtonStylesheetTag.rel = 'stylesheet';
4564            pdpButtonStylesheetTag.href = pdpButtonStylesheet;
4565
4566            if (!document.getElementById('swym-pdp-button-stylesheet')) {
4567              head.appendChild(pdpButtonStylesheetTag);
4568            }
4569
4570            var x = document.getElementsByTagName('script')[0];
4571            function createAndInsertScript(id, src, onLoadCallback) {
4572              var scriptTag = document.createElement('script');
4573              scriptTag.id = id;
4574              scriptTag.type = 'text/javascript';
4575              scriptTag.src = src;
4576              scriptTag.onload = onLoadCallback;
4577              x.parentNode.insertBefore(scriptTag, x);
4578            }
4579
4580            var pdpButtonScript = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/addtowishlistbutton.js";
4581            createAndInsertScript(`swym-pdp-button-script`, pdpButtonScript, function () {
4582              const pdpBtnApi = window.WishlistPlusPDPButtonAPI;
4583              if (pdpBtnApi) {
4584                pdpBtnApi.setDefaultCustomizationOptions(swat);
4585                pdpBtnApi.initializePDPButton(swat, true);
4586              }
4587            });
4588            break;
4589          default:
4590            return;
4591        }
4592      });
4593    });
4594  })(); // IIFE to prevent polluting global scope
4595</script>
4595
4596
4597
4598
4599<script> 
4600  (function () {
4601    // Get the settings from Shopify's Liquid variables and create the styles
4602    const isControlCentreEnabledFromMetafield = window?.SwymEnabledCommonFeatures?.["control-centre"];
4603    const isCommonCustomizationEnabledFromMetafield = window?.SwymWishlistCommonCustomizationSettings && 
4604      Object.keys(window.SwymWishlistCommonCustomizationSettings).length > 0;
4605    const isControlCentreEnabledFromBlockSettings = false;
4606    
4607    if (!(isControlCentreEnabledFromMetafield && isCommonCustomizationEnabledFromMetafield) && !isControlCentreEnabledFromBlockSettings) {
4608      // Don't enable control centre if this is disabled and block settings are not enabled
4609      return;
4610    }
4611    
4612    let borderRadius = 6;
4613    let drawerWidth = window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutDrawerWidth || 400;
4614    
4615    // Check if block settings exist, use them, otherwise fall back to common settings
4616    let primaryBgColor = isControlCentreEnabledFromBlockSettings ? 
4617      "#000000" : 
4618      window.SwymWishlistCommonCustomizationSettings.primaryColor;
4619    
4620    let primaryTextColor = isControlCentreEnabledFromBlockSettings ? 
4621      "#ffffff" : 
4622      window.SwymWishlistCommonCustomizationSettings.secondaryColor;
4623    
4624    let secondaryBgColor = isControlCentreEnabledFromBlockSettings ? 
4625      "#F4F8FE" : null;
4626    let secondaryTextColor = isControlCentreEnabledFromBlockSettings ? 
4627      "#333333" : null;
4628
4629    // Only use color adjustment functions if we're using common settings
4630    if (!secondaryBgColor || !secondaryTextColor) {
4631      function adjustOpacity(color, opacity) {
4632        if (color[0] === '#') {
4633          color = color.slice(1);
4634        }
4635
4636        if (color.length === 3) {
4637          color = color.split('').map(char => char + char).join('');
4638        }
4639
4640        const r = parseInt(color.slice(0, 2), 16);
4641        const g = parseInt(color.slice(2, 4), 16);
4642        const b = parseInt(color.slice(4, 6), 16);
4643
4644        return `rgba(${r}, ${g}, ${b}, ${opacity})`;
4645      }
4646
4647      function hexToRgb(color) {
4648        if (color[0] === '#') {
4649          color = color.slice(1);
4650        }
4651        if (color.length === 3) {
4652          color = color.split('').map(c => c + c).join('');
4653        }
4654
4655        return {
4656          r: parseInt(color.slice(0, 2), 16),
4657          g: parseInt(color.slice(2, 4), 16),
4658          b: parseInt(color.slice(4, 6), 16)
4659        };
4660      }
4661
4662      function getLuminance({ r, g, b }) {
4663        return 0.299 * r + 0.587 * g + 0.114 * b;
4664      }
4665
4666      function generateSecondaryColors(primaryBgColor, primaryTextColor) {
4667        const secondaryBgOpacity = 0.2;
4668        const secondaryTextOpacity = 0.8;
4669
4670        const secondaryBgColor = adjustOpacity(primaryBgColor, secondaryBgOpacity);
4671
4672        const bgRgb = hexToRgb(primaryBgColor);
4673        const bgLuminance = getLuminance(bgRgb);
4674
4675        // Determine whether to use dark or light text for contrast
4676        const lightText = adjustOpacity(primaryTextColor, secondaryTextOpacity);
4677        const darkText = adjustOpacity(primaryBgColor, secondaryTextOpacity);
4678
4679        const secondaryTextColor = bgLuminance > 186 ? darkText : lightText;
4680
4681        return {
4682          secondaryBgColor,
4683          secondaryTextColor
4684        };
4685      }
4686
4687      const generatedColors = generateSecondaryColors(primaryBgColor, primaryTextColor);
4688      secondaryBgColor = secondaryBgColor || generatedColors.secondaryBgColor;
4689      secondaryTextColor = secondaryTextColor || generatedColors.secondaryTextColor;
4690    }
4691
4692    // Create the CSS rule
4693    let styles = `
4694      .swym-storefront-layout-root-component {
4695        --swym-storefront-layout-ui-border-radius: ${borderRadius}px;
4696        --swym-storefront-layout-button-border-radius: ${borderRadius}px;
4697        --swym-storefront-layout-side-drawer-width: ${drawerWidth}px;
4698        --swym-storefront-layout-button-color-bg-primary: ${primaryBgColor};
4699        --swym-storefront-layout-button-color-text-primary: ${primaryTextColor};
4700        --swym-storefront-layout-button-color-bg-secondary: ${secondaryBgColor};
4701        --swym-storefront-layout-button-color-text-secondary: ${secondaryTextColor};
4702      }
4703    `;
4704
4705    // Create a <style> element and append the styles
4706    let styleSheet = document.createElement("style");
4707    styleSheet.type = "text/css";
4708    styleSheet.innerText = styles;
4709    document.head.appendChild(styleSheet);
4710
4711    if (typeof window.SwymStorefrontLayoutContext === 'undefined') {
4712        window.SwymStorefrontLayoutContext = {};
4713    }
4714    if (typeof window.SwymStorefrontLayoutExtensions === 'undefined'){
4715        window.SwymStorefrontLayoutExtensions = {};
4716    }
4717
4718    // Expose block settings toggle state so ThemeCSSMapping can respect it.
4719    // When true, theme editor color pickers take priority over inherited theme CSS variables.
4720    SwymStorefrontLayoutContext.BlockSettingsEnabled = isControlCentreEnabledFromBlockSettings;
4721
4722    if (isControlCentreEnabledFromBlockSettings) {
4723      // If block settings are enabled, use them
4724      SwymStorefrontLayoutContext.Settings = {
4725        EnableStorefrontLayoutOnLauncher: true,
4726        EnableStorefrontLayoutNotification: window?.SwymWishlistCommonCustomizationSettings?.enableStorefrontLayoutNotification ?? true,
4727        StorefrontLayoutType: window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutType || "as-drawer",
4728        StorefrontLayoutDrawerPosition: "left",
4729        StorefrontLayoutAsSectionContainerId: "swym-wishlist-render-container",
4730        StorefrontLayoutAsSectionPageURL: "/pages/swym-wishlist",
4731        EnableStorefrontLayoutVariantSelector: true,
4732        StorefrontLayoutNotificationPosition: "left",
4733        StorefrontLayoutActionPopupPosition: "left",
4734        StorefrontLayoutNotificationDuration: 5000
4735      };
4736    } else {
4737      // If only metafield is enabled but no block settings, use common settings
4738      SwymStorefrontLayoutContext.Settings = {
4739        EnableStorefrontLayoutOnLauncher: true,
4740        EnableStorefrontLayoutNotification: window?.SwymWishlistCommonCustomizationSettings?.enableStorefrontLayoutNotification ?? true,
4741        StorefrontLayoutType: window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutType || "as-drawer",
4742        StorefrontLayoutDrawerPosition: "left",
4743        StorefrontLayoutAsSectionContainerId: "swym-wishlist-render-container",
4744        StorefrontLayoutAsSectionPageURL: "/pages/swym-wishlist",
4745        EnableStorefrontLayoutVariantSelector: true,
4746        StorefrontLayoutNotificationPosition: "left",
4747        StorefrontLayoutActionPopupPosition: "left",
4748        StorefrontLayoutNotificationDuration: 5000
4749      };
4750    }
4751    const storefrontLayoutCallback = (swat) =>{
4752      SwymStorefrontLayoutContext.swat = swat;
4753      let isStoreOnPaidPlan = swat.getApp('Wishlist')?.['is-paid'];
4754      let isWishlistEnabled = swat.getApp('Wishlist')?.['enabled'];
4755      SwymStorefrontLayoutContext.Settings = {
4756        ...SwymStorefrontLayoutContext?.Settings,
4757        EnableStorefrontLayoutCollection: window?.SwymEnabledCommonFeatures?.["multiple-wishlist"] ?? false,
4758        EnableStorefrontLayout: isWishlistEnabled && (isControlCentreEnabledFromBlockSettings || isControlCentreEnabledFromMetafield),
4759      }
4760
4761      if(SwymStorefrontLayoutContext?.Settings?.EnableStorefrontLayout){
4762        if(SwymStorefrontLayoutContext?.CustomEvents?.LayoutInitialized){
4763          var event = new CustomEvent(SwymStorefrontLayoutContext.CustomEvents.LayoutInitialized, { 
4764            detail: { settings: SwymStorefrontLayoutContext?.Settings }
4765          });
4766          document.dispatchEvent(event);
4767        }else{
4768          swat.utils.warn(`LayoutInitialized event is not defined.`);
4769        }
4770      }else{
4771        swat.utils.warn(`Storefront Layout is disabled.`);
4772        document.getElementById("swym-storefront-layout-container")?.remove();
4773        document.getElementById("swym-storefront-extention-render-container")?.remove();
4774      }
4775    }
4776  
4777    if (!window.SwymCallbacks) {
4778      window.SwymCallbacks = [];
4779    }
4780    window.SwymCallbacks.push(storefrontLayoutCallback);
4781  
4782    SwymStorefrontLayoutContext.SwymCustomerData = {
4783      
4784        name: null,
4785        email: null
4786      
4787    };
4788    SwymStorefrontLayoutContext.isShopperLoggedIn = !!SwymStorefrontLayoutContext?.SwymCustomerData?.email;
4789  })();
4790</script>
4790
4791
4792
4793
4794
4795</div><div id="shopify-block-AVmRZODJvS3BJU24vR__15472879455061085326" class="shopify-block shopify-app-block">
4796
4797
4798  
4798<script>
4799    const avadaOrderlimitSettings = {"theme":"light","buttonBgColor":"#FFFFFF","buttonMessageColor":"#FF0000","fontFamily":"inherit","displayType":"inline","textAlignment":"left","fontSize":14,"customCSS":"","enabledLimits":false,"enabledCollectionLimit":false,"enabledContactUs":true,"customSelector":{},"shopId":"YE4f28yOMKJunqJMMWDm","createdAt":"2025-01-24T10:29:50.138Z","bgColor":"#faeae1","messageColor":"#000000","id":"tFVGQ3wya5xSFLZvZqaf"};
4800    const avadaIntegration = null;
4801    const avadaIsLimit = {"isLimit":false};
4802    const messageTranslationMetafield = {"ujBeGuh7MY9XtFR8zW3w":{"en":{"minimumQuantityLimitMessage":"Vous dever sélectionner au moins {{minimum_product_quantity}} produits","maximumQuantityLimitMessage":"Vous ne pouvez sélectionner qu'un maximum de {{maximum_product_quantity}} produits","buttonText":"Contact us","contactUsText":"Please click \"{Button text}\" if you want to buy in bulk","isEnabled":true}}} || {};
4803    const orderLimitMetafield = {"checkoutRule":{"orderLimits":[{"name":"Product limit #1","status":"active","type":"product","isExcludeProductEnable":false,"selectedProductType":["specific"],"isContactUsEnable":false,"contactUsText":"Please click \"{Button text}\" if you want to buy in bulk","buttonText":"Contact us","contactUsURL":"https:\/\/","enabledEndDate":false,"startDate":"2025-02-16T16:21:23.401Z","endDate":"2025-02-17T00:00:00.000Z","defaultLanguage":"en","limitCustomer":"once_per_year","limitCustomerInterval":10,"limitCustomerIntervalType":"day","shopId":"YE4f28yOMKJunqJMMWDm","createdAt":"2025-02-17T16:23:52.484Z","condition":{"type":"product_quantity","min":1,"max":2,"isMultiple":false,"applyAllVariant":true,"multiple":2},"translations":{"en":{"minimumQuantityLimitMessage":"Vous dever sélectionner au moins {{minimum_product_quantity}} produits","maximumQuantityLimitMessage":"Vous ne pouvez sélectionner qu'un maximum de {{maximum_product_quantity}} produits","buttonText":"Contact us","contactUsText":"Please click \"{Button text}\" if you want to buy in bulk","isEnabled":true}},"minimumQuantityLimitMessage":"Vous dever sélectionner au moins {{minimum_product_quantity}} produits","maximumQuantityLimitMessage":"Vous ne pouvez sélectionner qu'un maximum de {{maximum_product_quantity}} produits","triggerProducts":[{"id":"15451232338255","variants":[{"id":"55408084975951"}]}],"minimumWeightLimitMessage":"You must select at least {{minimum_product_weight}} {{weight_unit}}","maximumWeightLimitMessage":"You can only select a maximum of {{maximum_product_weight}} {{weight_unit}}","triggerAt":"add_to_cart","updatedAt":"2025-06-25T12:51:49.591Z","id":"ujBeGuh7MY9XtFR8zW3w"}],"shopUnit":"kg"},"limitStatus":{"isLimit":false},"orderLimit":{"orderLimits":[{"id":"ujBeGuh7MY9XtFR8zW3w","shopId":"YE4f28yOMKJunqJMMWDm","condition":{"type":"product_quantity","min":1,"max":2,"isMultiple":false,"applyAllVariant":true,"multiple":2},"startDate":"2025-02-16T16:21:23.401Z","enabledEndDate":false,"endDate":"2025-02-17T00:00:00.000Z","type":"product","selectedProductType":["specific"],"triggerProducts":[{"id":"15451232338255","variants":["55408084975951"]}],"triggerAt":"add_to_cart","isExcludeProductEnable":false,"isContactUsEnable":false,"contactUsText":"Please click \"{Button text}\" if you want to buy in bulk","contactUsURL":"https:\/\/","buttonText":"Contact us","maximumQuantityLimitMessage":"Vous ne pouvez sélectionner qu'un maximum de {{maximum_product_quantity}} produits","maximumWeightLimitMessage":"You can only select a maximum of {{maximum_product_weight}} {{weight_unit}}","minimumQuantityLimitMessage":"Vous dever sélectionner au moins {{minimum_product_quantity}} produits","minimumWeightLimitMessage":"You must select at least {{minimum_product_weight}} {{weight_unit}}","updatedAt":"2025-06-25T12:51:49.591Z","limitCustomer":"once_per_year","limitCustomerInterval":10,"limitCustomerIntervalType":"day"}],"shopUnit":"kg"},"settings":{"theme":"light","buttonBgColor":"#FFFFFF","buttonMessageColor":"#FF0000","fontFamily":"inherit","displayType":"inline","textAlignment":"left","fontSize":14,"customCSS":"","enabledLimits":false,"enabledCollectionLimit":false,"enabledContactUs":true,"customSelector":{},"shopId":"YE4f28yOMKJunqJMMWDm","createdAt":"2025-01-24T10:29:50.138Z","bgColor":"#faeae1","messageColor":"#000000","id":"tFVGQ3wya5xSFLZvZqaf"}};
4804    const avadaAllCollectionsOfProduct = [];
4805    const avadaVariants =  [];
4806    const avadaTemplate = 'login';
4807    const avadaProductId =  '' ;
4808    const avadaSelectedVariant =  '' ;
4809    const avadaShopDomain =  'www.beauteprivee.fr' ;
4810    const avadaShopCurrency =  'EUR' ;
4811    const avadaCustomerTags =  [] ;
4812    const avadaCustomerEmail =  '' ;
4813    const avadaCustomerId =  '' ;
4814    const avadaWeightUnit = '0.099 kg'.split(' ')[1];
4815    const avadaCustomerActivities =  [] ;
4816    const rules = Object.keys(orderLimitMetafield).reduce((acc, curr) => {
4817      if (curr.includes('orderLimit')) {
4818        return [...acc, ...(orderLimitMetafield[curr].orderLimits || [])];
4819      }
4820      return acc;
4821    }, []);
4822    const avadaOrderLimitProduct =  null ;
4823
4824    const avadaCollectionsInProducts = new Map();
4825    const avadaTagsInProducts = new Map();
4826
4827    let avadaProductIdCartPage;
4828    
4829
4830    
4831
4832    window.AVADA_ORDER_LIMIT = {
4833      collectionsInProducts: avadaCollectionsInProducts,
4834      tagsInProducts: avadaTagsInProducts,
4835      variants: avadaVariants,
4836      productId: avadaProductId,
4837      product: avadaOrderLimitProduct,
4838      template: avadaTemplate,
4839      rules: rules,
4840      messageTranslation : messageTranslationMetafield,
4841      selectedVariant: avadaSelectedVariant || (avadaVariants.length ? avadaVariants[0].id : ''),
4842      shop: {
4843        id: rules[0]?.shopId,
4844        domain: avadaShopDomain,
4845        currency: avadaShopCurrency,
4846        weightUnit: avadaWeightUnit
4847      },
4848      customer: {
4849        tags: avadaCustomerTags,
4850        activities: avadaCustomerActivities !== null ? avadaCustomerActivities : [],
4851        email: avadaCustomerEmail,
4852        id: avadaCustomerId
4853      },
4854      settings: avadaOrderlimitSettings,
4855      integration: avadaIntegration,
4856      isLimit: avadaIsLimit ? avadaIsLimit.isLimit : false,
4857    };
4858
4859  </script>
4859
4860
4861
4862
4863
4864
4865</div><div id="shopify-block-ARzdWTngvMFlVWUtIS__8776485610325655785" class="shopify-block shopify-app-block">
4866  <link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a099ee-0181-72a2-b832-a61abfa7fe3d/simple-social-login-173/assets/fonts.css" media="print" onload="this.media='all'">
4867  <noscript><link href="//cdn.shopify.com/extensions/01a099ee-0181-72a2-b832-a61abfa7fe3d/simple-social-login-173/assets/fonts.css" rel="stylesheet" type="text/css" media="all" /></noscript>
4868
4869
4870<link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a099ee-0181-72a2-b832-a61abfa7fe3d/simple-social-login-173/assets/styles.css" media="print" onload="this.media='all'">
4871<noscript><link href="//cdn.shopify.com/extensions/01a099ee-0181-72a2-b832-a61abfa7fe3d/simple-social-login-173/assets/styles.css" rel="stylesheet" type="text/css" media="all" /></noscript>
4871<script src="https://cdn.shopify.com/extensions/01a099ee-0181-72a2-b832-a61abfa7fe3d/simple-social-login-173/assets/app.js?" async defer></script>
4871
4872
4873</div><div id="shopify-block-AdE9ZbXAzR2NiZjEzd__6441254115607727225" class="shopify-block shopify-app-block"><div>
4874  
4875
4876  
4877    <!--
4878    <div class="rh-quiz-list page-width">
4879      <div class="rh-info-box mtop-20 mbot-20">
4880        <p><b>Choose the ID of the Quiz you want to render (automatic popup):</b></p>
4881        <ul>
4882          
4883            <li>Diagnostic peau with ID: <b>koHP0DQ</b></li>
4884          
4885            <li>Diagnostic cheveux with ID: <b>rkH93Oo</b></li>
4886          
4887            <li>[TEST] Diagnostic cheveux with ID: <b>meHvpQA</b></li>
4888          
4889        </ul>
4890      </div>
4891    </div>
4892    -->
4893  
4894</div>
4895
4896
4897</div><div id="shopify-block-ATEE3ZkFQcUtzdnBXZ__6990797075511561578" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: nosto-tagging -->
4898
4899<div class="nosto_page_type" style="display:none">other</div>
4900
4901
4902  <div class="nosto_market" style="display:none">
4903    <span class="id">28196077703</span>
4904    <span class="locale">fr</span>
4905    <span class="b2b">false</span>
4906  </div>
4907
4908
4909<div class="nosto_shopify_shop" style="display: none">
4910  <span class="id">59307819143</span>
4911</div>
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922  <div class="nosto_cart" style="display:none">
4923    
4924    
4925    
4926  </div>
4927
4928
4929
4930
4931
4932<!-- END app snippet -->
4933
4934
4935</div><div id="shopify-block-AYVh2eG5seWR6K0EzZ__6141582171523228424" class="shopify-block shopify-app-block">
4935<script src="//cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeUtilities.js" type="text/javascript"></script>
vendor: 1 bytes, line 4935
4935
4936<script src="//cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeBannerScript.js" type="text/javascript"></script>
4936
4937
4938<script type="text/javascript">
4939  const brazeWebSDKPoller = setInterval(()=>{
4940    // if the conditional is false, then we don't need to poll anymore and should clear the interval
4941    // if the conditional is true, but readValueFromLocalStorageWithRetry doesn't exist, we should retry
4942    // if the conditional is true and readValueFromLocalStorageWithRetry exists we should load the script and clear the interval
4943    readValueFromLocalStorageWithRetry('brazeAppSettings').then((data) => {
4944      loadScriptTag("https://cdn.shopify.com/extensions/01a0ca72-e20e-7e37-b11b-69467298a8ea/29-adb7c67ff991881fe58b32352c944a481bbcbb8b/assets/BrazeWebSdkScript.js", "module");
4945    });
4946    clearInterval(brazeWebSDKPoller);
4947  }, 2000)
4948</script>
4948
4949
4950
4951</div>
4951<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4951
4952</body>
4953    
4954</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.