<!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="Parfum | Adopt Parfum"/>
<meta name="description" content="Adopt, c'est une Gamme de Parfum adaptée à vos besoins à petit prix: Parfum femme, Parfum homme, Parfum mixte, etc. Adopt Parfum"/>
<meta name="robots" content="INDEX,FOLLOW"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Parfum | Adopt Parfum</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="canonical" href="https://www.adopt.com/fr/parfum.html" />
<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/parfum.html",
"name": "Parfum | Adopt Parfum",
"description": "Adopt, c'est une Gamme de Parfum adaptée à vos besoins à petit prix: Parfum femme, Parfum homme, Parfum mixte, etc. Adopt Parfum\r\n",
"inLanguage": "fr-FR",
"isPartOf": {
"@type": "WebSite",
"url": "https://www.adopt.com/fr"
},
"datePublished": "2022-03-03",
"dateModified": "2026-03-13",
"about": {
"@type": "Thing",
"name": "Parfum"
},
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Accueil",
"item": "https://www.adopt.com/fr"
},
{
"@type": "ListItem",
"position": 2,
"name": "Parfum",
"item": "https://www.adopt.com/fr/parfum.html"
}
]
},
"primaryImageOfPage": {
"@type": "ImageObject",
"url": "https://www.adopt.com/fr/media/catalog/category/CRM_MIXMULTIPRODUIT_MIXTE_1.jpg"
}
} </script>
<link rel="alternate"
id="alternate-url-fr"
hreflang="fr-fr"
href="https://www.adopt.com/fr/parfum.html"
/>
<link rel="alternate"
id="alternate-url-en"
hreflang="en-gb"
href="https://www.adopt.com/en/fragrance.html"
/>
<link rel="alternate"
id="alternate-url-es"
hreflang="es-es"
href="https://www.adopt.com/es/perfume.html"
/>
<link rel="alternate"
id="alternate-url-be-fr"
hreflang="fr-be"
href="https://www.adopt.com/be-fr/parfum.html"
/>
<link rel="alternate"
id="alternate-url-be-nl"
hreflang="nl-be"
href="https://www.adopt.com/be-nl/parfum.html"
/>
<link rel="alternate"
id="alternate-url-ca-fr"
hreflang="fr-ca"
href="https://www.adopt.com/ca-fr/parfum.html"
/>
<link rel="alternate"
id="alternate-url-it"
hreflang="it-it"
href="https://www.adopt.com/it/profumo.html"
/>
<link rel="alternate"
id="alternate-url-ma-fr"
hreflang="fr-ma"
href="https://www.adopt.com/ma-fr/parfum.html"
/>
<link rel="alternate"
id="alternate-url-fr"
hreflang="x-default" href="https://www.adopt.com/fr/parfum.html"
/>
<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>
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.adopt.com/fr/parfum.html">
<meta property="og:title" content="Parfum | Adopt Parfum">
<meta property="og:description" content="Adopt, c'est une Gamme de Parfum adaptée à vos besoins à petit prix: Parfum femme, Parfum homme, Parfum mixte, etc. Adopt Parfum">
<meta property="og:image" content="https://adopt.twic.pics/media/catalog/category/CRM_MIXMULTIPRODUIT_MIXTE_1.jpg?twic=v1">
<meta name="author" content="Adopt Parfums">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"url": "https://www.adopt.com/fr/parfum.html",
"name": "Parfum | Adopt Parfum",
"description": "Adopt, c'est une Gamme de Parfum adaptée à vos besoins à petit prix: Parfum femme, Parfum homme, Parfum mixte, etc. Adopt Parfum\r\n",
"inLanguage": "fr-FR",
"isPartOf": {
"@type": "WebSite",
"url": "https://www.adopt.com/fr"
},
"datePublished": "2022-03-03",
"dateModified": "2026-03-13",
"about": {
"@type": "Thing",
"name": "Parfum"
},
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Accueil",
"item": "https://www.adopt.com/fr"
},
{
"@type": "ListItem",
"position": 2,
"name": "Parfum",
"item": "https://www.adopt.com/fr/parfum.html"
}
]
},
"primaryImageOfPage": {
"@type": "ImageObject",
"url": "https://www.adopt.com/fr/media/catalog/category/CRM_MIXMULTIPRODUIT_MIXTE_1.jpg"
}
} </script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ItemList",
"name": "Parfum | Adopt Parfum",
"description": "Adopt, c'est une Gamme de Parfum adaptée à vos besoins à petit prix: Parfum femme, Parfum homme, Parfum mixte, etc. Adopt Parfum\r\n",
"url": "https://www.adopt.com/fr/parfum.html",
"numberOfItems": 438,
"itemListElement": [
{
"@type": "Product",
"name": "Girl Secret",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne l'Eau de parfum Girl Secret d’Adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/eau-de-parfum-girl-secret-8883701429856137-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/eau-de-parfum-girl-secret-8883701429856137-fr.html",
"priceCurrency": "EUR",
"price": "11.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Girl Secret",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret eau de parfum 30 ml + gel douche 250 ml Girl Secret d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-girl-secret-3701429853082-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-girl-secret-3701429853082-fr.html",
"priceCurrency": "EUR",
"price": "16.90",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Girl Power",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret métal 4 eaux de parfum 30 ml - Girl Secret + Rouge Lipstick + Lova Lova + Wonderful - Girl Power d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-girl-secret-rouge-lipstick-lova-lova-wonderful-girl-power-3701429853617-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-girl-secret-rouge-lipstick-lova-lova-wonderful-girl-power-3701429853617-fr.html",
"priceCurrency": "EUR",
"price": "36.85",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Wonderful",
"image": "https://www.adopt.com/media/catalog/product/w/o/wonderful_30ml_1_1_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne l'eau de parfum wonderful pailletee d’adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé",
"url": "https://www.adopt.com/fr/wonderful-eau-de-parfum-pailletee-8883701429831608-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/wonderful-eau-de-parfum-pailletee-8883701429831608-fr.html",
"priceCurrency": "EUR",
"price": "11.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Wonderful",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le coffret 30ml + gel douche 250ml Wonderful d’adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/wonderful-coffret-30-ml-gel-douche-250-ml-3701429834210-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/wonderful-coffret-30-ml-gel-douche-250-ml-3701429834210-fr.html",
"priceCurrency": "EUR",
"price": "16.90",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Lova Lova",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne l'Eau de parfum Lova Lova d’Adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/eau-de-parfum-lova-lova-8883701429850289-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/eau-de-parfum-lova-lova-8883701429850289-fr.html",
"priceCurrency": "EUR",
"price": "11.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Lova Lova",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret eau de parfum 30 ml + gel douche 250 ml Lova Lova d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lova-lova-3701429850265-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lova-lova-3701429850265-fr.html",
"priceCurrency": "EUR",
"price": "16.90",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Lova Lova",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret métal 4 eaux de parfum 30ml - Lova Lova + Cœur à Cœur + XXL Sensuality + Love Mood Lova Lova d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30ml-lova-lova-coeur-a-coeur-xxl-sensuality-love-mood-lova-lova-3701429850357-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30ml-lova-lova-coeur-a-coeur-xxl-sensuality-love-mood-lova-lova-3701429850357-fr.html",
"priceCurrency": "EUR",
"price": "36.85",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Rouge lipstick",
"image": "https://www.adopt.com/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne Rouge Lipstick l'Eau de parfum 30ml d’Adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/eau-de-parfum-30-ml-rouge-lipstick-3701429842444-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/eau-de-parfum-30-ml-rouge-lipstick-3701429842444-fr.html",
"priceCurrency": "EUR",
"price": "11.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Rouge Lipstick",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret eau de parfum 30 ml + gel douche 250 ml Rouge Lipstick d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-rouge-lipstick-3701429853129-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-rouge-lipstick-3701429853129-fr.html",
"priceCurrency": "EUR",
"price": "16.90",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Jolie Paris",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne l'Eau de parfum Jolie Paris d’Adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/eau-de-parfum-jolie-paris-8883701429851590-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/eau-de-parfum-jolie-paris-8883701429851590-fr.html",
"priceCurrency": "EUR",
"price": "11.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Jolie Paris",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret eau de parfum 30 ml + gel douche 250 ml Jolie Paris d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-jolie-paris-3701429851576-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-jolie-paris-3701429851576-fr.html",
"priceCurrency": "EUR",
"price": "16.90",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Jolie Paris",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret eau de parfum 30 ml + gel douche 250 ml + lait corps 200 ml Jolie Paris d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-jolie-paris-3701429851682-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-jolie-paris-3701429851682-fr.html",
"priceCurrency": "EUR",
"price": "22.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Un air de Paris",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret métal 4 eaux de parfum 30ml - Jolie Paris + Rendez-vous Gourmand + Nuit Parisienne + Avenue des Fleurs Un air de Paris d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-jolie-paris-rendez-vous-gourmand-nuit-parisienne-avenue-des-fleurs-un-air-de-paris-3701429851781-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-jolie-paris-rendez-vous-gourmand-nuit-parisienne-avenue-des-fleurs-un-air-de-paris-3701429851781-fr.html",
"priceCurrency": "EUR",
"price": "36.85",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Rendez-vous Gourmand",
"image": "https://www.adopt.com/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne l'Eau de parfum Rendez-vous Gourmand d’Adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/eau-de-parfum-rendez-vous-gourmand-8883701429839826-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/eau-de-parfum-rendez-vous-gourmand-8883701429839826-fr.html",
"priceCurrency": "EUR",
"price": "11.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Rendez-vous Gourmand",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret eau de parfum 30 ml + gel douche 250 ml + lait corps 200 ml Rendez-vous Gourmand d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-rendez-vous-gourmand-3701429851736-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-rendez-vous-gourmand-3701429851736-fr.html",
"priceCurrency": "EUR",
"price": "22.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Nuit Parisienne",
"image": "https://www.adopt.com/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_3.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne l'eau de parfumNuit Parisienne d’adopt créée et fabriquée en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/nuit-parisienne-eau-de-parfum-9993701429833573-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/nuit-parisienne-eau-de-parfum-9993701429833573-fr.html",
"priceCurrency": "EUR",
"price": "11.95",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Nuit Parisienne",
"image": "https://www.adopt.com/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?width=91&height=91&quality=80&fit=bounds",
"description": "Découvrez et commandez en ligne le Coffret eau de parfum 30 ml + gel douche 250 ml Nuit Parisienne d’Adopt créé et fabriqué en France. Expédition sous 24h. Paiement sécurisé.",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-nuit-parisienne-3701429851613-fr.html",
"brand": {
"@type": "Brand",
"name": "Adopt Parfums"
},
"offers": {
"@type": "Offer",
"url": "https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-nuit-parisienne-3701429851613-fr.html",
"priceCurrency": "EUR",
"price": "16.90",
"availability": "https://schema.org/InStock"
}
}
]
} </script>
<!-- Nosto Meta Tags -->
<meta name="nosto-version" content="7.5.0">
<meta name="nosto-language" content="fr">
</head>
<body class="website-base page-with-filter page-immersive-image page-products categorypath-parfum category-parfum page-layout-2columns-left catalog-category-view page-layout-category-full-width" id="html-body">
<script>
"use strict";
function initGenericEventDatalayer() {
return {
browsingData: false,
initGenericEvent(data) {
if (data['browsing-data']) {
this.browsingData = data['browsing-data'];
window.pageTemplate = 'page_categorie_produit';
window.env_currency = this.browsingData.env_currency;
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': 'page_categorie_produit',
'cvar_template': 'page_categorie_produit',
'env_work': this.browsingData.env_work,
'env_version': 'desktop',
'page_cat1_id': 'soin-corps',
'page_cat1_name': 'Corps',
'page_cat2_id': 'soin-corps-par-produit',
'page_cat2_name': 'Par produit',
'page_cat3_id': 'creme-et-lait-corps',
'page_cat3_name': 'Crème & lait corps',
'page_content_type': 'categorie',
'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': this.browsingData.order_count > 0 ? 0 : 1,
'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,
})
}
}
}
}
</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="TW5SENaRlup3v8iR" />
<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_3jla8bWtFMYArXYN9K18PGrktQRVNxFY()">
<div :class="{ 'hidden': ! show }"
id="snackbar_3jla8bWtFMYArXYN9K18PGrktQRVNxFY"
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_3jla8bWtFMYArXYN9K18PGrktQRVNxFY 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/JEU-GIRL_SECRET_Snackbar_FR-BE_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/jeu"
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_3jla8bWtFMYArXYN9K18PGrktQRVNxFY').style.right = '20px'; }
function initSnackbar_3jla8bWtFMYArXYN9K18PGrktQRVNxFY() {
return {
show: false,
excludeUrls: [],
init() {
let cookieValue = hyva.getCookie('snackbar_3jla8bWtFMYArXYN9K18PGrktQRVNxFY'),
dateNow = new Date(),
isDateValid = true,
isUrlValid = true,
startDate = new Date('2026-03-11 00:00:00') || null,
endDate = new Date('2026-03-31 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': 'JEU\u0020GIRL\u0020SECRET\u0020FR',
'action': 'Impression',
});
}
setTimeout(() => {
if (this.show) {
this.show = false;
hyva.setCookie('snackbar_3jla8bWtFMYArXYN9K18PGrktQRVNxFY', 1, 0.2);
}
}, 10000 + 2000 + 1000);
},
sendClickEvent() {
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'JEU\u0020GIRL\u0020SECRET\u0020FR',
'action': 'ouverture',
});
},
close() {
hyva.setCookie('snackbar_3jla8bWtFMYArXYN9K18PGrktQRVNxFY', 1, 0.2);
window.dataLayer?.push({
'event': 'Snackbar',
'widget_title': 'JEU\u0020GIRL\u0020SECRET\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">
<div 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>
</div>
<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_69b892e639b91()"
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_69b892e639b91('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_69b892e639b91('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_69b892e639b91('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_GIRL_SECRET_2026_Overlay_KV_Parfums_FR_1_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_2026_Overlay_KV_Parfums_FR_1_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_69b892e639b91('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_69b892e639b91('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_69b892e639b91('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_GIRL_SECRET_2026_Overlay_SKINCARE_FR_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_2026_Overlay_SKINCARE_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">
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_GIRL_SECRET_2026_Overlay_SKINCARE_FR_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_2026_Overlay_SKINCARE_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_69b892e639b91('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_69b892e639b91('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_69b892e639b91('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_GIRL_SECRET_2026_Overlay_SKINCARE_FR_4.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_2026_Overlay_SKINCARE_FR_4.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_69b892e639b91('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_69b892e639b91('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_69b892e639b91('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_69b892e639b91('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_GIRL_SECRET_2026_Overlay_COFFRETS_FR_2_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_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_GIRL_SECRET_2026_Overlay_COFFRETS_FR_2_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_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_69b892e639b91('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_69b892e639b91('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_GIRL_SECRET_2026_Overlay_COFFRETS_FR_4_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_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_69b892e639b91(), 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_69b892e66ab98()"
@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_69b892e66ab98() {
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":"MA","country_label":{"fr":"Maroc","es":"Marruecos","en":"Morocco","nl":"Marokko"},"locale_code":"default","locale_label":"fr","store_code":"ma-fr","destinationUrl":"https:\/\/www.adopt.com\/ma-fr\/"},{"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_69b892e639b91(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_69b892e639b91() {
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_69b892e66b0be()"
@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-69b892e66b7cd'"
@mouseleave="hoverPanelActiveId = 0">
<span class="flex h-full items-center block text-md bg-opacity-95 relative">
<button type="button"
id="cms-node-69b892e66b7cd"
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-69b892e66b7cd'"
aria-haspopup="true"
aria-controls="subnav-cms-node-69b892e66b7cd"
@keydown.arrow-down.prevent="openedViaKeyboard = true; openSubNav('cms-node-69b892e66b7cd', $refs)"
@keydown.space.prevent="openedViaKeyboard = true; openSubNav('cms-node-69b892e66b7cd', $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_GIRL_SECRET_2026_Overlay_KV_Parfums_FR_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_2026_Overlay_KV_Parfums_FR_2.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_GIRL_SECRET_2026_Overlay_SKINCARE_FR_3.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_2026_Overlay_SKINCARE_FR_3.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_GIRL_SECRET_2026_Overlay_COFFRETS_FR_3_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_GIRL_SECRET_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-69b892e66b7cd', $refs )"
@mouseleave="openSubNav(0, $refs)"
id="subnav-cms-node-69b892e66b7cd"
class="subnav-content hidden overflow-y-auto" :class="{ 'hidden' : hoverPanelActiveId !== 'cms-node-69b892e66b7cd', 'block' : hoverPanelActiveId === 'cms-node-69b892e66b7cd' }">
<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-69b892e66b7cd' })"
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-69b892e66b7cd' })"
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-69b892e66b7cd' })"
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-69b892e66b7cd' })"
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-69b892e66b7cd' })"
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_69b892e66b0be = () => {
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>
<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="page-main"><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><div id="category-view-container" class="category-view"><script>
function initCategoryHeader() {
return {
isLandingPage: 0,
init() {
if((document.body.style.background === '') && this.isLandingPage) {
document.body.style.background = "#F5F5FD"
}
}
}
}
</script>
<div id="category-header" class="container w-full relative z-1 pb-6 md:pb-9 pt-[70px] md:pt-9"
x-data="initCategoryHeader()">
<div>
<div class=""> <nav class="breadcrumbs" aria-label="Breadcrumb">
<div class="container px-0 mx-0">
<ol class="items list-reset py-1.25 rounded inline-flex flex-wrap text-sm gap-x-1.5">
<li class="item flex text-anthracite-400 font-medium text-tiny leading-[1.2] gap-x-1.5 md:text-tiny home">
<a href="https://www.adopt.com/fr"
class="no-underline text-anthracite-400 hover:text-pink transition duration-300"
title="Aller à la page d’accueil"
>Adopt Parfums</a>
</li>
<li class="item flex text-anthracite-400 font-medium text-tiny leading-[1.2] gap-x-1.5 md:text-tiny category1472">
<span aria-hidden="true" class="separator text-anthracite-400">•</span>
<span class="text-anthracite-400"
aria-current="page"
>Parfum</span>
</li>
</ol>
</div>
</nav>
<script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Adopt\u0020Parfums",
"item": "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002F"
}, {
"@type": "ListItem",
"position": 2,
"name": "Parfum",
"item": ""
} ]
}
</script>
</div>
<div> <div class="page-title container flex flex-col md:flex-row flex-wrap my-6 font-bold px-0 lg:mt-8 categorie-title">
<h1 class="text-3.5xl md:text-4.5xl font-secondary font-medium tracking-spaced leading-none md:leading-none text-ui-600"
>
<span class="base" data-ui-id="page-title-wrapper" >Parfum</span> </h1>
</div>
</div>
<div class="md:w-2/3">
<div x-data="initDescriptionListing()"
@resize.window="isMobile = window.outerWidth < 768; initMore()"
class="category-description max-w-full px-0 pt-1.25 text-sm hidden md:block text-white relative"
>
<div x-ref="skeleton" class="skeleton-box -mt-1.5 h-[84px] w-full after:opacity-30 bg-transparent"></div>
<div x-ref="wrapper">
<div x-ref="readmore" class="overflow-hidden transition-[height] duration-300 more-calc pointer-events-none">
<div><p> </p>
<div class="ewa-rteLine">Découvrez tous nos <span data-pb-style="62148BE9542B5"><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-femme.html" title="parfums femmes"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfums femmes</span></a>
</strong></span>, <span data-pb-style="62148BE9542B5"><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-homme.html" title="parfums hommes"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfums hommes</span></a>
</strong></span> et nos <span data-pb-style="62148BE9542B5"><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-mixte.html" title="parfums mixte"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfums mixte</span></a>
</strong></span> créés et fabriqués en France.</div>
<div class="ewa-rteLine"></div>
<div class="ewa-rteLine"><span data-pb-style="62148BE9542B5"><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fruits-et-plaisir.html" title="Parfums fruités"><span class="link text-[#ec3f82] hover:text-[#53385b]">Parfums fruités</span></a>
</strong></span>, <span data-pb-style="62148BE9542B5"><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fleurs-et-romantisme.html" title="parfums floraux"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfums floraux</span></a>
</strong></span>, <span data-pb-style="62148BE9542B5"><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/gourmandise-et-seduction.html" title="parfums gourmands"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfums gourmands</span></a>
</strong></span>…</div>
<div class="ewa-rteLine"></div>
<div class="ewa-rteLine">Retrouvez plus de 100 parfums d’exception, élaborés par les plus grands parfumeurs, accessibles à tous et conçus dans le respect de la planète.</div>
<div class="ewa-rteLine"></div>
<div class="ewa-rteLine">Et vous quels parfums serez-vous aujourd'hui ? Faites le test avec notre <span data-pb-style="62148BE9542B5"><strong><a class="link underline" href="https://www.adopt.com/fr/diagnostic-olfactif" title="diagnostic parfum"><span>diagnostic parfum</span></a>
.</strong></span></div></div>
</div>
<div x-cloak x-show="isMoreContentActive">
<button class="underline" @click="showMore()">
<span x-show="!more">Plus</span>
<span x-show="more" x-cloak>Moins</span>
</button>
</div>
</div>
</div>
<script>
function initDescriptionListing (lineClampNb = 3) {
return {
more: false,
isMobile: window.outerWidth < 768,
maxHeight: null,
lineHeight: 0,
isMoreContentActive: false,
init() {
if(!this.isMobile) {
this.initMore();
this.$refs.readmore.classList.remove('more-calc');
this.$refs.skeleton.classList.add('hidden');
this.updateLinksAccessibility();
}
},
initMore() {
this.getValues();
if(lineClampNb * this.lineHeight < this.maxHeight) {
this.$refs.readmore.style.height = lineClampNb * this.lineHeight + 'px';
this.isMoreContentActive = true;
}
this.$refs.readmore.classList.remove('more-calc');
this.$refs.skeleton.classList.add('hidden');
this.updateLinksAccessibility();
},
getValues() {
let computedStyles = window.getComputedStyle(this.$refs.readmore);
this.lineHeight = Number(computedStyles.getPropertyValue('line-height').replace('px', ''));
this.maxHeight = this.$refs.readmore.clientHeight;
},
showMore() {
const wasClosed = !this.more;
let firstHiddenLink = null;
if (wasClosed) {
const links = this.$refs.readmore.querySelectorAll('a');
const containerRect = this.$refs.readmore.getBoundingClientRect();
const visibleHeight = lineClampNb * this.lineHeight;
for (let link of links) {
const linkRect = link.getBoundingClientRect();
const linkTopRelative = linkRect.top - containerRect.top;
const linkBottomRelative = linkRect.bottom - containerRect.top;
const isPartiallyVisible = linkTopRelative < visibleHeight && linkBottomRelative > 0;
if (!isPartiallyVisible) {
firstHiddenLink = link;
break;
}
}
}
this.more = !this.more;
if(this.more) {
this.$refs.readmore.style.height = this.maxHeight + 'px';
} else {
this.$refs.readmore.style.height = lineClampNb * this.lineHeight + 'px';
}
this.updateLinksAccessibility();
if (wasClosed && firstHiddenLink) {
setTimeout(() => {
firstHiddenLink.focus();
}, 300);
}
},
updateLinksAccessibility() {
if (!this.$refs.readmore) return;
const links = this.$refs.readmore.querySelectorAll('a');
const containerRect = this.$refs.readmore.getBoundingClientRect();
const visibleHeight = this.more ? this.maxHeight : (lineClampNb * this.lineHeight);
links.forEach(link => {
const linkRect = link.getBoundingClientRect();
const linkTopRelative = linkRect.top - containerRect.top;
const linkBottomRelative = linkRect.bottom - containerRect.top;
if (this.more) {
link.removeAttribute('tabindex');
} else {
const isPartiallyVisible = linkTopRelative < visibleHeight && linkBottomRelative > 0;
if (isPartiallyVisible) {
link.removeAttribute('tabindex');
} else {
link.setAttribute('tabindex', '-1');
}
}
});
},
}
}
</script>
</div>
</div>
<div class="pt-6">
<div class="category-sub flex gap-2.5 items-center" x-data="subCategoriesSlider()" @resize.window="isMobile = window.innerWidth < 768; init()">
<div x-ref="wrapper" class="overflow-y-auto hide-scrollbar scroll-smooth">
<div x-ref="container" class="flex gap-1 md:gap-2 w-fit relative py-1 focus-visible:ring-offset-0">
<a class="btn btn-primary-white flex hover:bg-[#EEEEFA] text-sm whitespace-nowrap py-4 px-5 md:px-7.5 leading-small" href="https://www.adopt.com/fr/le-diagnostic-olfactif-adopt.html">Diagnostic Parfum</a>
<a class="btn btn-primary-white flex hover:bg-[#EEEEFA] text-sm whitespace-nowrap py-4 px-5 md:px-7.5 leading-small" href="https://www.adopt.com/fr/parfum/parfum-femme.html">Parfum Femme</a>
<a class="btn btn-primary-white flex hover:bg-[#EEEEFA] text-sm whitespace-nowrap py-4 px-5 md:px-7.5 leading-small" href="https://www.adopt.com/fr/parfum/parfum-femme/brume-parfumee.html">Brume Parfumée</a>
<a class="btn btn-primary-white flex hover:bg-[#EEEEFA] text-sm whitespace-nowrap py-4 px-5 md:px-7.5 leading-small" href="https://www.adopt.com/fr/parfum/parfum-homme.html">Parfum Homme</a>
<a class="btn btn-primary-white flex hover:bg-[#EEEEFA] text-sm whitespace-nowrap py-4 px-5 md:px-7.5 leading-small" href="https://www.adopt.com/fr/parfum/les-signatures.html">Collection Voyage</a>
<a class="btn btn-primary-white flex hover:bg-[#EEEEFA] text-sm whitespace-nowrap py-4 px-5 md:px-7.5 leading-small" href="https://www.adopt.com/fr/parfum/meilleures-ventes-parfum.html">Meilleures Ventes</a>
<a class="btn btn-primary-white flex hover:bg-[#EEEEFA] text-sm whitespace-nowrap py-4 px-5 md:px-7.5 leading-small" href="https://www.adopt.com/fr/parfum/nouveautes-parfum.html">Nouveautés</a>
</div>
</div>
<div x-show="isSlider" x-cloak class="hidden md:flex items-center gap-2.5 text-anthracite-400">
<button class="link hover:text-pink" @click="prev()" type="button" aria-label="Précédent">
<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="w-5 -scale-x-100" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M1,13l6-6L1,1"/>
<title/></svg>
</button>
<button class="link hover:text-pink" @click="next()" type="button" aria-label="Suivant">
<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="w-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>
</button>
</div>
</div>
</div>
<script>
function subCategoriesSlider() {
return {
isMobile: window.innerWidth < 768,
isSlider: false,
index: 0,
items: null,
maxItem: 0,
isLoaded: false,
init() {
if(this.$refs.container.getBoundingClientRect().width > this.$refs.wrapper.getBoundingClientRect().width) {
this.initSlider();
}
this.isLoaded = true;
},
initSlider() {
this.isSlider = true;
this.items = this.$refs.container.querySelectorAll('a');
this.maxItem = this.items.length;
},
prev() {
if(this.$refs.wrapper.scrollLeft > 0) {
this.index = this.index - 1;
this.$refs.wrapper.scrollLeft = this.items[this.index].offsetLeft;
}
},
next() {
const wrapper = this.$refs.wrapper;
if(wrapper.offsetWidth + wrapper.scrollLeft < wrapper.scrollWidth) {
this.index = this.index + 1;
this.$refs.wrapper.scrollLeft = this.items[this.index].offsetLeft;
}
}
}
}
</script>
</div>
<picture>
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/category/ECOMM_HEROSCREEN_1200_Parfum.png?twic=v1/cover-max=3230.5 1x" media="(min-width: 1920px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/category/ECOMM_HEROSCREEN_1200_Parfum.png?twic=v1/cover-max=2475.2 1x" media="(min-width: 1536px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/category/ECOMM_HEROSCREEN_1200_Parfum.png?twic=v1/cover-max=1976 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/category/ECOMM_HEROSCREEN_1200_Parfum.png?twic=v1/cover-max=1597.7 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/category/ECOMM_HEROSCREEN_1200_Parfum.png?twic=v1/cover-max=1310.4 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/category/visual-categ-selection-parfums_1.jpg?twic=v1/cover-max=977.6 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/category/visual-categ-selection-parfums_1.jpg?twic=v1/cover-max=-x289.9 1x" media="(min-width: 320px)" class="" > <img src="https://adopt.twic.pics/media/catalog/category/ECOMM_HEROSCREEN_1200_Parfum.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/category/ECOMM_HEROSCREEN_1200_Parfum.png"
alt="Parfum"
width="360"
height="360"
fetchpriority="high"
class="absolute top-0 left-1/2 -translate-x-1/2 h-full w-full object-cover">
</picture>
<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:
}</style>
</div><main id="maincontent" class="page-main"><span id="contentarea" tabindex="-1"></span>
<div class="columns"><aside class="sidebar sidebar-main"><div x-data="initLayeredNavigation()"
@layered-navigation-filter-selected.window="updateFilters($event.detail)"
@layered-navigation-radio-filter-selected.window="updateRadioFilters($event.detail)"
@layered-navigation-filter-price-selected.window="updatePriceFilter($event.detail)"
@keydown.escape.window="closeFilters()"
>
<button id="triggerFilter" @click="openFilters()" class="hidden" aria-label="Open filters"></button>
<div class="justify-end fixed inset-0 z-50 translate-y-full translate-x-0 md:translate-y-0 md:translate-x-full flex"
id="filters_layered"
aria-modal="true"
role="dialog"
x-ref="filtersDialog"
>
<span class="absolute opacity-0 bg-lavender-400 inset-0 cursor-pointer z-[-1] transition-opacity duration-300 translate-y-0 md:translate-x-0"
:class="{ 'md:opacity-50 md:translate-y-0 md:-translate-x-full': blockOpen, 'opacity-0 translate-y-0 md:translate-y-0 md:translate-x-0': !blockOpen }"
@click="closeFilters()"></span>
<div class="bg-white flex flex-col h-full w-full md:w-[500px] transition duration-300 md:delay-200 absolute top-0 left-0"
:class="{ '-translate-y-full md:translate-y-0 md:-translate-x-full delay-unset': blockOpen, 'translate-y-0 md:translate-y-0 md:translate-x-0': !blockOpen }">
<div class="block-title flex justify-between items-center pl-5 border-b border-lavender-400 md:pl-11.5">
<span role="heading" aria-level="2" class="text-xl font-medium uppercase tracking-spaced text-anthracite-600">Filtrer</span>
<button aria-label="Fermer les filtres" class="close-filters-button group p-5 md:p-7.5" @click="closeFilters()" x-ref="closeFiltersButton">
<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="text-pink-lighter group-hover:text-pink transition duration-300 w-3.5 h-auto">
<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>
<line transform="matrix(-1,0,0,1,14,0)" x2="14" y1="14"></line>
</g>
</svg>
</button>
</div>
<div class="px-5 grow-[1] overflow-y-auto pb-2 md:px-11.5">
<div class="block-content filter-content">
<details class="filter-option border-b border-lavender-400 last:border-b-0"
x-data="{ open: false }"
aria-expanded="false"
>
<summary class="filter-options-title focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary-400 flex flex-row justify-between items-center py-4 md:py-6 cursor-pointer transition duration-300 group hover:text-pink"
@click="open = !open" >
<span class="font-medium text-anthracite-600">
Prix </span>
<span :class="{ '-rotate-180': open }">
<svg width="9" height="4.8536" version="1.1" viewbox="0 0 9 4.8536" xmlns="http://www.w3.org/2000/svg" class="text-pink-lighter group-hover:text-pink transition duration-300 w-3 h-auto">
<g transform="translate(-.5 -.5)" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel">
<path d="m1 1 4 4 4-4" stroke="currentColor"></path>
</g>
</svg>
</span>
</summary>
<div class="filter-options-content hidden"
:class="{ 'hidden': !open , 'block': open }">
<script>
function rangeSlider_69b89953e4e03(options) {
"use strict";
return {
options: {"minValue":0,"maxValue":120,"currentValue":{"from":0,"to":120},"fieldFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"intervals":[{"value":0,"count":29},{"value":5,"count":18},{"value":7,"count":1},{"value":11,"count":213},{"value":14,"count":17},{"value":16,"count":42},{"value":17,"count":2},{"value":18,"count":3},{"value":19,"count":16},{"value":22,"count":19},{"value":24,"count":1},{"value":28,"count":2},{"value":29,"count":10},{"value":30,"count":4},{"value":35,"count":6},{"value":36,"count":14},{"value":37,"count":20},{"value":39,"count":8},{"value":46,"count":2},{"value":47,"count":4},{"value":49,"count":1},{"value":55,"count":3},{"value":59,"count":2},{"value":64,"count":1},{"value":105,"count":1},{"value":119,"count":1}],"adaptiveIntervals":[],"showAdaptiveSlider":false,"urlTemplate":"price=<%- from %>-<%- to %>","messageTemplates":{"displayOne":"1 produit","displayCount":"<%- count %> produits","displayEmpty":"Aucun produit trouv\u00e9 pour cet intervalle."},"rate":1},
priceSlider: true,
lastThumbUpdatedMax: true,
sliderZindex: 20,
messageTemplates: {
"displayOne": '<span class="msg">1 article</span>',
"displayCount": '<span class="msg"><%- count %> articles</span>',
"displayEmpty": '<span class="msg-error">Aucun élément dans la plage actuelle.</span>'
},
initialize: function () {
this.options = Object.assign({}, this.options, options);
this.url = this.options.urlTemplate;
if (this.options.sliderZindex !== undefined) {
this.sliderZindex = this.options.sliderZindex;
}
this.showAdaptiveSlider = false;
if (this.options.showAdaptiveSlider !== undefined) {
this.showAdaptiveSlider = this.options.showAdaptiveSlider;
}
if (this.options.maxLabelOffset === undefined) {
this.options.maxLabelOffset = 0.01;
}
if (this.options.rate === undefined) {
this.options.rate = 1.0000;
}
if (this.showAdaptiveSlider) {
this._initAdaptiveSliderValues();
} else {
this._initSliderValues();
}
this.mintrigger();
this.maxtrigger();
},
_initSliderValues: function () {
this.rate = parseFloat(this.options.rate);
this.minprice = Math.floor(this.options.currentValue.from * this.rate);
this.maxprice = Math.round(this.options.currentValue.to * this.rate);
this.intervals = this.options.intervals.map(
function(item) { item.value = Math.round(item.value * this.rate); return item}.bind(this)
);
this.min = Math.floor(this.options.minValue * this.rate);
this.max = Math.round(this.options.maxValue * this.rate);
},
_initAdaptiveSliderValues: function () {
this.intervals = this.options.adaptiveIntervals;
this.options.adaptiveIntervals[0].value = Math.floor(this.options.adaptiveIntervals[0].value);
this.minprice = this._getAdaptiveValue(Number(this.options.currentValue.from));
this.maxprice = this._getAdaptiveValue(Number(this.options.currentValue.to));
this.rate = parseFloat(this.options.rate);
this.intervals = this.intervals.map(
function(item) { item.originalValue = Math.ceil(item.originalValue * this.rate); return item}.bind(this)
);
this.min = this.intervals[0].value;
this.max = this.intervals[this.intervals.length - 1].value;
},
mintrigger: function () {
this.lastThumbUpdatedMax = false;
this.validation();
this.minprice = this._getClosestAdaptiveValue(Math.min(this.minprice, this.maxprice));
this.minthumb = ((this.minprice - this.min) / (this.max - this.min)) * 100;
this._onChangeAfter();
},
maxtrigger: function () {
this.lastThumbUpdatedMax = true;
this.validation();
this.maxprice = this._getClosestAdaptiveValue(Math.max(this.maxprice, this.minprice));
this.maxthumb = ((this.maxprice - this.min) / (this.max - this.min)) * 100;
this._onChangeAfter();
},
_onChangeAfter: function () {
this._updateSliderZindexes();
this._applyRange();
this._refreshDisplay();
},
validation: function () {
if (/^\d*$/.test(this.minprice)) {
if (this.minprice > this.max) {
this.minprice = this._getAdaptiveValue(Number(this.options.currentValue.from));
}
if (this.minprice < this.min) {
this.minprice = this.min;
}
} else {
this.minprice = this._getAdaptiveValue(Number(this.options.currentValue.from));
}
if (/^\d*$/.test(this.maxprice)) {
if (this.maxprice > this.max) {
this.maxprice = this.max;
}
if (this.maxprice < this.min) {
this.maxprice = this._getAdaptiveValue(Number(this.options.currentValue.to));
}
} else {
this.maxprice = this._getAdaptiveValue(Number(this.options.currentValue.to))
}
},
getItemCount: function () {
var from = this.minprice, to = this.maxprice, intervals = this.intervals;
return intervals.map(function (item) {
return item.value >= from && item.value < to ? item.count : 0;
})
.reduce(function (a, b) {
return a + b;
});
},
_refreshDisplay: function () {
this.count = this.getItemCount();
let minprice = this._getOriginalValue(this.minprice);
if (minprice >= this._getOriginalValue(this.max) ) {
minprice = this._getOriginalValue(this.max) - this.options.maxLabelOffset;
}
this.fromLabel = this._formatLabel(minprice);
let maxprice = this._getOriginalValue(this.maxprice) - this.options.maxLabelOffset;
if (maxprice < this._getOriginalValue(this.min)) {
maxprice = this._getOriginalValue(this.maxprice);
}
this.toLabel = this._formatLabel(maxprice);
var messageTemplate = this.messageTemplates[this.count > 0 ? (this.count > 1 ? 'displayCount' : 'displayOne') : 'displayEmpty'];
this.message = this._unescape(messageTemplate.replace('<%- count %>', this.count));
},
_formatLabel: function (value) {
var formattedValue = value;
if (this.priceSlider && this.options.fieldFormat) {
formattedValue = this._formatPrice(value);
} else if (this.options.fieldFormat) {
formattedValue = this.options.fieldFormat.pattern.replace(
'%s',
Number.parseFloat(formattedValue).toFixed(this.options.fieldFormat.precision)
);
}
return formattedValue;
},
_formatPrice: function (value) {
var formatter = new Intl.NumberFormat(
document.documentElement.lang,
{
style: 'currency',
currency: 'EUR',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
}
);
value = Number.parseFloat(value).toFixed(1);
return formatter.format(value);
},
_applyRange: function () {
let range = {
from : this._getOriginalValue(this.minprice) * (1 / this.rate),
to : this._getOriginalValue(this.maxprice) * (1 / this.rate),
};
let resetFilter = false;
this.url = this._unescape(this.options.urlTemplate.replace('<%- from %>', range.from).replace('<%- to %>', range.to));
if (this.minprice === this.min && this.maxprice === this.max) {
resetFilter = true;
}
if (this.priceSlider) {
let attributeCode = this.url.split('=')[0];
let attributeValue = this.url.split('=')[1];
window.dispatchEvent(
new CustomEvent('layered-navigation-filter-price-selected', {
'detail': {
'attributeCode': attributeCode,
'attributeValue': attributeValue,
'resetFilter': resetFilter
}
})
);
}
},
_updateSliderZindexes: function () {
this.minZindex = this.sliderZindex;
this.maxZindex = this.sliderZindex;
if (this.minprice == this.maxprice) {
if (this.minprice === this.min || (this.minprice !== this.min && this.lastThumbUpdatedMax)) {
this.maxZindex = this.sliderZindex + 1;
}
if (this.maxprice === this.max || (this.maxprice !== this.max && !this.lastThumbUpdatedMax)) {
this.minZindex = this.sliderZindex + 1;
}
}
},
_getAdaptiveValue : function (value) {
if (!this.showAdaptiveSlider) {
return value;
}
var adaptiveValue = this.intervals[0].value;
var found = false;
this.intervals.forEach(function (item) {
if (found === false && item.originalValue === value) {
adaptiveValue = item.value;
found = true;
}
if (found === false && item.originalValue < value) {
adaptiveValue = item.value;
}
});
return adaptiveValue;
},
_getClosestAdaptiveValue : function (value) {
if (!this.showAdaptiveSlider) {
return value;
}
var closestValue = this.intervals[0].value;
var found = false;
this.intervals.forEach(function (item) {
if (item.value === value) {
closestValue = value;
found = true;
}
if (found === false && item.value < value) {
closestValue = item.value;
}
});
return closestValue;
},
_getOriginalValue : function (value) {
if (!this.showAdaptiveSlider) {
return value;
}
var originalValue = null;
this.intervals.forEach(function (item) {
if (item.value === value) {
originalValue = item.originalValue;
}
});
return originalValue;
},
_unescape: function (str) {
return str.replace(/<%|%3C%/g, '<%').replace(/%>|%%3E/g, '%>');
},
}
}
</script>
<div class="smile-es-range-slider" data-role="range-price-slider-price">
<div x-data="rangeSlider_69b89953e4e03({})" x-init="initialize()" class="relative max-w-xl w-full">
<div class="flex justify-between items-center mb-3.75">
<div>
<span x-model="minprice" x-text="fromLabel" class="text-anthracite-400 font-medium text-sm rounded w-24 text-center"></span>
</div>
<div>
<span x-model="maxprice" x-text="toLabel" class="text-anthracite-400 font-medium text-sm rounded w-24 text-center"></span>
</div>
</div>
<div class="es-range-slider relative rounded-md bg-gray-200">
<input aria-label="min range" type="range"
step="1"
x-bind:min="min"
x-bind:max="max"
x-on:input="mintrigger"
x-bind:style="'z-index: ' + minZindex"
x-model="minprice"
class="input-min absolute pointer-events-none appearance-none z-20 h-1 w-full opacity-0 cursor-pointer">
<input aria-label="max range" type="range"
step="1"
x-bind:min="min"
x-bind:max="max"
x-on:input="maxtrigger"
x-bind:style="'z-index: ' + maxZindex"
x-model="maxprice"
class="input-max absolute pointer-events-none appearance-none z-20 h-1 w-full opacity-0 cursor-pointer">
<div class="relative z-10 h-1">
<div class="absolute z-10 left-0 right-0 bottom-0 top-0 rounded-md bg-candy"></div>
<div class="absolute z-20 top-0 bottom-0 rounded-md bg-lavender" x-bind:style="'right:'+ (100 - 1 - maxthumb)+'%; left:'+ minthumb+'%'"></div>
<div class="thumb-min absolute z-[30] w-5 h-5 top-0 left-0 bg-white border-2 border-lavender rounded-full -mt-2 flex flex-col items-center hover:border-pink-lighter" x-bind:style="'left: '+minthumb+'%'"></div>
<div class="thumb-max absolute z-[30] w-5 h-5 top-0 right-0 bg-white border-2 border-lavender rounded-full -mt-2 -ml-4 flex flex-col items-center hover:border-pink-lighter" x-bind:style="'left: '+maxthumb+'%'"></div>
</div>
</div>
<div class="mt-8 mb-8 h-6 flex justify-between items-center">
<div x-html="message" class="text-anthracite-600 font-medium"></div>
</div>
</div>
</div>
</div>
</details>
<details class="filter-option border-b border-lavender-400 last:border-b-0"
x-data="{ open: false }"
aria-expanded="false"
>
<summary class="filter-options-title focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary-400 flex flex-row justify-between items-center py-4 md:py-6 cursor-pointer transition duration-300 group hover:text-pink"
@click="open = !open" >
<span class="font-medium text-anthracite-600">
Univers olfactif </span>
<span :class="{ '-rotate-180': open }">
<svg width="9" height="4.8536" version="1.1" viewbox="0 0 9 4.8536" xmlns="http://www.w3.org/2000/svg" class="text-pink-lighter group-hover:text-pink transition duration-300 w-3 h-auto">
<g transform="translate(-.5 -.5)" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel">
<path d="m1 1 4 4 4-4" stroke="currentColor"></path>
</g>
</svg>
</span>
</summary>
<div class="filter-options-content pb-8.5 hidden"
:class="{ 'hidden': !open , 'block': open }">
<script>
function initSmileAttibute_69b89953e53b9() {
"use strict";
return {
options : {"component":"Smile_ElasticsuiteCatalog\/js\/attribute-filter","maxSize":10,"displayProductCount":true,"hasMoreItems":true,"displayRelNofollow":"","ajaxLoadUrl":"https:\/\/www.adopt.com\/fr\/catalog\/navigation_filter\/ajax\/id\/1472\/?cat=1472&filterName=olfactive_fam","items":[{"label":"Gourmand","count":104,"url":"olfactive_fam=Gourmand","is_selected":false,"isBooleanDefaultValue":false},{"label":"Floral","count":95,"url":"olfactive_fam=Floral","is_selected":false,"isBooleanDefaultValue":false},{"label":"Fruit\u00e9","count":63,"url":"olfactive_fam=Fruit\u00e9","is_selected":false,"isBooleanDefaultValue":false},{"label":"Oriental","count":42,"url":"olfactive_fam=Oriental","is_selected":false,"isBooleanDefaultValue":false},{"label":"Caract\u00e8re","count":34,"url":"olfactive_fam=Caract\u00e8re","is_selected":false,"isBooleanDefaultValue":false},{"label":"Frais","count":29,"url":"olfactive_fam=Frais","is_selected":false,"isBooleanDefaultValue":false},{"label":"Solaire","count":29,"url":"olfactive_fam=Solaire","is_selected":false,"isBooleanDefaultValue":false},{"label":"Bois\u00e9","count":25,"url":"olfactive_fam=Bois\u00e9","is_selected":false,"isBooleanDefaultValue":false},{"label":"Aromatique","count":23,"url":"olfactive_fam=Aromatique","is_selected":false,"isBooleanDefaultValue":false},{"label":"D\u00e9licat","count":16,"url":"olfactive_fam=D\u00e9licat","is_selected":false,"isBooleanDefaultValue":false}]},
searchLabel : 'Rechercher (%s)',
showMoreLabel : 'Afficher plus',
showLessLabel : 'Voir moins',
noSearchResultLabel : 'Aucun résultat pour la recherche <b>%s</b>.',
expanded: false,
items: [],
lastSelectIndex: 0,
maxSize: 0,
displaySearch: false,
displayedItems: [],
fulltextSearch: null,
searchPlaceholder: '',
result: 0,
/**
* Component initialization
*/
initialize: function () {
this.items = this.options.items.map(this.addItemId.bind(this));
var lastSelectedIndex = Math.max.apply(null, (this.items.map(
function (v, k) {return v['is_selected'] ? k : 0;}))
);
this.maxSize = Math.max(this.options.maxSize, lastSelectedIndex + 1);
this.initSearchPlaceholder();
this.onShowLess();
this.displaySearch = this.displayShowMore();
this.displayedItems = this.getDisplayedItems();
},
/**
* Init the place holder
*/
initSearchPlaceholder: function () {
var examples = this.items.slice(0, 2).map(function (item) {return item.label});
if (this.items.length > 2) {
examples.push('...');
}
// Tip to make html chars interpretable by the browser when the value is get from JS.
let placeholder = document.createElement('div');
placeholder.innerHTML = this.searchLabel.replace('%s', examples.join(', '));
this.searchPlaceholder = placeholder.textContent;
},
/**
* Triggered when typing on the search input
*/
onSearchChange: function (event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
this.onShowLess();
} else {
this.fulltextSearch = text;
this.onShowMore();
}
return true;
},
/**
* Triggered when leaving the search field.
*/
onSearchFocusOut: function(event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
}
},
/**
* Retrieve additional Results
*
* @param callback
*/
loadAdditionalItems: function (callback) {
fetch(this.options.ajaxLoadUrl, {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
})
.then((response) => response.json())
.then((data) => {
this.items = data.map(this.addItemId.bind(this));
this.options.hasMoreItems = false;
if (callback) {
return callback();
}
}
);
},
/**
* Retrieve items to display
*
* @returns {*}
*/
getDisplayedItems: function () {
var items = this.items;
if (this.expanded === false) {
items = this.items.slice(0, this.maxSize);
}
if (this.getFulltextSearch()) {
var searchTokens = this.slugify(this.getFulltextSearch()).split('-');
var lastSearchToken = searchTokens.splice(-1, 1)[0];
items = items.filter(function(item) {
var isValidItem = true;
var itemTokens = this.slugify(item.label).split('-');
searchTokens.forEach(function(currentToken) {
if (itemTokens.indexOf(currentToken) === -1) {
isValidItem = false;
}
})
if (isValidItem && lastSearchToken) {
var ngrams = itemTokens.map(function(token) {return token.substring(0, lastSearchToken.length)});
isValidItem = ngrams.indexOf(lastSearchToken) !== -1;
}
return isValidItem;
}.bind(this))
}
this.result = items.length;
return items;
},
/**
* Does the search have a result
*/
hasSearchResult: function () {
return this.getDisplayedItems().length > 0
},
/**
* Search result message
*/
getSearchResultMessage : function() {
return this.noSearchResultLabel.replace("%s", '"' + this.getFulltextSearch() + '"')
},
getFulltextSearch : function() {
return this.fulltextSearch;
},
/**
* Callback for the "Show more" button
*/
onShowMore: function () {
if (this.options.hasMoreItems) {
this.loadAdditionalItems(this.onShowMore.bind(this));
} else {
this.expanded = true;
}
this.displayedItems = this.getDisplayedItems();
},
/**
* Index the text to be searched.
*/
slugify: function(text) {
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F'\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
},
/**
* Callback for the "Show less" button
*/
onShowLess: function () {
this.expanded = false;
this.displayedItems = this.getDisplayedItems();
},
/**
* Check if the filter can be expanded
*
* @returns {boolean}
*/
enableExpansion : function () {
return this.options.hasMoreItems || this.items.length > this.maxSize;
},
/**
* Displays the "Show More" link
*
* @returns {*|boolean}
*/
displayShowMore: function () {
return this.enableExpansion() && this.expanded === false && !this.getFulltextSearch();
},
/**
* Displays the "Show Less" link
*
* @returns {*|boolean}
*/
displayShowLess: function () {
return this.enableExpansion() && this.expanded === true && !this.getFulltextSearch();
},
/**
* Add an id to items.
*/
addItemId: function (item) {
item.id = Math.floor(Math.random() * 1000000) + "_option_";
item.displayProductCount = this.options.displayProductCount && (item.count >= 1);
return item;
},
};
};
</script>
<div class="olfactive_famFilter"
x-data="{...initSmileAttibute_69b89953e53b9(), ...initCustomSmileAttribute_69b89953e5501()}"
x-init="initialize();">
<ol class="items grid grid-cols-2 gap-y-2 gap-x-3 xl:text-sm text-xxs">
<template x-for="attribute in displayedItems" hidden>
<li class="item">
<span x-show="attribute.count >= 1"
@click.prevent="selectFilter(attribute.url, 'olfactive_fam', attribute.label)"
@keydown.enter="selectFilter(attribute.url, 'olfactive_fam', attribute.label)"
@keydown.space="selectFilter(attribute.url, 'olfactive_fam', attribute.label)">
<span class="form-input--checkbox">
<label :for="attribute.id" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
:id="attribute.id"
:checked="attribute.is_selected"
:aria-checked="attribute.is_selected"
/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium" x-html="attribute.label"></span>
<span class="count" x-text="'(' + attribute.count + ')'" x-show ="options.displayProductCount"></span>
</label>
</span>
</span>
<div x-show="attribute.count < 1">
<span x-html="attribute.label"></span>
<span class="count" x-text="attribute.count"></span>
</div>
</li>
</template>
</ol>
<div class="no-results-message"
x-model="result"
x-show="getFulltextSearch() && !hasSearchResult()">
<p x-html="getSearchResultMessage()"></p>
</div>
<div class="actions" x-show="enableExpansion()">
<div class="secondary text-right">
<span class="action show-more underline text-secondary cursor-pointer"
x-on:click="onShowMore()"
x-show="displayShowMore()">
<span x-text="showMoreLabel + '+'"></span>
</span>
<span class="action show-less underline text-secondary cursor-pointer"
x-on:click="onShowLess()"
x-show="displayShowLess()">
<span x-text="showLessLabel + '-'"></span>
</span>
</div>
</div>
</div>
<script>
'use strict';
function initCustomSmileAttribute_69b89953e5501() {
return {
selectFilter(param, action, value) {
window.dataLayer?.push({
'event': 'filtres',
'action': action,
'label': value
});
let attributeCode = param.split('=')[0];
let attributeValue = param.split('=')[1];
let checkbox = this.$el.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
window.dispatchEvent(
new CustomEvent('layered-navigation-filter-selected', {
'detail': {
'attributeCode': attributeCode,
'attributeValue': attributeValue
}
})
);
},
}
}
</script>
</div>
</details>
<details class="filter-option border-b border-lavender-400 last:border-b-0"
x-data="{ open: false }"
aria-expanded="false"
>
<summary class="filter-options-title focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary-400 flex flex-row justify-between items-center py-4 md:py-6 cursor-pointer transition duration-300 group hover:text-pink"
@click="open = !open" >
<span class="font-medium text-anthracite-600">
Type de produit </span>
<span :class="{ '-rotate-180': open }">
<svg width="9" height="4.8536" version="1.1" viewbox="0 0 9 4.8536" xmlns="http://www.w3.org/2000/svg" class="text-pink-lighter group-hover:text-pink transition duration-300 w-3 h-auto">
<g transform="translate(-.5 -.5)" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel">
<path d="m1 1 4 4 4-4" stroke="currentColor"></path>
</g>
</svg>
</span>
</summary>
<div class="filter-options-content pb-8.5 hidden"
:class="{ 'hidden': !open , 'block': open }">
<script>
function initSmileAttibute_69b89953e64b8() {
"use strict";
return {
options : {"component":"Smile_ElasticsuiteCatalog\/js\/attribute-filter","maxSize":10,"displayProductCount":true,"hasMoreItems":false,"displayRelNofollow":"","ajaxLoadUrl":"https:\/\/www.adopt.com\/fr\/catalog\/navigation_filter\/ajax\/id\/1472\/?cat=1472&filterName=product_type_back","items":[{"label":"Eau de parfum","count":248,"url":"product_type_back=Eau de parfum","is_selected":false,"isBooleanDefaultValue":false},{"label":"Coffret parfum","count":153,"url":"product_type_back=Coffret parfum","is_selected":false,"isBooleanDefaultValue":false},{"label":"Brume parfum\u00e9e","count":12,"url":"product_type_back=Brume parfum\u00e9e","is_selected":false,"isBooleanDefaultValue":false},{"label":"Accessoires maison","count":1,"url":"product_type_back=Accessoires maison","is_selected":false,"isBooleanDefaultValue":false},{"label":"Eau de cologne","count":1,"url":"product_type_back=Eau de cologne","is_selected":false,"isBooleanDefaultValue":false}]},
searchLabel : 'Rechercher (%s)',
showMoreLabel : 'Afficher plus',
showLessLabel : 'Voir moins',
noSearchResultLabel : 'Aucun résultat pour la recherche <b>%s</b>.',
expanded: false,
items: [],
lastSelectIndex: 0,
maxSize: 0,
displaySearch: false,
displayedItems: [],
fulltextSearch: null,
searchPlaceholder: '',
result: 0,
/**
* Component initialization
*/
initialize: function () {
this.items = this.options.items.map(this.addItemId.bind(this));
var lastSelectedIndex = Math.max.apply(null, (this.items.map(
function (v, k) {return v['is_selected'] ? k : 0;}))
);
this.maxSize = Math.max(this.options.maxSize, lastSelectedIndex + 1);
this.initSearchPlaceholder();
this.onShowLess();
this.displaySearch = this.displayShowMore();
this.displayedItems = this.getDisplayedItems();
},
/**
* Init the place holder
*/
initSearchPlaceholder: function () {
var examples = this.items.slice(0, 2).map(function (item) {return item.label});
if (this.items.length > 2) {
examples.push('...');
}
// Tip to make html chars interpretable by the browser when the value is get from JS.
let placeholder = document.createElement('div');
placeholder.innerHTML = this.searchLabel.replace('%s', examples.join(', '));
this.searchPlaceholder = placeholder.textContent;
},
/**
* Triggered when typing on the search input
*/
onSearchChange: function (event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
this.onShowLess();
} else {
this.fulltextSearch = text;
this.onShowMore();
}
return true;
},
/**
* Triggered when leaving the search field.
*/
onSearchFocusOut: function(event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
}
},
/**
* Retrieve additional Results
*
* @param callback
*/
loadAdditionalItems: function (callback) {
fetch(this.options.ajaxLoadUrl, {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
})
.then((response) => response.json())
.then((data) => {
this.items = data.map(this.addItemId.bind(this));
this.options.hasMoreItems = false;
if (callback) {
return callback();
}
}
);
},
/**
* Retrieve items to display
*
* @returns {*}
*/
getDisplayedItems: function () {
var items = this.items;
if (this.expanded === false) {
items = this.items.slice(0, this.maxSize);
}
if (this.getFulltextSearch()) {
var searchTokens = this.slugify(this.getFulltextSearch()).split('-');
var lastSearchToken = searchTokens.splice(-1, 1)[0];
items = items.filter(function(item) {
var isValidItem = true;
var itemTokens = this.slugify(item.label).split('-');
searchTokens.forEach(function(currentToken) {
if (itemTokens.indexOf(currentToken) === -1) {
isValidItem = false;
}
})
if (isValidItem && lastSearchToken) {
var ngrams = itemTokens.map(function(token) {return token.substring(0, lastSearchToken.length)});
isValidItem = ngrams.indexOf(lastSearchToken) !== -1;
}
return isValidItem;
}.bind(this))
}
this.result = items.length;
return items;
},
/**
* Does the search have a result
*/
hasSearchResult: function () {
return this.getDisplayedItems().length > 0
},
/**
* Search result message
*/
getSearchResultMessage : function() {
return this.noSearchResultLabel.replace("%s", '"' + this.getFulltextSearch() + '"')
},
getFulltextSearch : function() {
return this.fulltextSearch;
},
/**
* Callback for the "Show more" button
*/
onShowMore: function () {
if (this.options.hasMoreItems) {
this.loadAdditionalItems(this.onShowMore.bind(this));
} else {
this.expanded = true;
}
this.displayedItems = this.getDisplayedItems();
},
/**
* Index the text to be searched.
*/
slugify: function(text) {
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F'\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
},
/**
* Callback for the "Show less" button
*/
onShowLess: function () {
this.expanded = false;
this.displayedItems = this.getDisplayedItems();
},
/**
* Check if the filter can be expanded
*
* @returns {boolean}
*/
enableExpansion : function () {
return this.options.hasMoreItems || this.items.length > this.maxSize;
},
/**
* Displays the "Show More" link
*
* @returns {*|boolean}
*/
displayShowMore: function () {
return this.enableExpansion() && this.expanded === false && !this.getFulltextSearch();
},
/**
* Displays the "Show Less" link
*
* @returns {*|boolean}
*/
displayShowLess: function () {
return this.enableExpansion() && this.expanded === true && !this.getFulltextSearch();
},
/**
* Add an id to items.
*/
addItemId: function (item) {
item.id = Math.floor(Math.random() * 1000000) + "_option_";
item.displayProductCount = this.options.displayProductCount && (item.count >= 1);
return item;
},
};
};
</script>
<div class="product_type_backFilter"
x-data="{...initSmileAttibute_69b89953e64b8(), ...initCustomSmileAttribute_69b89953e67b4()}"
x-init="initialize();">
<ol class="items grid grid-cols-2 gap-y-2 gap-x-3 xl:text-sm text-xxs">
<template x-for="attribute in displayedItems" hidden>
<li class="item">
<span x-show="attribute.count >= 1"
@click.prevent="selectFilter(attribute.url, 'product_type_back', attribute.label)"
@keydown.enter="selectFilter(attribute.url, 'product_type_back', attribute.label)"
@keydown.space="selectFilter(attribute.url, 'product_type_back', attribute.label)">
<span class="form-input--checkbox">
<label :for="attribute.id" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
:id="attribute.id"
:checked="attribute.is_selected"
:aria-checked="attribute.is_selected"
/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium" x-html="attribute.label"></span>
<span class="count" x-text="'(' + attribute.count + ')'" x-show ="options.displayProductCount"></span>
</label>
</span>
</span>
<div x-show="attribute.count < 1">
<span x-html="attribute.label"></span>
<span class="count" x-text="attribute.count"></span>
</div>
</li>
</template>
</ol>
<div class="no-results-message"
x-model="result"
x-show="getFulltextSearch() && !hasSearchResult()">
<p x-html="getSearchResultMessage()"></p>
</div>
<div class="actions" x-show="enableExpansion()">
<div class="secondary text-right">
<span class="action show-more underline text-secondary cursor-pointer"
x-on:click="onShowMore()"
x-show="displayShowMore()">
<span x-text="showMoreLabel + '+'"></span>
</span>
<span class="action show-less underline text-secondary cursor-pointer"
x-on:click="onShowLess()"
x-show="displayShowLess()">
<span x-text="showLessLabel + '-'"></span>
</span>
</div>
</div>
</div>
<script>
'use strict';
function initCustomSmileAttribute_69b89953e67b4() {
return {
selectFilter(param, action, value) {
window.dataLayer?.push({
'event': 'filtres',
'action': action,
'label': value
});
let attributeCode = param.split('=')[0];
let attributeValue = param.split('=')[1];
let checkbox = this.$el.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
window.dispatchEvent(
new CustomEvent('layered-navigation-filter-selected', {
'detail': {
'attributeCode': attributeCode,
'attributeValue': attributeValue
}
})
);
},
}
}
</script>
</div>
</details>
<details class="filter-option border-b border-lavender-400 last:border-b-0"
x-data="{ open: false }"
aria-expanded="false"
>
<summary class="filter-options-title focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary-400 flex flex-row justify-between items-center py-4 md:py-6 cursor-pointer transition duration-300 group hover:text-pink"
@click="open = !open" >
<span class="font-medium text-anthracite-600">
Contenance </span>
<span :class="{ '-rotate-180': open }">
<svg width="9" height="4.8536" version="1.1" viewbox="0 0 9 4.8536" xmlns="http://www.w3.org/2000/svg" class="text-pink-lighter group-hover:text-pink transition duration-300 w-3 h-auto">
<g transform="translate(-.5 -.5)" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel">
<path d="m1 1 4 4 4-4" stroke="currentColor"></path>
</g>
</svg>
</span>
</summary>
<div class="filter-options-content pb-8.5 hidden"
:class="{ 'hidden': !open , 'block': open }">
<script>
function initLayeredSwatch_contenance() {
return {
getSwatchType(typeNumber) {
switch (typeNumber) {
case "1":
return "color"
case "2":
return "image"
case "0":
default:
return "text"
}
},
getSwatchBackgroundStyle(type, value, image) {
if (this.getSwatchType(type) === "color") {
return 'background-color:' + value;
} else if (this.getSwatchType(type) === "image") {
return "background: #ffffff url('" + image + "') no-repeat center";
} else {
return '';
}
},
activeTooltipItem: false,
tooltipPositionElement: false,
isTooltipVisible() {
return this.activeTooltipItem
},
getTooltipImageStyle() {
const type = this.activeTooltipItem.type;
if (this.getSwatchType(type) === "color") {
return 'background-color:' + this.activeTooltipItem.value + '; width: 110px; height: 90px;';
} else if (this.getSwatchType(type) === "image") {
return "background: #ffffff url('" + this.activeTooltipItem.thumb +
"') center center no-repeat; width: 110px; height: 90px;";
} else {
return 'display:none';
}
},
getTooltipPosition() {
return this.tooltipPositionElement ?
(
`top: ${this.tooltipPositionElement.offsetTop}px;` +
`left: ${this.tooltipPositionElement.offsetLeft}px;`
) : ''
},
getTooltipLabel() {
return this.activeTooltipItem.label || ''
},
isVisualSwatch() {
return this.getSwatchType(this.activeTooltipItem.type) !== 'text'
},
selectFilter(param, action, value) {
window.dataLayer?.push({
'event': 'filtres',
'action': action,
'label': value
});
let attributeCode = param.split('=')[0];
let attributeValue = param.split('=')[1];
let checkbox = this.$el.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
window.dispatchEvent(
new CustomEvent('layered-navigation-filter-selected', {
'detail': {
'attributeCode': attributeCode,
'attributeValue': attributeValue
}
})
);
},
}
}
</script>
<div class="swatch-attribute ? swatch-layered contenance"
x-data="initLayeredSwatch_contenance()"
>
<ol class="items grid grid-cols-2 gap-y-2 gap-x-3 xl:text-sm text-xxs">
<li class="item">
<span
@click.prevent="selectFilter('contenance=10 ml', '', 'attribute.label')"
>
<span class="form-input--checkbox">
<label for="349" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
id="349"/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium">
10 ml </span>
<span class="count">(17)</span>
</label>
</span>
</span>
</li>
<li class="item">
<span
@click.prevent="selectFilter('contenance=30 ml', '', 'attribute.label')"
>
<span class="form-input--checkbox">
<label for="350" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
id="350"/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium">
30 ml </span>
<span class="count">(212)</span>
</label>
</span>
</span>
</li>
<li class="item">
<span
@click.prevent="selectFilter('contenance=50 ml', '', 'attribute.label')"
>
<span class="form-input--checkbox">
<label for="913" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
id="913"/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium">
50 ml </span>
<span class="count">(18)</span>
</label>
</span>
</span>
</li>
<li class="item">
<span
@click.prevent="selectFilter('contenance=100 ml', '', 'attribute.label')"
>
<span class="form-input--checkbox">
<label for="351" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
id="351"/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium">
100 ml </span>
<span class="count">(87)</span>
</label>
</span>
</span>
</li>
<li class="item">
<span
@click.prevent="selectFilter('contenance=200 ml', '', 'attribute.label')"
>
<span class="form-input--checkbox">
<label for="706" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
id="706"/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium">
200 ml </span>
<span class="count">(12)</span>
</label>
</span>
</span>
</li>
</ol>
</div>
</div>
</details>
<details class="filter-option border-b border-lavender-400 last:border-b-0"
x-data="{ open: false }"
aria-expanded="false"
>
<summary class="filter-options-title focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary-400 flex flex-row justify-between items-center py-4 md:py-6 cursor-pointer transition duration-300 group hover:text-pink"
@click="open = !open" >
<span class="font-medium text-anthracite-600">
Pour qui </span>
<span :class="{ '-rotate-180': open }">
<svg width="9" height="4.8536" version="1.1" viewbox="0 0 9 4.8536" xmlns="http://www.w3.org/2000/svg" class="text-pink-lighter group-hover:text-pink transition duration-300 w-3 h-auto">
<g transform="translate(-.5 -.5)" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel">
<path d="m1 1 4 4 4-4" stroke="currentColor"></path>
</g>
</svg>
</span>
</summary>
<div class="filter-options-content pb-8.5 hidden"
:class="{ 'hidden': !open , 'block': open }">
<script>
function initSmileAttibute_69b89953e8ac5() {
"use strict";
return {
options : {"component":"Smile_ElasticsuiteCatalog\/js\/attribute-filter","maxSize":10,"displayProductCount":true,"hasMoreItems":false,"displayRelNofollow":"","ajaxLoadUrl":"https:\/\/www.adopt.com\/fr\/catalog\/navigation_filter\/ajax\/id\/1472\/?cat=1472&filterName=genres","items":[{"label":"Femme","count":333,"url":"genres=Femme","is_selected":false,"isBooleanDefaultValue":false},{"label":"Homme","count":65,"url":"genres=Homme","is_selected":false,"isBooleanDefaultValue":false},{"label":"Mixte","count":9,"url":"genres=Mixte","is_selected":false,"isBooleanDefaultValue":false},{"label":"Enfant","count":4,"url":"genres=Enfant","is_selected":false,"isBooleanDefaultValue":false}]},
searchLabel : 'Rechercher (%s)',
showMoreLabel : 'Afficher plus',
showLessLabel : 'Voir moins',
noSearchResultLabel : 'Aucun résultat pour la recherche <b>%s</b>.',
expanded: false,
items: [],
lastSelectIndex: 0,
maxSize: 0,
displaySearch: false,
displayedItems: [],
fulltextSearch: null,
searchPlaceholder: '',
result: 0,
/**
* Component initialization
*/
initialize: function () {
this.items = this.options.items.map(this.addItemId.bind(this));
var lastSelectedIndex = Math.max.apply(null, (this.items.map(
function (v, k) {return v['is_selected'] ? k : 0;}))
);
this.maxSize = Math.max(this.options.maxSize, lastSelectedIndex + 1);
this.initSearchPlaceholder();
this.onShowLess();
this.displaySearch = this.displayShowMore();
this.displayedItems = this.getDisplayedItems();
},
/**
* Init the place holder
*/
initSearchPlaceholder: function () {
var examples = this.items.slice(0, 2).map(function (item) {return item.label});
if (this.items.length > 2) {
examples.push('...');
}
// Tip to make html chars interpretable by the browser when the value is get from JS.
let placeholder = document.createElement('div');
placeholder.innerHTML = this.searchLabel.replace('%s', examples.join(', '));
this.searchPlaceholder = placeholder.textContent;
},
/**
* Triggered when typing on the search input
*/
onSearchChange: function (event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
this.onShowLess();
} else {
this.fulltextSearch = text;
this.onShowMore();
}
return true;
},
/**
* Triggered when leaving the search field.
*/
onSearchFocusOut: function(event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
}
},
/**
* Retrieve additional Results
*
* @param callback
*/
loadAdditionalItems: function (callback) {
fetch(this.options.ajaxLoadUrl, {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
})
.then((response) => response.json())
.then((data) => {
this.items = data.map(this.addItemId.bind(this));
this.options.hasMoreItems = false;
if (callback) {
return callback();
}
}
);
},
/**
* Retrieve items to display
*
* @returns {*}
*/
getDisplayedItems: function () {
var items = this.items;
if (this.expanded === false) {
items = this.items.slice(0, this.maxSize);
}
if (this.getFulltextSearch()) {
var searchTokens = this.slugify(this.getFulltextSearch()).split('-');
var lastSearchToken = searchTokens.splice(-1, 1)[0];
items = items.filter(function(item) {
var isValidItem = true;
var itemTokens = this.slugify(item.label).split('-');
searchTokens.forEach(function(currentToken) {
if (itemTokens.indexOf(currentToken) === -1) {
isValidItem = false;
}
})
if (isValidItem && lastSearchToken) {
var ngrams = itemTokens.map(function(token) {return token.substring(0, lastSearchToken.length)});
isValidItem = ngrams.indexOf(lastSearchToken) !== -1;
}
return isValidItem;
}.bind(this))
}
this.result = items.length;
return items;
},
/**
* Does the search have a result
*/
hasSearchResult: function () {
return this.getDisplayedItems().length > 0
},
/**
* Search result message
*/
getSearchResultMessage : function() {
return this.noSearchResultLabel.replace("%s", '"' + this.getFulltextSearch() + '"')
},
getFulltextSearch : function() {
return this.fulltextSearch;
},
/**
* Callback for the "Show more" button
*/
onShowMore: function () {
if (this.options.hasMoreItems) {
this.loadAdditionalItems(this.onShowMore.bind(this));
} else {
this.expanded = true;
}
this.displayedItems = this.getDisplayedItems();
},
/**
* Index the text to be searched.
*/
slugify: function(text) {
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F'\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
},
/**
* Callback for the "Show less" button
*/
onShowLess: function () {
this.expanded = false;
this.displayedItems = this.getDisplayedItems();
},
/**
* Check if the filter can be expanded
*
* @returns {boolean}
*/
enableExpansion : function () {
return this.options.hasMoreItems || this.items.length > this.maxSize;
},
/**
* Displays the "Show More" link
*
* @returns {*|boolean}
*/
displayShowMore: function () {
return this.enableExpansion() && this.expanded === false && !this.getFulltextSearch();
},
/**
* Displays the "Show Less" link
*
* @returns {*|boolean}
*/
displayShowLess: function () {
return this.enableExpansion() && this.expanded === true && !this.getFulltextSearch();
},
/**
* Add an id to items.
*/
addItemId: function (item) {
item.id = Math.floor(Math.random() * 1000000) + "_option_";
item.displayProductCount = this.options.displayProductCount && (item.count >= 1);
return item;
},
};
};
</script>
<div class="genresFilter"
x-data="{...initSmileAttibute_69b89953e8ac5(), ...initCustomSmileAttribute_69b89953e8bf3()}"
x-init="initialize();">
<ol class="items grid grid-cols-2 gap-y-2 gap-x-3 xl:text-sm text-xxs">
<template x-for="attribute in displayedItems" hidden>
<li class="item">
<span x-show="attribute.count >= 1"
@click.prevent="selectFilter(attribute.url, 'genres', attribute.label)"
@keydown.enter="selectFilter(attribute.url, 'genres', attribute.label)"
@keydown.space="selectFilter(attribute.url, 'genres', attribute.label)">
<span class="form-input--checkbox">
<label :for="attribute.id" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
:id="attribute.id"
:checked="attribute.is_selected"
:aria-checked="attribute.is_selected"
/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium" x-html="attribute.label"></span>
<span class="count" x-text="'(' + attribute.count + ')'" x-show ="options.displayProductCount"></span>
</label>
</span>
</span>
<div x-show="attribute.count < 1">
<span x-html="attribute.label"></span>
<span class="count" x-text="attribute.count"></span>
</div>
</li>
</template>
</ol>
<div class="no-results-message"
x-model="result"
x-show="getFulltextSearch() && !hasSearchResult()">
<p x-html="getSearchResultMessage()"></p>
</div>
<div class="actions" x-show="enableExpansion()">
<div class="secondary text-right">
<span class="action show-more underline text-secondary cursor-pointer"
x-on:click="onShowMore()"
x-show="displayShowMore()">
<span x-text="showMoreLabel + '+'"></span>
</span>
<span class="action show-less underline text-secondary cursor-pointer"
x-on:click="onShowLess()"
x-show="displayShowLess()">
<span x-text="showLessLabel + '-'"></span>
</span>
</div>
</div>
</div>
<script>
'use strict';
function initCustomSmileAttribute_69b89953e8bf3() {
return {
selectFilter(param, action, value) {
window.dataLayer?.push({
'event': 'filtres',
'action': action,
'label': value
});
let attributeCode = param.split('=')[0];
let attributeValue = param.split('=')[1];
let checkbox = this.$el.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
window.dispatchEvent(
new CustomEvent('layered-navigation-filter-selected', {
'detail': {
'attributeCode': attributeCode,
'attributeValue': attributeValue
}
})
);
},
}
}
</script>
</div>
</details>
<details class="filter-option border-b border-lavender-400 last:border-b-0"
x-data="{ open: false }"
aria-expanded="false"
>
<summary class="filter-options-title focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary-400 flex flex-row justify-between items-center py-4 md:py-6 cursor-pointer transition duration-300 group hover:text-pink"
@click="open = !open" >
<span class="font-medium text-anthracite-600">
Intensité </span>
<span :class="{ '-rotate-180': open }">
<svg width="9" height="4.8536" version="1.1" viewbox="0 0 9 4.8536" xmlns="http://www.w3.org/2000/svg" class="text-pink-lighter group-hover:text-pink transition duration-300 w-3 h-auto">
<g transform="translate(-.5 -.5)" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel">
<path d="m1 1 4 4 4-4" stroke="currentColor"></path>
</g>
</svg>
</span>
</summary>
<div class="filter-options-content pb-8.5 hidden"
:class="{ 'hidden': !open , 'block': open }">
<script>
function initSmileAttibute_69b89953e96cd() {
"use strict";
return {
options : {"component":"Smile_ElasticsuiteCatalog\/js\/attribute-filter","maxSize":10,"displayProductCount":true,"hasMoreItems":false,"displayRelNofollow":"","ajaxLoadUrl":"https:\/\/www.adopt.com\/fr\/catalog\/navigation_filter\/ajax\/id\/1472\/?cat=1472&filterName=intensity","items":[{"label":"1","count":8,"url":"intensity=1","is_selected":false,"isBooleanDefaultValue":false},{"label":"2","count":43,"url":"intensity=2","is_selected":false,"isBooleanDefaultValue":false},{"label":"3","count":134,"url":"intensity=3","is_selected":false,"isBooleanDefaultValue":false},{"label":"4","count":103,"url":"intensity=4","is_selected":false,"isBooleanDefaultValue":false},{"label":"5","count":25,"url":"intensity=5","is_selected":false,"isBooleanDefaultValue":false}]},
searchLabel : 'Rechercher (%s)',
showMoreLabel : 'Afficher plus',
showLessLabel : 'Voir moins',
noSearchResultLabel : 'Aucun résultat pour la recherche <b>%s</b>.',
expanded: false,
items: [],
lastSelectIndex: 0,
maxSize: 0,
displaySearch: false,
displayedItems: [],
fulltextSearch: null,
searchPlaceholder: '',
result: 0,
/**
* Component initialization
*/
initialize: function () {
this.items = this.options.items.map(this.addItemId.bind(this));
var lastSelectedIndex = Math.max.apply(null, (this.items.map(
function (v, k) {return v['is_selected'] ? k : 0;}))
);
this.maxSize = Math.max(this.options.maxSize, lastSelectedIndex + 1);
this.initSearchPlaceholder();
this.onShowLess();
this.displaySearch = this.displayShowMore();
this.displayedItems = this.getDisplayedItems();
},
/**
* Init the place holder
*/
initSearchPlaceholder: function () {
var examples = this.items.slice(0, 2).map(function (item) {return item.label});
if (this.items.length > 2) {
examples.push('...');
}
// Tip to make html chars interpretable by the browser when the value is get from JS.
let placeholder = document.createElement('div');
placeholder.innerHTML = this.searchLabel.replace('%s', examples.join(', '));
this.searchPlaceholder = placeholder.textContent;
},
/**
* Triggered when typing on the search input
*/
onSearchChange: function (event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
this.onShowLess();
} else {
this.fulltextSearch = text;
this.onShowMore();
}
return true;
},
/**
* Triggered when leaving the search field.
*/
onSearchFocusOut: function(event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
}
},
/**
* Retrieve additional Results
*
* @param callback
*/
loadAdditionalItems: function (callback) {
fetch(this.options.ajaxLoadUrl, {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
})
.then((response) => response.json())
.then((data) => {
this.items = data.map(this.addItemId.bind(this));
this.options.hasMoreItems = false;
if (callback) {
return callback();
}
}
);
},
/**
* Retrieve items to display
*
* @returns {*}
*/
getDisplayedItems: function () {
var items = this.items;
if (this.expanded === false) {
items = this.items.slice(0, this.maxSize);
}
if (this.getFulltextSearch()) {
var searchTokens = this.slugify(this.getFulltextSearch()).split('-');
var lastSearchToken = searchTokens.splice(-1, 1)[0];
items = items.filter(function(item) {
var isValidItem = true;
var itemTokens = this.slugify(item.label).split('-');
searchTokens.forEach(function(currentToken) {
if (itemTokens.indexOf(currentToken) === -1) {
isValidItem = false;
}
})
if (isValidItem && lastSearchToken) {
var ngrams = itemTokens.map(function(token) {return token.substring(0, lastSearchToken.length)});
isValidItem = ngrams.indexOf(lastSearchToken) !== -1;
}
return isValidItem;
}.bind(this))
}
this.result = items.length;
return items;
},
/**
* Does the search have a result
*/
hasSearchResult: function () {
return this.getDisplayedItems().length > 0
},
/**
* Search result message
*/
getSearchResultMessage : function() {
return this.noSearchResultLabel.replace("%s", '"' + this.getFulltextSearch() + '"')
},
getFulltextSearch : function() {
return this.fulltextSearch;
},
/**
* Callback for the "Show more" button
*/
onShowMore: function () {
if (this.options.hasMoreItems) {
this.loadAdditionalItems(this.onShowMore.bind(this));
} else {
this.expanded = true;
}
this.displayedItems = this.getDisplayedItems();
},
/**
* Index the text to be searched.
*/
slugify: function(text) {
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F'\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
},
/**
* Callback for the "Show less" button
*/
onShowLess: function () {
this.expanded = false;
this.displayedItems = this.getDisplayedItems();
},
/**
* Check if the filter can be expanded
*
* @returns {boolean}
*/
enableExpansion : function () {
return this.options.hasMoreItems || this.items.length > this.maxSize;
},
/**
* Displays the "Show More" link
*
* @returns {*|boolean}
*/
displayShowMore: function () {
return this.enableExpansion() && this.expanded === false && !this.getFulltextSearch();
},
/**
* Displays the "Show Less" link
*
* @returns {*|boolean}
*/
displayShowLess: function () {
return this.enableExpansion() && this.expanded === true && !this.getFulltextSearch();
},
/**
* Add an id to items.
*/
addItemId: function (item) {
item.id = Math.floor(Math.random() * 1000000) + "_option_";
item.displayProductCount = this.options.displayProductCount && (item.count >= 1);
return item;
},
};
};
</script>
<div class="intensityFilter"
x-data="{...initSmileAttibute_69b89953e96cd(), ...initCustomSmileAttribute_69b89953e985b()}"
x-init="initialize();">
<ol class="items grid grid-cols-2 gap-y-2 gap-x-3 xl:text-sm text-xxs">
<template x-for="attribute in displayedItems" hidden>
<li class="item">
<span x-show="attribute.count >= 1"
@click.prevent="selectFilter(attribute.url, 'intensity', attribute.label)"
@keydown.enter="selectFilter(attribute.url, 'intensity', attribute.label)"
@keydown.space="selectFilter(attribute.url, 'intensity', attribute.label)">
<span class="form-input--checkbox">
<label :for="attribute.id" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
:id="attribute.id"
:checked="attribute.is_selected"
:aria-checked="attribute.is_selected"
/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium" x-html="attribute.label"></span>
<span class="count" x-text="'(' + attribute.count + ')'" x-show ="options.displayProductCount"></span>
</label>
</span>
</span>
<div x-show="attribute.count < 1">
<span x-html="attribute.label"></span>
<span class="count" x-text="attribute.count"></span>
</div>
</li>
</template>
</ol>
<div class="no-results-message"
x-model="result"
x-show="getFulltextSearch() && !hasSearchResult()">
<p x-html="getSearchResultMessage()"></p>
</div>
<div class="actions" x-show="enableExpansion()">
<div class="secondary text-right">
<span class="action show-more underline text-secondary cursor-pointer"
x-on:click="onShowMore()"
x-show="displayShowMore()">
<span x-text="showMoreLabel + '+'"></span>
</span>
<span class="action show-less underline text-secondary cursor-pointer"
x-on:click="onShowLess()"
x-show="displayShowLess()">
<span x-text="showLessLabel + '-'"></span>
</span>
</div>
</div>
</div>
<script>
'use strict';
function initCustomSmileAttribute_69b89953e985b() {
return {
selectFilter(param, action, value) {
window.dataLayer?.push({
'event': 'filtres',
'action': action,
'label': value
});
let attributeCode = param.split('=')[0];
let attributeValue = param.split('=')[1];
let checkbox = this.$el.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
window.dispatchEvent(
new CustomEvent('layered-navigation-filter-selected', {
'detail': {
'attributeCode': attributeCode,
'attributeValue': attributeValue
}
})
);
},
}
}
</script>
</div>
</details>
<details class="filter-option border-b border-lavender-400 last:border-b-0"
x-data="{ open: false }"
aria-expanded="false"
>
<summary class="filter-options-title focus:outline-none focus-visible:ring-2 focus-visible:ring-secondary-400 flex flex-row justify-between items-center py-4 md:py-6 cursor-pointer transition duration-300 group hover:text-pink"
@click="open = !open" >
<span class="font-medium text-anthracite-600">
Type de coffret </span>
<span :class="{ '-rotate-180': open }">
<svg width="9" height="4.8536" version="1.1" viewbox="0 0 9 4.8536" xmlns="http://www.w3.org/2000/svg" class="text-pink-lighter group-hover:text-pink transition duration-300 w-3 h-auto">
<g transform="translate(-.5 -.5)" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="bevel">
<path d="m1 1 4 4 4-4" stroke="currentColor"></path>
</g>
</svg>
</span>
</summary>
<div class="filter-options-content pb-8.5 hidden"
:class="{ 'hidden': !open , 'block': open }">
<script>
function initSmileAttibute_69b89953ea3ea() {
"use strict";
return {
options : {"component":"Smile_ElasticsuiteCatalog\/js\/attribute-filter","maxSize":0,"displayProductCount":true,"hasMoreItems":false,"displayRelNofollow":"","ajaxLoadUrl":"https:\/\/www.adopt.com\/fr\/catalog\/navigation_filter\/ajax\/id\/1472\/?cat=1472&filterName=box_type","items":[{"label":"30ml et Gel douche","count":40,"url":"box_type=30ml et Gel douche","is_selected":false,"isBooleanDefaultValue":false},{"label":"Coffret parfum","count":24,"url":"box_type=Coffret parfum","is_selected":false,"isBooleanDefaultValue":false},{"label":"30ml et Gel douche et Lait corps","count":16,"url":"box_type=30ml et Gel douche et Lait corps","is_selected":false,"isBooleanDefaultValue":false},{"label":"30ml et 100ml","count":13,"url":"box_type=30ml et 100ml","is_selected":false,"isBooleanDefaultValue":false},{"label":"3 et 4 parfums","count":7,"url":"box_type=3 et 4 parfums","is_selected":false,"isBooleanDefaultValue":false},{"label":"30ml et Cr\u00e8me main","count":7,"url":"box_type=30ml et Cr\u00e8me main","is_selected":false,"isBooleanDefaultValue":false},{"label":"Coffret routine","count":5,"url":"box_type=Coffret routine","is_selected":false,"isBooleanDefaultValue":false},{"label":"100ml et Gel douche","count":3,"url":"box_type=100ml et Gel douche","is_selected":false,"isBooleanDefaultValue":false},{"label":"30ml et make-up","count":3,"url":"box_type=30ml et make-up","is_selected":false,"isBooleanDefaultValue":false},{"label":"30ml et 50ml","count":2,"url":"box_type=30ml et 50ml","is_selected":false,"isBooleanDefaultValue":false},{"label":"Calendrier","count":2,"url":"box_type=Calendrier","is_selected":false,"isBooleanDefaultValue":false}]},
searchLabel : 'Rechercher (%s)',
showMoreLabel : 'Afficher plus',
showLessLabel : 'Voir moins',
noSearchResultLabel : 'Aucun résultat pour la recherche <b>%s</b>.',
expanded: false,
items: [],
lastSelectIndex: 0,
maxSize: 0,
displaySearch: false,
displayedItems: [],
fulltextSearch: null,
searchPlaceholder: '',
result: 0,
/**
* Component initialization
*/
initialize: function () {
this.items = this.options.items.map(this.addItemId.bind(this));
var lastSelectedIndex = Math.max.apply(null, (this.items.map(
function (v, k) {return v['is_selected'] ? k : 0;}))
);
this.maxSize = Math.max(this.options.maxSize, lastSelectedIndex + 1);
this.initSearchPlaceholder();
this.onShowLess();
this.displaySearch = this.displayShowMore();
this.displayedItems = this.getDisplayedItems();
},
/**
* Init the place holder
*/
initSearchPlaceholder: function () {
var examples = this.items.slice(0, 2).map(function (item) {return item.label});
if (this.items.length > 2) {
examples.push('...');
}
// Tip to make html chars interpretable by the browser when the value is get from JS.
let placeholder = document.createElement('div');
placeholder.innerHTML = this.searchLabel.replace('%s', examples.join(', '));
this.searchPlaceholder = placeholder.textContent;
},
/**
* Triggered when typing on the search input
*/
onSearchChange: function (event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
this.onShowLess();
} else {
this.fulltextSearch = text;
this.onShowMore();
}
return true;
},
/**
* Triggered when leaving the search field.
*/
onSearchFocusOut: function(event) {
var text = event.target.value;
if (text.trim() === "") {
this.fulltextSearch = null;
}
},
/**
* Retrieve additional Results
*
* @param callback
*/
loadAdditionalItems: function (callback) {
fetch(this.options.ajaxLoadUrl, {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
})
.then((response) => response.json())
.then((data) => {
this.items = data.map(this.addItemId.bind(this));
this.options.hasMoreItems = false;
if (callback) {
return callback();
}
}
);
},
/**
* Retrieve items to display
*
* @returns {*}
*/
getDisplayedItems: function () {
var items = this.items;
if (this.expanded === false) {
items = this.items.slice(0, this.maxSize);
}
if (this.getFulltextSearch()) {
var searchTokens = this.slugify(this.getFulltextSearch()).split('-');
var lastSearchToken = searchTokens.splice(-1, 1)[0];
items = items.filter(function(item) {
var isValidItem = true;
var itemTokens = this.slugify(item.label).split('-');
searchTokens.forEach(function(currentToken) {
if (itemTokens.indexOf(currentToken) === -1) {
isValidItem = false;
}
})
if (isValidItem && lastSearchToken) {
var ngrams = itemTokens.map(function(token) {return token.substring(0, lastSearchToken.length)});
isValidItem = ngrams.indexOf(lastSearchToken) !== -1;
}
return isValidItem;
}.bind(this))
}
this.result = items.length;
return items;
},
/**
* Does the search have a result
*/
hasSearchResult: function () {
return this.getDisplayedItems().length > 0
},
/**
* Search result message
*/
getSearchResultMessage : function() {
return this.noSearchResultLabel.replace("%s", '"' + this.getFulltextSearch() + '"')
},
getFulltextSearch : function() {
return this.fulltextSearch;
},
/**
* Callback for the "Show more" button
*/
onShowMore: function () {
if (this.options.hasMoreItems) {
this.loadAdditionalItems(this.onShowMore.bind(this));
} else {
this.expanded = true;
}
this.displayedItems = this.getDisplayedItems();
},
/**
* Index the text to be searched.
*/
slugify: function(text) {
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F'\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
},
/**
* Callback for the "Show less" button
*/
onShowLess: function () {
this.expanded = false;
this.displayedItems = this.getDisplayedItems();
},
/**
* Check if the filter can be expanded
*
* @returns {boolean}
*/
enableExpansion : function () {
return this.options.hasMoreItems || this.items.length > this.maxSize;
},
/**
* Displays the "Show More" link
*
* @returns {*|boolean}
*/
displayShowMore: function () {
return this.enableExpansion() && this.expanded === false && !this.getFulltextSearch();
},
/**
* Displays the "Show Less" link
*
* @returns {*|boolean}
*/
displayShowLess: function () {
return this.enableExpansion() && this.expanded === true && !this.getFulltextSearch();
},
/**
* Add an id to items.
*/
addItemId: function (item) {
item.id = Math.floor(Math.random() * 1000000) + "_option_";
item.displayProductCount = this.options.displayProductCount && (item.count >= 1);
return item;
},
};
};
</script>
<div class="box_typeFilter"
x-data="{...initSmileAttibute_69b89953ea3ea(), ...initCustomSmileAttribute_69b89953ea5f0()}"
x-init="initialize();">
<ol class="items grid grid-cols-2 gap-y-2 gap-x-3 xl:text-sm text-xxs">
<template x-for="attribute in displayedItems" hidden>
<li class="item">
<span x-show="attribute.count >= 1"
@click.prevent="selectFilter(attribute.url, 'box_type', attribute.label)"
@keydown.enter="selectFilter(attribute.url, 'box_type', attribute.label)"
@keydown.space="selectFilter(attribute.url, 'box_type', attribute.label)">
<span class="form-input--checkbox">
<label :for="attribute.id" class="inline-block cursor-pointer" style="gap: 0.2rem">
<input type="checkbox"
class="sr-only"
:id="attribute.id"
:checked="attribute.is_selected"
:aria-checked="attribute.is_selected"
/>
<span class="form-input--checkbox__controller shrink-0"></span>
<span class="ml-2 font-medium" x-html="attribute.label"></span>
<span class="count" x-text="'(' + attribute.count + ')'" x-show ="options.displayProductCount"></span>
</label>
</span>
</span>
<div x-show="attribute.count < 1">
<span x-html="attribute.label"></span>
<span class="count" x-text="attribute.count"></span>
</div>
</li>
</template>
</ol>
<div class="no-results-message"
x-model="result"
x-show="getFulltextSearch() && !hasSearchResult()">
<p x-html="getSearchResultMessage()"></p>
</div>
<div class="actions" x-show="enableExpansion()">
<div class="secondary text-right">
<span class="action show-more underline text-secondary cursor-pointer"
x-on:click="onShowMore()"
x-show="displayShowMore()">
<span x-text="showMoreLabel + '+'"></span>
</span>
<span class="action show-less underline text-secondary cursor-pointer"
x-on:click="onShowLess()"
x-show="displayShowLess()">
<span x-text="showLessLabel + '-'"></span>
</span>
</div>
</div>
</div>
<script>
'use strict';
function initCustomSmileAttribute_69b89953ea5f0() {
return {
selectFilter(param, action, value) {
window.dataLayer?.push({
'event': 'filtres',
'action': action,
'label': value
});
let attributeCode = param.split('=')[0];
let attributeValue = param.split('=')[1];
let checkbox = this.$el.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
window.dispatchEvent(
new CustomEvent('layered-navigation-filter-selected', {
'detail': {
'attributeCode': attributeCode,
'attributeValue': attributeValue
}
})
);
},
}
}
</script>
</div>
</details>
</div>
</div>
<div class="block-actions filter-actions border-t-[4px] border-pink-lighter px-5 pt-4 pb-5 mt-0 md:border-t-0">
<button type="button" @click.prevent="applyFilters()"
class="btn btn-primary text-tiny leading-normal btn-full-width py-2 mb-2 px-5 md:text-xs">
<span>Appliquer</span>
</button>
<a href="https://www.adopt.com/fr/parfum.html"
class="btn btn-secondary text-tiny leading-normal btn-full-width py-2 px-5 md:text-xs">
<span>Tout supprimer</span>
</a>
</div>
</div>
</div>
</div>
<script>
function initLayeredNavigation() {
return {
appliedFilters: [],
blockOpen: false,
baseUrl: new URL('https://www.adopt.com/fr'),
currentUrl: new URL(window.location.href),
buttonOpenFilters: null,
init() {
this.currentUrl.searchParams.forEach((value, attributeCode) => {
attributeCode = attributeCode.split('[')[0];
this.appliedFilters.push({
attributeCode: attributeCode,
value: value
});
});
document.addEventListener('filtersOpened', (event) => {
this.buttonOpenFilters = event.detail.buttonElement;
this.openFilters();
});
},
openFilters: function () {
this.blockOpen = true;
if (window.lockBodyScroll) {
window.lockBodyScroll();
} else {
document.body.classList.add('overflow-hidden');
}
if (window.hyva && window.hyva.trapFocus && this.$refs.filtersDialog) {
window.hyva.trapFocus(this.$refs.filtersDialog);
}
if (this.$refs.closeFiltersButton) {
this.$refs.closeFiltersButton.focus();
}
},
closeFilters() {
this.blockOpen = false;
if (window.unlockBodyScroll) {
window.unlockBodyScroll();
} else {
document.body.classList.remove('overflow-hidden');
}
if (window.hyva && window.hyva.releaseFocus && this.$refs.filtersDialog) {
window.hyva.releaseFocus(this.$refs.filtersDialog);
}
if (this.buttonOpenFilters) {
this.buttonOpenFilters.focus();
} else if (this.$refs.closeFiltersButton) {
this.$refs.closeFiltersButton.focus();
}
this.$nextTick(() => {
this.buttonOpenFilters = null;
});
},
applyFilters() {
let url = new URL(this.currentUrl.origin + this.currentUrl.pathname);
let i = 0;
let lastAttribute = '';
let countArray = [];
this.appliedFilters.sort((a, b) => (a.attributeCode > b.attributeCode) ? 1 : -1);
this.appliedFilters.forEach((filter) => {
if (filter.attributeCode !== lastAttribute) {
lastAttribute = filter.attributeCode;
i = 0;
}
if (filter.attributeCode === lastAttribute) {
countArray[filter.attributeCode] = i;
i++;
}
});
lastAttribute = '';
this.appliedFilters.forEach((filter) => {
if (filter.attributeCode !== lastAttribute) {
lastAttribute = filter.attributeCode;
i = 0;
}
if (filter.attributeCode === lastAttribute) {
if (countArray[filter.attributeCode] > 0) {
url.searchParams.append(filter.attributeCode + '[' + i + ']', filter.value);
} else {
url.searchParams.append(filter.attributeCode, filter.value);
}
i++;
}
});
window.location.href = url.href;
},
updatePriceFilter(data) {
this.appliedFilters.forEach((filter, index) => {
if((filter.attributeCode === 'price')) {
this.appliedFilters.splice(index, 1);
}
});
if (!data.resetFilter) {
this.appliedFilters.push({
attributeCode: data.attributeCode,
value: data.attributeValue
});
}
},
updateFilters(data) {
let removed = false;
this.appliedFilters.forEach((filter, index) => {
if((filter.attributeCode === data.attributeCode) && (filter.value === data.attributeValue)) {
this.appliedFilters.splice(index, 1);
removed = true;
}
});
if (!removed) {
this.appliedFilters.push({
attributeCode: data.attributeCode,
value: data.attributeValue
});
}
},
updateRadioFilters(data) {
let removed = false;
this.appliedFilters.forEach((filter, index) => {
if((filter.attributeCode === data.attributeCode)) {
this.appliedFilters.splice(index, 1);
removed = true;
}
});
if (data.added) {
this.appliedFilters.push({
attributeCode: data.attributeCode,
value: data.attributeValue
});
}
}
}
}
</script>
</aside><div class="column main"><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>
<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>
<section class="py-4 md:py-6">
<div class="pb-6"
:class="{'hidden': !hasContent}"
@open-mini-cart.window="$refs.container.style.zIndex = '20'"
@close-mini-cart.window.debounce="$refs.container.style.zIndex = '29'"
@open-menu-subnav.window="$refs.container.style.zIndex = '20'"
@close-menu-subnav.window="$refs.container.style.zIndex = '29'"
x-data="{ hasContent: true, isSticky: false, header: null, headerHeight: 0, scrollPos: 0, isMobile: window.innerWidth < 768, ticking: false, wasHidden: false, effectiveHeaderHeight: 0, init() { this.header = document.querySelector('.header-wrapper'); this.headerHeight = this.header ? this.header.offsetHeight : 0; this.effectiveHeaderHeight = this.headerHeight; this.$nextTick(() => { window.dispatchEvent( new CustomEvent('update-pager-items', { detail: { currentPage: 1, pageSize: 32, totalCount: 440 } }) ); }); }, scroll() { const isHeaderHidden = this.header && this.header.classList.contains('-translate-y-full'); if (!isHeaderHidden && this.wasHidden) { setTimeout(() => { this.wasHidden = false; this.scroll(); }, 300); return; } if (isHeaderHidden) { this.wasHidden = true; } if(this.$refs.filters.getBoundingClientRect().top <= (this.header ? this.header.offsetHeight : 0)) { if (!this.isSticky) { this.effectiveHeaderHeight = this.header ? this.header.offsetHeight : 0; } this.isSticky = true; } else { this.isSticky = false; } } }"
@scroll.window="scroll()"
@header-height-changed.window="effectiveHeaderHeight = $event.detail.height;"
@resize.window="isMobile = window.innerWidth < 768"
x-ref="filters">
<div :class="{'fixed left-0 right-0 py-3 border-t border-b border-anthracite-200 z-20': isSticky}"
:style="isSticky ? 'top: ' + effectiveHeaderHeight + 'px; z-index: 29;' : ''"
class="bg-white filter-sticky transition-[top] duration-200 ease-in-out"
x-ref="container">
<div class="container" x-init="hasContent = $el.innerHTML.length > 10;"> <script>
function initToolbar_69b899542cf62() {
return {
options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"grid","directionDefault":"asc","orderDefault":"position","limitDefault":32,"url":"https:\/\/www.adopt.com\/fr\/parfum.html","formKey":"TW5SENaRlup3v8iR","post":false,"page":"p"}}.productListToolbarForm || {},
getUrlParams: function () {
let decode = window.decodeURIComponent,
urlPaths = this.options.url.split('?'),
urlParams = urlPaths[1] ? urlPaths[1].split('&') : [],
params = {},
parameters, i;
for (i = 0; i < urlParams.length; i++) {
parameters = urlParams[i].split('=');
params[decode(parameters[0])] = parameters[1] !== undefined ?
decode(parameters[1].replace(/\+/g, '%20')) :
'';
}
return params;
},
getCurrentLimit: function () {
return this.getUrlParams()[this.options.limit] || this.options.limitDefault;
},
getCurrentPage: function () {
return this.getUrlParams()[this.options.page] || 1;
},
changeUrl(paramName, paramValue, defaultValue) {
let urlPaths = this.options.url.split('?'),
baseUrl = urlPaths[0],
paramData = this.getUrlParams(),
currentPage = this.getCurrentPage(),
newPage;
/**
* calculates the page on which the first item of the current page will
* be with the new limit and sets that number as the new page
*/
if (currentPage > 1 && paramName === this.options.limit) {
newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1;
if (newPage > 1) {
paramData[this.options.page] = newPage;
} else {
delete paramData[this.options.page];
}
}
paramData[paramName] = paramValue;
if ((paramName === 'product_list_order')) {
window.dataLayer?.push({
'event': 'trierPar',
'text': paramValue
});
}
if (this.options.post) {
hyva.postForm({action: baseUrl, data: paramData});
} else {
if (paramValue === defaultValue.toString()) {
delete paramData[paramName];
}
paramData = Object.keys(paramData).length === 0
? ''
: '?' + (new URLSearchParams(paramData));
location.href = baseUrl + paramData + '#toolbar-amount'
}
}
}
}
</script>
<div x-data="initToolbar_69b899542cf62()"
class="toolbar toolbar-products flex gap-2 md:gap-7 items-center">
<div class="flex-1 md:flex-initial">
<div class="flex gap-2 md:gap-4" x-data="initStateLayeredNavigation()">
<button
class="btn btn-layered-nav"
@click="openFilters()">
<span><svg xmlns="http://www.w3.org/2000/svg" data-icon="filter" width="24" height="24" viewbox="0 0 17 17" fill="none" class="w-3.75" role="img">
<g>
<path d="M15.999 3.90015H11.1324" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M15.999 8.5H6.13236" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M15.999 13.0999H0.999023" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<title/></svg>
</span>
Filtrer </button>
</div>
<script>
function initStateLayeredNavigation() {
return {
openFilters: function() {
this.$dispatch('filtersOpened', {
buttonElement: this.$event.target
});
}
}
}
</script> </div>
<div class="text-right md:text-center flex-1">
<p class="toolbar-amount text-xs leading-5 font-medium text-center" id="toolbar-amount">
</p>
</div>
<div class="toolbar-sorter sorter flex items-center relative"
x-data="{ currentOrder: 'position', isDefaultOrder: true, hasUserSelection: false, defaultLabel: 'Trier\u0020par', orders: {'position': 'Pertinence','price': 'Prix\u0020croissant','price_desc': 'Prix\u0020d\u00E9croissant','ratings_summary': 'Par\u0020meilleures\u0020notes','publication_at': 'Par\u0020nouveaut\u00E9s','bestseller_order': 'Par\u0020meilleures\u0020ventes'}, orderKeys: ['position','price','price_desc','ratings_summary','publication_at','bestseller_order'], init() { if (this.isDefaultOrder && !this.hasUserSelection) { this.$refs.select.value = ''; } }, handleChange(event) { const value = event.target.value; if (value === '') return; this.currentOrder = value; this.hasUserSelection = true; this.$refs['sorter-label'].innerHTML = this.getDisplayLabel(); changeUrl( 'product_list_order', value, options.orderDefault ); }, getDisplayLabel() { if (this.$refs.select && this.$refs.select.value === '') { return this.defaultLabel; } return this.orders[this.currentOrder] || this.defaultLabel; } }">
<div class="btn-sort-by-wrapper relative group">
<div class="btn btn-sort-by">
<span x-ref="sorter-label" x-text="getDisplayLabel()">
Trier par </span>
<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="w-2.5 h-auto" width="24" height="24" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.5,0.5l4,4l4-4"/>
<title/></svg>
</div>
<select data-role="sorter"
x-ref="select"
class="absolute text-anthracite inset-0 w-full h-full opacity-0 cursor-pointer focus:ring-2 focus:ring-candy"
aria-label="Trier par"
@change="handleChange($event)">
<option value="price"
class="text-anthracite"
>
Prix croissant </option>
<option value="price_desc"
class="text-anthracite"
>
Prix décroissant </option>
<option value="ratings_summary"
class="text-anthracite"
>
Par meilleures notes </option>
<option value="publication_at"
class="text-anthracite"
>
Par nouveautés </option>
<option value="bestseller_order"
class="text-anthracite"
>
Par meilleures ventes </option>
</select>
</div>
<span class="sr-only sorter-label">
Trier par </span>
</div> </div>
</div>
</div>
</div>
<div class="container"></div>
<div class="product-list-container products gap-y-6 wrapper mode-grid products-grid">
<ul class="mx-auto grid gap-x-1 gap-y-6 md:gap-x-6 grid-cols-2 sm:grid-cols-3 xl:grid-cols-4">
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/eau-de-parfum-girl-secret-8883701429856137-fr.html')"
href="https://www.adopt.com/fr/eau-de-parfum-girl-secret-8883701429856137-fr.html"
class="product-item category-add-to-cart-form-product-_69b89848731d4 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89848731d4()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-41024.window="openAddCartPanel()"
@update-prices-41024="updatePrice($event.detail, 41024);"
@update-short-description-listing-41024="updateShortDescription($event.detail);"
@update-configurable-url-41024="updateUrl($event.detail);"
@configurable-selection-changed-41024="updateFlagsData($event.detail);"
@update-gallery-41024="updateGallery($event.detail);"
@stock-alert-modal-open-41024="showAlertButton($event)"
@stock-alert-modal-close-41024="hideAlertButton($event)"
data-sku="8883701429856137">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/41024/"
name="category-add-to-cart-form-product-_69b89848731d4"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89848731d4">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="41024" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 41024, {"product_ean":"8883701429856137","product_name":"girl-secret","product_id":"41024","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="41024">
<template x-if="!isInWishlist(41024)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(41024)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Girl Secret"
class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Girl Secret <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '41024' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-girl-secret-8883701429856137-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(61)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Milkshake Pistache, Fleurs blanches, Bois de cèdre, Vanille chantilly </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '41024' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-girl-secret-8883701429856137-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(61)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(41024, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40840"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40841"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40840":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40841":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"41024","chooseText":"Choisissez une option...","images":[],"index":{"40840":{"153":"350"},"40841":{"153":"351"}},"salable":{"153":{"350":["40840"],"351":["40841"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40840":"3701429856137","40841":"3701429856144"},"short_description":{"40840":"Eau de parfum 30 ml","40841":"Eau de parfum 100 ml"},"flags_data":{"40840":{"publication_at":{"label":"Nouveau","icon":""},"is_vegan":{"label":"Vegan","icon":""}},"40841":{"publication_at":{"label":"Nouveau","icon":""},"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40840":"30MLGIRLSECR00W","40841":"100MLGIRLSEC00W"},"adopt_code_erp":{"40840":"30MLGIRLSECR00W X","40841":"100MLGIRLSEC00W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40840"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40841"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40840":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40841":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"41024","chooseText":"Choisissez une option...","images":[],"index":{"40840":{"153":"350"},"40841":{"153":"351"}},"salable":{"153":{"350":["40840"],"351":["40841"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40840":"3701429856137","40841":"3701429856144"},"short_description":{"40840":"Eau de parfum 30 ml","40841":"Eau de parfum 100 ml"},"flags_data":{"40840":{"publication_at":{"label":"Nouveau","icon":""},"is_vegan":{"label":"Vegan","icon":""}},"40841":{"publication_at":{"label":"Nouveau","icon":""},"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40840":"30MLGIRLSECR00W","40841":"100MLGIRLSEC00W"},"adopt_code_erp":{"40840":"30MLGIRLSECR00W X","40841":"100MLGIRLSEC00W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-41024", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-41024", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 41024, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper41024"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--41024-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 41024);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--41024-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--41024-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 41024);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--41024-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_2)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_2)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_2)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="41024" data-price-box="product-id-41024"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="41024" data-price-box="product-id-41024"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="41024" data-price-box="product-id-41024"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89848731d4() {
return {
currentProductData: {
'sku': '8883701429856137',
'name': 'Girl\u0020Secret',
'short_description': "Eau\u0020de\u0020parfum",
'id': '41024',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_perf_girlsecret_30ml_9460428547_1.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429856137',
'product_name': 'girl-secret',
'product_id': '41024',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429856137',
'product_name': 'girl-secret',
'product_quantity': '1',
'product_id': '41024',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-girl-secret-3701429853082-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-girl-secret-3701429853082-fr.html"
class="product-item category-add-to-cart-form-product-_69b89848acbf2 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89848acbf2()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40550.window="openAddCartPanel()"
@update-prices-40550="updatePrice($event.detail, 40550);"
@update-short-description-listing-40550="updateShortDescription($event.detail);"
@update-configurable-url-40550="updateUrl($event.detail);"
@configurable-selection-changed-40550="updateFlagsData($event.detail);"
@update-gallery-40550="updateGallery($event.detail);"
@update-gallery-hover-40550="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40550="showAlertButton($event)"
@stock-alert-modal-close-40550="hideAlertButton($event)"
data-sku="3701429853082">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40550/"
name="category-add-to-cart-form-product-_69b89848acbf2"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89848acbf2">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40550" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40550, {"product_ean":"3701429853082","product_name":"girl-secret","product_id":"40550","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40550">
<template x-if="!isInWishlist(40550)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40550)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_2_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Girl Secret"
title="Girl Secret"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Girl Secret"
class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Girl Secret <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40550' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-girl-secret-3701429853082-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(3)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Milkshake Pistache, Fleurs blanches, Bois de cèdre, Vanille chantilly </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40550' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-girl-secret-3701429853082-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(3)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40550" data-price-box="product-id-40550">
<span class="price-container price-final_price tax weee">
<span id="product-price-40550" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40550" data-price-box="product-id-40550">
<span class="price-container price-final_price tax weee">
<span id="product-price-40550" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89848acbf2() {
return {
currentProductData: {
'sku': '3701429853082',
'name': 'Girl\u0020Secret',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '40550',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_30ml_gd_3701429853129_1_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429853082',
'product_name': 'girl-secret',
'product_id': '40550',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429853082',
'product_name': 'girl-secret',
'product_quantity': '1',
'product_id': '40550',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-girl-secret-rouge-lipstick-lova-lova-wonderful-girl-power-3701429853617-fr.html')"
href="https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-girl-secret-rouge-lipstick-lova-lova-wonderful-girl-power-3701429853617-fr.html"
class="product-item category-add-to-cart-form-product-_69b89848c46da flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89848c46da()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40602.window="openAddCartPanel()"
@update-prices-40602="updatePrice($event.detail, 40602);"
@update-short-description-listing-40602="updateShortDescription($event.detail);"
@update-configurable-url-40602="updateUrl($event.detail);"
@configurable-selection-changed-40602="updateFlagsData($event.detail);"
@update-gallery-40602="updateGallery($event.detail);"
@update-gallery-hover-40602="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40602="showAlertButton($event)"
@stock-alert-modal-close-40602="hideAlertButton($event)"
data-sku="3701429853617">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40602/"
name="category-add-to-cart-form-product-_69b89848c46da"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89848c46da">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40602" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">10,95 €</span> </div>
<div class="publication_at bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Nouveau </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40602, {"product_ean":"3701429853617","product_name":"girl-power","product_id":"40602","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":36.85,"product_unitprice_tf":"30.71","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40602">
<template x-if="!isInWishlist(40602)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40602)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Girl Power"
title="Girl Power"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Girl Power"
class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Girl Power <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret métal 4 eaux de parfum 30 ml - Girl Secret + Rouge Lipstick + Lova Lova + Wonderful</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret métal 4 eaux de parfum 30 ml - Girl Secret </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
</div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">47,80 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40602" data-price-box="product-id-40602">
<span class="price-container price-final_price tax weee">
<span id="product-price-40602" data-price-amount="36.85"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">36,85 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">47,80 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40602" data-price-box="product-id-40602">
<span class="price-container price-final_price tax weee">
<span id="product-price-40602" data-price-amount="36.85"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">36,85 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89848c46da() {
return {
currentProductData: {
'sku': '3701429853617',
'name': 'Girl\u0020Power',
'short_description': "Coffret\u0020m\u00E9tal\u00204\u0020eaux\u0020de\u0020parfum\u002030\u0020ml\u0020\u002D\u0020Girl\u0020Secret\u0020\u002B\u0020Rouge\u0020Lipstick\u0020\u002B\u0020Lova\u0020Lova\u0020\u002B\u0020Wonderful",
'id': '40602',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_girlsecret_feelingbox_3701429851859_1.jpg?twic=v1',
'old_price': '36.850000',
'final_price': '36.85',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">10,95\u00a0\u20ac<\/span>","publication_at":"Nouveau"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429853617',
'product_name': 'girl-power',
'product_id': '40602',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '36.85',
'product_unitprice_tf': '30.71',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429853617',
'product_name': 'girl-power',
'product_quantity': '1',
'product_id': '40602',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '36.85',
'product_unitprice_tf': '30.71',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/wonderful-eau-de-parfum-pailletee-8883701429831608-fr.html')"
href="https://www.adopt.com/fr/wonderful-eau-de-parfum-pailletee-8883701429831608-fr.html"
class="product-item category-add-to-cart-form-product-_69b89848e4d84 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89848e4d84()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-39085.window="openAddCartPanel()"
@update-prices-39085="updatePrice($event.detail, 39085);"
@update-short-description-listing-39085="updateShortDescription($event.detail);"
@update-configurable-url-39085="updateUrl($event.detail);"
@configurable-selection-changed-39085="updateFlagsData($event.detail);"
@update-gallery-39085="updateGallery($event.detail);"
@update-gallery-hover-39085="updateGalleryHover($event.detail)"
@stock-alert-modal-open-39085="showAlertButton($event)"
@stock-alert-modal-close-39085="hideAlertButton($event)"
data-sku="8883701429831608">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZQ~~/product/39085/"
name="category-add-to-cart-form-product-_69b89848e4d84"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89848e4d84">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="39085" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 39085, {"product_ean":"8883701429831608","product_name":"wonderful","product_id":"39085","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="39085">
<template x-if="!isInWishlist(39085)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(39085)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/w/o/wonderful_30_ml_macro_ecom_copie_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Wonderful"
title="Wonderful"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/w/o/wonderful_30ml_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Wonderful"
class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Wonderful <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum pailletée</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum pailletée </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39085' }); window.location.href = 'https://www.adopt.com/fr/wonderful-eau-de-parfum-pailletee-8883701429831608-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(7182)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Pêche blanche, Jasmin, Bois de santal, Noix de coco </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39085' }); window.location.href = 'https://www.adopt.com/fr/wonderful-eau-de-parfum-pailletee-8883701429831608-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(7182)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(39085, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39286"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["38187"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39286":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"38187":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"39085","chooseText":"Choisissez une option...","images":[],"index":{"39286":{"153":"350"},"38187":{"153":"351"}},"salable":{"153":{"350":["39286"],"351":["38187"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"39286":"3701429838829","38187":"3701429831615"},"short_description":{"39286":"EAU DE PARFUM PAILLET\u00c9E 30 ML","38187":"EAU DE PARFUM PAILLET\u00c9E 100 ML"},"flags_data":{"39286":{"is_hot_on_social":{"label":"Hot On Social","icon":""},"paillete":{"label":"Paillet\u00e9","icon":""}},"38187":{"is_hot_on_social":{"label":"Hot On Social","icon":""},"paillete":{"label":"Paillet\u00e9","icon":""}}},"stock_alias":{"39286":"30MLWONDERFU00W,30MLWONDERFU01W,30MLWONDERFU02W,30MLWONDERFUL00","38187":"100MLWONDERF00W,100MLWONDERF01W,100MLWONDERFU00"},"adopt_code_erp":{"39286":"30MLWONDERFU02W X","38187":"100MLWONDERF01W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39286"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["38187"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39286":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"38187":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"39085","chooseText":"Choisissez une option...","images":[],"index":{"39286":{"153":"350"},"38187":{"153":"351"}},"salable":{"153":{"350":["39286"],"351":["38187"]}},"canDisplayShowOutOfStockStatus":true,"channel":"website","salesChannelCode":"base","sku":{"39286":"3701429838829","38187":"3701429831615"},"short_description":{"39286":"EAU DE PARFUM PAILLET\u00c9E 30 ML","38187":"EAU DE PARFUM PAILLET\u00c9E 100 ML"},"flags_data":{"39286":{"is_hot_on_social":{"label":"Hot On Social","icon":""},"paillete":{"label":"Paillet\u00e9","icon":""}},"38187":{"is_hot_on_social":{"label":"Hot On Social","icon":""},"paillete":{"label":"Paillet\u00e9","icon":""}}},"stock_alias":{"39286":"30MLWONDERFU00W,30MLWONDERFU01W,30MLWONDERFU02W,30MLWONDERFUL00","38187":"100MLWONDERF00W,100MLWONDERF01W,100MLWONDERFU00"},"adopt_code_erp":{"39286":"30MLWONDERFU02W X","38187":"100MLWONDERF01W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-39085", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-39085", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 39085, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper39085"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--39085-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 39085);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--39085-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--39085-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 39085);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--39085-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_2)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_2)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_2)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39085" data-price-box="product-id-39085"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39085" data-price-box="product-id-39085"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39085" data-price-box="product-id-39085"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89848e4d84() {
return {
currentProductData: {
'sku': '8883701429831608',
'name': 'Wonderful',
'short_description': "Eau\u0020de\u0020parfum\u0020paillet\u00E9e",
'id': '39085',
'image': 'https://adopt.twic.pics/media/catalog/product/w/o/wonderful_30ml_1_1.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429831608',
'product_name': 'wonderful',
'product_id': '39085',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429831608',
'product_name': 'wonderful',
'product_quantity': '1',
'product_id': '39085',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/wonderful-coffret-30-ml-gel-douche-250-ml-3701429834210-fr.html')"
href="https://www.adopt.com/fr/wonderful-coffret-30-ml-gel-douche-250-ml-3701429834210-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984901630 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984901630()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-38895.window="openAddCartPanel()"
@update-prices-38895="updatePrice($event.detail, 38895);"
@update-short-description-listing-38895="updateShortDescription($event.detail);"
@update-configurable-url-38895="updateUrl($event.detail);"
@configurable-selection-changed-38895="updateFlagsData($event.detail);"
@update-gallery-38895="updateGallery($event.detail);"
@update-gallery-hover-38895="updateGalleryHover($event.detail)"
@stock-alert-modal-open-38895="showAlertButton($event)"
@stock-alert-modal-close-38895="hideAlertButton($event)"
data-sku="3701429834210">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/38895/"
name="category-add-to-cart-form-product-_69b8984901630"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984901630">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="38895" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
<div class="is_bestseller bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
BEST-SELLER </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 38895, {"product_ean":"3701429834210","product_name":"wonderful","product_id":"38895","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="38895">
<template x-if="!isInWishlist(38895)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(38895)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Wonderful"
title="Wonderful"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_WONDERFUL_30ML_GD_3701429834210_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Wonderful <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret 30ml + gel douche 250ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret 30ml + gel douche 250ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '38895' }); window.location.href = 'https://www.adopt.com/fr/wonderful-coffret-30-ml-gel-douche-250-ml-3701429834210-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(769)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Pêche blanche, Jasmin, Bois de santal, Noix de coco </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '38895' }); window.location.href = 'https://www.adopt.com/fr/wonderful-coffret-30-ml-gel-douche-250-ml-3701429834210-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(769)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="38895" data-price-box="product-id-38895">
<span class="price-container price-final_price tax weee">
<span id="product-price-38895" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="38895" data-price-box="product-id-38895">
<span class="price-container price-final_price tax weee">
<span id="product-price-38895" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984901630() {
return {
currentProductData: {
'sku': '3701429834210',
'name': 'Wonderful',
'short_description': "Coffret\u002030ml\u0020\u002B\u0020gel\u0020douche\u0020250ml",
'id': '38895',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_wonderful_30ml_gd_3701429834210_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>","is_bestseller":"BEST-SELLER"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429834210',
'product_name': 'wonderful',
'product_id': '38895',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429834210',
'product_name': 'wonderful',
'product_quantity': '1',
'product_id': '38895',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/eau-de-parfum-lova-lova-8883701429850289-fr.html')"
href="https://www.adopt.com/fr/eau-de-parfum-lova-lova-8883701429850289-fr.html"
class="product-item category-add-to-cart-form-product-_69b89849144f9 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89849144f9()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40949.window="openAddCartPanel()"
@update-prices-40949="updatePrice($event.detail, 40949);"
@update-short-description-listing-40949="updateShortDescription($event.detail);"
@update-configurable-url-40949="updateUrl($event.detail);"
@configurable-selection-changed-40949="updateFlagsData($event.detail);"
@update-gallery-40949="updateGallery($event.detail);"
@update-gallery-hover-40949="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40949="showAlertButton($event)"
@stock-alert-modal-close-40949="hideAlertButton($event)"
data-sku="8883701429850289">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40949/"
name="category-add-to-cart-form-product-_69b89849144f9"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89849144f9">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40949" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40949, {"product_ean":"8883701429850289","product_name":"lova-lova","product_id":"40949","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40949">
<template x-if="!isInWishlist(40949)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40949)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_2_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Lova Lova"
title="Lova Lova"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_PERF_LOVALOVA_30ML_3701429850289_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Lova Lova <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40949' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-lova-lova-8883701429850289-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1473)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Sirop de fraise, Rose , Praline, Bois de Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40949' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-lova-lova-8883701429850289-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1473)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(40949, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40485"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40486"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40485":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40486":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40949","chooseText":"Choisissez une option...","images":[],"index":{"40485":{"153":"350"},"40486":{"153":"351"}},"salable":{"153":{"350":["40485"],"351":["40486"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40485":"3701429850289","40486":"3701429851859"},"short_description":{"40485":"Eau de parfum 30 ml","40486":"Eau de parfum 100 ml"},"flags_data":{"40485":{"is_vegan":{"label":"Vegan","icon":""}},"40486":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40485":"30MLLOVALOVA00W","40486":"100MLLOVALOV00W"},"adopt_code_erp":{"40485":"30MLLOVALOVA00W X","40486":"100MLLOVALOV00W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40485"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40486"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40485":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40486":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40949","chooseText":"Choisissez une option...","images":[],"index":{"40485":{"153":"350"},"40486":{"153":"351"}},"salable":{"153":{"350":["40485"],"351":["40486"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40485":"3701429850289","40486":"3701429851859"},"short_description":{"40485":"Eau de parfum 30 ml","40486":"Eau de parfum 100 ml"},"flags_data":{"40485":{"is_vegan":{"label":"Vegan","icon":""}},"40486":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40485":"30MLLOVALOVA00W","40486":"100MLLOVALOV00W"},"adopt_code_erp":{"40485":"30MLLOVALOVA00W X","40486":"100MLLOVALOV00W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-40949", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-40949", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 40949, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper40949"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40949-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 40949);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40949-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_3" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_3)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_3" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_3)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_3" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_3)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40949-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 40949);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40949-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_4" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_4)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_4" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_4)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_4" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_4)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40949" data-price-box="product-id-40949"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40949" data-price-box="product-id-40949"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40949" data-price-box="product-id-40949"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89849144f9() {
return {
currentProductData: {
'sku': '8883701429850289',
'name': 'Lova\u0020Lova',
'short_description': "Eau\u0020de\u0020parfum",
'id': '40949',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_perf_lovalova_30ml_3701429850289_1_1.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429850289',
'product_name': 'lova-lova',
'product_id': '40949',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429850289',
'product_name': 'lova-lova',
'product_quantity': '1',
'product_id': '40949',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lova-lova-3701429850265-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lova-lova-3701429850265-fr.html"
class="product-item category-add-to-cart-form-product-_69b898493649f flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b898493649f()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40425.window="openAddCartPanel()"
@update-prices-40425="updatePrice($event.detail, 40425);"
@update-short-description-listing-40425="updateShortDescription($event.detail);"
@update-configurable-url-40425="updateUrl($event.detail);"
@configurable-selection-changed-40425="updateFlagsData($event.detail);"
@update-gallery-40425="updateGallery($event.detail);"
@update-gallery-hover-40425="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40425="showAlertButton($event)"
@stock-alert-modal-close-40425="hideAlertButton($event)"
data-sku="3701429850265">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZQ~~/product/40425/"
name="category-add-to-cart-form-product-_69b898493649f"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b898493649f">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40425" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="is_loyalty_offer bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Offre Fidélité </div>
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40425, {"product_ean":"3701429850265","product_name":"lova-lova","product_id":"40425","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40425">
<template x-if="!isInWishlist(40425)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40425)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_2_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Lova Lova"
title="Lova Lova"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_LOVALOVA_30ML_GD_3701429850265_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Lova Lova <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40425' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lova-lova-3701429850265-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(310)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Sirop de fraise, Rose , Praline, Bois de Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40425' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lova-lova-3701429850265-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(310)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40425" data-price-box="product-id-40425">
<span class="price-container price-final_price tax weee">
<span id="product-price-40425" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40425" data-price-box="product-id-40425">
<span class="price-container price-final_price tax weee">
<span id="product-price-40425" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b898493649f() {
return {
currentProductData: {
'sku': '3701429850265',
'name': 'Lova\u0020Lova',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '40425',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_30ml_gd_3701429850265_1_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"is_loyalty_offer":"Offre Fid\u00e9lit\u00e9","bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429850265',
'product_name': 'lova-lova',
'product_id': '40425',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429850265',
'product_name': 'lova-lova',
'product_quantity': '1',
'product_id': '40425',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<div class="pb-5 product-item relative h-full" x-data="initMerchBreakProduct_69b898494815b()" @resize.window="checkMobile()">
<a class="h-full w-full product-merch-group" href="https://www.adopt.com/fr/parfum/parfum-femme/eau-de-parfum-femme.html">
<video
class="hidden md:block h-full w-full object-cover max-h-[550px]"
data-twic-src="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_kv_stickers_desk_fr-en-es-it-nl.gif"
data-twic-transform="quality=95"
data-twic-poster="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_kv_stickers_desk_fr-en-es-it-nl.gif"
data-twic-poster-transform="cover-max=550x1100">
</video>
<video
class="block md:hidden h-full w-full object-cover"
data-twic-src="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_kv_stickers_mob_fr-en-es-it-nl.gif"
data-twic-transform="quality=95"
data-twic-poster="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_kv_stickers_mob_fr-en-es-it-nl.gif"
data-twic-poster-transform="cover-max=500x1000">
</video>
<div class="absolute bottom-4 inset-0 flex items-end justify-center p-4 md:p-6">
<span class="btn btn-primary-white text-center px-5 md:px-7.5">
Je découvre </span>
</div>
</a>
</div>
<script>
function initMerchBreakProduct_69b898494815b() {
return {
isMobile: window.innerWidth < 768,
init() {
this.isMobile = window.innerWidth < 768;
},
checkMobile() {
this.isMobile = window.innerWidth < 768;
}
}
}
</script> </li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30ml-lova-lova-coeur-a-coeur-xxl-sensuality-love-mood-lova-lova-3701429850357-fr.html')"
href="https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30ml-lova-lova-coeur-a-coeur-xxl-sensuality-love-mood-lova-lova-3701429850357-fr.html"
class="product-item category-add-to-cart-form-product-_69b898494c9a0 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b898494c9a0()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40400.window="openAddCartPanel()"
@update-prices-40400="updatePrice($event.detail, 40400);"
@update-short-description-listing-40400="updateShortDescription($event.detail);"
@update-configurable-url-40400="updateUrl($event.detail);"
@configurable-selection-changed-40400="updateFlagsData($event.detail);"
@update-gallery-40400="updateGallery($event.detail);"
@update-gallery-hover-40400="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40400="showAlertButton($event)"
@stock-alert-modal-close-40400="hideAlertButton($event)"
data-sku="3701429850357">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40400/"
name="category-add-to-cart-form-product-_69b898494c9a0"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b898494c9a0">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40400" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="is_loyalty_offer bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Offre Fidélité </div>
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">10,95 €</span> </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40400, {"product_ean":"3701429850357","product_name":"lova-lova","product_id":"40400","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":36.85,"product_unitprice_tf":"30.71","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40400">
<template x-if="!isInWishlist(40400)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40400)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_2_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Lova Lova"
title="Lova Lova"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_LOVALOVA_FEELINGBOX_3701429850357_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Lova Lova <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret métal 4 eaux de parfum 30ml - Lova Lova + Cœur à Cœur + XXL Sensuality + Love Mood</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret métal 4 eaux de parfum 30ml - Lova Lova + </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40400' }); window.location.href = 'https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30ml-lova-lova-coeur-a-coeur-xxl-sensuality-love-mood-lova-lova-3701429850357-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(14)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40400' }); window.location.href = 'https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30ml-lova-lova-coeur-a-coeur-xxl-sensuality-love-mood-lova-lova-3701429850357-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(14)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">47,80 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40400" data-price-box="product-id-40400">
<span class="price-container price-final_price tax weee">
<span id="product-price-40400" data-price-amount="36.85"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">36,85 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">47,80 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40400" data-price-box="product-id-40400">
<span class="price-container price-final_price tax weee">
<span id="product-price-40400" data-price-amount="36.85"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">36,85 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b898494c9a0() {
return {
currentProductData: {
'sku': '3701429850357',
'name': 'Lova\u0020Lova',
'short_description': "Coffret\u0020m\u00E9tal\u00204\u0020eaux\u0020de\u0020parfum\u002030ml\u0020\u002D\u0020Lova\u0020Lova\u0020\u002B\u0020C\u0153ur\u0020\u00E0\u0020C\u0153ur\u0020\u002B\u0020XXL\u0020Sensuality\u0020\u002B\u0020Love\u0020Mood",
'id': '40400',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_lovalova_feelingbox_3701429850357_1_1.jpg?twic=v1',
'old_price': '36.850000',
'final_price': '36.85',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"is_loyalty_offer":"Offre Fid\u00e9lit\u00e9","bundle_real_value":"Economisez <span class=\"price\">10,95\u00a0\u20ac<\/span>"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429850357',
'product_name': 'lova-lova',
'product_id': '40400',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '36.85',
'product_unitprice_tf': '30.71',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429850357',
'product_name': 'lova-lova',
'product_quantity': '1',
'product_id': '40400',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '36.85',
'product_unitprice_tf': '30.71',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/eau-de-parfum-30-ml-rouge-lipstick-3701429842444-fr.html')"
href="https://www.adopt.com/fr/eau-de-parfum-30-ml-rouge-lipstick-3701429842444-fr.html"
class="product-item category-add-to-cart-form-product-_69b898495ef3b flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b898495ef3b()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-39516.window="openAddCartPanel()"
@update-prices-39516="updatePrice($event.detail, 39516);"
@update-short-description-listing-39516="updateShortDescription($event.detail);"
@update-configurable-url-39516="updateUrl($event.detail);"
@configurable-selection-changed-39516="updateFlagsData($event.detail);"
@update-gallery-39516="updateGallery($event.detail);"
@update-gallery-hover-39516="updateGalleryHover($event.detail)"
@stock-alert-modal-open-39516="showAlertButton($event)"
@stock-alert-modal-close-39516="hideAlertButton($event)"
data-sku="3701429842444">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/39516/"
name="category-add-to-cart-form-product-_69b898495ef3b"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b898495ef3b">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="39516" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 39516, {"product_ean":"3701429842444","product_name":"rouge-lipstick","product_id":"39516","product_family":"parfum","product_rayon":"parfum-femme","product_size":"30 ml","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="39516">
<template x-if="!isInWishlist(39516)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(39516)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Rouge lipstick"
title="Rouge lipstick"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Rouge lipstick"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Rouge lipstick <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum 30ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum 30ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39516' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-30-ml-rouge-lipstick-3701429842444-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(599)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Framboise, Violette, Iris, Vanille </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39516' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-30-ml-rouge-lipstick-3701429842444-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(599)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39516" data-price-box="product-id-39516">
<span class="price-container price-final_price tax weee">
<span id="product-price-39516" data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39516" data-price-box="product-id-39516">
<span class="price-container price-final_price tax weee">
<span id="product-price-39516" data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b898495ef3b() {
return {
currentProductData: {
'sku': '3701429842444',
'name': 'Rouge\u0020lipstick',
'short_description': "Eau\u0020de\u0020parfum\u002030ml",
'id': '39516',
'image': 'https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rougelipstick_30ml_3701429802547_1.jpg?twic=v1',
'old_price': '11.950000',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429842444',
'product_name': 'rouge-lipstick',
'product_id': '39516',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '30 ml',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429842444',
'product_name': 'rouge-lipstick',
'product_quantity': '1',
'product_id': '39516',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '30 ml',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-rouge-lipstick-3701429853129-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-rouge-lipstick-3701429853129-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984973768 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984973768()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40552.window="openAddCartPanel()"
@update-prices-40552="updatePrice($event.detail, 40552);"
@update-short-description-listing-40552="updateShortDescription($event.detail);"
@update-configurable-url-40552="updateUrl($event.detail);"
@configurable-selection-changed-40552="updateFlagsData($event.detail);"
@update-gallery-40552="updateGallery($event.detail);"
@update-gallery-hover-40552="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40552="showAlertButton($event)"
@stock-alert-modal-close-40552="hideAlertButton($event)"
data-sku="3701429853129">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40552/"
name="category-add-to-cart-form-product-_69b8984973768"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984973768">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40552" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40552, {"product_ean":"3701429853129","product_name":"rouge-lipstick","product_id":"40552","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40552">
<template x-if="!isInWishlist(40552)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40552)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Rouge Lipstick"
title="Rouge Lipstick"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Rouge Lipstick"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Rouge Lipstick <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40552' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-rouge-lipstick-3701429853129-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(9)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Framboise, Violette, Iris, Vanille </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40552' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-rouge-lipstick-3701429853129-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(9)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40552" data-price-box="product-id-40552">
<span class="price-container price-final_price tax weee">
<span id="product-price-40552" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40552" data-price-box="product-id-40552">
<span class="price-container price-final_price tax weee">
<span id="product-price-40552" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984973768() {
return {
currentProductData: {
'sku': '3701429853129',
'name': 'Rouge\u0020Lipstick',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '40552',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rougelipstick_30ml_gd_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429853129',
'product_name': 'rouge-lipstick',
'product_id': '40552',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429853129',
'product_name': 'rouge-lipstick',
'product_quantity': '1',
'product_id': '40552',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/eau-de-parfum-jolie-paris-8883701429851590-fr.html')"
href="https://www.adopt.com/fr/eau-de-parfum-jolie-paris-8883701429851590-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984986308 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984986308()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40994.window="openAddCartPanel()"
@update-prices-40994="updatePrice($event.detail, 40994);"
@update-short-description-listing-40994="updateShortDescription($event.detail);"
@update-configurable-url-40994="updateUrl($event.detail);"
@configurable-selection-changed-40994="updateFlagsData($event.detail);"
@update-gallery-40994="updateGallery($event.detail);"
@update-gallery-hover-40994="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40994="showAlertButton($event)"
@stock-alert-modal-close-40994="hideAlertButton($event)"
data-sku="8883701429851590">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40994/"
name="category-add-to-cart-form-product-_69b8984986308"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984986308">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40994" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40994, {"product_ean":"8883701429851590","product_name":"jolie-paris","product_id":"40994","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40994">
<template x-if="!isInWishlist(40994)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40994)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Jolie Paris"
title="Jolie Paris"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_PERF_JOLIEPARIS_30ML_3701429851590_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Jolie Paris <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40994' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-jolie-paris-8883701429851590-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1595)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Pêche blanche, Accord Floral, Bois précieux, Vanille </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40994' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-jolie-paris-8883701429851590-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1595)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(40994, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40724"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40725"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40724":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40725":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40994","chooseText":"Choisissez une option...","images":[],"index":{"40724":{"153":"350"},"40725":{"153":"351"}},"salable":{"153":{"350":["40724"],"351":["40725"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40724":"3701429851590","40725":"3701429852733"},"short_description":{"40724":"Eau de parfum 30 ml","40725":"Eau de parfum 100 ml"},"flags_data":{"40724":{"is_vegan":{"label":"Vegan","icon":""}},"40725":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40724":"30MLJOLIEPAR00W","40725":"100MLJOLIEPA00W"},"adopt_code_erp":{"40724":"30MLJOLIEPAR00W X","40725":"100MLJOLIEPA00W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40724"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40725"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40724":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40725":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40994","chooseText":"Choisissez une option...","images":[],"index":{"40724":{"153":"350"},"40725":{"153":"351"}},"salable":{"153":{"350":["40724"],"351":["40725"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40724":"3701429851590","40725":"3701429852733"},"short_description":{"40724":"Eau de parfum 30 ml","40725":"Eau de parfum 100 ml"},"flags_data":{"40724":{"is_vegan":{"label":"Vegan","icon":""}},"40725":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40724":"30MLJOLIEPAR00W","40725":"100MLJOLIEPA00W"},"adopt_code_erp":{"40724":"30MLJOLIEPAR00W X","40725":"100MLJOLIEPA00W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-40994", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-40994", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 40994, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper40994"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40994-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 40994);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40994-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_5" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_5)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_5" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_5)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_5" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_5)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40994-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 40994);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40994-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_6" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_6)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_6" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_6)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_6" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_6)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40994" data-price-box="product-id-40994"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40994" data-price-box="product-id-40994"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40994" data-price-box="product-id-40994"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984986308() {
return {
currentProductData: {
'sku': '8883701429851590',
'name': 'Jolie\u0020Paris',
'short_description': "Eau\u0020de\u0020parfum",
'id': '40994',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_perf_jolieparis_30ml_3701429851590_1.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429851590',
'product_name': 'jolie-paris',
'product_id': '40994',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429851590',
'product_name': 'jolie-paris',
'product_quantity': '1',
'product_id': '40994',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<div class="pb-5 product-item relative h-full" x-data="initMerchBreakProduct_69b89849a6a58()" @resize.window="checkMobile()">
<a class="h-full w-full product-merch-group" href="https://www.adopt.com/fr/parfum/composez-votre-pack.html">
<video
class="hidden md:block h-full w-full object-cover max-h-[550px]"
data-twic-src="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_offre_par4_desk_fr-ca.gif"
data-twic-transform="quality=95"
data-twic-poster="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_offre_par4_desk_fr-ca.gif"
data-twic-poster-transform="cover-max=550x1100">
</video>
<video
class="block md:hidden h-full w-full object-cover"
data-twic-src="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_offre_par4_mob_fr-ca.gif"
data-twic-transform="quality=95"
data-twic-poster="media:video/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_offre_par4_mob_fr-ca.gif"
data-twic-poster-transform="cover-max=500x1000">
</video>
</a>
</div>
<script>
function initMerchBreakProduct_69b89849a6a58() {
return {
isMobile: window.innerWidth < 768,
init() {
this.isMobile = window.innerWidth < 768;
},
checkMobile() {
this.isMobile = window.innerWidth < 768;
}
}
}
</script> </li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-jolie-paris-3701429851576-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-jolie-paris-3701429851576-fr.html"
class="product-item category-add-to-cart-form-product-_69b89849ac3ff flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89849ac3ff()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40544.window="openAddCartPanel()"
@update-prices-40544="updatePrice($event.detail, 40544);"
@update-short-description-listing-40544="updateShortDescription($event.detail);"
@update-configurable-url-40544="updateUrl($event.detail);"
@configurable-selection-changed-40544="updateFlagsData($event.detail);"
@update-gallery-40544="updateGallery($event.detail);"
@update-gallery-hover-40544="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40544="showAlertButton($event)"
@stock-alert-modal-close-40544="hideAlertButton($event)"
data-sku="3701429851576">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40544/"
name="category-add-to-cart-form-product-_69b89849ac3ff"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89849ac3ff">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40544" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40544, {"product_ean":"3701429851576","product_name":"jolie-paris","product_id":"40544","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40544">
<template x-if="!isInWishlist(40544)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40544)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Jolie Paris"
title="Jolie Paris"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_JOLIEPARIS_30ML-GD_3701429851576_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Jolie Paris <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40544' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-jolie-paris-3701429851576-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(181)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Pêche blanche, Accord Floral, Bois précieux, Vanille </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40544' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-jolie-paris-3701429851576-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(181)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40544" data-price-box="product-id-40544">
<span class="price-container price-final_price tax weee">
<span id="product-price-40544" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40544" data-price-box="product-id-40544">
<span class="price-container price-final_price tax weee">
<span id="product-price-40544" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89849ac3ff() {
return {
currentProductData: {
'sku': '3701429851576',
'name': 'Jolie\u0020Paris',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '40544',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_30ml-gd_3701429851576_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429851576',
'product_name': 'jolie-paris',
'product_id': '40544',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429851576',
'product_name': 'jolie-paris',
'product_quantity': '1',
'product_id': '40544',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-jolie-paris-3701429851682-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-jolie-paris-3701429851682-fr.html"
class="product-item category-add-to-cart-form-product-_69b89849bd8f5 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89849bd8f5()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40547.window="openAddCartPanel()"
@update-prices-40547="updatePrice($event.detail, 40547);"
@update-short-description-listing-40547="updateShortDescription($event.detail);"
@update-configurable-url-40547="updateUrl($event.detail);"
@configurable-selection-changed-40547="updateFlagsData($event.detail);"
@update-gallery-40547="updateGallery($event.detail);"
@update-gallery-hover-40547="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40547="showAlertButton($event)"
@stock-alert-modal-close-40547="hideAlertButton($event)"
data-sku="3701429851682">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40547/"
name="category-add-to-cart-form-product-_69b89849bd8f5"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89849bd8f5">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40547" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">2,90 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40547, {"product_ean":"3701429851682","product_name":"jolie-paris","product_id":"40547","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":22.95,"product_unitprice_tf":"19.13","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40547">
<template x-if="!isInWishlist(40547)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40547)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Jolie Paris"
title="Jolie Paris"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_JOLIEPARIS_CHALET_3701429851682_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Jolie Paris <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml + lait corps 200 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml + </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40547' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-jolie-paris-3701429851682-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(92)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Pêche blanche, Accord Floral, Bois précieux, Vanille </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40547' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-jolie-paris-3701429851682-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(92)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">25,85 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40547" data-price-box="product-id-40547">
<span class="price-container price-final_price tax weee">
<span id="product-price-40547" data-price-amount="22.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">22,95 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">25,85 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40547" data-price-box="product-id-40547">
<span class="price-container price-final_price tax weee">
<span id="product-price-40547" data-price-amount="22.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">22,95 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89849bd8f5() {
return {
currentProductData: {
'sku': '3701429851682',
'name': 'Jolie\u0020Paris',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml\u0020\u002B\u0020lait\u0020corps\u0020200\u0020ml",
'id': '40547',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_jolieparis_chalet_3701429851682_1.jpg?twic=v1',
'old_price': '22.950000',
'final_price': '22.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">2,90\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429851682',
'product_name': 'jolie-paris',
'product_id': '40547',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '22.95',
'product_unitprice_tf': '19.13',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429851682',
'product_name': 'jolie-paris',
'product_quantity': '1',
'product_id': '40547',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '22.95',
'product_unitprice_tf': '19.13',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-jolie-paris-rendez-vous-gourmand-nuit-parisienne-avenue-des-fleurs-un-air-de-paris-3701429851781-fr.html')"
href="https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-jolie-paris-rendez-vous-gourmand-nuit-parisienne-avenue-des-fleurs-un-air-de-paris-3701429851781-fr.html"
class="product-item category-add-to-cart-form-product-_69b89849d008b flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89849d008b()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40600.window="openAddCartPanel()"
@update-prices-40600="updatePrice($event.detail, 40600);"
@update-short-description-listing-40600="updateShortDescription($event.detail);"
@update-configurable-url-40600="updateUrl($event.detail);"
@configurable-selection-changed-40600="updateFlagsData($event.detail);"
@update-gallery-40600="updateGallery($event.detail);"
@update-gallery-hover-40600="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40600="showAlertButton($event)"
@stock-alert-modal-close-40600="hideAlertButton($event)"
data-sku="3701429851781">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40600/"
name="category-add-to-cart-form-product-_69b89849d008b"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89849d008b">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40600" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">10,95 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40600, {"product_ean":"3701429851781","product_name":"un-air-de-paris","product_id":"40600","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":36.85,"product_unitprice_tf":"30.71","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40600">
<template x-if="!isInWishlist(40600)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40600)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_2_1_.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Un air de Paris"
title="Un air de Paris"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_UNAIRDEPARIS_FEELINGBOX_3701429851781_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Un air de Paris <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret métal 4 eaux de parfum 30ml - Jolie Paris + Rendez-vous Gourmand + Nuit Parisienne + Avenue des Fleurs</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret métal 4 eaux de parfum 30ml - Jolie Paris </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40600' }); window.location.href = 'https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-jolie-paris-rendez-vous-gourmand-nuit-parisienne-avenue-des-fleurs-un-air-de-paris-3701429851781-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(3)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40600' }); window.location.href = 'https://www.adopt.com/fr/coffret-metal-4-eaux-de-parfum-30-ml-jolie-paris-rendez-vous-gourmand-nuit-parisienne-avenue-des-fleurs-un-air-de-paris-3701429851781-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(3)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">47,80 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40600" data-price-box="product-id-40600">
<span class="price-container price-final_price tax weee">
<span id="product-price-40600" data-price-amount="36.85"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">36,85 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">47,80 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40600" data-price-box="product-id-40600">
<span class="price-container price-final_price tax weee">
<span id="product-price-40600" data-price-amount="36.85"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">36,85 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89849d008b() {
return {
currentProductData: {
'sku': '3701429851781',
'name': 'Un\u0020air\u0020de\u0020Paris',
'short_description': "Coffret\u0020m\u00E9tal\u00204\u0020eaux\u0020de\u0020parfum\u002030ml\u0020\u002D\u0020Jolie\u0020Paris\u0020\u002B\u0020Rendez\u002Dvous\u0020Gourmand\u0020\u002B\u0020Nuit\u0020Parisienne\u0020\u002B\u0020Avenue\u0020des\u0020Fleurs",
'id': '40600',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_unairdeparis_feelingbox_3701429851781_1.jpg?twic=v1',
'old_price': '36.850000',
'final_price': '36.85',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">10,95\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429851781',
'product_name': 'un-air-de-paris',
'product_id': '40600',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '36.85',
'product_unitprice_tf': '30.71',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429851781',
'product_name': 'un-air-de-paris',
'product_quantity': '1',
'product_id': '40600',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '36.85',
'product_unitprice_tf': '30.71',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/eau-de-parfum-rendez-vous-gourmand-8883701429839826-fr.html')"
href="https://www.adopt.com/fr/eau-de-parfum-rendez-vous-gourmand-8883701429839826-fr.html"
class="product-item category-add-to-cart-form-product-_69b89849e1823 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b89849e1823()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40995.window="openAddCartPanel()"
@update-prices-40995="updatePrice($event.detail, 40995);"
@update-short-description-listing-40995="updateShortDescription($event.detail);"
@update-configurable-url-40995="updateUrl($event.detail);"
@configurable-selection-changed-40995="updateFlagsData($event.detail);"
@update-gallery-40995="updateGallery($event.detail);"
@update-gallery-hover-40995="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40995="showAlertButton($event)"
@stock-alert-modal-close-40995="hideAlertButton($event)"
data-sku="8883701429839826">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40995/"
name="category-add-to-cart-form-product-_69b89849e1823"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b89849e1823">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40995" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40995, {"product_ean":"8883701429839826","product_name":"rendez-vous-gourmand","product_id":"40995","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40995">
<template x-if="!isInWishlist(40995)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40995)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_2_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Rendez-vous Gourmand"
title="Rendez-vous Gourmand"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Rendez-vous Gourmand"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Rendez-vous Gourmand <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40995' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-rendez-vous-gourmand-8883701429839826-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1990)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Litchi, Rose, Vanille, Accord macaron </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40995' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-rendez-vous-gourmand-8883701429839826-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1990)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(40995, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39471"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40673"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39471":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40673":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40995","chooseText":"Choisissez une option...","images":[],"index":{"39471":{"153":"350"},"40673":{"153":"351"}},"salable":{"153":{"350":["39471"],"351":["40673"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"39471":"3701429839826","40673":"3701429852740"},"short_description":{"39471":"Eau de parfum 30 ml","40673":"Eau de parfum 100 ml"},"flags_data":{"39471":{"is_vegan":{"label":"Vegan","icon":""}},"40673":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"39471":"30MLRDVGOURM00W,30MLRDVGOURM01W,30MLRDVGOURM02W","40673":"100MLRENDEZV00W"},"adopt_code_erp":{"39471":"30MLRDVGOURM02W X","40673":"100MLRENDEZV00W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39471"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40673"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39471":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40673":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40995","chooseText":"Choisissez une option...","images":[],"index":{"39471":{"153":"350"},"40673":{"153":"351"}},"salable":{"153":{"350":["39471"],"351":["40673"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"39471":"3701429839826","40673":"3701429852740"},"short_description":{"39471":"Eau de parfum 30 ml","40673":"Eau de parfum 100 ml"},"flags_data":{"39471":{"is_vegan":{"label":"Vegan","icon":""}},"40673":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"39471":"30MLRDVGOURM00W,30MLRDVGOURM01W,30MLRDVGOURM02W","40673":"100MLRENDEZV00W"},"adopt_code_erp":{"39471":"30MLRDVGOURM02W X","40673":"100MLRENDEZV00W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-40995", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-40995", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 40995, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper40995"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40995-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 40995);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40995-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_7" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_7)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_7" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_7)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_7" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_7)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40995-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 40995);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40995-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_8" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_8)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_8" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_8)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_8" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_8)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40995" data-price-box="product-id-40995"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40995" data-price-box="product-id-40995"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40995" data-price-box="product-id-40995"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b89849e1823() {
return {
currentProductData: {
'sku': '8883701429839826',
'name': 'Rendez\u002Dvous\u0020Gourmand',
'short_description': "Eau\u0020de\u0020parfum",
'id': '40995',
'image': 'https://adopt.twic.pics/media/catalog/product/l/i/life_perf_rendezvousgourmand_30ml_3701429819309_1_2.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429839826',
'product_name': 'rendez-vous-gourmand',
'product_id': '40995',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429839826',
'product_name': 'rendez-vous-gourmand',
'product_quantity': '1',
'product_id': '40995',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-rendez-vous-gourmand-3701429851736-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-rendez-vous-gourmand-3701429851736-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984a15580 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984a15580()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40548.window="openAddCartPanel()"
@update-prices-40548="updatePrice($event.detail, 40548);"
@update-short-description-listing-40548="updateShortDescription($event.detail);"
@update-configurable-url-40548="updateUrl($event.detail);"
@configurable-selection-changed-40548="updateFlagsData($event.detail);"
@update-gallery-40548="updateGallery($event.detail);"
@update-gallery-hover-40548="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40548="showAlertButton($event)"
@stock-alert-modal-close-40548="hideAlertButton($event)"
data-sku="3701429851736">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmU~/product/40548/"
name="category-add-to-cart-form-product-_69b8984a15580"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984a15580">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40548" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">2,90 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40548, {"product_ean":"3701429851736","product_name":"rendez-vous-gourmand","product_id":"40548","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":22.95,"product_unitprice_tf":"19.13","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40548">
<template x-if="!isInWishlist(40548)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40548)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Rendez-vous Gourmand"
title="Rendez-vous Gourmand"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Rendez-vous Gourmand"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Rendez-vous Gourmand <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml + lait corps 200 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml + </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40548' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-rendez-vous-gourmand-3701429851736-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(42)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Litchi, Rose, Vanille, Accord macaron </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40548' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-lait-corps-200-ml-rendez-vous-gourmand-3701429851736-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(42)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">25,85 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40548" data-price-box="product-id-40548">
<span class="price-container price-final_price tax weee">
<span id="product-price-40548" data-price-amount="22.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">22,95 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">25,85 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40548" data-price-box="product-id-40548">
<span class="price-container price-final_price tax weee">
<span id="product-price-40548" data-price-amount="22.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">22,95 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984a15580() {
return {
currentProductData: {
'sku': '3701429851736',
'name': 'Rendez\u002Dvous\u0020Gourmand',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml\u0020\u002B\u0020lait\u0020corps\u0020200\u0020ml",
'id': '40548',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_rendezvousgourmand_chalet_3701429851736_1.jpg?twic=v1',
'old_price': '22.950000',
'final_price': '22.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">2,90\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429851736',
'product_name': 'rendez-vous-gourmand',
'product_id': '40548',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '22.95',
'product_unitprice_tf': '19.13',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429851736',
'product_name': 'rendez-vous-gourmand',
'product_quantity': '1',
'product_id': '40548',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '22.95',
'product_unitprice_tf': '19.13',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/nuit-parisienne-eau-de-parfum-9993701429833573-fr.html')"
href="https://www.adopt.com/fr/nuit-parisienne-eau-de-parfum-9993701429833573-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984a20c87 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984a20c87()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-39244.window="openAddCartPanel()"
@update-prices-39244="updatePrice($event.detail, 39244);"
@update-short-description-listing-39244="updateShortDescription($event.detail);"
@update-configurable-url-39244="updateUrl($event.detail);"
@configurable-selection-changed-39244="updateFlagsData($event.detail);"
@update-gallery-39244="updateGallery($event.detail);"
@update-gallery-hover-39244="updateGalleryHover($event.detail)"
@stock-alert-modal-open-39244="showAlertButton($event)"
@stock-alert-modal-close-39244="hideAlertButton($event)"
data-sku="9993701429833572">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/39244/"
name="category-add-to-cart-form-product-_69b8984a20c87"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984a20c87">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="39244" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 39244, {"product_ean":"9993701429833572","product_name":"nuit-parisienne","product_id":"39244","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="39244">
<template x-if="!isInWishlist(39244)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(39244)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_2_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Nuit Parisienne"
title="Nuit Parisienne"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Nuit Parisienne"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Nuit Parisienne <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39244' }); window.location.href = 'https://www.adopt.com/fr/nuit-parisienne-eau-de-parfum-9993701429833573-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(4642)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Fleurs blanches, Vanille poudrée, Bois de cachemire, Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39244' }); window.location.href = 'https://www.adopt.com/fr/nuit-parisienne-eau-de-parfum-9993701429833573-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(4642)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(39244, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39457"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["38774"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39457":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"38774":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"39244","chooseText":"Choisissez une option...","images":[],"index":{"39457":{"153":"350"},"38774":{"153":"351"}},"salable":{"153":{"350":["39457"],"351":["38774"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"39457":"3701429839819","38774":"3701429833589"},"short_description":{"39457":"Eau de parfum 30 ml","38774":"Eau de parfum 100 ml"},"flags_data":{"39457":{"is_vegan":{"label":"Vegan","icon":""}},"38774":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"39457":"30MLNUITPARI00W,30MLNUITPARI01W","38774":"100MLNUITPAR00W"},"adopt_code_erp":{"39457":"30MLNUITPARI01W X","38774":"100MLNUITPAR00W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39457"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["38774"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39457":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"38774":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"39244","chooseText":"Choisissez une option...","images":[],"index":{"39457":{"153":"350"},"38774":{"153":"351"}},"salable":{"153":{"350":["39457"],"351":["38774"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"39457":"3701429839819","38774":"3701429833589"},"short_description":{"39457":"Eau de parfum 30 ml","38774":"Eau de parfum 100 ml"},"flags_data":{"39457":{"is_vegan":{"label":"Vegan","icon":""}},"38774":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"39457":"30MLNUITPARI00W,30MLNUITPARI01W","38774":"100MLNUITPAR00W"},"adopt_code_erp":{"39457":"30MLNUITPARI01W X","38774":"100MLNUITPAR00W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-39244", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-39244", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 39244, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper39244"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--39244-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 39244);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--39244-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_9" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_9)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_9" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_9)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_9" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_9)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--39244-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 39244);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--39244-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_10" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_10)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_10" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_10)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_10" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_10)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39244" data-price-box="product-id-39244"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39244" data-price-box="product-id-39244"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39244" data-price-box="product-id-39244"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984a20c87() {
return {
currentProductData: {
'sku': '9993701429833572',
'name': 'Nuit\u0020Parisienne',
'short_description': "Eau\u0020de\u0020parfum",
'id': '39244',
'image': 'https://adopt.twic.pics/media/catalog/product/l/i/life_perf_nuitparisienne_30ml_3701429819309_1_2.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '9993701429833572',
'product_name': 'nuit-parisienne',
'product_id': '39244',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '9993701429833572',
'product_name': 'nuit-parisienne',
'product_quantity': '1',
'product_id': '39244',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-nuit-parisienne-3701429851613-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-nuit-parisienne-3701429851613-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984a4664b flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984a4664b()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40545.window="openAddCartPanel()"
@update-prices-40545="updatePrice($event.detail, 40545);"
@update-short-description-listing-40545="updateShortDescription($event.detail);"
@update-configurable-url-40545="updateUrl($event.detail);"
@configurable-selection-changed-40545="updateFlagsData($event.detail);"
@update-gallery-40545="updateGallery($event.detail);"
@update-gallery-hover-40545="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40545="showAlertButton($event)"
@stock-alert-modal-close-40545="hideAlertButton($event)"
data-sku="3701429851613">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmU~/product/40545/"
name="category-add-to-cart-form-product-_69b8984a4664b"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984a4664b">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40545" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40545, {"product_ean":"3701429851613","product_name":"nuit-parisienne","product_id":"40545","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40545">
<template x-if="!isInWishlist(40545)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40545)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Nuit Parisienne"
title="Nuit Parisienne"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_NUITPARISIENNE_30ML_GD_3701429851613_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Nuit Parisienne <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40545' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-nuit-parisienne-3701429851613-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(74)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Fleurs blanches, Vanille poudrée, Bois de cachemire, Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40545' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-nuit-parisienne-3701429851613-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(74)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40545" data-price-box="product-id-40545">
<span class="price-container price-final_price tax weee">
<span id="product-price-40545" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40545" data-price-box="product-id-40545">
<span class="price-container price-final_price tax weee">
<span id="product-price-40545" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984a4664b() {
return {
currentProductData: {
'sku': '3701429851613',
'name': 'Nuit\u0020Parisienne',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '40545',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_gd_3701429851613_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429851613',
'product_name': 'nuit-parisienne',
'product_id': '40545',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429851613',
'product_name': 'nuit-parisienne',
'product_quantity': '1',
'product_id': '40545',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/nuit-parisienne-coffret-eaux-de-parfums-30-ml-et-100-ml-3701429847470-fr.html')"
href="https://www.adopt.com/fr/nuit-parisienne-coffret-eaux-de-parfums-30-ml-et-100-ml-3701429847470-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984a53c55 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984a53c55()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40208.window="openAddCartPanel()"
@update-prices-40208="updatePrice($event.detail, 40208);"
@update-short-description-listing-40208="updateShortDescription($event.detail);"
@update-configurable-url-40208="updateUrl($event.detail);"
@configurable-selection-changed-40208="updateFlagsData($event.detail);"
@update-gallery-40208="updateGallery($event.detail);"
@update-gallery-hover-40208="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40208="showAlertButton($event)"
@stock-alert-modal-close-40208="hideAlertButton($event)"
data-sku="3701429847470">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40208/"
name="category-add-to-cart-form-product-_69b8984a53c55"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984a53c55">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40208" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">3,95 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40208, {"product_ean":"3701429847470","product_name":"nuit-parisienne","product_id":"40208","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":37.95,"product_unitprice_tf":"31.63","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40208">
<template x-if="!isInWishlist(40208)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40208)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_2.png"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Nuit Parisienne"
title="Nuit Parisienne"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_NUITPARISIENNE_30ML_100ML_3701429847470_1.png"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Nuit Parisienne <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eaux de parfums 30 ml et 100 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eaux de parfums 30 ml et 100 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40208' }); window.location.href = 'https://www.adopt.com/fr/nuit-parisienne-coffret-eaux-de-parfums-30-ml-et-100-ml-3701429847470-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(155)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Fleurs blanches, Vanille poudrée, Bois de cachemire, Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40208' }); window.location.href = 'https://www.adopt.com/fr/nuit-parisienne-coffret-eaux-de-parfums-30-ml-et-100-ml-3701429847470-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(155)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">41,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40208" data-price-box="product-id-40208">
<span class="price-container price-final_price tax weee">
<span id="product-price-40208" data-price-amount="37.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">37,95 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">41,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40208" data-price-box="product-id-40208">
<span class="price-container price-final_price tax weee">
<span id="product-price-40208" data-price-amount="37.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">37,95 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984a53c55() {
return {
currentProductData: {
'sku': '3701429847470',
'name': 'Nuit\u0020Parisienne',
'short_description': "Coffret\u0020eaux\u0020de\u0020parfums\u002030\u0020ml\u0020et\u0020100\u0020ml",
'id': '40208',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_nuitparisienne_30ml_100ml_3701429847470_1.png?twic=v1',
'old_price': '37.950000',
'final_price': '37.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">3,95\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429847470',
'product_name': 'nuit-parisienne',
'product_id': '40208',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '37.95',
'product_unitprice_tf': '31.63',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429847470',
'product_name': 'nuit-parisienne',
'product_quantity': '1',
'product_id': '40208',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '37.95',
'product_unitprice_tf': '31.63',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/avenue-des-fleurs-eau-de-parfum-30-ml-3701429839703-fr.html')"
href="https://www.adopt.com/fr/avenue-des-fleurs-eau-de-parfum-30-ml-3701429839703-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984a65241 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984a65241()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-39454.window="openAddCartPanel()"
@update-prices-39454="updatePrice($event.detail, 39454);"
@update-short-description-listing-39454="updateShortDescription($event.detail);"
@update-configurable-url-39454="updateUrl($event.detail);"
@configurable-selection-changed-39454="updateFlagsData($event.detail);"
@update-gallery-39454="updateGallery($event.detail);"
@update-gallery-hover-39454="updateGalleryHover($event.detail)"
@stock-alert-modal-open-39454="showAlertButton($event)"
@stock-alert-modal-close-39454="hideAlertButton($event)"
data-sku="3701429839703">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/39454/"
name="category-add-to-cart-form-product-_69b8984a65241"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984a65241">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="39454" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="publication_at bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Nouveau </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 39454, {"product_ean":"3701429839703","product_name":"avenue-des-fleurs","product_id":"39454","product_family":"parfum","product_rayon":"parfum-femme","product_size":"30 ml","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="39454">
<template x-if="!isInWishlist(39454)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(39454)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_2_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Avenue des Fleurs"
title="Avenue des Fleurs"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Avenue des Fleurs"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Avenue des Fleurs <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum 30 ml </span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum 30 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39454' }); window.location.href = 'https://www.adopt.com/fr/avenue-des-fleurs-eau-de-parfum-30-ml-3701429839703-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(2655)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Framboise, Pivoine blanche, Rose, Muscs blancs </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39454' }); window.location.href = 'https://www.adopt.com/fr/avenue-des-fleurs-eau-de-parfum-30-ml-3701429839703-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(2655)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39454" data-price-box="product-id-39454">
<span class="price-container price-final_price tax weee">
<span id="product-price-39454" data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39454" data-price-box="product-id-39454">
<span class="price-container price-final_price tax weee">
<span id="product-price-39454" data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984a65241() {
return {
currentProductData: {
'sku': '3701429839703',
'name': 'Avenue\u0020des\u0020Fleurs',
'short_description': "Eau\u0020de\u0020parfum\u002030\u0020ml\u0020",
'id': '39454',
'image': 'https://adopt.twic.pics/media/catalog/product/l/i/life_perf_avenuedesfleurs_30ml_3701429833565_1_1.jpg?twic=v1',
'old_price': '11.950000',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"publication_at":"Nouveau"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429839703',
'product_name': 'avenue-des-fleurs',
'product_id': '39454',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '30 ml',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429839703',
'product_name': 'avenue-des-fleurs',
'product_quantity': '1',
'product_id': '39454',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'eau-de-parfum',
'product_size': '30 ml',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/eau-de-parfum-very-frenchy-8883701429851668-fr.html')"
href="https://www.adopt.com/fr/eau-de-parfum-very-frenchy-8883701429851668-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984a7ba3b flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984a7ba3b()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40996.window="openAddCartPanel()"
@update-prices-40996="updatePrice($event.detail, 40996);"
@update-short-description-listing-40996="updateShortDescription($event.detail);"
@update-configurable-url-40996="updateUrl($event.detail);"
@configurable-selection-changed-40996="updateFlagsData($event.detail);"
@update-gallery-40996="updateGallery($event.detail);"
@update-gallery-hover-40996="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40996="showAlertButton($event)"
@stock-alert-modal-close-40996="hideAlertButton($event)"
data-sku="8883701429851668">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmU~/product/40996/"
name="category-add-to-cart-form-product-_69b8984a7ba3b"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984a7ba3b">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40996" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40996, {"product_ean":"8883701429851668","product_name":"very-frenchy","product_id":"40996","product_family":"parfum","product_rayon":"parfum-homme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40996">
<template x-if="!isInWishlist(40996)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40996)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Very Frenchy"
title="Very Frenchy"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_PERF_VERYFRENCHY_30ML_3701429851668_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Very Frenchy <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40996' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-very-frenchy-8883701429851668-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(147)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Carambole, Basilic, Lavandin, Mousse de chêne </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40996' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-very-frenchy-8883701429851668-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(147)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(40996, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40666"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40674"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40666":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40674":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40996","chooseText":"Choisissez une option...","images":[],"index":{"40666":{"153":"350"},"40674":{"153":"351"}},"salable":{"153":{"350":["40666"],"351":["40674"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40666":"3701429851668","40674":"3701429852757"},"short_description":{"40666":"Eau de parfum 30 ml","40674":"Eau de parfum 100 ml"},"flags_data":{"40666":{"is_vegan":{"label":"Vegan","icon":""}},"40674":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40666":"30MLSEXYFREN00W,30MLSEXYFREN01W,30MLVERYFREN00W","40674":"100MLSEXYFRE00W,100MLSEXYFRE01W,100MLVERYFRE00W"},"adopt_code_erp":{"40666":"30MLVERYFREN00W X","40674":"100MLVERYFRE00W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40666"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40674"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40666":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40674":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40996","chooseText":"Choisissez une option...","images":[],"index":{"40666":{"153":"350"},"40674":{"153":"351"}},"salable":{"153":{"350":["40666"],"351":["40674"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40666":"3701429851668","40674":"3701429852757"},"short_description":{"40666":"Eau de parfum 30 ml","40674":"Eau de parfum 100 ml"},"flags_data":{"40666":{"is_vegan":{"label":"Vegan","icon":""}},"40674":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40666":"30MLSEXYFREN00W,30MLSEXYFREN01W,30MLVERYFREN00W","40674":"100MLSEXYFRE00W,100MLSEXYFRE01W,100MLVERYFRE00W"},"adopt_code_erp":{"40666":"30MLVERYFREN00W X","40674":"100MLVERYFRE00W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-40996", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-40996", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 40996, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper40996"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40996-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 40996);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40996-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40996-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 40996);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40996-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_2)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_2)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_2" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_2)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40996" data-price-box="product-id-40996"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40996" data-price-box="product-id-40996"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40996" data-price-box="product-id-40996"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984a7ba3b() {
return {
currentProductData: {
'sku': '8883701429851668',
'name': 'Very\u0020Frenchy',
'short_description': "Eau\u0020de\u0020parfum",
'id': '40996',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_perf_veryfrenchy_30ml_3701429851668_1.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429851668',
'product_name': 'very-frenchy',
'product_id': '40996',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429851668',
'product_name': 'very-frenchy',
'product_quantity': '1',
'product_id': '40996',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<div class="pb-5 product-item relative h-full" x-data="initMerchBreakProduct_69b8984aa5fe1()" @resize.window="checkMobile()">
<a class="h-full w-full product-merch-group" href="https://www.adopt.com/fr/jeu">
<picture class="block h-full w-full">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_jeu_girl_secret_rupturemerch_desk_fr_be.jpeg?twic=v1/cover-max=425.1 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_jeu_girl_secret_rupturemerch_desk_fr_be.jpeg?twic=v1/cover-max=486.2 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_jeu_girl_secret_rupturemerch_desk_fr_be.jpeg?twic=v1/cover-max=390 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm-jeu-gril-secret_rupturemerch-mob-fr_be.jpeg?twic=v1/cover-max=319.8 1x" media="(max-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm-jeu-gril-secret_rupturemerch-mob-fr_be.jpeg?twic=v1/cover-max=371.8 1x" media="(max-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm-jeu-gril-secret_rupturemerch-mob-fr_be.jpeg?twic=v1/cover-max=293.8 1x" media="(max-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm-jeu-gril-secret_rupturemerch-mob-fr_be.jpeg?twic=v1/cover-max=226.2 1x" media="(max-width: 320px)" class="" > <img class="h-full w-full object-cover"
loading="lazy" src="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_jeu_girl_secret_rupturemerch_desk_fr_be.jpeg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/e/c/ecomm_jeu_girl_secret_rupturemerch_desk_fr_be.jpeg"
alt="" />
</picture>
<div class="absolute bottom-4 inset-0 flex items-end justify-center p-4 md:p-6">
<span class="btn btn-primary-white text-center px-5 md:px-7.5">
Je joue </span>
</div>
</a>
</div>
<script>
function initMerchBreakProduct_69b8984aa5fe1() {
return {
isMobile: window.innerWidth < 768,
init() {
this.isMobile = window.innerWidth < 768;
},
checkMobile() {
this.isMobile = window.innerWidth < 768;
}
}
}
</script> </li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-very-frenchy-3701429851644-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-very-frenchy-3701429851644-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984aaa011 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984aaa011()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40546.window="openAddCartPanel()"
@update-prices-40546="updatePrice($event.detail, 40546);"
@update-short-description-listing-40546="updateShortDescription($event.detail);"
@update-configurable-url-40546="updateUrl($event.detail);"
@configurable-selection-changed-40546="updateFlagsData($event.detail);"
@update-gallery-40546="updateGallery($event.detail);"
@update-gallery-hover-40546="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40546="showAlertButton($event)"
@stock-alert-modal-close-40546="hideAlertButton($event)"
data-sku="3701429851644">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/40546/"
name="category-add-to-cart-form-product-_69b8984aaa011"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984aaa011">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40546" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40546, {"product_ean":"3701429851644","product_name":"very-frenchy","product_id":"40546","product_family":"parfum","product_rayon":"parfum-homme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40546">
<template x-if="!isInWishlist(40546)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40546)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Very Frenchy"
title="Very Frenchy"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_VERYFRENCHY_30ML_GD_3701429851644_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Very Frenchy <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40546' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-very-frenchy-3701429851644-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(48)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Carambole, Basilic, Lavandin, Mousse de chêne </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40546' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-very-frenchy-3701429851644-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(48)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40546" data-price-box="product-id-40546">
<span class="price-container price-final_price tax weee">
<span id="product-price-40546" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40546" data-price-box="product-id-40546">
<span class="price-container price-final_price tax weee">
<span id="product-price-40546" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984aaa011() {
return {
currentProductData: {
'sku': '3701429851644',
'name': 'Very\u0020Frenchy',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '40546',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_veryfrenchy_30ml_gd_3701429851644_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429851644',
'product_name': 'very-frenchy',
'product_id': '40546',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429851644',
'product_name': 'very-frenchy',
'product_quantity': '1',
'product_id': '40546',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/french-barber-eau-de-parfum.html')"
href="https://www.adopt.com/fr/french-barber-eau-de-parfum.html"
class="product-item category-add-to-cart-form-product-_69b8984ac0c78 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984ac0c78()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-38271.window="openAddCartPanel()"
@update-prices-38271="updatePrice($event.detail, 38271);"
@update-short-description-listing-38271="updateShortDescription($event.detail);"
@update-configurable-url-38271="updateUrl($event.detail);"
@configurable-selection-changed-38271="updateFlagsData($event.detail);"
@update-gallery-38271="updateGallery($event.detail);"
@update-gallery-hover-38271="updateGalleryHover($event.detail)"
@stock-alert-modal-open-38271="showAlertButton($event)"
@stock-alert-modal-close-38271="hideAlertButton($event)"
data-sku="8883701429820565">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmU~/product/38271/"
name="category-add-to-cart-form-product-_69b8984ac0c78"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984ac0c78">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="38271" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 38271, {"product_ean":"8883701429820565","product_name":"french-barber","product_id":"38271","product_family":"parfum","product_rayon":"parfum-homme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="38271">
<template x-if="!isInWishlist(38271)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(38271)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_frenchbarber_30ml_3701429804275_2_1.png"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="French Barber"
title="French Barber"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="life_perf_frenchbarber_30ml_1.png"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
French Barber <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '38271' }); window.location.href = 'https://www.adopt.com/fr/french-barber-eau-de-parfum.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1500)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Mandarine, Sauge Sclarée, Fève tonka, Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '38271' }); window.location.href = 'https://www.adopt.com/fr/french-barber-eau-de-parfum.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(1500)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(38271, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39330"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["39388"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39330":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"39388":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"38271","chooseText":"Choisissez une option...","images":[],"index":{"39330":{"153":"350"},"39388":{"153":"351"}},"salable":{"153":{"350":["39330"],"351":["39388"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"39330":"3701429839161","39388":"3701429833510"},"short_description":{"39330":"Eau de parfum 30 ml","39388":"Eau de parfum 100 ml "},"flags_data":{"39330":{"is_vegan":{"label":"Vegan","icon":""}},"39388":{"publication_at":{"label":"Nouveau","icon":""}}},"stock_alias":{"39330":"30MLFRENCHBA00,30MLFRENCHBA00W,30MLFRENCHBA01W","39388":"100MLFRENCHB00W,100MLFRENCHB01W,100MLFRENCHBA00"},"adopt_code_erp":{"39330":"30MLFRENCHBA01W X","39388":"100MLFRENCHB01W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["39330"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["39388"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"39330":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"39388":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"38271","chooseText":"Choisissez une option...","images":[],"index":{"39330":{"153":"350"},"39388":{"153":"351"}},"salable":{"153":{"350":["39330"],"351":["39388"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"39330":"3701429839161","39388":"3701429833510"},"short_description":{"39330":"Eau de parfum 30 ml","39388":"Eau de parfum 100 ml "},"flags_data":{"39330":{"is_vegan":{"label":"Vegan","icon":""}},"39388":{"publication_at":{"label":"Nouveau","icon":""}}},"stock_alias":{"39330":"30MLFRENCHBA00,30MLFRENCHBA00W,30MLFRENCHBA01W","39388":"100MLFRENCHB00W,100MLFRENCHB01W,100MLFRENCHBA00"},"adopt_code_erp":{"39330":"30MLFRENCHBA01W X","39388":"100MLFRENCHB01W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-38271", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-38271", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 38271, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper38271"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--38271-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 38271);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--38271-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_3" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_3)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_3" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_3)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_3" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_3)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--38271-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 38271);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--38271-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_4" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_4)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_4" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_4)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_4" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_4)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="38271" data-price-box="product-id-38271"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="38271" data-price-box="product-id-38271"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="38271" data-price-box="product-id-38271"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984ac0c78() {
return {
currentProductData: {
'sku': '8883701429820565',
'name': 'French\u0020Barber',
'short_description': "Eau\u0020de\u0020parfum",
'id': '38271',
'image': 'https://adopt.twic.pics/media/catalog/product/l/i/life_perf_frenchbarber_30ml_1.png?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429820565',
'product_name': 'french-barber',
'product_id': '38271',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429820565',
'product_name': 'french-barber',
'product_quantity': '1',
'product_id': '38271',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-3701429836108-fr.html')"
href="https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-3701429836108-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984ae5d5c flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984ae5d5c()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-39040.window="openAddCartPanel()"
@update-prices-39040="updatePrice($event.detail, 39040);"
@update-short-description-listing-39040="updateShortDescription($event.detail);"
@update-configurable-url-39040="updateUrl($event.detail);"
@configurable-selection-changed-39040="updateFlagsData($event.detail);"
@update-gallery-39040="updateGallery($event.detail);"
@update-gallery-hover-39040="updateGalleryHover($event.detail)"
@stock-alert-modal-open-39040="showAlertButton($event)"
@stock-alert-modal-close-39040="hideAlertButton($event)"
data-sku="3701429836108">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZXM~/product/39040/"
name="category-add-to-cart-form-product-_69b8984ae5d5c"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984ae5d5c">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="39040" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 39040, {"product_ean":"3701429836108","product_name":"french-barber","product_id":"39040","product_family":"parfum","product_rayon":"parfum-homme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="39040">
<template x-if="!isInWishlist(39040)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(39040)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_2.png"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="French Barber"
title="French Barber"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_FRENCHBARBER_30ML_GD_3701429836108_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
French Barber <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39040' }); window.location.href = 'https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-3701429836108-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(111)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Mandarine, Sauge Sclarée, Fève tonka, Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39040' }); window.location.href = 'https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-3701429836108-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(111)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39040" data-price-box="product-id-39040">
<span class="price-container price-final_price tax weee">
<span id="product-price-39040" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39040" data-price-box="product-id-39040">
<span class="price-container price-final_price tax weee">
<span id="product-price-39040" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984ae5d5c() {
return {
currentProductData: {
'sku': '3701429836108',
'name': 'French\u0020Barber',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '39040',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_30ml_gd_3701429836108_1.png?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429836108',
'product_name': 'french-barber',
'product_id': '39040',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429836108',
'product_name': 'french-barber',
'product_quantity': '1',
'product_id': '39040',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-apres-rasage-3701429836405-fr.html')"
href="https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-apres-rasage-3701429836405-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984b01c22 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984b01c22()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-39235.window="openAddCartPanel()"
@update-prices-39235="updatePrice($event.detail, 39235);"
@update-short-description-listing-39235="updateShortDescription($event.detail);"
@update-configurable-url-39235="updateUrl($event.detail);"
@configurable-selection-changed-39235="updateFlagsData($event.detail);"
@update-gallery-39235="updateGallery($event.detail);"
@update-gallery-hover-39235="updateGalleryHover($event.detail)"
@stock-alert-modal-open-39235="showAlertButton($event)"
@stock-alert-modal-close-39235="hideAlertButton($event)"
data-sku="3701429836405">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmU~/product/39235/"
name="category-add-to-cart-form-product-_69b8984b01c22"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984b01c22">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="39235" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">0,90 €</span> </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 39235, {"product_ean":"3701429836405","product_name":"french-barber","product_id":"39235","product_family":"parfum","product_rayon":"parfum-homme","product_size":"","product_color":"07 Mademoiselle frivole","product_unitprice_ati":24.95,"product_unitprice_tf":"20.79","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="39235">
<template x-if="!isInWishlist(39235)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(39235)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_frenchbarber_lerituelhomme_3701429836405_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="French Barber"
title="French Barber"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="French Barber"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
French Barber <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml + apres rasage </span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml + </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39235' }); window.location.href = 'https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-apres-rasage-3701429836405-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(141)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Mandarine, Sauge Sclarée, Fève tonka, Patchouli </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '39235' }); window.location.href = 'https://www.adopt.com/fr/french-barber-coffret-eau-de-parfum-30-ml-gel-douche-250-ml-apres-rasage-3701429836405-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(141)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">25,85 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39235" data-price-box="product-id-39235">
<span class="price-container price-final_price tax weee">
<span id="product-price-39235" data-price-amount="24.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">24,95 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">25,85 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="39235" data-price-box="product-id-39235">
<span class="price-container price-final_price tax weee">
<span id="product-price-39235" data-price-amount="24.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">24,95 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984b01c22() {
return {
currentProductData: {
'sku': '3701429836405',
'name': 'French\u0020Barber',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml\u0020\u002B\u0020apres\u0020rasage\u0020",
'id': '39235',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_coeuracoeur_30ml_100ml_3701429835224_1.jpg?twic=v1',
'old_price': '24.950000',
'final_price': '24.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">0,90\u00a0\u20ac<\/span>"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429836405',
'product_name': 'french-barber',
'product_id': '39235',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_size': '',
'product_color': '07 Mademoiselle frivole',
'product_unitprice_ati': '24.95',
'product_unitprice_tf': '20.79',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429836405',
'product_name': 'french-barber',
'product_quantity': '1',
'product_id': '39235',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '07 Mademoiselle frivole',
'product_unitprice_ati': '24.95',
'product_unitprice_tf': '20.79',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<div class="pb-5 product-item relative h-full" x-data="initMerchBreakProduct_69b8984b0df11()" @resize.window="checkMobile()">
<a class="h-full w-full product-merch-group" href="https://www.adopt.com/fr/soin-visage.html">
<picture class="block h-full w-full">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_desk_fr.png?twic=v1/cover-max=425.1 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_desk_fr.png?twic=v1/cover-max=486.2 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_desk_fr.png?twic=v1/cover-max=390 1x" media="(min-width: 768px)" class="" > <source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_mob_fr.png?twic=v1/cover-max=319.8 1x" media="(max-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_mob_fr.png?twic=v1/cover-max=371.8 1x" media="(max-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_mob_fr.png?twic=v1/cover-max=293.8 1x" media="(max-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_mob_fr.png?twic=v1/cover-max=226.2 1x" media="(max-width: 320px)" class="" > <img class="h-full w-full object-cover"
loading="lazy" src="https://adopt.twic.pics/media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_desk_fr.png?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/e/c/ecomm_girl_secret_2026_rupture_merch_skincare_nuages_desk_fr.png"
alt="" />
</picture>
<div class="absolute bottom-4 inset-0 flex items-end justify-center p-4 md:p-6">
<span class="btn btn-primary-white text-center px-5 md:px-7.5">
J'en profite ! </span>
</div>
</a>
</div>
<script>
function initMerchBreakProduct_69b8984b0df11() {
return {
isMobile: window.innerWidth < 768,
init() {
this.isMobile = window.innerWidth < 768;
},
checkMobile() {
this.isMobile = window.innerWidth < 768;
}
}
}
</script> </li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/love-calendar-8-eaux-de-parfum-30ml-love-calendar-3701429850487-fr.html')"
href="https://www.adopt.com/fr/love-calendar-8-eaux-de-parfum-30ml-love-calendar-3701429850487-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984b145a1 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984b145a1()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40402.window="openAddCartPanel()"
@update-prices-40402="updatePrice($event.detail, 40402);"
@update-short-description-listing-40402="updateShortDescription($event.detail);"
@update-configurable-url-40402="updateUrl($event.detail);"
@configurable-selection-changed-40402="updateFlagsData($event.detail);"
@update-gallery-40402="updateGallery($event.detail);"
@update-gallery-hover-40402="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40402="showAlertButton($event)"
@stock-alert-modal-close-40402="hideAlertButton($event)"
data-sku="3701429850487">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmU~/product/40402/"
name="category-add-to-cart-form-product-_69b8984b145a1"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984b145a1">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40402" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">45,65 €</span> </div>
<div class="is_vegan bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Vegan </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40402, {"product_ean":"3701429850487","product_name":"love-calendar","product_id":"40402","product_family":"parfum","product_rayon":"parfum-femme","product_size":"","product_color":"","product_unitprice_ati":49.95,"product_unitprice_tf":"41.63","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40402">
<template x-if="!isInWishlist(40402)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40402)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Love Calendar"
title="Love Calendar"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="Love Calendar"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Love Calendar <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Love Calendar : 8 eaux de parfum 30ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Love Calendar : 8 eaux de parfum 30ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40402' }); window.location.href = 'https://www.adopt.com/fr/love-calendar-8-eaux-de-parfum-30ml-love-calendar-3701429850487-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(162)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40402' }); window.location.href = 'https://www.adopt.com/fr/love-calendar-8-eaux-de-parfum-30ml-love-calendar-3701429850487-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(162)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">95,60 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40402" data-price-box="product-id-40402">
<span class="price-container price-final_price tax weee">
<span id="product-price-40402" data-price-amount="49.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">49,95 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">95,60 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40402" data-price-box="product-id-40402">
<span class="price-container price-final_price tax weee">
<span id="product-price-40402" data-price-amount="49.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">49,95 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984b145a1() {
return {
currentProductData: {
'sku': '3701429850487',
'name': 'Love\u0020Calendar',
'short_description': "Love\u0020Calendar\u0020\u003A\u00208\u0020eaux\u0020de\u0020parfum\u002030ml",
'id': '40402',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_calendar_lovecalendar_2026_3701429850487_2.jpg?twic=v1',
'old_price': '49.950000',
'final_price': '49.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"bundle_real_value":"Economisez <span class=\"price\">45,65\u00a0\u20ac<\/span>","is_vegan":"Vegan"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429850487',
'product_name': 'love-calendar',
'product_id': '40402',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '49.95',
'product_unitprice_tf': '41.63',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429850487',
'product_name': 'love-calendar',
'product_quantity': '1',
'product_id': '40402',
'product_family': 'parfum',
'product_rayon': 'parfum-femme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '49.95',
'product_unitprice_tf': '41.63',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/eau-de-parfum-hot-one-8883701429850326-fr.html')"
href="https://www.adopt.com/fr/eau-de-parfum-hot-one-8883701429850326-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984b23ed6 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984b23ed6()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40950.window="openAddCartPanel()"
@update-prices-40950="updatePrice($event.detail, 40950);"
@update-short-description-listing-40950="updateShortDescription($event.detail);"
@update-configurable-url-40950="updateUrl($event.detail);"
@configurable-selection-changed-40950="updateFlagsData($event.detail);"
@update-gallery-40950="updateGallery($event.detail);"
@update-gallery-hover-40950="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40950="showAlertButton($event)"
@stock-alert-modal-close-40950="hideAlertButton($event)"
data-sku="8883701429850326">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBo/product/40950/"
name="category-add-to-cart-form-product-_69b8984b23ed6"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984b23ed6">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40950" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 p-2 z-10 flex flex-col gap-1.25">
<template x-if="flagsData">
<template x-for="flag in Object.keys(flagsData)">
<div
x-html="flagsData[flag].icon + ' ' + flagsData[flag].label"
:class="{ [flag]: true, ' bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest': true, ' text-xs-tiny md:text-smaller text-pink px-2 py-1.5 leading-none': flag === 'percent_promo', ' text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none': flag !== 'percent_promo' }">
</div>
</template>
</template>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40950, {"product_ean":"8883701429850326","product_name":"hot-one","product_id":"40950","product_family":"parfum","product_rayon":"parfum-homme","product_size":"","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":"9.96","product_discount_ati":-11.95,"product_discount_tf":-11.95} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40950">
<template x-if="!isInWishlist(40950)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40950)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_2_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Hot One"
title="Hot One"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_PERF_HOTONE_30ML_3701429850326_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Hot One <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Eau de parfum</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Eau de parfum </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40950' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-hot-one-8883701429850326-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(760)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Cardamome, Noix de pécan, Eclats de cacao, Bois brûlants </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40950' }); window.location.href = 'https://www.adopt.com/fr/eau-de-parfum-hot-one-8883701429850326-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(760)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
<div x-data='{ ...initConfigurableOptions(40950, {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40488"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40490"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40488":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40490":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40950","chooseText":"Choisissez une option...","images":[],"index":{"40488":{"153":"350"},"40490":{"153":"351"}},"salable":{"153":{"350":["40488"],"351":["40490"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40488":"3701429850326","40490":"3701429851866"},"short_description":{"40488":"Eau de parfum 30 ml","40490":"Eau de parfum 100 ml"},"flags_data":{"40488":{"is_vegan":{"label":"Vegan","icon":""}},"40490":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40488":"30MLHOTONE00W","40490":"100MLHOTONE00W"},"adopt_code_erp":{"40488":"30MLHOTONE00W X","40490":"100MLHOTONE00W X"}}), ...initSwatchOptions({"153":{"350":{"type":"0","value":null,"label":"30 ml"},"351":{"type":"0","value":null,"label":"100 ml"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}), ...{ optionConfig: {"attributes":{"153":{"id":"153","code":"contenance","label":"Contenance","options":[{"id":"350","label":"30 ml","products":["40488"],"price_per_contenance":39.833333333333,"is_first":true,"is_last":false},{"id":"351","label":"100 ml","products":["40490"],"price_per_contenance":29.95,"is_last":true,"is_first":false}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"40488":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95},"tierPrices":[],"msrpPrice":{"amount":0}},"40490":{"baseOldPrice":{"amount":24.958332333333},"oldPrice":{"amount":29.95},"basePrice":{"amount":24.958332333333},"finalPrice":{"amount":29.95},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":9.9583323333333},"oldPrice":{"amount":11.95},"basePrice":{"amount":9.9583323333333},"finalPrice":{"amount":11.95}},"productId":"40950","chooseText":"Choisissez une option...","images":[],"index":{"40488":{"153":"350"},"40490":{"153":"351"}},"salable":{"153":{"350":["40488"],"351":["40490"]}},"canDisplayShowOutOfStockStatus":true,"preSelectedGallery":[],"channel":"website","salesChannelCode":"base","sku":{"40488":"3701429850326","40490":"3701429851866"},"short_description":{"40488":"Eau de parfum 30 ml","40490":"Eau de parfum 100 ml"},"flags_data":{"40488":{"is_vegan":{"label":"Vegan","icon":""}},"40490":{"is_vegan":{"label":"Vegan","icon":""}}},"stock_alias":{"40488":"30MLHOTONE00W","40490":"100MLHOTONE00W"},"adopt_code_erp":{"40488":"30MLHOTONE00W X","40490":"100MLHOTONE00W X"}}, mediaCallback: "https\u003A\u002F\u002Fwww.adopt.com\u002Ffr\u002Fswatches\u002Fajax\u002Fmedia", changeDisabledOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0, productId) { 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(); if (!skipUpdateGallery) { this.updateGallery(); } this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-open-" + parentId, { detail: {productId: this.productIndex }})); }, changeOption(optionId, value, skipUpdateGallery, attributeCode, optionLabel, updateUrl = true, parentId = 0) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateShortDescription(); if (!skipUpdateGallery) { this.updateGallery(); } updateUrl && attributeCode && optionLabel && this.updateUrl(attributeCode, optionLabel); this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "configurable-selection-changed-" + this.productId, { detail: { productId: this.productIndex, flagsData: this.optionConfig.flags_data ? this.optionConfig.flags_data[this.productIndex] : false, } } ) ); this.$el.closest(".product-item").dispatchEvent(new CustomEvent("stock-alert-modal-close-" + parentId, { productId: this.productIndex })); }, updateUrl(attributeCode, optionLabel) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-configurable-url-" + this.productId, { detail: { attribute_code: attributeCode, option_label: optionLabel.trim().replace(/ /g,"+") } } ) ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updatePrice(priceData) { const finalPriceElement = this.$el.querySelectorAll(".product-item-price"); finalPriceElement.forEach((arrayElement, index) => { arrayElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); }) }, updateShortDescription() { let shortDescValue = this.optionConfig.short_description ? this.optionConfig.short_description[this.productIndex] : false; if (shortDescValue) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-short-description-listing-" + this.productId, { detail: Object.assign( shortDescValue ) } ) ) } }, updateGallery() { if (!this.productIndex) { return; } fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { method: "GET", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }).then(response => { return response.json() }).then(data => { if (data.errors) { // non critical failure only console logged console.warn(data.errors); } else { const image = data && data.medium; if (image) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-40950", {detail: image} ) ); } const hoverImage = data && data.hover_image; if (hoverImage) { this.$el.closest(".product-item").dispatchEvent( new CustomEvent( "update-gallery-hover-40950", {detail: hoverImage} ) ); } } }).catch(error => { console.warn(error) }); }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace("?", "")); Object.values(this.optionConfig.attributes).map(attribute => { let isOptionFoundDisabled = false; if (urlQueryParams.get(attribute.code) !== null) { let optionId = urlQueryParams.get(attribute.code); let found = false; Object.values(attribute.options).map(option => { if (found === false && option.label === optionId) { optionId = option.id; optionLabel = option.label; if (option.disabled === true) { isOptionFoundDisabled = true; } } }); if (isOptionFoundDisabled) { this.changeDisabledOption(attribute.id, optionId, false, attribute.code, optionLabel, true, 40950, this.productIndex); } else { this.changeOption(attribute.id, optionId); } } }); }, mouseDown: false, startX: 0, maxScroll: 0, scrollLeft: null, slider: null, show: false, scrollEvents: { ["@mousedown"](e) { this.slider = e.target.closest(".snap"); if (!this.slider) { return; } this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; this.startX = e.pageX - this.slider.offsetLeft; this.scrollLeft = this.slider.scrollLeft; this.mouseDown = true; }, ["@mouseout.self"]() { this.mouseDown = false; }, ["@mouseup"]() { this.mouseDown = false; }, ["@mousemove"](e) { e.preventDefault(); if (!this.mouseDown) { return; } const x = e.pageX - this.slider.offsetLeft; const scroll = x - this.startX; const scrollLeft = this.scrollLeft - scroll; if (scrollLeft > this.maxScroll) { this.slider.scrollLeft = this.maxScroll; return } this.slider.scrollLeft = this.scrollLeft - scroll; }, ["@onselectstart"]() { return false; } }, resizeEvent() { Array.from(this.$el.querySelectorAll(".snap")).forEach(slider => { slider.scrollLeft = 0; }) }, openSwitch() { this.show = !this.show; }, isLoaded: false, moreSwatch: false, isMobile: window.innerWidth < 768, heightSwatch: 0, openSwatch($refs) { const wrapper = this.$el.parentElement.querySelector(".swatch-attribute-wrapper"); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(this.show) { wrapper.style.height = height + "px"; this.show = false; } else { wrapper.style.height = "auto"; this.show = true; } }, initIfMoreSwatch($refs) { let thisParent = this; let timer; timer = setInterval(() => { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { clearInterval(timer); wrapper.dataset.baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(thisParent.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(Math.floor(wrapper.getBoundingClientRect().height) > height) { thisParent.moreSwatch = true; wrapper.style.height = height + "px"; } } }, 500); }, checkIfMoreSwatch() { const wrapper = this.$el.querySelector(".swatch-attribute-wrapper"); if (wrapper && (wrapper.dataset.swatchCode !== "contenance")) { wrapper.style.height = ""; const baseHeight = Math.floor(wrapper.getBoundingClientRect().height); let height; if(this.isMobile) { height = parseInt(wrapper.dataset.swatchMobile); } else { height = parseInt(wrapper.dataset.swatchDesktop); } if(baseHeight > height) { this.moreSwatch = true; wrapper.style.height = height + "px"; } else { this.moreSwatch = false; } } } } }'
x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect(); initIfMoreSwatch($refs); isLoaded = true"
@preselect-configurable-option="preselectConfigurableOption($event.detail.contenanceOptionIds, $event.detail.skipUpdateGallery);"
@resize.window="resizeEvent(); isMobile = window.outerWidth < 768; checkIfMoreSwatch()"
class="grow-[1] relative swatches-container"
>
<div class="swatch-attribute contenance">
<div class="w-full flex !flex-nowrap overflow-hidden swatch-attribute-options -ml-1 w-full justify-between gap-1.25 items-center">
<div class="swatch-attribute-wrapper w-full flex flex-wrap gap-y-1 m-0 overflow-y-hidden transition-all items-center contenance"
:class="{ 'gap-x-0.5': ('contenance' != 'contenance'), 'gap-x-1': (isProductPage && !isProductUpSell), 'gap-x-0 md:gap-x-1': ('contenance' == 'contenance') && (isCategoryPage || isProductRelated || isProductItemWidget || isProductRitual), '!p-0': isProductUpSell }"
role="radiogroup"
x-bind="scrollEvents"
x-ref="swatchWrapper40950"
data-swatch-mobile="30"
data-swatch-desktop="38"
data-swatch-code="contenance"
>
<label class="sr-only" for="attributecontenance">
<span>
Contenance </span>
</label>
<template x-for="(item, index) in optionConfig.attributes[153]?.options"
:key="item.id">
<div class="pill-radio-container"
:style="isMobile ? `width: calc(100% / ${attribueOptionsLength});` : ``" :class="{'hidden': (typeof item.disabled === 'undefined') && item.products.length === 0 , 'w-full': isProductPage && !isProductUpSell, 'p-1': optionConfig.attributes[153].code === 'adopt_swatch_color' || optionConfig.attributes[153].code === 'adopt_color', 'flex-1': optionConfig.attributes[153].code === 'contenance' && isProductPage}">
<template x-if="(typeof item.disabled === 'undefined') && item.products.length > 0">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40950-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(153, $event.target.value, false, 'contenance', item.label, true, 40950);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40950-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity flex flex-row-reverse gap-4 bg-lavender-300 text-anthracite-400">
<div class="pill-radio-capacity__content leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell" class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
</div>
<div x-show="isProductPage && !isProductUpSell" class="pill-radio-capacity__capacity-icons">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_11" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_11)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_11" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_11)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}" class="pill-radio-capacity__capacity-icon">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_11" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_11)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</div>
</label>
</div>
</template>
<template x-if="(typeof item.disabled !== 'undefined') && item.disabled === true">
<div class="pill-radio"
:class="{ 'checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell && !showStickyBar, 'pill-radio--small': (isProductUpSell && !isProductRelated) || isProductCrossSell }">
<input
:id="'attribute-option--40950-' + item.id"
:value="item.id"
name="super_attribute[153]"
type="radio"
class="sr-only"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeDisabledOption(153, $event.target.value, false, 'contenance', item.label, true, 40950);"
:checked="selectedValues[153] === item.id">
<label
:for="'attribute-option--40950-'+item.id"
:style="getSwatchBackgroundStyle('153',item.id)"
:class="{ 'swatch-attribute-item__notext' : !isTextSwatch(153, item.id), 'flex-col-reverse gap-3 text-center checked-pill-radio': attribueOptionsLength > 2 && isProductPage && !isProductUpSell, 'rounded-[10px]': (isProductPage && !isProductUpSell), '!px-1 md:!px-3.75': attribueOptionsLength > 2 && isCategoryPage, 'three-pill-radio': attribueOptionsLength > 2 && isProductPage || (isProductPage && isProductUpSell) || (isProductCrossSell), '!rounded-l-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_first === true), '!rounded-r-[10px] md:!rounded-none': (isCategoryPage || isProductRelated || isProductItemWidget) && (item.is_last === true), '!rounded-l-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_first === true), '!rounded-r-[10px]': (isProductUpSell || isProductCrossSell) && (item.is_last === true), '!py-1.5 lg:!px-6 !px-2 !gap-6 !flex-row-reverse': showStickyBar, 'lg:!flex-row-reverse !flex-col-reverse': attribueOptionsLength > 2 && showStickyBar }"
class="pill-radio-capacity out-of-stock flex flex-row-reverse gap-4 !text-[#9691A1] !bg-[#EEECF1]">
<span class="leading-3.75 flex flex-col gap-3" :class="{'!gap-1.5': showStickyBar}">
<span class="line-through" :class="{ 'uppercase text-sm leading-3.75': isProductPage && !isProductUpSell, 'lowercase text-tiny leading-[13.2px] md:text-xs md:leading-3.9 font-semibold': isCategoryPage || isProductItemWidget, 'lowercase text-tiny leading-[13.2px]': isProductUpSell || isProductCrossSell }"
x-text="item.label"></span>
<span x-show="isProductPage && !isProductUpSell"
class="font-normal text-very-tiny md:text-xxs">
<span x-data="{ getPriceForContenance(price) { return hyva.formatPrice(price).replace(' ', ''); } }"
x-show="item.price_per_contenance > 0"
x-text="getPriceForContenance(item.price_per_contenance) + '/100ml'"></span>
</span>
<span x-show="!isProductUpSell" class="sr-only">En rupture de stock</span>
</span>
<span x-show="isProductPage && !isProductUpSell">
<template x-if="optionConfig.attributes[153].options[0]">
<template
x-if="item.label === optionConfig.attributes[153].options[0].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="30ml-capacity" viewbox="0 0 17 47" fill="none" class="h-full" width="17" height="47" role="img">
<mask id="path-1-inside-1_4535_16993_12" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.56633 2.03088C6.56633 2.03088 5.75568 2.84154 5.75568 3.84154V4.14132C5.75568 4.23906 5.77953 4.33532 5.82516 4.42176C5.86817 4.50324 5.92838 4.5721 5.99995 4.62485V12.8147H11.3333V4.65578C11.4253 4.60034 11.5024 4.52027 11.5544 4.42176C11.6 4.33532 11.6239 4.23906 11.6239 4.14132V3.84154C11.6239 2.84154 10.8132 2.03088 9.81323 2.03088H7.56633Z" fill="white"/>
<path d="M5.82516 4.42176L6.70949 3.95489L6.70949 3.95489L5.82516 4.42176ZM5.99995 4.62485H6.99995V4.11957L6.59319 3.81982L5.99995 4.62485ZM5.99995 12.8147H4.99995V13.8147H5.99995V12.8147ZM11.3333 12.8147V13.8147H12.3333V12.8147H11.3333ZM11.3333 4.65578L10.8171 3.79932L10.3333 4.09091V4.65578H11.3333ZM11.5544 4.42176L12.4387 4.88862L12.4387 4.88862L11.5544 4.42176ZM6.75568 3.84154C6.75568 3.39383 7.11862 3.03088 7.56633 3.03088V1.03088C6.01405 1.03088 4.75568 2.28926 4.75568 3.84154H6.75568ZM6.75568 4.14132V3.84154H4.75568V4.14132H6.75568ZM6.70949 3.95489C6.73982 4.01236 6.75568 4.07635 6.75568 4.14132H4.75568C4.75568 4.40177 4.81923 4.65829 4.94083 4.88862L6.70949 3.95489ZM6.59319 3.81982C6.64078 3.85489 6.68097 3.90088 6.70949 3.95489L4.94083 4.88862C5.05537 5.10559 5.21598 5.28932 5.40672 5.42988L6.59319 3.81982ZM6.99995 12.8147V4.62485H4.99995V12.8147H6.99995ZM11.3333 11.8147H5.99995V13.8147H11.3333V11.8147ZM10.3333 4.65578V12.8147H12.3333V4.65578H10.3333ZM10.6701 3.9549C10.7046 3.88945 10.7561 3.83605 10.8171 3.79932L11.8495 5.51224C12.0944 5.36463 12.3002 5.15109 12.4387 4.88862L10.6701 3.9549ZM10.6239 4.14132C10.6239 4.07635 10.6397 4.01235 10.6701 3.9549L12.4387 4.88862C12.5603 4.65829 12.6239 4.40178 12.6239 4.14132H10.6239ZM10.6239 3.84154V4.14132H12.6239V3.84154H10.6239ZM9.81323 3.03088C10.2609 3.03088 10.6239 3.39383 10.6239 3.84154H12.6239C12.6239 2.28926 11.3655 1.03088 9.81323 1.03088V3.03088ZM7.56633 3.03088H9.81323V1.03088H7.56633V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_16993_12)"/>
<rect x="5.74982" y="12.572" width="5.87997" height="32.9392" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="6.2807" y="13.929" width="4.77193" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[1]">
<template
x-if="item.label === optionConfig.attributes[153].options[1].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="50ml-capacity" width="17" height="47" viewbox="0 0 16 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17007_12" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.89971 2.03088C5.89971 2.03088 5.08905 2.84154 5.08905 3.84154V4.14132C5.08905 4.23906 5.1129 4.33532 5.15853 4.42176C5.20155 4.50324 5.26175 4.5721 5.33333 4.62485V12.8147H10.6667V4.65578C10.7586 4.60034 10.8358 4.52027 10.8878 4.42176C10.9334 4.33532 10.9573 4.23906 10.9573 4.14132V3.84154C10.9573 2.84154 10.1466 2.03088 9.1466 2.03088H6.89971Z" fill="white"/>
<path d="M5.15853 4.42176L6.04286 3.95489L6.04286 3.95489L5.15853 4.42176ZM5.33333 4.62485H6.33333V4.11957L5.92656 3.81982L5.33333 4.62485ZM5.33333 12.8147H4.33333V13.8147H5.33333V12.8147ZM10.6667 12.8147V13.8147H11.6667V12.8147H10.6667ZM10.6667 4.65578L10.1504 3.79932L9.66666 4.09091V4.65578H10.6667ZM10.8878 4.42176L11.7721 4.88862L11.7721 4.88862L10.8878 4.42176ZM6.08905 3.84154C6.08905 3.39383 6.45199 3.03088 6.89971 3.03088V1.03088C5.34742 1.03088 4.08905 2.28926 4.08905 3.84154H6.08905ZM6.08905 4.14132V3.84154H4.08905V4.14132H6.08905ZM6.04286 3.95489C6.0732 4.01236 6.08905 4.07635 6.08905 4.14132H4.08905C4.08905 4.40177 4.1526 4.65829 4.2742 4.88862L6.04286 3.95489ZM5.92656 3.81982C5.97415 3.85489 6.01434 3.90088 6.04286 3.95489L4.2742 4.88862C4.38875 5.10559 4.54935 5.28932 4.74009 5.42988L5.92656 3.81982ZM6.33333 12.8147V4.62485H4.33333V12.8147H6.33333ZM10.6667 11.8147H5.33333V13.8147H10.6667V11.8147ZM9.66666 4.65578V12.8147H11.6667V4.65578H9.66666ZM10.0034 3.9549C10.038 3.88945 10.0895 3.83605 10.1504 3.79932L11.1829 5.51224C11.4278 5.36463 11.6335 5.15109 11.7721 4.88862L10.0034 3.9549ZM9.95726 4.14132C9.95726 4.07635 9.97311 4.01235 10.0034 3.9549L11.7721 4.88862C11.8937 4.65829 11.9573 4.40178 11.9573 4.14132H9.95726ZM9.95726 3.84154V4.14132H11.9573V3.84154H9.95726ZM9.1466 3.03088C9.59432 3.03088 9.95726 3.39383 9.95726 3.84154H11.9573C11.9573 2.28926 10.6989 1.03088 9.1466 1.03088V3.03088ZM6.89971 3.03088H9.1466V1.03088H6.89971V3.03088Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17007_12)"/>
<rect x="3.58777" y="12.479" width="9.10526" height="32.9869" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="4.07025" y="13.9292" width="8.14035" height="31.2011" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
<template x-if="optionConfig.attributes[153].options[2]">
<template
x-if="item.label === optionConfig.attributes[153].options[2].label">
<div :class="{'h-11': showStickyBar, 'h-[3.4375rem]': !showStickyBar}">
<svg xmlns="http://www.w3.org/2000/svg" data-icon="100ml-capacity" width="17" height="47" viewbox="0 0 17 47" fill="none" class="h-full" role="img">
<mask id="path-1-inside-1_4535_17021_12" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z"/>
</mask>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.38586 0C6.28129 0 5.38586 0.895431 5.38586 2V2.40714C5.38586 2.50364 5.40711 2.59895 5.4481 2.68631C5.49797 2.7926 5.57407 2.88119 5.66657 2.94584V10.5861H10.9999V2.94584C11.0924 2.88119 11.1685 2.7926 11.2184 2.68631C11.2594 2.59895 11.2806 2.50364 11.2806 2.40714V2C11.2806 0.895431 10.3852 0 9.2806 0H7.38586Z" fill="white"/>
<path d="M5.4481 2.68631L6.35341 2.26156L6.35341 2.26156L5.4481 2.68631ZM5.66657 2.94584H6.66657V2.42471L6.23943 2.12618L5.66657 2.94584ZM5.66657 10.5861H4.66657V11.5861H5.66657V10.5861ZM10.9999 10.5861V11.5861H11.9999V10.5861H10.9999ZM10.9999 2.94584L10.427 2.12618L9.9999 2.42471V2.94584H10.9999ZM11.2184 2.68631L10.3131 2.26156L10.3131 2.26156L11.2184 2.68631ZM6.38586 2C6.38586 1.44772 6.83358 1 7.38586 1V-1C5.72901 -1 4.38586 0.343146 4.38586 2H6.38586ZM6.38586 2.40714V2H4.38586V2.40714H6.38586ZM6.35341 2.26156C6.37478 2.30712 6.38586 2.35682 6.38586 2.40714H4.38586C4.38586 2.65045 4.43944 2.89078 4.54279 3.11106L6.35341 2.26156ZM6.23943 2.12618C6.28753 2.1598 6.32746 2.20625 6.35341 2.26156L4.54279 3.11106C4.66847 3.37894 4.86061 3.60258 5.09371 3.76549L6.23943 2.12618ZM6.66657 10.5861V2.94584H4.66657V10.5861H6.66657ZM10.9999 9.58609H5.66657V11.5861H10.9999V9.58609ZM9.9999 2.94584V10.5861H11.9999V2.94584H9.9999ZM10.3131 2.26156C10.339 2.20625 10.3789 2.1598 10.427 2.12618L11.5728 3.76549C11.8059 3.60257 11.998 3.37894 12.1237 3.11106L10.3131 2.26156ZM10.2806 2.40714C10.2806 2.35682 10.2917 2.30712 10.3131 2.26156L12.1237 3.11106C12.227 2.89078 12.2806 2.65045 12.2806 2.40714H10.2806ZM10.2806 2V2.40714H12.2806V2H10.2806ZM9.2806 1C9.83288 1 10.2806 1.44772 10.2806 2H12.2806C12.2806 0.343145 10.9375 -1 9.2806 -1V1ZM7.38586 1H9.2806V-1H7.38586V1Z" fill="#D9DAFF" mask="url(#path-1-inside-1_4535_17021_12)"/>
<rect x="0.833252" y="10.5312" width="15" height="35.2132" rx="1.5" fill="white" stroke="#D9DAFF"/>
<rect x="2.24207" y="12.8147" width="12.3509" height="32.3154" rx="2" fill="#FFE7EC"/>
<title/></svg>
</div>
</template>
</template>
</span>
</label>
</div>
</template>
</div> </template>
</div>
<button type="button" aria-label="Open swatch" @click.prevent="openSwatch($refs)"
x-ref="swatchButton"
:class="{ 'hidden': !moreSwatch }"
class="hidden relative top-px border rounded-full xl:w-6.5 xl:h-6.5 w-5.5 h-5.5 flex items-center justify-center bg-white transition duration-300 shrink-0 border-lavender-400 hover:border-anthracite-400">
<span :class="{'rotate-180': show}">
<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="xl:w-2.5 xl:h-auto w-2 h-2" 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>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute"
:style="getTooltipPosition()"
>
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-tiny md:text-xxs leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-xl border-[2px] border-lavender-400 text-center"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container rounded-tl-xl rounded-tr-xl"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="text-xxs md:text-smaller font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<svg class="absolute z-10 w-10 h-10 text-white transform -translate-x-1/5 -translate-y-11 fill-current stroke-current filter drop-shadow-[0_3px_0_rgb(217,218,255)] -mt-0.5 -ml-2"
viewbox="0 0 320 512">
<path d="m302.7 226.1-128.6 128.7c-7.8 7.8-20.5 7.8-28.3 0l-128.6-128.7z"/>
</svg>
</div>
</div>
</template>
</div>
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40950" data-price-box="product-id-40950"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40950" data-price-box="product-id-40950"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </span>
</button>
<div
class="hidden product-item-alertstock lg:px-2 link w-full btn btn-add-to-cart group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group min-h-[3.125rem] py-0 px-4.25"
aria-label="M'alerter">
<span class="leading-none text-xs">
M'alerter </span>
<div class="block product-item-price text-xs md:text-smaller font-medium catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40950" data-price-box="product-id-40950"> <span class="price-container price-final_price tax weee">
<span data-price-amount="11.95"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">11,95 €</span> </span>
</span>
</div> </div>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984b23ed6() {
return {
currentProductData: {
'sku': '8883701429850326',
'name': 'Hot\u0020One',
'short_description': "Eau\u0020de\u0020parfum",
'id': '40950',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_perf_hotone_30ml_3701429850326_1_1.jpg?twic=v1',
'old_price': '0',
'final_price': '11.95',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: [],
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '8883701429850326',
'product_name': 'hot-one',
'product_id': '40950',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '8883701429850326',
'product_name': 'hot-one',
'product_quantity': '1',
'product_id': '40950',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_season': 'eau-de-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '11.95',
'product_unitprice_tf': '9.96',
'product_discount_ati': '-11.95',
'product_discount_tf': '-11.95'
}]
})
}
}
}
</script>
</a>
</li>
<li>
<a @click="clickProductLink('https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-hot-one-3701429850302-fr.html')"
href="https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-hot-one-3701429850302-fr.html"
class="product-item category-add-to-cart-form-product-_69b8984b60219 flex flex-col pb-6 w-full h-full border border-transparent bg-white transition duration-300 hover:bg-lavender-300 hover:border-lavender-300 group"
x-data="initItemProduct_69b8984b60219()"
x-defer="intersect"
x-init="load()"
@product-addtocart-success-40426.window="openAddCartPanel()"
@update-prices-40426="updatePrice($event.detail, 40426);"
@update-short-description-listing-40426="updateShortDescription($event.detail);"
@update-configurable-url-40426="updateUrl($event.detail);"
@configurable-selection-changed-40426="updateFlagsData($event.detail);"
@update-gallery-40426="updateGallery($event.detail);"
@update-gallery-hover-40426="updateGalleryHover($event.detail)"
@stock-alert-modal-open-40426="showAlertButton($event)"
@stock-alert-modal-close-40426="hideAlertButton($event)"
data-sku="3701429850302">
<form method="post"
action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1sP2luc3RhbnRTZWFyY2g9VGVycmUlMjBoZXJtZQ~~/product/40426/"
name="category-add-to-cart-form-product-_69b8984b60219"
class="flex flex-col flex-1 category-add-to-cart-form-product category-add-to-cart-form-product-_69b8984b60219">
<input name="form_key" type="hidden" :value="hyva.getFormKey()" />
<input type="hidden" name="product" value="40426" />
<div
class="link product cursor-pointer photo product-item-photo block mx-auto w-full aspect-square bg-lavender-400"
:class="{ 'aspect-auto': isLoaded, 'aspect-square bg-lavender-400': !isLoaded }"
tabindex="-1">
<div class="relative aspect-square overflow-hidden">
<div class="product-item-flap absolute left-0 m-1.25 z-10 flex flex-col gap-1.25">
<div class="is_loyalty_offer bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Offre Fidélité </div>
<div class="bundle_real_value bg-white rounded flex items-center gap-1 w-fit font-semibold border border-lavender-lightest text-[9px] md:text-xs-tiny uppercase md:tracking-spaced-xs tracking-spaced-[0.95px] md:px-2 px-1.25 md:py-[3px] py-[2px] leading-none">
Economisez <span class="price">1,00 €</span> </div>
</div>
<button x-data="initWishlist()"
@click.prevent.stop="toggleWishlist( 40426, {"product_ean":"3701429850302","product_name":"hot-one","product_id":"40426","product_family":"parfum","product_rayon":"parfum-homme","product_size":"","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":"14.08","product_discount_ati":0,"product_discount_tf":0} )"
aria-label="Ajouter à ma liste d’envie"
type="button"
class="product-item-wishlist btn-favorite absolute right-0 md:p-4 p-2 z-10"
data-wishlist="40426">
<template x-if="!isInWishlist(40426)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="w-4 md:w-5.5 h-auto stroke-tertiary-500" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
<template x-if="isInWishlist(40426)">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="favorite-full" version="1.1" x="0px" y="0px" viewbox="0 0 22.5 19.8" enable-background="new 0 0 22.5 19.8" xml:space="preserve" class="btn-favorite-listing btn-favorite in-favorite w-4 md:w-5.5 h-auto" width="23" height="20" role="img">
<path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M11.3,19.8c-21.7-12.3-6.5-25.6,0-17.1C17.8-5.8,33,7.5,11.3,19.8z "/>
<title/></svg>
</template>
</button>
<picture class="hover-image w-full absolute top-0 left-0 inset-0 m-auto">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img loading="lazy"
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_2_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
alt="Hot One"
title="Hot One"
class="w-full">
</picture>
<picture class="w-full main-image relative transition duration-300 aspect-square h-auto group-hover:opacity-0"
:class="{ 'aspect-square' : !isLoaded}">
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/cover-max=422.5 1x" media="(min-width: 1245px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/cover-max=483.6 1x" media="(min-width: 1024px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/cover-max=387.4 1x" media="(min-width: 768px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/cover-max=317.2 1x" media="(min-width: 600px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/cover-max=369.2 1x" media="(min-width: 480px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/cover-max=291.2 1x" media="(min-width: 375px)" class="" >
<source type="image/jpeg" srcset="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/cover-max=222.3 1x" media="(min-width: 320px)" class="" > <img
src="https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1/output=preview"
data-twic-src="image:media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg"
data-twic-transform="auto/max=614"
data-twic-src-step="50"
width="256"
height="286"
alt="STILL_MULTI_HOTONE_30ML_GD_3701429850302_1.jpg"
loading="lazy" class="w-full">
</picture>
</div>
</div>
<div @click.stop class="product-item-content flex flex-col px-2 py-3.75 pb-0 gap-3 md:px-4.5 md:py-5 flex-1">
<div class="flex flex-col md:flex-row gap-2 md:items-start md:justify-between">
<div class="flex flex-col gap-1 md:flex-row md:flex-wrap">
<div class="product-item-name flex-1 cursor-pointer flex items-center">
<h3 class="text-anthracite font-semibold text-xs md:text-base leading-tightened md:leading-tightened">
Hot One <span class="w-0 absolute h-0 overflow-hidden inline-block"> - Coffret eau de parfum 30 ml + gel douche 250 ml</span>
</h3>
</div>
<div class="uppercase font-semibold text-pink text-very-tiny md:text-tiny tracking-spaced-lg leading-[1.2] flex md:justify-between items-center gap-x-2.5 md:order-2 w-full">
<div class="product-item-short">
Coffret eau de parfum 30 ml + gel douche 250 ml </div>
</div>
<div class="product-item-review empty-hidden hidden md:block cursor-pointer md:order-1" aria-hidden="true"><!--
--><div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40426' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-hot-one-3701429850302-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(157)
</span>
</div><!--
--></div>
</div>
</div>
<div class="flex flex-col gap-1.5">
<div class="flex gap-2.25 items-baseline">
<div class="text-tiny leading-tightened font-semibold tracking-spaced-md text-anthracite-400 line-clamp-3 md:line-clamp-none">
Cardamome, Noix de pécan, Eclats de cacao, Bois brûlants </div>
</div>
<div class="product-item-review empty-hidden md:hidden cursor-pointer md:order-1">
<div class="rating-stars-category flex cursor-pointer items-center gap-0.5" x-data="{ clickViewReviewsEvent() { window.dataLayer?.push({ 'event': 'voirAvis', 'product_id': '40426' }); window.location.href = 'https://www.adopt.com/fr/coffret-eau-de-parfum-30-ml-gel-douche-250-ml-hot-one-3701429850302-fr.html#customer-reviews' } }" @click="clickViewReviewsEvent()">
<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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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-anthracite-500 w-3 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>
<span class="text-xs-tiny leading-tightened font-semibold text-anthracite-500 underline underline-offset-2">
(157)
</span>
</div> </div>
<div class="product-item-details pt-2.5">
</div>
</div>
<div class="product-item-bottom place-content-end grow-[1] pt-2">
<div class="flex flex-col justify-between items-center saleable">
<div class="lg:hidden block w-full text-xxs lg:text-xs text-anthracite-400 font-medium md:px-4 mb-2">
<div>
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
<div class="relative w-full flex flex-col">
<button type="submit"
class="product-item-addtocart w-full btn btn-add-to-cart px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 group-hover:bg-white group-hover:hover:bg-anthracite group-hover:hover:text-white group"
@click="addToCart()" aria-label="J'achète!">
<div class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="plus" version="1.1" x="0px" y="0px" viewbox="0 0 14.7 14.7" enable-background="new 0 0 14.7 14.7" xml:space="preserve" class="w-2.75 text-pink" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M7.4,0.8V14"/>
<path fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" d="M14,7.4H0.8"/>
<title/></svg>
<span class="leading-none text-sm font-semibold">
Ajouter </span>
</div>
<div class="flex flex-col items-end leading-tightened">
<span class="block product-item-price text-sm md:text-smaller font-semibold catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40426" data-price-box="product-id-40426">
<span class="price-container price-final_price tax weee">
<span id="product-price-40426" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
<div class="btn-add-to-cart__real-value hidden lg:block text-anthracite text-xxs font-medium tracking-[-0.01em] flex justify-start md:justify-end transition-all duration-300">
<div class="flex">
Valeur réelle : <span class="price">17,90 €</span> </div>
</div>
</div>
</button>
<button type="button" aria-hidden="true"
class="added-to-cart hidden absolute bottom-0 product-item-addtocart btn btn-add-to-cart btn-add-to-cart--submit px-4.25 lg:min-h-[3.75rem] min-h-[3.125rem] py-0 leading-none">
<span class="flex gap-1.5 md:gap-2">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-icon="check-cta" version="1.1" x="0px" y="0px" viewbox="0 0 16 11.9" enable-background="new 0 0 16 11.9" xml:space="preserve" class="w-3 text-system-success-600 stroke-2" width="15" height="15" role="img">
<path fill="none" stroke="currentColor" stroke-linecap="round" d="M15.5,0.5L6.6,11.2L0.5,5.5"/>
<title/></svg>
<span class="leading-none text-xs">
Ajouté </span>
</span>
<span class="hidden md:block product-item-price text-xs md:text-smaller catalog-category-item-price">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="40426" data-price-box="product-id-40426">
<span class="price-container price-final_price tax weee">
<span id="product-price-40426" data-price-amount="16.9"
data-price-type="finalPrice"
class="price-wrapper"
>
<span class="price">16,90 €</span> </span>
</span>
</div> </span>
</button>
</div>
</div>
</div>
</div>
</form>
<script>
function initItemProduct_69b8984b60219() {
return {
currentProductData: {
'sku': '3701429850302',
'name': 'Hot\u0020One',
'short_description': "Coffret\u0020eau\u0020de\u0020parfum\u002030\u0020ml\u0020\u002B\u0020gel\u0020douche\u0020250\u0020ml",
'id': '40426',
'image': 'https://adopt.twic.pics/media/catalog/product/s/t/still_multi_hotone_30ml_gd_3701429850302_1_1.jpg?twic=v1',
'old_price': '16.900000',
'final_price': '16.9',
},
showStickyBar: false,
selectedItem: false,
priceTemplate: '',
flagsData: {"is_loyalty_offer":"Offre Fid\u00e9lit\u00e9","bundle_real_value":"Economisez <span class=\"price\">1,00\u00a0\u20ac<\/span>"},
isLoaded: false,
isProductUpSell: false,
isProductCrossSell: false,
isProductRelated: false,
isProductItemWidget: false,
isProductRitual: false,
load() {
this.isLoaded = true;
this.$nextTick(() => {
const target = this.$el.querySelector('.swatches-container');
if (target) {
dispatchPreselectConfigurableOption(target);
}
});
},
addToCart() {
this.sendProductDetailsAddToCartEvent();
},
openAddCartPanel() {
this.$dispatch('last-added-cart-pannel', this.currentProductData);
},
updateFlagsData(eventData) {
this.flagsData = eventData.flagsData;
},
updateGallery(imageUrl) {
const url = new URL(imageUrl);
const mainPicture = this.$el.querySelector('.main-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
mainPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const mainImageElement = mainPicture.querySelector('img');
mainImageElement.src = imageUrl;
mainImageElement.dataset.twicSrc = 'image:' + url.pathname;
this.currentProductData.image = imageUrl;
},
updateGalleryHover(imageUrl) {
const url = new URL(imageUrl);
const hoverPicture = this.$el.querySelector('.hover-image');
const baseUrl = imageUrl.split('?')[0] + '?twic=v1';
hoverPicture.querySelectorAll('source').forEach(source => {
const currentSrcset = source.srcset;
const coverMaxMatch = currentSrcset.match(/\/cover-max=([0-9.]+)/);
if (coverMaxMatch) {
const coverMaxValue = coverMaxMatch[1];
source.srcset = baseUrl + '/cover-max=' + coverMaxValue + ' 1x';
}
});
const hoverImageElement = hoverPicture.querySelector('img');
hoverImageElement.src = imageUrl;
hoverImageElement.dataset.twicSrc = 'image:' + url.pathname;
},
showAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.remove('hidden');
addButton?.classList.add('hidden');
},
hideAlertButton() {
const alertButton = this.$el.querySelector('.product-item-alertstock');
const addButton = this.$el.querySelector('.product-item-addtocart');
alertButton.classList.add('hidden');
addButton?.classList.remove('hidden');
},
updatePrice(priceData, productId) {
const finalPriceElement = this.$el.querySelectorAll('.product-item-price');
let finalPrice = priceData.finalPrice.amount
let oldPrice = priceData.oldPrice.amount
if (finalPrice === oldPrice) {
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerText = hyva.formatPrice(finalPrice);
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
return;
}
let priceTemplate = '<div class="price-box price-final_price" data-role="priceBox" data-product-id="' + productId + '" data-price-box="product-id-' + productId + '">';
priceTemplate += '<span class="special-price"><span class="price-container price-final_price tax weee"><span class="price-label">Prix Spécial</span><span id="product-price-' + productId + '" data-price-amount="' + finalPrice + '" data-price-type="finalPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(finalPrice) + '</span></span></span></span>';
priceTemplate += '<span class="old-price no-underline-important"><span class="price-container price-final_price tax weee"><span class="price-label">Prix normal</span><span id="old-price-' + productId + '" data-price-amount="' + oldPrice + '" data-price-type="oldPrice" class="price-wrapper">';
priceTemplate += '<span class="price">' + hyva.formatPrice(oldPrice) + '</span></span></span></span>';
priceTemplate += '</div>';
finalPriceElement.forEach((arrayElement, index) => {
arrayElement.innerHTML = priceTemplate;
});
this.currentProductData.final_price = finalPrice;
this.currentProductData.old_price = oldPrice;
},
updateUrl(eventData) {
if (eventData.option_label.includes('30+')) {
this.$el.href = this.$el.href.split('?')[0];
} else {
this.$el.href = this.$el.href.split('?')[0] + '?' + eventData.attribute_code + '=' + eventData.option_label;
}
},
updateShortDescription(value) {
this.$el.querySelector('.product-item-short').innerText = value;
this.currentProductData.short_description = value.toString();
},
clickProductLink() {
this.sendProductClickEvent()
},
sendProductClickEvent() {
window.dataLayer?.push({
'event': 'productClic',
'productClic': [{
'product_ean': '3701429850302',
'product_name': 'hot-one',
'product_id': '40426',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0',
'list': ''
}]
})
},
sendProductDetailsAddToCartEvent() {
window.dataLayer?.push({
'event': 'addToCart',
'list': 'product list',
'productaddToCart': [{
'product_ean': '3701429850302',
'product_name': 'hot-one',
'product_quantity': '1',
'product_id': '40426',
'product_family': 'parfum',
'product_rayon': 'parfum-homme',
'product_season': 'coffret-parfum',
'product_size': '',
'product_color': '',
'product_unitprice_ati': '16.9',
'product_unitprice_tf': '14.08',
'product_discount_ati': '0',
'product_discount_tf': '0'
}]
})
}
}
}
</script>
</a>
</li>
</ul>
</div>
<div id="am-page-count" style="display: none">14</div> </section>
<script>
window.dataLayer?.push({
'event': 'productImpressions',
'productImpressions': [{"position":1,"product_ean":"8883701429856137","product_name":"girl-secret","product_id":"41024","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":2,"product_ean":"3701429853082","product_name":"girl-secret","product_id":"40550","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":3,"product_ean":"3701429853617","product_name":"girl-power","product_id":"40602","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":36.85,"product_unitprice_tf":30.708333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":4,"product_ean":"8883701429831608","product_name":"wonderful","product_id":"39085","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":5,"product_ean":"3701429834210","product_name":"wonderful","product_id":"38895","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":6,"product_ean":"8883701429850289","product_name":"lova-lova","product_id":"40949","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":7,"product_ean":"3701429850265","product_name":"lova-lova","product_id":"40425","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":8,"product_ean":"rupture-girl-secret","product_name":"rupture-girl-secret","product_id":"39829","product_family":"","product_rayon":"","product_color":"","product_unitprice_ati":0,"product_unitprice_tf":0,"product_discount_ati":"0.00","product_discount_tf":"0.00","list":""},{"position":9,"product_ean":"3701429850357","product_name":"lova-lova","product_id":"40400","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":36.85,"product_unitprice_tf":30.708333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":10,"product_ean":"3701429842444","product_name":"rouge-lipstick","product_id":"39516","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":11,"product_ean":"3701429853129","product_name":"rouge-lipstick","product_id":"40552","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":12,"product_ean":"8883701429851590","product_name":"jolie-paris","product_id":"40994","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":13,"product_ean":"rupture-4-parfums-30f","product_name":"rupture-4-parfums-30f","product_id":"37924","product_family":"","product_rayon":"","product_color":"","product_unitprice_ati":0,"product_unitprice_tf":0,"product_discount_ati":"0.00","product_discount_tf":"0.00","list":""},{"position":14,"product_ean":"3701429851576","product_name":"jolie-paris","product_id":"40544","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":15,"product_ean":"3701429851682","product_name":"jolie-paris","product_id":"40547","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":22.95,"product_unitprice_tf":19.125,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":16,"product_ean":"3701429851781","product_name":"un-air-de-paris","product_id":"40600","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":36.85,"product_unitprice_tf":30.708333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":17,"product_ean":"8883701429839826","product_name":"rendez-vous-gourmand","product_id":"40995","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":18,"product_ean":"3701429851736","product_name":"rendez-vous-gourmand","product_id":"40548","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":22.95,"product_unitprice_tf":19.125,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":19,"product_ean":"9993701429833572","product_name":"nuit-parisienne","product_id":"39244","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":20,"product_ean":"3701429851613","product_name":"nuit-parisienne","product_id":"40545","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":21,"product_ean":"3701429847470","product_name":"nuit-parisienne","product_id":"40208","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":37.95,"product_unitprice_tf":31.625,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":22,"product_ean":"3701429839703","product_name":"avenue-des-fleurs","product_id":"39454","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":23,"product_ean":"8883701429851668","product_name":"very-frenchy","product_id":"40996","product_family":"parfum","product_rayon":"parfum-homme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":24,"product_ean":"rupture-jeu","product_name":"rupture-jeu","product_id":"39084","product_family":"","product_rayon":"","product_color":"","product_unitprice_ati":0,"product_unitprice_tf":0,"product_discount_ati":"0.00","product_discount_tf":"0.00","list":""},{"position":25,"product_ean":"3701429851644","product_name":"very-frenchy","product_id":"40546","product_family":"parfum","product_rayon":"parfum-homme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":26,"product_ean":"8883701429820565","product_name":"french-barber","product_id":"38271","product_family":"parfum","product_rayon":"parfum-homme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":27,"product_ean":"3701429836108","product_name":"french-barber","product_id":"39040","product_family":"parfum","product_rayon":"parfum-homme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":28,"product_ean":"3701429836405","product_name":"french-barber","product_id":"39235","product_family":"parfum","product_rayon":"parfum-homme","product_color":"07 Mademoiselle frivole","product_unitprice_ati":24.95,"product_unitprice_tf":20.791666666667,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":29,"product_ean":"rupture-visage-girl-power","product_name":"rupture-visage-girl-power","product_id":"40676","product_family":"","product_rayon":"","product_color":"","product_unitprice_ati":0,"product_unitprice_tf":0,"product_discount_ati":"0.00","product_discount_tf":"0.00","list":""},{"position":30,"product_ean":"3701429850487","product_name":"love-calendar","product_id":"40402","product_family":"parfum","product_rayon":"parfum-femme","product_color":"","product_unitprice_ati":49.95,"product_unitprice_tf":41.625,"product_discount_ati":0,"product_discount_tf":0,"list":""},{"position":31,"product_ean":"8883701429850326","product_name":"hot-one","product_id":"40950","product_family":"parfum","product_rayon":"parfum-homme","product_color":"","product_unitprice_ati":11.95,"product_unitprice_tf":9.9583333333333,"product_discount_ati":-11.95,"product_discount_tf":-11.95,"list":""},{"position":32,"product_ean":"3701429850302","product_name":"hot-one","product_id":"40426","product_family":"parfum","product_rayon":"parfum-homme","product_color":"","product_unitprice_ati":16.9,"product_unitprice_tf":14.083333333333,"product_discount_ati":0,"product_discount_tf":0,"list":""}] });
</script>
<form x-data="nostoRecobuy()" action="https://www.adopt.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuYWRvcHQuY29tL2ZyL3BhcmZ1bS5odG1s/" method="post" id="nosto_addtocart_form">
<input name="form_key" type="hidden" value="TW5SENaRlup3v8iR" /></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">category</span>
</div><div class="notranslate" style="display:none"> <span class="nosto_category" style="display:none">
<span class="id">1472</span>
<span class="parent_id">2</span>
<span class="title">Parfum</span>
<span class="url">https://www.adopt.com/fr/parfum.html</span>
<span class="path">1/2/1472</span>
<span class="available">1</span>
<span class="category_string">/Parfum</span>
</span>
</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_69b7d851dea9e()"
@last-added-cart-pannel.window="getItemsData($event.detail)">
</div>
<div id="_69b7d851dea9e"></div>
<script>
function initNostoItems_69b7d851dea9e() {
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("_69b7d851dea9e").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>
<div id="next-page-component"
@update-pager-items.window="update($event.detail)"
class="flex flex-col items-center gap-4 mb-4"
x-data="initAmsScrollPager()"
x-show="itemCount > 0">
<div class="w-48 flex flex-row">
<span class="w-3/4 shrink-0 block border-b-4 border-lavender"
:style="calcBarSize()"></span>
<span class="w-full block border-b-4 border-anthracite-300"></span>
</div>
<span class="text-purple font-primary font-semibold xl:text-smaller text-xs"
x-show="wording"
x-text="wording">
</span>
</div>
<script>
function initAmsScrollPager() {
return {
wording: null,
itemCount: 0,
totalCount:0,
maxPage: 0,
pageSize: 0,
lastPageWording: 'Fin de sélection',
wordingTemplate: '%1 produits sur %2',
init() {
window.addEventListener('beforeunload', () => {
history.scrollRestoration = 'manual';
});
},
update($event) {
this.pageSize = $event.pageSize;
if ($event.currentPage > this.maxPage) {
this.maxPage = $event.currentPage;
}
this.itemCount = this.maxPage * this.pageSize;
this.totalCount = $event.totalCount;
if (this.itemCount > this.totalCount) {
this.itemCount = this.totalCount;
}
this.wording = this.wordingTemplate.replace('%1', this.itemCount).replace('%2', this.totalCount);
this.$nextTick(() => {
this.calcBarSize();
});
},
calcBarSize() {
let widthBar = 100;
if (this.itemCount > 0) {
widthBar = ((this.itemCount / this.totalCount) * 100).toFixed(0);
}
if (widthBar >= 100) {
this.wording = this.lastPageWording;
}
return 'width: ' + widthBar + '%';
}
}
}
</script>
<div x-data="initBottomSeo()" x-init="initMore($refs)"
class="flex md:flex-row-reverse flex-col-reverse md:min-h-[15rem] border-y-1 border-lavender-400">
<div class="flex justify-center items-center w-full transition-all">
<div class="flex flex-col p-8 md:p-12">
<div class="font-secondary font-bold md:text-3.5xl text-3xl tracking-spaced"> Parfum pour femme, homme et mixte</div>
<div class="py-6 md:text-sm text-xs">
<div class="read-more overflow-hidden transition-all duration-300 leading-5.5 md:leading-7 stylised-administrable-content"
data-lhmobile="20" data-lhdesktop="28" x-ref="readmore">
<p> </p>
<p> </p>
<p><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-homme.html" title="Les parfums pour homme"><span class="link text-[#ec3f82] hover:text-[#53385b]">Les parfums pour homme</span></a>
</strong><span class="TextRun SCXW37099281 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW37099281 BCX0">explorent plusieurs familles olfactives, parmi lesquelles les univers boisés, aquatiques et aromatiques sont particulièrement fréquents. Ces familles contribuent à la diversité et à la richesse des compositions masculines.</span></span></p>
<p> </p>
<p><strong>Satisfaites toutes vos envies et variez les plaisirs parfumés</strong><span style="font-weight: 400;"> avec la gamme d’Adopt pour trouver le parfum qui vous ressemble !</span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les différents types de parfums</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Tous les produits parfumés sont élaborés à partir <span class="TextRun SCXW245118672 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW245118672 BCX0">d'<strong>huiles essentielles</strong> ou / et de</span><span class="NormalTextRun SCXW245118672 BCX0"> <strong>composés aromatiques de </strong></span><strong><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW245118672 BCX0">synthèse,</span><span class="NormalTextRun SCXW245118672 BCX0"> d’alcool et d’eau</span></strong></span></span><span style="font-weight: 400;">. Chaque solution possède ces ingrédients à des doses différentes, qu’il s’agisse de parfum, d’eau de parfum, d’eau de toilette ou d’eau de Cologne. Ces produits sont classés selon leur concentration en parfum : </span><strong>plus la concentration est élevée, plus la senteur est durable</strong><span style="font-weight: 400;">. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> L’eau de parfum </span></h3>
<p> </p>
<p><span style="font-weight: 400;">Moins concentrée que le parfum, l'eau de parfum a </span><span style="font-weight: 400;">un prix plus abordable et ses effluves restent prononcées et durables dans le temps. L’eau de parfum s’applique autant chez les hommes que chez les femmes. Pour que votre parfum reste sur votre peau plus longtemps, </span><strong>vaporisez le produit sur les points chauds du corps</strong><span style="font-weight: 400;">, c’est-à-dire les zones où les pulsations du cœur se font sentir sous la peau (nuque, poignets, tempes). L'eau de parfum peut également perdurer plus longtemps </span><strong>sur les cheveux ou les vêtements</strong><span style="font-weight: 400;">.</span></p>
<p> </p>
<h3><span style="font-weight: 400;"> L’eau de toilette </span></h3>
<p> </p>
<p><span class="TextRun SCXW169956574 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW169956574 BCX0">L’eau de toilette est généralement moins concentrée que l’eau de parfum. Sa tenue sur la peau est en général plus légère et peut durer quelques heures. Grâce à sa composition plus légère, elle est souvent <strong>appréciée pour un usage quotidien</strong> et particulièrement pendant les <strong>périodes estivales</strong>.</span></span></p>
<p> </p>
<h3><span style="font-weight: 400;">L’eau de Cologne</span></h3>
<p> </p>
<p><span class="TextRun SCXW43731050 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW43731050 BCX0">Composée d’une </span><span class="NormalTextRun SCXW43731050 BCX0">plus </span><span class="NormalTextRun SCXW43731050 BCX0">faible concentration de </span><span class="NormalTextRun SCXW43731050 BCX0">parfum</span><span class="NormalTextRun SCXW43731050 BCX0">, l’eau de Cologne se caractérise par une <strong>senteur légère et fraîche</strong>, avec une volatilité plus marquée que celle de l’eau de toilette</span><span class="NormalTextRun SCXW43731050 BCX0">.</span><span class="NormalTextRun SCXW43731050 BCX0"> </span><span class="NormalTextRun SCXW43731050 BCX0">Historiquement très présente dans la parfumerie, elle se distingue souvent par des compositions dominées par des <strong>notes </strong></span><strong><span class="NormalTextRun SpellingErrorV2Themed SCXW43731050 BCX0">hespéridées</span></strong><span class="NormalTextRun SCXW43731050 BCX0">, qui </span><span class="NormalTextRun SCXW43731050 BCX0">peuvent apporter</span><span class="NormalTextRun SCXW43731050 BCX0"> une <strong>sensation de fraîcheur</strong></span><span class="NormalTextRun SCXW43731050 BCX0">.</span></span><span class="EOP SCXW43731050 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les parfu</span><span style="font-weight: 400;">ms pour femme</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Le </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-femme.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">Parfum femme</span></a>
</span><span style="font-weight: 400;"> explore des </span><strong>univers olfactifs </strong><span style="font-weight: 400;">très nombreux : </span><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fleurs-et-romantisme.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">floraux</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fruits-et-plaisir.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">fruité</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/coton-et-douceur.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">délicats</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/gourmandise-et-seduction.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">gourmand</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/soleil-et-sensualite.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">Solaire</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fraicheur-et-agrume.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">frais</span></a>
</strong><strong> et </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/boise-et-caractere.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">boisé</span></a>
</strong><span style="font-weight: 400;">.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum floral</span></h3>
<p><span style="font-weight: 400;"> </span></p>
<p><span style="font-weight: 400;">Cet univers olfactif créé pour la femme regroupe un éventail très large de </span><strong>nuances de fleurs aux senteurs très distinctes</strong><span style="font-weight: 400;">. Élaborés à partir d’une fleur ou de plusieurs variétés, les parfums floraux pour femme sont délicats et enveloppants. </span><strong>Rose, jasmin, fleur d'oranger</strong><span style="font-weight: 400;">, chaque fleur offre une douceur et une élégance particulière à une eau de parfum. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Parfum fruité</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Les parfums fruités sont prisés par de nombreuses femmes, ils permettent un </span><strong>choix presque infini des senteurs</strong><span style="font-weight: 400;">. Pêche, pomme ou encore noix de coco, les fruits apportent une touche d’originalité et de fraîcheur à la composition d’un parfum. Laissez-vous tenter par leurs </span><strong>senteurs sucrées et gourmandes </strong><span style="font-weight: 400;">qui vous rendront irrésistibles auprès des personnes que vous croiserez. Venez découvrir les </span><strong>odeurs des fruits rouges, les senteurs de litchi ou encore le parfum de l’ananas </strong><span style="font-weight: 400;">que propose Adopt dans sa collection de parfums fruités pour femme. </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum boisé</span></h3>
<p> </p>
<p><span class="TextRun SCXW154872037 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW154872037 BCX0">Dans le monde de la parfumerie comme celui des saveurs, les <strong>épices </strong>éveillent les sens. Les notes épicées, telles que le poivre rose ou le safran, sont fréquemment utilisées dans certaines eaux de parfum pour femme. Ces notes </span><span class="NormalTextRun SCXW154872037 BCX0">offrent </span><span class="NormalTextRun SCXW154872037 BCX0">un <strong>caractère chaleureux</strong></span><span class="NormalTextRun SCXW154872037 BCX0"> et </span><strong><span class="NormalTextRun SCXW154872037 BCX0">envoutant</span></strong><span class="NormalTextRun SCXW154872037 BCX0"><strong> </strong>aux compositions parfumées.</span></span><span class="EOP SCXW154872037 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les parfums pour homme</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Les </span><strong>univers olfactifs du </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-homme.html" title="parfum homme"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfum homme</span></a>
</strong> <span style="font-weight: 400;">font appel à de plus en plus de familles de senteurs. Découvrez l’univers </span><strong>boisé, aquatique et aromatique</strong><span style="font-weight: 400;"> qui caractérise un grand nombre de parfums masculins.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum boisé</span></h3>
<p> </p>
<p><span class="TextRun SCXW217591098 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW217591098 BCX0">Les parfums boisés, mettent en avant des notes comme le <strong>santal</strong>, le <strong>cèdre</strong>, le <strong>vétiver </strong>ou le <strong>cyprès</strong>. Une seule essence de bois peut dominer la fragrance, ou plusieurs peuvent être combinées pour créer un parfum complexe.</span></span><span class="EOP SCXW217591098 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p><span class="NormalTextRun SCXW81231372 BCX0">Par exemple</span><span class="NormalTextRun SCXW81231372 BCX0"> le <strong>patchouli</strong>, originaire d’Asie, est fréquemment utilisé dans les compositions boisées</span><span class="NormalTextRun SCXW81231372 BCX0">, </span><span class="NormalTextRun SCXW81231372 BCX0">son extraction concentre ses arômes caractéristiques, à la fois riches et reconnaissables. Des accords <strong>épicés </strong>ou <strong>fruités </strong>viennent souvent compléter ces parfums pour en enrichir la palette olfactive.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum aquatique</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Les parfums aquatiques, relativement récents dans l’histoire de la parfumerie, r<span class="TextRun SCXW189372032 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW189372032 BCX0">egroupent des senteurs évoquant la brise de l’océan. Les notes <strong>iodées </strong>apportent des accords rappelant l’air marin. Ces parfums se combinent souvent avec des notes aromatiques telles que la <strong>sauge</strong>, la <strong>lavande </strong>ou le <strong>géranium</strong>, et peuvent également s’associer à des <strong>nuances boisées</strong> pour créer des compositions plus complexes</span></span></span><span style="font-weight: 400;">. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Parfum aromatique</span></h3>
<p> </p>
<p><span class="TextRun SCXW18537637 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW18537637 BCX0">Les parfums aromatiques pour homme regroupent des compositions à base d’<strong>herbes aromatiques</strong> telles que la <strong>lavande</strong>, la <strong>sauge</strong></span><span class="NormalTextRun SCXW18537637 BCX0"><strong> </strong>ou</span><span class="NormalTextRun SCXW18537637 BCX0"> la <strong>menthe</strong></span><span class="NormalTextRun SCXW18537637 BCX0">.</span><span class="NormalTextRun SCXW18537637 BCX0"> </span><span class="NormalTextRun SCXW18537637 BCX0">La combinaison de ces herbes aromatiques avec des notes d’agrumes donne des parfums perçus comme frais et légers</span><span class="NormalTextRun SCXW18537637 BCX0">. Dans certaines compositions, la <strong>fraîcheur des plantes aromatiques</strong> est combinée à des notes épicées pour enrichir la complexité d</span><span class="NormalTextRun SCXW18537637 BCX0">u parfum.</span></span><span class="EOP SCXW18537637 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les parfums mixtes</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Avec son large choix de </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-mixte.html" title="parfum mixte"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfum mixte</span></a>
</span><span style="font-weight: 400;">, </span><strong>Adopt joue avec les genres et les styles </strong><span style="font-weight: 400;">en proposant des univers olfactifs capables d’éveiller les sens des hommes comme des femmes.</span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Parfum agrume</span></h3>
<p> </p>
<p><span class="NormalTextRun SCXW14911630 BCX0">L</span><span class="NormalTextRun SCXW14911630 BCX0">es <strong>fragrances fraîches</strong> et <strong>volatiles </strong>des agrumes sont facilement reconnaissables dans chaque parfum. La <strong>bergamote</strong>, le <strong>citron </strong>ou la <strong>mandarine </strong>sont à la base de la composition de la plus ancienne des familles olfactives, celle des </span><strong><span class="NormalTextRun SCXW14911630 BCX0">hespéridées</span></strong><span class="NormalTextRun SCXW14911630 BCX0">. Ces notes <strong>acidulées </strong>sont très présentes dans l’eau de Cologne. Les parfums ou eaux de parfum de cette famille sont généralement appréciés aussi bien par les hommes que par les femmes.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum musqué</span></h3>
<p> </p>
<p><span class="TextRun SCXW67568603 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW67568603 BCX0">Les parfums musqués reposent principalement sur le <strong>musc</strong>, une note qui apporte <strong>douceur</strong>, <strong>chaleur </strong>et <strong>enveloppement</strong>. Selon les compositions, le musc peut révéler des nuances boisées ou légèrement poudrées. Par exemple, le musc blanc s’associe souvent à des <strong>notes florales</strong> telles que la rose, l’ylang-ylang ou d’autres fleurs, donnant naissance à des compositions à la fois <strong>délicates </strong>et <strong>sensuelles</strong></span><span class="NormalTextRun SCXW67568603 BCX0">. Il est utilisé aussi bien dans les parfums pour homme que pour femme, ainsi que dans des bougies parfumées ou d’autres produits parfumés.</span></span><span class="EOP SCXW67568603 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum oriental</span></h3>
<p> </p>
<p><span class="NormalTextRun SCXW64432054 BCX0">L</span><span class="NormalTextRun SCXW64432054 BCX0">es <strong>parfums orientaux</strong> sont caractérisés par des notes <strong>chaudes </strong>et <strong>douces</strong>, provenant d’ingrédients tels que la <strong>vanille</strong>, les <strong>baumes</strong>, la <strong>cire d’ambre</strong> ou le <strong>bois de oud</strong>. Cette famille est utilisée aussi bien dans les eaux de parfum pour homme que dans celles pour femme. Les notes orientales peuvent être <strong>poudrées</strong>, <strong>balsamiques </strong>ou <strong>ambrées</strong>, et elles se combinent souvent avec des notes boisées, florales ou fruitées pour créer des compositions riches et variées.</span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;">Les produits parfumés Adopt</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Eau de Cologne, huiles essentielles, coffrets, bougies parfumées : </span><strong>faites-vous plaisir avec l’offre très large des produits d’Adopt</strong><span style="font-weight: 400;">. Retrouvez les odeurs de votre eau de parfum préférée déclinées en une liste de nombreux produits parfumés à prix légers, notamment en </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gel-douche-parfume.html" title="gel douche"><span class="link text-[#ec3f82] hover:text-[#53385b]">gel douche</span></a>
</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/creme-et-lait-corps.html" title="lait corps"><span class="link text-[#ec3f82] hover:text-[#53385b]">lait corps</span></a>
</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/soin-des-mains.html" title="crèmes mains"><span class="link text-[#ec3f82] hover:text-[#53385b]">crèmes mains</span></a>
</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/maison/bougie-parfumee.html" title="bougie"><span class="link text-[#ec3f82] hover:text-[#53385b]">bougie</span></a>
</span><span style="font-weight: 400;">,....</span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Coffret parfum</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Vous souhaitez vous </span><strong>faire plaisir ou gâter vos proches</strong><span style="font-weight: 400;">, pendant les vacances, les fêtes de Noël ou à l’occasion du Black Friday ? Laissez-vous tenter par les </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/cadeaux/cadeaux-coffrets.html" title="cadeau coffret"><span class="link text-[#ec3f82] hover:text-[#53385b]">cadeau coffret</span></a>
</span><span style="font-weight: 400;">disponibles en stock en magasin ou en livraison. Qu'il s'agisse d’un </span><strong>coffret parfum, d’un nécessaire de toilette ou d’un assortiment de produits de beauté</strong><span style="font-weight: 400;">, vous trouverez de quoi combler votre moitié et satisfaire vos amis. </span></p>
<p> </p>
<p><strong>Avec des coffrets divers, </strong><span style="font-weight: 400;">vous avez l’embarras du choix ! Pour un </span><strong>rituel de soin du corps</strong><span style="font-weight: 400;">, profitez de coffrets associant une eau de parfum et un gel douche de la même fragrance. Pour découvrir la gamme des produits mixtes, optez pour un coffret de trois eaux de parfum. </span><strong>Le coffret rasage </strong><span style="font-weight: 400;">peut également être une excellente idée cadeau pour permettre à votre homme de prendre soin de lui.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Boîte cadeau</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Donnez de l’allure à vos </span><strong>cadeaux avec des emballages réutilisables aux formats très divers</strong><span style="font-weight: 400;"> et adaptés à tous les produits de beauté, de la petite pochette à la grande boîte. Vous pouvez, par exemple, opter pour un joli panier pour agencer avec goût votre sélection de produits parfumés. Réutilisable en rangement, il est aussi élégant que pratique. Choisissez le </span><strong>carrousel à parfums Adopt </strong><span style="font-weight: 400;">pour mettre en valeur vos produits préférés. </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Bougie parfumée</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Vous souhaitez vous téléporter dans les îles, diffuser l'ambiance de Noël ou vous envelopper dans un cocon d’amour et de douceur ? </span><strong>Choisissez parmi l’offre d’Adopt, la </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/bougies-parfumees.html" title="bougie"><span class="link text-[#ec3f82] hover:text-[#53385b]">bougie</span></a>
</strong><strong>qui correspond à vos attentes</strong><span style="font-weight: 400;">. Retrouvez les odeurs de vos produits de beauté Adopt Parfums avec ses élégantes bougies. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Eau de Cologne</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Pour vous accompagner dans vos journées chaudes et ensoleillées de l’été, </span><strong>l’eau de Cologne peut constituer votre meilleur allié</strong><span style="font-weight: 400;">. Profitez d’un spray de fraîcheur parfumée du produit de votre choix. Les notes classiques de l’eau de Cologne sont les senteurs hespéridées comme la</span><strong> fleur d'oranger</strong><span style="font-weight: 400;">. D’autres odeurs, notamment des </span><strong>fragrances florales et boisées</strong><span style="font-weight: 400;">, peuvent également se combiner. </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Diffuseur</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Plongez dans </span><strong>l’ambiance parfumée des </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/maison/parfums-d-interieur.html" title="diffuseurs"><span class="link text-[#ec3f82] hover:text-[#53385b]">diffuseurs</span></a>
</strong><strong> d’Adopt Parfums</strong><span style="font-weight: 400;">. En un instant, son parfum vous transporte dans un univers chaleureux et convivial. Laissez un sillage parfumé dans toutes les pièces de la maison en diffusant des </span><strong>senteurs agréables pour toute la famille</strong><span style="font-weight: 400;">.</span></p>
<p> </p>
<p> </p>
<h2>FAQ</h2>
<p> </p>
<h3>En quels formats sont disponibles les eaux de parfum chez Adopt ?</h3>
<p> </p>
<p>Les eaux de parfums Adopt sont disponibles en deux formats, <strong>30 ml </strong>et <strong>100 ml</strong>. Le plus petit est très pratique à glisser dans un sac ou une pochette. Sa petite taille peut également permettre d’<strong>essayer un parfum d'une nouvelle note olfactive</strong>, afin de savoir si cette nouveauté vous convient.</p>
<p> </p>
<p>Une fois votre maquillage réalisé, n’oubliez pas de vous parfumer avec l’un de nos best-sellers disponibles dans un coffret nouveauté ou à l’unité. </p> </div>
</div>
<div class="hidden">
<p> </p>
<p> </p>
<p><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-homme.html" title="Les parfums pour homme"><span class="link text-[#ec3f82] hover:text-[#53385b]">Les parfums pour homme</span></a>
</strong><span class="TextRun SCXW37099281 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW37099281 BCX0">explorent plusieurs familles olfactives, parmi lesquelles les univers boisés, aquatiques et aromatiques sont particulièrement fréquents. Ces familles contribuent à la diversité et à la richesse des compositions masculines.</span></span></p>
<p> </p>
<p><strong>Satisfaites toutes vos envies et variez les plaisirs parfumés</strong><span style="font-weight: 400;"> avec la gamme d’Adopt pour trouver le parfum qui vous ressemble !</span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les différents types de parfums</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Tous les produits parfumés sont élaborés à partir <span class="TextRun SCXW245118672 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW245118672 BCX0">d'<strong>huiles essentielles</strong> ou / et de</span><span class="NormalTextRun SCXW245118672 BCX0"> <strong>composés aromatiques de </strong></span><strong><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW245118672 BCX0">synthèse,</span><span class="NormalTextRun SCXW245118672 BCX0"> d’alcool et d’eau</span></strong></span></span><span style="font-weight: 400;">. Chaque solution possède ces ingrédients à des doses différentes, qu’il s’agisse de parfum, d’eau de parfum, d’eau de toilette ou d’eau de Cologne. Ces produits sont classés selon leur concentration en parfum : </span><strong>plus la concentration est élevée, plus la senteur est durable</strong><span style="font-weight: 400;">. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> L’eau de parfum </span></h3>
<p> </p>
<p><span style="font-weight: 400;">Moins concentrée que le parfum, l'eau de parfum a </span><span style="font-weight: 400;">un prix plus abordable et ses effluves restent prononcées et durables dans le temps. L’eau de parfum s’applique autant chez les hommes que chez les femmes. Pour que votre parfum reste sur votre peau plus longtemps, </span><strong>vaporisez le produit sur les points chauds du corps</strong><span style="font-weight: 400;">, c’est-à-dire les zones où les pulsations du cœur se font sentir sous la peau (nuque, poignets, tempes). L'eau de parfum peut également perdurer plus longtemps </span><strong>sur les cheveux ou les vêtements</strong><span style="font-weight: 400;">.</span></p>
<p> </p>
<h3><span style="font-weight: 400;"> L’eau de toilette </span></h3>
<p> </p>
<p><span class="TextRun SCXW169956574 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW169956574 BCX0">L’eau de toilette est généralement moins concentrée que l’eau de parfum. Sa tenue sur la peau est en général plus légère et peut durer quelques heures. Grâce à sa composition plus légère, elle est souvent <strong>appréciée pour un usage quotidien</strong> et particulièrement pendant les <strong>périodes estivales</strong>.</span></span></p>
<p> </p>
<h3><span style="font-weight: 400;">L’eau de Cologne</span></h3>
<p> </p>
<p><span class="TextRun SCXW43731050 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW43731050 BCX0">Composée d’une </span><span class="NormalTextRun SCXW43731050 BCX0">plus </span><span class="NormalTextRun SCXW43731050 BCX0">faible concentration de </span><span class="NormalTextRun SCXW43731050 BCX0">parfum</span><span class="NormalTextRun SCXW43731050 BCX0">, l’eau de Cologne se caractérise par une <strong>senteur légère et fraîche</strong>, avec une volatilité plus marquée que celle de l’eau de toilette</span><span class="NormalTextRun SCXW43731050 BCX0">.</span><span class="NormalTextRun SCXW43731050 BCX0"> </span><span class="NormalTextRun SCXW43731050 BCX0">Historiquement très présente dans la parfumerie, elle se distingue souvent par des compositions dominées par des <strong>notes </strong></span><strong><span class="NormalTextRun SpellingErrorV2Themed SCXW43731050 BCX0">hespéridées</span></strong><span class="NormalTextRun SCXW43731050 BCX0">, qui </span><span class="NormalTextRun SCXW43731050 BCX0">peuvent apporter</span><span class="NormalTextRun SCXW43731050 BCX0"> une <strong>sensation de fraîcheur</strong></span><span class="NormalTextRun SCXW43731050 BCX0">.</span></span><span class="EOP SCXW43731050 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les parfu</span><span style="font-weight: 400;">ms pour femme</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Le </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-femme.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">Parfum femme</span></a>
</span><span style="font-weight: 400;"> explore des </span><strong>univers olfactifs </strong><span style="font-weight: 400;">très nombreux : </span><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fleurs-et-romantisme.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">floraux</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fruits-et-plaisir.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">fruité</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/coton-et-douceur.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">délicats</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/gourmandise-et-seduction.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">gourmand</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/soleil-et-sensualite.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">Solaire</span></a>
</strong><strong>, </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/fraicheur-et-agrume.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">frais</span></a>
</strong><strong> et </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/envie-de-parfum/boise-et-caractere.html"><span class="link text-[#ec3f82] hover:text-[#53385b]">boisé</span></a>
</strong><span style="font-weight: 400;">.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum floral</span></h3>
<p><span style="font-weight: 400;"> </span></p>
<p><span style="font-weight: 400;">Cet univers olfactif créé pour la femme regroupe un éventail très large de </span><strong>nuances de fleurs aux senteurs très distinctes</strong><span style="font-weight: 400;">. Élaborés à partir d’une fleur ou de plusieurs variétés, les parfums floraux pour femme sont délicats et enveloppants. </span><strong>Rose, jasmin, fleur d'oranger</strong><span style="font-weight: 400;">, chaque fleur offre une douceur et une élégance particulière à une eau de parfum. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Parfum fruité</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Les parfums fruités sont prisés par de nombreuses femmes, ils permettent un </span><strong>choix presque infini des senteurs</strong><span style="font-weight: 400;">. Pêche, pomme ou encore noix de coco, les fruits apportent une touche d’originalité et de fraîcheur à la composition d’un parfum. Laissez-vous tenter par leurs </span><strong>senteurs sucrées et gourmandes </strong><span style="font-weight: 400;">qui vous rendront irrésistibles auprès des personnes que vous croiserez. Venez découvrir les </span><strong>odeurs des fruits rouges, les senteurs de litchi ou encore le parfum de l’ananas </strong><span style="font-weight: 400;">que propose Adopt dans sa collection de parfums fruités pour femme. </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum boisé</span></h3>
<p> </p>
<p><span class="TextRun SCXW154872037 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW154872037 BCX0">Dans le monde de la parfumerie comme celui des saveurs, les <strong>épices </strong>éveillent les sens. Les notes épicées, telles que le poivre rose ou le safran, sont fréquemment utilisées dans certaines eaux de parfum pour femme. Ces notes </span><span class="NormalTextRun SCXW154872037 BCX0">offrent </span><span class="NormalTextRun SCXW154872037 BCX0">un <strong>caractère chaleureux</strong></span><span class="NormalTextRun SCXW154872037 BCX0"> et </span><strong><span class="NormalTextRun SCXW154872037 BCX0">envoutant</span></strong><span class="NormalTextRun SCXW154872037 BCX0"><strong> </strong>aux compositions parfumées.</span></span><span class="EOP SCXW154872037 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les parfums pour homme</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Les </span><strong>univers olfactifs du </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-homme.html" title="parfum homme"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfum homme</span></a>
</strong> <span style="font-weight: 400;">font appel à de plus en plus de familles de senteurs. Découvrez l’univers </span><strong>boisé, aquatique et aromatique</strong><span style="font-weight: 400;"> qui caractérise un grand nombre de parfums masculins.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum boisé</span></h3>
<p> </p>
<p><span class="TextRun SCXW217591098 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW217591098 BCX0">Les parfums boisés, mettent en avant des notes comme le <strong>santal</strong>, le <strong>cèdre</strong>, le <strong>vétiver </strong>ou le <strong>cyprès</strong>. Une seule essence de bois peut dominer la fragrance, ou plusieurs peuvent être combinées pour créer un parfum complexe.</span></span><span class="EOP SCXW217591098 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p><span class="NormalTextRun SCXW81231372 BCX0">Par exemple</span><span class="NormalTextRun SCXW81231372 BCX0"> le <strong>patchouli</strong>, originaire d’Asie, est fréquemment utilisé dans les compositions boisées</span><span class="NormalTextRun SCXW81231372 BCX0">, </span><span class="NormalTextRun SCXW81231372 BCX0">son extraction concentre ses arômes caractéristiques, à la fois riches et reconnaissables. Des accords <strong>épicés </strong>ou <strong>fruités </strong>viennent souvent compléter ces parfums pour en enrichir la palette olfactive.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum aquatique</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Les parfums aquatiques, relativement récents dans l’histoire de la parfumerie, r<span class="TextRun SCXW189372032 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW189372032 BCX0">egroupent des senteurs évoquant la brise de l’océan. Les notes <strong>iodées </strong>apportent des accords rappelant l’air marin. Ces parfums se combinent souvent avec des notes aromatiques telles que la <strong>sauge</strong>, la <strong>lavande </strong>ou le <strong>géranium</strong>, et peuvent également s’associer à des <strong>nuances boisées</strong> pour créer des compositions plus complexes</span></span></span><span style="font-weight: 400;">. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Parfum aromatique</span></h3>
<p> </p>
<p><span class="TextRun SCXW18537637 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW18537637 BCX0">Les parfums aromatiques pour homme regroupent des compositions à base d’<strong>herbes aromatiques</strong> telles que la <strong>lavande</strong>, la <strong>sauge</strong></span><span class="NormalTextRun SCXW18537637 BCX0"><strong> </strong>ou</span><span class="NormalTextRun SCXW18537637 BCX0"> la <strong>menthe</strong></span><span class="NormalTextRun SCXW18537637 BCX0">.</span><span class="NormalTextRun SCXW18537637 BCX0"> </span><span class="NormalTextRun SCXW18537637 BCX0">La combinaison de ces herbes aromatiques avec des notes d’agrumes donne des parfums perçus comme frais et légers</span><span class="NormalTextRun SCXW18537637 BCX0">. Dans certaines compositions, la <strong>fraîcheur des plantes aromatiques</strong> est combinée à des notes épicées pour enrichir la complexité d</span><span class="NormalTextRun SCXW18537637 BCX0">u parfum.</span></span><span class="EOP SCXW18537637 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;"> Les parfums mixtes</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Avec son large choix de </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/parfum-mixte.html" title="parfum mixte"><span class="link text-[#ec3f82] hover:text-[#53385b]">parfum mixte</span></a>
</span><span style="font-weight: 400;">, </span><strong>Adopt joue avec les genres et les styles </strong><span style="font-weight: 400;">en proposant des univers olfactifs capables d’éveiller les sens des hommes comme des femmes.</span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Parfum agrume</span></h3>
<p> </p>
<p><span class="NormalTextRun SCXW14911630 BCX0">L</span><span class="NormalTextRun SCXW14911630 BCX0">es <strong>fragrances fraîches</strong> et <strong>volatiles </strong>des agrumes sont facilement reconnaissables dans chaque parfum. La <strong>bergamote</strong>, le <strong>citron </strong>ou la <strong>mandarine </strong>sont à la base de la composition de la plus ancienne des familles olfactives, celle des </span><strong><span class="NormalTextRun SCXW14911630 BCX0">hespéridées</span></strong><span class="NormalTextRun SCXW14911630 BCX0">. Ces notes <strong>acidulées </strong>sont très présentes dans l’eau de Cologne. Les parfums ou eaux de parfum de cette famille sont généralement appréciés aussi bien par les hommes que par les femmes.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum musqué</span></h3>
<p> </p>
<p><span class="TextRun SCXW67568603 BCX0" lang="FR-FR" xml:lang="FR-FR" data-contrast="none"><span class="NormalTextRun SCXW67568603 BCX0">Les parfums musqués reposent principalement sur le <strong>musc</strong>, une note qui apporte <strong>douceur</strong>, <strong>chaleur </strong>et <strong>enveloppement</strong>. Selon les compositions, le musc peut révéler des nuances boisées ou légèrement poudrées. Par exemple, le musc blanc s’associe souvent à des <strong>notes florales</strong> telles que la rose, l’ylang-ylang ou d’autres fleurs, donnant naissance à des compositions à la fois <strong>délicates </strong>et <strong>sensuelles</strong></span><span class="NormalTextRun SCXW67568603 BCX0">. Il est utilisé aussi bien dans les parfums pour homme que pour femme, ainsi que dans des bougies parfumées ou d’autres produits parfumés.</span></span><span class="EOP SCXW67568603 BCX0" data-ccp-props="{}"> </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Parfum oriental</span></h3>
<p> </p>
<p><span class="NormalTextRun SCXW64432054 BCX0">L</span><span class="NormalTextRun SCXW64432054 BCX0">es <strong>parfums orientaux</strong> sont caractérisés par des notes <strong>chaudes </strong>et <strong>douces</strong>, provenant d’ingrédients tels que la <strong>vanille</strong>, les <strong>baumes</strong>, la <strong>cire d’ambre</strong> ou le <strong>bois de oud</strong>. Cette famille est utilisée aussi bien dans les eaux de parfum pour homme que dans celles pour femme. Les notes orientales peuvent être <strong>poudrées</strong>, <strong>balsamiques </strong>ou <strong>ambrées</strong>, et elles se combinent souvent avec des notes boisées, florales ou fruitées pour créer des compositions riches et variées.</span></p>
<p> </p>
<p> </p>
<h2><span style="font-weight: 400;">Les produits parfumés Adopt</span></h2>
<p> </p>
<p><span style="font-weight: 400;">Eau de Cologne, huiles essentielles, coffrets, bougies parfumées : </span><strong>faites-vous plaisir avec l’offre très large des produits d’Adopt</strong><span style="font-weight: 400;">. Retrouvez les odeurs de votre eau de parfum préférée déclinées en une liste de nombreux produits parfumés à prix légers, notamment en </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/gel-douche-parfume.html" title="gel douche"><span class="link text-[#ec3f82] hover:text-[#53385b]">gel douche</span></a>
</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/creme-et-lait-corps.html" title="lait corps"><span class="link text-[#ec3f82] hover:text-[#53385b]">lait corps</span></a>
</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/soin-corps/soin-corps-par-produit/soin-des-mains.html" title="crèmes mains"><span class="link text-[#ec3f82] hover:text-[#53385b]">crèmes mains</span></a>
</span><span style="font-weight: 400;">, </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/maison/bougie-parfumee.html" title="bougie"><span class="link text-[#ec3f82] hover:text-[#53385b]">bougie</span></a>
</span><span style="font-weight: 400;">,....</span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Coffret parfum</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Vous souhaitez vous </span><strong>faire plaisir ou gâter vos proches</strong><span style="font-weight: 400;">, pendant les vacances, les fêtes de Noël ou à l’occasion du Black Friday ? Laissez-vous tenter par les </span><span style="font-weight: 400;"><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/cadeaux/cadeaux-coffrets.html" title="cadeau coffret"><span class="link text-[#ec3f82] hover:text-[#53385b]">cadeau coffret</span></a>
</span><span style="font-weight: 400;">disponibles en stock en magasin ou en livraison. Qu'il s'agisse d’un </span><strong>coffret parfum, d’un nécessaire de toilette ou d’un assortiment de produits de beauté</strong><span style="font-weight: 400;">, vous trouverez de quoi combler votre moitié et satisfaire vos amis. </span></p>
<p> </p>
<p><strong>Avec des coffrets divers, </strong><span style="font-weight: 400;">vous avez l’embarras du choix ! Pour un </span><strong>rituel de soin du corps</strong><span style="font-weight: 400;">, profitez de coffrets associant une eau de parfum et un gel douche de la même fragrance. Pour découvrir la gamme des produits mixtes, optez pour un coffret de trois eaux de parfum. </span><strong>Le coffret rasage </strong><span style="font-weight: 400;">peut également être une excellente idée cadeau pour permettre à votre homme de prendre soin de lui.</span></p>
<p> </p>
<h3><span style="font-weight: 400;">Boîte cadeau</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Donnez de l’allure à vos </span><strong>cadeaux avec des emballages réutilisables aux formats très divers</strong><span style="font-weight: 400;"> et adaptés à tous les produits de beauté, de la petite pochette à la grande boîte. Vous pouvez, par exemple, opter pour un joli panier pour agencer avec goût votre sélection de produits parfumés. Réutilisable en rangement, il est aussi élégant que pratique. Choisissez le </span><strong>carrousel à parfums Adopt </strong><span style="font-weight: 400;">pour mettre en valeur vos produits préférés. </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Bougie parfumée</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Vous souhaitez vous téléporter dans les îles, diffuser l'ambiance de Noël ou vous envelopper dans un cocon d’amour et de douceur ? </span><strong>Choisissez parmi l’offre d’Adopt, la </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/parfum/bougies-parfumees.html" title="bougie"><span class="link text-[#ec3f82] hover:text-[#53385b]">bougie</span></a>
</strong><strong>qui correspond à vos attentes</strong><span style="font-weight: 400;">. Retrouvez les odeurs de vos produits de beauté Adopt Parfums avec ses élégantes bougies. </span></p>
<p> </p>
<h3><span style="font-weight: 400;"> Eau de Cologne</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Pour vous accompagner dans vos journées chaudes et ensoleillées de l’été, </span><strong>l’eau de Cologne peut constituer votre meilleur allié</strong><span style="font-weight: 400;">. Profitez d’un spray de fraîcheur parfumée du produit de votre choix. Les notes classiques de l’eau de Cologne sont les senteurs hespéridées comme la</span><strong> fleur d'oranger</strong><span style="font-weight: 400;">. D’autres odeurs, notamment des </span><strong>fragrances florales et boisées</strong><span style="font-weight: 400;">, peuvent également se combiner. </span></p>
<p> </p>
<h3><span style="font-weight: 400;">Diffuseur</span></h3>
<p> </p>
<p><span style="font-weight: 400;">Plongez dans </span><strong>l’ambiance parfumée des </strong><strong><a class="widget block-category-link-inline font-medium" href="https://www.adopt.com/fr/maison/parfums-d-interieur.html" title="diffuseurs"><span class="link text-[#ec3f82] hover:text-[#53385b]">diffuseurs</span></a>
</strong><strong> d’Adopt Parfums</strong><span style="font-weight: 400;">. En un instant, son parfum vous transporte dans un univers chaleureux et convivial. Laissez un sillage parfumé dans toutes les pièces de la maison en diffusant des </span><strong>senteurs agréables pour toute la famille</strong><span style="font-weight: 400;">.</span></p>
<p> </p>
<p> </p>
<h2>FAQ</h2>
<p> </p>
<h3>En quels formats sont disponibles les eaux de parfum chez Adopt ?</h3>
<p> </p>
<p>Les eaux de parfums Adopt sont disponibles en deux formats, <strong>30 ml </strong>et <strong>100 ml</strong>. Le plus petit est très pratique à glisser dans un sac ou une pochette. Sa petite taille peut également permettre d’<strong>essayer un parfum d'une nouvelle note olfactive</strong>, afin de savoir si cette nouveauté vous convient.</p>
<p> </p>
<p>Une fois votre maquillage réalisé, n’oubliez pas de vous parfumer avec l’un de nos best-sellers disponibles dans un coffret nouveauté ou à l’unité. </p> </div>
<button @click="showMore($event)"
class="w-fit text-xs leading-tight font-montserrat font-medium underline uppercase"
x-show="isMoreContentActive">
<span :class="{ 'hidden': more }">Lire plus</span>
<span :class="{ 'hidden': !more }">Lire moins</span>
</button>
</div>
</div>
</div>
<script>
function initBottomSeo() {
return {
lineClampNb: 3,
more: false,
isMobile: window.outerWidth < 768,
baseHeight: 0,
maxHeight: null,
isMoreContentActive: false,
initMore($refs) {
let lineHeight;
const readMore = this.$refs.readmore;
this.baseHeight = readMore.clientHeight;
if (this.isMobile) {
lineHeight = readMore.dataset.lhmobile;
} else {
lineHeight = readMore.dataset.lhdesktop;
}
this.maxHeight = lineHeight * this.lineClampNb + 'px';
if (this.baseHeight > (lineHeight * this.lineClampNb)) {
readMore.style.height = this.maxHeight;
this.isMoreContentActive = true
}
},
showMore(e) {
let lineHeight;
const readMore = this.$refs.readmore;
if (this.isMobile) {
lineHeight = readMore.dataset.lhmobile;
} else {
lineHeight = readMore.dataset.lhdesktop;
}
this.maxHeight = lineHeight * this.lineClampNb;
if (this.more) {
this.maxHeight = lineHeight * this.lineClampNb + 'px';
} else {
this.maxHeight = 'auto';
}
readMore.style.height = this.maxHeight;
this.more = !this.more;
},
}
}
</script>
</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"><script>
addEventListener('DOMContentLoaded', () => {
for (const [selector, label] of Object.entries({"aside.sidebar-main":"Sidebar Main","aside.sidebar-additional":"Sidebar Additional"})) {
const target = document.querySelector(selector);
target && target.setAttribute('aria-label', label);
}
}, {once: true})
</script>
<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="UrXOn23iSepOAKRf" />
<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_69b7bda8639d2()"
@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_69b7bda8639d2() {
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_69b7bda86888d()"
@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_69b7bda86888d() {
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_69b7bda8693a2()"
@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_69b7bda8693a2() {
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_69b7bda869a92()"
@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_69b7bda869a92() {
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_69b7bda87a998()"
@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_69b7bda87a998() {
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":"MA","country_label":{"fr":"Maroc","es":"Marruecos","en":"Morocco","nl":"Marokko"},"locale_code":"default","locale_label":"fr","store_code":"ma-fr","destinationUrl":"https:\/\/www.adopt.com\/ma-fr\/"},{"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\/id\/1472"} }
}
</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>
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 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":1773705556},"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":1773705556},"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":1773705556},"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":"MwMHNkNWW0BRUEMKWwpJJAFFXlpdH1BWF1UICQJNUlZBVldcRRobEg8AFQ==","queueTime":0,"applicationTime":1616,"atts":"H0QEQAtMSE4=","errorBeacon":"bam.nr-data.net","agent":""}</script></body>
</html>