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 – 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&width=2740" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&width=352 352w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&width=832 832w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&width=1200 1200w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&width=1920 1920w, //www.beauteprivee.fr/cdn/shop/files/WALL-CONNEXION-INSCRIPTION-TEST_f27330f9-8496-4bf7-85d5-333bf995c992.jpg?v=1746457708&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&width=320" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-1.jpg?v=1746437189&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&width=320" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-2.jpg?v=1746437190&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&width=320" alt="" srcset="//www.beauteprivee.fr/cdn/shop/files/CONNEXION-3.jpg?v=1746437189&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 (&, @...)</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'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'en reste que {{ count }} en stock", 3917 "out_of_stock": "Victime de son succès !", 3918 "exist_in": "Existe en", 3919 "alert_me": "M'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'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.