<!doctype html>
<html lang="fr">
<head >
<meta charset="utf-8"/><script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},feature_flags:["soft_nav"],distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1103471843",accountID:"7438348",trustKey:"1322840",xpid:"UwIEWVVXABABVFJXAAYOU1IF",licenseKey:"NRJS-4b6988c7591e6a263f7",applicationID:"1035779564",browserID:"1103471843"};;/*! For license information please see nr-loader-spa-1.310.1.min.js.LICENSE.txt */
(()=>{var e,t,r={384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>a,US:()=>l,Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>f});var n=r(6154),i=r(1863),s=r(944),o=r(1910);const a={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,o.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(e,t){c()[e]=t}function f(){return function(){let e=c();const t=e.info||{};e.info={beacon:a.beacon,errorBeacon:a.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>u,K7:()=>c,P3:()=>d,XX:()=>i,Yy:()=>a,df:()=>s,qY:()=>n,v4:()=>o});const n="events",i="jserrors",s="browser/blobs",o="rum",a="browser/logs",c={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},d={[c.pageViewEvent]:1,[c.pageViewTiming]:2,[c.metrics]:3,[c.jserrors]:4,[c.softNav]:5,[c.ajax]:6,[c.sessionTrace]:7,[c.sessionReplay]:8,[c.logging]:9,[c.genericEvents]:10},u={[c.pageViewEvent]:o,[c.pageViewTiming]:n,[c.ajax]:n,[c.softNav]:n,[c.metrics]:i,[c.jserrors]:i,[c.sessionTrace]:s,[c.sessionReplay]:s,[c.logging]:a,[c.genericEvents]:"ins"}},944:(e,t,r)=>{"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({agentIdentifier:null,drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},993:(e,t,r)=>{"use strict";r.d(t,{A$:()=>s,ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},s={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},o="log",a=n.K7.logging},1541:(e,t,r)=>{"use strict";r.d(t,{U:()=>i,f:()=>n});const n={MFE:"MFE",BA:"BA"};function i(e,t){if(2!==t?.harvestEndpointVersion)return{};const r=t.agentRef.runtime.appMetadata.agents[0].entityGuid;return e?{"source.id":e.id,"source.name":e.name,"source.type":e.type,"parent.id":e.parent?.id||r,"parent.type":e.parent?.type||n.BA}:{"entity.guid":r,appId:t.agentRef.info.applicationID}}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>d,Ze:()=>f,x3:()=>u});var n=r(3241),i=r(7836),s=r(3606),o=r(860),a=r(2646);const c={};function d(e,t){const r={staged:!1,priority:o.P3[t]||0};l(e),c[e].get(t)||c[e].set(t,r)}function u(e,t){e&&c[e]&&(c[e].get(t)&&c[e].delete(t),p(e,t,!1),c[e].size&&h(e))}function l(e){if(!e)throw new Error("agentIdentifier required");c[e]||(c[e]=new Map)}function f(e="",t="feature",r=!1){if(l(e),!e||!c[e].get(t)||r)return p(e,t);c[e].get(t).staged=!0,h(e)}function h(e){const t=Array.from(c[e]);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{c[e].delete(t),p(e,t)}))}function p(e,t,r=!0){const o=e?i.ee.get(e):i.ee,c=s.i.handlers;if(!o.aborted&&o.backlog&&c){if((0,n.W)({agentIdentifier:e,type:"lifecycle",name:"drain",feature:t}),r){const e=o.backlog[t],r=c[t];if(r){for(let t=0;e&&t<e.length;++t)g(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}o.isolatedBacklog||delete c[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function g(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},1738:(e,t,r)=>{"use strict";r.d(t,{U:()=>h,Y:()=>f});var n=r(3241),i=r(9908),s=r(1863),o=r(944),a=r(5701),c=r(3969),d=r(8362),u=r(860),l=r(4261);function f(e,t,r,s){const f=s||r;!f||f[e]&&f[e]!==d.d.prototype[e]||(f[e]=function(){(0,i.p)(c.xV,["API/"+e+"/called"],void 0,u.K7.metrics,r.ee),(0,n.W)({agentIdentifier:r.agentIdentifier,drained:!!a.B?.[r.agentIdentifier],type:"data",name:"api",feature:l.Pl+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,o.R)(23,e)}})}function h(e,t,r,n,o){const a=e.info;null===r?delete a.jsAttributes[t]:a.jsAttributes[t]=r,(o||null===r)&&(0,i.p)(l.Pl+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},1741:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e(i.$9,e,t)}start(){return this.#e(i.d3)}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},1910:(e,t,r)=>{"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},2555:(e,t,r)=>{"use strict";r.d(t,{D:()=>a,f:()=>o});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function o(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}const a=e=>(0,i.a)(e,s)},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>o,H3:()=>n,g:()=>d,iL:()=>c,tS:()=>a,uh:()=>i,wk:()=>s});const n="NRBA",i="SESSION",s=144e5,o=18e5,a={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},d={OFF:0,FULL:1,ERROR:2}},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},2843:(e,t,r)=>{"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},3241:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(6154);const i="newrelic";function s(e={}){try{n.gm.dispatchEvent(new CustomEvent(i,{detail:e}))}catch(e){}}},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(7836);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function s(e){try{return JSON.stringify(e,i())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},3333:(e,t,r)=>{"use strict";r.d(t,{$v:()=>u,TZ:()=>n,Xh:()=>c,Zp:()=>i,kd:()=>d,mq:()=>a,nf:()=>o,qN:()=>s});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],s=["focus","blur"],o=4,a=1e3,c=2e3,d=["PageAction","UserAction","BrowserPerformance"],u={RESOURCES:"experimental.resources",REGISTER:"register"}},3434:(e,t,r)=>{"use strict";r.d(t,{Jt:()=>s,YM:()=>d});var n=r(7836),i=r(5607);const s="nr@original:".concat(i.W),o=50;var a=Object.prototype.hasOwnProperty,c=!1;function d(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,s){n||(n="");const o="-"===n.charAt(0);for(let a=0;a<t.length;a++){const c=t[a],d=e[c];l(d)||(e[c]=r(d,o?c+n:n,i,c,s))}},r.flag=s,r;function r(t,r,n,c,d){return l(t)?t:(r||(r=""),nrWrapper[s]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var s,a,l,f;let h;try{a=this,s=[...arguments],l="function"==typeof n?n(s,a):n||{}}catch(t){u([t,"",[s,a,c],l],e)}i(r+"start",[s,a,c],l,d);const p=performance.now();let g;try{return f=t.apply(a,s),g=performance.now(),f}catch(e){throw g=performance.now(),i(r+"err",[s,a,e],l,d),h=e,h}finally{const e=g-p,t={start:p,end:g,duration:e,isLongTask:e>=o,methodName:c,thrownError:h};t.isLongTask&&i("long-task",[t,a],l,d),i(r+"end",[s,a,f],l,d)}}}function i(r,n,i,s){if(!c||t){var o=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=o}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[s])}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=o;var i=s.handlers={};function s(e,t,r,s){o(s||n.d,i,e,t,r)}function o(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var o=t[s]=t[s]||{};(o[r]=o[r]||[]).push([e,i])}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>a,Lc:()=>d,Rz:()=>u,TZ:()=>n,bD:()=>s,d3:()=>o,jx:()=>l,sl:()=>f,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",s="resource",o="-start",a="-end",c="fn"+o,d="fn"+a,u="pushState",l=1e3,f=3e4},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),o=r(3969),a=r(993);function c(e,t,r={},c=a.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(o.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)(a.ET,[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(a.p_).some(t=>t===e.toUpperCase().trim())}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},3962:(e,t,r)=>{"use strict";r.d(t,{AM:()=>o,O2:()=>l,OV:()=>s,Qu:()=>f,TZ:()=>c,ih:()=>h,pP:()=>a,t1:()=>u,tC:()=>i,wD:()=>d});var n=r(860);const i=["click","keydown","submit"],s="popstate",o="api",a="initialPageLoad",c=n.K7.softNav,d=5e3,u=500,l={INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},f={INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},h={IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"}},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>a,rs:()=>i,xV:()=>o,z_:()=>s});const n=r(860).K7.metrics,i="sm",s="cm",o="storeSupportabilityMetrics",a="storeEventMetrics"},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(7836),i=r(1687);class s{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},4261:(e,t,r)=>{"use strict";r.d(t,{$9:()=>u,BL:()=>c,CH:()=>p,Dl:()=>R,Fw:()=>w,PA:()=>v,Pl:()=>n,Pv:()=>x,Tb:()=>f,U2:()=>o,V1:()=>A,Wb:()=>T,bt:()=>b,cD:()=>y,d3:()=>E,dT:()=>d,eY:()=>g,fF:()=>h,hG:()=>s,hw:()=>i,k6:()=>a,nb:()=>m,o5:()=>l});const n="api-",i=n+"ixn-",s="addPageAction",o="addToTrace",a="addRelease",c="finished",d="interaction",u="log",l="noticeError",f="pauseReplay",h="recordCustomEvent",p="recordReplay",g="register",m="setApplicationVersion",v="setCurrentRouteName",y="setCustomAttribute",b="setErrorHandler",w="setPageViewName",R="setUserId",E="start",T="wrapLogger",A="measure",x="consent"},5205:(e,t,r)=>{"use strict";r.d(t,{j:()=>_});var n=r(384),i=r(1741);var s=r(2555),o=r(3333);const a=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var c=r(2614),d=r(944),u=r(8122);const l="[data-nr-mask]",f=e=>(0,u.a)(e,(()=>{const e={feature_flags:[],experimental:{allow_registered_children:!1,resources:!1},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0},api:{get allow_registered_children(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.allow_registered_children},set allow_registered_children(t){e.experimental.allow_registered_children=t},duplicate_registered_data:!1},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:c.wk,inactiveMs:c.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){a(t)?e.mask_selector="".concat(t,",").concat(l):""===t||null===t?e.mask_selector=l:(0,d.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){a(t)?e.block_selector+=",".concat(t):""!==t&&(0,d.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,d.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]}}})());var h=r(6154),p=r(9324);let g=0;const m={buildEnv:p.F3,distMethod:p.Xs,version:p.xv,originTime:h.WN},v={consented:!1},y={appMetadata:{},get consented(){return this.session?.state?.consent||v.consented},set consented(e){v.consented=e},customTransaction:void 0,denyList:void 0,disabled:!1,harvester:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++g}},b=e=>{const t=(0,u.a)(e,y),r=Object.keys(m).reduce((e,t)=>(e[t]={value:m[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)};var w=r(5701);const R=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};var E=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},x=e=>(0,u.a)(e,A),S=new Set;function _(e,t={},r,o){let{init:a,info:c,loader_config:d,runtime:u={},exposed:l=!0}=t;if(!c){const e=(0,n.pV)();a=e.init,c=e.info,d=e.loader_config}e.init=f(a||{}),e.loader_config=x(d||{}),c.jsAttributes??={},h.bv&&(c.jsAttributes.isWorker=!0),e.info=(0,s.D)(c);const p=e.init,g=[c.beacon,c.errorBeacon];S.has(e.agentIdentifier)||(p.proxy.assets&&(R(p.proxy.assets),g.push(p.proxy.assets)),p.proxy.beacon&&g.push(p.proxy.beacon),e.beacons=[...g],function(e){const t=(0,n.pV)();Object.getOwnPropertyNames(i.W.prototype).forEach(r=>{const n=i.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let s=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return s?s(...t):n})})}(e),(0,n.US)("activatedFeatures",w.B)),u.denyList=[...p.ajax.deny_list||[],...p.ajax.block_internal?g:[]],u.ptid=e.agentIdentifier,u.loaderType=r,e.runtime=b(u),S.has(e.agentIdentifier)||(e.ee=E.ee.get(e.agentIdentifier),e.exposed=l,(0,T.W)({agentIdentifier:e.agentIdentifier,drained:!!w.B?.[e.agentIdentifier],type:"lifecycle",name:"initialize",feature:void 0,data:e.config})),S.add(e.agentIdentifier)}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>o,SR:()=>s,rF:()=>a});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function o(e){return!0===e?.session_replay.preload&&s(e)}function a(e,t){try{if("string"==typeof t?.type){if("password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,Qr:()=>c,sB:()=>a});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(s())return e();const r=(0,i.J)(e),o=setInterval(()=>{s()&&(clearInterval(o),r())},500);(0,n.sp)("load",r,t)}function a(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},5701:(e,t,r)=>{"use strict";r.d(t,{B:()=>s,t:()=>o});var n=r(3241);const i=new Set,s={};function o(e,t){const r=t.agentIdentifier;s[r]??={},e&&"object"==typeof e&&(i.has(r)||(t.ee.emit("rumresp",[e]),s[r]=e,i.add(r),(0,n.W)({agentIdentifier:r,loaded:!0,drained:!0,type:"lifecycle",name:"load",feature:void 0,data:e})))}},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>d,RI:()=>i,WN:()=>f,bv:()=>s,eN:()=>h,gm:()=>o,lR:()=>l,m:()=>c,mw:()=>a,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),o=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),a=Boolean("hidden"===o?.document?.visibilityState),c=""+o?.location,d=/iPad|iPhone|iPod/.test(o.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=o.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)(),h=()=>"undefined"!=typeof PerformanceNavigationTiming&&o?.performance?.getEntriesByType("navigation")?.[0]?.responseStart},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>u,Qb:()=>l,TZ:()=>i,Ug:()=>o,Vh:()=>s,_s:()=>a,bc:()=>d,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,s="errorDuringReplay",o=.12,a={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},d={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},u=5e3,l={API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>o,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function o(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,o;i>0?(s=r.substring(0,i),o=r.substring(i)):(s=r,o="*");let[c]=s.split(":");n.push({hostname:a(c),pathname:a(o,!0)})}}function a(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7699:(e,t,r)=>{"use strict";r.d(t,{It:()=>s,KC:()=>a,No:()=>i,qh:()=>o});var n=r(860);const i=16e3,s=1e6,o="SESSION_ERROR",a={[n.K7.logging]:!0,[n.K7.genericEvents]:!1,[n.K7.jserrors]:!1,[n.K7.ajax]:!1}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>i});var n=r(6154);const i=e=>n.RI&&!0===e?.privacy.cookies_enabled},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>a,ee:()=>c});var n=r(384),i=r(8990),s=r(2646),o=r(5607);const a="nr@context:".concat(o.W),c=function e(t,r){var n={},o={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var a=h(n);g(e).forEach(e=>{e.apply(a,r)});var d=v()[o[e]];d&&d.push([f,e,r,a]);return a},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{o[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[o[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,a,()=>new s.y(a)):new s.y(a)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c)},7866:(e,t,r)=>{"use strict";r.d(t,{Nc:()=>s,cn:()=>a,fL:()=>i,h3:()=>n,hB:()=>o});const n=/function (.+?)\s*\(/,i=/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,s=/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,o=/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i},8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let o in s)if(void 0!==e[o])try{if(null===e[o]){r[o]=null;continue}Array.isArray(e[o])&&Array.isArray(t[o])?r[o]=Array.from(new Set([...e[o],...t[o]])):"object"==typeof e[o]&&"object"==typeof t[o]?r[o]=i(e[o],t[o]):r[o]=e[o]}catch(e){r[o]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),o=r(6154);const a={},c=o.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(a[t.debugId]++)return t;a[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[d,u],"-",p)}function p(e,t){return e[1]}return"getPrototypeOf"in Object&&(o.RI&&h(document,f),c&&h(c.prototype,f),h(o.gm,f)),t.on(d+"-start",function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)&&"newrelic"!==e[0]){var i=(0,s.I)(n,l,function(){var e={object:function(){if("function"!=typeof n.handleEvent)return;return n.handleEvent.apply(n,arguments)},function:n}[typeof n];return e?r(e,"fn-",null,e.name||"anonymous"):n});this.wrapped=e[1]=i}}),t.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},8362:(e,t,r)=>{"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},9119:(e,t,r)=>{"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},9324:(e,t,r)=>{"use strict";r.d(t,{AJ:()=>o,F3:()=>i,Xs:()=>s,Yq:()=>a,xv:()=>n});const n="1.310.1",i="PROD",s="CDN",o="@newrelic/rrweb",a="1.0.1"},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>a,ZF:()=>c,bz:()=>o,el:()=>d});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function s(e,t){return e?15&e[t]:16*Math.random()|0}function o(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map(e=>"x"===e?s(t,r++).toString(16):"y"===e?(3&s()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const o=[];for(var a=0;a<e;a++)o.push(s(r,i++).toString(16));return o.join("")}function c(){return a(16)}function d(){return a(32)}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={exports:{}};return r[e](s,s.exports,i),s.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce((t,r)=>(i.f[r](e,t),t),[])),i.u=e=>({212:"nr-spa-compressor",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.310.1.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.310.1.PROD:",i.l=(r,n,s,o)=>{if(e[r])e[r].push(n);else{var a,c;if(void 0!==s)for(var d=document.getElementsByTagName("script"),u=0;u<d.length;u++){var l=d[u];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+s){a=l;break}}if(!a){c=!0;var f={478:"sha512-DeqFdXQE4jC8a4pm4mRmKcvJcc0AwELF034DvhaEDGgJkABtwtC38fNnc5r/h2Ao/FbfITw8xLU63nj0RuK7eQ==",249:"sha512-omU0YV+hQgZOl40hWu2N/rhIaUJZ39c9UlgZbATxeG40NXrj8Ql6+lKlr7TG1xepBqnrxKzZpw7zzYci3rWWjQ==",212:"sha512-c9QUv59w2LTBgdjv9nbbpoyRqBOF2XbGfNVUaeBznaQEi49XTybGIsD9vogQKm7J8zdheuqHIho6/kaczmIUDw=="};(a=document.createElement("script")).charset="utf-8",i.nc&&a.setAttribute("nonce",i.nc),a.setAttribute("data-webpack",t+s),a.src=r,0!==a.src.indexOf(window.location.origin+"/")&&(a.crossOrigin="anonymous"),f[o]&&(a.integrity=f[o])}e[r]=[n];var h=(t,n)=>{a.onerror=a.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],a.parentNode&&a.parentNode.removeChild(a),i&&i.forEach(e=>e(n)),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=h.bind(null,a.onerror),a.onload=h.bind(null,a.onload),c&&document.head.appendChild(a)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={38:0,788:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var s=new Promise((r,i)=>n=e[t]=[r,i]);r.push(n[2]=s);var o=i.p+i.u(t),a=new Error;i.l(o,r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var s=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;a.message="Loading chunk "+t+" failed: ("+s+": "+o+")",a.name="ChunkLoadError",a.type=s,a.request=o,n[1](a)}},"chunk-"+t,t)}};var t=(t,r)=>{var n,s,[o,a,c]=r,d=0;if(o.some(t=>0!==e[t])){for(n in a)i.o(a,n)&&(i.m[n]=a[n]);if(c)c(i)}for(t&&t(r);d<o.length;d++)s=o[d],i.o(e,s)&&e[s]&&e[s][0](),e[s]=0},r=self["webpackChunk:NRBA-1.310.1.PROD"]=self["webpackChunk:NRBA-1.310.1.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(8362),t=i(860);const r=Object.values(t.K7);var n=i(5205);var s=i(9908),o=i(1863),a=i(4261),c=i(1738);var d=i(1687),u=i(4234),l=i(5289),f=i(6154),h=i(944),p=i(5270),g=i(7767),m=i(6389),v=i(7699);class y extends u.W{constructor(e,t){super(e.agentIdentifier,t),this.agentRef=e,this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,m.J)(()=>{(0,d.Ak)(e.agentIdentifier,this.featureName),t()}))}):(0,d.Ak)(e.agentIdentifier,t)}importAggregator(e,t,r={}){if(this.featAggregate)return;const n=async()=>{let n;await this.deferred;try{if((0,g.V)(e.init)){const{setupAgentSession:t}=await i.e(478).then(i.bind(i,8766));n=t(e)}}catch(e){(0,h.R)(20,e),this.ee.emit("internal-error",[e]),(0,s.p)(v.qh,[e],void 0,this.featureName,this.ee)}try{if(!this.#t(this.featureName,n,e.init))return(0,d.Ze)(this.agentIdentifier,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:i}=await t();this.featAggregate=new i(e,r),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,h.R)(34,e),this.abortHandler?.(),(0,d.Ze)(this.agentIdentifier,this.featureName,!0),this.loadedSuccessfully(!1),this.ee&&this.ee.abort()}};f.RI?(0,l.GG)(()=>n(),!0):n()}#t(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,p.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}}var b=i(6630),w=i(2614),R=i(3241);class E extends y{static featureName=b.T;constructor(e){var t;super(e,b.T),this.setupInspectionEvents(e.agentIdentifier),t=e,(0,c.Y)(a.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,s.p)(a.Pl+a.Fw,[(0,o.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>i.e(478).then(i.bind(i,2467)))}setupInspectionEvents(e){const t=(t,r)=>{t&&(0,R.W)({agentIdentifier:e,timeStamp:t.timeStamp,loaded:"complete"===t.target.readyState,type:"window",name:r,data:t.target.location+""})};(0,l.sB)(e=>{t(e,"DOMContentLoaded")}),(0,l.GG)(e=>{t(e,"load")}),(0,l.Qr)(e=>{t(e,"navigate")}),this.ee.on(w.tS.UPDATE,(t,r)=>{(0,R.W)({agentIdentifier:e,type:"lifecycle",name:"session",data:r})})}}var T=i(384);class A extends e.d{constructor(e){var t;(super(),f.gm)?(this.features={},(0,T.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(E),(0,n.j)(this,e,e.loaderType||"agent"),t=this,(0,c.Y)(a.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,c.U)(t,e,r,a.cD,n);(0,h.R)(40,typeof r)}else(0,h.R)(39,typeof e)},t),function(e){(0,c.Y)(a.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,h.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,s.p)(a.Pl+"setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,c.U)(e,"enduser.id",t,a.Dl,!0)},e)}(this),function(e){(0,c.Y)(a.nb,function(t){if("string"==typeof t||null===t)return(0,c.U)(e,"application.version",t,a.nb,!1);(0,h.R)(42,typeof t)},e)}(this),function(e){(0,c.Y)(a.d3,function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,c.Y)(a.Pv,function(t=!0){if("boolean"==typeof t){if((0,s.p)(a.Pl+a.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum()})}}else(0,h.R)(65,typeof t)},e)}(this),this.run()):(0,h.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return r.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),n=[...this.desiredFeatures];n.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),n.forEach(r=>{if(!e[r.featureName]&&r.featureName!==t.K7.pageViewEvent)return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,h.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,h.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,T.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var x=i(2843),S=i(782);class _ extends y{static featureName=S.T;constructor(e){super(e,S.T),f.RI&&((0,x.u)(()=>(0,s.p)("docHidden",[(0,o.t)()],void 0,S.T,this.ee),!0),(0,x.G)(()=>(0,s.p)("winPagehide",[(0,o.t)()],void 0,S.T,this.ee)),this.importAggregator(e,()=>i.e(478).then(i.bind(i,9917))))}}var O=i(3969);class I extends y{static featureName=O.TZ;constructor(e){super(e,O.TZ),f.RI&&document.addEventListener("securitypolicyviolation",e=>{(0,s.p)(O.xV,["Generic/CSPViolation/Detected"],void 0,this.featureName,this.ee)}),this.importAggregator(e,()=>i.e(478).then(i.bind(i,6555)))}}var N=i(6774),P=i(3878),k=i(3304);class D{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,k.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return M(e)?e:new D(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function j(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(M(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return C(e.reason)}const r=C(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function L(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new D(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return M(e.error)?e.error:C(e)}function M(e){return e instanceof Error&&!!e.stack}function B(e,r,n,i,a=(0,o.t)()){"string"==typeof e&&(e=new Error(e)),(0,s.p)("err",[e,a,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,s.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var H=i(1541),K=i(993),W=i(3785);function U(e,{customAttributes:t={},level:r=K.p_.INFO}={},n,i,s=(0,o.t)()){(0,W.R)(n.ee,e,t,r,!1,i,s)}function F(e,r,n,i,c=(0,o.t)()){(0,s.p)(a.Pl+a.hG,[c,e,r,i],void 0,t.K7.genericEvents,n.ee)}function V(e,r,n,i,c=(0,o.t)()){const{start:d,end:u,customAttributes:l}=r||{},f={customAttributes:l||{}};if("object"!=typeof f.customAttributes||"string"!=typeof e||0===e.length)return void(0,h.R)(57);const p=(e,t)=>null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(f.start=p(d,0),f.end=p(u,c),Number.isNaN(f.start)||Number.isNaN(f.end))(0,h.R)(57);else{if(f.duration=f.end-f.start,!(f.duration<0))return(0,s.p)(a.Pl+a.V1,[f,e,i],void 0,t.K7.genericEvents,n.ee),f;(0,h.R)(58)}}function G(e,r={},n,i,c=(0,o.t)()){(0,s.p)(a.Pl+a.fF,[c,e,r,i],void 0,t.K7.genericEvents,n.ee)}var z=i(9119),Y=i(7866);const q=new Set;let Z=[];if(f.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||"link"===e.initiatorType&&e.name.endsWith(".js"))(e)){q.size>250&&q.delete(q.values().next().value),q.add(e);const t=[];Z.forEach(({test:r,addedAt:n},i)=>{(r(e)||(0,o.t)()-n>1e4)&&t.push(i)}),Z=Z.filter((e,r)=>!t.includes(r))}})}).observe({type:"resource",buffered:!0})}function X(){const e={registeredAt:(0,o.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,asset:void 0,type:"unknown"},t=function(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}();if(!t)return e;const r=f.gm.performance?.getEntriesByType("navigation")?.find(e=>"navigation"===e.initiatorType)?.name||"";try{const n=function(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(Y.cn)||e.match(Y.hB);r&&r[2]&&t.add((0,z.L)(r[2]))}return[...t]}(t).at(-1);if(!n)return e;if(r.includes(n))return e.asset=(0,z.L)(r),e.type="inline",e;const i=performance.getEntriesByType("resource").find(s)||[...q].find(s);function s(e){const t=(0,z.L)(e.name);return t.endsWith(n)||n.endsWith(t)}function a(t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType}i?a(i):function(e){if(!e||!f.gm.document)return!1;try{const t=f.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,z.L)(r.href)===e)return!0}catch(e){}return!1}(n)&&(e.asset=n,e.type="preload",Z.push({addedAt:(0,o.t)(),test:e=>!!s(e)&&(a(e),!0)}))}catch(c){}return e}const J=["name","id","type"];function Q(e){(0,c.Y)(a.eY,function(t){return ee(e,t)},e)}function ee(e,r,n){(0,h.R)(54,"newrelic.register"),r||={},r.type=H.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,r.parent=n||{},("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={});const i=X(),a={};Object.entries(r.tags).forEach(([e,t])=>{J.includes(e)||(a["source.".concat(e)]=t)}),r.isolated??=!0;let c=()=>{};const d=e.runtime.registeredEntities;if(!r.isolated){const e=d.find(({metadata:{target:{id:e}}})=>e===r.id&&!r.isolated);if(e)return e}const u=e=>{r.blocked=!0,c=e};function l(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501||"number"==typeof e}e.init.api.allow_registered_children||u((0,m.J)(()=>(0,h.R)(55))),l(r.id)&&l(r.name)||u((0,m.J)(()=>(0,h.R)(48,r)));const f={addPageAction:(t,n={})=>y(F,[t,{...a,...n},e],r),deregister:()=>{g(),u((0,m.J)(()=>(0,h.R)(68)))},log:(t,n={})=>y(U,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>y(V,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>y(B,[t,{...a,...n},e],r),register:(t={})=>y(ee,[e,t],f.metadata.target),recordCustomEvent:(t,n={})=>y(G,[t,{...a,...n},e],r),setApplicationVersion:e=>v("application.version",e),setCustomAttribute:(e,t)=>v(e,t),setUserId:e=>v("enduser.id",e),metadata:{customAttributes:a,target:r,timings:i}},p=()=>(r.blocked&&c(),r.blocked);function g(){i.reportedAt||(i.reportedAt=(0,o.t)(),f.recordCustomEvent("MicroFrontEndTiming",{assetUrl:i.asset,assetType:i.type,timeToLoad:i.registeredAt-i.fetchStart,timeToBeRequested:i.fetchStart,timeToFetch:i.fetchEnd-i.fetchStart,timeToRegister:i.registeredAt-i.fetchEnd,timeAlive:i.reportedAt-i.registeredAt}))}p()||(d.push(f),(0,x.G)(g));const v=(e,t)=>{p()||(a[e]=t)},y=(r,n,i)=>{if(p()&&r!==ee)return;const a=(0,o.t)();(0,s.p)(O.xV,["API/register/".concat(r.name,"/called")],void 0,t.K7.metrics,e.ee);try{if(e.init.api.duplicate_registered_data&&r!==ee){let e=n;if(n[1]instanceof Object){const t={"child.id":i.id,"child.type":i.type};e="customAttributes"in n[1]?[n[0],{...n[1],customAttributes:{...n[1].customAttributes,...t}},...n.slice(2)]:[n[0],{...n[1],...t},...n.slice(2)]}r(...e,void 0,a)}return r(...n,i,a)}catch(e){(0,h.R)(50,e)}};return f}class te extends y{static featureName=N.T;constructor(e){var t;super(e,N.T),t=e,(0,c.Y)(a.o5,(e,r)=>B(e,r,t),t),function(e){(0,c.Y)(a.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,c.Y)(a.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Q(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,s.p)("ierr",[C(t),(0,o.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),f.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,s.p)("err",[j(t),(0,o.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,P.jT)(!1,this.removeOnAbort?.signal)),f.gm.addEventListener("error",t=>{this.abortHandler&&(0,s.p)("err",[L(t),(0,o.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,P.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#r,this.importAggregator(e,()=>i.e(478).then(i.bind(i,2176)))}#r(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var re=i(8990);let ne=1;function ie(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===f.gm?0:(0,re.I)(e,"nr@id",function(){return ne++})}function se(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,k.A)(e).length}catch(e){return}}}var oe=i(8139),ae=i(7836),ce=i(3434);const de={},ue=["open","send"];function le(e){var t=e||ae.ee;const r=function(e){return(e||ae.ee).get("xhr")}(t);if(void 0===f.gm.XMLHttpRequest)return r;if(de[r.debugId]++)return r;de[r.debugId]=1,(0,oe.u)(t);var n=(0,ce.YM)(r),i=f.gm.XMLHttpRequest,s=f.gm.MutationObserver,o=f.gm.Promise,a=f.gm.setInterval,c="readystatechange",d=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],u=[],l=f.gm.XMLHttpRequest=function(e){const t=new i(e),s=r.context(t);try{r.emit("new-xhr",[t],s),t.addEventListener(c,(o=s,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,r.emit("xhr-resolved",[],e)),n.inPlace(e,d,"fn-",b)}),(0,P.jT)(!1))}catch(e){(0,h.R)(15,e);try{r.emit("internal-error",[e])}catch(e){}}var o;return t};function p(e,t){n.inPlace(t,["onreadystatechange"],"fn-",b)}if(function(e,t){for(var r in e)t[r]=e[r]}(i,l),l.prototype=i.prototype,n.inPlace(l.prototype,ue,"-xhr-",b),r.on("send-xhr-start",function(e,t){p(e,t),function(e){u.push(e),s&&(g?g.then(y):a?a(y):(m=-m,v.data=m))}(t)}),r.on("open-xhr-start",p),s){var g=o&&o.resolve();if(!a&&!o){var m=1,v=document.createTextNode(m);new s(y).observe(v,{characterData:!0})}}else t.on("fn-end",function(e){e[0]&&e[0].type===c||y()});function y(){for(var e=0;e<u.length;e++)p(0,u[e]);u.length&&(u=[])}function b(e,t){return t}return r}var fe="fetch-",he=fe+"body-",pe=["arrayBuffer","blob","json","text","formData"],ge=f.gm.Request,me=f.gm.Response,ve="prototype";const ye={};function be(e){const t=function(e){return(e||ae.ee).get("fetch")}(e);if(!(ge&&me&&f.gm.fetch))return t;if(ye[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],s={};t.emit(n+"before-start",[r],s),s[ae.P]&&s[ae.P].dt&&(e=s[ae.P].dt);var o=i.apply(this,r);return t.emit(n+"start",[r,e],o),o.then(function(e){return t.emit(n+"end",[null,e],o),e},function(e){throw t.emit(n+"end",[e],o),e})})}return ye[t.debugId]=1,pe.forEach(e=>{r(ge[ve],e,he),r(me[ve],e,he)}),r(f.gm,"fetch",fe),t.on(fe+"end",function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(fe+"done",[null,r],n)}else t.emit(fe+"done",[e],n)}),t}var we=i(7485),Re=i(9566);class Ee{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s=(0,Re.ZF)(),o=(0,Re.el)(),a=Date.now(),c={spanId:s,traceId:o,timestamp:a};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(c.traceContextParentHeader=this.generateTraceContextParentHeader(s,o),c.traceContextStateHeader=this.generateTraceContextStateHeader(s,a,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(c.newrelicHeader=this.generateTraceHeader(s,o,a,r,n,i)),c}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof f.gm?.btoa))return null;var o={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(o.d.tk=s),btoa((0,k.A)(o))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,we.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Te=i(9300),Ae=i(7295);function xe(e){return"string"==typeof e?e:e instanceof(0,T.dV)().o.REQ?e.url:f.gm?.URL&&e instanceof URL?e.href:void 0}var Se=["load","error","abort","timeout"],_e=Se.length,Oe=(0,T.dV)().o.REQ,Ie=(0,T.dV)().o.XHR;const Ne="X-NewRelic-App-Data";class Pe extends y{static featureName=Te.T;constructor(e){super(e,Te.T),this.dt=new Ee(e),this.handler=(e,t,r,n)=>(0,s.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};f.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};ke(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}be(this.ee),le(this.ee),function(e,r,n,i){function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=T,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){A(t,e)},(0,P.jT)(!1)),f.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,P.jT)(!1))}function c(e){this.params={method:e[0]},ke(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=se(i);a&&(n.txSize=a)}this.startTime=(0,o.t)(),this.body=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit("internal-error",[e])}catch(e){}}};for(var c=0;c<_e;c++)t.addEventListener(Se[c],this.listener,(0,P.jT)(!1))}function l(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+ie(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+ie(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function g(){this.endTime=(0,o.t)()}function m(e,t){t instanceof Ie&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function v(e,t){t instanceof Ie&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function y(e,t,r){t instanceof Ie&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,o.t)()))}function b(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,o.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&f.RI&&(t=""+f.gm.location.href):e[0]&&e[0].url?t=e[0].url:f.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,we.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)a(e[0].headers,n)&&(this.dt=n);else{var s={};for(var o in r)s[o]=r[o];s.headers=new Headers(r.headers||{}),a(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function a(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,o.t)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r=this.opts||{},n=this.target;ke(this,xe(n));var i=(""+(n&&n instanceof Oe&&n.method||r.method||"GET")).toUpperCase();this.params.method=i,this.body=r.body,this.txSize=se(r.body)||0}function E(e,r){if(this.endTime=(0,o.t)(),this.params||(this.params={}),(0,Ae.iW)(this.params))return;let i;this.params.status=r?r.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(i=+this.rxSize);const s={txSize:this.txSize,rxSize:i,duration:(0,o.t)()-this.startTime};n("xhr",[this.params,s,this.startTime,this.endTime,"fetch"],this,t.K7.ajax)}function T(e){const r=this.params,i=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<_e;t++)e.removeEventListener(Se[t],this.listener,!1);r.aborted||(0,Ae.iW)(r)||(i.duration=(0,o.t)()-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==r.status&&(r.status=0):A(this,e),i.cbTime=this.cbTime,n("xhr",[r,i,this.startTime,this.endTime,"xhr"],this,t.K7.ajax))}}function A(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?se(e.response):"text"===r||""===r||void 0===r?se(e.responseText):void 0}(n,e.lastSize);if(i&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(Ne)>=0){var o=n.getResponseHeader(Ne);o&&((0,s.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=o.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",c),r.on("open-xhr-end",d),r.on("send-xhr-start",u),r.on("xhr-cb-time",l),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",g),r.on("addEventListener-end",m),r.on("removeEventListener-end",v),r.on("fn-end",b),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",y),r.on("fetch-done",E)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>i.e(478).then(i.bind(i,3845)))}}function ke(e,t){var r=(0,we.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}const De={},Ce=["pushState","replaceState"];function je(e){const t=function(e){return(e||ae.ee).get("history")}(e);return!f.RI||De[t.debugId]++||(De[t.debugId]=1,(0,ce.YM)(t).inPlace(window.history,Ce,"-")),t}var Le=i(3738);function Me(e){(0,c.Y)(a.BL,function(r=Date.now()){const n=r-f.WN;n<0&&(0,h.R)(62,r),(0,s.p)(O.XG,[a.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:a.BL,start:r,origin:"nr"}),(0,s.p)(a.Pl+a.hG,[n,a.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:Be,bD:He,d3:Ke,Kp:We,TZ:Ue,Lc:Fe,uP:Ve,Rz:Ge}=Le;class ze extends y{static featureName=Ue;constructor(e){var r;super(e,Ue),r=e,(0,c.Y)(a.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const n={n:e.name,s:e.start-f.WN,e:(e.end||e.start)-f.WN,o:e.origin||"",t:"api"};n.s<0||n.e<0||n.e<n.s?(0,h.R)(61,{start:n.s,end:n.e}):(0,s.p)("bstApi",[n],void 0,t.K7.sessionTrace,r.ee)},r),Me(e);if(!(0,g.V)(e.init))return void this.deregisterDrain();const n=this.ee;let d;je(n),this.eventsEE=(0,oe.u)(n),this.eventsEE.on(Ve,function(e,t){this.bstStart=(0,o.t)()}),this.eventsEE.on(Fe,function(e,r){(0,s.p)("bst",[e[0],r,this.bstStart,(0,o.t)()],void 0,t.K7.sessionTrace,n)}),n.on(Ge+Ke,function(e){this.time=(0,o.t)(),this.startPath=location.pathname+location.hash}),n.on(Ge+We,function(e){(0,s.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,n)});try{d=new PerformanceObserver(e=>{const r=e.getEntries();(0,s.p)(Be,[r],void 0,t.K7.sessionTrace,n)}),d.observe({type:He,buffered:!0})}catch(e){}this.importAggregator(e,()=>i.e(478).then(i.bind(i,6974)),{resourceObserver:d})}}var Ye=i(6344);class qe extends y{static featureName=Ye.TZ;#n;recorder;constructor(e){var r;let n;super(e,Ye.TZ),r=e,(0,c.Y)(a.CH,function(){(0,s.p)(a.CH,[],void 0,t.K7.sessionReplay,r.ee)},r),function(e){(0,c.Y)(a.Tb,function(){(0,s.p)(a.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);try{n=JSON.parse(localStorage.getItem("".concat(w.H3,"_").concat(w.uh)))}catch(e){}(0,p.SR)(e.init)&&this.ee.on(a.CH,()=>this.#i()),this.#s(n)&&this.importRecorder().then(e=>{e.startRecording(Ye.Qb.PRELOAD,n?.sessionReplayMode)}),this.importAggregator(this.agentRef,()=>i.e(478).then(i.bind(i,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,s.p)(Ye.Vh,[e],void 0,this.featureName,this.ee))})}#s(e){return e&&(e.sessionReplayMode===w.g.FULL||e.sessionReplayMode===w.g.ERROR)||(0,p.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#n??=Promise.all([i.e(478),i.e(249)]).then(i.bind(i,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#n)}#i(){this.blocked||(this.featAggregate?this.featAggregate.mode!==w.g.FULL&&this.featAggregate.initializeRecording(w.g.FULL,!0,Ye.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(Ye.Qb.API,w.g.FULL)}))}}var Ze=i(3962);class Xe extends y{static featureName=Ze.TZ;constructor(e){if(super(e,Ze.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,c.Y)(a.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var a={},c=this,d="function"==typeof i;return(0,s.p)(O.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((d?"":"no-")+"fn-start",[(0,o.t)(),c,d],a),d)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],a),t}finally{r.emit("fn-end",[(0,o.t)()],a)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{c.Y.apply(this,[r,function(){return(0,s.p)(a.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,c.Y)(a.PA,function(){(0,s.p)(a.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!f.RI||!(0,T.dV)().o.MO)return;const r=je(this.ee);try{this.removeOnAbort=new AbortController}catch(e){}Ze.tC.forEach(e=>{(0,P.sp)(e,e=>{l(e)},!0,this.removeOnAbort?.signal)});const n=()=>(0,s.p)("newURL",[(0,o.t)(),""+window.location],void 0,this.featureName,this.ee);r.on("pushState-end",n),r.on("replaceState-end",n),(0,P.sp)(Ze.OV,e=>{l(e),(0,s.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let d=!1;const u=new((0,T.dV)().o.MO)((e,t)=>{d||(d=!0,requestAnimationFrame(()=>{(0,s.p)("newDom",[(0,o.t)()],void 0,this.featureName,this.ee),d=!1}))}),l=(0,m.s)(e=>{"loading"!==document.readyState&&((0,s.p)("newUIEvent",[e],void 0,this.featureName,this.ee),u.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),u.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>i.e(478).then(i.bind(i,4393)),{domObserver:u})}}var $e=i(3333);const Je={},Qe=new Set;function et(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class tt{constructor(e,t){this.timestamp=(0,o.t)(),this.currentUrl=(0,z.L)(window.location.href),this.socketId=(0,Re.LA)(8),this.requestedUrl=(0,z.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class rt extends y{static featureName=$e.TZ;constructor(e){super(e,$e.TZ);const r=e.init.feature_flags.includes("websockets"),n=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,r];var d;let u,l;if(d=e,(0,c.Y)(a.hG,(e,t)=>F(e,t,d),d),function(e){(0,c.Y)(a.fF,(t,r)=>G(t,r,e),e)}(e),Me(e),Q(e),function(e){(0,c.Y)(a.V1,(t,r)=>V(t,r,e),e)}(e),r&&(l=function(e){if(!(0,T.dV)().o.WS)return e;const t=e.get("websockets");if(Je[t.debugId]++)return t;Je[t.debugId]=1,(0,x.G)(()=>{const e=(0,o.t)();Qe.forEach(r=>{r.nrData.closedAt=e,r.nrData.closeCode=1001,r.nrData.closeReason="Page navigating away",r.nrData.closeWasClean=!1,r.nrData.openedAt&&(r.nrData.connectedDuration=e-r.nrData.openedAt),t.emit("ws",[r.nrData],r)})});class r extends WebSocket{static name="WebSocket";static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return r.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new tt(e[0],e[1]),this.addEventListener("open",()=>{this.nrData.openedAt=(0,o.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),Qe.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=et(e.data);this.nrData.messageOrigin??=(0,z.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,o.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,Qe.delete(this),t.emit("ws",[this.nrData],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=et(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return f.gm.WebSocket=r,t}(this.ee)),f.RI){if(be(this.ee),le(this.ee),u=je(this.ee),e.init.user_actions.enabled){function h(t){const r=(0,we.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function p(){u.emit("navChange")}$e.Zp.forEach(e=>(0,P.sp)(e,e=>(0,s.p)("ua",[e],void 0,this.featureName,this.ee),!0)),$e.qN.forEach(e=>{const t=(0,m.s)(e=>{(0,s.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,P.sp)(e,t)}),f.gm.addEventListener("error",()=>{(0,s.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,P.jT)(!1,this.removeOnAbort?.signal)),this.ee.on("open-xhr-start",(e,r)=>{h(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,s.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)})}),this.ee.on("fetch-start",e=>{e.length>=1&&!h(xe(e[0]))&&(0,s.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),u.on("pushState-end",p),u.on("replaceState-end",p),window.addEventListener("hashchange",p,(0,P.jT)(!0,this.removeOnAbort?.signal)),window.addEventListener("popstate",p,(0,P.jT)(!0,this.removeOnAbort?.signal))}if(e.init.performance.resources.enabled&&f.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,s.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}r&&l.on("ws",e=>{(0,s.p)("ws-complete",[e],void 0,this.featureName,this.ee)});try{this.removeOnAbort=new AbortController}catch(g){}this.abortHandler=()=>{this.removeOnAbort?.abort(),this.abortHandler=void 0},n.some(e=>e)?this.importAggregator(e,()=>i.e(478).then(i.bind(i,8019))):this.deregisterDrain()}}var nt=i(2646);const it=new Map;function st(e,t,r,n,i=!0){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,h.R)(29);const s=function(e){return(e||ae.ee).get("logger")}(e),o=(0,ce.YM)(s),a=new nt.y(ae.P);a.level=n.level,a.customAttributes=n.customAttributes,a.autoCaptured=i;const c=t[r]?.[ce.Jt]||t[r];return it.set(c,a),o.inPlace(t,[r],"wrap-logger-",()=>it.get(c)),s}var ot=i(1910);class at extends y{static featureName=K.TZ;constructor(e){var t;super(e,K.TZ),t=e,(0,c.Y)(a.$9,(e,r)=>U(e,r,t),t),function(e){(0,c.Y)(a.Wb,(t,r,{customAttributes:n={},level:i=K.p_.INFO}={})=>{st(e.ee,t,r,{customAttributes:n,level:i},!1)},e)}(e),Q(e);const r=this.ee;["log","error","warn","info","debug","trace"].forEach(e=>{(0,ot.i)(f.gm.console[e]),st(r,f.gm.console,e,{level:"log"===e?"info":e})}),this.ee.on("wrap-logger-end",function([e]){const{level:t,customAttributes:n,autoCaptured:i}=this;(0,W.R)(r,e,n,t,i)}),this.importAggregator(e,()=>i.e(478).then(i.bind(i,5288)))}}new A({features:[Pe,E,_,ze,qe,I,te,rt,at,Xe],loaderType:"spa"})})()})();</script>
<meta name="title" content="adopt parfums : parfums, soin visage et corps et maquillage"/>
<meta name="description" content="Plus de 150 parfums pour femmes, hommes créés et fabriqués en France, des soins parfumés, et du makeup renouvelés au gré des saisons ! Paiement sécurisé et envoi rapide."/>
<meta name="robots" content="INDEX,FOLLOW"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>adopt parfums : parfums, soin visage et corps et maquillage</title>
<link rel="stylesheet" type="text/css" media="all" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/styles.css" />
<script type="text/javascript" defer="defer" src="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Adopt_Theme/js/custom.min.js"></script>
<link rel="preload" as="font" crossorigin="anonymous" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/fonts/montserrat/Montserrat-Regular.woff2" />
<link rel="preload" as="font" crossorigin="anonymous" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/fonts/montserrat/Montserrat-SemiBold.woff2" />
<link rel="preload" as="font" crossorigin="anonymous" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/fonts/montserrat/Montserrat-Bold.woff2" />
<link rel="preload" as="font" crossorigin="anonymous" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/fonts/montserrat/Montserrat-Medium.woff2" />
<link rel="preload" as="font" crossorigin="anonymous" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/fonts/romie/RomieTrial-Regular.woff2" />
<link rel="preload" as="font" crossorigin="anonymous" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/fonts/romie/RomieTrial-Bold.woff2" />
<link rel="apple-touch-icon" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="152x152" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/apple-touch-icon-152x152.png" />
<link rel="apple-touch-icon" sizes="167x167" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/apple-touch-icon-167x167.png" />
<link rel="apple-touch-icon" sizes="180x180" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/apple-touch-icon-180x180.png" />
<link rel="icon" type="image/x-icon" href="https://www.adopt.com/media/favicon/stores/1/Icone_Colibri_sans_cercle.png" />
<link rel="shortcut icon" type="image/x-icon" href="https://www.adopt.com/media/favicon/stores/1/Icone_Colibri_sans_cercle.png" />
<meta name="Language" content="fr" />
<meta name="google-site-verification" content="D7yu4UGB4pyxYx_hjqfNCtSZRcNU41jrdVHqlI4JEEU" />
<!-- Magento -->
<meta name="p:domain_verify" content="04idnwxH0Kdlx77rUzVA7esLHR1r12QD"/>
<link rel="dns-prefetch" href="https://use.typekit.net/">
<link rel="dns-prefetch" href="https://connect.facebook.net/">
<link rel="dns-prefetch" href="https://fonts.gstatic.com/">
<link rel="dns-prefetch" href="https://googleads.g.doubleclick.net/">
<link rel="dns-prefetch" href="https://i.ytimg.com/">
<link rel="dns-prefetch" href="https://p.typekit.net/">
<link rel="dns-prefetch" href="https://static.doubleclick.net/">
<link rel="dns-prefetch" href="https://www.facebook.com/">
<link rel="dns-prefetch" href="https://www.google.com/">
<link rel="dns-prefetch" href="https://www.google-analytics.com/">
<link rel="dns-prefetch" href="https://www.googletagmanager.com/">
<link rel="dns-prefetch" href="https://www.gstatic.com/">
<link rel="dns-prefetch" href="https://www.paypal.com/">
<link rel="dns-prefetch" href="https://www.paypalobjects.com/">
<link rel="dns-prefetch" href="https://www.youtube.com/">
<link rel="prefetch" href="https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2">
<link rel="prefetch" href="https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2">
<link rel="prefetch" href="https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2">
<link rel="prefetch" href="https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2">
<link rel="prefetch" href="https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2">
<link rel="prefetch" href="https://fonts.gstatic.com/s/roboto/v18/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2">
<link rel="prefetch" href="https://use.typekit.net/aja0eqx.css">
<link rel="dns-prefetch" href="https://www.googletagmanager.com/"> <link rel="dns-prefetch" href="https://try.abtasty.com"/>
<link rel="preconnect" href="https://try.abtasty.com" crossorigin="anonymous"/>
<link rel="dns-prefetch" href="https://dcinfos-cache.abtasty.com"/>
<link rel="preconnect" href="https://dcinfos-cache.abtasty.com" crossorigin="anonymous"/>
<link rel="preload" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/fonts.min.css" as="style"/>
<link rel="preload" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/modules.min.css" as="style"/>
<link rel="preload" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/styles.css" as="style"/>
<script>
(function() {
var cssFiles = [
'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/fonts.min.css',
'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/modules.min.css',
'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/styles.css'
];
cssFiles.forEach(function(href) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = href;
document.head.appendChild(link);
});
})();
</script>
<noscript>
<link rel="stylesheet" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/fonts.min.css"/>
<link rel="stylesheet" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/modules.min.css"/>
<link rel="stylesheet" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/css/styles.css"/>
</noscript>
<link rel="preload" href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/js/alpine3.min.js" as="script" crossorigin="anonymous"/>
<div x-data="initNostoElements()" x-init="dispatchNostoInitEvent()"></div>
<script>
"use strict";
function initNostoElements() {
return {
nostoInitCount: 0,
dispatchNostoInitEvent() {
const self = this;
setTimeout(function() {
self.nostoInitCount++;
if (typeof nostojs === 'function') {
window.dispatchEvent(
new CustomEvent('nosto-init')
);
} else if (self.nostoInitCount <= 50) {
self.dispatchNostoInitEvent();
}
}, 50);
}
}
}
</script>
<script type="text/javascript">(function(){(function(e,r){var t=document.createElement("link");t.rel="preconnect";t.as="script";var n=document.createElement("link");n.rel="dns-prefetch";n.as="script";var i=document.createElement("script");i.id="spcloader";i.type="text/javascript";i["async"]=true;i.charset="utf-8";var o="https://sdk.privacy-center.org/"+e+"/loader.js?target_type=notice&target="+r;if(window.didomiConfig&&window.didomiConfig.user){var a=window.didomiConfig.user;var c=a.country;var d=a.region;if(c){o=o+"&country="+c;if(d){o=o+"®ion="+d}}}t.href="https://sdk.privacy-center.org/";n.href="https://sdk.privacy-center.org/";i.src=o;var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(t,s);s.parentNode.insertBefore(n,s);s.parentNode.insertBefore(i,s)})("0a5eb9ca-be90-42d6-adc4-0dce84a34797","wPNqbP2q")})();</script>
<!-- Google Tag Manager -->
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://a9p7q2lm.adopt.com/xnkuvqiodzvuub4.js?awl='+i.replace(/^GTM-/, '')+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-T7L2CFJ');
</script>
<!-- Google Tag Manager (noscript) -->
<noscript>
<iframe src="https://a9p7q2lm.adopt.com/ns.html?id=GTM-T7L2CFJ"
height="0"
width="0"
style="display:none;visibility:hidden">
</iframe>
</noscript>
<!-- End Google Tag Manager (noscript) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Adopt Parfums",
"url": "https://www.adopt.com/fr",
"description": "Découvrez l'univers Adopt : parfums, maquillage, soins et accessoires à prix doux. Une beauté made in France, accessible à tous.",
"inLanguage": "fr-FR",
"publisher": {
"@type": "Organization",
"name": "Adopt Parfums",
"logo": {
"@type": "ImageObject",
"url": "https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo.png"
}
},
"potentialAction": {
"@type": "SearchAction",
"target": "https://www.adopt.com/fr/catalogsearch/result/?q={search_term_string}",
"query-input": "required name=search_term_string"
}
} </script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"url": "https://www.adopt.com/fr",
"name": "Adopt Parfums - Parfums, maquillage & soins made in France",
"description": "Découvrez les parfums, soins et maquillages made in France d'Adopt Parfums. Qualité, accessibilité et engagements responsables.",
"inLanguage": "fr-FR",
"isPartOf": {
"@type": "WebSite",
"url": "https://www.adopt.com/fr"
},
"datePublished": "2026-03-09",
"dateModified": "2026-03-09",
"about": {
"@type": "Organization",
"name": "Adopt Parfums",
"url": "https://www.adopt.com/fr"
},
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Accueil",
"item": "https://www.adopt.com/fr"
}
]
},
"primaryImageOfPage": {
"@type": "ImageObject",
"url": "https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo.png"
}
} </script>
<link rel="alternate"
id="alternate-url-fr"
hreflang="fr-fr"
href="https://www.adopt.com/fr"
/>
<link rel="alternate"
id="alternate-url-en"
hreflang="en-gb"
href="https://www.adopt.com/en"
/>
<link rel="alternate"
id="alternate-url-es"
hreflang="es-es"
href="https://www.adopt.com/es"
/>
<link rel="alternate"
id="alternate-url-be-fr"
hreflang="fr-be"
href="https://www.adopt.com/be-fr"
/>
<link rel="alternate"
id="alternate-url-be-nl"
hreflang="nl-be"
href="https://www.adopt.com/be-nl"
/>
<link rel="alternate"
id="alternate-url-ca-fr"
hreflang="fr-ca"
href="https://www.adopt.com/ca-fr"
/>
<link rel="alternate"
id="alternate-url-it"
hreflang="it-it"
href="https://www.adopt.com/it"
/>
<link rel="alternate"
id="alternate-url-fr"
hreflang="x-default" href="https://www.adopt.com/fr"
/>
<script>
var BASE_URL = 'https://www.adopt.com/fr' + '/';
var THEME_PATH = 'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR';
var COOKIE_CONFIG = {
"expires": null,
"path": "\u002F",
"domain": ".www.adopt.com",
"secure": false,
"lifetime": "2592000",
"cookie_restriction_enabled": false };
var CURRENT_STORE_CODE = 'fr';
var CURRENT_WEBSITE_ID = '1';
var CURRENT_LOCALE = 'fr_FR';
window.hyva = window.hyva || {}
window.cookie_consent_groups = window.cookie_consent_groups || {}
window.cookie_consent_groups['necessary'] = true;
window.cookie_consent_config = window.cookie_consent_config || {};
window.cookie_consent_config['necessary'] = [].concat(
window.cookie_consent_config['necessary'] || [],
[
'user_allowed_save_cookie',
'form_key',
'mage-messages',
'private_content_version',
'mage-cache-sessid',
'last_visited_store',
'section_data_ids'
]
);
</script>
<script>
'use strict';
(function( hyva, undefined ) {
function lifetimeToExpires(options, defaults) {
const lifetime = options.lifetime || defaults.lifetime;
if (lifetime) {
const date = new Date;
date.setTime(date.getTime() + lifetime * 1000);
return date;
}
return null;
}
function generateRandomString() {
const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
length = 16;
let formKey = '',
charactersLength = allowedCharacters.length;
for (let i = 0; i < length; i++) {
formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
}
return formKey;
}
const sessionCookieMarker = {noLifetime: true}
const cookieTempStorage = {};
const internalCookie = {
get(name) {
const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
return v ? v[2] : null;
},
set(name, value, days, skipSetDomain) {
let expires,
path,
domain,
secure,
samesite;
const defaultCookieConfig = {
expires: null,
path: '/',
domain: null,
secure: false,
lifetime: null,
samesite: 'lax'
};
const cookieConfig = window.COOKIE_CONFIG || {};
expires = days && days !== sessionCookieMarker
? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
: lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
path = cookieConfig.path || defaultCookieConfig.path;
domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
secure = cookieConfig.secure || defaultCookieConfig.secure;
samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
document.cookie = name + "=" + encodeURIComponent(value) +
(expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
(path ? '; path=' + path : '') +
(domain ? '; domain=' + domain : '') +
(secure ? '; secure' : '') +
(samesite ? '; samesite=' + samesite : 'lax');
},
isWebsiteAllowedToSaveCookie() {
const allowedCookies = this.get('user_allowed_save_cookie');
if (allowedCookies) {
const allowedWebsites = JSON.parse(unescape(allowedCookies));
return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
}
return false;
},
getGroupByCookieName(name) {
const cookieConsentConfig = window.cookie_consent_config || {};
let group = null;
for (let prop in cookieConsentConfig) {
if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
if (cookieConsentConfig[prop].includes(name)) {
group = prop;
break;
}
}
return group;
},
isCookieAllowed(name) {
const cookieGroup = this.getGroupByCookieName(name);
return cookieGroup
? window.cookie_consent_groups[cookieGroup]
: this.isWebsiteAllowedToSaveCookie();
},
saveTempStorageCookies() {
for (const [name, data] of Object.entries(cookieTempStorage)) {
if (this.isCookieAllowed(name)) {
this.set(name, data['value'], data['days'], data['skipSetDomain']);
delete cookieTempStorage[name];
}
}
}
};
hyva.getCookie = (name) => {
const cookieConfig = window.COOKIE_CONFIG || {};
if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
}
return internalCookie.get(name);
}
hyva.setCookie = (name, value, days, skipSetDomain) => {
const cookieConfig = window.COOKIE_CONFIG || {};
if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
cookieTempStorage[name] = {value, days, skipSetDomain};
return;
}
return internalCookie.set(name, value, days, skipSetDomain);
}
hyva.setSessionCookie = (name, value, skipSetDomain) => {
return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
}
hyva.getBrowserStorage = () => {
const browserStorage = window.localStorage || window.sessionStorage;
if (!browserStorage) {
console.warn('Browser Storage is unavailable');
return false;
}
try {
browserStorage.setItem('storage_test', '1');
browserStorage.removeItem('storage_test');
} catch (error) {
console.warn('Browser Storage is not accessible', error);
return false;
}
return browserStorage;
}
hyva.postForm = (postParams) => {
const form = document.createElement("form");
let data = postParams.data;
if (! postParams.skipUenc && ! data.uenc) {
data.uenc = btoa(window.location.href);
}
form.method = "POST";
form.action = postParams.action;
Object.keys(postParams.data).map(key => {
const field = document.createElement("input");
field.type = 'hidden'
field.value = postParams.data[key];
field.name = key;
form.appendChild(field);
});
const form_key = document.createElement("input");
form_key.type = 'hidden';
form_key.value = hyva.getFormKey();
form_key.name="form_key";
form.appendChild(form_key);
document.body.appendChild(form);
form.submit();
}
hyva.getFormKey = function () {
let formKey = hyva.getCookie('form_key');
if (!formKey) {
formKey = generateRandomString();
hyva.setCookie('form_key', formKey);
}
return formKey;
}
hyva.formatPrice = (value, showSign, options = {}) => {
const formatter = new Intl.NumberFormat(
'fr\u002DFR',
Object.assign({
style: 'currency',
currency: 'EUR',
signDisplay: showSign ? 'always' : 'auto'
}, options)
);
return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
formatter.formatToParts(value).map(({type, value}) => {
switch (type) {
case 'currency':
return '\u20AC' || value;
case 'minusSign':
return '- ';
case 'plusSign':
return '+ ';
default :
return value;
}
}).reduce((string, part) => string + part) :
formatter.format(value);
}
const formatStr = function (str, nStart) {
const args = Array.from(arguments).slice(2);
return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
const idx = parseInt(n) - nStart;
if (args[idx] === null || args[idx] === void 0) {
return m;
}
return p.length % 2
? p.slice(0, -1).replace('%%', '%') + args[idx]
: p.replace('%%', '%') + n;
})
}
hyva.str = function (string) {
const args = Array.from(arguments);
args.splice(1, 0, 1);
return formatStr.apply(undefined, args);
}
hyva.strf = function () {
const args = Array.from(arguments);
args.splice(1, 0, 0);
return formatStr.apply(undefined, args);
}
/**
* Take a html string as `content` parameter and
* extract an element from the DOM to replace in
* the current page under the same selector,
* defined by `targetSelector`
*/
hyva.replaceDomElement = (targetSelector, content) => {
// Parse the content and extract the DOM node using the `targetSelector`
const parser = new DOMParser();
const doc = parser.parseFromString(content, 'text/html');
const contentNode = doc.querySelector(targetSelector);
// Bail if content can't be found
if (!contentNode) {
return;
}
hyva.activateScripts(contentNode)
// Replace the old DOM node with the new content
document.querySelector(targetSelector).replaceWith(contentNode);
// Reload customerSectionData and display cookie-messages if present
window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
hyva.initMessages();
}
hyva.activateScripts = (contentNode) => {
// Extract all the script tags from the content.
// Script tags won't execute when inserted into a dom-element directly,
// therefore we need to inject them to the head of the document.
const tmpScripts = contentNode.getElementsByTagName('script');
if (tmpScripts.length > 0) {
// Push all script tags into an array
// (to prevent dom manipulation while iterating over dom nodes)
const scripts = [];
for (let i = 0; i < tmpScripts.length; i++) {
scripts.push(tmpScripts[i]);
}
// Iterate over all script tags and duplicate+inject each into the head
for (let i = 0; i < scripts.length; i++) {
let script = document.createElement('script');
script.innerHTML = scripts[i].innerHTML;
document.head.appendChild(script);
// Remove the original (non-executing) node from the content
scripts[i].parentNode.removeChild(scripts[i]);
}
}
return contentNode;
}
const replace = {['+']: '-', ['/']: '_', ['=']: ','};
hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
let currentTrap;
const focusableElements = (rootElement) => {
const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
return Array.from(rootElement.querySelectorAll(selector))
.filter(el => {
return el.style.display !== 'none'
&& !el.disabled
&& el.tabIndex !== -1
&& (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
})
}
const focusTrap = (e) => {
const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
if (!isTabPressed) return;
const focusable = focusableElements(currentTrap)
const firstFocusableElement = focusable[0]
const lastFocusableElement = focusable[focusable.length - 1]
e.shiftKey
? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
: document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
};
hyva.releaseFocus = (rootElement) => {
if (currentTrap && (!rootElement || rootElement === currentTrap)) {
currentTrap.removeEventListener('keydown', focusTrap)
currentTrap = null
}
}
hyva.trapFocus = (rootElement) => {
if (!rootElement) return;
hyva.releaseFocus()
currentTrap = rootElement
rootElement.addEventListener('keydown', focusTrap)
const firstElement = focusableElements(rootElement)[0]
firstElement && firstElement.focus()
}
hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
}( window.hyva = window.hyva || {} ));
</script>
<script>
if (!window.IntersectionObserver) {
window.IntersectionObserver = function (callback) {
this.observe = el => el && callback(this.takeRecords());
this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}];
this.disconnect = () => {};
this.unobserve = () => {};
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Adopt Parfums",
"alternateName": [
"Adopt",
"adopt.fr",
"Parfums Adopt"
],
"url": "https://www.adopt.com/fr",
"logo": "https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo.png",
"description": "Adopt Parfums est un concept unique autour de trois univers : le parfum, le maquillage et les accessoires de mode. Une beauté accessible, qui s'inscrit dans une démarche qualitative et exigeante.",
"address": {
"@type": "PostalAddress",
"streetAddress": "19 Impasse Lou Haou - Z.I Auguste V",
"addressLocality": "Cestas",
"postalCode": "33610",
"addressCountry": "FR"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+33 5 64 21 15 66",
"contactType": "customer service",
"availableLanguage": [
"French"
]
},
"sameAs": [
"https://www.wikidata.org/wiki/Q104649177",
"https://www.linkedin.com/company/adoptparfums/",
"https://www.facebook.com/adoptparfumsdeFrance/",
"https://www.instagram.com/adoptparfums/",
"https://www.tiktok.com/@adoptparfums",
"https://www.pinterest.fr/adoptparfums/",
"https://www.youtube.com/@adoptparfums5209"
],
"foundingDate": "1986",
"founder": "Dominique Monlun",
"numberOfEmployees": "650",
"vatID": "FR37351837406",
"slogan": "French Fragrance Revolution ✨",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
}
} </script>
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.adopt.com/fr">
<meta property="og:title" content="adopt parfums : parfums, soin visage et corps et maquillage">
<meta property="og:description" content="Plus de 150 parfums pour femmes, hommes créés et fabriqués en France, des soins parfumés, et du makeup renouvelés au gré des saisons ! Paiement sécurisé et envoi rapide.">
<meta property="og:image" content="https://adopt.twic.pics/media/picto/image/LIFE_PERF_30ML-100ML_MIX_FEMME_3.jpg?twic=v1">
<meta name="author" content="Adopt Parfums">
<!-- Nosto Meta Tags -->
<meta name="nosto-version" content="7.5.0">
<meta name="nosto-language" content="fr">
</head>
<body class="website-base cms-home page-layout-1column cms-index-index page-layout-cms-full-width" id="html-body">
<script>
"use strict";
function initGenericEventDatalayer() {
return {
browsingData: false,
initGenericEvent(data) {
if (data['browsing-data']) {
this.browsingData = data['browsing-data'];
const pageTemplate = this.getPageCodeFromController();
window.pageTemplate = pageTemplate;
window.env_currency = this.browsingData.env_currency;
const userNewCustomer = this.getIsNewCustomer(pageTemplate, this.browsingData.order_count);
window.dataLayer?.push({
'event': 'generic',
'env_country': this.browsingData.env_country,
'env_currency': this.browsingData.env_currency,
'env_language': this.browsingData.env_language,
'env_template': pageTemplate,
'cvar_template': pageTemplate,
'env_work': this.browsingData.env_work,
'env_version': 'desktop',
'page_cat1_id': '',
'page_cat1_name': '',
'page_cat2_id': '',
'page_cat2_name': '',
'page_cat3_id': '',
'page_cat3_name': '',
'page_content_type': '',
'page_name': window.location.pathname,
'user_logged': this.browsingData.user_logged,
'locale': this.browsingData.locale,
'user_id': this.browsingData.user_id,
'purchase_history': this.browsingData.purchase_history,
'user_gender': this.browsingData.user_gender,
'user_age': this.browsingData.user_age,
'userEmailHash': this.browsingData.userEmailHash,
'userEmailSH1': this.browsingData.userEmailSH1,
'user_identification_tool': this.browsingData.user_identification_tool,
'user_isnew': this.browsingData.user_isnew,
'user_newcustomer': userNewCustomer,
'utilisateurspread': this.browsingData.utilisateurspread,
'customerEmail': this.browsingData.customerEmail,
'customerEmailSHA256': this.browsingData.customerEmailSHA256,
'phoneNumber': this.browsingData.phoneNumber,
'phoneNumberSHA256': this.browsingData.phoneNumberSHA256,
'customerName': this.browsingData.customerName,
'customerNameSHA256': this.browsingData.customerNameSHA256,
'customerLastname': this.browsingData.customerLastname,
'customerLastnameSHA256': this.browsingData.customerLastnameSHA256,
'customerBirthday': this.browsingData.customerBirthday,
'customerBirthdaySHA256': this.browsingData.customerBirthdaySHA256,
'userGender': '',
'userGenderSHA256': '',
'customerCountry': this.browsingData.customerCountry,
'customerCountrySHA256': this.browsingData.customerCountrySHA256,
'customerCity': this.browsingData.customerCity,
'customerCitySHA256': this.browsingData.customerCitySHA256,
'customerStreet': this.browsingData.customerStreet,
'customerStreetSHA256': this.browsingData.customerStreetSHA256,
'customerZipcode': this.browsingData.customerZipcode,
'customerZipcodeSHA256': this.browsingData.customerZipcodeSHA256,
})
}
},
getIsNewCustomer(page, orderCount) {
let isNew = 0;
if (page == 'confirmation_paiement') {
isNew = orderCount > 1 ? 0 : 1;
} else {
isNew = orderCount > 0 ? 0 : 1;
}
return isNew;
},
getPageCodeFromController() {
const bodyClassList = document.body.classList;
const mapping = {
'customer-account-index': 'espace_client',
'sales-order-history': 'espace_client',
'sales-order-view': 'espace_client',
'wishlist-index-index': 'espace_client',
'customer-address-index': 'espace_client',
'customer-address-form': 'espace_client',
'customer-account-edit': 'espace_client',
'review-customer-index': 'espace_client',
'newsletter-manage-index': 'espace_client',
'storelocator-store-search': 'store_locator',
'storelocator-store-view': 'store_locator',
'cms-index-index': 'Homepage',
'catalog-product-view': 'page_produit',
'catalog-category-view': 'page_categorie_produit',
'checkout-cart-index': 'panier',
'checkout-index-index': 'checkout',
'checkout-onepage-success': 'confirmation_paiement',
'catalogsearch-result-index': 'resultat_de_recherche',
'cms-noroute-index': 'Page 404',
};
let pageCode = Object.keys(mapping)
.filter(key => bodyClassList.contains(key))
.reduce((obj, key) => {
obj[key] = mapping[key];
return obj[key];
}, {});
if (Object.keys(pageCode).length === 0) {
pageCode = 'autre';
}
return pageCode;
}
}
}
</script>
<div x-data="initGenericEventDatalayer()"
@private-content-loaded.window.once="initGenericEvent($event.detail.data)"
>
</div>
<script>
(function() {
const cookieName = 'social_login_tracking';
const cookie = document.cookie.split('; ').find(row => row.startsWith(cookieName + '='));
if (cookie) {
try {
const trackingData = JSON.parse(decodeURIComponent(cookie.split('=')[1]));
window.dataLayer?.push({
'event': trackingData.event,
'tunnel': trackingData.tunnel,
'typologieConnexion': trackingData.typologieConnexion
});
} catch (e) {
console.error('Error parsing social login tracking cookie:', e);
}
document.cookie = cookieName + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
}
})();
</script>
<input name="form_key" type="hidden" value="GMaLIDfoPJnixZ50" />
<noscript>
<section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal">
<div class="container text-center">
<p>
<strong>Javascript est désactivé dans votre navigateur.</strong>
<span>
Pour une meilleure expérience sur notre site, assurez-vous d’activer JavaScript dans votre navigateur. </span>
</p>
</div>
</section>
</noscript>
<script>
document.body.addEventListener('touchstart', () => {}, {passive: true})
</script>
<div x-data="initSnackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S()">
<div :class="{ 'hidden': ! show }"
id="snackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/SNACKBAR_OFFRE_4_PARF_FR_4x.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/parfum.html"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S').style.right = '20px'; }
function initSnackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2025-08-22 00:00:00') || null,
endDate = new Date('2025-09-16 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'OFFRE\u00204\u0020PARFUMS\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'OFFRE\u00204\u0020PARFUMS\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_jNlWXzh5gcdRZFqiQ7xi2xizHTpato2S', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'OFFRE\u00204\u0020PARFUMS\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ()">
<div :class="{ 'hidden': ! show }"
id="snackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/ECOMM_LIVRAISON_EXPRESS_55E_NOEL_Snackbar_1_.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/offres-commerciales.html"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ').style.right = '20px'; }
function initSnackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2025-12-16 00:00:00') || null,
endDate = new Date('2025-12-20 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'LIVRAISON\u0020EXPRESS\u0020NOEL',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'LIVRAISON\u0020EXPRESS\u0020NOEL',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_n1g2VAWHYWs1R9zDpqRq2uIJybrov6sZ', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'LIVRAISON\u0020EXPRESS\u0020NOEL',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO()">
<div :class="{ 'hidden': ! show }"
id="snackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/ECOMM_Soldes_JANVIER2026_-_PRODUITS_snack-bar_ECOMM_Soldes_JANVIER2026_snack-bar_FR.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/soldes.html"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO').style.right = '20px'; }
function initSnackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-01-16 03:00:00') || null,
endDate = new Date('2026-02-03 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'SOLDES\u00202\u0020EME\u0020DEMARQUE\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'SOLDES\u00202\u0020EME\u0020DEMARQUE\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_04sFQ42mS6oDucywRYMtNV30bNeMzLPO', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'SOLDES\u00202\u0020EME\u0020DEMARQUE\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU()">
<div :class="{ 'hidden': ! show }"
id="snackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/SNACKBAR_WALLET_FR.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://adopt.captainwallet.com/fr_FR/enroll/form?channel=ecom&tag=snackbar_juin_2026"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU').style.right = '20px'; }
function initSnackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-06-12 00:00:00') || null,
endDate = new Date('2026-06-23 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020JUIN\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020JUIN\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_hhmSnlSsbCDGPVSKlP9Qa79k1OUzZsOU', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020JUIN\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD()">
<div :class="{ 'hidden': ! show }"
id="snackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/ECOMM_BOOSTER_SOLDES10_snack-bar_ECOMM_SOLDES_26_-20_SUPP_snack-bar_FR_1.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/soldes.html"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD').style.right = '20px'; }
function initSnackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-02-01 03:00:00') || null,
endDate = new Date('2026-02-01 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'BOOSTER\u0020SOLDES\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'BOOSTER\u0020SOLDES\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_nvGrZbKrfsgiDx32RytYQbFAJM7AJosD', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'BOOSTER\u0020SOLDES\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr()">
<div :class="{ 'hidden': ! show }"
id="snackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/ECOMM_PARRAINAGE_snack-bar_1_1_.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/offre-de-parrainage?situation=FR_2025_12_08_PARRAINAGE_SNACKBAR"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr').style.right = '20px'; }
function initSnackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-02-27 00:00:00') || null,
endDate = new Date('2025-03-10 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_m5HOzULrR0DMkOTxvo74y6rPedDkyECr', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY()">
<div :class="{ 'hidden': ! show }"
id="snackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/SNACKBAR_WALLET_FR.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://adopt.captainwallet.com/fr_FR/enroll/form?channel=ecom&tag=snackbar_mai_2026"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY').style.right = '20px'; }
function initSnackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-05-06 00:00:00') || null,
endDate = new Date('2026-05-12 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020MAI\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020MAI\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_vWTQIO8Dri3HIu5dUXer1zHF9KoWQOwY', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020MAI\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe()">
<div :class="{ 'hidden': ! show }"
id="snackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/NL_PARRAINAGE_FEV_2026_snackbar_3.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/offre-de-parrainage?situation=FR_2026_04_22_SNACKBAR"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe').style.right = '20px'; }
function initSnackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-04-22 00:00:00') || null,
endDate = new Date('2026-05-05 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020AVRIL\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020AVRIL\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_hy07ZmgRg7TWpdHVeQXaQoKh2XG9bBwe', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020AVRIL\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5()">
<div :class="{ 'hidden': ! show }"
id="snackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5 w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/NL_PARRAINAGE_FEV_2026_snackbar_3.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/offre-de-parrainage?situation=FR_2026_06_01_SNACKBAR"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5').style.right = '20px'; }
function initSnackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-06-01 00:00:00') || null,
endDate = new Date('2026-06-11 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020JUIN\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020JUIN\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_VDqpJ8XyNKGQjGm0vuWdW5czUaNHrMS5', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020JUIN\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun()">
<div :class="{ 'hidden': ! show }"
id="snackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/SNACKBAR_WALLET_FR.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://adopt.captainwallet.com/fr_FR/enroll/form?channel=ecom&tag=snackbar_février_2026"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun').style.right = '20px'; }
function initSnackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-02-18 00:00:00') || null,
endDate = new Date('2026-02-26 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020FEVRIER\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020FEVRIER\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_TrueMq1AOTdVNVB3P7GrRfh27Xeanfun', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'WALLET\u0020FEVRIER\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd()">
<div :class="{ 'hidden': ! show }"
id="snackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/NL_PARRAINAGE_FEV_2026_snackbar_3.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/offre-de-parrainage?situation=FR_2026_02_27_SNACKBAR"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd').style.right = '20px'; }
function initSnackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-02-27 00:00:00') || null,
endDate = new Date('2026-03-10 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020FEVRIER\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020FEVRIER\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_VpJw2hyZC8HBKTvg2PZPzyUgUUvPvIrd', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'PARRAINAGE\u0020FEVRIER\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<div x-data="initSnackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1()">
<div :class="{ 'hidden': ! show }"
id="snackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1"
class="snackbar flex flex-row items-center border-2 border-lavender-400 rounded-2xl gap-4 p-2 px-4 w-fit fixed z-30 snackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1 w-[360px] h-[84px] md:w-[446px] md:h-[104px] justify-between items-start border-0 m-auto hidden transition transition-all duration-1000 ease-in-out -right-full bottom-16"
style="background-image: url('https://adopt.twic.pics/media/wysiwyg/snackbar/ECOMM_FRENCH_TOUCH_SNACKBAR_ECOMM_OFFRE_SPECIALE_SNACKBAR_FR_1.png?twic=v1');box-shadow: 0 29px 42px -15px;background-clip: border-box;background-origin: border-box;background-position-x: 0;background-size: 100%;">
<a @click="sendClickEvent()" href="https://www.adopt.com/fr/parfum.html"
class="flex flex-col text-white font-primary pl-24 justify-center h-full w-full" aria-label="">
<div class="leading-none">
</div>
</a>
<button @click="close()" aria-label="Fermer" type="button">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross" version="1.1" x="0px" y="0px" viewbox="0 0 14 14" enable-background="new 0 0 14 14" xml:space="preserve" class="text-white" width="14" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13L13,1"/>
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M13,13L1,1"/>
<title/></svg>
</button>
</div>
</div>
<script>
setTimeout(animationSnackbar, 2000 + 1000);
function animationSnackbar() {
document.querySelector('#snackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1').style.right = '20px'; }
function initSnackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-03-08 03:00:00') || null,
endDate = new Date('2026-02-14 23:59:59') || null;
if (startDate) {
isDateValid = dateNow >= startDate;
}
if (isDateValid && endDate) {
isDateValid = dateNow <= endDate;
}
this.excludeUrls.forEach((url) => {
if (!isUrlValid) {
return;
}
if (window.location.pathname.includes(url)) {
isUrlValid = false;
}
});
if (!cookieValue && isDateValid && isUrlValid) {
this.show = true;
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'OFFRE\u002010\u0020ML\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'OFFRE\u002010\u0020ML\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_wQtwMYE4T8keZ3oI8QMD4BbQlJStZIZ1', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'OFFRE\u002010\u0020ML\u0020FR',
'action': 'fermeture',
});
this.show = false;
},
}
}
</script>
<script>
'use strict';
(function(hyva) {
const formValidationRules = {
required(value, options, field, context) {
const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element,
msg = 'Ce\u0020champ\u0020est\u0020obligatoire.';
if (el.type === 'radio' || el.type === 'checkbox') {
return (value === undefined || value.length === 0) ? msg : true;
}
el.setAttribute('required', '');
el.checkValidity();
return el.validity.valueMissing ? msg : true;
},
maxlength(value, options, field, context) {
const n = Number(options)
if (value.length > n) {
return n === 1
? hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u00201\u0020character.')
: hyva.strf('Veuillez\u0020ne\u0020pas\u0020saisir\u0020plus\u0020de\u0020\u00250\u0020caract\u00E8res.', options)
}
return true;
},
minlength(value, options, field, context) {
const n = Number(options)
if (value.length > 0 && value.length < n) {
return n === 1
? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.')
: hyva.strf('Veuillez\u0020saisir\u0020au\u0020moins\u0020\u00250\u0020caract\u00E8res.', options)
}
return true;
},
max(value, options, field, context) {
field.element.setAttribute('max', options);
field.element.checkValidity();
if (field.element.validity.rangeOverflow) {
return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options);
}
return true;
},
min(value, options, field, context) {
field.element.setAttribute('min', options);
field.element.checkValidity();
if (field.element.validity.rangeUnderflow) {
return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options);
}
return true;
},
step(value, options, field, context) {
field.element.setAttribute('step', options);
field.element.checkValidity();
if (field.element.validity.stepMismatch) {
const val = Number(value);
const step = Number(options);
const msg = 'Please\u0020enter\u0020a\u0020valid\u0020value.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00250\u0022\u0020and\u0020\u0022\u00251\u0022.';
return hyva.strf(msg, Math.floor(val / step) * step, Math.ceil(val / step) * step);
}
return true;
},
pattern(value, options, field, context) {
field.element.setAttribute('pattern', options);
field.element.checkValidity();
if (field.element.validity.patternMismatch) {
return field.element.title
? hyva.strf('Please\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00250.', field.element.title)
: 'Please\u0020match\u0020the\u0020requested\u0020format.'
}
return true;
},
email(value, options, field, context) {
const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i;
if (value.length > 0 && !rule.test(value)) {
return 'Saisissez\u0020un\u0020email\u0020valide.';
}
return true;
},
password(value, options, field, context) {
const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/;
if (value.length > 0 && !rule.test(value)) {
return 'Please\u0020provide\u0020at\u0020least\u0020one\u0020upper\u0020case,\u0020one\u0020lower\u0020case,\u0020one\u0020digit\u0020and\u0020one\u0020special\u0020character\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029';
}
return true;
},
equalTo(value, options, field, context) {
const dependencyField = context.fields[options].element;
if (value !== dependencyField.value) {
const dependencyFieldName =
dependencyField.label ||
dependencyField.title ||
(dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) ||
dependencyField.name;
return hyva.strf('This\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00250\u0022.', dependencyFieldName);
}
return true;
}
};
function raceSome(promises, pred) {
return new Promise((resolve, reject) => {
if (promises.length === 0) {
return resolve();
}
let settled = false, nDone = 0;
const resolveIf = v => {
if (!settled && (pred(v) || ++nDone === promises.length)) {
settled = true;
resolve(v);
}
return v;
}
promises.map(promise => {
promise.then(resolveIf).catch(reason => {
settled = true;
reject(reason)
});
return promise;
});
});
}
const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'}
const INPUT_TYPE_RULES = {email: 'email'}
function getRules(element) {
let rules = {};
Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => {
if (element.hasAttribute(attrName)) {
rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName);
}
})
if (INPUT_TYPE_RULES[element.type]) {
rules[INPUT_TYPE_RULES[element.type]] = true;
}
if (element.dataset.validate) {
try {
Object.assign(rules, JSON.parse(element.dataset.validate));
} catch (error) {
console.error('Validator error. Cannot parse data-validate attribute of element:\n', element);
}
}
return rules;
}
function isInvalidRuleResult(ruleState) {
return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content);
}
async function runValidateFn(rule, options, value, field) {
return formValidationRules[rule](value, options, field, this);
}
function generateId() {
let id;
do {
id = `${this.idPrefix}-${++this.idSeq}`;
} while (document.getElementById(id));
return id;
}
function isVisible(element) {
const el = element.type !== 'hidden' ? element : (element.parentElement || {});
return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length)
}
function elementWillValidate(element) {
return (element.willValidate || element.type === 'hidden')
&& element.tagName !== 'BUTTON'
&& element.disabled === false
&& !(element.tagName === 'INPUT' && element.type === 'submit')
&& (element.hasAttribute('data-validate-hidden') || isVisible(element))
}
function createMessageContainer(el, fieldWrapperClassName) {
if (! el.parentElement) {
return;
}
const refocus = document.activeElement === el;
const wrapper = document.createElement('div');
wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' '));
el.parentElement.insertBefore(wrapper, el);
wrapper.appendChild(el);
refocus && document.activeElement !== el && el.focus();
return wrapper;
}
function containerNotFound(selector, el) {
const msg = `Cannot find message container element ${selector} of ${el.name}`;
console.error(msg, el);
throw msg;
}
function createTextInputFrom(el) {
const text = document.createElement('INPUT');
text.type = 'text';
text.value = el.value;
return text;
}
function classNamesToSelector(classNames) {
return classNames.split(' ')
.filter(className => className.length > 0)
.map(className => `.${className}`)
.join('')
}
function hasMessagesWrapper(field, messagesWrapperClassName) {
return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName));
}
function getMessagesWrapper(field, messagesWrapperClassName) {
if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) {
return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName));
}
const msgWrapper = document.createElement('ul');
const msgId = generateId.call(this);
msgWrapper.id = msgId;
field.element.setAttribute('aria-errormessage', msgId);
field.element.setAttribute('aria-describedby', msgId);
msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' '));
if (field.validateOnChange) {
msgWrapper.setAttribute('aria-live', 'polite');
}
this.getMessageContainer(field).appendChild(msgWrapper);
return msgWrapper;
}
function getCheckedValues(field) {
const name = field.element.name.replace(/([\\"])/g, '\\$1');
const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked');
return Array.from(elements).map(el => el.value);
}
function escapeHtml(s) {
const div = document.createElement('div')
div.innerText = s;
return div.innerHTML;
}
function formValidation(formElement, options) {
// Disable browser default validation
if (formElement.tagName === 'FORM') {
formElement.setAttribute('novalidate', '');
} else {
console.error('formValidation can be initialized only on FORM element', formElement);
return;
}
options = Object.assign({
fieldWrapperClassName: 'field field-reserved',
messagesWrapperClassName: 'messages',
validClassName: 'field-success',
invalidClassName: 'field-error',
pageMessagesWrapperSelector: null,
scrollToFirstError: true,
}, options || {});
return {
state: {
valid: false,
},
fields: {},
idSeq: 0,
idPrefix: formElement.id || 'vld-msg',
setupFields(elements) {
this.fields = {};
Array.from(elements).forEach(element => {
if (elementWillValidate(element)) {
this.setupField(element);
}
});
},
setupField(element) {
if (! element) return;
const onChange = !!element.dataset.onChange;
if (elementWillValidate(element)) {
const rules = getRules(element);
if (Object.keys(rules).length > 0) {
if (this.fields[element.name]) {
Object.assign(this.fields[element.name].rules, rules);
} else {
this.fields[element.name] = {
element,
rules: rules,
validateOnChange: onChange,
state: {
valid: null,
rules: {}
}
}
}
}
} else {
console.error('Element will not validate', element);
}
},
onSubmit(event) {
if (event.target.tagName === 'FORM') {
event.preventDefault();
this.validate()
.then(() => event.target.submit())
.catch(invalidElements => {});
}
},
onChange(event) {
event.target.dataset.onChange = 'true';
if (!Object.keys(this.fields).length) {
this.setupFields(formElement.elements);
}
if (!Object.keys(this.fields).includes(event.target.name)) {
this.setupField(event.target);
}
const field = this.fields[event.target.name];
this.validateField(field);
field && field.element.removeAttribute('data-on-change')
},
validateSafe() {
return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {}))
},
validate() {
if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) {
this.setupFields(formElement.elements);
}
return new Promise(async (resolve, reject) => {
if (formElement.elements) {
await raceSome(this.validateFields(), result => result !== true)
const invalidFields = Object.values(this.fields).filter(field => !field.state.valid);
this.state.valid = invalidFields.length === 0;
if (this.state.valid) {
resolve();
} else {
if (options.scrollToFirstError && invalidFields.length > 0) {
invalidFields[0].element.focus()
invalidFields[0].element.select && invalidFields[0].element.select();
}
reject(invalidFields.map(field => field.element));
}
}
});
},
validateFields() {
const fields = Object.values(this.fields);
fields.forEach(field => {
this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName)
});
return fields.map(field => this.validateField(field))
},
validateField(field) {
if (! field || ! elementWillValidate(field.element)) {
return new Promise(resolve => resolve(true))
}
let value;
if (field.element.type === 'checkbox') {
value = getCheckedValues(field);
} else if (field.element.type === 'radio') {
value = getCheckedValues(field)[0] || undefined;
} else if (field.element.tagName === 'SELECT' && field.element.multiple) {
value = Array.from(field.element.selectedOptions).map(opt => opt.value);
} else {
value = field.element.value;
}
const rules = field.rules || {};
field.state.valid = true;
this.showFieldState(field);
const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => {
return runValidateFn.call(this, rule, rules[rule], value, field).then(result => {
field.state.rules[rule] = result;
return result;
})
});
return new Promise(resolve => {
Promise.all(fieldValidations).then(results => {
field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult)
this.showFieldState(field);
resolve(field.state.valid);
})
});
},
getMessagesByField(field) {
const messages = [];
const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule]));
field.rules && Object.keys(field.rules).forEach((rule) => {
if (invalidRules.includes(rule)) {
const customMessage = field.element.getAttribute('data-msg-' + rule);
const message = customMessage ? customMessage : field.state.rules[rule];
const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule]));
if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) {
messages.push(hyva.strf('Validation rule "%0" failed.', rule));
} else if (Array.isArray(ruleOptions)) {
ruleOptions.unshift(message.type ? message.content : message);
const content = hyva.strf.apply(null, ruleOptions);
messages.push(message.type ? {type: message.type, content} : content);
} else {
const content = hyva.strf(message.type ? message.content : message, ruleOptions)
messages.push(message.type ? {type: message.type, content} : content);
}
}
});
return messages;
},
/** @deprecated */
getFieldWrapper(field) {
return this.getMessageContainer(field)
},
getMessageContainer(field) {
let container;
const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector;
if (pageSelector) {
container = document.querySelector(pageSelector)
|| containerNotFound(pageSelector, field.element)
} else {
const containerSelector = classNamesToSelector(options.fieldWrapperClassName);
container = field.element.closest(containerSelector)
|| createMessageContainer(field.element, options.fieldWrapperClassName)
|| containerNotFound(containerSelector, field.element);
}
return container;
},
showFieldState(field) {
const container = this.getMessageContainer(field),
hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName),
messages = this.getMessagesByField(field).map(m => {
return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content;
});
container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages);
container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages);
this.createHtmlErrorMessage(field, messages);
if (field.state.valid) {
field.element.removeAttribute('aria-invalid');
} else {
field.element.setAttribute('aria-invalid', 'true');
if (! document.activeElement) {
field.element.focus();
}
}
},
removeMessages(field, messagesClass) {
if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) {
return;
}
const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName);
const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
Array.from(messages).forEach(msg => msg.remove());
if (msgWrapper && msgWrapper.childElementCount === 0) {
field.element.removeAttribute('aria-errormessage');
field.element.removeAttribute('aria-describedby');
msgWrapper.remove();
}
},
createErrorMessage(field, messages) {
const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml)
this.createHtmlErrorMessage(field, htmlMessages);
},
createHtmlErrorMessage(field, messages) {
this.removeMessages(field, options.messagesWrapperClassName);
field.element.removeAttribute('aria-errormessage');
field.element.removeAttribute('aria-describedby');
if (!field.state.valid) {
const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages);
field.element.setAttribute('aria-errormessage', msgWrapper.id);
field.element.setAttribute('aria-describedby', msgWrapper.id);
}
},
/** @deprecated */
createMessage(field, message) {
return this.addMessages(field, options.messagesWrapperClassName, message);
},
addMessages(field, messagesClass, messages) {
const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml)
return this.addHtmlMessages(field, messagesClass, htmlMessages);
},
addHtmlMessages(field, messagesClass, htmlMessages) {
const msgWrapper = getMessagesWrapper.call(this, field, messagesClass);
(Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => {
const li = document.createElement('li');
li.innerHTML = htmlMessage;
li.setAttribute('data-msg-field', field.element.name);
msgWrapper.appendChild(li);
});
return msgWrapper;
},
setField(name, value) {
this.fields[name].element.value = value;
this.fields[name].element.dispatchEvent((new Event('input')));
this.validateField(this.fields[name]);
}
}
}
hyva.formValidation = formValidation;
hyva.formValidation.rules = formValidationRules;
hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName;
hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName;
hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator;
}(window.hyva = window.hyva || {}));
</script>
<script>
'use strict';
(function(hyva) {
if (!hyva || !hyva.formValidation || !hyva.formValidation.rules) {
return;
}
/**
* Get the label text for a field element
* @param {HTMLElement} element
* @returns {string}
*/
function getFieldLabel(element) {
// Try to find associated label via 'for' attribute
if (element.id) {
const label = document.querySelector('label[for="' + element.id + '"]');
if (label) {
const labelText = label.textContent || label.innerText;
if (labelText) {
return labelText.trim().replace(/\s*\*\s*$/, '').replace(/\s*:\s*$/, '');
}
}
}
// Try to find label within the same field container
const fieldContainer = element.closest('.field');
if (fieldContainer) {
const label = fieldContainer.querySelector('label');
if (label) {
const labelText = label.textContent || label.innerText;
if (labelText) {
return labelText.trim().replace(/\s*\*\s*$/, '').replace(/\s*:\s*$/, '');
}
}
}
// Use title attribute as fallback
if (element.title) {
return element.title.trim();
}
// Use aria-label as fallback
if (element.getAttribute('aria-label')) {
return element.getAttribute('aria-label').trim();
}
// Use placeholder as fallback
if (element.placeholder) {
return element.placeholder.trim();
}
// Use name attribute as last resort (clean up the name)
if (element.name) {
return element.name
.replace(/[\[\]]/g, ' ')
.replace(/_/g, ' ')
.replace(/([a-z])([A-Z])/g, '$1 $2')
.trim();
}
return '';
}
/**
* Create a text input from a hidden input for validation purposes
* @param {HTMLElement} el
* @returns {HTMLInputElement}
*/
function createTextInputFrom(el) {
const text = document.createElement('INPUT');
text.type = 'text';
text.value = el.value;
return text;
}
// Override the required rule to include field label in the error message
hyva.formValidation.addRule('required', function(value, options, field, context) {
const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element;
const fieldLabel = getFieldLabel(field.element);
const genericMessage = 'Ce\u0020champ\u0020est\u0020obligatoire.';
const labeledMessage = 'Le\u0020champ\u0020\u00250\u0020est\u0020obligatoire.';
const msg = fieldLabel
? hyva.strf(labeledMessage, fieldLabel.toLowerCase())
: genericMessage;
if (el.type === 'radio' || el.type === 'checkbox') {
return (value === undefined || value.length === 0) ? msg : true;
}
el.setAttribute('required', '');
el.checkValidity();
return el.validity.valueMissing ? msg : true;
});
}(window.hyva = window.hyva || {}));
</script>
<div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white contentarea"
href="#contentarea">
<span>
Allez au contenu </span>
</a>
<script>
function initHeader() {
return {
isLoaded: false,
isMenuBreakpoint: window.innerWidth < 1025,
isScrolled: false,
noSearchOpenMobile: false,
searchOpen: false,
hiddenSearchClasses: ["checkout-cart-index","customer-account-login","customer-account-create","catalog-product-view","storelocator-index-index","smile_store_locator-store-search","cms-diagnostic-olfactif","cms-mw-store-locator","cms-store-locator","cms-l-univers-adopt","cms-the-adopt-universe","cms-mundo-de-adopt","cms-nos-engagements","cms-our-commitments","cms-nuestros-compromisos","cms-filiere-vanille","cms-vanilla-program","cms-programa-vainilla","cms-tendre-iris","cms-the-tendre-iris-project","category-noel-coffret-parfum","category-dia-del-padre","cms-guide-cadeaux-adopt","cms-jeu-de-noel","cms-juedo-de-navidad","cms-jeu-saint-valentin","cms-juego-de-san-valentin","cms-live-shopping","cms-programme-colibri","cms-filiere-jasmin","cms-programas-colibri","cms-jasmine-program","cms-hummingbird-programs","cms-programa-jazmin","cms-a-propos","cms-carte-wallet","noel-coffret-parfum","kerstfeest","navidad-cajas-perfume","cms-magic-touch","cms-magasin-brest-iroise","cms-cadeaugids-adopt"],
cart: {},
isImmersive: 0,
immersiveColor: '',
pageColor: '',
isAccountPage: document.body.classList.contains('account'),
baseHeaderTop: 0,
lastScrollY: 0,
scrollDirection: 'down',
isSearchHidden() {
const self = this;
let bodyClasses = document.body.classList;
this.hiddenSearchClasses.forEach(function (item) {
if (bodyClasses.contains(item)) {
self.noSearchOpenMobile = true;
}
});
},
getData(data) {
if (data.cart) {
this.cart = data.cart
}
},
clickIconHeaderEvent(label, url = null) {
window.dataLayer?.push({
'event': 'clic-icon-header',
'text': label
});
if (url) {
window.location.href = url;
}
},
init() {
if (window.pageYOffset > 0) {
this.isScrolled = true;
}
this.isSearchHidden();
this.baseHeaderTop = this.$refs.wrapper.getBoundingClientRect().top;
this.$refs.wrapper.dataset.position = this.$refs.wrapper.getBoundingClientRect().top;
this.$refs.wrapper.dataset.topBase = this.$refs.wrapper.offsetTop;
this.$refs.wrapper.dataset.heightBase = this.$refs.wrapper.getBoundingClientRect().height;
this.scroll(this.$refs);
if (this.immersiveColor) {
if (!this.isScrolled) {
this.$refs.wrapper.style.backgroundColor = this.immersiveColor
} else {
this.$refs.wrapper.style.backgroundColor = '#ffffff'
}
}
if (document.body.classList.contains('catalog-category-view')) {
document.body.style.background = this.immersiveColor
}
if (this.pageColor) {
document.body.classList.add(this.pageColor)
}
},
scroll() {
let headerTop = this.$refs.wrapper.getBoundingClientRect().top;
this.$refs.wrapper.dataset.position = headerTop;
let headerRealHeight = parseInt(this.$refs.wrapper.dataset.heightBase);
const headerPromotional = document.querySelector('.block-promotional');
const promotionalHeaderSticky = 2;
const isCategoryPage = document.body.classList.contains('catalog-category-view');
const mainContent = document.querySelector('#maincontent');
const currentScrollY = window.scrollY;
if (currentScrollY !== this.lastScrollY) {
this.scrollDirection = currentScrollY > this.lastScrollY ? 'down' : 'up';
}
this.lastScrollY = currentScrollY;
if (headerPromotional) {
if (promotionalHeaderSticky === 1) {
headerPromotional.style.maxHeight = '49.02px';
} else if (promotionalHeaderSticky === 2) {
if (window.scrollY > 20) {
if (this.scrollDirection === 'up') {
headerPromotional.style.maxHeight = '49.02px';
} else {
headerPromotional.style.maxHeight = '0';
}
} else {
headerPromotional.style.maxHeight = '49.02px';
}
} else {
if (window.scrollY > 0) {
headerPromotional.style.maxHeight = '0';
} else {
headerPromotional.style.maxHeight = '49.02px';
}
}
}
if (isCategoryPage && mainContent) {
const mainContentTop = mainContent.getBoundingClientRect().top + window.scrollY;
if (window.scrollY >= mainContentTop) {
if (this.scrollDirection === 'down') {
document.querySelector('#header').style.maxHeight = '0';
document.querySelector('#header').style.overflow = 'hidden';
window.dispatchEvent(new CustomEvent('header-height-changed', {
detail: { height: headerPromotional ? headerPromotional.offsetHeight : 0 }
}));
} else {
document.querySelector('#header').style.maxHeight = '130px';
document.querySelector('#header').style.overflow = 'visible';
const totalHeight = this.$refs.wrapper.offsetHeight;
window.dispatchEvent(new CustomEvent('header-height-changed', {
detail: { height: totalHeight }
}));
}
} else {
document.querySelector('#header').style.maxHeight = '130px';
document.querySelector('#header').style.overflow = 'visible';
}
}
if (window.scrollY * 2 >= this.$refs.wrapper.dataset.topBase) {
this.$refs.wrapper.style.position = 'fixed';
this.$refs.wrapper.style.top = '0';
this.$refs.wrapper.style.backgroundColor = '#ffffff';
this.isScrolled = true;
} else {
if (this.$refs.wrapper.dataset.immersiveColor !== "") {
this.$refs.wrapper.style.backgroundColor = this.$refs.wrapper.dataset.immersiveColor;
} else {
if (this.immersiveColor !== "") {
this.$refs.wrapper.style.backgroundColor = this.immersiveColor;
} else {
this.$refs.wrapper.style.backgroundColor = '';
}
}
this.$refs.wrapper.style.position = 'static';
this.$refs.wrapper.style.top = 'auto';
this.isScrolled = false;
}
document.querySelector('.page-wrapper').style.paddingTop = headerRealHeight + 'px';
},
toggleSearch() {
this.searchOpen = !this.searchOpen;
if (this.searchOpen) {
window.dispatchEvent(new CustomEvent('open-mini-cart'));
this.clickIconHeaderEvent('Rechercher');
this.$nextTick(function () { document.querySelector('#search').select(); });
} else {
window.dispatchEvent(new CustomEvent('close-mini-cart'));
}
},
closeSearch() {
this.searchOpen = false;
window.dispatchEvent(new CustomEvent('close-mini-cart'));
}
}
}
function initCompareHeader() {
return {
compareProducts: null,
itemCount: 0,
receiveCompareData(data) {
if (data['compare-products']) {
this.compareProducts = data['compare-products'];
this.itemCount = this.compareProducts.count;
}
}
}
}
</script>
<div class="header-wrapper relative z-30 w-full bg-white transition-transform duration-300"
:class="{'bg-white': isAccountPage}" x-data="initHeader()" @scroll.window="scroll()" x-ref="wrapper"
data-immersive-color="" data-position="default" data-top-base data-height-base>
<div x-data="initPromotionalHeader()"
class="block-promotional flex bg-ui-500 z-10 overflow-hidden relative transition-all duration-300 ease-in-out"
x-cloak
x-init="animate();"
@mouseenter="pauseAutoScroll()"
@mouseleave="resumeAutoScroll()"
@focusin="handleFocusIn($event)"
@focusout="handleFocusOut($event)"
@keydown.arrow-up.prevent="goToSlide(currentFocusedIndex - 1)"
@keydown.arrow-down.prevent="goToSlide(currentFocusedIndex + 1)"
@keydown.tab="handleGlobalTabNavigation($event)"
role="region"
aria-label="Messages promotionnels"
aria-live="polite"
style="height: 49.02px; max-height: 49.02px;">
<div class="flex-1 relative" id="message-promotional-carousel" data-nb-slides="3">
<ul class="text-center text-tiny md:text-xxs font-medium text-white" :class="{ 'min-h-[49.02px] h-[49.02px] max-h-[49.02px]': !isLoaded }">
<li x-show="!isLoaded" class="w-full px-5 md:px-7.5 flex items-center justify-center"
style="height: 49.02px;">
<div class="w-full h-8.5 md:h-3 skeleton-box skeleton-box--discreet"></div>
</li>
<li class="px-8.5 md:px-16 items-center justify-center"
style="height: 49.02px;"
:class="{ 'hidden': !isLoaded, 'flex': isLoaded }"
:aria-hidden="!isSlideFocused(0)"
:tabindex="isSlideFocused(0) && !hasLinksInSlide(0) ? 0 : -1"
@focus="handleSlideFocus(0)"
x-ref="slide-0"
data-slide-index="0">
<span @click="clickPromotionalHeaderEvent()"><p><a href="https://www.adopt.com/fr/livraison-retours">Livraison OFFERTE dès 35€</a></p></span>
</li>
<li class="px-8.5 md:px-16 items-center justify-center"
style="height: 49.02px;"
:class="{ 'hidden': !isLoaded, 'flex': isLoaded }"
:aria-hidden="!isSlideFocused(1)"
:tabindex="isSlideFocused(1) && !hasLinksInSlide(1) ? 0 : -1"
@focus="handleSlideFocus(1)"
x-ref="slide-1"
data-slide-index="1">
<span @click="clickPromotionalHeaderEvent()"><p><span data-teams="true">3 parfums achetés = le 4ème GRATUIT</span></p></span>
</li>
<li class="px-8.5 md:px-16 items-center justify-center"
style="height: 49.02px;"
:class="{ 'hidden': !isLoaded, 'flex': isLoaded }"
:aria-hidden="!isSlideFocused(2)"
:tabindex="isSlideFocused(2) && !hasLinksInSlide(2) ? 0 : -1"
@focus="handleSlideFocus(2)"
x-ref="slide-2"
data-slide-index="2">
<span @click="clickPromotionalHeaderEvent()"><p><a href="https://www.adopt.com/fr/newsletter/subscriber/index">Inscrivez-vous à notre newsletter et recevez -20% sur votre prochain achat</a></p></span>
</li>
</ul>
</div>
</div>
<script>
function initPromotionalHeader() {
return {
isLoaded: false,
autoScrollEnabled: true,
currentFocusedIndex: 0,
isKeyboardMode: false,
autoScrollInterval: null,
pauseTimeout: null,
currentPosition: 0,
clonedSlide: null,
clickPromotionalHeaderEvent() {
window.dataLayer?.push({
'event': 'clicBandeau'
});
},
isSlideFocused(slideIndex) {
if (!this.isLoaded) return false;
return slideIndex === this.currentFocusedIndex;
},
pauseAutoScroll() {
this.autoScrollEnabled = false;
if (this.pauseTimeout) {
clearTimeout(this.pauseTimeout);
this.pauseTimeout = null;
}
},
resumeAutoScroll() {
if (!this.isKeyboardMode) {
this.autoScrollEnabled = true;
}
},
handleSlideFocus(slideIndex) {
this.currentFocusedIndex = slideIndex;
this.isKeyboardMode = true;
this.pauseAutoScroll();
const links = this.getLinksInSlide(slideIndex);
if (links.length > 0) {
setTimeout(() => {
const activeElement = document.activeElement;
if (activeElement.tagName === 'LI' &&
activeElement.getAttribute('data-slide-index') === slideIndex.toString()) {
links[0].focus();
}
}, 10);
}
},
handleFocusIn(event) {
const carousel = document.querySelector('#message-promotional-carousel');
if (carousel && carousel.contains(event.target)) {
this.isKeyboardMode = true;
this.pauseAutoScroll();
if (event.target.tagName === 'A') {
const slide = event.target.closest('li');
if (slide && slide.hasAttribute('data-slide-index')) {
const slideIndex = parseInt(slide.getAttribute('data-slide-index'));
if (!isNaN(slideIndex)) {
this.currentFocusedIndex = slideIndex;
this.showSlide(slideIndex);
this.updateSlideAccessibility();
}
}
} else if (event.target.tagName === 'LI' && event.target.hasAttribute('data-slide-index')) {
const slideIndex = parseInt(event.target.getAttribute('data-slide-index'));
if (!isNaN(slideIndex)) {
this.currentFocusedIndex = slideIndex;
this.showSlide(slideIndex);
this.updateSlideAccessibility();
}
}
}
},
handleFocusOut(event) {
const carousel = document.querySelector('#message-promotional-carousel');
const relatedTarget = event.relatedTarget;
if (carousel && (!relatedTarget || !carousel.contains(relatedTarget))) {
setTimeout(() => {
const activeElement = document.activeElement;
if (!carousel.contains(activeElement)) {
this.isKeyboardMode = false;
this.resumeAutoScroll();
}
}, 10);
}
},
hasLinksInSlide(slideIndex) {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel) return false;
const ul = carousel.querySelector('ul');
const slides = ul.querySelectorAll('li[data-slide-index]');
const slide = Array.from(slides).find(s =>
parseInt(s.getAttribute('data-slide-index')) === slideIndex
);
if (!slide) return false;
const links = slide.querySelectorAll('a');
return links.length > 0;
},
getLinksInSlide(slideIndex) {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel) return [];
const ul = carousel.querySelector('ul');
const slides = ul.querySelectorAll('li[data-slide-index]');
const slide = Array.from(slides).find(s =>
parseInt(s.getAttribute('data-slide-index')) === slideIndex
);
if (!slide) return [];
return Array.from(slide.querySelectorAll('a'));
},
handleGlobalTabNavigation(event) {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel || !carousel.contains(event.target)) return;
const activeElement = document.activeElement;
const nbSlides = 3;
const isShiftTab = event.shiftKey;
if (activeElement.tagName === 'A') {
const slide = activeElement.closest('li[data-slide-index]');
if (!slide) return;
const slideIndex = parseInt(slide.getAttribute('data-slide-index'));
if (isNaN(slideIndex)) return;
const links = this.getLinksInSlide(slideIndex);
const linkIndex = links.indexOf(activeElement);
if (!isShiftTab) {
if (linkIndex < links.length - 1) {
return;
} else {
const nextIndex = slideIndex + 1;
if (nextIndex < nbSlides) {
event.preventDefault();
this.goToSlideAndFocus(nextIndex);
}
}
} else {
if (linkIndex > 0) {
return;
} else {
const prevIndex = slideIndex - 1;
if (prevIndex >= 0) {
event.preventDefault();
const prevLinks = this.getLinksInSlide(prevIndex);
if (prevLinks.length > 0) {
this.goToSlideAndFocusLink(prevIndex, prevLinks.length - 1);
} else {
this.goToSlideAndFocus(prevIndex);
}
} else {
event.preventDefault();
slide.focus();
}
}
}
} else if (activeElement.tagName === 'LI' && activeElement.hasAttribute('data-slide-index')) {
const slideIndex = parseInt(activeElement.getAttribute('data-slide-index'));
if (isNaN(slideIndex)) return;
const links = this.getLinksInSlide(slideIndex);
if (links.length === 0) {
if (!isShiftTab) {
const nextIndex = slideIndex + 1;
if (nextIndex < nbSlides) {
event.preventDefault();
this.goToSlideAndFocus(nextIndex);
}
} else {
const prevIndex = slideIndex - 1;
if (prevIndex >= 0) {
event.preventDefault();
this.goToSlideAndFocus(prevIndex);
}
}
} else {
if (!isShiftTab) {
event.preventDefault();
links[0].focus();
} else {
const prevIndex = slideIndex - 1;
if (prevIndex >= 0) {
event.preventDefault();
const prevLinks = this.getLinksInSlide(prevIndex);
if (prevLinks.length > 0) {
this.goToSlideAndFocusLink(prevIndex, prevLinks.length - 1);
} else {
this.goToSlideAndFocus(prevIndex);
}
}
}
}
}
},
goToSlideAndFocus(targetIndex) {
const nbSlides = 3;
if (targetIndex < 0 || targetIndex >= nbSlides) return;
this.isKeyboardMode = true;
this.pauseAutoScroll();
this.currentFocusedIndex = targetIndex;
this.showSlide(targetIndex);
this.updateSlideAccessibility();
setTimeout(() => {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel) return;
const ul = carousel.querySelector('ul');
const slides = ul.querySelectorAll('li[data-slide-index]');
const targetSlide = Array.from(slides).find(slide =>
parseInt(slide.getAttribute('data-slide-index')) === targetIndex
);
if (targetSlide) {
const links = this.getLinksInSlide(targetIndex);
if (links.length > 0) {
links[0].focus();
} else {
targetSlide.focus();
}
}
}, 50);
},
goToSlideAndFocusLink(targetIndex, linkIndex) {
const nbSlides = 3;
if (targetIndex < 0 || targetIndex >= nbSlides) return;
this.isKeyboardMode = true;
this.pauseAutoScroll();
this.currentFocusedIndex = targetIndex;
this.showSlide(targetIndex);
this.updateSlideAccessibility();
setTimeout(() => {
const links = this.getLinksInSlide(targetIndex);
if (links.length > 0 && linkIndex >= 0 && linkIndex < links.length) {
links[linkIndex].focus();
} else {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel) return;
const ul = carousel.querySelector('ul');
const slides = ul.querySelectorAll('li[data-slide-index]');
const targetSlide = Array.from(slides).find(slide =>
parseInt(slide.getAttribute('data-slide-index')) === targetIndex
);
if (targetSlide) {
targetSlide.focus();
}
}
}, 50);
},
goToSlide(targetIndex) {
const nbSlides = 3;
let newIndex = targetIndex;
if (newIndex < 0) {
newIndex = nbSlides - 1;
} else if (newIndex >= nbSlides) {
newIndex = 0;
}
this.isKeyboardMode = true;
this.pauseAutoScroll();
this.currentFocusedIndex = newIndex;
this.showSlide(newIndex);
this.updateSlideAccessibility();
setTimeout(() => {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel) return;
const ul = carousel.querySelector('ul');
const slides = ul.querySelectorAll('li[data-slide-index]');
const targetSlide = Array.from(slides).find(slide =>
parseInt(slide.getAttribute('data-slide-index')) === newIndex
);
if (targetSlide) {
targetSlide.focus();
}
}, 50);
},
showSlide(targetIndex) {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel) return;
const ul = carousel.querySelector('ul');
const slideHeight = 49.02;
const targetPosition = -(targetIndex * slideHeight);
this.currentPosition = targetPosition;
ul.style.transition = 'transform 0.3s ease-in-out';
ul.style.transform = `translateY(${targetPosition}px)`;
},
cloneFirstSlide() {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel) return;
const ul = carousel.querySelector('ul');
const firstSlide = ul.querySelector('li[data-slide-index="0"]');
if (firstSlide && !this.clonedSlide) {
this.clonedSlide = firstSlide.cloneNode(true);
this.clonedSlide.removeAttribute('x-ref');
this.clonedSlide.removeAttribute('data-slide-index');
this.clonedSlide.removeAttribute(':class');
this.clonedSlide.removeAttribute(':aria-hidden');
this.clonedSlide.removeAttribute(':tabindex');
this.clonedSlide.removeAttribute('@focus');
this.clonedSlide.setAttribute('data-clone', 'true');
this.clonedSlide.setAttribute('aria-hidden', 'true');
this.clonedSlide.setAttribute('tabindex', '-1');
this.clonedSlide.classList.add('flex');
this.clonedSlide.classList.remove('hidden');
ul.appendChild(this.clonedSlide);
}
},
removeClonedSlide() {
if (this.clonedSlide && this.clonedSlide.parentNode) {
this.clonedSlide.parentNode.removeChild(this.clonedSlide);
this.clonedSlide = null;
}
},
updateSlideAccessibility() {
const carousel = document.querySelector('#message-promotional-carousel');
if (!carousel || !this.isLoaded) return;
const ul = carousel.querySelector('ul');
const slides = ul.querySelectorAll('li[data-slide-index]');
const nbSlides = 3;
slides.forEach((slide) => {
const slideIndex = parseInt(slide.getAttribute('data-slide-index'));
const isFocused = slideIndex === this.currentFocusedIndex;
const links = slide.querySelectorAll('a');
const hasLinks = links.length > 0;
slide.setAttribute('aria-hidden', isFocused ? 'false' : 'true');
if (hasLinks) {
slide.setAttribute('tabindex', '-1');
} else {
slide.setAttribute('tabindex', isFocused ? '0' : '-1');
}
links.forEach(link => {
if (isFocused) {
link.removeAttribute('tabindex');
} else {
link.setAttribute('tabindex', '-1');
}
});
});
if (this.clonedSlide) {
this.clonedSlide.setAttribute('aria-hidden', 'true');
this.clonedSlide.setAttribute('tabindex', '-1');
const clonedLinks = this.clonedSlide.querySelectorAll('a');
clonedLinks.forEach(link => {
link.setAttribute('tabindex', '-1');
});
}
},
animate() {
const carousel = document.querySelector('#message-promotional-carousel');
const ul = carousel.querySelector('ul');
const nbSlides = parseInt(carousel.getAttribute('data-nb-slides'));
if (nbSlides > 1) {
this.currentPosition = 0;
this.cloneFirstSlide();
this.autoScrollInterval = setInterval(() => {
if (!this.autoScrollEnabled) return;
const slideHeight = 49.02;
const nextIndex = (this.currentFocusedIndex + 1) % nbSlides;
if (nextIndex === 0) {
this.currentPosition -= slideHeight;
ul.style.transition = 'transform 1s ease-in-out';
ul.style.transform = `translateY(${this.currentPosition}px)`;
setTimeout(() => {
ul.style.transition = 'none';
this.currentPosition = 0;
ul.style.transform = `translateY(0px)`;
this.currentFocusedIndex = 0;
this.updateSlideAccessibility();
}, 1000);
} else {
this.currentPosition -= slideHeight;
this.currentFocusedIndex = nextIndex;
ul.style.transition = 'transform 1s ease-in-out';
ul.style.transform = `translateY(${this.currentPosition}px)`;
setTimeout(() => {
this.updateSlideAccessibility();
}, 1100);
}
}, 3000);
}
this.isLoaded = true;
setTimeout(() => {
this.updateSlideAccessibility();
}, 100);
}
}
}
</script>
<div id="header" class="relative w-full transition-all duration-200 bg-white"
@keydown.window.escape="closeSearch()"
@private-content-loaded.window="getData(event.detail.data)">
<!-- Contenu du header inchangé -->
<div
class="container grid md:grid-cols-[200px_1fr_200px] grid-cols-[auto_auto_1fr] gap-x-2 md:gap-y-2 gap-y-0 items-center justify-between px-0 md:px-7.5 pb-2.25 md:pb-0 md:pt-4 pt-2.5 mt-0 menu-bp:relative h-auto">
<div class="md:order-1 order-2">
<h1 class="shrink-0 grow-[1] menu-bp:grow-[0] menu-bp:min-w-[121px] lg:min-w-[200px] menu-bp:pb-0 md:pl-2 menu-bp:pl-0"
x-data="initLogo()"
x-init="init($refs)"
@scroll.window="scroll($refs)"
>
<a class="flex items-center lg:min-w-[120px] w-fit"
href="https://www.adopt.com/fr"
title="Adopt Parfums : parfums, soins visage et corps et maquillage"
aria-label="store logo">
<img
id="logo"
loading="lazy"
src="https://adopt.twic.pics/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo.svg?twic=v1"
title="Adopt Parfums : parfums, soins visage et corps et maquillage"
alt="adopt-parfums-eau-de-parfum-maquillage-soin-mode"
class="w-auto h-[33px] transition-all duration-200 md:h-[44px] lg:h-auto lg:min-w-[120px] lg:w-[120px] ml-4 md:ml-0"
x-ref="logo"
:class="{ 'md:h-[34px] lg:min-w-[101px] lg:w-[101px]': isScrolled, 'md:h-[44px] lg:min-w-[120px] lg:w-[120px]': !isScrolled }"
width="189" height="64" />
</a>
</h1>
<script>
function initLogo() {
return {
isNavLight: 0,
immersiveColor: '',
isScrolled: false,
init($refs) {
if(window.pageYOffset > 0) {
this.isScrolled = true;
}
if(this.immersiveColor) {
if(!this.isScrolled) {
$refs.logo.src = 'https://adopt.twic.pics/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo-white.svg?twic=v1'
} else {
$refs.logo.src = 'https://adopt.twic.pics/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo.svg?twic=v1'
}
}
},
scroll($refs) {
this.isScrolled = window.pageYOffset > 0
if(this.immersiveColor) {
if(!this.isScrolled) {
$refs.logo.src = 'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo-white.svg'
} else {
$refs.logo.src = 'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/logo.svg'
}
}
}
}
}
</script>
</div>
<div id="search-container" class="md:col-span-1 col-span-3 md:order-2 order-4 mx-2 md:mx-0">
<script>
function initMiniSearchComponent() {
"use strict";
return {
show: false,
formSelector: "#search_mini_form",
url: "https://www.adopt.com/fr/search/ajax/suggest",
templates: {"term":{"title":"Recherches populaires","template":"Hyva_SmileElasticsuite::core\/autocomplete\/term.phtml"},"product":{"title":"Produits","template":"Hyva_SmileElasticsuite::catalog\/autocomplete\/product.phtml"},"category":{"title":"Cat\u00e9gories","template":"Hyva_SmileElasticsuite::catalog\/autocomplete\/category.phtml"},"product_attribute":{"title":"Attributs","template":"Hyva_SmileElasticsuite::catalog\/autocomplete\/product_attribute.phtml","titleRenderer":"renderEsAutocompleteTitleAttribute"},"cms_page":{"title":"Cms page","template":"Hyva_SmileElasticsuite::cms-search\/autocomplete\/cms.phtml"}},
priceFormat: {"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},
minSearchLength: 4,
searchResultsByType: { },
currentRequest: null,
focusInput: false,
urlUpdateTimer: null,
init() {
this.initFromUrl();
},
initFromUrl: function() {
const urlParams = new URLSearchParams(window.location.search);
const searchParam = urlParams.get('instantSearch');
if (searchParam) {
document.querySelector('#search').value = decodeURIComponent(searchParam);
this.getSearchResults();
}
},
updateUrl: function() {
if (this.urlUpdateTimer) {
clearTimeout(this.urlUpdateTimer);
}
this.urlUpdateTimer = setTimeout(() => {
let value = document.querySelector('#search').value.trim();
if (value.length > 0) {
let searchUrl = '?' + 'instantSearch' + '=' + encodeURIComponent(value);
history.pushState({}, '', searchUrl);
} else {
history.pushState({}, '', window.location.pathname);
}
}, 500);
},
getSearchResults: function () {
let value = document.querySelector('#search').value.trim();
if (value.length < parseInt(this.minSearchLength, 10)) {
this.searchResultsByType = [];
return false;
}
let url = this.url + '?' + new URLSearchParams({
q: document.querySelector('#search').value,
_: Date.now()
}).toString();
if (this.currentRequest !== null) {
this.currentRequest.abort();
}
this.currentRequest = new AbortController();
fetch(url, {
method: 'GET',
signal: this.currentRequest.signal,
}).then((response) => {
if (response.ok) {
return response.json();
}
}).then((data) => {
this.show = data.length > 0;
this.searchResultsByType = data.reduce((acc, result) => {
if (!acc[result.type]) acc[result.type] = [];
acc[result.type].push(result);
if (acc) {
if (window.matchMedia("(max-width: 1025px)").matches) {
document.body.style.overflow = 'hidden';
}
document.querySelector('#search-container').style.borderRadius = '0';
document.querySelector('#search-container').style.background = 'white';
document.querySelector('#search_autocomplete').style.display = 'block';
if (window.scrollY >= 1) {
const headerPosition = document.querySelector('#header').offsetHeight + document.querySelector('#search').offsetHeight
+ parseInt(window.getComputedStyle(document.getElementById('search-box')).getPropertyValue("margin-top")) +
parseInt(window.getComputedStyle(document.getElementById('search-box')).getPropertyValue("margin-bottom"));
if (window.matchMedia("(max-width: 1025px)").matches) {
document.querySelector('#search_autocomplete').style.height = 'calc(100vh - ' + headerPosition + 'px)';
if (document.querySelector('.block-promotional')) {
document.querySelector('.block-promotional').style.display = 'none';
}
}
} else {
const headerPosition = document.querySelector('.page-header').offsetHeight + document.querySelector('#search').offsetHeight
+ parseInt(window.getComputedStyle(document.getElementById('search-box')).getPropertyValue("margin-top")) +
parseInt(window.getComputedStyle(document.getElementById('search-box')).getPropertyValue("margin-bottom"));
if (window.matchMedia("(max-width: 1025px)").matches) {
document.querySelector('#search_autocomplete').style.height = 'calc(100vh - ' + headerPosition + 'px)';
}
}
}
return acc;
}, {});
}).catch((error) => {
;
});
},
search() {
const search = document.querySelector('#search');
let term = document.querySelector('#search').value.trim();
if (term.length >= 1) {
this.sendSearchEvent(term);
document.querySelector('#search_mini_form').submit();
}
},
clean() {
this.searchResultsByType = [];
this.show = false;
},
searchBarClickEvent() {
window.dataLayer?.push({
'event': 'searchBar_click',
'template': window.pageTemplate
});
},
autocompleteProductClickEvent() {
window.dataLayer?.push({
'event': 'searchBar_interaction',
'interaction_type': 'productclick',
'template': window.pageTemplate,
'search_term': document.querySelector('#search').value.trim(),
});
},
sendSearchEvent(term) {
window.dataLayer?.push({
'event': 'searchBar_interaction',
'interaction_type': 'search',
'template': window.pageTemplate,
'search_term': term,
});
}
}
}
</script>
<div id="search-content" x-show="true" class="">
<div class="text-black" x-data="initMiniSearchComponent()" @click.away="show = false"
@click.away.outside="closeSearch()">
<form class="form minisearch" id="search_mini_form" x-ref="form"
action="https://www.adopt.com/fr/catalogsearch/result" @submit.prevent="search()"
method="get">
<div id="search-box" class="relative bg-white rounded-full">
<label class="sr-only" for="search">
Rechercher... </label>
<input id="search"
x-on:input.debounce.100ms="updateUrl()"
x-on:input.debounce.250ms="getSearchResults()"
x-ref="searchInput" type="search"
autocomplete="off" name="q"
value=""
placeholder="Rechercher..."
maxlength="128"
class="text-anthracite-400 border border-lavender focus:border-[#5354A3] input-search w-full p-2 pl-10 leading-normal transition appearance-none bg-[#F5F5FD] rounded-full focus:outline-none focus:ring-0"
@click.once="searchBarClickEvent()" @focusout="setTimeout(function(){ focusInput = false },100);"
@focusin="focusInput = true" />
<svg class="text-anthracite-400 w-4.5 h-auto absolute left-3 top-1/2 transform -translate-y-1/2" width="17" height="20" aria-hidden="true" focusable="false" xmlns:xlink="http://www.w3.org/1999/xlink"><use href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/svg/sprite.svg#icon-search" xlink:href="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/svg/sprite.svg#icon-search"></use></svg> <template x-if="!show">
<script>
document.querySelector('#search-container').style.borderRadius = '9999px';
document.querySelector('#search-container').style.background = 'none';
document.querySelector('#search_autocomplete').style.height = 'auto';
if (document.querySelector('.block-promotional')) {
document.querySelector('.block-promotional').style.display = 'flex';
}
</script>
</template>
</div>
<div id="search_autocomplete" class="search-autocomplete w-full overflow-scroll md:overflow-visible"
x-show="show" style="display:none;">
<div
class="absolute z-50 w-full grid grid-cols-1 md:grid-cols-2 md:p-10 md:pt-5 p-5 pt-0 gap-4 subnav-content bg-white left-0">
<template x-for="searchResultByType in Object.values(searchResultsByType)">
<div class="flex flex-col gap-3">
<template
x-if="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].title && templates[searchResultByType[0].type].titleRenderer === undefined">
<div class="font-semibold pt-2 uppercase text-xs-tiny md:text-xxs text-pink md:tracking-spaced-lg tracking-spaced-xs"
x-text="templates[searchResultByType[0].type].title"></div>
</template>
<template
x-if="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].titleRenderer !== undefined">
<div class="font-bold pt-2 pl-2 text-center"
x-text="window[templates[searchResultByType[0].type].titleRenderer](searchResultByType)">
</div>
</template>
<div class="grid md:grid-cols-2 grid-cols-1 gap-3">
<template x-for="searchResult in searchResultByType">
<div class="hover:bg-lilac">
<template x-if="searchResult.type == 'term'">
<a class="w-full block p-2"
x-bind:href="'https://www.adopt.com/fr/catalogsearch/result/?q=' + searchResult.title"
:title="searchResult.title">
<span class="text-sm" x-text="searchResult.title"></span>
<span class="text-sm" x-text="'(' + searchResult.num_results + ')'"></span>
</a>
</template>
<template x-if="searchResult.type == 'product'">
<a class="search-item flex flex-row md:gap-4 gap-3 items-start"
@click="autocompleteProductClickEvent()"
:href="searchResult.url"
:title="searchResult.title">
<img class="md:w-20 w-16" :src="searchResult.image" :alt="searchResult.title">
<div class="flex flex-col w-full">
<span class="font-medium text-xs md:text-sm" x-text="searchResult.title"></span>
<span class="uppercase font-medium text-pink text-very-tiny md:text-tiny tracking-spaced"
x-text="searchResult.short_description"></span>
<span class="search-item__price font-medium text-xs md:text-sm"
x-html="searchResult.price"></span>
</div>
</a>
</template>
<template x-if="searchResult.type == 'category'">
<a class="w-full block" :href="searchResult.url" :title="searchResult.title">
<span class="text-sm" x-text="searchResult.title"></span>
</a>
</template>
<template x-if="searchResult.type == 'product_attribute'">
<a class="w-full block p-2" :href="searchResult.url" :title="searchResult.title">
<span class="text-sm" x-text="searchResult.title"></span>
<span class="text-xs uppercase text-gray-500" x-text="searchResult.attribute_label" style="vertical-align: super;"></span>
</a>
</template>
<script>
function renderEsAutocompleteTitleAttribute(data)
{
data = data.filter(function(item) {
return item.type === 'product_attribute';
}).map(function(item) {
return item['attribute_label']
}).reduce(function(prev, item) {
if (item in prev) {
prev[item]++;
} else {
prev[item] = 1;
}
return prev;
}, {});
data = Object.entries(data).sort(function(item1, item2) {
return item2[1] - item1[1]
}).map(function(item) {return item[0]});
if (data.length > 2) {
data = data.slice(0, 2);
data.push('...');
}
return data.join(', ');
}
</script>
<template x-if="searchResult.type == 'cms_page'">
<a class="w-full block p-2" :href="searchResult.url" :title="searchResult.title">
<span class="text-sm" x-text="searchResult.title"></span>
</a>
</template>
</div>
</template>
</div>
</div>
</template>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="flex items-center gap-2.5 menu-bp:gap-0.5 justify-end order-3">
<a aria-label="Nos magasins"
class="inline-block no-underline p-1 md:p-2 text-lavender hover:text-anthracite-400 flex items-center justify-center"
@click.prevent="clickIconHeaderEvent('Store locator', 'https://www.adopt.com/fr/store-locator')"
href="https://www.adopt.com/fr/store-locator">
<span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="pin-shop" version="1.1" x="0px" y="0px" viewbox="0 0 21.3 23.9" enable-background="new 0 0 21.3 23.9" xml:space="preserve" class="w-auto h-5.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.7,0.5c2.2,0,4.3,0.6,6.2,1.8 c4.8,3,5.2,9.2,1.3,13.7c-2.3,2.7-4.8,5.2-7.5,7.4c-2.7-2.2-5.3-4.7-7.5-7.4C-0.7,11.4-0.4,5.3,4.4,2.3C6.3,1.1,8.5,0.5,10.7,0.5z M10.7,5.2c-2.4,0-4.4,1.9-4.4,4.3c0,2.4,1.9,4.3,4.4,4.3c2.4,0,4.4-1.9,4.4-4.3C15,7.1,13.1,5.2,10.7,5.2z"/>
<title/></svg>
</span>
</a>
<a aria-label="Wishlist"
class="hidden md:flex p-1 no-underline md:p-2 text-lavender hover:text-anthracite-400 items-center justify-center w-fit h-fit"
href="https://www.adopt.com/fr/wishlist"
@click.prevent="clickIconHeaderEvent('wishlist', 'https://www.adopt.com/fr/wishlist')">
<span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite" version="1.1" x="0px" y="0px" viewbox="0 0 26.3 22.8" enable-background="new 0 0 26.3 22.8" xml:space="preserve" class="w-auto h-5.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="0.948" d="M13.2,22.3c-24.4-13.5-7.3-28.2,0-18.9C20.5-5.9,37.6,8.8,13.2,22.3z"/>
<title/></svg>
</span>
</a>
<script>
function customerLocalStorage() {
let browserStorage = hyva.getBrowserStorage().getItem('mage-cache-storage');
let customer = "";
browserStorage = JSON.parse(browserStorage);
if (browserStorage) {
customer = browserStorage.customer;
} else {
customer = undefined;
}
return customer;
}
function initCustomerNav() {
return {
open: false,
immersiveColor: '',
isScrolled: false,
name: '',
isMobile: window.outerWidth < 768,
movementInterval: null,
openNav($event) {
if (this.isMobile) {
window.location.href = $event.target.href;
} else {
this.open = !this.open;
if (this.open) {
window.dispatchEvent(
new CustomEvent('open-mini-cart')
);
}
}
},
init($refs) {
if (window.pageYOffset > 0) {
this.isScrolled = true;
}
let intervalCustomer = setInterval(() => {
if (customerLocalStorage() !== undefined) {
this.name = customerLocalStorage().firstname;
clearInterval(intervalCustomer);
}
}, 500)
this.svgClean($refs);
if (!localStorage.getItem("animationLoginPellet") || (((localStorage.getItem("animationLoginPellet") / 1000) - (new Date().getTime() / 1000)) < -86400)) {
this.animationPellet();
}
},
clickIconHeaderEvent(label) {
localStorage.setItem("animationLoginPellet", new Date().getTime());
clearInterval(this.movementInterval);
window.dataLayer?.push({
'event': 'clic-icon-header',
'text': label
});
},
scroll($refs) {
this.isScrolled = window.pageYOffset > 0
},
svgClean($refs) {
if (this.$refs.reassurance) {
this.$refs.reassurance.querySelectorAll('svg').forEach(icon => {
icon.removeAttribute('width');
icon.removeAttribute('height')
})
}
if (this.$refs.nav) {
this.$refs.nav.querySelectorAll('svg').forEach(icon => {
icon.removeAttribute('width');
icon.removeAttribute('height')
})
}
},
closeNav() {
this.open = false;
window.dispatchEvent(
new CustomEvent('close-mini-cart')
);
},
movementPellet() {
this.$refs.pellet.style.top = '20%'
setTimeout(() => {
this.$refs.pellet.style.top = '70%'
}, "150");
setTimeout(() => {
this.$refs.pellet.style.top = '20%'
}, "300");
setTimeout(() => {
this.$refs.pellet.style.top = '50%'
}, "450");
},
animationPellet() {
clearInterval(this.movementInterval);
this.movementInterval = setInterval(() => {
this.movementPellet()
}, 6000)
},
sendCreateAccountEvent() {
window.dataLayer?.push({
'event': 'creer_mon_compte',
'element': 'Header - Desktop'
});
},
sendLoginEvent() {
window.dataLayer?.push({
'event': 'identifiez_vous',
'element': 'Header - Desktop'
});
}
}
}
</script>
<div x-data="initCustomerNav()" x-init="init($refs)" @scroll.window="scroll($refs)"
@resize.window.debounce.100="isMobile = window.outerWidth < 768;" class="relative inline-block">
<a href="https://www.adopt.com/fr/customer/account" type="button"
class="block no-button-appearance text-tertiary hover:text-ui rounded-lg transition-all duration-300"
x-bind:role="isMobile ? 'link' : 'button'"
@click.prevent.stop="openNav($event); clickIconHeaderEvent('Mon compte')"
x-bind:aria-haspopup="isMobile ? 'false' : 'true'" x-bind:aria-expanded="open" aria-label="Mon compte">
<span class="pointer-events-none p-0.5 md:p-1.5 flex justify-center items-center">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="compte" version="1.1" x="0px" y="0px" viewbox="0 0 22.8 23.9" enable-background="new 0 0 22.8 23.9" xml:space="preserve" class="w-auto h-5.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M11.4,11.9c3.2,0,5.7-2.6,5.7-5.7 s-2.6-5.7-5.7-5.7C8.3,0.4,5.7,3,5.7,6.2S8.3,11.9,11.4,11.9z"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M22.3,23.4c-1.5-4.7-5.9-7.9-10.9-7.9 S2,18.7,0.5,23.4H22.3z"/>
<title/></svg>
</span>
<span x-ref="pellet"
class="block absolute pointer-events-none w-2 h-2 bg-pink rounded-full top-1/2 right-[15%] transition-all duration-300"></span>
</a>
<nav class="account-pop absolute right-0 z-40 hidden w-fit mt-2.5 text-anthracite w-40 md:min-w-[23.125rem]"
:class="{ 'hidden' : (!open && !isMobile) || isMobile }" @click.away.outside="closeNav()">
<div class="account-pop__content account-pop__logout rounded-[1.25rem] overflow-hidden bg-white shadow-lg min-w-[20.1875rem] w-full text-center">
<div class="px-9 py-6 flex flex-col gap-6">
<div class="flex flex-col gap-3">
<span class="text-3.2xl font-medium font-secondary leading-[0.99]">
Bonjour </span>
<span class="leading-1.2 text-ui-500">
Connectez-vous et bénéficiez d'une expérience 100% personnalisée </span>
</div>
<a class="btn btn-primary w-full min-h-[clamp(3.125rem,0.938967vw+2.90493rem,3.75rem)] flex justify-center items-center font-semibold leading-none"
onclick="hyva.setCookie && hyva.setCookie('login_redirect', window.location.href, 0.0069444)"
href="https://www.adopt.com/fr/customer/account/index"
@click="sendLoginEvent">
Identifiez-vous </a>
</div>
<div class="px-9 py-6 text-white bg-cover bg-center flex flex-col gap-6"
style="background-image: url('https://adopt.twic.pics/static/frontend/Adopt/hyva/fr_FR/images/backgrounds/background-colibri.png?twic=v1');">
<span class="text-3.2xl font-medium font-secondary leading-[0.99]">
Nouveau client ? Rejoignez myAdopt </span>
<span class="leading-1.2">
</span>
<a class="btn btn-primary-white !bg-anthracite-200 hover:!bg-white w-full min-h-[3.4375rem] flex justify-center items-center font-semibold leading-none"
onclick="hyva.setCookie && hyva.setCookie('login_redirect', window.location.href, 0.0069444)"
@click="sendCreateAccountEvent"
href="https://www.adopt.com/fr/customer/account/create">
Créer mon compte </a>
</div>
</div>
</nav>
</div>
<a id="menu-cart-icon" class="relative inline-block p-1 no-underline md:p-2 text-lavender hover:text-anthracite h-10 w-10 flex items-center justify-center"
href="https://www.adopt.com/fr/checkout/cart"
aria-label="Panier">
<span class="sr-only label">
Panier </span>
<span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="bag" version="1.1" x="0px" y="0px" viewbox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve" class="w-auto h-5.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M16.8,5.3c-0.5-2.8-2.7-4.8-5.3-4.8 c-2.6,0-4.8,2-5.3,4.8"/>
<path fill="none" stroke="currentColor" d="M10.1,5.3h3.8c5.3,0,9.6,4.3,9.6,9.6v8.6h-23v-8.6C0.5,9.6,4.8,5.3,10.1,5.3z"/>
<title/></svg>
</span>
<span x-text="cart.summary_count" class="absolute top-0 right-0 hidden h-5 px-[7px] py-1.25 -mt-3 md:-mr-2 text-xs-tiny md:text-xs font-medium leading-none text-center text-white uppercase transform -translate-x-1 translate-y-1/2 rounded-full bg-pink-300" :class="{ 'hidden': !cart.summary_count, 'block': cart.summary_count }"></span>
</a>
</div>
<div class="md:col-span-3 md:order-4 order-1">
<div x-data="initMenuMobile_69af8f961ee42()"
x-ref="mobileMenuRoot"
class="z-40 navigation-mobile menu-bp:hidden"
@open-mini-cart.window="$el.style.zIndex = '20'"
@close-mini-cart.window.debounce="$el.style.zIndex = '40'">
<div class="flex flex-row h-[63px]">
<div class="flex justify-end">
<button type="button" @click="toggleMobileMenu()" aria-label="Menu" aria-expanded="false" :aria-expanded="open"
class="flex items-center justify-center cursor-pointer text-pink focus-default"
:class="{ 'ml-auto': open }">
<svg width="17" height="15" version="1.1" viewbox="0 0 17 15" xmlns="http://www.w3.org/2000/svg"
class="block w-12 h-12 p-3 fill-current text-lavender"
:class="{ 'hidden' : open, 'block': !open, 'text-lavender': 1, 'text-white': 0 }">
<g id="icons/burger-adopt" fill="none" fill-rule="evenodd">
<g id="adopt" fill="currentColor">
<rect width="17" height="1" rx=".5" />
<rect y="7" width="13" height="1" rx=".5" />
<rect y="14" width="17" height="1" rx=".5" />
</g>
</g>
</svg>
<svg width="15.5" height="15.5" version="1.1" viewbox="0 0 15.5 15.5"
xmlns="http://www.w3.org/2000/svg"
class="hidden w-12 h-12 p-4 text-[#F98CDC]"
:class="{ 'hidden' : !open, 'block': open }">
<g transform="translate(.75 .75)" fill="currentColor" fill-rule="evenodd"
stroke="currentColor" stroke-linecap="round" stroke-width="1.5">
<line x2="14" y1="14" />
<line transform="matrix(-1,0,0,1,14,0)" x2="14" y1="14" />
</g>
</svg>
</button>
</div>
</div>
<!-- mobile -->
<div class="nav-mobile flex flex-col z-50"
id="nav-mobile"
:class="{'fixed left-0 w-full bg-container-lighter' : open}"
@keydown.window.escape="closeMenuMobile()">
<nav
class="nav-wrapper hidden w-full duration-150 ease-in-out transform transition-display border-container overflow-x-hidden overflow-y-auto flex-1"
:class="{ 'hidden' : !open }">
<div class="py-3 nav-categories-wrapper" :inert="openBrandElement">
<a href="https://www.adopt.com/fr/diagnostic-olfactif/"
class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" version="1.1" viewbox="0 0 30 30" class="w-8.75 h-auto mr-4" role="img">
<g fill-rule="evenodd">
<circle cx="15" cy="15" r="15" fill="#fdbcff"/>
<circle cx="15" cy="15" r="12" fill="#feddff"/>
<circle cx="15" cy="15" r="8" fill="#fffaff"/>
<path d="m23.269 7.2479c1.3034-0.37112 2.2518-0.22709 2.731-0.18556-0.74483 0.12371-1.0552 0.18556-1.7379 0.30927-0.68276 0.12371-2.0483 0.74225-3.1034 1.2989-1.0552 0.55669-1.4276 1.7938-1.5517 2.536-0.12414 0.74225 0.12414 1.7319-0.31034 3.7112s-2.4207 3.402-5.0276 5.2576c-1.7379 1.2371-3.1241 2.8453-4.1586 4.8246 0.53793-2.1855 0.97241-3.7937 1.3034-4.8246s1.0138-2.6803 2.0483-4.9483c0.28966 0.20618 0.51724 0.35051 0.68276 0.43298 1.2662 0.63091 1.8149 0.63617 2.3322 0.62355l0.18239-0.0042 0.09231-8.04e-4c-1.6759-0.12371-2.8552-0.98966-3.8483-1.6701-0.9931-0.68039-1.9241-1.6082-2.6069-2.9071-0.45517-0.86595-1.2207-2.0618-2.2966-3.5875 0.37241 0.16494 0.84828 0.41236 1.4276 0.74225 0.57931 0.32989 2.6069 1.1752 6.0828 2.536 0.08276-1.0721 0.2069-1.835 0.37241-2.2886 0.24828-0.68039 0.86897-1.5463 2.1724-1.6082 1.3034-0.061854 1.5517 0.49483 2.2345 0.61854s1.6759-0.49483 2.9793-0.86595z" fill="#ee5194"/>
</g>
<title/></svg>
Diagnostic parfum </a>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<a href="https://www.adopt.com/fr/offres-commerciales.html"
class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Sans_titre_62_-min_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Sans_titre_62_-min_2.png"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Offres </a>
</span>
</div>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<button class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs"
@click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-1472' ? 0 : 'category-node-1472'; nameActiveMenu = 'Parfum'; activeSubMenuId = null; activeSubNav();"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/CRM_MIXMULTIPRODUIT_MIXTE_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/CRM_MIXMULTIPRODUIT_MIXTE_1_1.jpg"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Parfum </button>
<div class="absolute -top-px right-0 flex w-14 h-full items-center justify-center cursor-pointer bg-transparent border-container hover:bg-transparent hover:border-container pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="text-pink-lighter h-2.5 w-auto" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</div>
</span>
<div class="subnav-wrapper absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out overflow-y-auto translate-x-full transform bg-container-lighter"
:class="{ 'translate-x-full' : mobilePanelActiveId !== 'category-node-1472', 'translate-x-0' : mobilePanelActiveId === 'category-node-1472' }"
x-bind:inert="mobilePanelActiveId !== 'category-node-1472'">
<button class="link flex items-center gap-2.5 p-5 bg-lavender-300 w-full"
@click="mobilePanelActiveId = null; activeSubMenuId = null">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="-rotate-180 w-2.75 h-auto -mt-0.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
<span class="uppercase font-medium tracking-spaced-lg text-xxs leading-tiny">
Parfum </span>
</button>
<div>
<div>
<a class="flex items-center w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase underline tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
href="https://www.adopt.com/fr/parfum.html">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/CRM_MIXMULTIPRODUIT_MIXTE_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/CRM_MIXMULTIPRODUIT_MIXTE_1_1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
<span>Voir tout</span>
</a>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1472-category-node-1316' ? null : 'category-node-1472-category-node-1316'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/LIFE_PERF_MULTI_CARROUSELS_30_1_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_PERF_MULTI_CARROUSELS_30_1_2.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Parfum femme </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1472-category-node-1316'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1472-category-node-1316'">
<a href="https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html', '3', 'Eau de parfum')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Eau de parfum</span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme/coffret-parfum-femme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/coffret-parfum-femme.html', '3', 'Coffret parfum')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Coffret parfum</span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme/collection-voyage.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/collection-voyage.html', '3', 'Les Voyages')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les Voyages</span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme/parfum-intense.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/parfum-intense.html', '3', 'Les Intenses')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les Intenses</span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme.html"
title="Parfum femme"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1472-category-node-1320' ? null : 'category-node-1472-category-node-1320'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/RS_ADOPT_EDP_30ML_HOMME_1_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/RS_ADOPT_EDP_30ML_HOMME_1_2.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Parfum homme </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1472-category-node-1320'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1472-category-node-1320'">
<a href="https://www.adopt.com/fr/parfum/parfum-homme/eau-de-parfum-homme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-homme/eau-de-parfum-homme.html', '3', 'Eau de parfum')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Eau de parfum</span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-homme/coffret-parfum-homme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-homme/coffret-parfum-homme.html', '3', 'Coffret parfum')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Coffret parfum</span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-homme.html"
title="Parfum homme"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<a href="https://www.adopt.com/fr/parfum/parfum-mixte.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-mixte.html', '2', 'Parfum mixte')"
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-lavender-300">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Cat-mixte-coffret-parfum_1__1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Cat-mixte-coffret-parfum_1__1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Parfum mixte </span>
</a>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1472-category-node-1335' ? null : 'category-node-1472-category-node-1335'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/diag-olfa-circle_COLIBRI-min.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/diag-olfa-circle_COLIBRI-min.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Univers olfactif </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1472-category-node-1335'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1472-category-node-1335'">
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/coton-et-douceur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/coton-et-douceur.html', '3', 'Les délicats')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les délicats</span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/boise-et-caractere.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/boise-et-caractere.html', '3', 'Les caractères')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les caractères</span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/fraicheur-et-agrume.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/fraicheur-et-agrume.html', '3', 'Les frais')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les frais</span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/fleurs-et-romantisme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/fleurs-et-romantisme.html', '3', 'Les floraux')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les floraux</span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/fruits-et-plaisir.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/fruits-et-plaisir.html', '3', 'Les fruités')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les fruités</span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/gourmandise-et-seduction.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/gourmandise-et-seduction.html', '3', 'Les gourmands')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les gourmands</span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/soleil-et-sensualite.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/soleil-et-sensualite.html', '3', 'Les solaires')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Les solaires</span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum.html"
title="Univers olfactif"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<a href="https://www.adopt.com/fr/parfum/accessoire-parfum.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/accessoire-parfum.html', '2', 'Accessoire Parfum')"
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-lavender-300">
<span class="flex items-center">
<span class="inline-block mr-4 w-8.75 h-8.75"></span>
Accessoire Parfum </span>
</a>
<div class="bg-pink-100 mt-5 py-2">
<a href="https://www.adopt.com/fr/diagnostic-olfactif/"
class="a flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium gradient-text-purple">
Faire mon diagnostic </a>
<a href="https://www.adopt.com/fr/parfum/exclusivite-web.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Exclu web </span>
</a>
<a href="https://www.adopt.com/fr/parfum/nouveautes-parfum.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/parfum/meilleures-ventes-parfum.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Meilleures ventes </span>
</a>
<a href="https://www.adopt.com/fr/parfum/format-decouverte.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Parfum miniature </span>
</a>
<a href="https://www.adopt.com/fr/parfum/magic-touch.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Magic Touch </span>
</a>
</div>
</div>
<div class="py-5 border-t border-dashed border-lavender">
<div
class="px-5 text-pink uppercase text-xxs font-medium tracking-spaced-lg mb-5">
<a href="https://www.adopt.com/fr/parfum/famille-olfactive.html">#notesolfactives</a>
</div>
<div class="w-full overflow-x-hidden">
<div class="flex gap-2.5 overflow-x-auto pb-1 hide-scrollbar">
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-vanille-famille-olfactive.html">
#Vanille </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-fleurs-d-oranger-famille-olfactive.html">
#Fleurs d'oranger </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-rose-famille-olfactive.html">
#Rose </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-patchouly-famille-olfactive.html">
#Patchouli </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-monoi-famille-olfactive.html">
#Monoï </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-muscfamille-olfactive.html">
#Musc </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-ambre-famille-olfactive.html">
#Ambre </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-oud-famille-olfactive.html">
#Oud </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-coco-note-olfactive.html">
#Coco </a>
</div>
</div>
</div>
<div class="pt-2.5">
<a href="#" class="block">
<img loading="lazy" class="w-full"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_3_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_3_1.png"
width="701" height="994" alt="Parfum"
title="Parfum">
</a>
</div>
</div>
</div>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<a href="https://www.adopt.com/fr/brume-parfumee.html"
class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/carre_cat_brume__5_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/carre_cat_brume__5_2.jpg"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Brume </a>
</span>
</div>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<button class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs"
@click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-1369' ? 0 : 'category-node-1369'; nameActiveMenu = 'Corps'; activeSubMenuId = null; activeSubNav();"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_4.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_4.png"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Corps </button>
<div class="absolute -top-px right-0 flex w-14 h-full items-center justify-center cursor-pointer bg-transparent border-container hover:bg-transparent hover:border-container pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="text-pink-lighter h-2.5 w-auto" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</div>
</span>
<div class="subnav-wrapper absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out overflow-y-auto translate-x-full transform bg-container-lighter"
:class="{ 'translate-x-full' : mobilePanelActiveId !== 'category-node-1369', 'translate-x-0' : mobilePanelActiveId === 'category-node-1369' }"
x-bind:inert="mobilePanelActiveId !== 'category-node-1369'">
<button class="link flex items-center gap-2.5 p-5 bg-lavender-300 w-full"
@click="mobilePanelActiveId = null; activeSubMenuId = null">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="-rotate-180 w-2.75 h-auto -mt-0.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
<span class="uppercase font-medium tracking-spaced-lg text-xxs leading-tiny">
Corps </span>
</button>
<div>
<div>
<a class="flex items-center w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase underline tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
href="https://www.adopt.com/fr/soin-corps.html">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_4.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_4.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
<span>Voir tout</span>
</a>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('1')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1369-category-node-1370' ? null : 'category-node-1369-category-node-1370'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Cat-soins-corps-rituel-yummy-candy_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Cat-soins-corps-rituel-yummy-candy_1_1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Par produit </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1369-category-node-1370'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1369-category-node-1370'">
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gel-douche-parfume.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gel-douche-parfume.html', '3', 'Gel douche parfumé')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Gel douche parfumé</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/creme-et-lait-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/creme-et-lait-corps.html', '3', 'Crème & lait corps')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Crème & lait corps</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/soin-des-mains.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/soin-des-mains.html', '3', 'Crème mains')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Crème mains</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gommage-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gommage-corps.html', '3', 'Gommage corps')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Gommage corps</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/huile-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/huile-corps.html', '3', 'Huile corps')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Huile corps</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gelee-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gelee-corps.html', '3', 'Gelée corps')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Gelée corps</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/bombe-de-bain.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/bombe-de-bain.html', '3', 'Bombe de bain')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Bombe de bain</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/accessoires-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/accessoires-corps.html', '3', 'Accessoire corps')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Accessoire corps</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit.html"
title="Par produit"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1369-category-node-1382' ? null : 'category-node-1369-category-node-1382'">
<span class="flex items-center">
<span class="inline-block mr-4 w-8.75 h-8.75"></span>
Par action </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1369-category-node-1382'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1369-category-node-1382'">
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-hydratant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-hydratant.html', '3', 'Hydratant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Hydratant</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nourrissant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nourrissant.html', '3', 'Nourrissant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Nourrissant</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-eclat.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-eclat.html', '3', 'Éclat')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Éclat</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-exfoliant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-exfoliant.html', '3', 'Exfoliant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Exfoliant</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nettoyant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nettoyant.html', '3', 'Nettoyant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Nettoyant</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action.html"
title="Par action"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1369-category-node-1394' ? null : 'category-node-1369-category-node-1394'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Cat-maixte-eau-parfum_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Cat-maixte-eau-parfum_1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Rituel soin parfumé </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1369-category-node-1394'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1369-category-node-1394'">
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/joalia.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/joalia.html', '3', 'Joalia')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Joalia</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/onyx.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/onyx.html', '3', 'Onyx')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Onyx</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rouge-envoutant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rouge-envoutant.html', '3', 'Rouge Envoûtant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Rouge Envoûtant</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/golden-queen.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/golden-queen.html', '3', 'Golden Queen')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Golden Queen</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/wonderful.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/wonderful.html', '3', 'Wonderful')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Wonderful</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/coeur-a-coeur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/coeur-a-coeur.html', '3', 'Cœur à cœur')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Cœur à cœur</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rose-noire.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rose-noire.html', '3', 'Rose noire')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Rose noire</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/sublimissime.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/sublimissime.html', '3', 'Sublimissime')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Sublimissime</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/maestro.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/maestro.html', '3', 'Maestro')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Maestro</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/monoi-des-iles.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/monoi-des-iles.html', '3', 'Monoï des îles')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Monoï des îles</span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume.html"
title="Rituel soin parfumé"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div class="bg-pink-100 mt-5 py-2">
<a href="https://www.adopt.com/fr/soin-corps/nouveautes-soin-corps.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/meilleures-ventes-soin-corps.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Meilleures ventes </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soins-d-exception-corps.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Karité & Argan </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soins-corps-homme.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Homme </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/beaute-d-orient.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Beauté d'Orient </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/gamme-bain.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Gamme bain </span>
</a>
</div>
</div>
<div class="pt-2.5">
<a href="#" class="block">
<img loading="lazy" class="w-full"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_3_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_3_1.png"
width="701" height="994" alt="Corps"
title="Corps">
</a>
</div>
</div>
</div>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<button class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs"
@click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-1343' ? 0 : 'category-node-1343'; nameActiveMenu = 'Visage'; activeSubMenuId = null; activeSubNav();"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_5.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_5.png"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Visage </button>
<div class="absolute -top-px right-0 flex w-14 h-full items-center justify-center cursor-pointer bg-transparent border-container hover:bg-transparent hover:border-container pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="text-pink-lighter h-2.5 w-auto" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</div>
</span>
<div class="subnav-wrapper absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out overflow-y-auto translate-x-full transform bg-container-lighter"
:class="{ 'translate-x-full' : mobilePanelActiveId !== 'category-node-1343', 'translate-x-0' : mobilePanelActiveId === 'category-node-1343' }"
x-bind:inert="mobilePanelActiveId !== 'category-node-1343'">
<button class="link flex items-center gap-2.5 p-5 bg-lavender-300 w-full"
@click="mobilePanelActiveId = null; activeSubMenuId = null">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="-rotate-180 w-2.75 h-auto -mt-0.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
<span class="uppercase font-medium tracking-spaced-lg text-xxs leading-tiny">
Visage </span>
</button>
<div>
<div>
<a class="flex items-center w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase underline tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
href="https://www.adopt.com/fr/soin-visage.html">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_5.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_5.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
<span>Voir tout</span>
</a>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('1')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1343-category-node-1344' ? null : 'category-node-1343-category-node-1344'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Dimension_special_category_3__1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Dimension_special_category_3__1.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Par produit </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1343-category-node-1344'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1343-category-node-1344'">
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/demaquillants.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/demaquillants.html', '3', 'Démaquillants')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Démaquillants</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/nettoyants.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/nettoyants.html', '3', 'Nettoyants')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Nettoyants</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/masques-exfoliants.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/masques-exfoliants.html', '3', 'Masques & Exfoliants')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Masques & Exfoliants</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/serums.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/serums.html', '3', 'Sérums')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Sérums</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/soin-contour-des-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/soin-contour-des-yeux.html', '3', 'Soin contour des yeux')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Soin contour des yeux</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/creme-jour-et-nuit.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/creme-jour-et-nuit.html', '3', 'Crème jour et nuit')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Crème jour et nuit</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit.html"
title="Par produit"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1343-category-node-1354' ? null : 'category-node-1343-category-node-1354'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/image_mobile_1.webp?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/image_mobile_1.webp"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Par action </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1343-category-node-1354'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1343-category-node-1354'">
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action/hydratation-eclat.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action/hydratation-eclat.html', '3', 'Hydratation & Eclat')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Hydratation & Eclat</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action/purifiant-matifiant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action/purifiant-matifiant.html', '3', 'Purifiant & Matifiant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Purifiant & Matifiant</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action/lissant-repulpant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action/lissant-repulpant.html', '3', 'Lissant & Repulpant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Lissant & Repulpant</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action.html"
title="Par action"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1343-category-node-1742' ? null : 'category-node-1343-category-node-1742'">
<span class="flex items-center">
<span class="inline-block mr-4 w-8.75 h-8.75"></span>
Par Actif </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1343-category-node-1742'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1343-category-node-1742'">
<a href="https://www.adopt.com/fr/soin-visage/par-actif/zinc.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/zinc.html', '3', 'Zinc')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Zinc</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/acide-salicylique.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/acide-salicylique.html', '3', 'Acide salicylique')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Acide salicylique</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/argile.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/argile.html', '3', 'Argile')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Argile</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/vitamine-c.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/vitamine-c.html', '3', 'Vitamine C')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Vitamine C</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/acide-hyaluronique.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/acide-hyaluronique.html', '3', 'Acide hyaluronique')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Acide hyaluronique</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/cafeine.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/cafeine.html', '3', 'Caféine')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Caféine</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/huile-amande-douce.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/huile-amande-douce.html', '3', 'Huile amande douce')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Huile amande douce</span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif.html"
title="Par Actif"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div class="bg-pink-100 mt-5 py-2">
<a href="https://www.adopt.com/fr/soin-visage/nouveautes-soin-visage.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/meilleures-ventes-soin-visage.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Meilleures ventes </span>
</a>
</div>
</div>
<div class="pt-2.5">
<a href="#" class="block">
<img loading="lazy" class="w-full"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_7.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_7.png"
width="701" height="994" alt="Visage"
title="Visage">
</a>
</div>
</div>
</div>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<button class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs font-medium"
style="color:#46405a;"
@click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-1667' ? 0 : 'category-node-1667'; nameActiveMenu = 'Maison'; activeSubMenuId = null; activeSubNav();"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/LIFE_BEST_SLIDER_MAISON_1_1__2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_BEST_SLIDER_MAISON_1_1__2.jpg"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Maison </button>
<div class="absolute -top-px right-0 flex w-14 h-full items-center justify-center cursor-pointer bg-transparent border-container hover:bg-transparent hover:border-container pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="text-pink-lighter h-2.5 w-auto" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</div>
</span>
<div class="subnav-wrapper absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out overflow-y-auto translate-x-full transform bg-container-lighter"
:class="{ 'translate-x-full' : mobilePanelActiveId !== 'category-node-1667', 'translate-x-0' : mobilePanelActiveId === 'category-node-1667' }"
x-bind:inert="mobilePanelActiveId !== 'category-node-1667'">
<button class="link flex items-center gap-2.5 p-5 bg-lavender-300 w-full"
@click="mobilePanelActiveId = null; activeSubMenuId = null">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="-rotate-180 w-2.75 h-auto -mt-0.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
<span class="uppercase font-medium tracking-spaced-lg text-xxs leading-tiny">
Maison </span>
</button>
<div>
<div>
<a class="flex items-center w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase underline tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
href="https://www.adopt.com/fr/maison.html">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/LIFE_BEST_SLIDER_MAISON_1_1__2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_BEST_SLIDER_MAISON_1_1__2.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
<span>Voir tout</span>
</a>
</div>
<a href="https://www.adopt.com/fr/maison/bougie-parfumee.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maison/bougie-parfumee.html', '2', 'Bougie parfumée')"
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-lavender-300">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/LIFE_HOME_CANDLE_JARDINDESROSES_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_HOME_CANDLE_JARDINDESROSES_2.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Bougie parfumée </span>
</a>
<a href="https://www.adopt.com/fr/maison/parfums-d-interieur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maison/parfums-d-interieur.html', '2', 'Parfums d\'intérieur')"
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-lavender-300">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/LIFE_HOME_MULTI_DIFFUSER_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_HOME_MULTI_DIFFUSER_2.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Parfums d'intérieur </span>
</a>
<a href="https://www.adopt.com/fr/maison/huile-essentielle.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maison/huile-essentielle.html', '2', 'Huile essentielle')"
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-lavender-300">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/PLV_BRUME_D_OREILLER_LAVANDE_5.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/PLV_BRUME_D_OREILLER_LAVANDE_5.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Huile essentielle </span>
</a>
<div class="bg-pink-100 mt-5 py-2">
</div>
</div>
<div class="pt-2.5">
<a href="#" class="block">
<img loading="lazy" class="w-full"
src="https://adopt.twic.pics/media/catalog/category/LIFE_BEST_SLIDER_MAISON_1_1__4.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_BEST_SLIDER_MAISON_1_1__4.jpg"
width="1200" height="1200" alt="Maison"
title="Maison">
</a>
</div>
</div>
</div>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<button class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs font-medium"
@click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-1443' ? 0 : 'category-node-1443'; nameActiveMenu = 'Maquillage'; activeSubMenuId = null; activeSubNav();"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_2.png"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Maquillage </button>
<div class="absolute -top-px right-0 flex w-14 h-full items-center justify-center cursor-pointer bg-transparent border-container hover:bg-transparent hover:border-container pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="text-pink-lighter h-2.5 w-auto" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</div>
</span>
<div class="subnav-wrapper absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out overflow-y-auto translate-x-full transform bg-container-lighter"
:class="{ 'translate-x-full' : mobilePanelActiveId !== 'category-node-1443', 'translate-x-0' : mobilePanelActiveId === 'category-node-1443' }"
x-bind:inert="mobilePanelActiveId !== 'category-node-1443'">
<button class="link flex items-center gap-2.5 p-5 bg-lavender-300 w-full"
@click="mobilePanelActiveId = null; activeSubMenuId = null">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="-rotate-180 w-2.75 h-auto -mt-0.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
<span class="uppercase font-medium tracking-spaced-lg text-xxs leading-tiny">
Maquillage </span>
</button>
<div>
<div>
<a class="flex items-center w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase underline tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
href="https://www.adopt.com/fr/maquillage.html">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_2.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
<span>Voir tout</span>
</a>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1443-category-node-1444' ? null : 'category-node-1443-category-node-1444'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Cat-maquillage-fond-de-teint_1__1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Cat-maquillage-fond-de-teint_1__1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Teint </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1443-category-node-1444'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1443-category-node-1444'">
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/fond-de-teint.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/fond-de-teint.html', '3', 'Fond de teint')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Fond de teint</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/anti-cernes-et-correcteur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/anti-cernes-et-correcteur.html', '3', 'Correcteur & anti-cernes')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Correcteur & anti-cernes</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/base-de-teint-et-fixateur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/base-de-teint-et-fixateur.html', '3', 'Base de teint & fixateur')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Base de teint & fixateur</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/blush.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/blush.html', '3', 'Blush & enlumineur')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Blush & enlumineur</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/poudre.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/poudre.html', '3', 'Poudre')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Poudre</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/accessoires-teint.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/accessoires-teint.html', '3', 'Accessoire teint')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Accessoire teint</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint.html"
title="Teint"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1443-category-node-1452' ? null : 'category-node-1443-category-node-1452'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Cat-maquillage-mascara_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Cat-maquillage-mascara_1_1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Yeux </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1443-category-node-1452'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1443-category-node-1452'">
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/mascara.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/mascara.html', '3', 'Mascara')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Mascara</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/eyeliner.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/eyeliner.html', '3', 'Eyeliner')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Eyeliner</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/crayon-pour-les-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/crayon-pour-les-yeux.html', '3', 'Crayon')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Crayon</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/fard-a-paupieres.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/fard-a-paupieres.html', '3', 'Fard à paupières')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Fard à paupières</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/sourcil.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/sourcil.html', '3', 'Sourcils')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Sourcils</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/palette-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/palette-yeux.html', '3', 'Palette')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Palette</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/accessoires-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/accessoires-yeux.html', '3', 'Accessoire yeux')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Accessoire yeux</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux.html"
title="Yeux"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1443-category-node-1460' ? null : 'category-node-1443-category-node-1460'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Cat-maquillage-rouge-a-levres_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Cat-maquillage-rouge-a-levres_1_1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Lèvres </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1443-category-node-1460'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1443-category-node-1460'">
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres/rouge-a-levres.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres/rouge-a-levres.html', '3', 'Rouge à lèvres')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Rouge à lèvres</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres/gloss.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres/gloss.html', '3', 'Gloss')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Gloss</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres/baume-a-levres.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres/baume-a-levres.html', '3', 'Baume à lèvres')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Baume à lèvres</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres.html"
title="Lèvres"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1443-category-node-1465' ? null : 'category-node-1443-category-node-1465'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/Cat-maquillage-vernis-ongles_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/Cat-maquillage-vernis-ongles_1_1.jpg"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Ongles </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1443-category-node-1465'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1443-category-node-1465'">
<a href="https://www.adopt.com/fr/maquillage/maquillage-ongles/vernis-a-ongles.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-ongles/vernis-a-ongles.html', '3', 'Vernis à ongles')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Vernis à ongles</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-ongles/accessoires-manucure.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-ongles/accessoires-manucure.html', '3', 'Accessoire manucure')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Accessoire manucure</span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-ongles.html"
title="Ongles"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div class="bg-pink-100 mt-5 py-2">
<a href="https://www.adopt.com/fr/maquillage/nouveautes-maquillage.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/meilleures-ventes-maquillage.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Meilleures ventes </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/offre-maquillage.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Offre maquillage </span>
</a>
</div>
</div>
<div class="pt-2.5">
<a href="#" class="block">
<img loading="lazy" class="w-full"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_4.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_4.png"
width="701" height="994" alt="Maquillage"
title="Maquillage">
</a>
</div>
</div>
</div>
<div class="level-0">
<span
class="flex items-center transition-transform duration-150 ease-in-out transform"
:class="{ '-translate-x-full' : mobilePanelActiveId, 'translate-x-0' : !mobilePanelActiveId }">
<button class="flex items-center w-full pr-8 pl-4 py-1.5 cursor-pointer uppercase text-anthracite font-medium tracking-spaced-lg border-container level-0 hover:bg-lavender-300 transition duration-300 text-xs font-medium"
@click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-1428' ? 0 : 'category-node-1428'; nameActiveMenu = 'Cadeau'; activeSubMenuId = null; activeSubNav();"
:inert="mobilePanelActiveId !== null">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_2_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_2_1.png"
data-twic-bot="cover-max=74"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Cadeau </button>
<div class="absolute -top-px right-0 flex w-14 h-full items-center justify-center cursor-pointer bg-transparent border-container hover:bg-transparent hover:border-container pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="text-pink-lighter h-2.5 w-auto" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</div>
</span>
<div class="subnav-wrapper absolute top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out overflow-y-auto translate-x-full transform bg-container-lighter"
:class="{ 'translate-x-full' : mobilePanelActiveId !== 'category-node-1428', 'translate-x-0' : mobilePanelActiveId === 'category-node-1428' }"
x-bind:inert="mobilePanelActiveId !== 'category-node-1428'">
<button class="link flex items-center gap-2.5 p-5 bg-lavender-300 w-full"
@click="mobilePanelActiveId = null; activeSubMenuId = null">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="-rotate-180 w-2.75 h-auto -mt-0.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
<span class="uppercase font-medium tracking-spaced-lg text-xxs leading-tiny">
Cadeau </span>
</button>
<div>
<div>
<a class="flex items-center w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase underline tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
href="https://www.adopt.com/fr/cadeaux.html">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_2_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_2_1.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
<span>Voir tout</span>
</a>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('1')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1428-category-node-1429' ? null : 'category-node-1428-category-node-1429'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/M_chamment_styl_feeling_box_fdp-min_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/M_chamment_styl_feeling_box_fdp-min_1.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Pour qui </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1428-category-node-1429'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1428-category-node-1429'">
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-femme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-femme.html', '3', 'Cadeau Femme')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Cadeau Femme</span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-lui.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-lui.html', '3', 'Cadeau Homme')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Cadeau Homme</span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-enfant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-enfant.html', '3', 'Cadeau Enfant')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Cadeau Enfant</span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui.html"
title="Pour qui"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div x-data="initMobileCmsPageMenuItem_69af8f961ee42('0')">
<button
class="flex items-center justify-between w-full px-5 py-1.5 cursor-pointer border-container text-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300"
@click="activeSubMenuId = activeSubMenuId === 'category-node-1428-category-node-1434' ? null : 'category-node-1428-category-node-1434'">
<span class="flex items-center">
<img loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/PACK_MULTI_DESTINATIONSOLEIL_FEELINGBOX_Montage_Vanille_Bourbon-1-min_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/PACK_MULTI_DESTINATIONSOLEIL_FEELINGBOX_Montage_Vanille_Bourbon-1-min_1.png"
alt=""
width="37px"
height="37px"
class="overflow-hidden rounded-full mr-4 w-8.75 h-8.75">
Par prix </span>
<span class="transform"
:class="{'rotate-180': activeSubMenuId === 'category-node-1428-category-node-1434'}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-down" version="1.1" x="0px" y="0px" viewbox="0 0 9 5" enable-background="new 0 0 9 5" xml:space="preserve" class="text-pink-lighter w-3 h-auto" width="9" height="5" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</span>
</button>
<div x-show="activeSubMenuId === 'category-node-1428-category-node-1434'">
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-moins-de-10-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-moins-de-10-euros.html', '3', 'Petits prix')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Petits prix</span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-10-et-20-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-10-et-20-euros.html', '3', 'Moins de 20€')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Moins de 20€</span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-20-et-30-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-20-et-30-euros.html', '3', 'Entre 20 et 30€')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Entre 20 et 30€</span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-plus-de-30-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-plus-de-30-euros.html', '3', 'Cadeau premium')"
class="block text-tiny group py-3 px-7.5 tracking-wider hover:bg-lavender-300">
<span
class="pl-[41px]">Cadeau premium</span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix.html"
title="Par prix"
class="block text-tiny group py-3 px-7.5 font-medium tracking-spaced-lg underline uppercase hover:bg-lavender-300">
<span
class="pl-[41px]">Voir tout</span></a>
</div>
</div>
<div class="bg-pink-100 mt-5 py-2">
<a href="https://www.adopt.com/fr/guide-cadeaux-adopt"
class="a flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium gradient-text-purple"
data-parent-id="category-node-1428">
Guide cadeau </a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-coups-de-coeur.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Nos coups de coeur </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/exclu-web.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Exclu web </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/emballage-cadeaux.html"
class="flex items-center justify-between w-full px-5 py-2 cursor-pointer border-container text-xs-tiny uppercase tracking-spaced-lg font-medium hover:bg-container-darker hover:bg-lavender-300">
<span>
Emballage cadeau </span>
</a>
</div>
</div>
<div class="pt-2.5">
<a href="#" class="block">
<img loading="lazy" class="w-full"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_4_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_4_1.png"
width="701" height="994" alt="Cadeau"
title="Cadeau">
</a>
</div>
</div>
</div>
</div>
<div class="border-t border-lavender-400 py-3 overflow-hidden">
<div class="">
<div x-data="{ ...initMobileCmsPageMenuItem_69af8f961ee42(), openSubElement: false, toggleBrandElement() { this.openBrandElement = !this.openBrandElement; if (this.openBrandElement) { document.querySelector('.page-footer').setAttribute('inert', 'true'); } else { document.querySelector('.page-footer').removeAttribute('inert'); } this.openSubElement = false; } }">
<button type="button"
class="flex items-center justify-between w-full px-8 py-4 cursor-pointer border-container text-xs font-medium tracking-spaced-lg transition duration-300 hover:bg-lavender-300"
@click="openBrandElement = !openBrandElement"
:inert="mobilePanelActiveId !== null || openBrandElement">
Nos valeurs <div class="absolute right-0 flex w-14 items-center justify-center cursor-pointer bg-transparent border-container hover:bg-transparent hover:border-container">
<span class="transform" :class="{'rotate-180': openSubElement}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="h-2.5 w-auto" width="14" height="13" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</span>
</div>
</button>
<div
class="absolute pb-16 bg-lavender-300 top-0 right-0 z-10 w-full h-full transition-transform duration-200 ease-in-out overflow-y-auto transform bg-container-lighter"
:class="{ 'translate-x-full' : !openBrandElement, 'translate-x-0' : openBrandElement }"
:inert="mobilePanelActiveId !== null && !openBrandElement">
<button class="link flex items-center gap-2.5 p-5 bg-lavender-300 w-full"
@click="openBrandElement = null"
:inert="mobilePanelActiveId !== null && !openBrandElement">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="tick-right" version="1.1" x="0px" y="0px" viewbox="0 0 8.4 14" enable-background="new 0 0 8.4 14" xml:space="preserve" class="-rotate-180 w-2.75 h-auto -mt-0.5" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
<span
class="uppercase font-medium tracking-spaced-lg text-xxs leading-tiny">Nos valeurs</span>
</button>
<div class="flex flex-col gap-2.5 px-2" :inert="mobilePanelActiveId !== null && !openBrandElement">
<a href="https://www.adopt.com/fr/programme-colibri"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/programme-colibri', '2', 'Les Programmes Colibri')"
class="relative block text-anthracite text-xxs group tracking-wider hover:bg-lavender-300">
<img loading="lazy"
class="w-full rounded-[10px] h-[200px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/carr__0.jpg?twic=v1/output=preview"
data-twic-src="image:media/picto/image/carr__0.jpg"
data-twic-transform="max=500"
alt=""
<button tabindex="-1">
Les Programmes Colibri </button>
</a>
<a href="https://www.adopt.com/fr/nos-engagements"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/nos-engagements', '2', 'Nos engagements')"
class="relative block text-anthracite text-xxs group tracking-wider hover:bg-lavender-300">
<img loading="lazy"
class="w-full rounded-[10px] h-[200px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/nos_engagements.jpg_1__0.png?twic=v1/output=preview"
data-twic-src="image:media/picto/image/nos_engagements.jpg_1__0.png"
data-twic-transform="max=500"
alt=""
<button tabindex="-1">
Nos engagements </button>
</a>
<a href="https://www.adopt.com/fr/l-univers-adopt"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/l-univers-adopt', '2', 'L\'univers adopt')"
class="relative block text-anthracite text-xxs group tracking-wider hover:bg-lavender-300">
<img loading="lazy"
class="w-full rounded-[10px] h-[200px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/Adopt_0505_Capots_2_Invio_0.png?twic=v1/output=preview"
data-twic-src="image:media/picto/image/Adopt_0505_Capots_2_Invio_0.png"
data-twic-transform="max=500"
alt=""
<button tabindex="-1">
L'univers adopt </button>
</a>
<a href="https://www.adopt.com/fr/savoir-faire"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/savoir-faire', '2', 'Savoir-faire')"
class="relative block text-anthracite text-xxs group tracking-wider hover:bg-lavender-300">
<img loading="lazy"
class="w-full rounded-[10px] h-[200px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/savoir-faire-adopt_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/picto/image/savoir-faire-adopt_1.jpg"
data-twic-transform="max=500"
alt=""
<button tabindex="-1">
Savoir-faire </button>
</a>
<a href="https://www.adopt.com/fr/nos-services-en-boutique"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/nos-services-en-boutique', '2', 'Nos services en boutique')"
class="relative block text-anthracite text-xxs group tracking-wider hover:bg-lavender-300">
<img loading="lazy"
class="w-full rounded-[10px] h-[200px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/service_en_boutique_0.jpg?twic=v1/output=preview"
data-twic-src="image:media/picto/image/service_en_boutique_0.jpg"
data-twic-transform="max=500"
alt=""
<button tabindex="-1">
Nos services en boutique </button>
</a>
</div>
</div>
</div>
</div>
<div class="bg-pink-100 py-5 px-8" :inert="mobilePanelActiveId !== null || openBrandElement">
<a href="https://www.adopt.com/fr/checkout/cart"
class="py-4 flex items-center gap-6 text-xs-tiny tracking-spaced-lg font-medium uppercase transition duration-300 hover:text-pink">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="bag" version="1.1" x="0px" y="0px" viewbox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve" class="w-4.5 h-auto" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M16.8,5.3c-0.5-2.8-2.7-4.8-5.3-4.8 c-2.6,0-4.8,2-5.3,4.8"/>
<path fill="none" stroke="currentColor" d="M10.1,5.3h3.8c5.3,0,9.6,4.3,9.6,9.6v8.6h-23v-8.6C0.5,9.6,4.8,5.3,10.1,5.3z"/>
<title/></svg>
<span>Mon panier</span>
</a>
<a href="https://www.adopt.com/fr/customer/account"
class="py-4 flex items-center gap-6 text-xs-tiny tracking-spaced-lg font-medium uppercase transition duration-300 hover:text-pink">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="compte" version="1.1" x="0px" y="0px" viewbox="0 0 22.8 23.9" enable-background="new 0 0 22.8 23.9" xml:space="preserve" class="w-4.5 h-auto" width="24" height="25" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M11.4,11.9c3.2,0,5.7-2.6,5.7-5.7 s-2.6-5.7-5.7-5.7C8.3,0.4,5.7,3,5.7,6.2S8.3,11.9,11.4,11.9z"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M22.3,23.4c-1.5-4.7-5.9-7.9-10.9-7.9 S2,18.7,0.5,23.4H22.3z"/>
<title/></svg>
<span>Mon compte</span>
</a>
<a href="https://www.adopt.com/fr/wishlist"
class="py-4 flex items-center gap-6 text-xs-tiny tracking-spaced-lg font-medium uppercase transition duration-300 hover:text-pink">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite" version="1.1" x="0px" y="0px" viewbox="0 0 26.3 22.8" enable-background="new 0 0 26.3 22.8" xml:space="preserve" class="w-4.5 h-auto" width="26" height="23" role="img">
<path fill="none" stroke="currentColor" stroke-width="0.948" d="M13.2,22.3c-24.4-13.5-7.3-28.2,0-18.9C20.5-5.9,37.6,8.8,13.2,22.3z"/>
<title/></svg>
<span>Mes favoris</span>
</a>
<a href="https://www.adopt.com/fr/store-locator"
class="py-4 flex items-center gap-6 text-xs-tiny tracking-spaced-lg font-medium uppercase transition duration-300 hover:text-pink">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="pin-shop" version="1.1" x="0px" y="0px" viewbox="0 0 21.3 23.9" enable-background="new 0 0 21.3 23.9" xml:space="preserve" class="w-4.5 h-auto" width="23" height="26" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.7,0.5c2.2,0,4.3,0.6,6.2,1.8 c4.8,3,5.2,9.2,1.3,13.7c-2.3,2.7-4.8,5.2-7.5,7.4c-2.7-2.2-5.3-4.7-7.5-7.4C-0.7,11.4-0.4,5.3,4.4,2.3C6.3,1.1,8.5,0.5,10.7,0.5z M10.7,5.2c-2.4,0-4.4,1.9-4.4,4.3c0,2.4,1.9,4.3,4.4,4.3c2.4,0,4.4-1.9,4.4-4.3C15,7.1,13.1,5.2,10.7,5.2z"/>
<title/></svg>
<span>Nos boutiques</span>
</a>
<div x-data="initStoreSwitcherForm_69af8f9649aa7()"
@private-content-loaded.window.debounce="onPrivateContentLoaded($event.detail.data)">
<div :class="!isFromMobileMenu ? 'relative inline-block text-left' : ''">
<template x-if="displayCountryName && displayLanguageCode && displaySvg">
<div>
<button
@click.prevent="storeMenuMobile();"
@keydown.window.escape="storeMenuMobile('close');"
type="button"
:class="isFromMobileMenu ? 'py-4 text-xs-tiny gap-6' : 'justify-center w-full focus:outline-none border-none p-0 flex-row-reverse gap-2'"
class="flex items-center"
aria-haspopup="true"
aria-expanded="true"
x-html='isFromMobileMenu ? displaySvg + "<span>" + displayCountryName.toUpperCase() + " (" + displayLanguageCode.toUpperCase() + ")</span>" : "<span class=\"link link-simple \">" + displayCountryName.toUpperCase() + " (" + displayLanguageCode.toUpperCase() + ")</span> " + displaySvg'
>
</button>
</div>
</template>
</div>
</div>
<script>
function initStoreSwitcherForm_69af8f9649aa7() {
return {
currentCountrySvg: null,
currentStoreCountryCode: 'FR',
currentStoreCountryName: '',
currentStoreLanguageCode: 'fr',
currentStoreCode: 'fr',
currentStoreSvg: null,
displayCountryCode: null,
displayCountryName: '',
displayLanguageCode: null,
displaySvg: null,
destinationUrl: null,
directoryData: null,
geoIpCountryCode: hyva.getCookie('select-store-user-country-code'),
isFromMobileMenu: 1,
selectedStore: null,
svgBaseUrl: 'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/svg/flag',
svgTemplate: '<img loading="lazy" src="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/svg/flag/%1.svg" alt="%2" height="20" width="20">',
translatedWordings: {"modalTitle":{"fr":"Bienvenue sur Adopt.com","en":"Welcome on Adopt.com","es":"Bienvenido a Adopt.com","it":"Benvenuto su Adopt.com","nl":"Welkom op Adopt.com"},"selectTitle":{"fr":"Pays de livraison","en":"Shipping country","es":"Pa\u00eds de entrega","nl":"Land van levering","it":"Paese di consegna"},"modalDescription":{"fr":"Veuillez choisir votre <b>pays de livraison<\/b>","en":"Please choose your <b>delivery country<\/b>","es":"Elija su pa\u00eds de <b>entrega<\/b>","it":"Scegli il <b>paese di consegna<\/b>","nl":"Kies het <b>land van levering<\/b>"},"modalButton":{"fr":"Appliquer","en":"Apply","es":"Solicitar","it":"Applicare","nl":"Toepassen"}},
userLanguageCode: window.navigator.language.indexOf("-") > 0 ? window.navigator.language.substring(0, window.navigator.language.indexOf("-")) : window.navigator.language,
websites: [{"country_code":"FR","country_label":{"fr":"France","es":"Francia","en":"France","nl":"Frankrijk"},"locale_code":"default","locale_label":"fr","store_code":"fr","destinationUrl":"https:\/\/www.adopt.com\/fr\/"},{"country_code":"BE","country_label":{"fr":"Belgique","es":"B\u00e9lgica","en":"Belgium","nl":"Belgi\u00eb"},"locale_code":"FR","locale_label":"fr","store_code":"be-fr","destinationUrl":"https:\/\/www.adopt.com\/be-fr\/"},{"country_code":"BE","country_label":{"fr":"Belgique","es":"B\u00e9lgica","en":"Belgium","nl":"Belgi\u00eb"},"locale_code":"NL","locale_label":"nl","store_code":"be-nl","destinationUrl":"https:\/\/www.adopt.com\/be-nl\/"},{"country_code":"BE","country_label":{"fr":"Belgique","es":"B\u00e9lgica","en":"Belgium","nl":"Belgi\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"CA","country_label":{"fr":"Canada","es":"Canad\u00e1","en":"Canada","nl":"Canada"},"locale_code":"default","locale_label":"fr","store_code":"ca-fr","destinationUrl":"https:\/\/www.adopt.com\/ca-fr\/"},{"country_code":"DE","country_label":{"fr":"Allemagne","es":"Alemania","en":"Germany","nl":"Duitsland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"AT","country_label":{"fr":"Autriche","es":"Austria","en":"Austria","nl":"Oostenrijk"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"HR","country_label":{"fr":"Croatie","es":"Croacia","en":"Croatia","nl":"Kroati\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"DK","country_label":{"fr":"Danemark","es":"Dinamarca","en":"Denmark","nl":"Denemarken"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"ES","country_label":{"fr":"Espagne","es":"Espa\u00f1a","en":"Spain","nl":"Spanje"},"locale_code":"default","locale_label":"es","store_code":"es","destinationUrl":"https:\/\/www.adopt.com\/es\/"},{"country_code":"EE","country_label":{"fr":"Estonie","es":"Estonia","en":"Estonia","nl":"Estland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"FI","country_label":{"fr":"Finlande","es":"Finlandia","en":"Finland","nl":"Finland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"GR","country_label":{"fr":"Gr\u00e8ce","es":"Grecia","en":"Greece","nl":"Griekenland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"HU","country_label":{"fr":"Hongrie","es":"Hungr\u00eda","en":"Hungary","nl":"Hongarije"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"IE","country_label":{"fr":"Irlande","es":"Irlanda","en":"Ireland","nl":"Ierland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"IT","country_label":{"fr":"Italie","es":"Italia","en":"Italy","nl":"Itali\u00eb"},"locale_code":"default","locale_label":"it","store_code":"it","destinationUrl":"https:\/\/www.adopt.com\/it\/"},{"country_code":"LV","country_label":{"fr":"Lettonie","es":"Letonia","en":"Latvia","nl":"Letland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"LT","country_label":{"fr":"Lituanie","es":"Lituania","en":"Lithuania","nl":"Litouwen"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"LU","country_label":{"fr":"Luxembourg","es":"Luxemburgo","en":"Luxembourg","nl":"Luxemburg"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"NL","country_label":{"fr":"Pays-Bas","es":"Pa\u00edses Bajos","en":"Netherlands","nl":"Nederland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"PL","country_label":{"fr":"Pologne","es":"Polonia","en":"Poland","nl":"Polen"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"PT","country_label":{"fr":"Portugal","es":"Portugal","en":"Portugal","nl":"Portugal"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"RO","country_label":{"fr":"Roumanie","es":"Ruman\u00eda","en":"Romania","nl":"Roemeni\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"SK","country_label":{"fr":"Slovaquie","es":"Eslovaquia","en":"Slovakia","nl":"Slowakije"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"SI","country_label":{"fr":"Slov\u00e9nie","es":"Eslovenia","en":"Slovenia","nl":"Sloveni\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"SE","country_label":{"fr":"Su\u00e8de","es":"Suecia","en":"Sweden","nl":"Zweden"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"CZ","country_label":{"fr":"Tch\u00e9quie","es":"Chequia","en":"Czechia","nl":"Tsjechi\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"}],
initComponent() {
this.$watch('geoIpCountryCode', (value) => {
this.openModaleIfNeeded(value);
});
this.initDefaultValues();
if (!this.hasUserChoice() && !this.geoIpCountryCode) {
this.getCountryFromHeader();
}
this.openModaleIfNeeded(this.geoIpCountryCode);
},
onPrivateContentLoaded(data) {
if (data['directory-data']) {
this.directoryData = data['directory-data'];
this.initComponent()
}
},
openModaleIfNeeded(geoIpCountryCode) {
if (!geoIpCountryCode) {
return;
}
if (!this.hasUserChoice() && (geoIpCountryCode != this.currentStoreCountryCode)) {
this.selectStoreBasedOnUser(geoIpCountryCode);
if (this.selectedStore) {
this.storeMenuMobile();
}
}
},
selectStoreBasedOnUser(geoIpCountryCode) {
let defaultStoreForCountry = null;
this.websites.forEach(element => {
if (element.country_code.toLowerCase() == geoIpCountryCode.toLowerCase()) {
if (element.locale_code.toLowerCase() == 'default') {
defaultStoreForCountry = element;
}
if (element.locale_code.toLowerCase() == this.userLanguageCode.toLowerCase()) {
this.selectedStore = element;
}
}
})
if (!this.selectedStore) {
this.selectedStore = defaultStoreForCountry;
}
if (this.selectedStore) {
const hrefElement = document.getElementById('alternate-url-' + this.selectedStore.store_code);
this.destinationUrl = hrefElement ? hrefElement.getAttribute('href') : this.selectedStore.destinationUrl;
}
},
selectStore(website) {
this.selectedStore = website;
const hrefElement = document.getElementById('alternate-url-' + this.selectedStore.store_code);
this.destinationUrl = hrefElement ? hrefElement.getAttribute('href') : this.selectedStore.destinationUrl;
},
initDefaultValues() {
const selectedCountry = hyva.getCookie('selected_country');
if (this.directoryData) {
if (this.directoryData[this.currentStoreCountryCode]) {
this.currentStoreCountryName = this.directoryData[this.currentStoreCountryCode].name;
} else {
this.currentStoreCountryName = this.directoryData['FR'].name;
}
this.currentStoreSvg = this.svgTemplate
.replace('%1', this.currentStoreCountryCode.toLowerCase())
.replace('%2', this.currentStoreCountryName + ' flag');
}
this.displayCountryCode = this.currentStoreCountryCode;
this.displayLanguageCode = this.currentStoreLanguageCode;
if (selectedCountry) {
const storeLangKey = (this.currentStoreLanguageCode || '').toUpperCase();
const upperSelected = selectedCountry.toUpperCase();
const candidates = (this.websites || [])
.filter(w => (w.country_code || '').toUpperCase() === upperSelected);
let chosen = candidates.find(w => (w.locale_code || '').toUpperCase() === storeLangKey);
if (!chosen) {
const defaultEntry = candidates.find(w => (w.locale_code || '').toLowerCase() === 'default');
if (defaultEntry && (defaultEntry.store_code || '') === this.currentStoreCode) {
chosen = defaultEntry;
}
}
if (chosen) {
this.displayCountryCode = upperSelected;
this.displayLanguageCode = this.currentStoreLanguageCode;
}
}
if (this.directoryData) {
const fallbackCode = 'FR';
const codeForName = this.directoryData[this.displayCountryCode]
? this.displayCountryCode
: fallbackCode;
this.displayCountryName = this.directoryData[codeForName].name;
this.displaySvg = this.svgTemplate
.replace('%1', this.displayCountryCode.toLowerCase())
.replace('%2', this.displayCountryName + ' flag');
}
},
remindUserChoice() {
hyva.setCookie('select-store-user-choice', true, 365, true);
},
hasUserChoice() {
return hyva.getCookie('select-store-user-choice') !== null;
},
getCountryFromHeader() {
const client = new XMLHttpRequest();
client.open("HEAD", window.location, true);
client.send(null);
client.onreadystatechange = () => {
if (client.readyState === client.HEADERS_RECEIVED) {
const disCountry = client.getResponseHeader("X-Client-Country");
if (disCountry) {
hyva.setCookie('select-store-user-country-code', disCountry, 7, true);
this.geoIpCountryCode = disCountry;
}
client.abort();
}
};
},
submitForm() {
const $form = document.querySelector('#store-switcher-form');
window.dataLayer?.push({
'event': 'selectionPaysLivraison',
'pays': this.selectedStore.country_label['en'],
'langue': this.selectedStore.store_code.toUpperCase(),
});
this.remindUserChoice();
$form.submit();
},
storeMenuMobile($close) {
const storeSelectorModale = document.querySelector('.stores-choice');
if (storeSelectorModale) {
if ($close) {
this.remindUserChoice();
storeSelectorModale.style.display = 'none';
} else {
storeSelectorModale.style.display = 'flex';
}
}
}
}
}
</script>
</div>
</nav>
</div>
</div>
<script>
'use strict';
function initMobileCmsPageMenuItem_69af8f961ee42(isChildOpen = 0) {
return {
openSubElement: isChildOpen == 1 ? true : false,
clickMenuEntryEvent(url, level, label, blank = false) {
window.dataLayer?.push({
'event': 'clicMenuniveau' + level,
'text': label
});
if (blank) {
window.open(url, '_blank');
} else {
window.location.href = url;
}
}
}
}
function initMenuMobile_69af8f961ee42() {
return {
mobilePanelActiveId: null,
hoverPanelActiveId: null,
open: false,
topOpened: document.querySelector('.block-promotional') ? document.querySelector('.block-promotional').offsetHeight : 0,
isSubnavOpen: false,
nameActiveMenu: null,
isNavLight: 0,
openBrandElement: false,
activeSubMenuId: null,
clickMenuEntryEvent(url, level, label, blank = false) {
window.dataLayer?.push({
'event': 'clicMenuniveau' + level,
'text': label
});
if (blank) {
window.open(url, '_blank');
} else {
window.location.href = url;
}
},
setActiveMenu(menuNode) {
Array.from(menuNode.querySelectorAll('a')).filter(link => {
return link.href === window.location.href.split('?')[0];
}).map(item => {
item.classList.add('text-pink');
item.closest('div.level-0') &&
item.closest('div.level-0').querySelector('a.level-0').classList.add('text-pink');
});
},
toggleMobileMenu() {
this.open = !this.open;
if (this.open) {
hyva.trapFocus(this.$refs.mobileMenuRoot);
window.lockBodyScroll && window.lockBodyScroll();
let headerHeight = document.querySelector('#header').offsetHeight - document.querySelector('#search-container').offsetHeight - 10;
document.querySelector('.nav-mobile').style.height = `calc(100dvh - ${headerHeight}px)`;
if (document.querySelector('.block-promotional')) {
document.querySelector('.block-promotional').style.display = 'none';
}
document.body.classList.add('is-menu-open');
} else {
this.closeMenuMobile();
}
document.querySelector('.nav-wrapper').style.overflowY = 'auto';
},
closeMenuMobile() {
this.open = false;
hyva.releaseFocus(this.$refs.mobileMenuRoot);
window.unlockBodyScroll && window.unlockBodyScroll();
document.querySelector('.nav-mobile').style.height = 'unset';
if (document.querySelector('.block-promotional')) {
document.querySelector('.block-promotional').style.display = 'flex';
}
this.mobilePanelActiveId = null;
this.activeSubMenuId = null;
this.openBrandElement = false;
document.body.classList.remove('is-menu-open');
document.querySelector('.nav-wrapper').style.overflowY = 'auto';
},
activeSubNav() {
this.isSubnavOpen = !this.isSubnavOpen;
document.querySelector('.nav-wrapper').style.overflowY = 'hidden';
if (this.isSubnavOpen) {
document.querySelector('.nav-wrapper').scrollTop = 0
document.querySelector('.nav-wrapper').style.height = 'auto';
document.querySelector('.nav-wrapper').style.overflowY = 'hidden';
}
}
}
}
</script><div x-data="initMenuDesktop_69af8f964a0e9()"
@close-submenu-and-focus-parent="closeSubmenuAndFocusParent($event.detail.idCat)"
class="z-20 order-2 menu-bp:flex-1 sm:order-1 menu-bp:order-2 navigation hidden menu-bp:flex overflow-auto hide-scrollbar">
<!-- desktop -->
<div x-ref="navDesktop" @load.window="setActiveMenu($el)"
class="hidden lg:block lg:min-h-0 px-7 lg:pt-0 overflow-auto hide-scrollbar mx-auto relative w-full">
<button
class="left-0 top-1/2 -translate-y-1/2 absolute hover:bg-anthracite-200 border border-lavender-lightest bg-white rounded-full p-1 text-pink transition duration-300"
type="button" title="Précédent" aria-label="Précédent" x-cloak x-show="showPrevious" @click="prevMenu()">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="w-3.5 h-auto filter drop-shadow-pink-lighter-icon -scale-x-100" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</button>
<nav x-ref="slider" @resize.window.debounce.100="resizeMenu()" x-cloak
role="navigation" aria-label="Main navigation"
class="main-menu-container duration-150 ease-in-out transform flex min-h-0 transition-display leading-none relative overflow-x-auto overflow-y-hidden hide-scrollbar scroll-smooth gap-6 justify-between">
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1547', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny category-node"
id="category-node-1547"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/offres-commerciales.html', '1', ' Offres')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1547', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1547', $refs)"
href="https://www.adopt.com/fr/offres-commerciales.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1547'"
aria-haspopup="true"
aria-controls="subnav-category-node-1547">
Offres </a>
</span>
</div>
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1472', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny category-node"
id="category-node-1472"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum.html', '1', ' Parfum')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1472', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1472', $refs)"
href="https://www.adopt.com/fr/parfum.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1472'"
aria-haspopup="true"
aria-controls="subnav-category-node-1472">
Parfum </a>
</span>
</div>
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1869', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny category-node"
id="category-node-1869"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/brume-parfumee.html', '1', ' Brume')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1869', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1869', $refs)"
href="https://www.adopt.com/fr/brume-parfumee.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1869'"
aria-haspopup="true"
aria-controls="subnav-category-node-1869">
Brume </a>
</span>
</div>
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1369', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny category-node"
id="category-node-1369"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps.html', '1', ' Corps')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1369', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1369', $refs)"
href="https://www.adopt.com/fr/soin-corps.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1369'"
aria-haspopup="true"
aria-controls="subnav-category-node-1369">
Corps </a>
</span>
</div>
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1343', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny category-node"
id="category-node-1343"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage.html', '1', ' Visage')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1343', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1343', $refs)"
href="https://www.adopt.com/fr/soin-visage.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1343'"
aria-haspopup="true"
aria-controls="subnav-category-node-1343">
Visage </a>
</span>
</div>
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1667', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny font-bold tracking-[1.77px] category-node"
id="category-node-1667"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maison.html', '1', ' Maison')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1667', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1667', $refs)"
style="color:#46405a;" href="https://www.adopt.com/fr/maison.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1667'"
aria-haspopup="true"
aria-controls="subnav-category-node-1667">
Maison </a>
</span>
</div>
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1443', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny category-node"
id="category-node-1443"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage.html', '1', ' Maquillage')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1443', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1443', $refs)"
href="https://www.adopt.com/fr/maquillage.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1443'"
aria-haspopup="true"
aria-controls="subnav-category-node-1443">
Maquillage </a>
</span>
</div>
<div class="menu-item level-0 text-tiny text-center shrink-0"
@mouseenter="openSubNav('category-node-1428', $refs)" @mouseleave="openSubNav(0, $refs)">
<span class="flex h-full items-center text-md bg-opacity-95 relative">
<a class="main-nav-link font-semibold tracking-spaced-lg leading-none w-full py-3 px-2 lg:px-2.5 uppercase transition duration-300 level-0 text-tiny category-node"
id="category-node-1428"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux.html', '1', ' Cadeau')"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('category-node-1428', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('category-node-1428', $refs)"
href="https://www.adopt.com/fr/cadeaux.html"
:aria-expanded="hoverPanelActiveId === 'category-node-1428'"
aria-haspopup="true"
aria-controls="subnav-category-node-1428">
Cadeau </a>
</span>
</div>
<div class="flex items-center justify-start menu-item">
<div class="text-center my-auto">
<span class="w-1 h-1 bg-anthracite rounded-full relative -top-0.5 inline-block mx-3"></span>
</div>
<div class="level-0 text-tiny text-center shrink-0"
@mouseenter="hoverPanelActiveId = 'cms-node-69af8f964a78e'"
@mouseleave="hoverPanelActiveId = 0">
<span class="flex h-full items-center block text-md bg-opacity-95 relative">
<button type="button"
id="cms-node-69af8f964a78e"
class="flex main-nav-link main-nav-link--cms cursor-pointer leading-none w-full py-3 px-2 lg:px-2.5 transition duration-300 level-0 text-smaller tracking-spaced-lg font-secondary font-bold"
tabindex="0"
:aria-expanded="hoverPanelActiveId === 'cms-node-69af8f964a78e'"
aria-haspopup="true"
aria-controls="subnav-cms-node-69af8f964a78e"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('cms-node-69af8f964a78e', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('cms-node-69af8f964a78e', $refs)">
Nos valeurs </button>
</span>
</div>
<div class="level-0 text-tiny text-center">
<span class="flex items-center text-md bg-opacity-95 relative">
<a class="main-nav-link leading-none w-full py-3 px-2 lg:px-2.5 transition duration-300 level-0 text-smaller tracking-spaced-lg font-secondary font-bold"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/diagnostic-olfactif/', '1', 'Diagnostic\u0020parfum')"
href="https://www.adopt.com/fr/diagnostic-olfactif/">
Diagnostic parfum </a>
</span>
</div>
</div>
</nav>
<button
class="right-1 top-1/2 -translate-y-1/2 absolute hover:bg-anthracite-200 border border-lavender-lightest bg-white rounded-full p-1 text-pink transition duration-300"
type="button" title="Suivant" aria-label="Suivant" x-cloak x-show="showNext" @click="nextMenu()">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="w-3.5 h-auto filter drop-shadow-pink-lighter-icon" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</button>
</div>
<div id="subnav-wrapper" class="subnav-wrapper absolute z-50 left-0 right-0 px-5">
<div @mouseenter="openSubNav( 'category-node-1472', $refs )" @mouseleave="openSubNav(0, $refs)"
id="subnav-category-node-1472"
class="subnav-content hidden overflow-y-auto w-fit m-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'category-node-1472', 'block' : hoverPanelActiveId === 'category-node-1472' }">
<div class="shadow-lg bg-white">
<div class="flex">
<div class="pt-12 px-12 flex-1 max-w-[75%] pb-5">
<div class="flex items-start gap-28">
<div class="w-fit">
<span class="uppercase text-pink text-xxs tracking-widest font-semibold mb-6 block">
Sélections </span>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/parfum/exclusivite-web.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/exclusivite-web.html', '3', 'Exclu web')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Exclu web </span>
</a>
<a href="https://www.adopt.com/fr/parfum/nouveautes-parfum.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/nouveautes-parfum.html', '3', 'Nouveautés')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/parfum/meilleures-ventes-parfum.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/meilleures-ventes-parfum.html', '3', 'Meilleures ventes')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Meilleures ventes </span>
</a>
<a href="https://www.adopt.com/fr/parfum/format-decouverte.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/format-decouverte.html', '3', 'Parfum miniature')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Parfum miniature </span>
</a>
<a href="https://www.adopt.com/fr/parfum/magic-touch.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/magic-touch.html', '3', 'Magic Touch')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Magic Touch </span>
</a>
<a href="https://www.adopt.com/fr/diagnostic-olfactif"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/diagnostic-olfactif/', '3', 'Faire\u0020mon\u0020diagnostic')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="text-xxs font-medium uppercase gradient-text-purple tracking-[2.57px]"
data-parent-id="category-node-1472">
Faire mon diagnostic </a>
</div>
</div>
<div
class="gap-10 w-fit columns-4">
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/parfum/parfum-femme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme.html', '2','Parfum femme')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
data-parent-id="category-node-1472"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Parfum femme </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html', '3', 'Eau de parfum')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Eau de parfum </span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme/coffret-parfum-femme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/coffret-parfum-femme.html', '3', 'Coffret parfum')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Coffret parfum </span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme/collection-voyage.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/collection-voyage.html', '3', 'Les Voyages')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les Voyages </span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme/parfum-intense.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme/parfum-intense.html', '3', 'Les Intenses')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les Intenses </span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-femme.html"
title="Parfum femme"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-femme.html', '3', 'Parfum femme')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/parfum/parfum-homme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-homme.html', '2','Parfum homme')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
data-parent-id="category-node-1472"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Parfum homme </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/parfum/parfum-homme/eau-de-parfum-homme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-homme/eau-de-parfum-homme.html', '3', 'Eau de parfum')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Eau de parfum </span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-homme/coffret-parfum-homme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-homme/coffret-parfum-homme.html', '3', 'Coffret parfum')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Coffret parfum </span>
</a>
<a href="https://www.adopt.com/fr/parfum/parfum-homme.html"
title="Parfum homme"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-homme.html', '3', 'Parfum homme')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/parfum/parfum-mixte.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-mixte.html', '2','Parfum mixte')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
data-parent-id="category-node-1472"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Parfum mixte </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/parfum/parfum-mixte.html"
title="Parfum mixte"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/parfum-mixte.html', '3', 'Parfum mixte')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum.html', '2','Univers olfactif')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
data-parent-id="category-node-1472"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Univers olfactif </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/coton-et-douceur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/coton-et-douceur.html', '3', 'Les délicats')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les délicats </span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/boise-et-caractere.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/boise-et-caractere.html', '3', 'Les caractères')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les caractères </span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/fraicheur-et-agrume.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/fraicheur-et-agrume.html', '3', 'Les frais')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les frais </span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/fleurs-et-romantisme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/fleurs-et-romantisme.html', '3', 'Les floraux')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les floraux </span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/fruits-et-plaisir.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/fruits-et-plaisir.html', '3', 'Les fruités')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les fruités </span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/gourmandise-et-seduction.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/gourmandise-et-seduction.html', '3', 'Les gourmands')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les gourmands </span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum/soleil-et-sensualite.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum/soleil-et-sensualite.html', '3', 'Les solaires')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1472">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Les solaires </span>
</a>
<a href="https://www.adopt.com/fr/parfum/envie-de-parfum.html"
title="Univers olfactif"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/envie-de-parfum.html', '3', 'Univers olfactif')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/parfum/accessoire-parfum.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/accessoire-parfum.html', '2','Accessoire Parfum')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
data-parent-id="category-node-1472"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Accessoire Parfum </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/parfum/accessoire-parfum.html"
title="Accessoire Parfum"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/parfum/accessoire-parfum.html', '3', 'Accessoire Parfum')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1472' })"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1472">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
</div>
</div>
<div>
<div class="flex justify-between">
<div class="text-pink uppercase text-xxs font-semibold tracking-spaced-lg mb-5">
<a
href="https://www.adopt.com/fr/parfum/famille-olfactive.html">#notesolfactives</a>
</div>
<div class="olfactive-notes__navigation text-pink flex hidden" x-ref="olfactiveNav">
<button type="button" @click="prevOlfactive($refs)"
class="olfactive-notes__navigation__item prev p-2.5 inline-block hover:text-lavender transition duration-300 -scale-x-100"
:class="{'opacity-30' : sliderPosition === 'start'}"
aria-label="Previous olfactory notes"
:aria-disabled="sliderPosition === 'start'">
<svg width="8" height="14" version="1.1" viewbox="0 0 8 14"
xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<g transform="translate(.5385 .5385)" fill="none" fill-rule="evenodd"
stroke-linecap="round">
<path d="m6.4615 6.4615-6 6m6-6-6-6" stroke="currentColor"
stroke-width="2"></path>
</g>
</svg>
</button>
<button type="button" @click="nextOlfactive($refs)"
class="olfactive-notes__navigation__item next px-2.5 py-2 inline-block hover:text-lavender transition duration-300"
:class="{'opacity-30' : sliderPosition === 'end'}"
aria-label="Next olfactory notes"
:aria-disabled="sliderPosition === 'end'">
<svg width="8" height="14" version="1.1" viewbox="0 0 8 14"
xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<g transform="translate(.5385 .5385)" fill="none" fill-rule="evenodd"
stroke-linecap="round">
<path d="m6.4615 6.4615-6 6m6-6-6-6" stroke="currentColor"
stroke-width="2"></path>
</g>
</svg>
</button>
</div>
</div>
<div class="olfactive-notes w-full pb-1.25 overflow-hidden"
@resize.window.debounce.100="isMobile = window.outerWidth < 768; loadSliderOlfactive($refs)"
x-ref="olfactiveWrapper">
<div class="olfactive-notes__content flex gap-2.5 w-fit relative"
x-ref="olfactiveContent">
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-vanille-famille-olfactive.html">
#Vanille </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-fleurs-d-oranger-famille-olfactive.html">
#Fleurs d'oranger </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-rose-famille-olfactive.html">
#Rose </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-patchouly-famille-olfactive.html">
#Patchouli </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-monoi-famille-olfactive.html">
#Monoï </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-muscfamille-olfactive.html">
#Musc </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-ambre-famille-olfactive.html">
#Ambre </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-oud-famille-olfactive.html">
#Oud </a>
<a class="btn btn-primary-pill btn-size-pill first:ml-5 md:first:ml-0 last:mr-5 md:last:mr-0 whitespace-nowrap"
href="https://www.adopt.com/fr/parfum/famille-olfactive/parfum-coco-note-olfactive.html">
#Coco </a>
</div>
</div>
</div>
</div>
<div class="max-w-[25%]">
<a href="https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html"
@click.prevent="clickMenuBannerEvent('https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html', 'Parfum')">
<img :class="{ 'h-full': !isSafariBeforeTahoe }" loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_2_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_2_1.png"
data-twic-transform="max=450" alt="Parfum"
title="Parfum" />
</a>
</div>
</div>
</div>
</div>
<div @mouseenter="openSubNav( 'category-node-1369', $refs )" @mouseleave="openSubNav(0, $refs)"
id="subnav-category-node-1369"
class="subnav-content hidden overflow-y-auto w-fit m-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'category-node-1369', 'block' : hoverPanelActiveId === 'category-node-1369' }">
<div class="shadow-lg bg-white">
<div class="flex">
<div class="pt-12 px-12 flex-1 max-w-[75%] pb-5">
<div class="flex items-start gap-28">
<div class="w-fit">
<span class="uppercase text-pink text-xxs tracking-widest font-semibold mb-6 block">
Sélections </span>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-corps/nouveautes-soin-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/nouveautes-soin-corps.html', '3', 'Nouveautés')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/meilleures-ventes-soin-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/meilleures-ventes-soin-corps.html', '3', 'Meilleures ventes')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Meilleures ventes </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soins-d-exception-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soins-d-exception-corps.html', '3', 'Karité & Argan')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Karité & Argan </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soins-corps-homme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soins-corps-homme.html', '3', 'Homme')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Homme </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/beaute-d-orient.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/beaute-d-orient.html', '3', 'Beauté d\'Orient')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Beauté d'Orient </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/gamme-bain.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/gamme-bain.html', '3', 'Gamme bain')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Gamme bain </span>
</a>
</div>
</div>
<div
class="gap-10 w-fit columns-4">
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit.html', '2','Par produit')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
data-parent-id="category-node-1369"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Par produit </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gel-douche-parfume.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gel-douche-parfume.html', '3', 'Gel douche parfumé')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Gel douche parfumé </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/creme-et-lait-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/creme-et-lait-corps.html', '3', 'Crème & lait corps')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Crème & lait corps </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/soin-des-mains.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/soin-des-mains.html', '3', 'Crème mains')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Crème mains </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gommage-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gommage-corps.html', '3', 'Gommage corps')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Gommage corps </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/huile-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/huile-corps.html', '3', 'Huile corps')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Huile corps </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gelee-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gelee-corps.html', '3', 'Gelée corps')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Gelée corps </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/bombe-de-bain.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/bombe-de-bain.html', '3', 'Bombe de bain')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Bombe de bain </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/accessoires-corps.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/accessoires-corps.html', '3', 'Accessoire corps')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Accessoire corps </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit.html"
title="Par produit"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-produit.html', '3', 'Par produit')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action.html', '2','Par action')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
data-parent-id="category-node-1369"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Par action </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-hydratant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-hydratant.html', '3', 'Hydratant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Hydratant </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nourrissant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nourrissant.html', '3', 'Nourrissant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nourrissant </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-eclat.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-eclat.html', '3', 'Éclat')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Éclat </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-exfoliant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-exfoliant.html', '3', 'Exfoliant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Exfoliant </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nettoyant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action/soin-corps-nettoyant.html', '3', 'Nettoyant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nettoyant </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/soin-corps-par-action.html"
title="Par action"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/soin-corps-par-action.html', '3', 'Par action')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume.html', '2','Rituel soin parfumé')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
data-parent-id="category-node-1369"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Rituel soin parfumé </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/joalia.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/joalia.html', '3', 'Joalia')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Joalia </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/onyx.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/onyx.html', '3', 'Onyx')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Onyx </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rouge-envoutant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rouge-envoutant.html', '3', 'Rouge Envoûtant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Rouge Envoûtant </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/golden-queen.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/golden-queen.html', '3', 'Golden Queen')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Golden Queen </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/wonderful.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/wonderful.html', '3', 'Wonderful')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Wonderful </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/coeur-a-coeur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/coeur-a-coeur.html', '3', 'Cœur à cœur')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Cœur à cœur </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rose-noire.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/rose-noire.html', '3', 'Rose noire')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Rose noire </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/sublimissime.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/sublimissime.html', '3', 'Sublimissime')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Sublimissime </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/maestro.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/maestro.html', '3', 'Maestro')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Maestro </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/monoi-des-iles.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume/monoi-des-iles.html', '3', 'Monoï des îles')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1369' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1369">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Monoï des îles </span>
</a>
<a href="https://www.adopt.com/fr/soin-corps/rituel-soin-parfume.html"
title="Rituel soin parfumé"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-corps/rituel-soin-parfume.html', '3', 'Rituel soin parfumé')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1369">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="max-w-[25%]">
<a href="https://www.adopt.com/fr/soin-corps.html"
@click.prevent="clickMenuBannerEvent('https://www.adopt.com/fr/soin-corps.html', 'Corps')">
<img :class="{ 'h-full': !isSafariBeforeTahoe }" loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_2_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_SKINCARE_Overlay_Rituel_Wonderful_01_FR_2_1.png"
data-twic-transform="max=450" alt="Corps"
title="Corps" />
</a>
</div>
</div>
</div>
</div>
<div @mouseenter="openSubNav( 'category-node-1343', $refs )" @mouseleave="openSubNav(0, $refs)"
id="subnav-category-node-1343"
class="subnav-content hidden overflow-y-auto w-fit m-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'category-node-1343', 'block' : hoverPanelActiveId === 'category-node-1343' }">
<div class="shadow-lg bg-white">
<div class="flex">
<div class="pt-12 px-12 flex-1 max-w-[75%] pb-5">
<div class="flex items-start gap-28">
<div class="w-fit">
<span class="uppercase text-pink text-xxs tracking-widest font-semibold mb-6 block">
Sélections </span>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-visage/nouveautes-soin-visage.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/nouveautes-soin-visage.html', '3', 'Nouveautés')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/meilleures-ventes-soin-visage.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/meilleures-ventes-soin-visage.html', '3', 'Meilleures ventes')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Meilleures ventes </span>
</a>
</div>
</div>
<div
class="gap-10 w-fit columns-4">
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit.html', '2','Par produit')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
data-parent-id="category-node-1343"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Par produit </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/demaquillants.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/demaquillants.html', '3', 'Démaquillants')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Démaquillants </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/nettoyants.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/nettoyants.html', '3', 'Nettoyants')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nettoyants </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/masques-exfoliants.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/masques-exfoliants.html', '3', 'Masques & Exfoliants')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Masques & Exfoliants </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/serums.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/serums.html', '3', 'Sérums')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Sérums </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/soin-contour-des-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/soin-contour-des-yeux.html', '3', 'Soin contour des yeux')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Soin contour des yeux </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/creme-jour-et-nuit.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit/creme-jour-et-nuit.html', '3', 'Crème jour et nuit')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Crème jour et nuit </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-produit.html"
title="Par produit"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-produit.html', '3', 'Par produit')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1343">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action.html', '2','Par action')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
data-parent-id="category-node-1343"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Par action </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action/hydratation-eclat.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action/hydratation-eclat.html', '3', 'Hydratation & Eclat')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Hydratation & Eclat </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action/purifiant-matifiant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action/purifiant-matifiant.html', '3', 'Purifiant & Matifiant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Purifiant & Matifiant </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action/lissant-repulpant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action/lissant-repulpant.html', '3', 'Lissant & Repulpant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Lissant & Repulpant </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/soin-visage-par-action.html"
title="Par action"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/soin-visage-par-action.html', '3', 'Par action')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1343">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/soin-visage/par-actif.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif.html', '2','Par Actif')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
data-parent-id="category-node-1343"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Par Actif </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/soin-visage/par-actif/zinc.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/zinc.html', '3', 'Zinc')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Zinc </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/acide-salicylique.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/acide-salicylique.html', '3', 'Acide salicylique')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Acide salicylique </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/argile.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/argile.html', '3', 'Argile')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Argile </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/vitamine-c.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/vitamine-c.html', '3', 'Vitamine C')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Vitamine C </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/acide-hyaluronique.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/acide-hyaluronique.html', '3', 'Acide hyaluronique')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Acide hyaluronique </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/cafeine.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/cafeine.html', '3', 'Caféine')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Caféine </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif/huile-amande-douce.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif/huile-amande-douce.html', '3', 'Huile amande douce')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1343' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1343">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Huile amande douce </span>
</a>
<a href="https://www.adopt.com/fr/soin-visage/par-actif.html"
title="Par Actif"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/soin-visage/par-actif.html', '3', 'Par Actif')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1343">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="max-w-[25%]">
<a href="https://www.adopt.com/fr/soin-visage.html"
@click.prevent="clickMenuBannerEvent('https://www.adopt.com/fr/soin-visage.html', 'Visage')">
<img :class="{ 'h-full': !isSafariBeforeTahoe }" loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_6.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_FRENCH_TOUCH_OVERLAY_KV_FR_6.png"
data-twic-transform="max=450" alt="Visage"
title="Visage" />
</a>
</div>
</div>
</div>
</div>
<div @mouseenter="openSubNav( 'category-node-1667', $refs )" @mouseleave="openSubNav(0, $refs)"
id="subnav-category-node-1667"
class="subnav-content hidden overflow-y-auto w-fit m-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'category-node-1667', 'block' : hoverPanelActiveId === 'category-node-1667' }">
<div class="shadow-lg bg-white">
<div class="flex p-12 gap-12">
<div class="flex gap-7">
<a href="https://www.adopt.com/fr/maison/bougie-parfumee.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maison/bougie-parfumee.html', '2', 'Bougie parfumée')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1667' })"
class="block relative group text-center flex flex-col flex-1"
data-parent-id="category-node-1667">
<img loading="lazy" src="https://adopt.twic.pics/media/catalog/category/LIFE_HOME_CANDLE_JARDINDESROSES_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_HOME_CANDLE_JARDINDESROSES_1.jpg" class="w-full"
data-twic-transform="cover-max=500" width="205" height="296"
alt="">
<span
class="text-anthracite text-center font-bold tracking-spaced text-xxs uppercase mt-5 transition duration-300 group-hover:text-pink">
Bougie parfumée </span>
</a>
<a href="https://www.adopt.com/fr/maison/parfums-d-interieur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maison/parfums-d-interieur.html', '2', 'Parfums d\'intérieur')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1667' })"
class="block relative group text-center flex flex-col flex-1"
data-parent-id="category-node-1667">
<img loading="lazy" src="https://adopt.twic.pics/media/catalog/category/LIFE_HOME_MULTI_DIFFUSER_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/LIFE_HOME_MULTI_DIFFUSER_1.jpg" class="w-full"
data-twic-transform="cover-max=500" width="205" height="296"
alt="">
<span
class="text-anthracite text-center font-bold tracking-spaced text-xxs uppercase mt-5 transition duration-300 group-hover:text-pink">
Parfums d'intérieur </span>
</a>
<a href="https://www.adopt.com/fr/maison/huile-essentielle.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maison/huile-essentielle.html', '2', 'Huile essentielle')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1667' })"
class="block relative group text-center flex flex-col flex-1"
data-parent-id="category-node-1667">
<img loading="lazy" src="https://adopt.twic.pics/media/catalog/category/PLV_BRUME_D_OREILLER_LAVANDE_4.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/PLV_BRUME_D_OREILLER_LAVANDE_4.jpg" class="w-full"
data-twic-transform="cover-max=500" width="205" height="296"
alt="">
<span
class="text-anthracite text-center font-bold tracking-spaced text-xxs uppercase mt-5 transition duration-300 group-hover:text-pink">
Huile essentielle </span>
</a>
</div>
</div>
</div>
</div>
<div @mouseenter="openSubNav( 'category-node-1443', $refs )" @mouseleave="openSubNav(0, $refs)"
id="subnav-category-node-1443"
class="subnav-content hidden overflow-y-auto w-fit m-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'category-node-1443', 'block' : hoverPanelActiveId === 'category-node-1443' }">
<div class="shadow-lg bg-white">
<div class="flex">
<div class="pt-12 px-12 flex-1 max-w-[75%] pb-5">
<div class="flex items-start gap-28">
<div class="w-fit">
<span class="uppercase text-pink text-xxs tracking-widest font-semibold mb-6 block">
Sélections </span>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/maquillage/nouveautes-maquillage.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/nouveautes-maquillage.html', '3', 'Nouveautés')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nouveautés </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/meilleures-ventes-maquillage.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/meilleures-ventes-maquillage.html', '3', 'Meilleures ventes')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Meilleures ventes </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/offre-maquillage.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/offre-maquillage.html', '3', 'Offre maquillage')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Offre maquillage </span>
</a>
</div>
</div>
<div
class="gap-10 w-fit columns-4">
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint.html', '2','Teint')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
data-parent-id="category-node-1443"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Teint </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/fond-de-teint.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/fond-de-teint.html', '3', 'Fond de teint')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Fond de teint </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/anti-cernes-et-correcteur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/anti-cernes-et-correcteur.html', '3', 'Correcteur & anti-cernes')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Correcteur & anti-cernes </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/base-de-teint-et-fixateur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/base-de-teint-et-fixateur.html', '3', 'Base de teint & fixateur')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Base de teint & fixateur </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/blush.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/blush.html', '3', 'Blush & enlumineur')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Blush & enlumineur </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/poudre.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/poudre.html', '3', 'Poudre')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Poudre </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint/accessoires-teint.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint/accessoires-teint.html', '3', 'Accessoire teint')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Accessoire teint </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-teint.html"
title="Teint"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-teint.html', '3', 'Teint')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1443">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux.html', '2','Yeux')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
data-parent-id="category-node-1443"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Yeux </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/mascara.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/mascara.html', '3', 'Mascara')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Mascara </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/eyeliner.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/eyeliner.html', '3', 'Eyeliner')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Eyeliner </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/crayon-pour-les-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/crayon-pour-les-yeux.html', '3', 'Crayon')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Crayon </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/fard-a-paupieres.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/fard-a-paupieres.html', '3', 'Fard à paupières')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Fard à paupières </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/sourcil.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/sourcil.html', '3', 'Sourcils')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Sourcils </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/palette-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/palette-yeux.html', '3', 'Palette')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Palette </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux/accessoires-yeux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux/accessoires-yeux.html', '3', 'Accessoire yeux')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Accessoire yeux </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-yeux.html"
title="Yeux"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-yeux.html', '3', 'Yeux')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1443">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres.html', '2','Lèvres')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
data-parent-id="category-node-1443"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Lèvres </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres/rouge-a-levres.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres/rouge-a-levres.html', '3', 'Rouge à lèvres')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Rouge à lèvres </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres/gloss.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres/gloss.html', '3', 'Gloss')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Gloss </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres/baume-a-levres.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres/baume-a-levres.html', '3', 'Baume à lèvres')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Baume à lèvres </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-levres.html"
title="Lèvres"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-levres.html', '3', 'Lèvres')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1443">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/maquillage/maquillage-ongles.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-ongles.html', '2','Ongles')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
data-parent-id="category-node-1443"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Ongles </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/maquillage/maquillage-ongles/vernis-a-ongles.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-ongles/vernis-a-ongles.html', '3', 'Vernis à ongles')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Vernis à ongles </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-ongles/accessoires-manucure.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-ongles/accessoires-manucure.html', '3', 'Accessoire manucure')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1443' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1443">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Accessoire manucure </span>
</a>
<a href="https://www.adopt.com/fr/maquillage/maquillage-ongles.html"
title="Ongles"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/maquillage/maquillage-ongles.html', '3', 'Ongles')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1443">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="max-w-[25%]">
<a href="https://www.adopt.com/fr/maquillage.html"
@click.prevent="clickMenuBannerEvent('https://www.adopt.com/fr/maquillage.html', 'Maquillage')">
<img :class="{ 'h-full': !isSafariBeforeTahoe }" loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_3.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_MATCHYGLOW_OVERLAY_KV_FR_3.png"
data-twic-transform="max=450" alt="Maquillage"
title="Maquillage" />
</a>
</div>
</div>
</div>
</div>
<div @mouseenter="openSubNav( 'category-node-1428', $refs )" @mouseleave="openSubNav(0, $refs)"
id="subnav-category-node-1428"
class="subnav-content hidden overflow-y-auto w-fit m-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'category-node-1428', 'block' : hoverPanelActiveId === 'category-node-1428' }">
<div class="shadow-lg bg-white">
<div class="flex">
<div class="pt-12 px-12 flex-1 max-w-[75%] pb-5">
<div class="flex items-start gap-28">
<div class="w-fit">
<span class="uppercase text-pink text-xxs tracking-widest font-semibold mb-6 block">
Sélections </span>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-coups-de-coeur.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-coups-de-coeur.html', '3', 'Nos coups de coeur')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Nos coups de coeur </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/exclu-web.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/exclu-web.html', '3', 'Exclu web')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Exclu web </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/emballage-cadeaux.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/emballage-cadeaux.html', '3', 'Emballage cadeau')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Emballage cadeau </span>
</a>
<a href="https://www.adopt.com/fr/guide-cadeaux-adopt"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/guide-cadeaux-adopt', '3', 'Guide\u0020cadeau')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="text-xxs font-medium uppercase gradient-text-purple tracking-[2.57px]"
data-parent-id="category-node-1428">
Guide cadeau </a>
</div>
</div>
<div
class="gap-10 w-fit columns-2">
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui.html', '2','Pour qui')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
data-parent-id="category-node-1428"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Pour qui </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-femme.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-femme.html', '3', 'Cadeau Femme')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Cadeau Femme </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-lui.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-lui.html', '3', 'Cadeau Homme')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Cadeau Homme </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-enfant.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui/cadeaux-pour-enfant.html', '3', 'Cadeau Enfant')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Cadeau Enfant </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui.html"
title="Pour qui"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-pour-qui.html', '3', 'Pour qui')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1428">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
<div class="break-inside-avoid-column">
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix.html', '2','Par prix')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
data-parent-id="category-node-1428"
class="uppercase text-pink text-xxs tracking-spaced-lg font-semibold mb-6 block">
Par prix </a>
<div class="flex flex-col gap-2.5 items-start mb-10">
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-moins-de-10-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-moins-de-10-euros.html', '3', 'Petits prix')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Petits prix </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-10-et-20-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-10-et-20-euros.html', '3', 'Moins de 20€')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Moins de 20€ </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-20-et-30-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-entre-20-et-30-euros.html', '3', 'Entre 20 et 30€')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Entre 20 et 30€ </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-plus-de-30-euros.html"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix/cadeaux-plus-de-30-euros.html', '3', 'Cadeau premium')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'category-node-1428' })"
class="block text-anthracite text-sm group relative pb-1 group"
data-parent-id="category-node-1428">
<span
class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Cadeau premium </span>
</a>
<a href="https://www.adopt.com/fr/cadeaux/cadeaux-par-prix.html"
title="Par prix"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/cadeaux/cadeaux-par-prix.html', '3', 'Par prix')"
class="text-xxs uppercase font-bold group tracking-spaced text-anthracite inline-block"
data-parent-id="category-node-1428">
<span class="relative pb-1 after:h-px after:bg-anthracite after:w-0 after:absolute after:left-0 after:bottom-0 after:transition-all after:duration-300 group-hover:after:w-full">
Voir tout </span>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="max-w-[21.875rem]">
<a href="https://www.adopt.com/fr/saint-valentin.html"
@click.prevent="clickMenuBannerEvent('https://www.adopt.com/fr/saint-valentin.html', 'Cadeau')">
<img :class="{ 'h-full': !isSafariBeforeTahoe }" loading="lazy"
src="https://adopt.twic.pics/media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_3_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_OP_SAINT_VALENTIN_2026_Overlay_COFFRETS_FR_3_1.png"
data-twic-transform="max=450" alt="Cadeau"
title="Cadeau" />
</a>
</div>
</div>
</div>
</div>
<div @mouseenter="openSubNav( 'cms-node-69af8f964a78e', $refs )"
@mouseleave="openSubNav(0, $refs)"
id="subnav-cms-node-69af8f964a78e"
class="subnav-content hidden overflow-y-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'cms-node-69af8f964a78e', 'block' : hoverPanelActiveId === 'cms-node-69af8f964a78e' }">
<div class="shadow-lg bg-white">
<div class="p-1 flex items-stretch gap-5 w-full" x-data="initSliderMenuPage(5)">
<button type="button"
class="z-1 absolute flex justify-center items-center left-10 top-0 bottom-0 border border-anthracite-500 my-auto w-15 h-15 rounded-full bg-white"
aria-label="Previous slide"
@click="prev()">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="text-anthracite-500 w-5 h-auto transform rotate-180" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</button>
<div class="overflow-hidden flex-1">
<ul class="flex justify-between transition-all duration-300 gap-1" :style="calcSlider()">
<li class="w-1/4" role="none">
<a class="block group relative focus-visible:outline focus-visible:outline-offset-[-0.375rem] focus-visible:outline-[0.375rem]"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/programme-colibri', '2', 'Les Programmes Colibri')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'cms-node-69af8f964a78e' })"
href="https://www.adopt.com/fr/programme-colibri"
role="menuitem">
<img loading="lazy"
class="w-full rounded-[10px] h-[440px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/carr__0.jpg?twic=v1/output=preview"
data-twic-src="image:media/picto/image/carr__0.jpg"
data-twic-transform="max=500" alt="">
<span
class="absolute bottom-5 btn btn-primary-white-cta min-h-[60px] mx-auto left-0 right-0 w-fit">
Les Programmes Colibri </span>
</a>
</li>
<li class="w-1/4" role="none">
<a class="block group relative focus-visible:outline focus-visible:outline-offset-[-0.375rem] focus-visible:outline-[0.375rem]"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/nos-engagements', '2', 'Nos engagements')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'cms-node-69af8f964a78e' })"
href="https://www.adopt.com/fr/nos-engagements"
role="menuitem">
<img loading="lazy"
class="w-full rounded-[10px] h-[440px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/nos_engagements.jpg_1__0.png?twic=v1/output=preview"
data-twic-src="image:media/picto/image/nos_engagements.jpg_1__0.png"
data-twic-transform="max=500" alt="">
<span
class="absolute bottom-5 btn btn-primary-white-cta min-h-[60px] mx-auto left-0 right-0 w-fit">
Nos engagements </span>
</a>
</li>
<li class="w-1/4" role="none">
<a class="block group relative focus-visible:outline focus-visible:outline-offset-[-0.375rem] focus-visible:outline-[0.375rem]"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/l-univers-adopt', '2', 'L\'univers adopt')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'cms-node-69af8f964a78e' })"
href="https://www.adopt.com/fr/l-univers-adopt"
role="menuitem">
<img loading="lazy"
class="w-full rounded-[10px] h-[440px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/Adopt_0505_Capots_2_Invio_0.png?twic=v1/output=preview"
data-twic-src="image:media/picto/image/Adopt_0505_Capots_2_Invio_0.png"
data-twic-transform="max=500" alt="">
<span
class="absolute bottom-5 btn btn-primary-white-cta min-h-[60px] mx-auto left-0 right-0 w-fit">
L'univers adopt </span>
</a>
</li>
<li class="w-1/4" role="none">
<a class="block group relative focus-visible:outline focus-visible:outline-offset-[-0.375rem] focus-visible:outline-[0.375rem]"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/savoir-faire', '2', 'Savoir-faire')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'cms-node-69af8f964a78e' })"
href="https://www.adopt.com/fr/savoir-faire"
role="menuitem">
<img loading="lazy"
class="w-full rounded-[10px] h-[440px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/savoir-faire-adopt_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/picto/image/savoir-faire-adopt_1.jpg"
data-twic-transform="max=500" alt="">
<span
class="absolute bottom-5 btn btn-primary-white-cta min-h-[60px] mx-auto left-0 right-0 w-fit">
Savoir-faire </span>
</a>
</li>
<li class="w-1/4" role="none">
<a class="block group relative focus-visible:outline focus-visible:outline-offset-[-0.375rem] focus-visible:outline-[0.375rem]"
@click.prevent="clickMenuEntryEvent('https://www.adopt.com/fr/nos-services-en-boutique', '2', 'Nos services en boutique')"
@keydown.arrow-up.prevent="$dispatch('close-submenu-and-focus-parent', { idCat: 'cms-node-69af8f964a78e' })"
href="https://www.adopt.com/fr/nos-services-en-boutique"
role="menuitem">
<img loading="lazy"
class="w-full rounded-[10px] h-[440px] object-cover object-center"
src="https://adopt.twic.pics/media/picto/image/service_en_boutique_0.jpg?twic=v1/output=preview"
data-twic-src="image:media/picto/image/service_en_boutique_0.jpg"
data-twic-transform="max=500" alt="">
<span
class="absolute bottom-5 btn btn-primary-white-cta min-h-[60px] mx-auto left-0 right-0 w-fit">
Nos services en boutique </span>
</a>
</li>
</ul>
</div>
<button type="button"
class="z-1 absolute flex justify-center items-center right-10 top-0 bottom-0 border border-anthracite-500 my-auto w-15 h-15 rounded-full bg-white"
aria-label="Next slide"
@click="next()">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="text-anthracite-500 w-5 h-auto" width="8" height="14" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</button>
</div>
</div>
</div>
</div>
</div>
<script>
'use strict';
const initMenuDesktop_69af8f964a0e9 = () => {
return {
hoverPanelActiveId: null,
isOpenSubNav: false,
isMobile: window.outerWidth < 768,
hasOlfactiveSlider: false,
lastOlfactiveShow: 0,
childOlfactive: [],
numberChild: 0,
sliderPosition: 'start',
showPrevious: false,
showNext: false,
isSafariBeforeTahoe: false,
openedViaKeyboard: false,
init() {
this.resizeMenu();
this.detectSafariBeforeTahoe();
},
detectSafariBeforeTahoe() {
const ua = navigator.userAgent;
const isSafari = ua.includes('Safari') && !ua.includes('Chrome');
if (isSafari && ua.includes('Mac OS X')) {
const match = ua.match(/Version\/(\d+)\./);
this.isSafariBeforeTahoe = match ? parseInt(match[1], 10) < 26 : false;
}
},
resizeMenu() {
const containerWidth = this.$refs.slider.offsetWidth;
const scrollWidth = this.$refs.slider.scrollWidth;
this.showNext = scrollWidth > containerWidth;
this.$refs.slider.scrollLeft = 0;
this.showPrevious = false;
},
nextMenu() {
const containerWidth = this.$refs.slider.offsetWidth;
const scrollAmount = containerWidth * 0.8;
const currentScroll = this.$refs.slider.scrollLeft;
const maxScroll = this.$refs.slider.scrollWidth - containerWidth;
const newScrollLeft = Math.min(currentScroll + scrollAmount, maxScroll);
this.$refs.slider.scrollLeft = newScrollLeft;
this.showPrevious = newScrollLeft > 0;
this.showNext = newScrollLeft < maxScroll;
},
prevMenu() {
const containerWidth = this.$refs.slider.offsetWidth;
const scrollAmount = containerWidth * 0.8;
const currentScroll = this.$refs.slider.scrollLeft;
const maxScroll = this.$refs.slider.scrollWidth - containerWidth;
const newScrollLeft = Math.max(currentScroll - scrollAmount, 0);
this.$refs.slider.scrollLeft = newScrollLeft;
this.showPrevious = newScrollLeft > 0;
this.showNext = newScrollLeft < maxScroll;
},
setActiveMenu(menuNode) {
Array.from(menuNode.querySelectorAll('a')).filter(link => {
return link.href === window.location.href.split('?')[0];
}).map(item => {
if (item.classList.contains('main-nav-link')) {
item.classList.add('current');
} else {
const parentId = item.getAttribute('data-parent-id');
const element = document.querySelector('#' + parentId);
element && element.classList.add('current');
}
});
},
clickMenuEntryEvent(url, level, label, blank = false) {
window.dataLayer?.push({
'event': 'clicMenuniveau' + level,
'text': label
});
if (blank) {
window.open(url, '_blank');
} else {
window.location.href = url
}
},
clickMenuBannerEvent(url, label) {
window.dataLayer?.push({
'event': 'clicMenuBannière',
'text': label
});
window.location.href = url
},
openSubNav(idCat, $refs) {
this.hoverPanelActiveId = idCat;
const subnavWrapper = document.getElementById('subnav-wrapper');
const subnavContent = document.querySelectorAll('.subnav-content');
if (document.body.classList.contains('catalog-product-view')) {
subnavWrapper.style.top = document.querySelector('#header').offsetHeight - 10 + 'px';
} else {
subnavWrapper.style.top = document.querySelector('#header').offsetHeight + 'px';
}
if (idCat !== 0) {
this.isOpenSubNav = true;
subnavWrapper.style.maxHeight = 'calc(100vh - ' + subnavWrapper.getBoundingClientRect().top + 'px - 2px)';
subnavContent.forEach(item => {
item.style.maxHeight = 'calc(100vh - ' + subnavWrapper.getBoundingClientRect().top + 'px - 2px)';
this.loadSliderOlfactive($refs);
})
window.dispatchEvent(
new CustomEvent('open-menu-subnav')
);
if (this.openedViaKeyboard) {
this.$nextTick(() => {
this.focusFirstSubmenuItem(idCat);
});
this.openedViaKeyboard = false;
}
} else {
this.isOpenSubNav = false;
subnavWrapper.style.maxHeight = 'unset';
subnavContent.forEach(item => {
item.style.maxHeight = 'unset';
});
window.dispatchEvent(
new CustomEvent('close-menu-subnav')
);
}
},
focusFirstSubmenuItem(idCat) {
const activeSubmenu = document.querySelector('#subnav-' + idCat);
if (!activeSubmenu) return;
const firstFocusable = activeSubmenu.querySelector('a[role="menuitem"], a[href], button:not([disabled])');
if (firstFocusable) {
firstFocusable.focus();
}
},
closeSubmenuAndFocusParent(idCat) {
this.openSubNav(0, this.$refs);
const parentLink = document.querySelector('#' + idCat);
if (parentLink) {
parentLink.focus();
}
},
loadSliderOlfactive($refs) {
if ($refs.olfactiveContent) {
if ($refs.olfactiveContent.offsetWidth > $refs.olfactiveWrapper.offsetWidth && !this.isMobile) {
this.hasOlfactiveSlider = true;
$refs.olfactiveNav.classList.remove('hidden');
}
$refs.olfactiveContent.dataset.translate = 0;
let child = []
$refs.olfactiveContent.childNodes.forEach(item => {
if (item.nodeType === 1) {
this.childOlfactive.push(item);
if ((item.offsetLeft + item.offsetWidth) > $refs.olfactiveWrapper.offsetWidth) {
item.classList.add('no-showed')
child.push(item);
}
}
})
this.numberChild = this.childOlfactive.length - 1;
this.lastOlfactiveShow = child[0];
}
},
prevOlfactive($refs) {
if ($refs.olfactiveContent.dataset.translate > 0 && this.lastOlfactiveShow.previousElementSibling !== null) {
this.lastOlfactiveShow = this.lastOlfactiveShow.previousElementSibling;
let translation = $refs.olfactiveContent.dataset.translate - this.lastOlfactiveShow.previousElementSibling.offsetWidth - 10;
$refs.olfactiveContent.style.marginLeft = "-" + translation + "px";
$refs.olfactiveContent.dataset.translate = translation;
this.sliderPosition = null
} else {
$refs.olfactiveContent.style.marginLeft = 0;
$refs.olfactiveContent.dataset.translate = 0;
this.sliderPosition = 'start';
}
},
nextOlfactive($refs) {
if (this.lastOlfactiveShow.nextElementSibling !== null) {
this.lastOlfactiveShow = this.lastOlfactiveShow.nextElementSibling;
let translation = this.lastOlfactiveShow.offsetWidth - ($refs.olfactiveWrapper.offsetWidth - this.lastOlfactiveShow.offsetLeft) + 10
$refs.olfactiveContent.style.marginLeft = "-" + translation + "px";
$refs.olfactiveContent.dataset.translate = translation;
this.sliderPosition = null
} else {
this.sliderPosition = "end"
}
}
}
}
function initSliderMenuPage(numberSlide) {
return {
currentSlide: 1,
sliderPosition: 0,
widthWrapper: 100,
gap: 24,
next() {
if (this.currentSlide < numberSlide && this.currentSlide < (numberSlide - 3)) {
this.currentSlide = this.currentSlide + 1;
} else {
this.currentSlide = 1;
}
},
prev() {
if (this.currentSlide <= 1) {
this.currentSlide = numberSlide - 3;
} else {
this.currentSlide = this.currentSlide - 1;
}
},
calcSlider() {
this.sliderPosition = (100 / 4) * this.currentSlide
this.widthWrapper = (100 / 4) * numberSlide;
return 'width: calc(' + this.widthWrapper + '%); margin-left: calc(-' + this.sliderPosition + '% + 25%)';
},
clickMenuEntryEvent(url, level, label) {
window.dataLayer?.push({
'event': 'clicMenuniveau' + level,
'text': label
});
window.location.href = url
}
}
}
</script> </div>
</div>
</div>
</div></header><script>
'use strict';
function initAwRbslider(config) {
return {
options: Object.assign({
autoplay: true,
pauseTimeBetweenTransitions: 3000,
slideTransitionSpeed: 500,
isStopAnimationMouseOnBanner: true,
animation: 'fade',
isRandomOrderImage: false,
sliderListSelector: '.uk-slideshow',
sliderItemSelector: '.aw-rbslider-item',
$refs: null
}, config),
slideshow: {
options: {}
},
init() {
this.options.$refs = this.$refs;
},
initSlider($refs) {
this.slideshow = window.awRbslider(this.$el, {
autoplay: this.options.autoplay,
autoplayInterval: this.options.pauseTimeBetweenTransitions,
duration: this.options.slideTransitionSpeed,
pauseOnHover: this.options.isStopAnimationMouseOnBanner,
animation: this.options.animation,
$refs: this.options.$refs,
});
this.loadSlides($refs);
// Rewrite slideshow resize method
this.slideshow.resize = () => this.resizeBanner(this.slideshow);
if (this.options.bannerSchedule.length > 0) {
if (!this.timeValidator([this.options.bannerSchedule[0]])) {
this.delayedUpdate(this.options.bannerSchedule[0]);
}
if (this.timeValidator(this.options.bannerSchedule)) {
this.sendRequest(this.options.bannerId);
}
}
},
loadSlider($refs) {
if (!window.awRbslider) {
let callbacks = [];
window.awRbslider = {
'-isLoading': (callback) => callbacks.push(callback)
};
}
if (window.awRbslider['-isLoading']) {
window.awRbslider['-isLoading'](() => this.loadSlider($refs))
}
if (!window.awRbslider['-isLoading']) {
this.initSlider($refs);
}
},
// Slideshow paused, if mouse cursor on slide navigation or dot navigation
pauseOnEnter() {
if (this.slideshow.options.pauseOnHover) {
this.slideshow.hovering = true;
}
},
resumeOnLeave() {
this.slideshow.hovering = false;
},
/**
* Recalculate the width and height of the banner
*/
resizeBanner(slideshow) {
if (slideshow.slides.length) {
let firstChild = slideshow.slides[slideshow.current];
if (firstChild.querySelector('.rbslider__video')) {
const video = firstChild.querySelector('video');
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
slideshow.slides[slideshow.current].style.height = '';
const height = video.getBoundingClientRect().height;
slideshow.container.style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
document.querySelector('.wrapperVideo').style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
}
} else {
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
let maxHeight = 0;
slideshow.slides.forEach((slide) => {
slide.style.height = '';
const height = slide.getBoundingClientRect().height;
if (height > maxHeight) {
maxHeight = height;
}
});
slideshow.container.style.height = maxHeight + 'px';
slideshow.slides.forEach((slide) => {
slide.style.height = maxHeight + 'px';
});
}
}
}
},
/**
* Lazy load slides
*/
loadSlides($refs) {
this.slideshow.slides.forEach((slideElem, index) => {
if (index) {
const slideImg = slideElem.querySelector('img.aw-rbslider__img');
if (slideImg && slideImg.dataset.src) {
slideImg.addEventListener('load', () => {
slideImg.classList.add('is-loaded');
});
slideImg.src = slideImg.dataset.src;
slideImg.removeAttribute('data-src');
}
}
});
},
clickSliderEvent(url, label) {
window.dataLayer?.push({
'event': 'clicSliderHP',
'text': label
});
window.location.href = url
},
/**
* Compare current time with schedule
*/
timeValidator(schedule) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
let isValid = false;
schedule.forEach(item => {
if (currentDateMinute === Math.floor(new Date(item).getTime() / 1000 / 60)) {
isValid = true;
}
});
return isValid;
},
/**
* Send request for clean banner cache
*/
sendRequest(bannerId) {
const formKey = hyva.getFormKey();
fetch(this.options.cacheCleanUrl, {
method: 'post',
headers: {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: "form_key=" + formKey + "&bannerId=" + bannerId,
mode: "cors",
credentials: "include"
});
},
/**
* Schedule call to sendRequest for future schedule item
*/
delayedUpdate(futureTime) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
const interval = Math.floor(new Date(futureTime).getTime() / 1000 / 60) - currentDateMinute;
if (interval > 0) {
setTimeout(() => this.sendRequest(this.options.bannerId), interval);
}
},
/**
* @private
*/
_randomSort() {
const sliderListSelector = this.options.sliderListSelector,
sliderItemSelector = this.options.sliderItemSelector;
this.$el.querySelector(sliderListSelector)
.innerHTML = Array.from(this.$el.querySelectorAll(sliderListSelector + ' ' + sliderItemSelector))
.sort(() => Math.random() - 0.5)
.map(item => item.outerHTML)
.join('');
},
}
}
</script>
<main id="maincontent" class="page-main-full-width"><span id="contentarea" tabindex="-1"></span>
<div class="page messages"><script>
function initMessages() {
"use strict";
return {
messages: window.mageMessages || [],
classList: {
success: {
content: 'bg-system-success-300 text-anthracite-600',
close: 'text-anthracite-600'
},
error: {
content: 'bg-system-error-300 text-anthracite-600',
close: 'text-anthracite-600'
},
warning: {
content: 'bg-system-warning-300 text-anthracite-600',
close: 'text-anthracite-600'
},
info: {
content: 'bg-system-warning-300 text-anthracite-600',
close: 'text-anthracite-600'
},
notice: {
content: 'bg-system-warning-300 text-anthracite-600',
close: 'text-anthracite-600'
}
},
init($refs) {
if (this.$refs.banner.closest('.page-main')) {
this.$refs.banner.closest('.page-main').style.background = 'none'
}
},
isEmpty() {
return this.messages.reduce(
function(isEmpty, message) {
return isEmpty && message === undefined
}, true
)
},
removeMessage(messageIndex) {
this.messages[messageIndex] = undefined;
},
addMessages(messages, hideAfter) {
messages.map((message) => {
this.messages = this.messages.concat(message);
let pageMessages = document.querySelector('.page.messages');
if (typeof message.class !== 'undefined') {
pageMessages.classList.add(message.class);
}
if (message.type === 'success' && message.text.toString().includes('checkout/cart')) {
pageMessages.classList.add("fixed");
}
if (message.type === "error" && message.errorType === 'login') {
pageMessages.classList.add("fixed");
} else {
pageMessages.classList.remove("fixed");
}
if (hideAfter) {
this.setHideTimeOut(this.messages.length - 1, hideAfter);
}
if (!hideAfter && message.type === "success") {
this.setHideTimeOut(this.messages.length - 1, 3000);
}
});
},
setHideTimeOut(messageIndex, hideAfter) {
setTimeout((messageIndex) => {
this.removeMessage(messageIndex);
}, hideAfter, messageIndex);
},
eventListeners: {
['@messages-loaded.window']() {
this.addMessages(event.detail.messages, event.detail.hideAfter)
},
['@private-content-loaded.window'](event) {
const data = event.detail.data;
if (
data.messages &&
data.messages.messages &&
data.messages.messages.length
) {
this.addMessages(data.messages.messages);
}
},
['@clear-messages.window']() {
this.messages = [];
}
}
}
}
</script>
<section id="messages"
x-data="initMessages()"
x-bind="eventListeners"
x-ref="banner"
x-init="init($refs)">
<template x-if="!isEmpty()">
<div class="w-full">
<div role="alert" class="messages container mx-auto py-3">
<template x-for="(message, index) in messages" :key="index">
<div>
<template x-if="message">
<div class="message flex items-center justify-between w-full p-2 shadow rounded mb-2 font-medium text-tiny tracking-spaced rounded-[0.625rem]" :class="{ [message.type]: true, 'text-anthracite-600': message.type === 'success' || message.type === 'warning' || message.type === 'info' || message.type === 'notice', 'bg-system-success-300': message.type === 'success', 'bg-system-error-700 text-white': message.type === 'error', 'bg-system-warning-300': message.type === 'warning' || message.type === 'info' || message.type === 'notice' }"
:ui-id="'message-' + message.type">
<div class="flex items-center gap-2 md:gap-3.5">
<svg x-show="message.type === 'success'" class="text-system-success-800 bg-white rounded-full box-content pt-1 pr-[3px] pb-1.5 pl-1 w-2.5 h-auto shrink-0 md:w-3"
width="17" height="12.702" version="1.1" viewbox="0 0 17 12.702" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(1,1)" fill="none" fill-rule="evenodd" stroke-linecap="round">
<path d="M 15,0 6.0879121,10.702128 M 6,10 0,5" stroke="currentColor" stroke-width="2"></path>
</g>
</svg>
<span x-html="message.text"></span>
</div>
<a href="#" class="close cursor-pointer" title="Fermer ce message"
:class="{ 'text-anthracite-600': message.type === 'success' || message.type === 'warning' || message.type === 'info' || message.type === 'notice', 'text-white': message.type === 'error', }"
@click.prevent="removeMessage(index)">
<svg class="fill-current" xmlns="http://www.w3.org/2000/svg"
width="18" height="18" viewbox="0 0 18 18">
<path
d="M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z">
</path>
</svg>
</a>
</div>
</template>
</div>
</template>
</div>
</div>
</template>
</section></div><div class="columns"><div class="column main"><script>
'use strict';
function initAwRbslider(config) {
return {
options: Object.assign({
autoplay: true,
pauseTimeBetweenTransitions: 3000,
slideTransitionSpeed: 500,
isStopAnimationMouseOnBanner: true,
animation: 'fade',
isRandomOrderImage: false,
sliderListSelector: '.uk-slideshow',
sliderItemSelector: '.aw-rbslider-item',
$refs: null
}, config),
slideshow: {
options: {}
},
init() {
this.options.$refs = this.$refs;
},
initSlider($refs) {
this.slideshow = window.awRbslider(this.$el, {
autoplay: this.options.autoplay,
autoplayInterval: this.options.pauseTimeBetweenTransitions,
duration: this.options.slideTransitionSpeed,
pauseOnHover: this.options.isStopAnimationMouseOnBanner,
animation: this.options.animation,
$refs: this.options.$refs,
});
this.loadSlides($refs);
// Rewrite slideshow resize method
this.slideshow.resize = () => this.resizeBanner(this.slideshow);
if (this.options.bannerSchedule.length > 0) {
if (!this.timeValidator([this.options.bannerSchedule[0]])) {
this.delayedUpdate(this.options.bannerSchedule[0]);
}
if (this.timeValidator(this.options.bannerSchedule)) {
this.sendRequest(this.options.bannerId);
}
}
},
loadSlider($refs) {
if (!window.awRbslider) {
let callbacks = [];
window.awRbslider = {
'-isLoading': (callback) => callbacks.push(callback)
};
}
if (window.awRbslider['-isLoading']) {
window.awRbslider['-isLoading'](() => this.loadSlider($refs))
}
if (!window.awRbslider['-isLoading']) {
this.initSlider($refs);
}
},
// Slideshow paused, if mouse cursor on slide navigation or dot navigation
pauseOnEnter() {
if (this.slideshow.options.pauseOnHover) {
this.slideshow.hovering = true;
}
},
resumeOnLeave() {
this.slideshow.hovering = false;
},
/**
* Recalculate the width and height of the banner
*/
resizeBanner(slideshow) {
if (slideshow.slides.length) {
let firstChild = slideshow.slides[slideshow.current];
if (firstChild.querySelector('.rbslider__video')) {
const video = firstChild.querySelector('video');
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
slideshow.slides[slideshow.current].style.height = '';
const height = video.getBoundingClientRect().height;
slideshow.container.style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
document.querySelector('.wrapperVideo').style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
}
} else {
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
let maxHeight = 0;
slideshow.slides.forEach((slide) => {
slide.style.height = '';
const height = slide.getBoundingClientRect().height;
if (height > maxHeight) {
maxHeight = height;
}
});
slideshow.container.style.height = maxHeight + 'px';
slideshow.slides.forEach((slide) => {
slide.style.height = maxHeight + 'px';
});
}
}
}
},
/**
* Lazy load slides
*/
loadSlides($refs) {
this.slideshow.slides.forEach((slideElem, index) => {
if (index) {
const slideImg = slideElem.querySelector('img.aw-rbslider__img');
if (slideImg && slideImg.dataset.src) {
slideImg.addEventListener('load', () => {
slideImg.classList.add('is-loaded');
});
slideImg.src = slideImg.dataset.src;
slideImg.removeAttribute('data-src');
}
}
});
},
clickSliderEvent(url, label) {
window.dataLayer?.push({
'event': 'clicSliderHP',
'text': label
});
window.location.href = url
},
/**
* Compare current time with schedule
*/
timeValidator(schedule) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
let isValid = false;
schedule.forEach(item => {
if (currentDateMinute === Math.floor(new Date(item).getTime() / 1000 / 60)) {
isValid = true;
}
});
return isValid;
},
/**
* Send request for clean banner cache
*/
sendRequest(bannerId) {
const formKey = hyva.getFormKey();
fetch(this.options.cacheCleanUrl, {
method: 'post',
headers: {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: "form_key=" + formKey + "&bannerId=" + bannerId,
mode: "cors",
credentials: "include"
});
},
/**
* Schedule call to sendRequest for future schedule item
*/
delayedUpdate(futureTime) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
const interval = Math.floor(new Date(futureTime).getTime() / 1000 / 60) - currentDateMinute;
if (interval > 0) {
setTimeout(() => this.sendRequest(this.options.bannerId), interval);
}
},
/**
* @private
*/
_randomSort() {
const sliderListSelector = this.options.sliderListSelector,
sliderItemSelector = this.options.sliderItemSelector;
this.$el.querySelector(sliderListSelector)
.innerHTML = Array.from(this.$el.querySelectorAll(sliderListSelector + ' ' + sliderItemSelector))
.sort(() => Math.random() - 0.5)
.map(item => item.outerHTML)
.join('');
},
}
}
</script>
<div class="hero-slider transition relative">
<div x-data='initAwRbslider({"autoplay":3000,"pauseTimeBetweenTransitions":3000,"slideTransitionSpeed":500,"isStopAnimationMouseOnBanner":true,"animation":"fade","isRandomOrderImage":false,"bannerSchedule":["2026-01-27 18:00:00","2026-01-27 18:02:00","2026-01-27 18:04:00","2026-01-27 18:06:00","2026-01-27 18:07:00","2026-01-27 18:08:00","2026-01-27 18:09:00","2026-02-03 22:59:00","2026-02-03 22:59:00","2026-02-03 22:59:00","2026-02-03 22:59:00","2026-02-03 22:59:00","2026-02-03 22:59:00","2026-02-03 22:59:00","2026-02-03 23:00:00","2026-02-03 23:00:00","2026-02-03 23:00:00","2026-02-03 23:00:00","2026-02-03 23:00:00","2026-02-03 23:00:00","2026-02-17 22:59:00","2026-02-17 22:59:00","2026-02-17 22:59:00","2026-02-17 22:59:00","2026-02-17 22:59:00","2026-02-17 22:59:00","2026-02-17 23:00:00","2026-02-17 23:00:00","2026-02-18 05:11:00","2026-02-19 23:00:00","2026-02-19 23:00:00","2026-02-19 23:00:00","2026-02-19 23:00:00","2026-02-19 23:00:00","2026-02-19 23:00:00","2026-02-19 23:00:00","2026-03-10 22:59:00","2026-03-10 22:59:00","2026-03-10 22:59:00","2026-03-10 22:59:00","2026-03-10 22:59:00","2026-03-10 22:59:00","2026-03-10 22:59:00","2026-03-17 22:59:00"],"bannerId":"1","cacheCleanUrl":"https:\/\/www.adopt.com\/fr\/aw_rbslider\/cache\/clean"})'
x-intersect="loadSlider($refs)"
data-aw-rbslider-banner-id='1'
class="aw-rbslider-container uk-slidenav-position mb-0"
x-ref="wrapper">
<div class="uk-slideshow uk-overlay-active a-aspect-slider transition-all">
<div class="aw-rbslider-item absolute" data-bg="">
<div class="aw-rbslider-img-wrapper h-full">
<picture class="block h-full">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/aw_rbslider/slides/ECOMM_JOLIE_PARIS_SLIDER_DESK_FR.png?twic=v1/cover-max=3230.5 1x" media="(min-width: 1920px)" class="aw-rbslider__img object-cover block w-full object-center transition-all is-loaded" title="Jolie paris">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/aw_rbslider/slides/ECOMM_JOLIE_PARIS_SLIDER_DESK_FR.png?twic=v1/cover-max=2475.2 1x" media="(min-width: 1536px)" class="aw-rbslider__img object-cover block w-full object-center transition-all is-loaded" title="Jolie paris">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/aw_rbslider/slides/ECOMM_JOLIE_PARIS_SLIDER_DESK_FR.png?twic=v1/cover-max=1976 1x" media="(min-width: 1245px)" class="aw-rbslider__img object-cover block w-full object-center transition-all is-loaded" title="Jolie paris">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/aw_rbslider/slides/ECOMM_JOLIE_PARIS_SLIDER_DESK_FR.png?twic=v1/cover-max=1597.7 1x" media="(min-width: 1024px)" class="aw-rbslider__img object-cover block w-full object-center transition-all is-loaded" title="Jolie paris">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/aw_rbslider/slides/ECOMM_JOLIE_PARIS_SLIDER_DESK_FR.png?twic=v1/cover-max=-x685.1 1x" media="(min-width: 768px)" class="aw-rbslider__img object-cover block w-full object-center transition-all is-loaded" title="Jolie paris"> <source type="image/jpeg" srcset="https://adopt.twic.pics/media/aw_rbslider/slides/ECOMM_JOLIE_PARIS_SLIDER_MOB_FR.png?twic=v1/cover-max=977.6 1x" media="(min-width: 600px)" class="aw-rbslider__img object-cover block w-full object-center transition-all is-loaded" title="Jolie paris">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/aw_rbslider/slides/ECOMM_JOLIE_PARIS_SLIDER_MOB_FR.png?twic=v1/cover-max=-x845 1x" media="(min-width: 320px)" class="aw-rbslider__img object-cover block w-full object-center transition-all is-loaded" title="Jolie paris"> <img
class="aw-rbslider__img block w-full h-full object-cover object-center transition-all is-loaded"
width="2880" height="1010" fetchpriority="high" title="Jolie Paris"
alt="eau de parfum 30 ml" />
</picture>
<a href="https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html"
@click.prevent="clickSliderEvent('https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html', 'eau de parfum 30 ml')"
class="aw-rbslider-img-url"
title="eau de parfum 30 ml"
target="_blank" rel="nofollow"></a>
<div
class="aw-rbslider-content-wrapper uk-overlay-panel flex items-end justify-center md:justify-start h-fit w-full top-auto bottom-0 text-anthracite-600">
<div class="flex flex-col items-center md:items-start w-full md:px-8.5 pb-14 md:pb-12">
<div
class="text-[4.375rem] font-secondary font-bold leading-none px-0 text-center md:text-left md:block hidden"></div>
<div
class="text-4.5xl font-secondary font-bold leading-none px-6 text-center md:hidden"></div>
<div class="w-full flex md:justify-start justify-center">
<div
class="pt-4.5 md:pt-6 flex flex-wrap gap-2.5 justify-center md:justify-start px-6 md:px-0 relative z-[101]">
<a href="https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html"
class="btn btn-primary-white text-lg whitespace-nowrap">Je découvre</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
'use strict';
function initAwRbslider(config) {
return {
options: Object.assign({
autoplay: true,
pauseTimeBetweenTransitions: 3000,
slideTransitionSpeed: 500,
isStopAnimationMouseOnBanner: true,
animation: 'fade',
isRandomOrderImage: false,
sliderListSelector: '.uk-slideshow',
sliderItemSelector: '.aw-rbslider-item',
$refs: null
}, config),
slideshow: {
options: {}
},
init() {
this.options.$refs = this.$refs;
},
initSlider($refs) {
this.slideshow = window.awRbslider(this.$el, {
autoplay: this.options.autoplay,
autoplayInterval: this.options.pauseTimeBetweenTransitions,
duration: this.options.slideTransitionSpeed,
pauseOnHover: this.options.isStopAnimationMouseOnBanner,
animation: this.options.animation,
$refs: this.options.$refs,
});
this.loadSlides($refs);
// Rewrite slideshow resize method
this.slideshow.resize = () => this.resizeBanner(this.slideshow);
if (this.options.bannerSchedule.length > 0) {
if (!this.timeValidator([this.options.bannerSchedule[0]])) {
this.delayedUpdate(this.options.bannerSchedule[0]);
}
if (this.timeValidator(this.options.bannerSchedule)) {
this.sendRequest(this.options.bannerId);
}
}
},
loadSlider($refs) {
if (!window.awRbslider) {
let callbacks = [];
window.awRbslider = {
'-isLoading': (callback) => callbacks.push(callback)
};
}
if (window.awRbslider['-isLoading']) {
window.awRbslider['-isLoading'](() => this.loadSlider($refs))
}
if (!window.awRbslider['-isLoading']) {
this.initSlider($refs);
}
},
// Slideshow paused, if mouse cursor on slide navigation or dot navigation
pauseOnEnter() {
if (this.slideshow.options.pauseOnHover) {
this.slideshow.hovering = true;
}
},
resumeOnLeave() {
this.slideshow.hovering = false;
},
/**
* Recalculate the width and height of the banner
*/
resizeBanner(slideshow) {
if (slideshow.slides.length) {
let firstChild = slideshow.slides[slideshow.current];
if (firstChild.querySelector('.rbslider__video')) {
const video = firstChild.querySelector('video');
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
slideshow.slides[slideshow.current].style.height = '';
const height = video.getBoundingClientRect().height;
slideshow.container.style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
document.querySelector('.wrapperVideo').style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
}
} else {
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
let maxHeight = 0;
slideshow.slides.forEach((slide) => {
slide.style.height = '';
const height = slide.getBoundingClientRect().height;
if (height > maxHeight) {
maxHeight = height;
}
});
slideshow.container.style.height = maxHeight + 'px';
slideshow.slides.forEach((slide) => {
slide.style.height = maxHeight + 'px';
});
}
}
}
},
/**
* Lazy load slides
*/
loadSlides($refs) {
this.slideshow.slides.forEach((slideElem, index) => {
if (index) {
const slideImg = slideElem.querySelector('img.aw-rbslider__img');
if (slideImg && slideImg.dataset.src) {
slideImg.addEventListener('load', () => {
slideImg.classList.add('is-loaded');
});
slideImg.src = slideImg.dataset.src;
slideImg.removeAttribute('data-src');
}
}
});
},
clickSliderEvent(url, label) {
window.dataLayer?.push({
'event': 'clicSliderHP',
'text': label
});
window.location.href = url
},
/**
* Compare current time with schedule
*/
timeValidator(schedule) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
let isValid = false;
schedule.forEach(item => {
if (currentDateMinute === Math.floor(new Date(item).getTime() / 1000 / 60)) {
isValid = true;
}
});
return isValid;
},
/**
* Send request for clean banner cache
*/
sendRequest(bannerId) {
const formKey = hyva.getFormKey();
fetch(this.options.cacheCleanUrl, {
method: 'post',
headers: {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: "form_key=" + formKey + "&bannerId=" + bannerId,
mode: "cors",
credentials: "include"
});
},
/**
* Schedule call to sendRequest for future schedule item
*/
delayedUpdate(futureTime) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
const interval = Math.floor(new Date(futureTime).getTime() / 1000 / 60) - currentDateMinute;
if (interval > 0) {
setTimeout(() => this.sendRequest(this.options.bannerId), interval);
}
},
/**
* @private
*/
_randomSort() {
const sliderListSelector = this.options.sliderListSelector,
sliderItemSelector = this.options.sliderItemSelector;
this.$el.querySelector(sliderListSelector)
.innerHTML = Array.from(this.$el.querySelectorAll(sliderListSelector + ' ' + sliderItemSelector))
.sort(() => Math.random() - 0.5)
.map(item => item.outerHTML)
.join('');
},
}
}
</script>
<div id="nosto_cart_tagging"
class="hidden"
x-data="nostoCartTagging()"
@private-content-loaded.window="initTags($event.detail.data['cart-tagging'])"
@nosto-init.window.debounce.1500="sendTagging()">
</div>
<script>
function nostoCartTagging() {
return {
taggingItems: null,
itemCount: 0,
restoreCartUrl: '',
hcid: '',
initTags (tagging) {
this.taggingItems = tagging.items;
this.restoreCartUrl = tagging.restore_cart_url;
this.itemCount = tagging.itemCount;
this.hcid = tagging.hcid;
},
sendTagging () {
if (typeof nostojs === 'function') {
nostojs(api => {
if((this.itemCount > 0) && !api.visit.isDoNotTrack()) {
let cartContent = {};
if (this.taggingItems) {
let items = [];
this.taggingItems.forEach(function (item) {
items.push({
index: item.index,
name: item.name,
price_currency_code: item.price_currency_code,
product_id: item.product_id,
quantity: item.quantity,
sku_id: item.sku_id ? item.sku_id : item.product_id,
total_count: item.total_count,
unit_price: item.unit_price
});
});
cartContent = {
items: items,
hcid: this.hcid,
restore_link: this.restoreCartUrl
}
}
api.defaultSession()
.setCart(cartContent)
.viewCart()
.update({ trackEvents: false });
} else {
api.defaultSession()
.setCart({});
}
});
}
}
}
}
</script>
<div
id="nosto_customer_tagging"
class="hidden"
x-data="nostoCustomerTagging()"
@private-content-loaded.window="initTags($event.detail.data['customer-tagging'])"
@nosto-init.window.debounce.1500="sendTagging()">
</div>
<script>
function nostoCustomerTagging() {
return {
taggingData: {},
initTags (tagging) {
this.taggingData = tagging;
// self.sendTagging(tagging)
},
sendTagging () {
if (typeof nostojs === 'function') {
nostojs(api => {
if((typeof this.taggingData.first_name !== 'undefined') && !api.visit.isDoNotTrack()) {
api.defaultSession()
.setCustomer({
first_name: this.taggingData.first_name,
last_name: this.taggingData.last_name,
email: this.taggingData.email,
hcid: this.taggingData.hcid,
customer_reference: this.taggingData.customer_reference,
newsletter: this.taggingData.marketing_permission
});
} else {
api.defaultSession()
.setCustomer({});
}
});
}
}
}
}
</script>
<style>::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia:
}
.text-3xl {
font-size: 1.875rem;
line-height: 2.25rem
}</style>
<p>
<div class="cms-widget widget-seo-buttons-listing md:border-b border-ui-light flex items-center py-3 md:min-h-[3.75rem] min-h-[2.5rem] order-first md:order-none block md:hidden"
>
<div class="w-full">
<div x-data="{ isDown: false, startX: 0, scrollLeft: undefined, slider: null, init() { this.slider = this.$refs.slider; }, mouseDownHandler(e) { this.isDown = true; this.slider.classList.add('active'); this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; }, mouseMoveHandler(e) { if(!this.isDown) return; e.preventDefault(); const x = e.pageX - this.slider.offsetLeft; const walk = (x - this.startX) * 2.7; //scroll-fast if(walk !== 0) { this.slider.scrollLeft = this.scrollLeft - walk; } } }">
<div class="overflow-auto flex gap-[1.875rem] px-6 md:px-7.5 hide-scrollbar"
@mousedown="mouseDownHandler($event)"
@mouseleave="isDown = false; slider.classList.remove('active')"
@mouseup="isDown = false; slider.classList.remove('active')"
@mousemove="mouseMoveHandler($event)"
x-ref="slider">
<a href="https://www.adopt.com/fr/parfum/parfum-femme.html" class="shrink-0 font-semibold text-xxs text-anthracite hover:text-pink uppercase">Parfum Femme</a>
<a href="https://www.adopt.com/fr/parfum/parfum-homme.html" class="shrink-0 font-semibold text-xxs text-anthracite hover:text-pink uppercase">Parfum Homme</a>
<a href="https://www.adopt.com/fr/cadeaux.html" class="shrink-0 font-semibold text-xxs text-anthracite hover:text-pink uppercase">Coffret Cadeau</a>
<a href="https://www.adopt.com/fr/maison.html" class="shrink-0 font-semibold text-xxs text-anthracite hover:text-pink uppercase">Maison</a>
<a href="https://www.adopt.com/fr/soin-corps.html" class="shrink-0 font-semibold text-xxs text-anthracite hover:text-pink uppercase">Soin Corps</a>
<a href="https://www.adopt.com/fr/maquillage.html" class="shrink-0 font-semibold text-xxs text-anthracite hover:text-pink uppercase">Maquillage</a>
</div>
</div>
</div>
</div>
<div x-data="initNostoSliderWidget_69af00405ab70()"
x-defer="intersect"
@nosto-init.window="getItemsData();"
x-init="getItemsData();"
>
<div id="_69af00405ab70"></div>
</div>
<script>
function initNostoSliderWidget_69af00405ab70() {
return {
isLoaded: false,
itemCount: 0,
requestSended: false,
async getTemplate(products, title, nostoElementId) {
fetch(
'https://www.adopt.com/fr/catalog/nosto/slider'
+ '?product_ids=' + products
+ '&title=' + title
+ '&link_label=' + 'Voir plus'
+ '&category_link=' + 'https://www.adopt.com/fr/soldes.html'
+ '&slider_block_name=' + 'nosto.widget._69af00405ab70'
+ '&nosto_element_id=' + nostoElementId
+ '&template=' + 'Magento_Catalog::product/slider/product-slider.phtml'
+ '&item_template=' + 'Magento_Catalog::product/list/item-widget.phtml'
+ '&container_limitation_class=' + 'none'
+ '&add_background_color=' + '1'
+ '&background_color=' + 'deebf7'
+ '&display_flags=' + 'true'
,
{}
).then(response => response.json()
).then(json => {
this.isLoaded = true;
document.getElementById("_69af00405ab70").innerHTML = json.html
});
},
getItemsData() {
if (this.requestSended) {
return;
}
const self = this;
if (typeof nostojs === 'function') {
self.requestSended = true;
nostojs(api => {
let doNotTrackStatus = api.visit.isDoNotTrack();
api.visit.setDoNotTrack(doNotTrackStatus);
api.defaultSession()
.viewOther()
.setPlacements(['frontpage-nosto-1'])
.load()
.then(response => {
let data = Object.values(response.campaigns.recommendations)[0];
if (data) {
let productIds = [];
data.products.forEach(function (product) {
productIds.push(product.product_id);
});
self.sliderData = {
'title' : data.title
};
self.itemsData = data.products;
self.numberSlide = data.products.length;
this.getTemplate(productIds.toString(), data.title, data.result_id);
}
})
});
}
}
}
}
</script>
<div class="cms-widget widget-push-3-tiles-simple"
style="background-color: #deebf7" >
<div class="pt-6 md:pt-12 pb-6 md:pb-12 container--desktop">
<div class="flex overflow-auto hide-scrollbar gap-2 px-6 md:px-0"
x-data="{ isMobile: window.innerWidth < 768, tileHeight: 0, minHeight() { if(!this.isMobile && this.tileHeight) { return 'min-height: ' + (this.tileHeight) + 'rem'; } else { return ''; } } }"
@resize.window="isMobile = window.innerWidth < 768">
<article
class="widget-push-3-tiles-simple__item tile-group group overflow-hidden relative flex flex-col justify-end md:w-1/3 min-h-[24.375rem] md:min-h-[31.5rem] 2xl:min-h-[37.5rem] shrink-0 w-[17.5rem]"
:style="minHeight()">
<a href="https://www.adopt.com/fr/parfum/parfum-homme/eau-de-parfum-homme.html"
target="_self"
class="absolute inset-0 w-full h-full z-10" aria-labelledby="link-label-482342">
</a>
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_5.png?twic=v1/cover-max=-x780 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_5.png?twic=v1/cover-max=-x655.2 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_MOB_5.png?twic=v1/cover-max=-x507 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_5.png?twic=v1/output=preview"
data-twic-src="image:media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_5.png"
alt="Nouveauté Homme"
width="360"
height="360"
loading="lazy" decoding="async"
class="absolute top-0 left-1/2 -translate-x-1/2 h-full w-full object-cover transition-all group-hover:scale-105">
</picture>
<div class="relative h-full flex flex-col items-center justify-end p-11 md:p-16">
<a class="link z-10 btn btn-primary-white mt-6"
href="https://www.adopt.com/fr/parfum/parfum-homme/eau-de-parfum-homme.html"
target="_self" tabindex="-1">
<span id="link-label-482342">Nouveauté Homme</span>
</a>
</div>
</article>
<article
class="widget-push-3-tiles-simple__item tile-group group overflow-hidden relative flex flex-col justify-end md:w-1/3 min-h-[24.375rem] md:min-h-[31.5rem] 2xl:min-h-[37.5rem] shrink-0 w-[17.5rem]"
:style="minHeight()">
<a href="https://www.adopt.com/fr/soin-visage.html"
target="_self"
class="absolute inset-0 w-full h-full z-10" aria-labelledby="link-label-72659">
</a>
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK2.png?twic=v1/cover-max=-x780 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK2.png?twic=v1/cover-max=-x655.2 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_MOB_2.png?twic=v1/cover-max=-x507 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK2.png?twic=v1/output=preview"
data-twic-src="image:media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK2.png"
alt="Nouveauté Visage"
width="360"
height="360"
loading="lazy" decoding="async"
class="absolute top-0 left-1/2 -translate-x-1/2 h-full w-full object-cover transition-all group-hover:scale-105">
</picture>
<div class="relative h-full flex flex-col items-center justify-end p-11 md:p-16">
<a class="link z-10 btn btn-primary-white mt-6"
href="https://www.adopt.com/fr/soin-visage.html"
target="_self" tabindex="-1">
<span id="link-label-72659">Nouveauté Visage</span>
</a>
</div>
</article>
<article
class="widget-push-3-tiles-simple__item tile-group group overflow-hidden relative flex flex-col justify-end md:w-1/3 min-h-[24.375rem] md:min-h-[31.5rem] 2xl:min-h-[37.5rem] shrink-0 w-[17.5rem]"
:style="minHeight()">
<a href="https://www.adopt.com/fr/maison.html"
target="_self"
class="absolute inset-0 w-full h-full z-10" aria-labelledby="link-label-494756">
</a>
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_1.png?twic=v1/cover-max=-x780 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_1.png?twic=v1/cover-max=-x655.2 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_MOB_1.png?twic=v1/cover-max=-x507 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_1.png?twic=v1/output=preview"
data-twic-src="image:media/wysiwyg/home/Bloc_actu/ECOMM_FRENCH_TOUCH_Bloc_Actu_DESK_1.png"
alt="Nouveauté Maison"
width="360"
height="360"
loading="lazy" decoding="async"
class="absolute top-0 left-1/2 -translate-x-1/2 h-full w-full object-cover transition-all group-hover:scale-105">
</picture>
<div class="relative h-full flex flex-col items-center justify-end p-11 md:p-16">
<a class="link z-10 btn btn-primary-white mt-6"
href="https://www.adopt.com/fr/maison.html"
target="_self" tabindex="-1">
<span id="link-label-494756">Nouveauté Maison</span>
</a>
</div>
</article>
</div>
</div>
</div>
<div class="cms-widget cms-big-title-image-background relative">
<div class="absolute top-0 left-0 w-full h-full">
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_DESK.png?twic=v1/cover-max=3230.5 1x" media="(min-width: 1920px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_DESK.png?twic=v1/cover-max=2475.2 1x" media="(min-width: 1536px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_DESK.png?twic=v1/cover-max=1976 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_DESK.png?twic=v1/cover-max=1597.7 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_DESK.png?twic=v1/cover-max=1310.4 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_MOB.png?twic=v1/cover-max=977.6 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_MOB.png?twic=v1/cover-max=759.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_MOB.png?twic=v1/cover-max=363 1x" media="(min-width: 411px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_MOB.png?twic=v1/cover-max=603.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_MOB.png?twic=v1/cover-max=466.7 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/wysiwyg/Diagnostic-olfactif/Visuel_Diag_DESK.png?twic=v1/output=preview" alt="Diagnostic parfum"
class="w-full h-full object-cover" data-twic-src="imageViewModel.getTwicPicsBlurPlaceholder(image)" loading="lazy">
</picture>
</div>
<div class="min-h-[31rem] relative z-10 flex flex-col justify-center items-center gap-9 text-white py-32 px-6 md:w-1/3 mx-auto text-center">
<div class="font-romie font-bold text-center !leading-[1.2] text-2.75xl md:text-4xl">
<p>Diagnostic Parfum</p> </div>
<span class="font-montserrat font-normal text-normal text-center">
<p>Trouvez le parfum qui vous ressemble grâce à un diagnostic simple et personnalisé. Découvrez les accords parfaits pour révéler votre style unique.</p> </span>
<a href="https://www.adopt.com/fr/diagnostic-olfactif"
class="link btn btn-primary-white text-anthracite relative py-5 px-7.5 leading-none w-fit">
Je découvre </a>
</div>
</div></p>
<p> </p>
<p><div >
<h2 class="font-romie font-bold tracking-spaced text-3xl md:text-3.5xl leading-none md:leading-none text-anthracite-500 cms-container"
>
Une Parfumerie Engagée </h2>
</div><div class="cms-widget widget-push-3-tiles-simple"
>
<div class="pt-6 md:pt-9 pb-12 md:pb-12 cms-brand-container--desktop">
<div class="flex overflow-auto hide-scrollbar gap-2 px-6 md:px-0"
x-data="{ isMobile: window.innerWidth < 768, tileHeight: 0, minHeight() { if(!this.isMobile && this.tileHeight) { return 'min-height: ' + (this.tileHeight) + 'rem'; } else { return ''; } } }"
@resize.window="isMobile = window.innerWidth < 768">
<article
class="widget-push-3-tiles-simple__item tile-group group overflow-hidden relative flex flex-col justify-end md:w-1/3 min-h-[24.375rem] md:min-h-[31.5rem] 2xl:min-h-[37.5rem] shrink-0 w-[17.5rem]"
:style="minHeight()">
<a href="https://www.adopt.com/fr/filiere-tiare"
target="_self"
class="absolute inset-0 w-full h-full z-10" aria-labelledby="link-label-601899">
</a>
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/SLIDER_TIARE.jpg?twic=v1/cover-max=-x780 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/SLIDER_TIARE.jpg?twic=v1/cover-max=-x655.2 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/DSC06078.jpg?twic=v1/cover-max=-x507 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/SLIDER_TIARE.jpg?twic=v1/output=preview"
data-twic-src="image:media/wysiwyg/pages_CMS/Tiare/SLIDER_TIARE.jpg"
alt="Le programme Tiaré"
width="360"
height="360"
loading="lazy" decoding="async"
class="absolute top-0 left-1/2 -translate-x-1/2 h-full w-full object-cover transition-all group-hover:scale-105">
</picture>
<div class="relative h-full flex flex-col items-center justify-end p-11 md:p-16">
<a class="link z-10 btn btn-primary-white mt-6"
href="https://www.adopt.com/fr/filiere-tiare"
target="_blank" tabindex="-1">
<span id="link-label-601899">Le programme Tiaré</span>
</a>
</div>
</article>
<article
class="widget-push-3-tiles-simple__item tile-group group overflow-hidden relative flex flex-col justify-end md:w-1/3 min-h-[24.375rem] md:min-h-[31.5rem] 2xl:min-h-[37.5rem] shrink-0 w-[17.5rem]"
:style="minHeight()">
<a href="https://www.adopt.com/fr/nos-engagements"
target="_self"
class="absolute inset-0 w-full h-full z-10" aria-labelledby="link-label-711407">
</a>
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/RSE_2.jpg?twic=v1/cover-max=-x780 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/RSE_2.jpg?twic=v1/cover-max=-x655.2 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/RSE_2.jpg?twic=v1/cover-max=-x507 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/wysiwyg/pages_CMS/Tiare/RSE_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/wysiwyg/pages_CMS/Tiare/RSE_2.jpg"
alt="Nos engagements"
width="360"
height="360"
loading="lazy" decoding="async"
class="absolute top-0 left-1/2 -translate-x-1/2 h-full w-full object-cover transition-all group-hover:scale-105">
</picture>
<div class="relative h-full flex flex-col items-center justify-end p-11 md:p-16">
<a class="link z-10 btn btn-primary-white mt-6"
href="https://www.adopt.com/fr/nos-engagements"
target="_self" tabindex="-1">
<span id="link-label-711407">Nos engagements</span>
</a>
</div>
</article>
<article
class="widget-push-3-tiles-simple__item tile-group group overflow-hidden relative flex flex-col justify-end md:w-1/3 min-h-[24.375rem] md:min-h-[31.5rem] 2xl:min-h-[37.5rem] shrink-0 w-[17.5rem]"
:style="minHeight()">
<a href="https://www.adopt.com/fr/l-univers-adopt"
target="_self"
class="absolute inset-0 w-full h-full z-10" aria-labelledby="link-label-11718">
</a>
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Adopt_0505_Capots_2_Invio.png?twic=v1/cover-max=-x780 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Adopt_0505_Capots_2_Invio.png?twic=v1/cover-max=-x655.2 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/wysiwyg/home/Adopt_0505_Capots_2_Invio.png?twic=v1/cover-max=-x507 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/wysiwyg/home/Adopt_0505_Capots_2_Invio.png?twic=v1/output=preview"
data-twic-src="image:media/wysiwyg/home/Adopt_0505_Capots_2_Invio.png"
alt="L'univers Adopt"
width="360"
height="360"
loading="lazy" decoding="async"
class="absolute top-0 left-1/2 -translate-x-1/2 h-full w-full object-cover transition-all group-hover:scale-105">
</picture>
<div class="relative h-full flex flex-col items-center justify-end p-11 md:p-16">
<a class="link z-10 btn btn-primary-white mt-6"
href="https://www.adopt.com/fr/l-univers-adopt"
target="_self" tabindex="-1">
<span id="link-label-11718">L'univers Adopt</span>
</a>
</div>
</article>
</div>
</div>
</div><div >
<h2 class="font-romie font-bold tracking-spaced text-3xl md:text-3.5xl leading-none md:leading-none text-anthracite-500 cms-container"
>
À la une chez Adopt </h2>
</div><style>
:root {
--bam-player-corner-radius: 5px;
--bam-playlist-gap: 1rem;
--bam-player-height: 25rem;
}
</style>
<script>
window.addEventListener('init-external-scripts', () => {
const script = document.createElement('script');
script.src = 'https\u003A\u002F\u002Flcx\u002Dembed\u002Deu.bambuser.com\u002Fdefault\u002Fembed.js';
script.type = 'text/javascript';
document.head.append(script);
});
</script>
<div class="cms-widget widget-bambuser-highlight pt-0 md:pt-3 pb-6 md:pb-12">
<div x-ref="container" class="cms-brand-container">
<bam-playlist
org-id="Qfrvgz6nBy4ZmScTnity"
autoplay="cascade"
mode="row"
focus-mode="carousel"
player-fit="same-height"
player-settings="products:true;productCardMode:thumbnail;title:true;overlayTextWrap:true"
></bam-playlist>
</div>
</div>
</p>
<p>
<div class="cms-widget widget-reviews widget-reviews--listing pt-6 md:pt-12 pb-6 md:pb-12 md:px-7.5 pl-7.5"
style="background-color: #F5F5FD" >
<div class="">
<div class="flex flex-col md:flex-row justify-between items-start md:items-center gap-4.5 pb-9">
<h2 class="font-romie font-bold tracking-spaced text-3xl md:text-3.5xl leading-none md:leading-none text-anthracite-600">
adopt dans vos coeurs ! </h2>
<a href="https://trustville.fr/avis-clients/pc/peruda/parfumerie/adopt_com"
class="link btn btn-secondary bg-white"
target="_blank"
>
Voir tous les avis </a>
</div>
<div class="overflow-hidden">
<div class="flex gap-12 overflow-auto hide-scrollbar">
<div class="shrink-0 md:shrink w-[70%] md:w-1/3">
<div class="flex items-center gap-1">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-lg text-anthracite-600 mt-3.5">
KAYNA M. </div>
<div class="text-anthracite-400 font-medium mt-3.5">
"Colis emballé avec soin, produits de qualité comme d'habitude jamais déçu." </div>
</div>
<div class="shrink-0 md:shrink w-[70%] md:w-1/3">
<div class="flex items-center gap-1">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-lg text-anthracite-600 mt-3.5">
LAETITIA A. </div>
<div class="text-anthracite-400 font-medium mt-3.5">
"Il y a beaucoup de choix, à des prix très attractifs. Pour faire plaisir, Adopt est vraiment génial, que ce soit pour hommes ou femmes." </div>
</div>
<div class="shrink-0 md:shrink w-[70%] md:w-1/3">
<div class="flex items-center gap-1">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4.5 h-auto" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-lg text-anthracite-600 mt-3.5">
ANNE L </div>
<div class="text-anthracite-400 font-medium mt-3.5">
"Qualité des parfums indéniable, un joli cadeau pour une amie, une livraison rapide et très bien protégée." </div>
</div>
</div>
</div>
</div>
</div>
</p>
<style>
@media (max-width: 768px) {
.column.main .product-slider .product-widget-slider .text-3xl {
font-size: 1.3rem;
}
}
</style><form x-data="nostoRecobuy()" action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2Zy/" method="post" id="nosto_addtocart_form">
<input name="form_key" type="hidden" value="GMaLIDfoPJnixZ50" /></form>
<!--suppress JSUnresolvedVariable, JSValidateTypes, JSUnresolvedFunction -->
<script>
// noinspection JSUnresolvedFunction
window.Nosto = nostoRecobuy();
function nostoRecobuy() {
'use strict';
const Recobuy = {};
Recobuy.addProductToCart = function (productId, element, quantity = 1) {
const productData = {
productId: productId,
skuId: productId,
quantity: quantity
};
return Recobuy.addSkuToCart(productData, element);
};
// Products must be and array of objects [{'productId': '123', 'skuId': '321'}, {...}]
// skuId is optional for simple products.
Recobuy.addMultipleProductsToCart = function (products, element) {
if (Array.isArray(products)) {
return products.reduce(function(acc, product) {
return acc.then(function() {
return Recobuy.addSkuToCart(product, element)
})
} , Promise.resolve())
} else {
// noinspection JSIgnoredPromiseFromCall
Promise.reject(new Error("Products is not type array"))
}
};
// Product object must have fields productId and skuId {'productId': '123', 'skuId': '321'}
Recobuy.addSkuToCart = function (product, element) {
const quantity = product.quantity || 1;
const url = document.querySelector("#nosto_addtocart_form").getAttribute("action");
const formKey = document.querySelector("#nosto_addtocart_form > input[name='form_key']").getAttribute("value");
return new Promise(function (resolve, reject) {
// noinspection JSUnresolvedFunction
var formKey = document.querySelector('input[name=form_key]').value;
fetch(url, {
form_key: formKey,
qty: quantity,
product: product.productId,
sku: product.skuId
}).then(function (response) {
Recobuy.sendCartEvent(element, product.productId)
return resolve();
}).catch((error) => {
return reject()
});
})
};
Recobuy.sendCartEvent = function (element, productId) {
if (typeof element === 'object' && element) {
const slotId = this.resolveContextSlotId(element);
if (slotId) {
nostojs(function (api) {
// noinspection JSUnresolvedFunction
api.recommendedProductAddedToCart(productId, slotId);
});
}
}
}
Recobuy.resolveContextSlotId = function (element) {
const m = 20;
let n = 0;
let e = element;
while (typeof e.parentElement !== "undefined" && e.parentElement) {
++n;
e = e.parentElement;
if (e.getAttribute('class') === 'nosto_element' && e.getAttribute('id')) {
return e.getAttribute('id');
}
if (n >= m) {
return false;
}
}
return false;
};
return Recobuy;
};
</script>
<script>
'use strict';
function initAmScroll() {
return {
options: {
product_container: '.products.products-grid, .products.products-list, .products-grid.grid',
product_link: '.product-item-link',
footerSelector: '.page-footer'
},
type: 'auto',
is_loading: 0,
next_data_url: "",
prev_data_url: "",
next_data_cache: "",
flag_next_cache: 0,
prev_data_cache: "",
flag_prev_cache: 0,
pageFirst: 1,
pagesCount: 1,
pagesLoaded: [],
currentPage: 1,
last_scroll: 0,
disabled: 0,
additionalHeight: null,
classes: {
loadButton: 'amscroll-load-button',
loadingBlock: 'amscroll-loading-block',
loadingIcon: 'amscroll-loading-icon',
loadingIconSource: '#amscroll-loading-icon-source',
svgPathToFill: 'amscroll-fill-path',
backToTopButton: '#amscroll-back-to-top',
active: '-amscroll-active',
text: 'amscroll-text',
animate: '-amscroll-animate',
pageNumber: 'amscroll-page-num'
},
pageSelector: '[amscroll-page="%1"]',
lastPageSelector: '.amscroll-page, .amscroll-pages',
totalAmountSelector: '.toolbar-amount',
totalNumberSelector: '.toolbar-number',
toolbarSelector: '.toolbar.toolbar-products',
amPageCountSelector: '#am-page-count',
canShowAfter: false,
canShowBefore: false,
pagesBeforeButton: 0,
isReinitialized: false,
afterButton: null,
beforeButton: null,
insertedPages: 0,
afterStepBackData: null,
isBackToTopVisible: false,
backToTopTriggerHeight: 400,
loadingBlock: {
before: {
node: undefined,
visible: false
},
after: {
node: undefined,
visible: false
}
},
/**
* @returns {void}
*/
processInit() {
this.options = {"product_container":".products.products-grid:not(.amasty-banners), .products.product-list-container:not(.amasty-banners)","product_link":".product-item","loadingImage":"https:\/\/www.adopt.com\/static\/version1772544398\/frontend\/Adopt\/hyva\/fr_FR\/Amasty_Scroll\/images\/loader.svg","pageNumbers":"0","pageNumberContent":"Page #","pageNumberStyle":"button","buttonColor":"#ffffff","buttonColorPressed":"#ffffff","loadingafterTextButton":"Voir plus de produits","loadingbeforeTextButton":"Voir les produits pr\u00e9c\u00e9dents","backToTop":{"enabled":"0","style_desktop":"text","style_mobile":"arrow","color":"#ffffff","styles":"background: #dadada;"},"backToTopText":"Back to Top","current_page":1,"footerSelector":".page-footer","actionMode":"button"};
if (document.querySelectorAll(this.options.product_container).length) {
this._initNodes();
this.initialize();
}
},
/**
* @private
* @returns {void}
*/
_initNodes() {
this.loadButtonElement = document.createElement('button');
this.loadButtonElement.setAttribute('class', 'btn btn-primary block mx-auto ' + this.classes.loadButton);
this.loadButtonElement.setAttribute('style', this.options['loadNextStyle']);
this.loadButtonTextElement = document.createElement('span');
this.loadButtonTextElement.setAttribute('class', this.classes.text);
const loader = document.querySelector(this.classes.loadingIconSource);
const productContainer = document.querySelector(this.options.product_container);
if (!productContainer) {
return;
}
const productContainerParent = productContainer.parentElement;
this.loadingBlock.before.node = productContainerParent.insertBefore(
loader.content.firstElementChild.cloneNode(true),
productContainer
);
this.loadingBlock.after.node = productContainerParent.insertBefore(
loader.content.firstElementChild.cloneNode(true),
productContainerParent.lastChild
);
},
/**
* @returns {void}
*/
initialize() {
this.next_data_cache = "";
this.pagesLoaded = [];
this._initPagesCount();
this.disabled = 1;
if (!this._validate()) {
return;
}
this.disabled = 0;
this.type = this.options['actionMode'];
this.pagesBeforeButton = this.options['pages_before_button'];
this.currentPage = this._getCurrentPage();
this.pagesLoaded.push(this.currentPage);
if (this.type === 'button') {
this._generateButton('before');
this._generateButton('after');
}
this._preloadPages();
this._hideToolbars();
this.initPageStepForwardListener(this.currentPage);
this._pagePositionAfterStepBack();
},
/**
* @private
* @returns {boolean}
*/
_validate() {
switch (true) {
case !this.options['product_container'] || document.querySelectorAll(this.options['product_container']).length === 0 :
console.warn('Please specify "Products Group" DOM selector in module settings.');
return false;
case !this.options['product_link'] || document.querySelectorAll(this.options['product_link']).length === 0 :
console.warn('Please specify "Product Link" DOM selector in module settings.');
return false;
case !this.options['footerSelector'] || document.querySelectorAll(this.options['footerSelector']).length === 0 :
console.warn('Please specify "Footer Selector" DOM selector in module settings.');
return false;
case this.pagesCount <= 1 :
return false;
}
return true;
},
/**
* @private
* @returns {void}
*/
_externalAfterAjax() {
this.insertedPages++;
try {
if (document.getElementsByTagName('head')[0].innerHTML.indexOf('Infortis') > -1) {
document.dispatchEvent('last-swatch-found');
}
if (this.insertedPages < this.pagesBeforeButton) {
return;
}
if (this.type === 'auto' && this.options['origActionMode'] === 'combined') {
this.changeType('button');
}
if (this.type === 'button' && this.options['origActionMode'] === 'combined_button_auto') {
this.changeType('auto');
}
} catch (e) {
console.warn(e);
}
},
/**
* @param {Node} productBlock
* @returns {void}
*/
beforeInsertProductBlock(productBlock) {
// const formKey = hyva.getFormKey();
// productBlock.querySelector('[name="form_key"]').value = formKey;
},
/**
* @param {string} requestUrl
* @param {callback} successCallback
* @returns {void}
*/
doAjax(requestUrl, successCallback) {
fetch(requestUrl, {
method: "GET",
headers: {
"X-Requested-With": "XMLHttpRequest",
},
})
.then(response => {
if (response.ok) {
return response.json();
} else {
console.warn("GET request failed", response);
this._stop();
}
})
.then(data => {
if (data) {
this.preprocessRawAjaxResponse(successCallback, data);
}
});
},
/**
* @param {callback} successCallback
* @param {Object} response
*/
preprocessRawAjaxResponse(successCallback, response) {
if (typeof response === 'string' || response instanceof String) {
try {
response = JSON.parse(response)
} catch (e) {
return this.handleUnexpectedResponse(response);
}
}
if (response !== null
&& response.hasOwnProperty('categoryProducts')
&& response.hasOwnProperty('currentPage')
&& response.categoryProducts.trim().length !== 0
) {
successCallback.call(this, response);
} else {
this.handleUnexpectedResponse(response);
}
},
/**
* @param {Object} response
*/
handleUnexpectedResponse(response) {
console.warn('Amasty_Scroll: invalid response from server.', {response: response});
this._stop();
},
/**
* @private
* @returns {void}
*/
_initPagesCount() {
const amPager = document.querySelector(this.amPageCountSelector);
let parent;
let childs;
let limit;
let allProducts;
let result;
this.pagesLoaded = [];
if (amPager) {
this.pagesCount = parseInt(amPager.innerHTML);
return;
}
parent = document.querySelectorAll(this.totalAmountSelector)[0];
if (parent) {
childs = parent.querySelectorAll(this.totalNumberSelector);
if (parent && childs.length >= 3) {
limit = document.querySelector('.limiter-options').value;
if (childs[2].textContent > 0 && limit) {
allProducts = childs[2].textContent;
result = Math.ceil(parseInt(allProducts) / parseInt(limit));
if (result > 1) {
this.pagesCount = result;
return;
}
}
}
}
this.pagesCount = 1;
},
/**
* @param {string} type
*/
changeType(type) {
if (this.isReinitialized) {
return;
}
switch (type) {
case 'button':
this.type = 'button';
this.$nextTick(() => {
this._generateButton('before');
this._generateButton('after');
});
break;
case 'auto':
this.type = 'auto';
break;
}
this.isReinitialized = true;
},
/**
* @private
* @returns {void}
*/
_preloadPages() {
const productContainer = document.querySelector(this.options['product_container']);
let pageNumEl;
productContainer.setAttribute('amscroll-page', this.currentPage);
productContainer.classList.add('amscroll-page');
if (this.options['pageNumbers'] === '1') {
pageNumEl = this._generatePageTitle(this.currentPage);
if (pageNumEl) {
productContainer.before(pageNumEl);
}
}
this._preloadPageAfter(this.currentPage);
this._preloadPageBefore(this.currentPage);
},
/**
* @returns {number}
* @private
*/
_getCurrentPage() {
let currentPage = parseInt(this.options['current_page']);
if (currentPage > this.pagesCount) {
currentPage = this.pagesCount;
}
return currentPage;
},
/**
* @private
* @param {number} page
* @returns {void}
*/
_preloadPageAfter(page) {
const nextPage = page + 1;
if (nextPage && nextPage <= this.pagesCount) {
this.next_data_url = this._generateUrl(nextPage, 1);
this.pagesLoaded.push(nextPage);
this.flag_next_cache = 1;
this.type !== 'button' && this.loadingBlock.after.node?.classList.remove('hidden');
this.doAjax(this.next_data_url, (data) => {
this.flag_next_cache = 0;
this.next_data_cache = data;
this.type !== 'button' && this.loadingBlock.after.node?.classList.add('hidden');
this.showButton(this.afterButton);
});
this.next_data_url = '';
}
},
/**
* @private
* @param {number} page
* @returns {void}
*/
_preloadPageBefore(page) {
const prevPage = page - 1;
if (prevPage && prevPage >= 1) {
this.prev_data_url = this._generateUrl(prevPage, 1);
this.pagesLoaded.unshift(prevPage);
this.flag_prev_cache = 1;
this.type !== 'button' && this.loadingBlock.before.node?.classList.remove('hidden');
this.doAjax(this.prev_data_url, (data) => {
this.flag_prev_cache = 0;
this.prev_data_cache = data;
this.type !== 'button' && this.loadingBlock.before.node?.classList.add('hidden');
this.showButton(this.beforeButton);
});
this.prev_data_url = '';
}
},
/**
* @private
* @returns {void}
*/
_stop() {
this.disabled = 1;
this._showToolbars();
document.querySelector(`.${this.classes.loadingBlock}`).style.display = 'none';
},
/**
* @private
* @returns {void}
*/
_getAdditionalBlockHeight() {
if (this.additionalHeight === null) {
let height = 0;
const pageBottom = document.querySelectorAll('.page-bottom');
const blockAfterProducts = document.querySelectorAll('.main .products ~ .block-static-block');
if (blockAfterProducts.length) {
height += blockAfterProducts.offsetHeight;
}
if (document.querySelectorAll(this.options.footerSelector).length) {
document.querySelectorAll(this.options.footerSelector).forEach((footer) => {
height += footer.offsetHeight;
});
}
if (pageBottom.length > 0) {
height += pageBottom[0].offsetHeight;
}
this.additionalHeight = height;
}
return this.additionalHeight;
},
/**
* @private
* @returns {void}
*/
_initPaginator() {
if (this.disabled) {
return;
}
let scroll_pos = window.scrollY;
let diff = document.querySelector('body').offsetHeight - window.innerHeight;
diff -= this._getAdditionalBlockHeight();
diff = 0.8 * diff;
if (scroll_pos < this.lastScrollPos) {
this.isScrolledBack = true;
}
this.lastScrollPos = scroll_pos;
if (scroll_pos >= diff && this.is_loading === 0) {
this._loadFollowing();
}
if (scroll_pos <= this._getTopContainersHeight() && (this.is_loading === 0 && this._isScrolledBack())) {
this._loadPrevious();
}
this._calculateCurrentScrollPage(scroll_pos);
document.addEventListener("DOMContentLoaded", (event) => {
if (window.innerHeight > document.querySelector(this.options['product_container']).offsetHeight && '' !== this.next_data_url) {
this._loadFollowing();
}
});
},
/**
* @private
* @returns {void}
*/
_isScrolledBack() {
return this.isScrolledBack;
},
/**
* @param {number} scroll_pos
* @private
* @returns {void}
*/
_calculateCurrentScrollPage(scroll_pos) {
if (Math.abs(scroll_pos - this.last_scroll) > window.innerHeight * 0.1) {
this.last_scroll = scroll_pos;
this._updateUrlAndCurrentPage();
}
},
/**
* @private
* @returns {void}
*/
_updateUrlAndCurrentPage() {
const productContainers = document.querySelectorAll(this.options['product_container']);
productContainers.forEach((container, index) => {
if (this._mostlyVisible(container, index)) {
var page = parseInt(container.getAttribute('amscroll-page'));
if (page && page !== this.currentPage) {
var newUrl = this._generateUrl(page, 0);
if (!window.history.state || newUrl !== window.history.state.url) {
window.history.replaceState({url: newUrl}, '', newUrl);
}
this.currentPage = page;
}
return false;
}
});
},
/**
* @private
* @returns {void}
*/
_loadFollowing() {
if (this.flag_next_cache && this.type !== 'button') {
this.loadingBlock.after.node?.classList.remove('hidden');
}
if (this.next_data_url !== "" || this.next_data_cache) {
if (this.type !== 'button') {
this.loadingBlock.after.node?.classList.remove('hidden');
}
if (this.next_data_cache) {
this.showFollowing(this.next_data_cache);
} else {
if (!this.flag_next_cache) {
this.is_loading = 1;
this.doAjax(this.next_data_url, (data) => {
this.showFollowing(data);
});
}
}
}
},
/**
* @param {Object} data
* @returns {void}
*/
showFollowing(data) {
if (data.categoryProducts) {
if (this.type === 'button') {
if (this.canShowAfter) {
this.is_loading = 0;
this.canShowAfter = false;
} else {
return;
}
}
this.next_data_url = '';
this.next_data_cache = false;
this.loadingBlock.after.node?.classList.add('hidden');
this._insertNewProductBlock(data, 'after');
this._afterShowFollowing();
}
},
/**
* @private
* @returns {void}
*/
_afterShowFollowing() {
const nextPage = this.pagesLoaded[this.pagesLoaded.length - 1] + 1;
if (nextPage && nextPage <= this.pagesCount && this.pagesLoaded.indexOf(nextPage) === -1) {
this.next_data_url = this._generateUrl(nextPage, 1);
this.pagesLoaded.push(nextPage);
this.flag_next_cache = 1;
this.doAjax(this.next_data_url, (preview_data) => {
this.flag_next_cache = 0;
this.next_data_cache = preview_data;
window.dispatchEvent(new Event('scroll'));
this.showButton(this.afterButton);
});
}
this.is_loading = 0;
},
/**
* @private
* @returns {void}
*/
_loadPrevious() {
if (this.flag_prev_cache && this.type !== 'button') {
this.loadingBlock.before.node?.classList.remove('hidden');
}
if (this.prev_data_url !== "" || this.prev_data_cache) {
if (this.type !== 'button') {
this.loadingBlock.before.node?.classList.remove('hidden');
}
if (this.prev_data_cache) {
this.showPrevious(this.prev_data_cache);
} else {
if (!this.flag_prev_cache) {
this.is_loading = 1;
this.doAjax(this.prev_data_url, (data) => {
this.showPrevious(data);
});
}
}
}
},
/**
* @param {Object} data
* @returns {void}
*/
showPrevious(data) {
if (data.categoryProducts) {
if (this.type === 'button') {
if (this.canShowBefore) {
this.is_loading = 0;
this.canShowBefore = false;
} else {
return;
}
}
this.prev_data_cache = false;
this.prev_data_url = '';
this.loadingBlock.before.node?.classList.add('hidden');
this._insertNewProductBlock(data, 'before');
this._afterShowPrevious();
}
},
/**
* @private
* @returns {void}
*/
_afterShowPrevious() {
const prevPage = this.pagesLoaded[0] - 1;
if (prevPage && prevPage <= this.pagesCount && this.pagesLoaded.indexOf(prevPage) === -1) {
this.prev_data_url = this._generateUrl(prevPage, 1);
this.pagesLoaded.unshift(prevPage);
this.flag_prev_cache = 1;
this.doAjax(this.prev_data_url, (preview_data) => {
this.flag_prev_cache = 0;
this.prev_data_cache = preview_data;
window.dispatchEvent(new Event('scroll'));
this.showButton(this.beforeButton);
});
}
this.is_loading = 0;
},
/**
* @private
* @param {string} position
* @returns {void}
*/
_generateButton(position) {
if (this.type !== 'button') {
return;
}
if ((position === 'before' && this.pagesLoaded.indexOf(1) !== -1
&& (document.querySelector(this.pageSelector.replace('%1', this.pageFirst)) || this.currentPage === this.pageFirst))
) {
return;
}
if (position === 'after' && this.pagesLoaded.indexOf(this.pagesCount) !== -1
&& (document.querySelector(this.pageSelector.replace('%1', this.pagesCount)) || this.currentPage === this.pagesCount)) {
return;
}
const buttonElement = this.loadButtonElement.cloneNode(true);
const textElement = this.loadButtonTextElement.cloneNode(true);
const color = this.options['buttonColor'];
const buttonSelector = `.${this.classes.loadButton}.-${position}`;
textElement.textContent = this.options[`loading${position}TextButton`];
buttonElement.append(textElement);
buttonElement.style.color = color;
buttonElement.style.borderColor = color;
buttonElement.setAttribute('amscroll_type', position);
buttonElement.classList.add(`-${position}`);
if (position === 'after') {
if (this.afterButton) {
this.afterButton.remove();
}
this._insertBlockInTheEnd(buttonElement.outerHTML);
this.afterButton = document.querySelector(buttonSelector);
} else {
buttonElement.className += ' mb-4 mt-2';
if (this.beforeButton) {
this.beforeButton.remove();
}
this._insertBlockInTheBegin(buttonElement.outerHTML);
this.beforeButton = document.querySelector(buttonSelector);
}
this.$nextTick(() => {
const buttons = document.querySelectorAll(`.${this.classes.loadButton}[amscroll_type="${position}"]`);
buttons.forEach((button) => {
if (!!button.dataset.amscrollHasEvent) {
return;
}
button.addEventListener('click', (event) => {
this.buttonClick(event);
});
button.dataset.amscrollHasEvent = true;
});
});
},
/**
* @param {Node} buttonElement
* @returns {void}
*/
showButton(buttonElement) {
if (buttonElement) {
buttonElement.style.display = 'block';
}
},
/**
* @param {Event} event
* @returns {void}
*/
buttonClick(event) {
const element = event.currentTarget;
const type = element.getAttribute('amscroll_type');
element.style.color = this.options['buttonColorPressed'];
if (type === 'after') {
this.canShowAfter = true;
this._loadFollowing();
} else {
this.canShowBefore = true;
this._loadPrevious();
}
this.$nextTick(() => {
this._updateUrlAndCurrentPage();
});
},
/**
* @private
* @param {Object} data
* @param {string} position
* @returns {void}
*/
_insertNewProductBlock(data, position) {
let htmlData = data.categoryProducts;
let tmp = document.createElement('div');
tmp.innerHTML = htmlData;
let html = tmp.querySelector('section');
this._removeToolbars(html);
const productContainer = html.querySelector(this.options['product_container']);
productContainer.classList.add('amscroll-pages');
productContainer.setAttribute('amscroll-page', data.currentPage);
this.beforeInsertProductBlock(productContainer);
if (this.options['pageNumbers'] == '1') {
var pageNumEl = this._generatePageTitle(data.currentPage);
if (pageNumEl) {
productContainer.before(pageNumEl);
}
}
if ('after' === position) {
this.afterButton?.remove();
this._moveScriptToTop(html);
this._insertBlockInTheEnd(html.innerHTML);
window.setAjaxCart();
} else {
this._moveScriptToTop(html);
const element = this._insertBlockInTheBegin(html.innerHTML);
window.setAjaxCart();
const itemHeight = element !== undefined ? element.offsetHeight : 0;
if (this.type != 'button') {
window.scrollTo(0, window.scrollTop + itemHeight);
}
}
this.$nextTick(() => {
const currentProductContainer = document.querySelector(`.amscroll-pages[amscroll-page="${data.currentPage}"]`);
this._addObserverToProductLink(currentProductContainer);
if (this.type == 'button') {
this._generateButton(position);
}
});
this.initPageStepForwardListener(data.currentPage);
},
/**
* @private
* @param {Node} productContainer
* @returns {void}
*/
_addObserverToProductLink(productContainer) {
this._externalAfterAjax();
const links = productContainer.querySelectorAll('.item a');
links.forEach((link) => {
link.addEventListener('click', (event) => {
try {
const parent = event.target.closest('.amscroll-pages');
const page = parent ? parent.getAttribute('amscroll-page') : null;
if (page) {
var newUrl = this._generateUrl(page, 0);
if (!window.history.state || newUrl !== window.history.state.url) {
window.history.replaceState(
{
url: newUrl
},
'',
newUrl
);
}
}
} catch (e) {
console.warn(e);
}
});
});
},
/**
* @private
* @param {number} page
* @param {number} addScroll
* @returns {string}
*/
_generateUrl(page, addScroll) {
const parameters = addScroll > 0 ? `p=${page}&is_scroll=${addScroll}` : `p=${page}`;
const currentUrl = window.location.origin + window.location.pathname;
const urlHasArgument = currentUrl.includes('?');
const parameterType = urlHasArgument ? '&' : '?';
const currentParameters = new URLSearchParams(window.location.search);
const newParameters = new URLSearchParams(parameters);
const newUrlParams = new URLSearchParams({
...Object.fromEntries(currentParameters),
...Object.fromEntries(newParameters)
});
return `${currentUrl}${parameterType}${newUrlParams}`;
},
/**
* @private
* @returns {void}
*/
_hideToolbars() {
if (document.querySelector('.products ~ ' + this.toolbarSelector)) {
document.querySelector('.products ~ ' + this.toolbarSelector).style.display = 'none';
}
},
/**
* @private
* @returns {void}
*/
_showToolbars() {
document.querySelector(this.totalAmountSelector).style.display = 'block';
document.querySelector(`.products ~ ${this.toolbarSelector}`).style.display = 'block';
},
/**
* @private
* @param {number} page
* @returns {HTMLDivElement|boolean}
*/
_generatePageTitle(page) {
if (document.querySelector(`#amscroll-page-num${page}`)) {
return false;
}
const pageNumEl = document.createElement('div');
pageNumEl.setAttribute('class', `product-list-container amscroll-page-num -amscroll-${this.options['pageNumberStyle']}`);
pageNumEl.setAttribute('id', `#amscroll-page-num${page}`);
pageNumEl.textContent = `${this.options['pageNumberContent']}${page}`;
return pageNumEl;
},
/**
* @private
* @param {Node} element
* @param {number} index
* @returns {boolean}
*/
_mostlyVisible(element, index) {
const visible = element.offsetParent !== null;
const scroll_pos = window.scrollY;
const window_height = window.innerHeight;
const el_top = element.offsetTop;
const el_height = element.offsetHeight;
const el_bottom = el_top + el_height;
const isVisible = ((el_bottom - el_height * 0.25 > scroll_pos)
&& (el_top < (scroll_pos + 0.5 * window_height))
&& visible) || (index == 0 && scroll_pos < el_top);
return ((el_bottom - el_height * 0.25 > scroll_pos)
&& (el_top < (scroll_pos + 0.5 * window_height))
&& visible) || (index == 0 && scroll_pos < el_top);
},
/**
* @private
* @returns {number}
*/
_getTopContainersHeight() {
if (!this.topContainersHeight) {
let result = document.querySelector('.page-header').offsetHeight;
if (document.querySelectorAll(".main .block-static-block ~ .products, .main .block-static-block ~ #amasty-shopby-product-list").length) {
result += document.querySelector(".main .block-static-block").offsetHeight;
}
this.topContainersHeight = 0.9 * result;
}
return this.topContainersHeight;
},
/**
* @returns {void}
*/
resolveBackToTopVisibility() {
if (this.options?.backToTop?.enabled !== '1') {
return;
}
this.isBackToTopVisible = document.body.scrollTop > this.backToTopTriggerHeight
|| document.documentElement.scrollTop > this.backToTopTriggerHeight;
},
/**
* @private
* @returns {void}
*/
_scrollToTop() {
const items = document.querySelectorAll(`[amscroll-page="${currentPage}"] .product-item a`);
items.forEach((item) => {
item.addEventListener('click', (event) => {
var scrollPositionAfterStepBackData = {
pageUrl: this.getCurrentUrl(),
clickedProductLink: event.currentTarget.attributes.href.value
};
hyva.getBrowserStorage().setItem('am-scroll-go-back-data', JSON.stringify(scrollPositionAfterStepBackData));
});
});
},
/**
* @private
* @param {Node} block
* @returns {void}
*/
_insertBlockInTheEnd(block) {
const productContainer = document.querySelectorAll(this.options['product_container']);
productContainer[productContainer.length - 1].insertAdjacentHTML('afterend', block);
},
/**
* @private
* @param {Node} block
* @returns {Node}
*/
_insertBlockInTheBegin(block) {
const element = document.querySelector(`.${this.classes.pageNumber}`)
?? document.querySelector(this.options['product_container']);
this.beforeButton?.remove();
element.insertAdjacentHTML('beforebegin', block);
return element;
},
/**
* @returns {string}
*/
getCurrentUrl() {
return location.href.split('?')[0];
},
/**
* @returns {void}
*/
getSavedAfterStepBackData() {
let savedData = hyva.getBrowserStorage().getItem('am-scroll-go-back-data');
if (savedData) {
savedData = JSON.parse(savedData);
this.afterStepBackData = savedData;
hyva.getBrowserStorage().removeItem('am-scroll-go-back-data');
}
return this.afterStepBackData;
},
/**
* @param {number} currentPage
*/
initPageStepForwardListener(currentPage) {
const items = document.querySelectorAll(`[amscroll-page="${currentPage}"] .product-item a`);
items.forEach((item) => {
item.addEventListener('click', (event) => {
var scrollPositionAfterStepBackData = {
pageUrl: this.getCurrentUrl(),
clickedProductLink: event.currentTarget.attributes.href.value
};
hyva.getBrowserStorage().setItem('am-scroll-go-back-data', JSON.stringify(scrollPositionAfterStepBackData));
});
});
},
/**
* @private
* @returns {void}
*/
_pagePositionAfterStepBack() {
const savedScrollData = this.getSavedAfterStepBackData();
if (savedScrollData) {
const productItem = document.querySelector(`a[href="${savedScrollData.clickedProductLink}"]`);
history.scrollRestoration = 'auto';
if (productItem) {
history.scrollRestoration = 'manual';
productItem.scrollIntoView();
}
}
},
/**
* @private
* @param {string} html
*/
_moveScriptToTop(html) {
const htmlScripts = html.getElementsByTagName('script');
if (htmlScripts.length > 0) {
const scripts = [];
for (let i = 0; i < htmlScripts.length; i++) {
scripts.push(htmlScripts[i]);
}
for (let i = 0; i < scripts.length; i++) {
let script = document.createElement('script');
script.innerHTML = scripts[i].innerHTML;
document.head.appendChild(script);
scripts[i].parentNode.removeChild(scripts[i]);
}
}
},
/**
* @private
* @param {string} html
*/
_removeToolbars(html) {
const contentToolbars = html.querySelectorAll(this.toolbarSelector);
contentToolbars.forEach((toolbar) => {
toolbar.previousElementSibling.remove();
toolbar.remove();
});
},
/**
* @param {Node} elem
* @param {string} selector
* @returns {Element|null}
*/
getNext(elem, selector) {
let nextElem = elem.nextElementSibling;
if (!selector) {
return nextElem;
}
if (nextElem && nextElem.matches(selector)) {
return nextElem;
}
return null;
}
};
}
</script>
<div x-data="initAmScroll()"
x-init="processInit"
@scroll.window.debounce="_initPaginator()">
<div x-cloak
x-show="isBackToTopVisible"
@scroll.window.debounce="resolveBackToTopVisibility">
<template id="amscroll-loading-icon-source">
<div class="amscroll-loading-block hidden loader">
<img src="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/loader-1.gif"
alt="Chargement en cours..." loading="lazy">
</div>
</template>
</div>
</div>
<div class="notranslate" style="display:none"> <span class="nosto_page_type" style="display:none">front</span>
</div>
<div class="nosto_element" id="frontpage-nosto-1"></div>
<div class="nosto_element" id="frontpage-nosto-2"></div>
<div class="nosto_element" id="frontpage-nosto-3"></div>
<div class="nosto_element" id="frontpage-nosto-4"></div>
</div></div><script>
function initLastAddedToCartPanel() {
return {
currentProduct: null,
open: false,
isMobile: window.outerWidth < 768,
setLastProductAddedToCart(detail) {
this.currentProduct = detail;
this.openMiniCart(detail);
},
openMiniCart(detail) {
this.open = true;
this.resizeHeight();
document.body.style.overflow = 'hidden';
},
closeMiniCart() {
this.open = false;
this.currentProduct = null;
document.body.style.removeProperty('overflow');
},
resizeHeight() {
this.$nextTick(() => {
if (this.isMobile && document.querySelector('.page-header')) {
this.$refs.minicart.style.maxHeight = (window.innerHeight - document.querySelector('.page-header').offsetHeight) + 'px';
}
})
},
sendViewCartEvent() {
window.dataLayer?.push({
'event': 'voir_le_panier',
'element': 'Notification Ajout Panier'
});
}
}
}
function escapeHtml(unsafe) {
return unsafe
.replace('<p>', "")
.replace('</p>', "")
}
</script>
<section id="mini-cart" class="mini-cart">
<div x-data="initLastAddedToCartPanel()" x-cloak class="fixed z-50"
@last-added-cart-pannel.window="setLastProductAddedToCart($event.detail)"
@keydown.window.escape="closeMiniCart()">
<div class="backdrop"
x-show="open"
x-transition:enter="ease-in-out duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="ease-in-out duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"
@click="closeMiniCart()"
aria-label="Close panel"></div>
<div
class="minicart overflow-y-auto hide-scrollbar scroll-smooth fixed bottom-0 md:inset-y-0 right-0 z-50 max-h-full h-full w-full md:max-w-md w-full bg-white px-3.75 bg-white flex flex-col gap-3.75 md:gap-6 rounded-t-lg md:rounded-t-none"
@click.away="closeMiniCart()"
x-show="open"
x-ref="minicart"
x-transition:enter="transform transition ease-in-out duration-300"
x-transition:enter-start="translate-y-full md:translate-y-0 md:translate-x-full"
x-transition:enter-end="translate-y-0 md:translate-x-0"
x-transition:leave="transform transition ease-in-out duration-300"
x-transition:leave-start="translate-y-0 md:translate-x-0"
x-transition:leave-end="translate-y-full md:translate-y-0 md:translate-x-full">
<div class="flex items-center justify-between py-6">
<div class="flex items-center gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="valide-colored" version="1.1" x="0px" y="0px" viewbox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve" class="w-5 h-auto" width="24" height="24" role="img">
<path fill="#4BBFA7" d="M20,10c0-5.5-4.5-10-10-10C4.5,0,0,4.5,0,10c0,5.5,4.5,10,10,10C15.5,20,20,15.5,20,10z"/>
<path fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" d="M7.5,9.7l2,2l3-3.5"/>
<title/></svg>
<span class="uppercase text-anthracite-600 font-medium font-montserrat text-base leading-4 tracking-spaced">
Produit Ajouté </span>
</div>
<button type="button" class="cursor-pointer" @click="closeMiniCart()" aria-label="Fermer">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="cross-menu" version="1.1" x="0px" y="0px" viewbox="0 0 15.5 15.5" enable-background="new 0 0 15.5 15.5" xml:space="preserve" class="text-lavender w-4.5 h-auto" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M0.8,14.8l14-14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14.8,14.8l-14-14"/>
<title/></svg>
</button>
</div>
<template x-if="currentProduct != null">
<div class="flex flex-row gap-4 -mt-6 md:py-3.75">
<img class="w-[5.938rem] h-[5.938rem] object-center object-cover"
:src="currentProduct.image" alt="">
<div class="flex flex-col gap-3 font-montserrat font-medium w-full">
<div class="flex items-start justify-between gap-2">
<div class="flex flex-col gap-2 text-anthracite-500">
<span x-text="currentProduct.name" class="text-base leading-5"></span>
<span class="uppercase text-tiny leading-[0.813rem]"
x-text="escapeHtml(currentProduct.short_description)"></span>
</div>
<div class="flex flex-col gap-1">
<span class="text-base leading-4"
:class="{ 'text-pink': Number.parseFloat(currentProduct.old_price) > Number.parseFloat(currentProduct.final_price) }"
x-text="hyva.formatPrice(currentProduct.final_price)"></span>
<template x-if="Number.parseFloat(currentProduct.old_price) > Number.parseFloat(currentProduct.final_price)">
<span class="text-anthracite-400 text-sm leading-[0.875rem] line-through"
x-text="hyva.formatPrice(currentProduct.old_price)"></span>
</template>
</div>
</div>
</div>
</div>
</template>
<div class="flex flex-col gap-3.75">
<div class="bg-lavender-300 rounded-[10px] px-3.5 py-3">
<div x-data="initIncentiveCart"
class="incentiveBar hidden flex flex-col gap-2"
:class="{'hidden': isLoading}"
@private-content-loaded.window="calcFreeShipping($event.detail.data.cart)">
<div class="text-xs md:text-sm font-medium leading-none md:leading-none pb-2" x-show="amountStep > 0">
<span class="text-lavender">Plus que <span x-html="amountStep" ></span> €</span>
<span>pour votre <span x-text="labelShippingStep"></span></span>
</div>
<template x-if="(amountStep < 0 && !freeGift2Amount && !freeGift3Amount) || (!freeGift2Amount && !freeGift3Amount)">
<div class="text-xs md:text-sm font-medium leading-none md:leading-none flex flex-col gap-2">
<div x-show="amountStep < 0 && !freeGift2Amount && !freeGift3Amount">
Livraison offerte </div>
<div x-show="!freeGift2Amount && !freeGift3Amount" class="w-full flex flex-row">
<span class="w-3/4 shrink-0 block border-b-[7px] border-lavender transition-all"
:style="calcBarSize('step1')"></span>
<span class="w-full block border-b-[7px] border-lavender-400"></span>
</div>
</div>
</template>
<div x-show="freeGift2Amount && !freeGift3Amount" class="h-20 md:h-24 flex flex-col">
<div class="text-xs md:text-sm font-medium leading-none md:leading-none my-auto">
<div class="relative w-full flex">
<div class="w-1/3 relative">
<div class="w-full flex flex-row">
<span class="shrink-0 block border-b-[7px] rounded-l-lg border-lavender transition-all"
:style="calcBarSize('step1')"></span>
<span class="w-full block border-b-[7px] rounded-l-lg border-lavender-400"></span>
</div>
<div :class="{'text-lavender': amountStep1 < 0}"
class="w-[70px] flex flex-col justify-center items-center absolute left-[calc(100%_-_35px)] bottom-[-28px]">
<span class="text-center">Livraison offerte</span>
<span class="text-2xl text-[#FFABFF]">|</span>
<span x-text="freeShippingValue"></span>
</div>
</div>
<div class="w-2/3 relative">
<div class="w-full flex flex-row">
<span class="shrink-0 block border-b-[7px] border-lavender transition-all"
:style="calcBarSize('step2')"></span>
<span class="w-full block border-b-[7px] border-lavender-400"></span>
</div>
</div>
<div class="w-1/3 relative">
<div class="w-full flex flex-row">
<span x-show="amountStep2 < 0"
class="w-full shrink-0 block border-b-[7px] rounded-r-lg border-lavender transition-all"></span>
<span class="w-full block border-b-[7px] rounded-r-lg border-lavender-400"></span>
</div>
<div :class="{'text-lavender': amountStep2 < 0}"
class="w-[70px] flex flex-col justify-center items-center absolute right-[calc(100%_-_35px)] bottom-[-28px]">
<span class="text-center" x-text="cartDatas?.freeGift2Label"></span>
<span class="text-2xl text-[#FFABFF]">|</span>
<span x-text="freeGift2Amount"></span>
</div>
</div>
</div>
</div>
</div>
<div x-show="freeGift2Amount && freeGift3Amount" class="h-20 md:h-24 flex flex-col">
<div class="text-xs md:text-sm font-medium leading-none md:leading-none my-auto">
<div class="relative w-full flex">
<div class="w-1/4 relative">
<div class="w-full flex flex-row">
<span
class="shrink-0 block border-b-[7px] rounded-l-lg border-lavender transition-all"
:style="calcBarSize('step1')"></span>
<span class="w-full block border-b-[7px] rounded-l-lg border-lavender-400"></span>
</div>
<div :class="{'text-lavender': amountStep1 < 0}"
class="w-[70px] flex flex-col justify-center items-center absolute left-[calc(100%_-_35px)] bottom-[-28px]">
<span class="text-center">Livraison offerte</span>
<span class="text-2xl text-[#FFABFF]">|</span>
<span x-text="freeShippingValue"></span>
</div>
</div>
<div class="w-1/2 relative">
<div class="w-full flex flex-row">
<span class="shrink-0 block border-b-[7px] border-lavender transition-all"
:style="calcBarSize('step2')"></span>
<span class="w-full block border-b-[7px] border-lavender-400"></span>
</div>
</div>
<div :class="{'text-lavender': amountStep2 < 0}"
class="w-[70px] flex flex-col justify-center items-center absolute mx-auto left-0 right-0 bottom-[-28px]">
<span class="text-center" x-text="cartDatas?.freeGift2Label"></span>
<span class="text-2xl text-[#FFABFF]">|</span>
<span x-text="freeGift2Amount"></span>
</div>
<div class="w-1/2 relative">
<div class="w-full flex flex-row">
<span class="shrink-0 block border-b-[7px] border-lavender transition-all"
:style="calcBarSize('step3')"></span>
<span class="w-full block border-b-[7px] border-lavender-400"></span>
</div>
</div>
<div class="w-1/4 relative">
<div class="w-full flex flex-row">
<span x-show="amountStep3 < 0"
class="w-full shrink-0 block border-b-[7px] rounded-r-lg border-lavender transition-all"></span>
<span class="w-full block border-b-[7px] rounded-r-lg border-lavender-400"></span>
</div>
<div :class="{'text-lavender': amountStep3 < 0}"
class="w-[70px] flex flex-col justify-center items-center absolute right-[calc(100%_-_35px)] bottom-[-28px]">
<span class="text-center" x-text="cartDatas?.freeGift3Label"></span>
<span class="text-2xl text-[#FFABFF]">|</span>
<span x-text="freeGift3Amount"></span>
</div>
</div>
</div>
</div>
</div>
</div> </div>
<a href="https://www.adopt.com/fr/checkout/cart"
class="btn btn-primary flex justify-center min-h-[3.75rem] w-full md:mb-3.75"
@click="sendViewCartEvent">
Voir le panier </a>
</div>
<div class="bg-lavender-300 h-full -mx-3.75">
<div class="pl-3.75 py-6">
<div x-data="initNostoItems_69af002a4ccd0()"
@last-added-cart-pannel.window="getItemsData($event.detail)">
</div>
<div id="_69af002a4ccd0"></div>
<script>
function initNostoItems_69af002a4ccd0() {
return {
isLoaded: false,
itemCount: 0,
requestSended: false,
async getTemplate(products, title, nostoElementId) {
fetch(
'https://www.adopt.com/fr/catalog/nosto/slider'
+ '?product_ids=' + products
+ '&title=' + title
+ '&nosto_element_id=' + nostoElementId
+ '&slider_block_name=' + 'nosto.minicart-lastorder-crosssell'
+ '&template=' + 'Magento_Catalog::product/slider/product-slider-crosssell.phtml'
+ '&item_template=' + 'Magento_Catalog::product/list/item-crosssell.phtml'
+ '&container_limitation_class=' + ''
+ '&add_background_color=' + ''
+ '&background_color=' + ''
+ '&display_flags=' + 'false'
,
{}
).then(response => response.json()
).then(json => {
this.isLoaded = true;
document.getElementById("_69af002a4ccd0").innerHTML = json.html
});
},
getItemsData(detail = null) {
let currentProductId = false;
if (detail !== null) {
currentProductId = detail.id
}
if (!currentProductId && this.currentProduct?.id) {
currentProductId = this.currentProduct.id
}
if (!currentProductId) {
return;
}
if (this.requestSended) {
return;
}
const self = this;
if (typeof nostojs === 'function') {
self.requestSended = true;
nostojs(api => {
let doNotTrackStatus = api.visit.isDoNotTrack();
api.visit.setDoNotTrack(doNotTrackStatus);
api.defaultSession()
.viewCart()
.setPlacements(['nosto-page-product2'])
.setProducts([{product_id: currentProductId}])
.load()
.then(response => {
let data = Object.values(response.campaigns.recommendations)[0];
if (data) {
let productIds = [];
data.products.forEach(function (product) {
productIds.push(product.product_id);
});
self.itemsData = data.products;
self.numberSlide = data.products.length;
self.getTemplate(productIds.toString(), data.title, data.result_id);
self.requestSended = false;
}
})
});
}
}
}
}
</script>
</div>
</div>
</div>
</div>
</section>
</main><footer class="page-footer"><script>
'use strict';
function initAwRbslider(config) {
return {
options: Object.assign({
autoplay: true,
pauseTimeBetweenTransitions: 3000,
slideTransitionSpeed: 500,
isStopAnimationMouseOnBanner: true,
animation: 'fade',
isRandomOrderImage: false,
sliderListSelector: '.uk-slideshow',
sliderItemSelector: '.aw-rbslider-item',
$refs: null
}, config),
slideshow: {
options: {}
},
init() {
this.options.$refs = this.$refs;
},
initSlider($refs) {
this.slideshow = window.awRbslider(this.$el, {
autoplay: this.options.autoplay,
autoplayInterval: this.options.pauseTimeBetweenTransitions,
duration: this.options.slideTransitionSpeed,
pauseOnHover: this.options.isStopAnimationMouseOnBanner,
animation: this.options.animation,
$refs: this.options.$refs,
});
this.loadSlides($refs);
// Rewrite slideshow resize method
this.slideshow.resize = () => this.resizeBanner(this.slideshow);
if (this.options.bannerSchedule.length > 0) {
if (!this.timeValidator([this.options.bannerSchedule[0]])) {
this.delayedUpdate(this.options.bannerSchedule[0]);
}
if (this.timeValidator(this.options.bannerSchedule)) {
this.sendRequest(this.options.bannerId);
}
}
},
loadSlider($refs) {
if (!window.awRbslider) {
let callbacks = [];
window.awRbslider = {
'-isLoading': (callback) => callbacks.push(callback)
};
}
if (window.awRbslider['-isLoading']) {
window.awRbslider['-isLoading'](() => this.loadSlider($refs))
}
if (!window.awRbslider['-isLoading']) {
this.initSlider($refs);
}
},
// Slideshow paused, if mouse cursor on slide navigation or dot navigation
pauseOnEnter() {
if (this.slideshow.options.pauseOnHover) {
this.slideshow.hovering = true;
}
},
resumeOnLeave() {
this.slideshow.hovering = false;
},
/**
* Recalculate the width and height of the banner
*/
resizeBanner(slideshow) {
if (slideshow.slides.length) {
let firstChild = slideshow.slides[slideshow.current];
if (firstChild.querySelector('.rbslider__video')) {
const video = firstChild.querySelector('video');
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
slideshow.slides[slideshow.current].style.height = '';
const height = video.getBoundingClientRect().height;
slideshow.container.style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
document.querySelector('.wrapperVideo').style.height = 'calc(100vh - ' + (document.querySelector('.page-header').offsetHeight - 2) + 'px)';
}
} else {
if (slideshow.options.height === 'auto' && slideshow.slides.length) {
let maxHeight = 0;
slideshow.slides.forEach((slide) => {
slide.style.height = '';
const height = slide.getBoundingClientRect().height;
if (height > maxHeight) {
maxHeight = height;
}
});
slideshow.container.style.height = maxHeight + 'px';
slideshow.slides.forEach((slide) => {
slide.style.height = maxHeight + 'px';
});
}
}
}
},
/**
* Lazy load slides
*/
loadSlides($refs) {
this.slideshow.slides.forEach((slideElem, index) => {
if (index) {
const slideImg = slideElem.querySelector('img.aw-rbslider__img');
if (slideImg && slideImg.dataset.src) {
slideImg.addEventListener('load', () => {
slideImg.classList.add('is-loaded');
});
slideImg.src = slideImg.dataset.src;
slideImg.removeAttribute('data-src');
}
}
});
},
clickSliderEvent(url, label) {
window.dataLayer?.push({
'event': 'clicSliderHP',
'text': label
});
window.location.href = url
},
/**
* Compare current time with schedule
*/
timeValidator(schedule) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
let isValid = false;
schedule.forEach(item => {
if (currentDateMinute === Math.floor(new Date(item).getTime() / 1000 / 60)) {
isValid = true;
}
});
return isValid;
},
/**
* Send request for clean banner cache
*/
sendRequest(bannerId) {
const formKey = hyva.getFormKey();
fetch(this.options.cacheCleanUrl, {
method: 'post',
headers: {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: "form_key=" + formKey + "&bannerId=" + bannerId,
mode: "cors",
credentials: "include"
});
},
/**
* Schedule call to sendRequest for future schedule item
*/
delayedUpdate(futureTime) {
const currentDateMinute = Math.floor(Date.now() / 1000 / 60);
const interval = Math.floor(new Date(futureTime).getTime() / 1000 / 60) - currentDateMinute;
if (interval > 0) {
setTimeout(() => this.sendRequest(this.options.bannerId), interval);
}
},
/**
* @private
*/
_randomSort() {
const sliderListSelector = this.options.sliderListSelector,
sliderItemSelector = this.options.sliderItemSelector;
this.$el.querySelector(sliderListSelector)
.innerHTML = Array.from(this.$el.querySelectorAll(sliderListSelector + ' ' + sliderItemSelector))
.sort(() => Math.random() - 0.5)
.map(item => item.outerHTML)
.join('');
},
}
}
</script>
<div class="footer content">
<div class="bg-white">
<div
class="max-w-footer-container px-2 md:px-8.5 xl:px-0 py-12 md:py-20 grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-x-2 md:gap-x-5 items-start text-center mx-auto">
<div class="reassurance-item mx-auto flex flex-col gap-3.5">
<div aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="help" version="1.1" x="0px" y="0px" viewbox="0 0 23.8 22.8" enable-background="new 0 0 23.8 22.8" xml:space="preserve" class="text-lavender shrink-0 h-8.75 w-auto mx-auto" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M11.9,0.5C5.6,0.5,0.5,4.7,0.5,9.9 c0.1,2.6,1.3,5.1,3.4,6.7l-2.4,5.7l6.3-3.6c1.3,0.4,2.7,0.6,4.1,0.6c6.3,0,11.4-4.2,11.4-9.4C23.3,4.7,18.2,0.5,11.9,0.5z"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M8.9,7.4c0-1.5,1.1-2.7,2.6-2.9 c1.5-0.2,2.9,0.7,3.3,2.1c0.4,1.4-0.3,2.9-1.7,3.5c-0.7,0.3-1.2,1-1.2,1.8v0.4"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d=" M11.9,14.6c0.1,0,0.2,0.1,0.2,0.2s-0.1,0.2-0.2,0.2s-0.2-0.1-0.2-0.2S11.8,14.6,11.9,14.6z"/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-anthracite-600 text-lg leading-[1.3] break-words">
<a href="https://support.adopt.com/hc/fr/requests/new">Contactez nous </a> </div>
<div class="font-medium text-sm text-anthracite-400">
<a href="https://support.adopt.com/hc/fr/requests/new">via formulaire de contact</a>. </div>
</div>
<div class="reassurance-item mx-auto flex flex-col gap-3.5">
<div aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" class="text-lavender shrink-0 h-8.75 w-auto mx-auto" data-icon="logo-myAdopt" version="1.1" viewbox="0 0 951.26 264" role="img">
<!-- Generator: Adobe Illustrator 29.5.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 141) -->
<path fill="currentColor" d="M315.14,145.46c0-23.14-19.29-39.34-38.57-39.34-20.57,0-36.77,18-36.77,39.34s16.2,39.6,37.29,39.6,38.06-16.97,38.06-39.6M315.4,85.55h7.2c9.94,0,18,8.06,18,18v102.09h-7.2c-9.94,0-18-8.06-18-18v-2.32c-7.71,13.88-24.17,23.4-42.68,23.4-31.37,0-58.37-26.22-58.37-63.26s25.46-63,59.4-63c17.49,0,33.94,7.46,41.65,21.08v-18Z"/>
<path fill="currentColor" d="M457.07,145.2c0-24.17-19.8-39.08-38.31-39.08-20.57,0-37.29,16.46-37.29,39.08s16.72,39.86,37.29,39.86,38.31-15.69,38.31-39.86M457.33,20.23h7.2c9.94,0,18,8.06,18,18v167.39h-7.2c-9.94,0-18-8.06-18-18-7.97,13.62-25.2,21.08-41.4,21.08-32.66,0-59.66-25.2-59.66-63.26s27-63,59.4-63c16.97,0,33.68,7.2,41.65,20.83V20.23Z"/>
<path fill="currentColor" d="M598.75,145.46c0-23.14-17.49-39.34-38.06-39.34s-37.8,16.2-37.8,39.34,17.23,39.6,37.8,39.6,38.06-16.2,38.06-39.6M497.69,145.46c0-38.06,28.8-63,63-63s63.25,24.94,63.25,63-29.05,63.26-63.25,63.26-63-25.2-63-63.26"/>
<path fill="currentColor" d="M740.17,145.97c0-22.63-16.46-39.86-37.29-39.86s-38.31,15.69-38.31,39.86,19.8,39.08,38.31,39.08c20.83,0,37.29-16.45,37.29-39.08M765.63,145.72c0,38.31-27,63-59.66,63-16.97,0-33.68-7.2-41.65-20.83v76.11h-7.2c-9.94,0-18-8.06-18-18V85.55h7.2c9.94,0,18,8.06,18,18,7.97-13.63,25.46-21.08,41.65-21.08,32.4,0,59.66,25.2,59.66,63.26"/>
<path fill="currentColor" d="M839.42,85.55v4.77c0,9.01-7.31,16.31-16.31,16.31h-9.4v99h-7.2c-9.94,0-18-8.06-18-18v-81h-21.6v-4.77c0-9.01,7.31-16.31,16.32-16.31h5.28v-45h7.2c9.94,0,18,8.06,18,18v27h25.71Z"/>
<path fill="currentColor" d="M908.04,10.14c-.2,1.11-1.26,1.85-2.37,1.66-1.11-.2-1.86-1.26-1.66-2.37.19-1.11,1.26-1.86,2.37-1.66,1.11.19,1.86,1.26,1.66,2.37M918.22,6.06c-7.43.87-7.12-3.43-14.45-2.78-11.01.99-13.61,14.05-14.48,18.56-.32,1.64-.57,3.13-1.21,5.11l-44.22-19.55c3.82,3.57,5.95,8.06,8.82,12.87,1.86,3.12,3.43,5.99,5.61,9.39,2.01,3.15,4.43,6.02,6.99,8.74,3.69,3.91,7.88,7.41,12.39,10.33,3.15,2.1,6.58,3.85,10.09,5.27,2.49,1.01,5.09,1.85,7.77,1.93,1.51.05,2.97-.22,4.32-.74-1.89,1.18-4.15,1.83-6.54,1.71-2.75-.12-5.42-1.02-7.98-2.08-3.23-1.34-6.39-2.93-9.35-4.8-13.57,25.22-20.17,58.35-20.17,58.35,2.57-9.27,17.56-23.16,24.26-27.49,11.28-7.29,22.15-16.44,28.76-28.33,3.91-7.03,5.53-14.9,4.94-22.91-.47-6.3,1.61-12.53,6.13-17.06.95-.95,1.98-1.81,3.07-2.59,10.43-7.46,28.3-9.08,28.3-9.08-5.25-3.54-26.52,4.39-33.03,5.15"/>
<path fill="currentColor" d="M90.78,125.12c-3.32,0-6.5.58-9.45,1.64l-.07-.03c-4.95,1.68-9.09,4.56-12.63,8.29-1.37,1.37-3.47,4.07-4.62,5.58-4.17-9.17-12.95-15.48-23.9-15.48-3.32,0-6.5.58-9.45,1.64l-.07-.03c-4.95,1.68-9.09,4.56-12.63,8.29-.78.78-1.43,1.5-1.94,2.1v-.11c0-6.32-5.12-11.44-11.43-11.44H0v68.76c0,6.31,5.12,11.43,11.43,11.43h4.57v-47.28c.15-1.98.51-3.79,1.03-5.44h.07c.08-.35.18-.69.29-1.02,2.65-6.98,8.63-10.7,15.82-10.7,10.07,0,17.34,6.7,17.34,19.13v-.11l.09,32.51v1.47c0,6.31,5.12,11.43,11.43,11.43h4.57v-46.84c.13-2.15.5-4.11,1.06-5.88.08-.35.25-.69.36-1.02,2.65-6.98,8.62-10.7,15.82-10.7,10.07,0,17.34,6.7,17.34,19.13v-.11l.09,32.51v1.47c0,6.31,5.12,11.43,11.43,11.43h4.58v-52.72h0c0-15.42-11.12-27.92-26.54-27.92"/>
<path fill="currentColor" d="M189.81,127l-4.24-1.71-4.28,10.6-19.64,46.63-19.25-47.53c-2.97-7.35-10.12-11.39-15.98-9.03l-4.24,1.71,5.38,13.31,24.43,60.47.69,1.71c.05.11.09.21.14.32l-11.21,28.5-.55,1.36c-2.37,5.85.46,12.52,6.32,14.89l4.24,1.71,44.52-108.05c2.37-5.86-.46-12.52-6.32-14.89"/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-anthracite-600 text-lg leading-[1.3] break-words">
<a href="https://www.adopt.com/fr/programme-de-fidelite-myadopt">Programme de fidélité</a> </div>
<div class="font-medium text-sm text-anthracite-400">
<a href="https://www.adopt.com/fr/programme-de-fidelite-myadopt">Rejoignez myAdopt</a> </div>
</div>
<div class="reassurance-item mx-auto flex flex-col gap-3.5">
<div aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="transport-standard" version="1.1" x="0px" y="0px" viewbox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve" class="text-lavender shrink-0 h-8.75 w-auto mx-auto" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M13.5,23.5c-1.1,0-2-0.9-2-2s0.9-2,2-2 s2,0.9,2,2S14.6,23.5,13.5,23.5z"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M5.5,23.5c-1.1,0-2-0.9-2-2s0.9-2,2-2 s2,0.9,2,2S6.6,23.5,5.5,23.5z"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M9.5,6c0.7-3.1,3.4-5.3,6.5-5.5 c3.1-0.2,6,1.7,7.1,4.7c1.1,3,0.2,6.3-2.2,8.3"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M15.5,8.5l3-3"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M12.5,16.2v-1.8h2.6c1.9,0,3.4,1.6,3.4,3.5 v3.5"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,22.5v-9.2c0-1,0.8-1.8,1.7-1.8h8.6 c0.9,0,1.7,0.8,1.7,1.8V17"/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-anthracite-600 text-lg leading-[1.3] break-words">
<a href="https://www.adopt.com/fr/livraison-retours">Livraison offerte</a> </div>
<div class="font-medium text-sm text-anthracite-400">
<a href="https://www.adopt.com/fr/livraison-retours">dès 35€ d'achat</a>
</div>
</div>
<div class="reassurance-item mx-auto flex flex-col gap-3.5">
<div aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="bank-card" version="1.1" x="0px" y="0px" viewbox="0 0 33 24" enable-background="new 0 0 33 24" xml:space="preserve" class="text-lavender shrink-0 h-8.75 w-auto mx-auto" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M29.1,0.8H3.5C2.1,0.8,1,1.9,1,3.3v17.5 c0,1.3,1.1,2.4,2.4,2.4h25.6c1.3,0,2.4-1.1,2.4-2.4V3.3C31.5,1.9,30.4,0.8,29.1,0.8z"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M1,6.9h30.5"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7.1,13h11.2"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7.1,17.1h7.1"/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-anthracite-600 text-lg leading-[1.3] break-words">
Paiement sécurisé
</div>
<div class="font-medium text-sm text-anthracite-400">
par carte bancaire, paypal, amex, apple pay et klarna </div>
</div>
<div class="reassurance-item mx-auto flex flex-col gap-3.5 hidden lg:flex">
<div aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="eclair" version="1.1" x="0px" y="0px" viewbox="0 0 16.7 23.7" enable-background="new 0 0 16.7 23.7" xml:space="preserve" class="text-lavender shrink-0 h-8.75 w-auto mx-auto" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M16.2,9.2l-9.6,14v-8.7H0.5l9.6-14v8.7H16.2z "/>
<title/></svg>
</div>
<div class="font-secondary font-bold text-anthracite-600 text-lg leading-[1.3] break-words">
<a href="https://www.adopt.com/fr/offres-commerciales.html">le 4ème offert</a> </div>
<div class="font-medium text-sm text-anthracite-400">
<a href="https://www.adopt.com/fr/offres-commerciales.html">3 parfums achetés, le 4ème offert</a> </div>
</div>
</div>
</div><div class="footer bg-pink-100"
x-data="initFooterSocialComponent()"
>
<div class="footer-socials pt-6 lg:pt-10 flex flex-row justify-center items-center">
<a aria-label="instagram"
@click.prevent="clickSocialLinkEvent('https://www.instagram.com/adoptparfums/', 'Instagram')"
href="https://www.instagram.com/adoptparfums/"
target="_blank"
class="link flex justify-center items-center p-2.5 md:p-5 text-anthracite hover:text-pink"
>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="social-instagram" version="1.1" x="0px" y="0px" viewbox="0 0 19 19" enable-background="new 0 0 19 19" xml:space="preserve" class="w-auto h-7" width="24" height="24" role="img">
<path fill="currentColor" d="M19,5.6c0-1-0.2-1.7-0.4-2.3c-0.2-0.6-0.6-1.2-1.1-1.7c-0.5-0.5-1.1-0.9-1.7-1.1c-0.6-0.2-1.3-0.4-2.3-0.4 C12.4,0,12.1,0,9.5,0S6.6,0,5.6,0.1c-1,0-1.7,0.2-2.3,0.4C2.6,0.7,2.1,1.1,1.6,1.6C1.1,2.1,0.7,2.6,0.5,3.3C0.3,3.9,0.1,4.6,0.1,5.6 C0,6.6,0,6.9,0,9.5c0,2.6,0,2.9,0.1,3.9c0,1,0.2,1.7,0.4,2.3c0.2,0.6,0.6,1.2,1.1,1.7c0.5,0.5,1.1,0.9,1.7,1.1 c0.6,0.2,1.3,0.4,2.3,0.4c1,0,1.3,0.1,3.9,0.1c2.6,0,2.9,0,3.9-0.1c1,0,1.7-0.2,2.3-0.4C17,18,18,17,18.5,15.7 c0.2-0.6,0.4-1.3,0.4-2.3c0-1,0.1-1.3,0.1-3.9C19,6.9,19,6.6,19,5.6z M17.2,13.3c0,0.9-0.2,1.4-0.3,1.8c-0.3,0.8-1,1.5-1.8,1.8 c-0.3,0.1-0.8,0.3-1.8,0.3c-1,0-1.3,0.1-3.8,0.1c-2.5,0-2.8,0-3.8-0.1c-0.9,0-1.4-0.2-1.8-0.3c-0.4-0.2-0.8-0.4-1.1-0.7 c-0.3-0.3-0.6-0.7-0.7-1.1c-0.1-0.3-0.3-0.8-0.3-1.8c0-1-0.1-1.3-0.1-3.8c0-2.5,0-2.8,0.1-3.8c0-0.9,0.2-1.4,0.3-1.8 c0.2-0.4,0.4-0.8,0.7-1.1c0.3-0.3,0.7-0.6,1.1-0.7C4.2,2,4.7,1.8,5.7,1.8c1,0,1.3-0.1,3.8-0.1c2.5,0,2.8,0,3.8,0.1 c0.9,0,1.4,0.2,1.8,0.3c0.4,0.2,0.8,0.4,1.1,0.7c0.3,0.3,0.6,0.7,0.7,1.1c0.1,0.3,0.3,0.8,0.3,1.8c0,1,0.1,1.3,0.1,3.8 C17.3,12,17.3,12.3,17.2,13.3z"/>
<path fill="currentColor" d="M9.5,4.6c-2.7,0-4.9,2.2-4.9,4.9c0,2.7,2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9C14.4,6.8,12.2,4.6,9.5,4.6z M9.5,12.7c-1.8,0-3.2-1.4-3.2-3.2c0-1.8,1.4-3.2,3.2-3.2c1.8,0,3.2,1.4,3.2,3.2C12.7,11.3,11.3,12.7,9.5,12.7z"/>
<path fill="currentColor" d="M16,4.2c0,0.6-0.5,1.1-1.1,1.1s-1.1-0.5-1.1-1.1c0-0.6,0.5-1.1,1.1-1.1C15.4,3,16,3.6,16,4.2z"/>
<title/></svg>
</a>
<a aria-label="tiktok"
@click.prevent="clickSocialLinkEvent('https://www.tiktok.com/@adoptparfums', 'Tiktok')"
href="https://www.tiktok.com/@adoptparfums"
target="_blank"
class="link flex justify-center items-center p-2.5 md:p-5 text-anthracite hover:text-pink"
>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="social-tik-tok" version="1.1" x="0px" y="0px" viewbox="0 0 17 19" enable-background="new 0 0 17 19" xml:space="preserve" class="w-auto h-7" width="24" height="24" role="img">
<path fill="currentColor" d="M9,0c-0.4,0-0.8,0.1-1,0.1C7.5,0.2,7.3,0.6,7.3,1L7,13.6v0c0,0.8-0.7,1.5-1.5,1.5c-0.8,0-1.5-0.7-1.5-1.5 c0-0.4,0.2-0.8,0.4-1c0.3-0.2,0.6-0.4,1-0.5c0.3,0,0.6-0.3,0.6-0.6L6.1,9c0-0.4-0.3-0.7-0.7-0.6C2.5,8.5,0,10.5,0,13.6 c0,3,2.4,5.4,5.5,5.4c3,0,5.5-2.4,5.5-5.4l-0.1-6.4c1.4,0.9,3.3,1.4,5.1,1.5c0.4,0,0.9-0.2,1-0.6C17,7.9,17,7.6,17,7.4 c0-0.3,0-0.5-0.1-0.7C16.8,6.2,16.3,6,16,6c-1.3-0.1-2.5-0.8-3.5-1.7c-1-0.9-1.6-2.1-1.8-3.3c-0.1-0.4-0.3-0.7-0.7-0.8 C9.7,0.1,9.4,0,9,0z"/>
<title/></svg>
</a>
<a aria-label="facebook"
@click.prevent="clickSocialLinkEvent('https://www.facebook.com/adoptparfumsdeFrance', 'Facebook')"
href="https://www.facebook.com/adoptparfumsdeFrance"
target="_blank"
class="link flex justify-center items-center p-2.5 md:p-5 text-anthracite hover:text-pink"
>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="social-facebook" version="1.1" x="0px" y="0px" viewbox="0 0 10 20" enable-background="new 0 0 10 20" xml:space="preserve" class="w-auto h-7" width="24" height="24" role="img">
<path fill="currentColor" d="M2.2,11.1V20h4.2v-8.9h2.9L10,7.4H6.5V4.7c0-0.2,0-0.4,0.2-0.6C6.8,3.9,7,3.8,7.2,3.8h2.1V0H5.5 C3.7,0.3,2.4,1.7,2.2,3.5v3.8H0V11L2.2,11.1z"/>
<title/></svg>
</a>
<a aria-label="youtube"
@click.prevent="clickSocialLinkEvent('https://www.youtube.com/channel/UCCjIIgJBhO2I0OGh4soCFbw/featured', 'Youtube')"
href="https://www.youtube.com/channel/UCCjIIgJBhO2I0OGh4soCFbw/featured"
target="_blank"
class="link flex justify-center items-center p-2.5 md:p-5 text-anthracite hover:text-pink"
>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="social-youtube" version="1.1" x="0px" y="0px" viewbox="0 0 23 16" enable-background="new 0 0 23 16" xml:space="preserve" class="w-auto h-5.5" width="24" height="24" role="img">
<path fill="currentColor" d="M15.9,0.1l0.5,0c1.7,0.1,3.4,0.2,4.1,0.4c1,0.3,1.8,1,2,2C23,4.1,23,7.1,23,7.9v0.2c0,0.4,0,3.8-0.5,5.5 c-0.3,1-1,1.8-2,2c-0.7,0.2-2.2,0.3-3.8,0.4l-0.5,0C14.3,16,12.6,16,11.8,16l-0.3,0c0,0,0,0,0,0h-0.1c0,0,0,0,0,0l-0.3,0 c-0.7,0-2.3,0-4-0.1l-0.5,0c-1.7-0.1-3.4-0.2-4.1-0.4c-1-0.3-1.8-1-2-2C0,11.9,0,8.7,0,8.1V7.9c0-0.4,0-1.7,0.1-3.1l0-0.5 C0.2,3.7,0.3,3,0.5,2.5c0.3-1,1.1-1.8,2-2c0.7-0.2,2.4-0.3,4.1-0.4l0.5,0C8.9,0,10.6,0,11.3,0l0.5,0C12.4,0,14.1,0,15.9,0.1z M9.2,4.6v6.9L15.3,8L9.2,4.6z"/>
<title/></svg>
</a>
</div>
<div class="container px-7.5 lg:flex gap-10 xl:gap-20 pt-12 pb-13">
<div class="flex flex-col h-full gap-6 lg:gap-12">
<div class="footer-newsletter bg-pink-150 p-6 pb-9"
@click.away.outside="focusInput = false; errorMessage = ''"
@click="focusInput = true"
x-defer="intersect"
x-data="initFooterNewsletterForm()">
<form class="form subscribe xl:block"
action="https://www.adopt.com/fr/newsletter/subscriber/index"
method="post"
@submit.prevent="submitForm()"
autocomplete="off"
id="footer-newsletter-validate-detail">
<div class="font-secondary font-bold text-4.5xl">
20% offerts </div>
<div class="uppercase font-medium text-sm leading-tightened tracking-spaced-lg">
en vous inscrivant à notre newsletter </div>
<div class="mt-7.5 relative">
<label for="newsletter-subscribe" class="sr-only">
Adresse email </label>
<div class="field text required w-full no-label">
<div class="control relative">
<input type="hidden"
name="is_subscribed"
value="1"
>
<input name="email"
type="email"
required
id="newsletter-subscribe"
@input="hasChanges = true; isCapValid = false;"
@input.debounce.50="callSuggestionWebService()"
@keydown.down.prevent="handleKeydown"
@keydown.tab="handleKeydown"
@keydown.up.prevent="handleKeydown"
@keydown.enter="handleKeydown"
placeholder="Mon e-mail"
@focusin="onInputFocus()"
class="bg-white rounded-full border-white w-full py-3.75 pl-6 pr-16 leading-none font-medium placeholder:text-anthracite-400"
:class="{ 'border-red': errorMessage.length > 0 }"
readonly
:autocomplete="/chrom(e|ium)/.test(navigator.userAgent.toLowerCase()) ? 'none' : 'off'">
<div class="hidden flex flex-col w-full z-10 bg-white absolute color-red border-1 border-lavender-400 max-h-[250px] overflow-y-auto"
:class="{ 'block': focusInput, 'hidden': !focusInput }"
x-ref="propcontainer"
x-show="propositions.length > 0">
<div class="pl-2 pt-3 text-xs md:text-sm md:max-w-[22.5rem] block text-red"
x-show="correctionMessage.length > 0"
x-text="correctionMessage">
</div>
<template x-for="(prop, index) in propositions" :key="index">
<div class="p-2 w-full cursor-pointer hover:bg-lavender-300"
:class="{ 'bg-lavender-300': selectedIndex === index }"
:data-index="index"
@click="setAutocompleteValue(prop.sMail)">
<span x-text="prop.sMail"></span>
</div>
</template>
</div>
<div class="pl-2 pt-3 text-xs md:text-sm md:max-w-[22.5rem] block text-red"
x-show="errorMessage.length > 0"
x-html="errorMessage">
</div>
<input name="form_key" type="hidden" value="2THM4iGsPszxiqEo" />
<button aria-label="newsletter button"
:disabled="isLoading"
class="absolute top-0 right-0 bg-anthracite text-white py-4.5 px-4 rounded-full flex items-center justify-center">
<span :class="{'opacity-0': isLoading}">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="w-4.5" width="18" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</span>
<span class="absolute top-1/2 translate-y-[-50%] left-1/2 -translate-x-1/2"
:class="{'hidden' : !isLoading}">
<svg class="addtocart-loading w-4.5 h-4.5"
viewbox="25 25 50 50">
<circle cx="50" cy="50" r="15"></circle>
</svg>
</span>
</button>
</div>
<div x-cloak class="pl-2 pt-3 text-xs md:text-sm md:max-w-[22.5rem]" :class="{ 'block': focusInput, 'hidden': !focusInput }">
<div
id="cloudflare-turnstile-newsletter-subscribe-footer"
class="cloudflare-turnstile-container"
tabindex="-1"
x-data="initTurnstileWidget_69af011995bb9()"
@turnstile-reset.window="reset()"
@private-content-loaded.window="setCustomer($event.detail.data.customer)">
<div tabindex="-1" class="cf-turnstile-wrapper">
<div tabindex="-1" class="cf-turnstile"></div>
</div>
</div>
<script>
window.turnstileWidgets = window.turnstileWidgets || {};
function initTurnstileWidget_69af011995bb9() {
return {
customer: null,
config: null,
action: "newsletter\u002Dsubscribe\u002Dfooter",
widgetId: null,
element: null,
init() {
this.loadConfig();
if (!this.shouldRender()) {
return;
}
if (window.turnstileWidgets[this.action]) {
return;
}
window.turnstileWidgets[this.action] = true;
this.element = this.$el.querySelector('.cf-turnstile');
this.renderWidget();
},
setCustomer(customer) {
this.customer = customer;
},
loadConfig() {
if (window.turnstileConfig && window.turnstileConfig.config) {
this.config = window.turnstileConfig.config;
}
},
shouldRender() {
if (!this.config || !this.config.enabled) {
return false;
}
if (this.customer && this.customer.firstname) {
return false;
}
return this.config.forms.indexOf(this.action) >= 0;
},
renderWidget() {
if (!this.element || this.widgetId !== null) {
return;
}
if (this.element.querySelector('iframe')) {
return;
}
let attempts = 0;
const maxAttempts = 30;
const interval = setInterval(() => {
attempts++;
if (window.turnstile) {
clearInterval(interval);
try {
this.widgetId = window.turnstile.render(this.element, {
sitekey: this.config.sitekey,
theme: this.config.theme,
size: 'normal',
action: this.action,
'retry': 'auto'
});
} catch (e) {
console.error('Turnstile render error:', e);
}
return;
}
if (attempts >= maxAttempts) {
clearInterval(interval);
}
}, 100);
},
reset() {
if (this.widgetId !== null && window.turnstile) {
window.turnstile.reset(this.widgetId);
}
}
};
}
</script>
<style>
.cf-turnstile-wrapper {
position: absolute;
left: -9999px;
width: 1px;
height: 1px;
opacity: 0;
pointer-events: none;
overflow: hidden;
}
</style>
<p>En indiquant votre adresse email ci-dessus, vous certifiez avoir 16 ans ou plus, vous acceptez la collecte et notre politique <a class="underline" href="https://www.adopt.com/fr/charte-de-confidentialite">de données personnelles</a> et consentez à recevoir nos propositions commerciales par voie électronique. Vous pouvez vous désinscrire ou modifier vos choix d’abonnement à tout moment à partir des liens de désinscription disponibles dans toutes nos communications ou via notre <a class="underline" href="https://support.adopt.com/hc/fr/requests/new">formulaire de contact.</a></p> </div>
</div>
</div>
</form>
</div>
<script>
function initFooterNewsletterForm() {
return {
focusInput: false,
hasCaptchaToken: 0,
hasChanges: false,
errors: 0,
isLoading: false,
isCapValid: false,
errorMessage: '',
correctionMessage: '',
propositions: {},
selectedIndex: -1,
onInputFocus() {
this.focusInput = true;
if (this.$el.hasAttribute('readonly')) {
this.$el.blur();
this.$el.removeAttribute('readonly');
this.$el.focus();
}
},
callSuggestionWebService() {
this.errorMessage = '';
if (window.capEmailController) {
window.capEmailController.abort()
}
window.capEmailController = new AbortController();
window.capEmailSignal = window.capEmailController.signal;
const $form = document.querySelector('#footer-newsletter-validate-detail');
const formData = new FormData($form);
formData.append('request', 'SEARCH');
formData.append('sInput', formData.get('email'));
fetch('https://www.adopt.com/fr/cap/email/suggest', {
method: 'POST',
body: formData,
signal: AbortSignal.any([capEmailSignal, AbortSignal.timeout(5000)]),
}).then(response =>
response.json()
).then(data=> {
if (!data.errors) {
this.propositions = {};
if (data.Mail && data.Mail.length > 0) {
this.propositions = data.Mail;
}
this.errorMessage = typeof data.sMessage === 'string'
? data.sMessage
: '';
}
else {
this.propositions = {};
this.hasCaptchaToken = 0;
}
}).catch(error => {
if (error.name === 'AbortError') {
return;
}
});
},
callValidationWebService() {
this.errorMessage = '';
this.correctionMessage = '';
const $form = document.querySelector('#footer-newsletter-validate-detail');
const formData = new FormData($form);
formData.append('request', 'PROP');
formData.append('sMail', formData.get('email'));
return fetch('https://www.adopt.com/fr/cap/email/suggest', {
method: 'POST',
body: formData,
signal: AbortSignal.timeout(5000),
}).then(response =>
response.json()
).then(data=> {
if (!data.errors) {
if (((data.iRet < 0) || ((data.iRet > 0) && (data.iRet != 2)))
||(data.iRet == 2 && (data.sCodeTraitement == '40001'))
) {
if (data.sCodeTraitement.startsWith('3')) {
this.errorMessage = typeof data.sMessage === 'string'
? data.sMessage + '<br>' + 'Veuillez valider à nouveau pour confirmer.'
: 'Une erreur s’est produite lors du traitement de votre formulaire. Veuillez réessayer ultérieurement.';
this.propositions = {};
return 'needConfirmation';
}
this.errorMessage = typeof data.sMessage === 'string'
? data.sMessage
: 'Une erreur s’est produite lors du traitement de votre formulaire. Veuillez réessayer ultérieurement.';
this.propositions = {};
return false;
}
if (data.iRet == 2 && data.Mail[0]) {
if (data.sCodeTraitement.startsWith('2')) {
this.correctionMessage = data.sMessage;
this.propositions = data.Mail;
$form.querySelector('#newsletter-subscribe').focus();
return false;
} else {
this.errorMessage = data.sMessage + '<br>' + 'Veuillez valider à nouveau pour confirmer.';
$form.querySelector('#newsletter-subscribe').value = data.Mail[0].sMail;
$form.querySelector('#newsletter-subscribe').focus();
return 'needConfirmation';
}
}
return true;
}
}).catch(error => {
return true;
});
},
setAutocompleteValue(value) {
this.hasChanges = true;
const $input = document.querySelector('#newsletter-subscribe');
$input.value = value;
$input.focus();
this.propositions = {};
this.selectedIndex = -1;
},
handleKeydown(event) {
if (!this.propositions.length) {
return;
}
let propcontainer = this.$refs.propcontainer;
if (event.key === 'ArrowDown' || event.key === 'Tab') {
event.preventDefault();
if (this.selectedIndex < this.propositions.length - 1) {
this.selectedIndex++;
}
} else if (event.key === 'ArrowUp') {
event.preventDefault();
if (this.selectedIndex > 0) {
this.selectedIndex--;
}
} else if (event.key === 'Enter' && this.selectedIndex >= 0) {
event.preventDefault();
this.setAutocompleteValue(this.propositions[this.selectedIndex].sMail);
}
if (propcontainer) {
propcontainer.scrollTop = propcontainer.querySelector(`[data-index="${this.selectedIndex}"]`).offsetTop - 100;
}
},
sendFooterNewsletterSubscribeEvent() {
window.dataLayer?.push({
'event': 'newsletterSoumission',
'category': 'Footer'
});
},
submitForm() {
if (this.isLoading) {
return;
}
const $form = document.querySelector('#footer-newsletter-validate-detail');
if (!this.isCapValid && this.hasChanges) {
this.callValidationWebService().then((validationResult) => {
if ((validationResult == true) && (this.errors === 0)) {
this.isCapValid = true;
this.hasChanges = false;
this.sendFooterNewsletterSubscribeEvent();
this.submit($form);
}
else if (validationResult == 'needConfirmation') {
this.isCapValid = true;
this.hasChanges = false;
}
else if (validationResult == false) {
this.isCapValid = false;
this.hasChanges = false;
}
});
} else if (this.isCapValid && !this.hasChanges && (this.errors === 0)) {
if (this.errors === 0) {
this.sendFooterNewsletterSubscribeEvent();
this.submit($form);
}
}
},
isTurnstileEnabled() {
const $form = document.querySelector('#footer-newsletter-validate-detail');
return $form.querySelector('input[name="cf-turnstile-response"]') !== null;
},
getTurnstileToken() {
const $form = document.querySelector('#footer-newsletter-validate-detail');
const turnstileInput = $form.querySelector('input[name="cf-turnstile-response"]');
return turnstileInput ? turnstileInput.value : null;
},
waitForTurnstileToken(callback, maxWaitTime = 15000) {
const startTime = Date.now();
const checkInterval = 100;
const check = () => {
const token = this.getTurnstileToken();
if (token) {
callback(token);
return;
}
if (Date.now() - startTime >= maxWaitTime) {
callback(null);
return;
}
setTimeout(check, checkInterval);
};
check();
},
submit($form) {
this.isLoading = true;
if (!this.isTurnstileEnabled()) {
$form.submit();
return;
}
const token = this.getTurnstileToken();
if (token) {
$form.submit();
} else {
this.waitForTurnstileToken((token) => {
$form.submit();
});
}
}
}
}
</script>
<div class="footer-reviews flex flex-col">
<div class="flex gap-4.5">
<img class=""
height="66"
width="66"
loading="lazy"
src="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/images/label-truystville.svg"
alt="Logo Trustville">
<div class="flex flex-col w-full">
<div class="font-secondary font-bold text-3xl leading-none">
<span>4.4</span>
<span>/5</span>
</div>
<div class="flex gap-1 mt-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-alone" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" enable-background="new 0 0 15 14" xml:space="preserve" class="text-pink w-4" width="24" height="24" role="img">
<path d="M15,5.3l-4.6,3.3l1.8,5.3l-4.6-3.3L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0l1.8,5.3H15z" fill="currentColor" stroke="none"/>
<title/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="star-half" version="1.1" x="0px" y="0px" viewbox="0 0 15 14" style="enable-background:new 0 0 15 14;" xml:space="preserve" class="text-pink w-4 h-auto" width="24" height="24" role="img">
<path d="M7.6,10.6L2.9,14l1.8-5.3L0,5.3h5.7L7.5,0L7.6,10.6z" fill="currentColor"/>
<g style="opacity:0.2988;">
<path d="M7.5,0l1.8,5.3H15l-4.6,3.3l1.8,5.3l-4.6-3.3L7.5,0z" fill="currentColor"/>
</g>
<title/></svg>
</div>
<div class="mt-2 text-anthracite-400 font-medium text-sm leading-tightened">
<span class="">14557</span>
<span class="">avis clients </span>
</div>
</div>
</div>
<div class="text-sm text-anthracite-400 mt-6">Nos clients aiment et recommandent adopt.</div>
<div>
<a href="https://trustville.fr/avis-clients/pc/peruda/parfumerie/adopt_com"
class="link link-simple"
target="_blank"
rel="noopener noreferrer">
Voir leurs avis </a>
</div>
</div>
</div>
<div class="flex-1 flex flex-col md:items-end h-full gap-12 lg:gap-12">
<div class="footer-links w-full">
<div class="pt-7.5 md:flex md:gap-5 md:justify-between xl:pt-0" >
<div class="border-t border-pink-150 last-of-type:border-b md:border-none pt-5 md:w-1/3 xl:pt-0"
x-data="footerComponent_69af011996802()"
@resize.window.debounce.100="width = window.innerWidth;open = width > breakpoint"
>
<button class="pb-5 text-sm tracking-spaced-lg w-full font-medium uppercase flex justify-between items-center md:hidden"
@click=" open ? open = false : open = true;"
aria-expanded="false"
:aria-expanded="open.toString()"
>
<span>L'entreprise adopt</span>
<span class="rotate-90" :class="{ '-rotate-90': open, 'rotate-90': !open }">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="w-2.75 fat-icon md:hidden" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</span>
</button>
<div class="pb-5 text-sm tracking-spaced-lg uppercase font-medium hidden md:block">
L'entreprise adopt </div>
<nav x-show="open"
class="footer-block-links transition-transform ease-out overflow-hidden origin-top transform pb-5"
aria-label="L'entreprise adopt"
>
<ul class="flex flex-col">
<li>
<a href="https://www.adopt.com/fr/nos-engagements"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fnos\u002Dengagements', 'Nos\u0020engagements')"
>
Nos engagements </a>
</li>
<li>
<a href="https://franchise.adopt.com/"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Ffranchise.adopt.com\u002F', 'Devenir\u0020franchis\u00E9')"
>
Devenir franchisé </a>
</li>
<li>
<a href="https://www.adopt.com/fr/lemag/"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Flemag\u002F', 'Le\u0020Mag')"
>
Le Mag </a>
</li>
<li>
<a href="https://www.adopt.com/fr/index-egalite-homme-femme"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Findex\u002Degalite\u002Dhomme\u002Dfemme', 'Index\u0020\u00E9galit\u00E9\u0020Homme\u002FFemme')"
>
Index égalité Homme/Femme </a>
</li>
<li>
<a href="https://www.adopt.com/fr/charte-de-confidentialite"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fcharte\u002Dde\u002Dconfidentialite', 'Charte\u0020de\u0020confidentialit\u00E9')"
>
Charte de confidentialité </a>
</li>
<li>
<a href=":Didomi.preferences.show()"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('javascript\u003ADidomi.preferences.show\u0028\u0029', 'Param\u00E8tres\u0020de\u0020cookies')"
>
Paramètres de cookies </a>
</li>
<li>
<a href="https://www.adopt.com/fr/mentions-legales"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fmentions\u002Dlegales', 'Mentions\u0020l\u00E9gales')"
>
Mentions légales </a>
</li>
<li>
<a href="https://www.adopt.com/fr/cgv"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fcgv', 'CGV')"
>
CGV </a>
</li>
<li>
<a href="https://www.adopt.com/fr/cgu-myadopt"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fcgu\u002Dmyadopt', 'Conditions\u0020g\u00E9n\u00E9rales\u0020d\u0027utilisation\u0020du\u0020programme\u0020myAdopt')"
>
Conditions générales d'utilisation du programme myAdopt </a>
</li>
<li>
<a href="https://adopt.flatchr.io/fr/company/adopt"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fadopt.flatchr.io\u002Ffr\u002Fcompany\u002Fadopt', 'Nous\u0020rejoindre')"
>
Nous rejoindre </a>
</li>
</ul>
</nav>
</div>
<script>
function footerComponent_69af011996802() {
return {
width: window.innerWidth,
breakpoint: 640,
open: window.innerWidth > 640,
clickMenuEntryEvent(url, label, blank = false) {
window.dataLayer?.push({
'event': 'clicMenuFooter',
'text': label
});
if (blank) {
window.open(url, '_blank');
} else {
window.location.href = url
}
}
}
}
</script>
<div class="border-t border-pink-150 last-of-type:border-b md:border-none pt-5 md:w-1/3 xl:pt-0"
x-data="footerComponent_69af011996f37()"
@resize.window.debounce.100="width = window.innerWidth;open = width > breakpoint"
>
<button class="pb-5 text-sm tracking-spaced-lg w-full font-medium uppercase flex justify-between items-center md:hidden"
@click=" open ? open = false : open = true;"
aria-expanded="false"
:aria-expanded="open.toString()"
>
<span>Infos pratiques</span>
<span class="rotate-90" :class="{ '-rotate-90': open, 'rotate-90': !open }">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="w-2.75 fat-icon md:hidden" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</span>
</button>
<div class="pb-5 text-sm tracking-spaced-lg uppercase font-medium hidden md:block">
Infos pratiques </div>
<nav x-show="open"
class="footer-block-links transition-transform ease-out overflow-hidden origin-top transform pb-5"
aria-label="Infos pratiques"
>
<ul class="flex flex-col">
<li>
<a href="https://www.adopt.com/fr/store-locator"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fstore\u002Dlocator', 'Nos\u0020boutiques')"
>
Nos boutiques </a>
</li>
<li>
<a href="https://www.adopt.com/fr/offres-commerciales.html"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Foffres\u002Dcommerciales.html', 'Nos\u0020offres')"
>
Nos offres </a>
</li>
<li>
<a href="https://www.adopt.com/fr/sales/order/tracking"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fsales\u002Forder\u002Ftracking', 'Suivre\u0020ma\u0020commande')"
>
Suivre ma commande </a>
</li>
<li>
<a href="https://support.adopt.com/hc/fr"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fsupport.adopt.com\u002Fhc\u002Ffr', 'Aide\u0020et\u0020contact')"
>
Aide et contact </a>
</li>
<li>
<a href="https://www.adopt.com/fr/livraison-retours"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Flivraison\u002Dretours', 'Livraison\u0020et\u0020retours')"
>
Livraison et retours </a>
</li>
<li>
<a href="https://www.adopt.com/fr/offre-de-parrainage"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Foffre\u002Dde\u002Dparrainage', 'Offre\u0020de\u0020parrainage\u0020\u002D20\u0025')"
>
Offre de parrainage -20% </a>
</li>
<li>
<a href="https://www.adopt.com/fr/live-shopping"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Flive\u002Dshopping', 'Nos\u0020lives\u0020shopping')"
>
Nos lives shopping </a>
</li>
<li>
<a href="https://www.adopt.com/fr/nos-services-en-boutique"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fnos\u002Dservices\u002Den\u002Dboutique', 'Nos\u0020services\u0020en\u0020boutique')"
>
Nos services en boutique </a>
</li>
<li>
<a href="https://www.adopt.com/fr/accessibilite-numerique"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Faccessibilite\u002Dnumerique', 'Accessibilit\u00E9\u0020\u003A\u0020partiellement\u0020conforme')"
>
Accessibilité : partiellement conforme </a>
</li>
<li>
<a href="https://www.adopt.com/fr/programme-de-fidelite-myadopt"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fprogramme\u002Dde\u002Dfidelite\u002Dmyadopt', 'Programme\u0020de\u0020fid\u00E9lit\u00E9\u0020myAdopt')"
>
Programme de fidélité myAdopt </a>
</li>
</ul>
</nav>
</div>
<script>
function footerComponent_69af011996f37() {
return {
width: window.innerWidth,
breakpoint: 640,
open: window.innerWidth > 640,
clickMenuEntryEvent(url, label, blank = false) {
window.dataLayer?.push({
'event': 'clicMenuFooter',
'text': label
});
if (blank) {
window.open(url, '_blank');
} else {
window.location.href = url
}
}
}
}
</script>
<div class="border-t border-pink-150 last-of-type:border-b md:border-none pt-5 md:w-1/3 xl:pt-0"
x-data="footerComponent_69af01199764a()"
@resize.window.debounce.100="width = window.innerWidth;open = width > breakpoint"
>
<button class="pb-5 text-sm tracking-spaced-lg w-full font-medium uppercase flex justify-between items-center md:hidden"
@click=" open ? open = false : open = true;"
aria-expanded="false"
:aria-expanded="open.toString()"
>
<span>Nos produits</span>
<span class="rotate-90" :class="{ '-rotate-90': open, 'rotate-90': !open }">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="arrow-right" version="1.1" x="0px" y="0px" viewbox="0 0 17.1 14" enable-background="new 0 0 17.1 14" xml:space="preserve" class="w-2.75 fat-icon md:hidden" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,7h16.1"/>
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.1,13.5L16.6,7l-6.5-6.5"/>
<title/></svg>
</span>
</button>
<div class="pb-5 text-sm tracking-spaced-lg uppercase font-medium hidden md:block">
Nos produits </div>
<nav x-show="open"
class="footer-block-links transition-transform ease-out overflow-hidden origin-top transform pb-5"
aria-label="Nos produits"
>
<ul class="flex flex-col">
<li>
<a href="https://www.adopt.com/fr/parfum.html"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fparfum.html', 'Parfum')"
>
Parfum </a>
</li>
<li>
<a href="https://www.adopt.com/fr/soin-corps.html"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fsoin\u002Dcorps.html', 'Soin\u0020corps')"
>
Soin corps </a>
</li>
<li>
<a href="https://www.adopt.com/fr/soin-visage.html"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fsoin\u002Dvisage.html', 'Soin\u0020visage')"
>
Soin visage </a>
</li>
<li>
<a href="https://www.adopt.com/fr/maquillage.html"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fmaquillage.html', 'Maquillage')"
>
Maquillage </a>
</li>
<li>
<a href="https://www.adopt.com/fr/cadeaux.html"
class="text-sm hover:underline" role="button"
@click.prevent="clickMenuEntryEvent('https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fcadeaux.html', 'Cadeau')"
>
Cadeau </a>
</li>
</ul>
</nav>
</div>
<script>
function footerComponent_69af01199764a() {
return {
width: window.innerWidth,
breakpoint: 640,
open: window.innerWidth > 640,
clickMenuEntryEvent(url, label, blank = false) {
window.dataLayer?.push({
'event': 'clicMenuFooter',
'text': label
});
if (blank) {
window.open(url, '_blank');
} else {
window.location.href = url
}
}
}
}
</script>
</div>
</div>
<div>
<div x-data="initStoreSwitcherForm_69af011e2fc49()"
@private-content-loaded.window.debounce="onPrivateContentLoaded($event.detail.data)">
<div :class="!isFromMobileMenu ? 'relative inline-block text-left' : ''">
<template x-if="displayCountryName && displayLanguageCode && displaySvg">
<div>
<button
@click.prevent="storeMenuMobile();"
@keydown.window.escape="storeMenuMobile('close');"
type="button"
:class="isFromMobileMenu ? 'py-4 text-xs-tiny gap-6' : 'justify-center w-full focus:outline-none border-none p-0 flex-row-reverse gap-2'"
class="flex items-center"
aria-haspopup="true"
aria-expanded="true"
x-html='isFromMobileMenu ? displaySvg + "<span>" + displayCountryName.toUpperCase() + " (" + displayLanguageCode.toUpperCase() + ")</span>" : "<span class=\"link link-simple \">" + displayCountryName.toUpperCase() + " (" + displayLanguageCode.toUpperCase() + ")</span> " + displaySvg'
>
</button>
</div>
</template>
<div class="stores-choice fixed inset-0 z-40 flex items-center justify-center overflow-auto bg-black bg-opacity-50"
style="height: calc(100vh + 53px);display: none;">
<div class="bg-white flex flex-col md:flex-row-reverse md:items-start md:max-w-product-container md:mx-auto relative md:h-[550px] mx-5 my-5 md:mx-20">
<button type="button" class="z-50 absolute top-2 right-2 cursor-pointer hover:bg-anthracite hover:text-white rounded-full bg-white p-1.5"
@click="storeMenuMobile('close');" aria-label="Fermer le sélecteur de boutique">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24"
fill="white" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor"
d="M6 18L18 6M6 6l12 12"/>
</svg>
</button>
<div class="max-w-[575px] md:w-[45%] h-[250px] md:h-full">
<img class="z-41 h-full w-full object-cover"
loading="lazy"
src="https://adopt.twic.pics/media/adopt/modal/welcome/default/SM_PERF_BESTOF.jpg?twic=v1/output=preview"
data-twic-src="image:media/adopt/modal/welcome/default/SM_PERF_BESTOF.jpg"
data-twic-transform="cover-max=575"
alt="">
</div>
<div class="flex-1 flex flex-col items-center pt-4 md:justify-center md:h-full">
<div class="w-5/6 md:w-2/3 flex flex-col aspect-square items-center justify-center text-center">
<div class="flex justify-center text-lg leading-tightened tracking-[1.5px] w-full uppercase z-10 font-semibold text-anthracite-600">
<span x-html="translatedWordings.modalTitle[userLanguageCode] ?? translatedWordings.modalTitle['en']"></span>
</div>
<div class="flex px-3 py-4 z-10 w-full justify-center">
<span x-html="translatedWordings.modalDescription[userLanguageCode] ?? translatedWordings.modalDescription['en']"></span>
</div>
<form class="items-center justify-between z-10 w-full"
id="store-switcher-form"
action="https://www.adopt.com/fr/inter/store/switcher"
@submit.prevent="submitForm()"
>
<div class="field w-full pb-4">
<div x-data="{ open: false }"
class="relative">
<button @click="open = true"
class="flex items-center bg-white focus:bg-gray-400 text-gray-700 focus:text-gray-900 font-semibold rounded focus:outline-none focus:shadow-inner w-full form-select py-2 px-4"
type="button">
<span class="mr-1">
<template x-if="selectedStore">
<span class="flex">
<span class="pt-1" x-html="svgTemplate.replace('%1', selectedStore.country_code.toLowerCase()).replace('%2', (selectedStore.country_label[userLanguageCode] ?? selectedStore.country_label['en']) + ' flag')"></span>
<span class="pl-2" x-html="(selectedStore.country_label[userLanguageCode] ?? selectedStore.country_label['en']) + ' (' + selectedStore.locale_label + ')'"></span>
</span>
</template>
<span x-show="!selectedStore"
x-html="translatedWordings.selectTitle[userLanguageCode] ?? translatedWordings.selectTitle['en']">
</span>
</span>
</button>
<ul x-show="open"
@click.away="open = false"
class="bg-white text-gray-700 rounded shadow-lg absolute py-2 mt-1 max-h-60 overflow-y-auto z-50 w-full"
style="min-width:15rem">
<template x-for="(website, index) in websites" :key="index">
<li :value="website.store_code"
:data-country-code="website.country_code">
<div @click.prevent="selectStore(website); open = false"
class="flex cursor-pointer hover:bg-gray-200 whitespace-no-wrap py-2 px-4">
<img :alt="website.country_label + ' flag'"
:src="svgBaseUrl + '/' + website.country_code.toLowerCase() + '.svg'"
loading="lazy"
height="20"
width="20">
<span class="pl-2" x-html="(website.country_label[userLanguageCode] ?? website.country_label['en']) + ' (' + website.locale_label + ')'"></span>
</div>
</li>
</template>
</ul>
</div>
</div>
<template x-if="selectedStore">
<div>
<input type="hidden" name="store_code" :value="selectedStore.store_code">
<input type="hidden" name="country" :value="selectedStore.country_code">
<input type="hidden" name="destination_url" :value="destinationUrl">
</div>
</template>
<button class="btn btn-primary btn-size-sm w-full md:py-4 py-3 md:px-30 px-6 justify-center">
<span x-html="translatedWordings.modalButton[userLanguageCode] ?? translatedWordings.modalButton['en']"></span>
</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
function initStoreSwitcherForm_69af011e2fc49() {
return {
currentCountrySvg: null,
currentStoreCountryCode: 'FR',
currentStoreCountryName: '',
currentStoreLanguageCode: 'fr',
currentStoreCode: 'fr',
currentStoreSvg: null,
displayCountryCode: null,
displayCountryName: '',
displayLanguageCode: null,
displaySvg: null,
destinationUrl: null,
directoryData: null,
geoIpCountryCode: hyva.getCookie('select-store-user-country-code'),
isFromMobileMenu: 0,
selectedStore: null,
svgBaseUrl: 'https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/svg/flag',
svgTemplate: '<img loading="lazy" src="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/svg/flag/%1.svg" alt="%2" height="20" width="20">',
translatedWordings: {"modalTitle":{"fr":"Bienvenue sur Adopt.com","en":"Welcome on Adopt.com","es":"Bienvenido a Adopt.com","it":"Benvenuto su Adopt.com","nl":"Welkom op Adopt.com"},"selectTitle":{"fr":"Pays de livraison","en":"Shipping country","es":"Pa\u00eds de entrega","nl":"Land van levering","it":"Paese di consegna"},"modalDescription":{"fr":"Veuillez choisir votre <b>pays de livraison<\/b>","en":"Please choose your <b>delivery country<\/b>","es":"Elija su pa\u00eds de <b>entrega<\/b>","it":"Scegli il <b>paese di consegna<\/b>","nl":"Kies het <b>land van levering<\/b>"},"modalButton":{"fr":"Appliquer","en":"Apply","es":"Solicitar","it":"Applicare","nl":"Toepassen"}},
userLanguageCode: window.navigator.language.indexOf("-") > 0 ? window.navigator.language.substring(0, window.navigator.language.indexOf("-")) : window.navigator.language,
websites: [{"country_code":"FR","country_label":{"fr":"France","es":"Francia","en":"France","nl":"Frankrijk"},"locale_code":"default","locale_label":"fr","store_code":"fr","destinationUrl":"https:\/\/www.adopt.com\/fr\/"},{"country_code":"BE","country_label":{"fr":"Belgique","es":"B\u00e9lgica","en":"Belgium","nl":"Belgi\u00eb"},"locale_code":"FR","locale_label":"fr","store_code":"be-fr","destinationUrl":"https:\/\/www.adopt.com\/be-fr\/"},{"country_code":"BE","country_label":{"fr":"Belgique","es":"B\u00e9lgica","en":"Belgium","nl":"Belgi\u00eb"},"locale_code":"NL","locale_label":"nl","store_code":"be-nl","destinationUrl":"https:\/\/www.adopt.com\/be-nl\/"},{"country_code":"BE","country_label":{"fr":"Belgique","es":"B\u00e9lgica","en":"Belgium","nl":"Belgi\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"CA","country_label":{"fr":"Canada","es":"Canad\u00e1","en":"Canada","nl":"Canada"},"locale_code":"default","locale_label":"fr","store_code":"ca-fr","destinationUrl":"https:\/\/www.adopt.com\/ca-fr\/"},{"country_code":"DE","country_label":{"fr":"Allemagne","es":"Alemania","en":"Germany","nl":"Duitsland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"AT","country_label":{"fr":"Autriche","es":"Austria","en":"Austria","nl":"Oostenrijk"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"HR","country_label":{"fr":"Croatie","es":"Croacia","en":"Croatia","nl":"Kroati\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"DK","country_label":{"fr":"Danemark","es":"Dinamarca","en":"Denmark","nl":"Denemarken"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"ES","country_label":{"fr":"Espagne","es":"Espa\u00f1a","en":"Spain","nl":"Spanje"},"locale_code":"default","locale_label":"es","store_code":"es","destinationUrl":"https:\/\/www.adopt.com\/es\/"},{"country_code":"EE","country_label":{"fr":"Estonie","es":"Estonia","en":"Estonia","nl":"Estland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"FI","country_label":{"fr":"Finlande","es":"Finlandia","en":"Finland","nl":"Finland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"GR","country_label":{"fr":"Gr\u00e8ce","es":"Grecia","en":"Greece","nl":"Griekenland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"HU","country_label":{"fr":"Hongrie","es":"Hungr\u00eda","en":"Hungary","nl":"Hongarije"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"IE","country_label":{"fr":"Irlande","es":"Irlanda","en":"Ireland","nl":"Ierland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"IT","country_label":{"fr":"Italie","es":"Italia","en":"Italy","nl":"Itali\u00eb"},"locale_code":"default","locale_label":"it","store_code":"it","destinationUrl":"https:\/\/www.adopt.com\/it\/"},{"country_code":"LV","country_label":{"fr":"Lettonie","es":"Letonia","en":"Latvia","nl":"Letland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"LT","country_label":{"fr":"Lituanie","es":"Lituania","en":"Lithuania","nl":"Litouwen"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"LU","country_label":{"fr":"Luxembourg","es":"Luxemburgo","en":"Luxembourg","nl":"Luxemburg"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"NL","country_label":{"fr":"Pays-Bas","es":"Pa\u00edses Bajos","en":"Netherlands","nl":"Nederland"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"PL","country_label":{"fr":"Pologne","es":"Polonia","en":"Poland","nl":"Polen"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"PT","country_label":{"fr":"Portugal","es":"Portugal","en":"Portugal","nl":"Portugal"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"RO","country_label":{"fr":"Roumanie","es":"Ruman\u00eda","en":"Romania","nl":"Roemeni\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"SK","country_label":{"fr":"Slovaquie","es":"Eslovaquia","en":"Slovakia","nl":"Slowakije"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"SI","country_label":{"fr":"Slov\u00e9nie","es":"Eslovenia","en":"Slovenia","nl":"Sloveni\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"SE","country_label":{"fr":"Su\u00e8de","es":"Suecia","en":"Sweden","nl":"Zweden"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"},{"country_code":"CZ","country_label":{"fr":"Tch\u00e9quie","es":"Chequia","en":"Czechia","nl":"Tsjechi\u00eb"},"locale_code":"default","locale_label":"en","store_code":"en","destinationUrl":"https:\/\/www.adopt.com\/en\/"}],
initComponent() {
this.$watch('geoIpCountryCode', (value) => {
this.openModaleIfNeeded(value);
});
this.initDefaultValues();
if (!this.hasUserChoice() && !this.geoIpCountryCode) {
this.getCountryFromHeader();
}
this.openModaleIfNeeded(this.geoIpCountryCode);
},
onPrivateContentLoaded(data) {
if (data['directory-data']) {
this.directoryData = data['directory-data'];
this.initComponent()
}
},
openModaleIfNeeded(geoIpCountryCode) {
if (!geoIpCountryCode) {
return;
}
if (!this.hasUserChoice() && (geoIpCountryCode != this.currentStoreCountryCode)) {
this.selectStoreBasedOnUser(geoIpCountryCode);
if (this.selectedStore) {
this.storeMenuMobile();
}
}
},
selectStoreBasedOnUser(geoIpCountryCode) {
let defaultStoreForCountry = null;
this.websites.forEach(element => {
if (element.country_code.toLowerCase() == geoIpCountryCode.toLowerCase()) {
if (element.locale_code.toLowerCase() == 'default') {
defaultStoreForCountry = element;
}
if (element.locale_code.toLowerCase() == this.userLanguageCode.toLowerCase()) {
this.selectedStore = element;
}
}
})
if (!this.selectedStore) {
this.selectedStore = defaultStoreForCountry;
}
if (this.selectedStore) {
const hrefElement = document.getElementById('alternate-url-' + this.selectedStore.store_code);
this.destinationUrl = hrefElement ? hrefElement.getAttribute('href') : this.selectedStore.destinationUrl;
}
},
selectStore(website) {
this.selectedStore = website;
const hrefElement = document.getElementById('alternate-url-' + this.selectedStore.store_code);
this.destinationUrl = hrefElement ? hrefElement.getAttribute('href') : this.selectedStore.destinationUrl;
},
initDefaultValues() {
const selectedCountry = hyva.getCookie('selected_country');
if (this.directoryData) {
if (this.directoryData[this.currentStoreCountryCode]) {
this.currentStoreCountryName = this.directoryData[this.currentStoreCountryCode].name;
} else {
this.currentStoreCountryName = this.directoryData['FR'].name;
}
this.currentStoreSvg = this.svgTemplate
.replace('%1', this.currentStoreCountryCode.toLowerCase())
.replace('%2', this.currentStoreCountryName + ' flag');
}
this.displayCountryCode = this.currentStoreCountryCode;
this.displayLanguageCode = this.currentStoreLanguageCode;
if (selectedCountry) {
const storeLangKey = (this.currentStoreLanguageCode || '').toUpperCase();
const upperSelected = selectedCountry.toUpperCase();
const candidates = (this.websites || [])
.filter(w => (w.country_code || '').toUpperCase() === upperSelected);
let chosen = candidates.find(w => (w.locale_code || '').toUpperCase() === storeLangKey);
if (!chosen) {
const defaultEntry = candidates.find(w => (w.locale_code || '').toLowerCase() === 'default');
if (defaultEntry && (defaultEntry.store_code || '') === this.currentStoreCode) {
chosen = defaultEntry;
}
}
if (chosen) {
this.displayCountryCode = upperSelected;
this.displayLanguageCode = this.currentStoreLanguageCode;
}
}
if (this.directoryData) {
const fallbackCode = 'FR';
const codeForName = this.directoryData[this.displayCountryCode]
? this.displayCountryCode
: fallbackCode;
this.displayCountryName = this.directoryData[codeForName].name;
this.displaySvg = this.svgTemplate
.replace('%1', this.displayCountryCode.toLowerCase())
.replace('%2', this.displayCountryName + ' flag');
}
},
remindUserChoice() {
hyva.setCookie('select-store-user-choice', true, 365, true);
},
hasUserChoice() {
return hyva.getCookie('select-store-user-choice') !== null;
},
getCountryFromHeader() {
const client = new XMLHttpRequest();
client.open("HEAD", window.location, true);
client.send(null);
client.onreadystatechange = () => {
if (client.readyState === client.HEADERS_RECEIVED) {
const disCountry = client.getResponseHeader("X-Client-Country");
if (disCountry) {
hyva.setCookie('select-store-user-country-code', disCountry, 7, true);
this.geoIpCountryCode = disCountry;
}
client.abort();
}
};
},
submitForm() {
const $form = document.querySelector('#store-switcher-form');
window.dataLayer?.push({
'event': 'selectionPaysLivraison',
'pays': this.selectedStore.country_label['en'],
'langue': this.selectedStore.store_code.toUpperCase(),
});
this.remindUserChoice();
$form.submit();
},
storeMenuMobile($close) {
const storeSelectorModale = document.querySelector('.stores-choice');
if (storeSelectorModale) {
if ($close) {
this.remindUserChoice();
storeSelectorModale.style.display = 'none';
} else {
storeSelectorModale.style.display = 'flex';
}
}
}
}
}
</script>
</div>
</div>
</div>
<div class="footer-seo bg-[#FFE0E6] px-7.5 py-12 text-sm">
Créateur de parfums depuis 40 ans, Adopt développe une gamme de fragrances de qualité, uniques, addictives, accessibles à toutes et à tous à partir de 11.95€, exclusivement créées et fabriquées en France. Plus de 150 eaux de parfums joyeuses, féminines, masculines ou mixtes, fruitées, florales, boisées ou chyprées, qui répondent à votre humeur, à vos envies, à votre style, et à tous les moments de la journée. Avec Adopt parfums, c’est tout un univers de parfums aux ingrédients nobles et précieux qui s’ouvre à vous !
Pour prolonger l’expérience, Adopt parfums propose des rituels de soins végans, soins corps, soins visage, soins cheveux, aux formules gorgées d’ingrédients naturels. Et pourquoi pas opter pour un coffret parfumé, combinant parfums et soins coordonnés ?
Idées cadeaux pour faire ou se faire plaisir, best-sellers, parfums iconiques, nouveautés, visitez l’univers Adopt parfums. </div>
</div>
<script>
'use strict';
function initFooterSocialComponent() {
return {
clickSocialLinkEvent(url, label) {
window.dataLayer?.push({
'event': 'clicSociauxRéseaux',
'text': label
});
window.open(url, '_blank').focus();
},
}
}
</script>
</div></footer><script>
(function(){
var b=document.documentElement;
function setDeviceCapabilities(){
b.setAttribute('data-useragent',navigator.userAgent);
b.setAttribute('data-platform',navigator.platform);
if(!!('ontouchstart' in window)||!!('onmsgesturechange' in window))b.classList.add('touch');
}
function setInputMode(e){
b.classList.toggle('input-touch',e.matches);
b.classList.toggle('input-pointer',!e.matches);
}
if('requestIdleCallback' in window){
requestIdleCallback(setDeviceCapabilities,{timeout:50});
}else{
setTimeout(setDeviceCapabilities,0);
}
var mq=window.matchMedia('(hover: none)');
setInputMode(mq);
mq.addEventListener('change',setInputMode);
})();
</script>
<script>
(function() {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', loadAbTasty);
} else if (document.readyState === 'interactive' || document.readyState === 'complete') {
if (requestIdleCallback) {
requestIdleCallback(loadAbTasty, { timeout: 2000 });
} else {
setTimeout(loadAbTasty, 0);
}
}
function loadAbTasty() {
var i = window, s = document, o = "script", g = "https://try.abtasty.com/fe00c2931023a861967a43fcccc5a369.js";
i["abtiming"] = 1 * new Date();
var a = s.createElement(o);
var m = s.getElementsByTagName(o)[0];
a.async = 1;
a.defer = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
}
})();
</script>
<script type="text/x-magento-init">
{
"body": {
"awRbsliderAjax": {"url":"https:\/\/www.adopt.com\/fr\/aw_rbslider\/statistic\/view"} }
}
</script>
<script>
let pendingLoyaltyPromise = null;
const LOYALTY_CONFIG = {
storageKey: 'loyalty_data',
errorCacheDuration: 300000
};
function loadCustomerLoyaltyData() {
if (hyva.getCookie('refresh_loyalty_data')) {
clearLoyaltyCache();
document.cookie = 'refresh_loyalty_data=; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Path=/;';
pendingLoyaltyPromise = null;
}
const cachedData = getCachedLoyaltyData();
if (cachedData) {
return handleCachedData(cachedData);
}
if (pendingLoyaltyPromise) {
return pendingLoyaltyPromise;
}
pendingLoyaltyPromise = fetchLoyaltyData()
.then(data => {
pendingLoyaltyPromise = null;
return data;
})
.catch(error => {
pendingLoyaltyPromise = null;
cacheError(error);
throw error;
});
return pendingLoyaltyPromise;
}
function getCachedLoyaltyData() {
const storage = hyva.getBrowserStorage();
if (!storage) return null;
const dataStr = storage.getItem(LOYALTY_CONFIG.storageKey);
if (!dataStr) return null;
try {
const cachedItem = JSON.parse(dataStr);
const now = Date.now();
if (now > cachedItem.expiry) {
storage.removeItem(LOYALTY_CONFIG.storageKey);
return null;
}
return cachedItem;
} catch (error) {
console.error('Error parsing loyalty data from storage:', error);
storage.removeItem(LOYALTY_CONFIG.storageKey);
return null;
}
}
function handleCachedData(cachedItem) {
return Promise.resolve().then(() => {
if (cachedItem.isError) {
const error = new Error(cachedItem.errorMessage);
window.dispatchEvent(
new CustomEvent("loyalty-data-error", {
detail: { error: true, message: cachedItem.errorMessage }
})
);
return Promise.reject(error);
}
window.dispatchEvent(
new CustomEvent("loyalty-data-loaded", {
detail: cachedItem.data
})
);
return cachedItem.data;
});
}
function fetchLoyaltyData() {
return fetch('https://www.adopt.com/fr/loyalty/customer/info', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify({
form_key: hyva.getFormKey()
}),
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(json => {
if (json.error === true || json.success === false) {
throw new Error(json.message || 'Loyalty services error');
}
const loyaltyData = json.data || json;
cacheData(loyaltyData);
window.dispatchEvent(
new CustomEvent("loyalty-data-loaded", {
detail: loyaltyData
})
);
return loyaltyData;
})
.catch(error => {
console.error('Loyalty API Error:', error);
window.dispatchEvent(
new CustomEvent("loyalty-data-error", {
detail: { error: true, message: error.message }
})
);
throw error;
});
}
function cacheData(data) {
const storage = hyva.getBrowserStorage();
if (!storage) return;
const cacheItem = {
data: data,
isError: false,
timestamp: Date.now(),
expiry: Date.now() + (20 * 60 * 1000)
};
try {
storage.setItem(LOYALTY_CONFIG.storageKey, JSON.stringify(cacheItem));
} catch (error) {
console.error('Error caching loyalty data:', error);
}
}
function cacheError(error) {
const storage = hyva.getBrowserStorage();
if (!storage) return;
const errorItem = {
isError: true,
errorMessage: error.message,
timestamp: Date.now(),
expiry: Date.now() + LOYALTY_CONFIG.errorCacheDuration
};
try {
storage.setItem(LOYALTY_CONFIG.storageKey, JSON.stringify(errorItem));
} catch (error) {
console.error('Error caching loyalty error:', error);
}
}
function clearLoyaltyCache() {
const storage = hyva.getBrowserStorage();
if (storage) {
storage.removeItem(LOYALTY_CONFIG.storageKey);
}
}
function isLoyaltyInErrorState() {
const cachedData = getCachedLoyaltyData();
return cachedData && cachedData.isError;
}
function showHiddenComponentForLoggedInAdmin() {
const adminCookie = hyva.getCookie('admin_store_restricted_access');
if (adminCookie) {
document.querySelectorAll('.visible-only-admin')
.forEach(function (element) {
element.classList.remove('visible-only-admin');
});
}
}
window.addEventListener("private-content-loaded", (event) => {
showHiddenComponentForLoggedInAdmin();
});
showHiddenComponentForLoggedInAdmin();
window.loyaltyModule = {
load: loadCustomerLoyaltyData,
clear: clearLoyaltyCache,
isInErrorState: isLoyaltyInErrorState
};
</script>
<script> window.turnstileConfig = {"config":{"enabled":true,"sitekey":"0x4AAAAAAAiLrmrQvhOQS6Th","theme":"light","size":"normal","forms":["newsletter-subscribe","newsletter-subscribe-footer","register"]}};</script><script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" async="" defer=""></script><script>
const storeApi = {};
storeApi.getProducts = (productIdentifier) => {
return fetch('https://www.adopt.com/fr/bambuser/products/load' + '/skus/' + productIdentifier, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
}
}).then(
res => res.json()
).then(data => {
return data;
});
};
storeApi.addToCart = (data) => {
let formData = new FormData();
let url;
formData.append('uenc', hyva.getUenc());
formData.append('form_key', hyva.getFormKey());
formData.append('qty', 1);
if (data.is_configurable) {
url = 'https://www.adopt.com/fr/checkout/cart/add' + '/uenc/' + hyva.getUenc() + '/product/' + data.parent_id
formData.append('product', data.parent_id);
formData.append('item', data.parent_id);
formData.append('super_attribute[' + data.attribute_id + ']', data.option_id);
} else {
url = 'https://www.adopt.com/fr/checkout/cart/add' + '/uenc/' + hyva.getUenc() + '/product/' + data.product_id
formData.append('product', data.product_id);
}
formData = new URLSearchParams(formData);
return fetch(url, {
method: 'POST',
body: formData,
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest'
}
}).then(res => {
window.dispatchEvent(new CustomEvent('product-addtocart-success'));
}).catch(err => {
return Promise.resolve({
success: false,
reason: 'out-of-stock',
message: "Le produit que vous essayez d'ajouter n'est pas disponible."
});
}).finally(() => {
try {
let messages = hyva.getCookie('mage-messages');
messages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
document.cookie = 'mage-messages=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
setTimeout(() => {
messages.forEach(message => {
setMessage(message);
});
}, 1000);
window.dispatchEvent(
new CustomEvent(
'reload-customer-section-data',
{
detail: {
sections: ['cart', 'cart-tagging', 'messages']
}
}
)
);
} catch (error) {
console.warn('Error parsing Cookie Messages:', error);
}
});
};
storeApi.updateItemInCart = (data) => {
let formData = new FormData();
formData.append('uenc', hyva.getUenc());
formData.append('form_key', hyva.getFormKey());
formData = new URLSearchParams(formData);
return fetch('https://www.adopt.com/fr/bambuser/cart/update' + '/uenc/' + hyva.getUenc() + '/product/' + data.sku + '/qty/' + data.quantity, {
method: 'POST',
body: formData,
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest'
}
}).catch(err => {
return Promise.resolve({
success: false,
reason: 'error',
message: ""
});
}).finally(() => {
try {
let messages = hyva.getCookie('mage-messages');
messages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
document.cookie = 'mage-messages=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
setTimeout(() => {
messages.forEach(message => {
setMessage(message);
});
}, 1000);
window.dispatchEvent(
new CustomEvent(
'reload-customer-section-data',
{
detail: {
sections: ['cart', 'cart-tagging', 'messages']
}
}
)
);
} catch (error) {
console.warn('Error parsing Cookie Messages:', error);
}
});
};
storeApi.removeItemFromCart = (data) => {
let formData = new FormData();
formData.append('uenc', hyva.getUenc());
formData.append('form_key', hyva.getFormKey());
formData = new URLSearchParams(formData);
return fetch('https://www.adopt.com/fr/bambuser/cart/delete' + '/uenc/' + hyva.getUenc() + '/product/' + data.sku, {
method: 'POST',
body: formData,
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest'
}
}).catch(err => {
return Promise.resolve({
success: false,
reason: 'erro',
message: ""
});
}).finally(() => {
try {
let messages = hyva.getCookie('mage-messages');
messages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
document.cookie = 'mage-messages=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
setTimeout(() => {
messages.forEach(message => {
setMessage(message);
});
}, 1000);
window.dispatchEvent(
new CustomEvent(
'reload-customer-section-data',
{
detail: {
sections: ['cart', 'cart-tagging', 'messages']
}
}
)
);
} catch (error) {
console.warn('Error parsing Cookie Messages:', error);
}
});
};
storeApi.getCartState = () => {
return new Promise((resolve) => {
const browserStorage = hyva.getBrowserStorage();
const sectionData = JSON.parse(browserStorage.getItem('mage-cache-storage'));
resolve(sectionData?.cart?.summary_count);
});
};
window.onBambuserLiveShoppingReady = (player) => {
player.configure({
currency: 'EUR',
locale: 'fr-FR',
buttons: {
dismiss: player.BUTTON.MINIMIZE,
checkout: player.BUTTON.MINIMIZE,
},
minimizedPosition: player.MINIMIZED_POSITION.BOTTOM_LEFT,
});
player.on(player.EVENT.PROVIDE_PRODUCT_DATA, (event) => {
if (!event.context || event.context !== 'pre-load') {
return;
}
let productArray = [];
let skuString = '';
event.products.forEach(({ ref: sku, url, id: bambuserId }) => {
productArray[sku] = bambuserId;
skuString += sku + ',';
});
storeApi.getProducts(skuString).then((data) => {
Object.entries(data).forEach((entry) => {
const [sku, product] = entry;
player.updateProduct(productArray[sku], (productFactory) =>
productFactory
.inheritFromPlaceholder()
.product((productDetailFactory) =>
productDetailFactory
.name(product.title)
.description(product.description)
.sku(product.id)
.brandName(product.vendor)
.variations((variationFactory) =>
product.variants?.map((variation) =>
variationFactory()
.attributes(
(attributeFactory) => attributeFactory
.colorName(variation.sizes.name)
)
.imageUrls([
...variation.images
])
.name(variation.name)
.sku(variation.variationId)
.sizes((sizeFactory) => [
sizeFactory()
.name(variation.sizes.name)
.sku(variation.variationId)
.inStock(variation.sizes.quantityInStock > 0)
.price(priceFactory =>
priceFactory
.currency(variation.sizes.currency)
.original(variation.sizes.original)
.current(variation.sizes.current)
)
])
)
)
)
);
})
});
});
player.on(player.EVENT.ADD_TO_CART, (addedItem, callback) => {
const data = JSON.parse(addedItem.sku);
storeApi.addToCart(data)
.then(() => callback(true))
.catch(error => {
callback(false);
});
});
player.on(player.EVENT.UPDATE_ITEM_IN_CART, (updatedItem, callback) => {
if (updatedItem.quantity > 0) {
storeApi.updateItemInCart({
sku: updatedItem.sku,
quantity: updatedItem.quantity,
})
.then(() => {
callback(true);
})
.catch(function(error) {
callback(false);
});
}
if (updatedItem.quantity === 0) {
storeApi.removeItemFromCart({sku: updatedItem.sku})
.then(() => {
callback(true);
})
.catch(() => {
callback(false);
});
}
})
player.on(player.EVENT.CHECKOUT, () => {
player.showCheckout(window.location.origin + "/checkout/cart");
});
player.on(player.EVENT.SYNC_CART_STATE, () => {
storeApi.getCartState().then((response) => {
if (response == 0) {
player.updateCart({
items: []
});
}
});
});
};
</script>
<script>
window.addEventListener('init-external-scripts', () => {
(function(d, t, i, w) {
window.__bfwId = w;
if (d.getElementById(i) && window.__bfwInit) return window.__bfwInit();
if (d.getElementById(i)) return;
var s, ss = d.getElementsByTagName(t)[0];
s = d.createElement(t); s.id = i;
s.src = 'https://lcx-widgets-eu.bambuser.com/embed.js';
ss.parentNode.insertBefore(s, ss);
})(document, 'script', 'bambuser-liveshopping-widget', 'uVdF1jExri5CwRQ2vyHc');
}, {once: true, passive: false});
</script>
<script>
const AmAuthPopupReloadContent = function () {
const customerMenuSelector = '\u0023customer\u002Dmenu\u0020\u007E\u0020nav';
return {
contentUpdaters: [],
initContentUpdaters() {
window.addEventListener('amsl-register-content-updater', (event) => {
event.stopPropagation();
if (typeof event.detail === 'function') {
this.registerContentUpdater(event.detail);
}
}, true)
},
reloadContent() {
return Promise.all([
this.reloadHeader(),
...this.contentUpdaters.map(updater => updater())
]).then(this.updateFormKey);
},
registerContentUpdater(updater) {
this.contentUpdaters.push(updater);
},
async reloadHeader() {
const response = await fetch(
`${BASE_URL}amsociallogin_hyva\u002Fheader\u002Fupdate?isAjax=1`,
{
method: 'GET',
headers: {
'Content-type': 'application/json'
}
}
);
const result = await response.json();
const {customer_menu_html: customerMenuHtml} = result;
const container = document.createElement('div');
container.innerHTML = customerMenuHtml;
const currentMenu = document.querySelector(customerMenuSelector);
const newMenu = container.querySelector(customerMenuSelector);
if (currentMenu && newMenu) {
currentMenu.replaceWith(newMenu);
}
},
updateFormKey() {
const formKeyInputs = document.querySelectorAll('input[name="form_key"]');
formKeyInputs.forEach(input => input.value = hyva.getFormKey());
}
}
}
</script>
<script>
const AmAuthPopupRedirect = function () {
const redirectTimeout = 2000;
const redirectUrl = 'https://www.adopt.com/fr/adopt_customer/sociallogin/register/';
return {
processRedirect(forceRedirectUrl) {
if (forceRedirectUrl) {
setTimeout(() => {
this.resetSessionCookie();
window.location.assign(forceRedirectUrl);
}, redirectTimeout);
return;
}
setTimeout(() => {
this.resetSessionCookie();
window.location.assign(redirectUrl);
}, redirectTimeout);
},
reloadCustomerData() {
this.resetSessionCookie();
window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
},
resetSessionCookie() {
hyva.setCookie('mage-cache-sessid', '', -1, true);
},
reloadPage() {
setTimeout(() => {
this.resetSessionCookie();
window.location.reload(true)
}, redirectTimeout)
},
reloadViaAjax() {
window.addEventListener('private-content-loaded', () => {
this.reloadContent().then(() => {
window.dispatchEvent(
new CustomEvent('amsl-content-updated')
);
}).catch(
(error) => {
console.error(error);
this.reloadPage();
}
);
}, {once: true});
this.reloadCustomerData();
window.dispatchEvent(
new CustomEvent('amsl-popup-ajax-login-success')
);
}
}
}
</script>
<script>
const AmAuthPopupNotification = function () {
const modalName = 'amsl\u002Dpopup\u002Dnotification';
return {
...AmAuthPopupModal(modalName),
notification: '',
initialize() {
this.initModalSettings();
},
showNotification(messages) {
if (!messages) {
return;
}
this.notification = Array.isArray(messages) ? messages.join('<br>') : messages;
window.dispatchEvent(
new CustomEvent('amsl-hide-popup')
);
this.show(modalName);
}
}
}
</script>
<script>
const AmAuthPopupModal = function (modalName) {
const canCloseByOverlayClick = true;
return {
...hyva.modal(),
animationDuration: 500,
initModalSettings() {
if (!canCloseByOverlayClick) {
this.restrictOverlayClick();
}
},
restrictOverlayClick() {
document.addEventListener('click', (event) => {
const modal = this.$refs[modalName];
const isVisible = this.opened[modalName];
if (isVisible && !modal.contains(event.target) && !modal.hasAttribute('x-no-overlay')) {
event.stopPropagation();
}
}, {capture: true});
}
}
}
</script>
<script>
function AmSocialLogin() {
return {
socialErrorMessage: '',
isPopupEnabled: '',
initializeSocialLogin() {
this.initContentUpdaters();
},
socialLoginClick(event) {
this.sendSocialLoginClickEvent(event);
if (this.messageEventListener) {
window.removeEventListener('message', this.messageEventListener);
}
this.messageEventListener = this.onMessageEvent.bind(this);
window.addEventListener('message', this.messageEventListener);
if (this.isPopupEnabled) {
window.open(
event.currentTarget.href + '&isAjax=true',
event.currentTarget.title,
this.getPopupParams()
);
} else {
window.location.assign(event.currentTarget.href);
}
event.stopPropagation();
event.preventDefault();
return false;
},
sendSocialLoginClickEvent(event) {
const linkElement = event.currentTarget;
const socialType = linkElement.getAttribute('data-social-type');
window.dataLayer?.push({
'event': 'clic_social_login',
'tunnel': window.location.href.includes('checkout') ? 'true' : 'false',
'typologieConnexion': socialType
});
},
onSocialResponse(data) {
const isSuccessfulResult = data.result === 1;
if (isSuccessfulResult) {
window.dispatchEvent(
new CustomEvent(
'amsl-popup-show-notification',
{
detail: data.messages
}
)
);
this.processRedirect();
} else {
const redirectData = data?.redirect_data;
this.socialErrorMessage = data.messages.pop();
setTimeout(() => {
this.socialErrorMessage = '';
}, 5000);
if (this.shouldCustomUrlRedirectWithError(redirectData)) {
return this.processRedirect(redirectData?.url);
}
if (redirectData.redirectWithError) {
this.processRedirect();
}
}
},
shouldCustomUrlRedirectWithError(redirectData) {
return (
redirectData &&
redirectData.redirect &&
redirectData.redirectWithError &&
redirectData.url
);
},
onMessageEvent(event) {
if (event.data['redirect_data']) {
this.onSocialResponse(event.data);
}
},
getPopupParams(w, h, l, t) {
let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft,
screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop,
outerWidth = typeof window.outerWidth !== 'undefined'
? window.outerWidth
: document.body.clientWidth,
outerHeight = typeof window.outerHeight !== 'undefined'
? window.outerHeight
: (document.body.clientHeight - 22),
width = w ? w : 500,
height = h ? h : 420,
left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10),
top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10);
return (
'width=' + width +
',height=' + height +
',left=' + left +
',top=' + top
);
},
...AmAuthPopupRedirect(),
...AmAuthPopupReloadContent()
}
}
</script>
<script>
(() => {
function src_default(Alpine) {
Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
let evaluate = evaluateLater(expression);
let options = {
rootMargin: getRootMargin(modifiers),
threshold: getThreshhold(modifiers)
};
let observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting === (value === "leave"))
return;
evaluate();
modifiers.includes("once") && observer.disconnect();
});
}, options);
observer.observe(el);
cleanup(() => {
observer.disconnect();
});
});
}
function getThreshhold(modifiers) {
if (modifiers.includes("full"))
return 0.99;
if (modifiers.includes("half"))
return 0.5;
if (!modifiers.includes("threshold"))
return 0;
let threshold = modifiers[modifiers.indexOf("threshold") + 1];
if (threshold === "100")
return 1;
if (threshold === "0")
return 0;
return Number(`.${threshold}`);
}
function getLengthValue(rawValue) {
let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
return match ? match[1] + (match[2] || "px") : void 0;
}
function getRootMargin(modifiers) {
const key = "margin";
const fallback = "0px 0px 0px 0px";
const index = modifiers.indexOf(key);
if (index === -1)
return fallback;
let values = [];
for (let i = 1; i < 5; i++) {
values.push(getLengthValue(modifiers[index + i] || ""));
}
values = values.filter((v) => v !== void 0);
return values.length ? values.join(" ").trim() : fallback;
}
document.addEventListener("alpine:init", () => {
window.Alpine.plugin(src_default);
});
})();
</script>
<script>
for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","#notice-cookie-block":"intersect"})) {
document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
}
</script>
<script>
(function () {
"use strict";
const hasAlpine = new Promise(resolve => {
window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
});
const hasInteract = new Promise(resolve => {
(events => {
const onInteract = () => {
resolve();
events.forEach(type => window.removeEventListener(type, onInteract));
}
events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
})(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
});
const onIntersect = (el) => {
return new Promise(resolve => {
const observer = new IntersectionObserver(entries => {
for (const entry of entries) {
if (entry.isIntersecting) {
observer.disconnect()
resolve();
}
}
}, {});
observer.observe(el);
});
}
function runComponent(el) {
hasAlpine.then(() => {
el.removeAttribute('x-ignore');
queueMicrotask(() => Alpine.initTree(el));
});
}
function initDeferredComponents() {
document.querySelectorAll('[x-data][x-defer]').forEach(el => {
el.setAttribute('x-ignore', '');
const deferUntil = (el.getAttribute('x-defer') || '').trim();
switch (deferUntil) {
case 'interact':
hasInteract.then(() => runComponent(el));
break;
case 'intersect':
onIntersect(el).then(() => runComponent(el))
break;
case 'idle':
window.requestIdleCallback
? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
: setTimeout(() => runComponent(el), 4000);
break;
case 'eager':
runComponent(el);
break;
default:
if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
}
}
});
}
window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
})()
</script>
<script type="module"
src="https://www.adopt.com/static/version1772544398/frontend/Adopt/hyva/fr_FR/Hyva_Theme/js/alpine3.min.js"
defer
crossorigin
></script>
<script>
'use strict';
function dispatchMessages(messages, hideAfter) {
const messagesEvent = new CustomEvent("messages-loaded", {
detail: {
messages: messages,
hideAfter: hideAfter
}
});
window.dispatchEvent(messagesEvent);
}
if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
}
(function( hyva, undefined ) {
hyva.initFormKey = () => {
const inputSelector = 'input[name="form_key"]',
formKey = hyva.getFormKey();
Array.from(document.querySelectorAll(inputSelector)).map(function (input) {
input.value = formKey
});
}
hyva.initMessages = () => {
try {
const messages = hyva.getCookie('mage-messages');
window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
dispatchMessages(window.mageMessages);
// empty `mage-messages` cookie
const skipSetDomain = true;
hyva.setCookie('mage-messages','', -1, skipSetDomain);
} catch (error) {
console.warn('Error parsing Cookie Messages:', error);
}
}
window.addEventListener('DOMContentLoaded', hyva.initFormKey);
hyva.alpineInitialized(hyva.initMessages)
}( window.hyva = window.hyva || {} ));
</script>
<script>
'use strict';
{
const private_content_key = 'mage-cache-storage';
const private_content_expire_key = 'mage-cache-timeout';
const private_content_version_key = 'private_content_version';
const section_data_ids_key = 'section_data_ids';
const mage_cache_session_id_key = 'mage-cache-sessid';
const last_visited_store_key = 'last_visited_store';
const ttl = 3600;
if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
}
function loadSectionData (sections = []) {
if (typeof sections == 'object' && typeof sections.target != 'undefined') {
sections = [];
}
const browserStorage = hyva.getBrowserStorage();
if (!browserStorage) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Please enable LocalStorage in your browser."
}]
);
return;
}
try {
let isInvalid = false;
if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
isInvalid = true;
}
hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
if (!hyva.getCookie(mage_cache_session_id_key)) {
isInvalid = true;
browserStorage.removeItem(private_content_key);
const skipSetDomain = true;
const days = false;
hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
}
const cookieVersion = hyva.getCookie(private_content_version_key);
const storageVersion = browserStorage.getItem(private_content_version_key);
if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
isInvalid = true;
}
const privateContentExpires = browserStorage.getItem(private_content_expire_key);
if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
browserStorage.removeItem(private_content_key);
}
if (isInvalid && cookieVersion) {
fetchPrivateContent(sections);
} else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
if (
privateContent &&
privateContentExpires &&
privateContent.cart &&
privateContent.customer
) {
dispatchPrivateContent(privateContent);
} else {
fetchPrivateContent(sections);
}
} else {
if (document.getElementById('default-section-data')) {
const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim());
dispatchPrivateContent(privateContent);
} else {
dispatchPrivateContent({});
}
}
} catch (error) {
console.warn('Error retrieving Private Content:', error);
}
}
hyva.alpineInitialized(loadSectionData)
window.addEventListener('reload-customer-section-data', (event) => {
loadSectionData(event?.detail?.sections || [])
});
function dispatchPrivateContent(data) {
const privateContentEvent = new CustomEvent("private-content-loaded", {
detail: {
data: data
}
});
window.dispatchEvent(privateContentEvent);
}
function fetchPrivateContent(sections) {
fetch(`${BASE_URL}customer/section/load?sections=${encodeURIComponent(sections.join(','))}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
}
})
.then(response => response.json())
.then(
data => {
if (data) {
try {
const browserStorage = hyva.getBrowserStorage();
// merge new data preserving non-invalidated sections
const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
delete oldSectionData['checkout-data'];
}
const newSectionData = Object.assign(oldSectionData, data);
dispatchPrivateContent(newSectionData);
// don't persist messages, they've been dispatched already
if (newSectionData.messages && newSectionData.messages.messages ) {
newSectionData.messages.messages = [];
}
browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
browserStorage.setItem(private_content_expire_key, expiresAt);
const newCookieVersion = hyva.getCookie(private_content_version_key);
browserStorage.setItem(private_content_version_key, newCookieVersion);
// We don't need the section_data_ids in Hyvä, but we store them for compatibility
// with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
hyva.setCookie(
section_data_ids_key,
JSON.stringify(
Object.keys(data).reduce((sectionDataIds, sectionKey) => {
sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
return sectionDataIds;
}, {})
),
false,
true
);
} catch (error) {
console.warn("Couldn't store privateContent", error);
}
}
}
);
}
}
</script>
<script>
(() => {
document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
})()
</script>
<script>
(events => {
const dispatchUserInteractionEvent = () => {
events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
window.dispatchEvent(new Event('init-external-scripts'))
};
events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true}))
})(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown'])
</script>
<script async defer src="https://adopt.twic.pics/?v1"></script>
<script>
function initWishlist() {
return {
isInWishlist(productId) {
productId = productId.toString();
let browserStorage = hyva.getBrowserStorage().getItem('mage-cache-storage');
browserStorage = JSON.parse(browserStorage);
if (browserStorage) {
if ((typeof browserStorage.customer !== 'undefined') && typeof browserStorage.customer.fullname !== 'undefined'){
let wishlistItemIds = [];
let wishlistItems = browserStorage.wishlist.items;
wishlistItems.forEach(function(item){
wishlistItemIds.push(item.product_id);
});
return wishlistItemIds.includes(productId);
}
}
let cookieValue = hyva.getCookie('guest_wishlist');
if (cookieValue !== null) {
cookieValue = decodeURIComponent(cookieValue);
let cookieWishlistIds = cookieValue.split(',');
if (cookieWishlistIds) {
return cookieWishlistIds.includes(productId);
}
}
return false
},
toggleWishlist(productId, productData) {
if (!this.isInWishlist(productId)) {
this.addToWishlist(productId, productData);
} else {
this.removeFromWishlist(productId);
}
},
addToWishlist(productId, productData) {
const self = this;
let wishlistIcon = document.querySelectorAll('[data-wishlist="' + productId + '"]');
wishlistIcon.forEach((arrayElement, index) => {
wishlistIcon[index].classList.add('in-favorite');
wishlistIcon[index].querySelector('svg').classList.add('in-favorite');
})
const formKey = hyva.getFormKey();
fetch(BASE_URL + "wishlist/index/add?ajax=1", {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": "form_key="+ formKey + "&product="+productId+"&uenc="+btoa(window.location.href),
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function (response) {
if (response.ok) {
return response.json();
} else if (response.redirected) {
window.location.href = response.url;
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to wishlist."
}], 5000
);
}
}).then(function (response) {
if (!response) { return }
self.sendAddToWishlistEvent(productData);
let cookieValue = hyva.getCookie('guest_wishlist');
if (cookieValue !== null) {
if (typeof response.success !== "undefined") {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: (response.success) ? "success" : "error",
text: (response.success)
? "Le produit a été ajouté à votre liste de souhaits."
: ''
}], 5000
);
}
}
const reloadCustomerDataEvent = new CustomEvent(
'reload-customer-section-data',
{
detail: {
sections: ['wishlist', 'messages']
}
}
);
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function (error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000
);
});
},
getItemId(productId) {
productId = productId.toString();
let browserStorage = hyva.getBrowserStorage().getItem('mage-cache-storage');
browserStorage = JSON.parse(browserStorage);
if (browserStorage) {
let wishlistItems = browserStorage.wishlist.items;
let itemToDelete;
wishlistItems.forEach(function (item) {
if (item.product_id == productId) {
itemToDelete = item.item_id;
}
});
return itemToDelete;
}
},
sendAddToWishlistEvent(productData) {
window.dataLayer?.push({
'event': 'productAddWishlist',
'productAddWishlist': [productData]
})
},
removeFromWishlist(productId) {
let wishlistIcon = document.querySelectorAll('[data-wishlist="' + productId + '"]');
wishlistIcon.forEach((arrayElement, index) => {
wishlistIcon[index].classList.remove('in-favorite');
wishlistIcon[index].querySelector('svg').classList.remove('in-favorite');
})
let itemId = this.getItemId(productId);
const formKey = hyva.getFormKey();
fetch(BASE_URL + "wishlist/index/remove?ajax=1", {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": "form_key=" + formKey + "&productId=" + productId + "&uenc=" + btoa(window.location.href) + '&item=' + itemId,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function (response) {
if (response.ok) {
return response.json();
} else if (response.redirected) {
window.location.href = response.url;
}
}).then(function (response) {
if (!response) { return }
const reloadCustomerDataEvent = new CustomEvent(
'reload-customer-section-data',
{
detail: {
sections: ['wishlist', 'messages']
}
}
);
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function (error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000
);
});
}
}
}
</script>
<script>
function initConfigurableOptions(productId, optionConfig) {
function findPathParam(key) {
const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL;
const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/');
const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3);
for (let i = 0; i < pathParts.length; i += 2) {
if (pathParts[i] === key && pathParts.length > i) {
return pathParts[i + 1];
}
}
}
return {
optionConfig,
productId,
itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'),
allowedAttributeOptions: [],
selectedValues: [],
attribueOptionsLength: 0,
isProductPage: document.body.classList.contains('catalog-product-view'),
isCategoryPage: document.body.classList.contains('catalog-category-view'),
isCmsPage: document.body.classList.contains('cms-page-view'),
init() {
this.findAllowedAttributeOptions();
this.preselectQuerystringItems();
this.preselectLocationHashItems();
this.$nextTick(() => {
if (typeof this.optionConfig.defaultValues === 'object') {
for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) {
this.changeOption(optionId, value + '');
}
}
});
},
findSimpleIndex() {
this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues);
},
calculateSimpleIndexForPartialSelection(selectedValues) {
if (selectedValues.length === 0) return 0;
let productIndexIds = Object.keys(this.optionConfig.index);
Object.keys(this.optionConfig.attributes).forEach((attribute) => {
const productsWithAttributeMatch = selectedValues[attribute]
? productIndexIds.filter((productIndex) => {
return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute]
})
: [];
productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds
})
return productIndexIds[0];
},
calculateSimpleIndexForFullSelection(selectedValues) {
const productIndexes = this.optionConfig.index;
return Object.keys(productIndexes).find(productIndex => {
const productCandidateOptions = productIndexes[productIndex];
for (const productOption in productCandidateOptions) {
if (
!selectedValues[productOption] ||
selectedValues[productOption] !== productCandidateOptions[productOption]
) {
return false;
}
}
return productIndex;
});
},
productIndex: 0,
findAllowedAttributeOptions() {
this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues);
this.attribueOptionsLength = this.allowedAttributeOptions[Object.keys(this.allowedAttributeOptions)[0]]?.length
},
calculateAllowedAttributeOptions(selectedValues) {
const allAttributes = this.optionConfig.attributes;
const allAttributesSorted = Object.values(allAttributes).sort((a, b) => {
return a.position - b.position
});
const productIndexes = this.optionConfig.index;
let previousOption = false;
let availableIndexes = Object.keys(productIndexes);
const newAllowedAttributeOptions = [];
allAttributesSorted.forEach(attribute => {
if (previousOption && selectedValues[previousOption]) {
availableIndexes = availableIndexes.filter(availableIndex => {
return productIndexes[availableIndex][previousOption] ===
selectedValues[previousOption]
})
}
newAllowedAttributeOptions[attribute.id] =
allAttributes[attribute.id].options.filter(option => {
return !!option.products.find(product => {
return availableIndexes.includes(product);
})
});
previousOption = attribute.id;
});
return newAllowedAttributeOptions;
},
findAttributeByOptionId(optionId) {
for (const attributeId in this.optionConfig.attributes) {
const attributeOptions = this.optionConfig.attributes[attributeId].options || [];
if (attributeOptions.find(option => option.id === optionId)) {
return attributeId;
}
}
},
getAllowedAttributeOptions(attributeId) {
return this.allowedAttributeOptions[attributeId] || []
},
getProductIdsForOption(option) {
const attributeId = this.findAttributeByOptionId(option.id);
const allOptions = this.optionConfig.attributes[attributeId];
const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id);
return opt && opt.products
? opt.products
: [];
},
findProductIdsForPartialSelection(optionSelection) {
const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => {
const newCandidates = this.getProductIdsForOption({id: optionId});
return candidates === null
? newCandidates
: candidates.filter(productId => newCandidates.includes(productId));
}, null);
return candidateProducts || [];
},
findCheapestProductForPartialSelection(optionSelection) {
const candidateProducts = this.findProductIdsForPartialSelection(optionSelection);
return candidateProducts.reduce((cheapest, simpleIdx) => {
if (!this.optionConfig.optionPrices[cheapest]) return simpleIdx;
const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount;
return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount
? simpleIdx
: cheapest;
}, 0)
},
findProductIdToUseForOptionPrice(option) {
const attributeId = this.findAttributeByOptionId(option.id);
const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id});
const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection);
return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection);
},
getAttributeOptionLabel(option) {
const optionProduct = this.findProductIdToUseForOptionPrice(option);
if ((!optionProduct) || (optionProduct === this.productIndex)) {
return option.label;
}
const currentPrice = this.getOptionPriceAdjustmentBasePrice();
if (this.optionConfig.optionPrices[optionProduct]) {
const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount;
if (optionPrice !== currentPrice) {
return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true);
}
}
return option.label;
},
getOptionPriceAdjustmentBasePrice() {
if (this.optionConfig.optionPrices[this.productIndex]) {
return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount
}
const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues);
return this.optionConfig.optionPrices[cheapestForSelection]
? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount
: this.optionConfig.prices.finalPrice.amount; // default price if no option selection
},
changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) {
if (value === '') {
this.selectedValues = this.selectedValues.reduce((newSelection, val, opt) => {
if (opt !== optionId) {
newSelection[opt] = val;
}
return newSelection;
}, []);
} else {
this.selectedValues[optionId] = value;
}
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateShortDescription();
this.updateGallery();
if (updateUrl) {
this.updateCurrentUrl(value, optionLabel);
}
this.$nextTick(() => {
window.dispatchEvent(
new CustomEvent(
'configurable-selection-changed',
{
detail: {
productId: this.productId,
sku: this.optionConfig.sku[Number(this.productIndex)],
optionId: this.optionId,
value: this.value,
productIndex: this.productIndex,
selectedValues: this.selectedValues,
flagsData: this.optionConfig.flags_data
? this.optionConfig.flags_data[this.productIndex]
: false,
shortDescription: this.optionConfig.short_description
? this.optionConfig.short_description[this.productIndex]
: false,
stock_alias: this.optionConfig.stock_alias
? this.optionConfig.stock_alias[this.productIndex]
: false,
adopt_code_erp: this.optionConfig.adopt_code_erp
? this.optionConfig.adopt_code_erp[this.productIndex]
: false,
}
}
)
);
window.dispatchEvent(new CustomEvent('stock-alert-modal-open-' + parentId, {detail: {productId: this.productIndex}}));
});
},
changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) {
if (value === '') {
this.selectedValues = this.selectedValues.reduce((newSelection, val, opt) => {
if (opt !== optionId) {
newSelection[opt] = val;
}
return newSelection;
}, []);
} else {
this.selectedValues[optionId] = value;
}
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateShortDescription();
this.updateGallery();
if (updateUrl) {
this.updateCurrentUrl(value, optionLabel);
}
this.$nextTick(() => {
window.dispatchEvent(
new CustomEvent(
'configurable-selection-changed',
{
detail: {
productId: this.productId,
sku: this.optionConfig.sku[Number(this.productIndex)],
optionId: this.optionId,
value: this.value,
productIndex: this.productIndex,
selectedValues: this.selectedValues,
flagsData: this.optionConfig.flags_data
? this.optionConfig.flags_data[this.productIndex]
: false,
shortDescription: this.optionConfig.short_description
? this.optionConfig.short_description[this.productIndex]
: false,
stock_alias: this.optionConfig.stock_alias
? this.optionConfig.stock_alias[this.productIndex]
: false,
adopt_code_erp: this.optionConfig.adopt_code_erp
? this.optionConfig.adopt_code_erp[this.productIndex]
: false,
}
}
)
);
window.dispatchEvent(new CustomEvent('stock-alert-modal-close-' + parentId, {productId: this.productIndex}));
});
},
calculateIsMinimalPrice() {
return (
this.selectedValues.filter(value => !!value).length <
Object.keys(this.optionConfig.attributes).length
);
},
updateCurrentUrl(value, optionLabel) {
let newParamValue = false;
let currentAttributeCode = false;
Object.values(this.optionConfig.attributes).map(attribute => {
attribute.options.map(option => {
if (option.id === value) {
currentAttributeCode = attribute.code;
newParamValue = option.label;
}
});
});
if (newParamValue && currentAttributeCode && typeof optionLabel !== 'undefined' && !optionLabel.includes('30 ')) {
const url = new URL(window.location.href);
const params = new URLSearchParams(url.search);
params.set(currentAttributeCode, newParamValue);
url.search = params.toString();
window.history.replaceState({}, '', url.toString());
}
if (typeof optionLabel !== 'undefined' && optionLabel.includes('30 ')) {
const url = new URL(window.location.href);
const params = new URLSearchParams(url.search);
params.delete(currentAttributeCode);
url.search = params.toString();
window.history.replaceState({}, '', url.toString());
}
},
updatePrices() {
const value = this.productIndex ?
this.optionConfig.optionPrices[this.productIndex] :
this.optionConfig.prices;
this.$nextTick(() => {
window.dispatchEvent(
new CustomEvent(
"update-prices-" + this.productId,
{
detail: Object.assign(
value,
{isMinimalPrice: this.calculateIsMinimalPrice()}
)
}
)
);
})
},
updateShortDescription() {
const value = this.optionConfig.short_description
? this.optionConfig.short_description[this.productIndex]
: false;
if (value) {
this.$nextTick(() => {
window.dispatchEvent(
new CustomEvent(
"update-short-description-" + this.productId,
{
detail: Object.assign(
value
)
}
)
);
});
}
},
updateGallery() {
if (this.productIndex) {
const images = this.optionConfig.images
? this.optionConfig.images[this.productIndex]
: false;
if (images) {
window.dispatchEvent(new CustomEvent(
"update-gallery",
{detail: this.sortImagesByPosition(images)}
));
return
}
}
window.dispatchEvent(new Event("reset-gallery"));
},
sortImagesByPosition(images) {
return images.sort((x, y) => {
return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1)
});
},
preselectQuerystringItems() {
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
Object.values(attribute.options).map(option => {
if (option.label === urlQueryParams.get(attribute.code)) {
if (option.disabled === true) {
this.changeDisabledOption(attribute.id, option.id, false, attribute.code, option.label, true, this.productId);
} else {
this.changeOption(attribute.id, option.id);
}
}
});
});
},
preselectLocationHashItems() {
const urlHashParams = new URLSearchParams(window.location.hash.replace('#', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
urlHashParams.get(attribute.id) &&
this.changeOption(attribute.id, urlHashParams.get(attribute.id));
});
},
preselectConfigurableOption(contenanceOptionIds, skipUpdateGallery = false) {
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).forEach(attribute => {
if (urlQueryParams.get(attribute.code) !== null) {
return;
}
if (attribute.code === 'contenance') {
let found = false;
let hasSpecialPriceFound = false;
let selectedOptionId, selectedOptionLabel;
let isOptionFoundDisabled = false;
for (const priorityOptionId of contenanceOptionIds) {
for (const option of Object.values(attribute.options)) {
if (typeof this.optionConfig.optionPrices[option.products[0]] === 'undefined') {
continue;
}
const hasSpecialPrice = this.optionConfig.optionPrices[option.products[0]]?.finalPrice.amount
!== this.optionConfig.optionPrices[option.products[0]]?.oldPrice.amount;
if (!hasSpecialPriceFound && hasSpecialPrice && String(option.id) === String(priorityOptionId)) {
found = true;
hasSpecialPriceFound = true;
selectedOptionId = option.id;
selectedOptionLabel = option.label;
isOptionFoundDisabled = option.disabled === true;
}
if (!found && String(option.id) === String(priorityOptionId)) {
found = true;
selectedOptionId = option.id;
selectedOptionLabel = option.label;
isOptionFoundDisabled = option.disabled === true;
}
}
}
if (found) {
if (isOptionFoundDisabled) {
this.changeDisabledOption(attribute.id, selectedOptionId, skipUpdateGallery, attribute.code, selectedOptionLabel);
} else {
this.changeOption(attribute.id, selectedOptionId, skipUpdateGallery, attribute.code, selectedOptionLabel);
}
}
} else {
const firstOption = Object.values(attribute.options).find(
option => option.disabled !== true && typeof this.optionConfig.optionPrices[option.products[0]] !== 'undefined'
);
if (firstOption) {
this.changeOption(attribute.id, firstOption.id, skipUpdateGallery, attribute.code, firstOption.label);
}
}
});
}
}
}
</script>
<script>
function initSwatchOptions(swatchConfig) {
return {
swatchConfig,
getAttributeSwatchData(attributeId) {
const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]);
swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']);
return swatchConfig;
},
getAllAttributeOptions(attributeId) {
return (
this.optionConfig.attributes[attributeId] &&
this.optionConfig.attributes[attributeId].options
) || []
},
optionIsActive(attributeId, optionId) {
// return true if a product with this option is in stock
return !!this.getAllowedAttributeOptions(attributeId).find(
option => option.id === optionId
)
},
optionIsEnabled(attributeId, optionId) {
// return true if a product with this option is enabled
for (const productId in this.optionConfig.index) {
if (this.optionConfig.index[productId][attributeId] === optionId) {
return true;
}
}
return false;
},
mapSwatchTypeNumberToTypeCode(typeNumber) {
switch ("" + typeNumber) {
case "1":
return "color"
case "2":
return "image"
case "3":
return "empty"
case "0":
default:
return "text"
}
},
getTypeOfFirstOption(attributeId) {
for (const optionId in this.swatchConfig[attributeId]) {
const option = this.swatchConfig[attributeId][optionId];
if (typeof option.type !== 'undefined') {
return this.mapSwatchTypeNumberToTypeCode(option.type);
}
}
},
getVisualSwatchType(attributeId, targetOptionId) {
// If a type configuration is present for the given option id, use it
const config = this.swatchConfig[attributeId];
if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') {
return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type);
}
// Otherwise - if no config is present for the target option - use the type of the first option
// with a type property from the attribute, thus assuming its the same type as the target option.
// (This edge case condition can occur on single swatch products if some options are not salable)
return this.getTypeOfFirstOption(attributeId);
},
getSwatchType(attributeId, optionId) {
// Deserialize the attribute details the first time they are used
if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) {
this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId);
}
const type = this.swatchConfig[attributeId] &&
this.swatchConfig[attributeId].details &&
this.swatchConfig[attributeId].details.swatch_input_type ||
"empty";
return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type;
},
isTextSwatch(attributeId, optionId) {
return this.getSwatchType(attributeId, optionId) === 'text';
},
isVisualSwatch(attributeId, optionId) {
const type = this.getSwatchType(attributeId, optionId);
return ['image', 'color'].includes(type);
},
getSwatchBackgroundStyle(attributeId, optionId) {
const config = this.getSwatchConfig(attributeId, optionId);
const type = this.getSwatchType(attributeId, optionId);
if (type === "color") {
return 'background-color:' + config.value;
} else if (type === "image") {
return "background: #ffffff url('" + config.value + "') no-repeat center; background-size: cover;";
} else {
return '';
}
},
getSwatchText(attributeId, optionId) {
const config = this.getSwatchConfig(attributeId, optionId);
return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId);
},
getOptionLabelFromOptionConfig(attributeId, optionId) {
// Fallback if no value is present in swatchConfig data
// Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190
const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId);
return option && option[0] && option[0].label ||'';
},
getSwatchConfig(attributeId, optionId) {
return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId]
? this.swatchConfig[attributeId][optionId]
: false;
},
activeTooltipItem: false,
tooltipPositionElement: false,
isTooltipVisible() {
return this.activeTooltipItem &&
this.getSwatchConfig(
this.activeTooltipItem.attribute,
this.activeTooltipItem.item
);
},
getTooltipImageStyle(attributeId, optionId) {
const config = this.getSwatchConfig(attributeId, optionId);
const type = this.getSwatchType(attributeId, optionId);
if (type === "color") {
return 'background-color:' + config.value + '; width: 104px; height: 62px;';
} else if (type === "image") {
return "background: #ffffff url('" + config.thumb +
"') center center no-repeat; width: 104px; height: 62px;";
} else {
return 'display:none';
}
},
getTooltipPosition() {
return this.tooltipPositionElement ?
`top: ${this.tooltipPositionElement.offsetTop}px;` +
`left: ${
this.tooltipPositionElement.offsetLeft - (
this.tooltipPositionElement.closest('.snap') &&
this.tooltipPositionElement.closest('.snap').scrollLeft ||
0
)
}px;` : ''
},
getTooltipLabel() {
return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label
},
focusedLabel: false,
focusLabel(optionId) {
this.focusedLabel = optionId;
},
blurLabel() {
this.focusedLabel = false;
},
showSwatches: false,
initShowSwatchesIntersect() {
if ('IntersectionObserver' in window && !window.scrollY) {
const io = new IntersectionObserver(
entries => {
entries.map(entry => {
if (entry.isIntersecting) {
this.showSwatches = true;
io.unobserve(this.$el);
}
})
}
);
io.observe(this.$el);
} else {
this.showSwatches = true
}
}
}
}
</script>
<!-- Account type: 'Google Tag Manager' is not supported -->
<script>
'use strict';
(function () {
const modals = [];
const excludedFromFocusTrapping = new Set();
function trapFocusInNextModalWithOverlay() {
for (let idx = modals.length -1; idx >= 0; idx--) {
const nextOnStack = modals[idx];
const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
if (! isOverlayDisabled(nextDialogElement)) {
hyva.trapFocus(nextDialogElement);
break;
}
}
}
function focusables(dialogElement) {
const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
return Array.from(dialogElement.querySelectorAll(selector))
.filter(el => !el.hasAttribute('disabled'));
}
function firstVisible(elements) {
const a = Array.from(elements);
for (let i = 0; i < a.length; i++) {
if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
}
return null;
}
function isInViewport(element) {
const rect = element && element.getBoundingClientRect();
return rect &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.right <= window.innerWidth &&
rect.bottom <= window.innerHeight;
}
function setFocusAfterTransition(dialogElement, duration) {
const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
next: for (let candidate of candidates) {
for (let child of nested) {
if (child.contains(candidate)) continue next;
}
setTimeout(() => candidate.focus(), 50);
break;
}
window.setTimeout(() => {
const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
focusables(dialogElement)[0] ||
null;
focusElement && isInViewport(focusElement) && focusElement.focus();
}, Math.max(1, duration));
}
function determineTrigger($refs, dialog, trigger) {
if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
return dialog.target;
}
if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
return trigger.target;
}
if (typeof trigger === 'string') {
try {
return $refs[trigger] || document.querySelector(trigger)
} catch (e) {}
}
if (trigger instanceof Element) {
return trigger;
}
return null;
}
function isOverlayDisabled(dialog) {
return dialog && dialog.hasAttribute('x-no-overlay')
}
function areRemainingModalsWithoutOverlay(modals)
{
const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
return overflowDisabled.length === modals.length;
}
window.hyva.modal = function(options) {
const config = Object.assign({
dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300',
transitionEnterStart: 'opacity-0',
transitionEnterEnd: 'opacity-100',
transitionLeave: 'transition ease-in duration-300',
transitionLeaveStart: 'opacity-100',
transitionLeaveEnd: 'opacity-0',
}, options);
let lastHide = 0;
return {
opened: {},
show(dialog, trigger) {
const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
const name = typeof dialog === 'string' ? dialog : config.dialog;
const dialogElement = this.$refs[name];
if (! dialogElement) {
return;
}
const useOverlay = ! dialogElement.hasAttribute('x-no-overlay');
dialogElement.scrollTop = 0;
if (this.opened[name]) {
return;
}
if (focusTargetAfterHide) {
focusTargetAfterHide.setAttribute('aria-expanded', 'true');
}
this.opened[name] = true;
useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
setFocusAfterTransition(dialogElement, config.duration);
const frame = {name, instance: this, focusTarget: focusTargetAfterHide, time: Date.now()};
modals.push(frame);
if (useOverlay) {
document.body.classList.add('overflow-hidden');
}
return new Promise(resolve => frame.resolve = resolve);
},
cancel() {
this.hide(false);
},
ok() {
this.hide(true);
},
hide(value) {
if (Date.now() - lastHide < config.duration) {
return;
}
lastHide = Date.now();
const modal = modals.pop() || {};
const name = modal.name;
this.opened[name] = false;
hyva.releaseFocus(modal.instance.$refs[modal.name])
trapFocusInNextModalWithOverlay();
const nextFocusAfterHide = modal.focusTarget;
nextFocusAfterHide && setTimeout(() => {
nextFocusAfterHide.setAttribute('aria-expanded', 'false');
nextFocusAfterHide.focus()
}, config.duration);
if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
document.body.classList.remove('overflow-hidden');
}
modal.resolve(value);
},
overlay(dialog) {
const name = typeof dialog === 'string' ? dialog : config.dialog;
return {
['x-show']() {
return this.opened[name]
},
['x-transition:enter']: config.transitionEnter,
['x-transition:enter-start']: config.transitionEnterStart,
['x-transition:enter-end']: config.transitionEnterEnd,
['x-transition:leave']: config.transitionLeave,
['x-transition:leave-start']: config.transitionLeaveStart,
['x-transition:leave-end']: config.transitionLeaveEnd,
['@hyva-modal-show.window'](event) {
event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
}
};
}
};
}
window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1]
window.hyva.modal.pop = function () {
if (modals.length > 0) {
const modal = modals[modals.length -1];
modal.instance.hide();
}
}
window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {
typeof selectors === 'string' || selectors instanceof String
? excludedFromFocusTrapping.add(selectors)
: selectors.map(selector => excludedFromFocusTrapping.add(selector));
}
window.hyva.modal.eventListeners = {
keydown: event => {
if (event.key === 'Escape') {
window.hyva.modal.pop();
}
},
click: event => {
let onetrustDarkFilter = document.querySelector('#onetrust-consent-sdk > div.onetrust-pc-dark-filter')
if (modals.length > 0 && (!onetrustDarkFilter || onetrustDarkFilter.style.display === 'none')) {
const modal = modals[modals.length -1];
const dialog = modal.instance.$refs[modal.name];
if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
! isOverlayDisabled(dialog) && // if dialog has overlay
! dialog.contains(event.target)) { // if click is outside of dialog
modal.instance.hide();
}
}
}
};
document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
document.addEventListener('click', window.hyva.modal.eventListeners.click);
})();
</script>
<script>
document.addEventListener('alpine:init', () => {
Alpine.data("initIncentiveCart", () => ({
isLoading: true,
cartDatas: '',
amount: '',
step1Reached: false,
step2Reached: false,
freeShippingValue: '',
freeGift2Amount: '',
freeGift3Amount: '',
labelShippingStep: '',
currentAmountCart: '',
amountStep: '',
amountStep1: '',
amountStep2: '',
amountStep3: '',
cartDatasLocalStorage() {
let browserStorage = hyva.getBrowserStorage().getItem('mage-cache-storage');
let cart = "";
browserStorage = JSON.parse(browserStorage);
if (browserStorage) {
cart = browserStorage.cart;
} else {
cart = undefined;
}
this.cartDatas = cart;
},
calcFreeShipping(data) {
let subtotalAmount;
if (typeof data !== 'undefined') {
subtotalAmount = data.subtotalAmount
this.cartDatas = data
} else {
subtotalAmount = this.cartDatas.subtotalAmount
}
this.freeShippingValue = this.cartDatas.freeShippingAmount
let amount = this.freeShippingValue - subtotalAmount;
amount = amount.toFixed(2);
if (amount > 0) {
amount = amount.replace('.', ',');
} else {
amount = 0
}
this.amount = amount;
this.isLoading = false;
return amount;
},
calcBarSize(step) {
this.cartDatasLocalStorage();
if (typeof this.cartDatas === 'undefined') {
return;
}
this.calcFreeShipping();
this.freeShippingValue = this.cartDatas.freeShippingAmount;
this.freeGift2Amount = this.cartDatas.freeGift2Amount;
this.freeGift3Amount = this.cartDatas.freeGift3Amount;
this.currentAmountCart = this.cartDatas.subtotalAmount;
this.amountStep1 = this.freeShippingValue - this.currentAmountCart;
this.amountStep2 = this.freeGift2Amount - this.currentAmountCart;
this.amountStep3 = this.freeGift3Amount - this.currentAmountCart;
let widthBar = 100;
if (step === 'step1') {
if (this.amountStep1 > 0) {
widthBar = 100 - (this.amountStep1 * 100 / this.freeShippingValue);
widthBar = this.getWidthBar(widthBar);
this.step1Reached = false;
} else {
widthBar = 100;
this.step1Reached = true;
}
this.amountStep = this.amountStep1.toFixed(2);
this.labelShippingStep = "Livraison offerte"
}
if (step === 'step2' && this.freeGift2Amount) {
if (this.amountStep2 > 0) {
widthBar = 100 - (this.amountStep2 * 100 / (this.freeGift2Amount - this.freeShippingValue));
widthBar = this.getWidthBar(widthBar);
this.step2Reached = false;
} else {
widthBar = 100;
this.step2Reached = true;
}
if(this.amountStep1 < 0) {
this.amountStep = this.amountStep2.toFixed(2);
this.labelShippingStep = this.cartDatas.freeGift2Label;
}
if (!this.step1Reached) {
widthBar = 0;
}
}
if (step === 'step3' && this.freeGift3Amount) {
if (this.amountStep3 > 0) {
widthBar = 100 - (this.amountStep3 * 100 / (this.freeGift3Amount - this.freeGift2Amount));
widthBar = this.getWidthBar(widthBar);
} else {
widthBar = 100;
}
if(this.amountStep2 < 0) {
this.amountStep = this.amountStep3.toFixed(2);
this.labelShippingStep = this.cartDatas.freeGift3Label;
}
if (!this.step2Reached) {
widthBar = 0;
}
}
return 'width: ' + widthBar + '%';
},
getWidthBar(widthBar) {
if (widthBar >= 0 && widthBar < 20) {
widthBar = 20;
} else if (widthBar >= 20 && widthBar < 40) {
widthBar = 40;
} else if (widthBar >= 40 && widthBar < 66) {
widthBar = 66;
} else if (widthBar >= 66 && widthBar < 100) {
widthBar = 90;
}
return widthBar;
}
}));
});
</script>
<script>
'use strict';
function dispatchPreselectConfigurableOption(target = 'window', skipUpdateGallery = true) {
const event = new CustomEvent('preselect-configurable-option', {
detail: {
contenanceOptionIds: ["350","913","351","349"],
skipUpdateGallery: skipUpdateGallery
}
});
if (target === 'window') {
window.dispatchEvent(event);
} else {
target.dispatchEvent(event);
}
}
</script>
<style>
.is-loading > :not(.loader) {
visibility: hidden;
}
</style>
<script>
window.setAjaxCart = (
selectors = '.product_addtocart_form, #product_addtocart_form, .item-widget-add-to-cart, .ritual-addtocart, .category-add-to-cart-form-product, .add-to-cart-form-product-wishlist',
recursive = true
) => {
const addToCartForms = document.querySelectorAll(selectors);
const delay = parseInt('1500', 10);
addToCartForms.forEach(form => {
if (!form.hasEventListener) {
form.hasEventListener = true;
form.addEventListener('submit', e => {
e.preventDefault();
const data = new URLSearchParams(new FormData(form)),
buttons = form.querySelectorAll('.added-to-cart');
let cancelSubmit = false;
buttons.forEach(button => {
let backUrl = false;
let swatchAttributeWrapper = form.querySelector('.swatch-attribute-wrapper');
let checkedInput = swatchAttributeWrapper ? swatchAttributeWrapper.querySelector('input:checked') : false;
if (swatchAttributeWrapper && !checkedInput) {
cancelSubmit = true;
window.dispatchEvent(new CustomEvent('product-addtocart-error'));
setMessage({
text: 'Vous devez choisir des options pour votre article.',
type: 'error',
class: 'fixed'
});
}
if (!button.classList.contains('force-show')) {
button.classList.remove('hidden');
button.disabled = true;
}
if (!cancelSubmit) {
cancelSubmit = true;
fetch(e.currentTarget.action, {
method: 'POST',
body: data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest'
}
}).then(res => {
if (!res.ok) {
form.submit();
}
return res.json();
}).then(res => {
if (res.backUrl) {
backUrl = res.backUrl;
} else {
window.dispatchEvent(new CustomEvent('product-addtocart-success-' + data.get('product')));
window.dispatchEvent(new CustomEvent('product-addtocart-success'));
window.dispatchEvent(
new CustomEvent(
'reload-customer-section-data',
{
detail: {
sections: ['cart', 'cart-tagging', 'messages']
}
}
)
);
}
}).catch(err => {
console.log(err);
window.dispatchEvent(new CustomEvent('product-addtocart-error'));
setMessage({
text: 'There was a problem adding your item to the cart.',
type: 'error'
});
}).finally(() => {
try {
var messages = hyva.getCookie('mage-messages');
messages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
document.cookie = 'mage-messages=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
} catch (error) {
console.warn('Error parsing Cookie Messages:', error);
return;
}
setTimeout(() => {
buttons.forEach(button => {
if (!button.classList.contains('force-show')) {
button.classList.add('hidden');
button.disabled = false;
}
});
messages.forEach(message => {
setMessage(message);
});
if (backUrl && (window.location.href !== backUrl)) {
window.location.href = backUrl;
}
}, delay);
});
}
})
});
}
});
}
/**
* Set Message
*/
function setMessage(message) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[message], 5000
);
}
/** Init on pageload */
window.setAjaxCart();
</script>
<script>
'use strict';
(() => {
function _calculateStrength({elementID, valid}) {
const password = document.getElementById(elementID),
emailElm = document.getElementById('email_address');
let displayScore;
// Display score is based on combination of whether password is empty, valid, and zxcvbn strength
if (!password || !password.value) {
displayScore = 0;
} else {
// We should only perform this check in case there is an email field on screen
if (emailElm && password.value && emailElm.value &&
password.value.toLowerCase() === emailElm.value.toLowerCase()) {
displayScore = 1;
} else {
const zxcvbnScore = zxcvbn(password.value).score;
displayScore = valid && zxcvbnScore > 0 ? zxcvbnScore : 1;
}
}
_displayStrength(displayScore);
}
function _displayStrength(displayScore) {
let strengthLabel = '',
className;
switch (displayScore) {
case 0:
strengthLabel = "Aucun\u0020mot\u0020de\u0020passe";
className = 'password-none';
break;
case 1:
strengthLabel = "Faible";
className = 'password-weak';
break;
case 2:
strengthLabel = "Moyen";
className = 'password-medium';
break;
case 3:
strengthLabel = "Elev\u00E9";
className = 'password-strong';
break;
case 4:
strengthLabel = "Tr\u00E8s\u0020\u00E9lev\u00E9";
className = 'password-very-strong';
break;
}
const meterElm = document.getElementById('password-strength-meter-container'),
meterLabelElm = document.getElementById('password-strength-meter-label');
meterElm.className = '';
meterElm.classList.add(className);
meterLabelElm.textContent = strengthLabel;
}
let loading = false;
const callbacks = [];
function loadZxcvbn(cb) {
callbacks.push(cb);
if (loading) return;
loading = true;
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https\u003A\u002F\u002Fwww.adopt.com\u002Fstatic\u002Fversion1772544398\u002Ffrontend\u002FAdopt\u002Fhyva\u002Ffr_FR\u002Fjs\u002Fzxcvbn.js';
script.async = true;
script.onload = () => callbacks.forEach(cb => cb());
document.head.appendChild(script);
}
window.addEventListener('password-validate', function (evt) {
const meterElm = document.getElementById('password-strength-meter-container'),
meterLabelElm = document.getElementById('password-strength-meter-label');
if (meterElm && meterLabelElm) {
if (evt.detail && evt.detail.elementID) {
const cb = () => _calculateStrength(evt.detail);
window.zxcvbn ? cb() : loadZxcvbn(cb)
}
}
});
document.addEventListener('DOMContentLoaded', () => {
hyva && hyva.formValidation && hyva.formValidation.addRule('password-strength', function(value, options, field, context) {
let counter = 0;
const minCharacterSets = options.minCharacterSets !== undefined ? options.minCharacterSets : 1;
if (value.match(/\d+/)) {
counter++;
}
if (value.match(/[a-z]+/)) {
counter++;
}
if (value.match(/[A-Z]+/)) {
counter++;
}
if (value.match(/[^a-zA-Z0-9]+/)) {
counter++;
}
queueMicrotask(() => {
window.dispatchEvent(new CustomEvent('password-validate', { detail: {
elementID: field.element.id || 'password',
valid: field.state.valid
}}));
});
if (counter < minCharacterSets) {
const missing = minCharacterSets - counter;
return hyva.str('The\u0020password\u0020must\u0020include\u0020at\u0020least\u0020\u00251\u0020or\u0020more\u0020of\u003A\u0020uppercase\u0020\u0028A\u002DZ\u0029,\u0020lowercase\u0020\u0028a\u002Dz\u0029,\u0020number\u0020and\u0020symbol.', missing);
}
return true;
});
})
})();
</script>
<script type="application/json" id="default-section-data">
{"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":{"summary_count":0,"subtotalAmount":0,"subtotal":"<span class=\"price\">0,00\u00a0\u20ac<\/span>","possible_onepage_checkout":true,"items":[],"extra_actions":"","isGuestCheckoutAllowed":false,"website_id":"1","storeId":"1","cartId":"","storeViewCode":"fr","cart_empty_message":"","subtotal_incl_tax":"<span class=\"price\">0,00\u00a0\u20ac<\/span>","subtotal_excl_tax":"<span class=\"price\">0,00\u00a0\u20ac<\/span>","originalSubtotalAmount":0,"freeShippingAmount":35,"freeGift2Amount":0,"freeGift2Label":null,"freeGift3Amount":0,"freeGift3Label":null,"minimumShippingAmount":"4.5","isKlarnaEnabled":"1","data_id":1773113106},"directory-data":{"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"},"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"1018":{"code":"98","name":"Monaco"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"1017":{"code":"OM","name":"Outre-Mer"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"LU":{"name":"Luxembourg"},"MC":{"name":"Monaco"},"data_id":1773113106},"captcha":[],"wishlist":{"items":[]},"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"browsing-data":{"env_work":"prod","locale":"fr_FR","env_country":"FR","env_currency":"EUR","env_language":"fr","user_logged":"not logged","user_identification_tool":"guest","data_id":1773113106},"beauty-profile-section":[],"ammessages":[],"customer-tagging":[],"cart-tagging":{"items":[],"restore_cart_url":""},"active-variation-tagging":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script>
</div><script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-4b6988c7591e6a263f7","applicationID":"1035779564","transactionName":"MwMHNkNWW0BRUEMKWwpJJAFFXlpdH1BaEBsNCAEHSRhcXVRWTw==","queueTime":0,"applicationTime":321,"atts":"H0QEQAtMSE4=","errorBeacon":"bam.nr-data.net","agent":""}</script></body>
</html>