1<!doctype html> 2<html lang="fr"> 3<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#"> 4 <meta charset="utf-8"/>
4<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"],capture_payloads:"none"},api:{register:{duplicate_data_to_container:false,enabled:true}},session_trace:{sampling_rate:10.0,mode:"FIXED_RATE",enabled:true,error_sampling_rate:100.0},performance:{capture_marks:true,capture_detail:true,capture_measures:true},browser_consent_mode:{enabled:true},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1119998320",accountID:"3194062",trustKey:"1322840",xpid:"VwcOVVZVChAJU1RQBgkHUVI=",licenseKey:"NRJS-a02fffc1c342b7076d9",applicationID:"975218076",browserID:"1119998320"};;/*! For license information please see nr-loader-spa-1.323.0.min.js.LICENSE.txt */ 5(()=>{var e={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 a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});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 a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.323.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";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),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,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 a(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,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
5e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(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])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(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)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},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 o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},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])=>{a[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()[a[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,o,()=>new s.y(o)):new s.y(o)}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),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},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))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},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})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},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}},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{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},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)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},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}},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})},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})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
5const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
5if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){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}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
5o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={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,a.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(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.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()}r.d(t,["NT",0,o])},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)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}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)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=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)o.call(e,n)&&(t[n]=e[n])}
5(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}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[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
5;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{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"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});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 a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"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)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},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)}},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("log",e,t)}start(){return this.#e("start")}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)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={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"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.323.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.323.0.PROD:";r.l=(n,i,s,a)=>
5{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-ORjtmy+nQMgxbu0os8+oTRa5sPzbinyuWSvpZrrstVLIaHofRRlfODdH+oUmkIgeQpM+vPf3vG/4RzvCsFVh1A==",249:"sha512-o7+K6xC0z3TqynjVxpd+jgiSgqy8rrPeRcUSqt5J0Rqg5Su5CycLMYfpwiM3WBCHiNDrG5aZoXJQ6HRc335XYQ==",212:"sha512-kRvBt1IYQDBnClTEWNaE8sDFqbXXM3Vdyf972Uf4MFbJxl7u3KmdO+jdB1H4achPEoT9YtNXHswaESey6sCH0A==",238:"sha512-U5EGmyYbFVR2UMNAuZJ7fTgVVtPa5b8RPMySDwXo7z3frRdkUJ2x1VAQTLQCeBab8VlGVGRV8FiSHIn/pwN72A=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.323.0.PROD"]=self["webpackChunk:NRBA-1.323.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},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,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},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:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
5ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.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){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.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,l.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"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target: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++v},listeningForIframeMessages:!1};var w=r(9232);var R=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};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),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,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
5{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.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,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.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 n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||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,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!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 se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
5null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
5dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
5imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)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,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
5return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{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,a=(0,ye.ZF)(),o=(0,ye.el)(),c=Date.now();this.agentRef.runtime?.timeKeeper?.ready&&(s=Math.floor(this.agentRef.runtime.timeKeeper.correctAbsoluteTimestamp(c)));var d={spanId:a,traceId:o,timestamp:c,timestampCorrected:s};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,o),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,s??c,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,o,s??c,r,n,i)),d}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 g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}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,Ge.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 Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.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}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(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"};g.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};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,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){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(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){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
5!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(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=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.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&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.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,Ge.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)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(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,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(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?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
5if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,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.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)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],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
5);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(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 Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.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 _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[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,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
5class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.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,_.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,St.delete(this),r.emit("ws",[this.nrData,this.targets],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}=xt(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 g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
5h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.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})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
5 6<meta name="title" content="Collection Balzac: Abonnement"/> 7<meta name="description" content="Découvrez la Bibliothèque Balzac : La Comédie humaine et les chefs-d’œuvre de Balzac réunis dans une édition de luxe. Abonnez-vous dès maintenant."/> 8<meta name="keywords" content="Tienda RBA "/> 9<meta name="robots" content="INDEX,FOLLOW"/> 10<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/> 11<title>Collection Balzac: abonnement</title> 12<link rel="stylesheet" type="text/css" rel="stylesheet" type="text/css" href="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/Paycomet_Payment/css/styles.css" /> 13<link rel="stylesheet" type="text/css" media="all" href="https://boutique.rbafrance.fr/static/version1790894180/_cache/merged/7d7aef7abd23bb1accc5968608ff5d69.css" />
14<script type="text/javascript" defer="true" src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/Rba_PageBuilder/js/pagebuilder/button-hover.js"></script>
vendor: 1 bytes, line 14
14
15<script type="text/javascript" src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/js/lib/swiper-bundle.min.js"></script>
vendor: 1 bytes, line 15
15
16<script type="text/javascript" src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/Rba_GoogleAnalytics/js/head.js"></script>
vendor: 1 bytes, line 16
16
17<script type="text/javascript" src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/js/vimeo/vimeo.player.min.js"></script>
vendor: 1 bytes, line 17
17
18<script type="text/javascript" src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/Hyva_NwdthemesRevslider/public/assets/js/require.min.js"></script>
vendor: 1 bytes, line 18
18
19<script type="text/javascript" src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/Hyva_NwdthemesRevslider/public/assets/js/jquery.min.js"></script>
19 20<link rel="canonical" href="https://boutique.rbafrance.fr/collections/balzac" /> 21<link rel="icon" type="image/x-icon" href="https://boutique.rbafrance.fr/media/favicon/default/rba-favicon.png" /> 22<link rel="shortcut icon" type="image/x-icon" href="https://boutique.rbafrance.fr/media/favicon/default/rba-favicon.png" /> 23<style> 24body.frontend-ngme .advantage-list .advantage-list-item .icon.icon-checkmark, body.frontend-ngmv .advantage-list .advantage-list-item .icon.icon-checkmark, body.frontend-ngmh .advantage-list .advantage-list-item .icon.icon-checkmark { 25 background: #fc0; 26 color: black; 27} 28 29.tags-wrapper .border-plus { 30 display: inline-flex; 31 border: 1.5px solid #fcfc01; 32 padding: 5px 12px 5px 12px; 33 border-radius: 8px; 34 margin-right: 14px; 35 margin-top: 20px; 36 margin-bottom: 20px; 37} 38.page-main .breadcrumbs { 39 padding-top: 24px; 40 padding-bottom: 10px; 41} 42 43.tags-wrapper .border-no-plus { 44 display: inline-flex; 45 border: 1.5px solid #e0e0e0; 46 padding: 5px 12px 5px 12px; 47 border-radius: 8px; 48 margin-right: 14px; 49 margin-top: 20px; 50 margin-bottom: 20px; 51} 52 53.products-hover:hover+.revistas-categories-wrapper:before, .revistas-categories-wrapper:hover:before { 54right: 50%; 55 transform: translateX(-5px); 56} 57 58@media only screen and (max-width: 1023px){ 59.pagebuilder-slide-wrapper .pagebuilder-slide-button { 60 -moz-transition: opacity 500ms ease; 61 -o-transition: opacity 500ms ease; 62 -webkit-transition: opacity 500ms ease; 63 font-size: 20px !important; 64 height: 60px; 65 margin: 10px 0 0 0 !important; 66 max-width: 370px; 67 min-width: 208px; 68 text-align: center; 69 transition: opacity 500ms ease; 70 width: auto !important; 71 word-break: break-word; 72} 73} 74@media only screen and (max-width: 1023px){ 75.collection .collection-slider .slick-dots { 76 bottom: -35px; 77} 78} 79.catalog-product-view .product-label { 80 height: 20px; 81 padding: 3px 10px; 82 font-size: 14px; 83 border-radius: 8px; 84 margin-right: 10px; 85} 86.addtocart-widget .product-add-form .field.radio-suscription input[type="radio"]:not(.input-to-button):checked+label { 87 border-radius: 8px; 88 background: #eeeeee; 89} 90.sp_social_share_inline_widget_widget_under_cart { 91 justify-content: flex-start; 92 display: none; 93} 94.sidebar-additional { 95 -webkit-flex-grow: 1; 96 flex-grow: 1; 97 -webkit-flex-basis: 100%; 98 flex-basis: 100%; 99 -ms-flex-order: 2; 100 -webkit-order: 2; 101 order: 2; 102 display: none; 103} 104.navigation .navbar { 105 overflow: visible !important; 106} 107div#paycomet-cvc2 { 108 border-right: 1px solid #e5e5e5; 109} 110.hyva_checkout-index-index #payment h2.text-base.text-black.font-medium.font-primary { 111 display: ruby-text; 112} 113.adyen-checkout__paypal__button.adyen-checkout__paypal__button--pay-later { 114 display: none; 115} 116@media (max-width: 480px) { 117 .add-collectable-modal #process-subscription::before { 118 content: ""; 119 position: absolute; 120 top: 0; 121 left: 0; 122 width: 100%; 123 height: 100%; 124 background: none !important; 125 z-index: -1; 126 } 127} 128 129.page-product-collectable .page-main-full-width .columns { 130 display:none; 131} 132 133.page-product-collectable .page-main { 134 margin-top: 0; 135} 136span.sale-date {display: none;} 137 138</style> 139<!--uSZMHnByPDXHUlOKasXVV0L0b9EahKVE--> 140<meta name="google-site-verification" content="owVLZDADOYCUnAz7r8h3h3tUrSKuP36OkGFpTm4Th18" /> 141
141<script> 142 dataLayer = [] 143 </script>
143 144 145 <!-- Google Tag Manager --> 146 <!--
146<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 147 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 148 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 149 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 150 })(window,document,'script','dataLayer', '');</script>
150--> 151 <!-- End Google Tag Manager --> 152 153 <!-- Google Analytics 4--> 154
154<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 155 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 156 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 157 'https://ssgtm-tienda.rba.es/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 158 })(window,document,'script','dataLayer', 'GTM-MWHPSHX');</script>
158 159 <!-- End Google Analytics 4--> 160 161 162 163
163<script> 164 dataLayer = (typeof dataLayer !== 'undefined') ? dataLayer : []; 165 </script>
165 166 167 168 169 170
170<script>window.gdprAppliesGlobally=true;(function(){function a(e){if(!window.frames[e]){if(document.body&&document.body.firstChild){var t=document.body;var n=document.createElement("iframe");n.style.display="none";n.name=e;n.title=e;t.insertBefore(n,t.firstChild)} 171 else{setTimeout(function(){a(e)},5)}}}function e(n,r,o,c,s){function e(e,t,n,a){if(typeof n!=="function"){return}if(!window[r]){window[r]=[]}var i=false;if(s){i=s(e,t,n)}if(!i){window[r].push({command:e,parameter:t,callback:n,version:a})}}e.stub=true;function t(a){if(!window[n]||window[n].stub!==true){return}if(!a.data){return} 172 var i=typeof a.data==="string";var e;try{e=i?JSON.parse(a.data):a.data}catch(t){return}if(e[o]){var r=e[o];window[n](r.command,r.parameter,function(e,t){var n={};n[c]={returnValue:e,success:t,callId:r.callId};a.source.postMessage(i?JSON.stringify(n):n,"*")},r.version)}} 173 if(typeof window[n]!=="function"){window[n]=e;if(window.addEventListener){window.addEventListener("message",t,false)}else{window.attachEvent("onmessage",t)}}}e("__tcfapi","__tcfapiBuffer","__tcfapiCall","__tcfapiReturn");a("__tcfapiLocator");(function(e){ 174 var t=document.createElement("script");t.id="spcloader";t.type="text/javascript";t.async=true;t.src="https://sdk.privacy-center.org/"+e+"/loader.js?target="+document.location.hostname;t.charset="utf-8";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n)})("7e63dec6-f028-44f2-bebc-a5b9a642e28f")})();</script>
vendor: 1 bytes, line 174
174
175<script> 176 var BASE_URL = 'https://boutique.rbafrance.fr/collections/'; 177 var THEME_PATH = 'https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR'; 178 var COOKIE_CONFIG = { 179 "expires": null, 180 "path": "\u002F", 181 "domain": ".boutique.rbafrance.fr", 182 "secure": true, 183 "lifetime": "86400", 184 "cookie_restriction_enabled": false }; 185 var CURRENT_STORE_CODE = 'collections'; 186 var CURRENT_WEBSITE_ID = '11'; 187 188 window.hyva = window.hyva || {} 189 190 window.cookie_consent_groups = window.cookie_consent_groups || {} 191 window.cookie_consent_groups['necessary'] = true; 192 193 window.cookie_consent_config = window.cookie_consent_config || {}; 194 window.cookie_consent_config['necessary'] = [].concat( 195 window.cookie_consent_config['necessary'] || [], 196 [ 197 'user_allowed_save_cookie', 198 'form_key', 199 'mage-messages', 200 'private_content_version', 201 'mage-cache-sessid', 202 'last_visited_store', 203 'section_data_ids' 204 ] 205 ); 206</script>
vendor: 1 bytes, line 206
206
207<script> 208 'use strict'; 209 (function( hyva, undefined ) { 210 211 function lifetimeToExpires(options, defaults) { 212 213 const lifetime = options.lifetime || defaults.lifetime; 214 215 if (lifetime) { 216 const date = new Date; 217 date.setTime(date.getTime() + lifetime * 1000); 218 return date; 219 } 220 221 return null; 222 } 223 224 function generateRandomString() { 225 226 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 227 length = 16; 228 229 let formKey = '', 230 charactersLength = allowedCharacters.length; 231 232 for (let i = 0; i < length; i++) { 233 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 234 } 235 236 return formKey; 237 } 238 239 const sessionCookieMarker = {noLifetime: true} 240 241 const cookieTempStorage = {}; 242 243 const internalCookie = { 244 get(name) { 245 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 246 return v ? v[2] : null; 247 }, 248 set(name, value, days, skipSetDomain) { 249 let expires, 250 path, 251 domain, 252 secure, 253 samesite; 254 255 const defaultCookieConfig = { 256 expires: null, 257 path: '/', 258 domain: null, 259 secure: false, 260 lifetime: null, 261 samesite: 'lax' 262 }; 263 264 const cookieConfig = window.COOKIE_CONFIG || {}; 265 266 expires = days && days !== sessionCookieMarker 267 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 268 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 269 270 path = cookieConfig.path || defaultCookieConfig.path; 271 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 272 secure = cookieConfig.secure || defaultCookieConfig.secure; 273 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 274 275 document.cookie = name + "=" + encodeURIComponent(value) + 276 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 277 (path ? '; path=' + path : '') + 278 (domain ? '; domain=' + domain : '') + 279 (secure ? '; secure' : '') + 280 (samesite ? '; samesite=' + samesite : 'lax'); 281 }, 282 isWebsiteAllowedToSaveCookie() { 283 const allowedCookies = this.get('user_allowed_save_cookie'); 284 if (allowedCookies) { 285 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 286 287 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 288 } 289 return false; 290 }, 291 getGroupByCookieName(name) { 292 const cookieConsentConfig = window.cookie_consent_config || {}; 293 let group = null; 294 for (let prop in cookieConsentConfig) { 295 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 296 if (cookieConsentConfig[prop].includes(name)) { 297 group = prop; 298 break; 299 } 300 } 301 return group; 302 }, 303 isCookieAllowed(name) { 304 const cookieGroup = this.getGroupByCookieName(name); 305 return cookieGroup 306 ? window.cookie_consent_groups[cookieGroup] 307 : this.isWebsiteAllowedToSaveCookie(); 308 }, 309 saveTempStorageCookies() { 310 for (const [name, data] of Object.entries(cookieTempStorage)) { 311 if (this.isCookieAllowed(name)) { 312 this.set(name, data['value'], data['days'], data['skipSetDomain']); 313 delete cookieTempStorage[name]; 314 } 315 } 316 } 317 }; 318 319 hyva.getCookie = (name) => { 320 const cookieConfig = window.COOKIE_CONFIG || {}; 321 322 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 323 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 324 } 325 326 return internalCookie.get(name); 327 } 328 329 hyva.setCookie = (name, value, days, skipSetDomain) => { 330 const cookieConfig = window.COOKIE_CONFIG || {}; 331 332 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 333 cookieTempStorage[name] = {value, days, skipSetDomain}; 334 return; 335 } 336 return internalCookie.set(name, value, days, skipSetDomain); 337 } 338 339 340 hyva.setSessionCookie = (name, value, skipSetDomain) => { 341 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 342 } 343 344 hyva.getBrowserStorage = () => { 345 const browserStorage = window.localStorage || window.sessionStorage; 346 if (!browserStorage) { 347 console.warn('Browser Storage is unavailable'); 348 return false;
349 } 350 try { 351 browserStorage.setItem('storage_test', '1'); 352 browserStorage.removeItem('storage_test'); 353 } catch (error) { 354 console.warn('Browser Storage is not accessible', error); 355 return false; 356 } 357 return browserStorage; 358 } 359 360 hyva.postForm = (postParams) => { 361 const form = document.createElement("form"); 362 363 let data = postParams.data; 364 365 if (! postParams.skipUenc && ! data.uenc) { 366 data.uenc = btoa(window.location.href); 367 } 368 form.method = "POST"; 369 form.action = postParams.action; 370 371 Object.keys(postParams.data).map(key => { 372 const field = document.createElement("input"); 373 field.type = 'hidden' 374 field.value = postParams.data[key]; 375 field.name = key; 376 form.appendChild(field); 377 }); 378 379 const form_key = document.createElement("input"); 380 form_key.type = 'hidden'; 381 form_key.value = hyva.getFormKey(); 382 form_key.name="form_key"; 383 form.appendChild(form_key); 384 385 document.body.appendChild(form); 386 387 form.submit(); 388 } 389 390 hyva.getFormKey = function () { 391 let formKey = hyva.getCookie('form_key'); 392 393 if (!formKey) { 394 formKey = generateRandomString(); 395 hyva.setCookie('form_key', formKey); 396 } 397 398 return formKey; 399 } 400 401 hyva.formatPrice = (value, showSign, options = {}) => { 402 const formatter = new Intl.NumberFormat( 403 'fr\u002DFR', 404 Object.assign({ 405 style: 'currency', 406 currency: 'EUR', 407 signDisplay: showSign ? 'always' : 'auto' 408 }, options) 409 ); 410 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 411 formatter.formatToParts(value).map(({type, value}) => { 412 switch (type) { 413 case 'currency': 414 return '\u20AC' || value; 415 case 'minusSign': 416 return '- '; 417 case 'plusSign': 418 return '+ '; 419 default : 420 return value; 421 } 422 }).reduce((string, part) => string + part) : 423 formatter.format(value); 424 } 425 426 const formatStr = function (str, nStart) { 427 const args = Array.from(arguments).slice(2); 428 429 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 430 const idx = parseInt(n) - nStart; 431 432 if (args[idx] === null || args[idx] === void 0) { 433 return m; 434 } 435 return p.length % 2 436 ? p.slice(0, -1).replace('%%', '%') + args[idx] 437 : p.replace('%%', '%') + n; 438 }) 439 } 440 441 hyva.str = function (string) { 442 const args = Array.from(arguments); 443 args.splice(1, 0, 1); 444 445 return formatStr.apply(undefined, args); 446 } 447 448 hyva.strf = function () { 449 const args = Array.from(arguments); 450 args.splice(1, 0, 0); 451 452 return formatStr.apply(undefined, args); 453 } 454 455 /** 456 * Take a html string as `content` parameter and 457 * extract an element from the DOM to replace in 458 * the current page under the same selector, 459 * defined by `targetSelector` 460 */ 461 hyva.replaceDomElement = (targetSelector, content) => { 462 // Parse the content and extract the DOM node using the `targetSelector` 463 const parser = new DOMParser(); 464 const doc = parser.parseFromString(content, 'text/html'); 465 const contentNode = doc.querySelector(targetSelector); 466 467 // Bail if content can't be found 468 if (!contentNode) { 469 return; 470 } 471 472 hyva.activateScripts(contentNode) 473 474 // Replace the old DOM node with the new content
475 document.querySelector(targetSelector).replaceWith(contentNode); 476 477 // Reload customerSectionData and display cookie-messages if present 478 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 479 hyva.initMessages(); 480 } 481 482 hyva.activateScripts = (contentNode) => { 483 // Extract all the script tags from the content. 484 // Script tags won't execute when inserted into a dom-element directly, 485 // therefore we need to inject them to the head of the document. 486 const tmpScripts = contentNode.getElementsByTagName('script'); 487 488 if (tmpScripts.length > 0) { 489 // Push all script tags into an array 490 // (to prevent dom manipulation while iterating over dom nodes) 491 const scripts = []; 492 for (let i = 0; i < tmpScripts.length; i++) { 493 scripts.push(tmpScripts[i]); 494 } 495 496 // Iterate over all script tags and duplicate+inject each into the head 497 for (let i = 0; i < scripts.length; i++) { 498 let script = document.createElement('script'); 499 script.innerHTML = scripts[i].innerHTML; 500 501 document.head.appendChild(script); 502 503 // Remove the original (non-executing) node from the content 504 scripts[i].parentNode.removeChild(scripts[i]); 505 } 506 } 507 return contentNode; 508 } 509 510 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 511 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 512 513 let currentTrap; 514 515 const focusableElements = (rootElement) => { 516 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 517 return Array.from(rootElement.querySelectorAll(selector)) 518 .filter(el => { 519 return el.style.display !== 'none' 520 && !el.disabled 521 && el.tabIndex !== -1 522 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 523 }) 524 } 525 526 const focusTrap = (e) => { 527 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 528 if (!isTabPressed) return; 529 530 const focusable = focusableElements(currentTrap) 531 const firstFocusableElement = focusable[0] 532 const lastFocusableElement = focusable[focusable.length - 1] 533 534 e.shiftKey 535 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 536 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 537 }; 538 539 hyva.releaseFocus = (rootElement) => { 540 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 541 currentTrap.removeEventListener('keydown', focusTrap) 542 currentTrap = null 543 } 544 } 545 hyva.trapFocus = (rootElement) => { 546 if (!rootElement) return; 547 hyva.releaseFocus() 548 currentTrap = rootElement 549 rootElement.addEventListener('keydown', focusTrap) 550 const firstElement = focusableElements(rootElement)[0] 551 firstElement && firstElement.focus() 552 } 553 554 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 555 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 556 557 }( window.hyva = window.hyva || {} )); 558</script>
vendor: 1 bytes, line 558
558
559<script> 560 if (!window.IntersectionObserver) { 561 window.IntersectionObserver = function (callback) { 562 this.observe = el => el && callback(this.takeRecords()); 563 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 564 this.disconnect = () => {}; 565 this.unobserve = () => {}; 566 } 567 } 568</script>
568 569 570<meta property="og:type" content="product" /> 571<meta property="og:title" 572 content="Bibliothèque Balzac" /> 573<meta property="og:image" 574 content="https://boutique.rbafrance.fr/media/catalog/product/F/7/F719_130.jpg?optimize=low&bg-color=255,255,255&fit=bounds&height=265&width=265&canvas=265:265" /> 575<meta property="og:description" 576 content="L’œuvre monumentale du maître du roman français." /> 577<meta property="og:url" content="https://boutique.rbafrance.fr/collections/balzac" /> 578 <meta property="product:price:amount" content="0"/> 579 <meta property="product:price:currency" 580 content="EUR"/> 581<meta name="generator" content="Powered by Slider Revolution 6.6.7.1 - responsive, Mobile-Friendly Slider Plugin with comfortable drag and drop interface." />
582<script>function setREVStartSize(t){window.RSIW=void 0===window.RSIW?window.innerWidth:window.RSIW,window.RSIH=void 0===window.RSIH?window.innerHeight:window.RSIH;try{var h=0===(h=document.getElementById(t.c).parentNode.offsetWidth)||isNaN(h)||"fullwidth"==t.l||"fullwidth"==t.layout?window.RSIW:h;if(t.tabw=void 0===t.tabw?0:parseInt(t.tabw),t.thumbw=void 0===t.thumbw?0:parseInt(t.thumbw),t.tabh=void 0===t.tabh?0:parseInt(t.tabh),t.thumbh=void 0===t.thumbh?0:parseInt(t.thumbh),t.tabhide=void 0===t.tabhide?0:parseInt(t.tabhide),t.thumbhide=void 0===t.thumbhide?0:parseInt(t.thumbhide),t.mh=void 0===t.mh||""==t.mh||"auto"===t.mh?0:parseInt(t.mh,0),"fullscreen"===t.layout||"fullscreen"===t.l)d=Math.max(t.mh,window.RSIH);else{for(var e in t.gw=Array.isArray(t.gw)?t.gw:[t.gw],t.rl)void 0!==t.gw[e]&&0!==t.gw[e]||(t.gw[e]=t.gw[e-1]);for(var e in t.gh=void 0===t.el||""===t.el||Array.isArray(t.el)&&0==t.el.length?t.gh:t.el,t.gh=Array.isArray(t.gh)?t.gh:[t.gh],t.rl)void 0!==t.gh[e]&&0!==t.gh[e]||(t.gh[e]=t.gh[e-1]);var i,a=new Array(t.rl.length),r=0;for(e in t.tabw=t.tabhide>=h?0:t.tabw,t.thumbw=t.thumbhide>=h?0:t.thumbw,t.tabh=t.tabhide>=h?0:t.tabh,t.thumbh=t.thumbhide>=h?0:t.thumbh,t.rl)a[e]=t.rl[e]<window.RSIW?0:t.rl[e];for(e in i=a[0],a)i>a[e]&&0<a[e]&&(i=a[e],r=e);var w=h>t.gw[r]+t.tabw+t.thumbw?1:(h-(t.tabw+t.thumbw))/t.gw[r],d=t.gh[r]*w+(t.tabh+t.thumbh)}w=document.getElementById(t.c);null!==w&&w&&(w.style.height=d+"px"),null!==(w=document.getElementById(t.c+"_wrapper"))&&w&&(w.style.height=d+"px",w.style.display="block")}catch(t){console.log("Failure at Presize of Slider:"+t)}};</script>
582 583
584<script> 585 let depUrls = [ 586 "Hyva_NwdthemesRevslider/public/assets/js/rs6.min.js", 587 "Nwdthemes_Revslider/public/assets/js/vimeo.player.min.js" 588 ]; 589 590 let urls = [ 591 "Nwdthemes_Revslider/public/assets/js/rbtools.min.js", 592 "Nwdthemes_Revslider/public/assets/js/dev/rs6.main.js", 593 "Nwdthemes_Revslider/public/assets/js/dev/rs6.carousel.js", 594 "Nwdthemes_Revslider/public/assets/js/dev/rs6.actions.js", 595 "Nwdthemes_Revslider/public/assets/js/dev/rs6.layeranimation.js", 596 "Nwdthemes_Revslider/public/assets/js/dev/rs6.navigation.js", 597 "Nwdthemes_Revslider/public/assets/js/dev/rs6.panzoom.js", 598 "Nwdthemes_Revslider/public/assets/js/dev/rs6.parallax.js", 599 "Nwdthemes_Revslider/public/assets/js/dev/rs6.slideanims.js", 600 "Nwdthemes_Revslider/public/assets/js/dev/rs6.video.js" 601 ]; 602 603 function addScripts (array, scriptClass = '') { 604 array.forEach((el) => { 605 const script = document.createElement('script'); 606 script.type = 'text/javascript'; 607 let test = `https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/`; 608 script.src = test + el; 609 script.async = true; 610 if(scriptClass !== '') { 611 script.classList.add(scriptClass); 612 } 613 document.head.appendChild(script); 614 }); 615 } 616 617 window.addEventListener('DOMContentLoaded', () => { 618 addScripts(depUrls, 'onload'); 619 620 document.querySelector('.onload').onload = function() { 621 addScripts(urls); 622 }; 623 }, {once: true, passive: true}); 624</script>
624 625</head> 626<body id="html-body" itemtype="http://schema.org/Product" itemscope="itemscope" class="page-product-collectable catalog-product-view product-balzac page-layout-1column frontend-f719 page-layout-cms-full-width"> 627 628 629 <!-- Google Tag Manager (noscript) --> 630 <!-- <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=" 631 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>--> 632 <!-- End Google Tag Manager (noscript) --> 633
633<script> 634 window.mail_id = window.mail_id || ''; 635 </script>
635 636 637
637<script> 638 let dlObject = {"event":"custom_page_view","event_name":"page_view","ga4data":{"event":"ga4ecommerce","event_name":"view_item","currency":"EUR","value":"16.98","items":[{"item_id":"F719\/C-00005648","item_name":"bibliotheque_balzac","affiliation":"online_store","coupon":"","currency":"EUR","discount":"","index":1,"item_brand":"balzac","item_list_id":"","item_list_name":"","item_variant":"","price":16.98,"quantity":1,"gift_id":"","gift_name":"","item_category":"collections","item_category2":"nouveautes"}]},"page_type":"subscription_page_collectible","page_url":"https:\/\/boutique.rbafrance.fr\/collections\/balzac","page_title":"collection_balzac_abonnement","brand":"balzac","rba_user_id":"","user_type":"lead"}; 639 let dataAdditional = ""; 640 let itemDetails = {"event":"ga4ecommerce","event_name":"view_item","currency":"EUR","value":"16.98","items":[{"item_id":"F719\/C-00005648","item_name":"bibliotheque_balzac","affiliation":"online_store","coupon":"","currency":"EUR","discount":"","index":1,"item_brand":"balzac","item_list_id":"","item_list_name":"","item_variant":"","price":16.98,"quantity":1,"gift_id":"","gift_name":"","item_category":"collections","item_category2":"nouveautes"}]}; 641 dataLayer.push(dlObject); 642 dataLayer.push(dataAdditional); 643 dataLayer.push(itemDetails); 644 </script>
644 645 646 <!-- Google Analytics 4 (noscript) --> 647 <noscript><iframe src="https://ssgtm-tienda.rba.es/ns.html?id=GTM-MWHPSHX" 648 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 649 <!-- End Google Analytics 4 (noscript) --> 650 651
651<script type="text/x-magento-init"> 652 { 653 "*": { 654 "Amasty_InvisibleCaptcha/js/action/am-recaptcha-configure": { 655 "formsToProtect": "form\u005Bid\u003D\u0022amform\u002Dform\u002D1213\u0022\u005D,form\u005Bid\u003D\u0022amform\u002Dform\u002D244\u0022\u005D,form\u005Bid\u003D\u0022amform\u002Dform\u002D247\u0022\u005D", 656 "isEnabledOnPayments": "", 657 "checkoutRecaptchaValidateUrl": "https://boutique.rbafrance.fr/collections/amcapthca/checkout/validate/", 658 "invisibleCaptchaCustomForm": "0", 659 "recaptchaConfig": { 660 "lang": "hl\u003Des", 661 "theme": "light", 662 "badge": "bottomright", 663 "sitekey": "6LfLlLwpAAAAAHKx-NoJ4Zog2EnCkLYcOaOpx2Ba", 664 "size": "normal", 665 "isInvisible": false, 666 "recaptchaVersion": 2 }, 667 "reCaptchaErrorMessage": "Prove you are not a robot" 668 } 669 } 670 } 671 </script>
671 672 673
673<script> 674 // Fix to prevent 'no reCaptcha Token' error while slow site loading. 675 // Submit button should catch am-captcha.js initialization8 first 676 (function () { 677 if (document.readyState === 'loading') { 678 document.addEventListener('DOMContentLoaded', onReadyStateListener); 679 } else { 680 onReadyState(); 681 } 682 683 function onReadyStateListener() { 684 onReadyState(); 685 } 686 687 function onReadyState (formsOnPage) { 688 if (typeof formsOnPage === 'undefined') { 689 let formsToProtect = "form\u005Bid\u003D\u0022amform\u002Dform\u002D1213\u0022\u005D,form\u005Bid\u003D\u0022amform\u002Dform\u002D244\u0022\u005D,form\u005Bid\u003D\u0022amform\u002Dform\u002D247\u0022\u005D"; 690 let forms = formsToProtect.split(','); 691 692 formsOnPage = []; 693 forms.forEach(form => { 694 let existingForm = form ? document.querySelectorAll(form) : []; 695 696 if (existingForm.length) { 697 formsOnPage.push(existingForm); 698 } 699 }) 700 } 701 702 formsOnPage.forEach(form => { 703 let submit = form[0].querySelector('[type="submit"]'); 704 if (submit) { 705 let isAlreadyDisabled = submit.getAttribute('disabled'); 706 707 if (!isAlreadyDisabled) { 708 submit.setAttribute('disabled', true); 709 submit.setAttribute('am-captcha-protect', true); 710 } 711 } 712 }) 713 } 714 715 })(); 716 </script>
716 717 718 <link rel="stylesheet" type="text/css" media="all" href="https://boutique.rbafrance.fr/media/rba/configed_css/F719/design_F719_20260714_171824.css"> 719<input name="form_key" type="hidden" value="BJ3IJV1J2xV39W98" /> 720 <noscript> 721 <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> 722 <div class="container text-center"> 723 <p> 724 <strong>Javascript est désactivé dans votre navigateur.</strong> 725 <span> 726 Pour une meilleure expérience sur notre site, assurez-vous d’activer JavaScript dans votre navigateur. </span> 727 </p> 728 </div> 729 </section> 730 </noscript> 731 732
733<script> 734 document.body.addEventListener('touchstart', () => {}, {passive: true}) 735</script>
735 736
737<script> 738 'use strict'; 739 (function(hyva) { 740 const formValidationRules = { 741 required(value, options, field, context) { 742 const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, 743 msg = 'Ce\u0020champ\u0020est\u0020obligatoire.'; 744 745 if (el.type === 'radio' || el.type === 'checkbox') { 746 return (value === undefined || value.length === 0) ? msg : true; 747 } 748 749 el.setAttribute('required', ''); 750 el.checkValidity(); 751 752 return el.validity.valueMissing ? msg : true; 753 }, 754 maxlength(value, options, field, context) { 755 const n = Number(options) 756 if (value.length > n) { 757 return n === 1 758 ? hyva.strf('Please\u0020enter\u0020no\u0020more\u0020than\u00201\u0020character.') 759 : hyva.strf('Veuillez\u0020saisir\u0020pas\u0020plus\u0020de\u0020\u00250\u0020caract\u00E8res.', options) 760 } 761 return true; 762 }, 763 minlength(value, options, field, context) { 764 const n = Number(options) 765 if (value.length > 0 && value.length < n) { 766 return n === 1 767 ? hyva.strf('Please\u0020enter\u0020at\u0020least\u00201\u0020character.') 768 : hyva.strf('Veuillez\u0020entrer\u0020au\u0020moins\u0020\u00250\u0020caract\u00E8res.', options) 769 } 770 return true; 771 }, 772 max(value, options, field, context) { 773 field.element.setAttribute('max', options); 774 field.element.checkValidity(); 775 if (field.element.validity.rangeOverflow) { 776 return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); 777 } 778 return true; 779 }, 780 min(value, options, field, context) { 781 field.element.setAttribute('min', options); 782 field.element.checkValidity(); 783 if (field.element.validity.rangeUnderflow) { 784 return hyva.strf('Please\u0020enter\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00250\u0022.', options); 785 } 786 return true; 787 }, 788 step(value, options, field, context) { 789 field.element.setAttribute('step', options); 790 field.element.checkValidity(); 791 if (field.element.validity.stepMismatch) { 792 const val = Number(options); 793 return hyva.strf('Please\u0020enter\u0020a\u0020valid\u0020value.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00250\u0022\u0020and\u0020\u0022\u00251\u0022.', Math.floor(val), Math.ceil(val)); 794 } 795 return true; 796 }, 797 pattern(value, options, field, context) { 798 field.element.setAttribute('pattern', options); 799 field.element.checkValidity(); 800 if (field.element.validity.patternMismatch) { 801 return field.element.title 802 ? field.element.title 803 : 'Veuillez\u0020respecter\u0020le\u0020format\u0020demand\u00E9.' 804 } 805 return true; 806 }, 807 email(value, options, field, context) { 808 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; 809 if (value.length > 0 && !rule.test(value)) { 810 return 'Saisissez\u0020un\u0020email\u0020valide.'; 811 } 812 return true; 813 }, 814 password(value, options, field, context) { 815 const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; 816 if (value.length > 0 && !rule.test(value)) { 817 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'; 818 } 819 return true; 820 }, 821 equalTo(value, options, field, context) { 822 const dependencyField = context.fields[options].element; 823 if (value !== dependencyField.value) { 824 const dependencyFieldName = dependencyField.label || dependencyField.title || dependencyField.name; 825 return hyva.strf('This\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00250\u0022.', dependencyFieldName); 826 } 827 return true; 828 } 829 }; 830 831 function raceSome(promises, pred) { 832 return new Promise((resolve, reject) => { 833 834 if (promises.length === 0) { 835 return resolve(); 836 } 837 838 let settled = false, nDone = 0; 839 840 const resolveIf = v => { 841 if (!settled && (pred(v) || ++nDone === promises.length)) { 842 settled = true; 843 resolve(v); 844 } 845 return v; 846 } 847 848 promises.map(promise => {
849 promise.then(resolveIf).catch(reason => { 850 settled = true; 851 reject(reason) 852 }); 853 return promise; 854 }); 855 }); 856 } 857 858 function getRules(element) { 859 let rules = {}; 860 const BROWSER_ATTRS = ['min', 'max', 'required', 'minlength', 'maxlength', 'step', 'pattern']; 861 const DEFAULT_TYPES = ['email']; 862 BROWSER_ATTRS.forEach(attrName => { 863 if (element.hasAttribute(attrName)) { 864 rules[attrName] = element.getAttribute(attrName); 865 } 866 }) 867 if (DEFAULT_TYPES.includes(element.type)) { 868 rules[element.type] = true; 869 } 870 871 if (element.dataset.validate) { 872 try { 873 Object.assign(rules, JSON.parse(element.dataset.validate)); 874 } catch (error) { 875 console.error('Validator error. Cannot parse data-validate attribute of element:\n', element); 876 } 877 } 878 879 return rules; 880 } 881 882 function isInvalidRuleResult(ruleState) { 883 return typeof ruleState === 'string' || !ruleState; 884 } 885 886 async function runValidateFn(rule, options, value, field) { 887 return formValidationRules[rule](value, options, field, this); 888 } 889 890 function generateId() { 891 let id; 892 do { 893 id = `${this.idPrefix}-${++this.idSeq}`; 894 } while (document.getElementById(id)); 895 return id; 896 } 897 898 function isVisible(element) { 899 const el = element.type !== 'hidden' ? element : (element.parentElement || {}); 900 return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length) 901 } 902 903 function elementWillValidate(element) { 904 return (element.willValidate || element.type === 'hidden') 905 && element.tagName !== 'BUTTON' 906 && element.disabled === false 907 && !(element.tagName === 'INPUT' && element.type === 'submit') 908 && (element.hasAttribute('data-validate-hidden') || isVisible(element)) 909 } 910 911 function createMessageContainer(el, fieldWrapperClassName) { 912 if (! el.parentElement) { 913 return; 914 } 915 const refocus = document.activeElement === el; 916 const wrapper = document.createElement('div'); 917 wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' ')); 918 el.parentElement.insertBefore(wrapper, el); 919 wrapper.appendChild(el); 920 refocus && document.activeElement !== el && el.focus(); 921 return wrapper; 922 } 923 924 function containerNotFound(selector, el) { 925 const msg = `Cannot find message container element ${selector} of ${el.name}`; 926 console.error(msg, el); 927 throw msg; 928 } 929 930 function createTextInputFrom(el) { 931 const text = document.createElement('INPUT'); 932 text.type = 'text'; 933 text.value = el.value; 934 return text; 935 } 936 937 function classNamesToSelector(classNames) { 938 return classNames.split(' ') 939 .filter(className => className.length > 0) 940 .map(className => `.${className}`) 941 .join('') 942 } 943 944 function hasMessagesWrapper(field, messagesWrapperClassName) { 945 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 946 } 947 948 function getMessagesWrapper(field, messagesWrapperClassName) { 949 if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) { 950 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 951 } 952 953 const msgWrapper = document.createElement('ul'); 954 msgWrapper.id = generateId.call(this); 955 msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' ')); 956 957 const container = this.getMessageContainer(field); 958 const guestDetailsComment = field.element.closest('#guest-details') 959 && container.querySelector('[data-form-element-comment]'); 960 961 // Guest details only: keep validation errors above the informational comment. 962 if (guestDetailsComment && guestDetailsComment.parentElement) { 963 guestDetailsComment.parentElement.insertBefore(msgWrapper, guestDetailsComment); 964 } else { 965 container.appendChild(msgWrapper); 966 } 967 968 return msgWrapper; 969 } 970 971 function getCheckedValues(field) { 972 const name = field.element.name.replace(/([\\"])/g, '\\$1'); 973 const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked'); 974 return Array.from(elements).map(el => el.value); 975 } 976 977 978 function formValidation(formElement, options) { 979 // Disable browser default validation 980 if (formElement.tagName === 'FORM') { 981 formElement.setAttribute('novalidate', ''); 982 } else { 983 console.error('formValidation can be initialized only on FORM element', formElement); 984 return; 985 } 986 987 options = Object.assign({ 988 fieldWrapperClassName: 'field field-reserved', 989 messagesWrapperClassName: 'messages', 990 validClassName: 'field-success', 991 invalidClassName: 'field-error', 992 pageMessagesWrapperSelector: null, 993 scrollToFirstError: true, 994 }, options || {}); 995 996 return { 997 state: { 998 valid: false, 999 }, 1000 fields: {}, 1001 idSeq: 0, 1002 idPrefix: formElement.id || 'vld-msg', 1003 setupFields(elements) { 1004 this.fields = {};
1005 Array.from(elements).forEach(element => { 1006 if (elementWillValidate(element)) { 1007 this.setupField(element); 1008 } 1009 }); 1010 }, 1011 setupField(element) { 1012 if (elementWillValidate(element)) { 1013 const rules = getRules(element); 1014 if (Object.keys(rules).length > 0) { 1015 if (this.fields[element.name]) { 1016 Object.assign(this.fields[element.name].rules, rules); 1017 } else { 1018 this.fields[element.name] = { 1019 element, 1020 rules: rules, 1021 state: { 1022 valid: null, 1023 rules: {} 1024 } 1025 } 1026 } 1027 } 1028 } else { 1029 console.error('Element will not validate', element); 1030 } 1031 }, 1032 onSubmit(event) { 1033 if (event.target.tagName === 'FORM') { 1034 event.preventDefault(); 1035 1036 this.validate() 1037 .then(() => event.target.submit()) 1038 .catch(invalidElements => {}); 1039 } 1040 }, 1041 onChange(event) { 1042 if (!Object.keys(this.fields).length) { 1043 this.setupFields(formElement.elements); 1044 } 1045 if (!Object.keys(this.fields).includes(event.target.name)) { 1046 this.setupField(event.target); 1047 } 1048 const field = this.fields[event.target.name]; 1049 1050 this.validateField(field); 1051 }, 1052 validateSafe() { 1053 return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {})) 1054 }, 1055 validate() { 1056 if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) { 1057 this.setupFields(formElement.elements); 1058 } 1059 return new Promise(async (resolve, reject) => { 1060 if (formElement.elements) { 1061 await raceSome(this.validateFields(), result => result !== true) 1062 const invalidFields = Object.values(this.fields).filter(field => !field.state.valid); 1063 this.state.valid = invalidFields.length === 0; 1064 if (this.state.valid) { 1065 resolve(); 1066 } else { 1067 if (options.scrollToFirstError && invalidFields.length > 0) { 1068 invalidFields[0].element.focus() 1069 invalidFields[0].element.select && invalidFields[0].element.select(); 1070 } 1071 reject(invalidFields.map(field => field.element)); 1072 } 1073 } 1074 }); 1075 }, 1076 validateFields() { 1077 const fields = Object.values(this.fields); 1078 1079 fields.forEach(field => { 1080 this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName) 1081 }); 1082 return fields.map(field => this.validateField(field)) 1083 }, 1084 validateField(field) { 1085 if (! field || ! elementWillValidate(field.element)) { 1086 return new Promise(resolve => resolve(true)) 1087 } 1088 1089 let value; 1090 if (field.element.type === 'checkbox') { 1091 value = getCheckedValues(field); 1092 } else if (field.element.type === 'radio') { 1093 value = getCheckedValues(field)[0] || undefined; 1094 } else if (field.element.tagName === 'SELECT' && field.element.multiple) { 1095 value = Array.from(field.element.selectedOptions).map(opt => opt.value); 1096 } else { 1097 value = field.element.value; 1098 } 1099 1100 const rules = field.rules || {}; 1101 1102 field.state.valid = true;
1103 this.showFieldState(field); 1104 1105 1106 const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => { 1107 return runValidateFn.call(this, rule, rules[rule], value, field).then(result => { 1108 field.state.rules[rule] = result; 1109 return result; 1110 }) 1111 }); 1112 1113 return new Promise(resolve => { 1114 Promise.all(fieldValidations).then(results => { 1115 field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult) 1116 this.showFieldState(field); 1117 resolve(field.state.valid); 1118 }) 1119 }); 1120 }, 1121 getMessagesByField(field) { 1122 const messages = []; 1123 const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule])); 1124 1125 field.rules && Object.keys(field.rules).forEach((rule) => { 1126 if (invalidRules.includes(rule)) { 1127 const customMessage = field.element.getAttribute('data-msg-' + rule); 1128 const message = customMessage ? customMessage : field.state.rules[rule]; 1129 const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule])); 1130 1131 if (typeof message !== 'string') { 1132 messages.push(hyva.strf('Validation rule "%0" failed.', rule)); 1133 } else if (Array.isArray(ruleOptions)) { 1134 ruleOptions.unshift(message); 1135 messages.push(hyva.strf.apply(null, ruleOptions)); 1136 } else { 1137 messages.push(hyva.strf(message, ruleOptions)); 1138 } 1139 } 1140 }); 1141 return messages; 1142 }, 1143 /** @deprecated */ 1144 getFieldWrapper(field) { 1145 return this.getMessageContainer(field) 1146 }, 1147 getMessageContainer(field) { 1148 let container; 1149 const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector; 1150 if (pageSelector) { 1151 container = document.querySelector(pageSelector) 1152 || containerNotFound(pageSelector, field.element) 1153 } else { 1154 const containerSelector = classNamesToSelector(options.fieldWrapperClassName); 1155 container = field.element.closest(containerSelector) 1156 || createMessageContainer(field.element, options.fieldWrapperClassName) 1157 || containerNotFound(containerSelector, field.element); 1158 } 1159 1160 return container; 1161 }, 1162 showFieldState(field) { 1163 const container = this.getMessageContainer(field), 1164 hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName); 1165 container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages); 1166 container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages); 1167 this.createErrorMessage(field, this.getMessagesByField(field)); 1168 1169 if (field.state.valid) { 1170 field.element.removeAttribute('aria-invalid'); 1171 } else { 1172 const formElement = field.element.form; 1173 const skipFormKo = formElement && ( 1174 formElement.id === 'accountcreate-popup' 1175 || formElement.id === 'accountcreate' 1176 || ( 1177 formElement.closest('#hyva-checkout-main') 1178 && formElement.querySelector('input[name="email_address"]') 1179 ) 1180 ); 1181 1182 if (!skipFormKo) { 1183 let err_message = field.state.rules.required; 1184 if(field.state.rules.required == true){ 1185 let fieldName = field.element.name; 1186 err_message = field.state.rules[fieldName]; 1187 } 1188 dataLayer.push({ 1189 event: 'custom_event', 1190 event_name: 'form_ko', 1191 element: field.element.name, 1192 error_message: err_message, 1193 form_id: 'checkout-form', 1194 form_name: 'checkout-form-name' 1195 }); 1196 } 1197 field.element.setAttribute('aria-invalid', 'true'); 1198 if (! document.activeElement) { 1199 field.element.focus(); 1200 } 1201 } 1202 }, 1203 removeMessages(field, messagesClass) { 1204 if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) { 1205 return; 1206 } 1207 1208 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName); 1209 const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
1210 Array.from(messages).forEach(msg => msg.remove()); 1211 if (msgWrapper && msgWrapper.childElementCount === 0) { 1212 msgWrapper.remove(); 1213 } 1214 }, 1215 createErrorMessage(field, messages) { 1216 this.removeMessages(field, options.messagesWrapperClassName); 1217 field.element.removeAttribute('aria-errormessage'); 1218 1219 if (!field.state.valid) { 1220 const msgWrapper = this.addMessages(field, options.messagesWrapperClassName, messages) 1221 field.element.setAttribute('aria-errormessage', msgWrapper.id); 1222 } 1223 }, 1224 /** @deprecated */ 1225 createMessage(field, message) { 1226 return this.addMessages(field, options.messagesWrapperClassName, message); 1227 }, 1228 addMessages(field, messagesClass, messages) { 1229 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass); 1230 1231 (Array.isArray(messages) ? messages : [messages]).forEach((message) => { 1232 const li = document.createElement('li'); 1233 li.innerText = message; 1234 li.setAttribute('data-msg-field', field.element.name); 1235 msgWrapper.appendChild(li); 1236 }); 1237 1238 return msgWrapper; 1239 }, 1240 setField(name, value) { 1241 this.fields[name].element.value = value; 1242 this.fields[name].element.dispatchEvent((new Event('input'))); 1243 this.validateField(this.fields[name]); 1244 } 1245 } 1246 } 1247 1248 hyva.formValidation = formValidation; 1249 hyva.formValidation.rules = formValidationRules; 1250 hyva.formValidation.addRule = (name, validator) => { 1251 formValidationRules[name] = validator; 1252 } 1253 }(window.hyva = window.hyva || {})); 1254</script>
1254 1255 1256<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 1257 contentarea" 1258 href="#contentarea"> 1259 <span> 1260 Allez au contenu </span> 1261</a> 1262 <div class="top-bar bg-[#454545] h-14 lg:h-12 text-white flex items-center justify-center" x-data="initTopbar()"> 1263 <div class="top-bar-wrapper hidden lg:block"> 1264 <div class="swiper"> 1265 <div class="swiper-wrapper max-w-[100vw]"> 1266 <div class="swiper-slide !flex items-center justify-center !h-12"> 1267 <span class="sliderDesktop"> 1268 <a style="color: #fff" href=https://boutique.rbafrance.fr/collections/japon> <b>NOUVEAUTÉ</b> | La nouvelle collection Japon est arrivée. <u>Abonnez-vous dès maintenant!</u></a> </span> 1269 </div> 1270 <div class="swiper-slide !flex items-center justify-center !h-12"> 1271 <span class="sliderDesktop"> 1272 <a style="color: #fff" href=https://boutique.rbafrance.fr/collections/balzac> <b>NOUVEAUTÉ</b> | La nouvelle collection Balzac est arrivée. <u>Abonnez-vous dès aujourd’hui!</u></a> </span> 1273 </div> 1274 <div class="swiper-slide !flex items-center justify-center !h-12"> 1275 <span class="sliderDesktop"> 1276 <a style="color: #fff" href=https://boutique.rbafrance.fr/collections/lovecraft> <b>NOUVEAUTÉ</b> | La nouvelle collection Lovecraft est arrivée. <u>Abonnez-vous dès aujourd’hui!</u></a> </span> 1277 </div> 1278 </div> 1279 </div> 1280 </div> 1281 <div class="top-bar-wrapper-mobile block lg:hidden"> 1282 <div class="swiper"> 1283 <div class="swiper-wrapper max-w-[100vw]"> 1284 <div class="swiper-slide !flex items-center text-center justify-center !h-14 lg:!h-12 px-2 lg:px-0"> 1285 <span class="sliderDesktop"> 1286 <a style="color: #fff" href=https://boutique.rbafrance.fr/collections/japon> <b>NOUVEAUTÉ</b> | La nouvelle collection Japon est arrivée. <u>Abonnez-vous dès maintenant!</u></a> </span> 1287 </div> 1288 <div class="swiper-slide !flex items-center text-center justify-center !h-14 lg:!h-12 px-2 lg:px-0"> 1289 <span class="sliderDesktop"> 1290 <a style="color: #fff" href=https://boutique.rbafrance.fr/collections/balzac> <b>NOUVEAUTÉ</b> | La nouvelle collection Balzac est arrivée. <u>Abonnez-vous dès aujourd’hui!</u></a> </span> 1291 </div> 1292 <div class="swiper-slide !flex items-center text-center justify-center !h-14 lg:!h-12 px-2 lg:px-0"> 1293 <span class="sliderDesktop"> 1294 <a style="color: #fff" href=https://boutique.rbafrance.fr/collections/lovecraft> <b>NOUVEAUTÉ</b> | La nouvelle collection Lovecraft est arrivée. <u>Abonnez-vous dès aujourd’hui!</u></a> </span> 1295 </div> 1296 </div> 1297 </div> 1298 </div> 1299 </div> 1300
1300<script type="text/javascript"> 1301 /** 1302 * Normalize value for GA4 conventions 1303 */ 1304 function normalizeGA4Value(value) { 1305 if (!value || value === '') { 1306 return ''; 1307 } 1308 value = String(value); 1309 value = value.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); 1310 value = value.toLowerCase(); 1311 value = value.replace(/ /g, '_'); 1312 value = value.replace(/[^a-z0-9_\-]/g, ''); 1313 value = value.substring(0, 100); 1314 return value; 1315 } 1316 1317 const links = document.querySelectorAll('.top-bar a'); 1318 1319 links.forEach(link => { 1320 link.addEventListener('click', function(event) { 1321 let spanElement = link.parentElement; 1322 let contentSpan = spanElement.innerText; 1323 let valueHref = link.getAttribute('href'); 1324 if(!(valueHref.indexOf("http") !== -1)) { 1325 let urlCurrent = window.location.href; 1326 const fourIndexSlash = urlCurrent.indexOf("/", urlCurrent.indexOf("/", urlCurrent.indexOf("/", urlCurrent.indexOf("/") + 1) + 1) + 1); 1327 const urlBase = urlCurrent.substring(0, fourIndexSlash); 1328 valueHref = urlBase + valueHref; 1329 } 1330 let content = contentSpan.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); 1331 dataLayer.push({ 1332 "event": "custom_event", 1333 "event_name": "click_top_bar", 1334 "link_text": normalizeGA4Value(content), 1335 "link_url": normalizeGA4Value(valueHref) 1336 }); 1337 }); 1338 }); 1339 function initTopbar () { 1340 return { 1341 init () { 1342 document.addEventListener ('DOMContentLoaded', function () { 1343 const initSwiper = function(selector) { 1344 const element = document.querySelector(selector); 1345 if (!element) { 1346 return null; 1347 } 1348 1349 const slideCount = element.querySelectorAll('.swiper-slide').length; 1350 if (slideCount <= 1) { 1351 return null; 1352 } 1353 1354 const shouldLoop = slideCount > 1; 1355 1356 return new Swiper(selector, { 1357 slidesPerView: 1, 1358 centeredSlides: true, 1359 loop: shouldLoop, 1360 autoplay: { 1361 delay: 3500, 1362 disableOnInteraction: false, 1363 }, 1364 }); 1365 }; 1366 1367 const deliveriesSwiper = initSwiper('.top-bar-wrapper .swiper'); 1368 const deliveriesSwiperMobile = initSwiper('.top-bar-wrapper-mobile .swiper'); 1369 1370 setTimeout(function() { 1371 if (deliveriesSwiper && deliveriesSwiper.autoplay) { 1372 deliveriesSwiper.autoplay.start(); 1373 } 1374 if (deliveriesSwiperMobile && deliveriesSwiperMobile.autoplay) { 1375 deliveriesSwiperMobile.autoplay.start(); 1376 } 1377 }, 2000); 1378 }); 1379 } 1380 } 1381 } 1382 </script>
vendor: 1 bytes, line 1382
1382
1383<script> 1384 function initHeader () { 1385 return { 1386 searchOpen: false, 1387 cart: {}, 1388 headerHidden: false, 1389 topbarHidden: false, 1390 lastScrollY: 0, 1391 isMobileViewport: false, 1392 usesItalianMenu: true, 1393 isProductPage: true, 1394 getData(data) { 1395 if (data.cart) { this.cart = data.cart } 1396 }, 1397 init() { 1398 if (!this.usesItalianMenu || !this.isProductPage) { 1399 return; 1400 } 1401 1402 this.lastScrollY = window.scrollY; 1403 this.isMobileViewport = window.matchMedia('(max-width: 1023px)').matches; 1404 this.updatePageHeaderClass(); 1405 1406 let ticking = false; 1407 window.addEventListener('scroll', () => { 1408 if (!ticking) { 1409 window.requestAnimationFrame(() => { 1410 this.handleScroll(); 1411 ticking = false; 1412 }); 1413 ticking = true; 1414 } 1415 }, { passive: true }); 1416 1417 window.addEventListener('resize', () => { 1418 this.isMobileViewport = window.matchMedia('(max-width: 1023px)').matches; 1419 if (!this.isMobileViewport) { 1420 this.headerHidden = false; 1421 this.topbarHidden = false; 1422 this.updatePageHeaderClass(); 1423 } 1424 }, { passive: true }); 1425 }, 1426 isMobileMenuOpen() { 1427 const panel = document.querySelector('#menuMobile > div.fixed'); 1428 return panel && panel.classList.contains('translate-x-0'); 1429 }, 1430 handleScroll() { 1431 if (!this.usesItalianMenu || !this.isProductPage || !this.isMobileViewport || this.isMobileMenuOpen()) { 1432 if (this.headerHidden || this.topbarHidden) { 1433 this.headerHidden = false; 1434 this.topbarHidden = false; 1435 this.updatePageHeaderClass(); 1436 } 1437 return; 1438 } 1439 1440 const currentScrollY = window.scrollY; 1441 const scrollDelta = currentScrollY - this.lastScrollY; 1442 1443 if (currentScrollY <= 10) { 1444 this.headerHidden = false; 1445 this.topbarHidden = false; 1446 } else if (scrollDelta > 5) { 1447 this.headerHidden = true; 1448 this.topbarHidden = true; 1449 } else if (scrollDelta < -5) { 1450 this.headerHidden = false; 1451 this.topbarHidden = true; 1452 } 1453 1454 this.lastScrollY = currentScrollY; 1455 this.updatePageHeaderClass(); 1456 }, 1457 updatePageHeaderClass() { 1458 if (!this.usesItalianMenu || !this.isProductPage) { 1459 return; 1460 } 1461 1462 const hidden = this.headerHidden && this.isMobileViewport; 1463 const topbarHidden = this.topbarHidden && this.isMobileViewport; 1464 this.$el.classList.toggle('header-scroll-hidden', hidden); 1465 1466 const pageHeader = this.$el.closest('header.page-header'); 1467 if (pageHeader) { 1468 pageHeader.classList.toggle('header-black-hidden', hidden); 1469 pageHeader.classList.toggle('header-topbar-hidden', topbarHidden); 1470 } 1471 } 1472 } 1473 } 1474</script>
1474 1475<div id="header" 1476 class="bg-black z-30 w-full relative top-0 h-14 lg:h-12 lg:border-b lg:border-neutral-neutral85" 1477 x-data="initHeader()" 1478 @keydown.window.escape="searchOpen = false;" 1479 @private-content-loaded.window="getData(event.detail.data)" 1480 @toggle-mobile-menu.window="headerHidden = false; topbarHidden = false; updatePageHeaderClass()"> 1481 <div class="container flex items-center justify-between w-full pl-[10px] lg:pl-3 pr-[10px] lg:pr-4 py-3 mx-auto mt-0 h-full border-b border-neutral-neutral85 lg:border-b-0"> 1482 <div class="bg-black w-full h-full lg:block hidden" style="width: calc(100% - 34px);margin-left: 29px;margin-bottom: -23px;top: 0px;position: absolute;"></div> 1483 1484 <!--Logo--> 1485 <div class="logo z-10 ml-12 lg:ml-0"> 1486 <div class="order-1 sm:order-2 lg:order-1 sm:w-auto sm:pb-0 float-left sm:py-0 lg:py-0"> 1487 <a class="flex items-center text-xl font-medium tracking-wide text-gray-800 1488 no-underline hover:no-underline font-title max-w-[180px] lg:max-w-full" 1489 href="https://boutique.rbafrance.fr" 1490 title="" 1491 aria-label="store logo" 1492 onclick="eventTopMenuLogo(this)"> 1493 <img src="https://boutique.rbafrance.fr/media/logo/default/logo_rba.svg" 1494 title="" 1495 alt="" 1496 class="max-h-[20px]" 1497 /> 1498 </a> 1499</div>
1500<script> 1501 function eventTopMenuLogo(element) { 1502 dataLayer.push({ 1503 "event": "custom_event", 1504 "event_name": "click_top_menu", 1505 "link_text": "rba_logo", 1506 "link_url": element.href 1507 }); 1508 } 1509</script>
1509 1510 </div> 1511 1512 <!--Main Navigation--> 1513 <div x-data="initMenuMobile_6ac67dc9a729c()" 1514 class="order-2 absolute sm:order-1 lg:order-2 navigation lg:hidden" 1515 id="menuMobile" 1516> 1517 <div class="flex items-baseline justify-between menu-icon"> 1518 <div class="z-50 flex justify-end w-full"> 1519 <a @click="$dispatch('toggle-mobile-menu')" 1520 class="flex items-center justify-center cursor-pointer mr-2" 1521 :class="{'ml-auto': open }"> 1522 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" class="w-10 h-10" :class="{ 'hidden' : !open, 'block': open }" role="img"> 1523<path d="M12 12L28 28M28 12L12 28" stroke="white" stroke-linecap="round"/> 1524</svg> 1525 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" class="w-10 h-10" :class="{ 'hidden' : open, 'block': !open }" role="img"> 1526<path d="M10 20H30M10 13.3333H30M10 26.6666H30" stroke="white" stroke-linecap="round" stroke-linejoin="round"/> 1527</svg> 1528 1529 </a> 1530 </div> 1531 </div> 1532 1533 <template x-if="collectionPage"> 1534 <div class="absolute w-max top-[50%] left-[40px] -translate-y-2/4 max-w-[calc(100vw-150px)]"> 1535 <img class="logo-collection col-md-3 w-full logo d-none d-md-flex" src="https://boutique.rbafrance.fr/media/catalog/tmp/frontend/Logo_web_2_1.svg" alt=""> 1536 </div> 1537 </template> 1538 <!-- mobile --> 1539 <div @load.window="setActiveMenu($root)" 1540 class="collection-header-white top-[56px] border-t h-screen w-full fixed bg-white left-0 border-rba-negro85 transition-transform duration-300 -translate-x-full" 1541 :class="{'overflow-visible translate-x-0' : open, 'border-t-0': open && collectionPage}" 1542 @toggle-mobile-menu.window="toggleMenu()" 1543 @keydown.window.escape="open=false" 1544 > 1545 <nav 1546 class="w-full ease-in-out transform pt-[11px] overflow-auto max-h-screen pb-[56px]" 1547 x-show="open" x-transition.duration.300ms 1548 > 1549 <template x-if="collectionPage"> 1550 <div class="col-md-9 collectible-menu-list"> 1551 <div class="flex items-start px-5 pb-4 pt-[9px] text-[20px] font-bold leading-[100%] text-black"> 1552 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="mr-3 shrink-0" role="img"> 1553<path d="M17.0834 7.9165V13.3332C17.0834 15.2878 17.0834 16.2652 16.5668 16.9384C16.4338 17.1118 16.2787 17.2669 16.1053 17.3999C15.4321 17.9165 14.4547 17.9165 12.5001 17.9165V14.1665C12.5001 12.988 12.5001 12.3988 12.134 12.0326C11.7678 11.6665 11.1786 11.6665 10.0001 11.6665C8.82158 11.6665 8.23231 11.6665 7.8662 12.0326C7.50008 12.3988 7.50008 12.988 7.50008 14.1665V17.9165C5.54543 17.9165 4.56811 17.9165 3.89485 17.3999C3.72151 17.2669 3.56636 17.1118 3.43336 16.9384C2.91675 16.2652 2.91675 15.2878 2.91675 13.3332V7.9165" stroke="black" stroke-linecap="round" stroke-linejoin="round"/> 1554<path d="M18.3334 8.75016L10.7355 2.35189C10.5297 2.17855 10.2692 2.0835 10.0001 2.0835C9.731 2.0835 9.4705 2.17855 9.26466 2.35189L1.66675 8.75016" stroke="black" stroke-linecap="round" stroke-linejoin="round"/> 1555</svg> 1556 Bibliothèque Balzac </div> 1557 <style>#html-body [data-pb-style=S78177Y]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="S78177Y"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><ul class="collectible-menu-ul" id="default"> 1558 <li class="collectible-menu-link"><a href="#collection-section">Collection</a></li> 1559 <li class="collectible-menu-link"><a href="#deliveries-section">Ouvrages</a></li> 1560 <li class="collectible-menu-link"><a href="#advantages-section">Offre d’abonnement</a></li> 1561 <li class="collectible-menu-link"><a href="#faqs-section">Questions - Réponses</a></li> 1562 <li class="collectible-menu-button"><a href="#subscribe-section" class="action primary">S'abonner</a></li> 1563 </ul></div></div></div> </div> 1564 </template> 1565 1566 <!--div class="showAll-trigger level-0 overflow-hidden" @click="showAllCollections = !showAllCollections">
1567 <span class="flex items-center px-[20px] font-semibold py-[11px] text-[19px] leading-6 cursor-pointer level-0" 1568 :class="{ 1569 'border-b border-[#E5E5E5]' : showAllCollections 1570 }"> 1571 Afficher toutes les collections 1572 <template x-if="!showAllCollections"> 1573 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-black absolute right-0 flex h-8 mr-4" width="24" height="24" role="img"> 1574 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 1575</svg> 1576 </template> 1577 <template x-if="showAllCollections"> 1578 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-black absolute right-0 flex h-8 mr-4" width="24" height="24" role="img"> 1579 <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/> 1580</svg> 1581 </template> 1582 </span> 1583 </div--> 1584 <div class="showAll-wrap pt-5 border-t-0 border-rba-negro10 mx-0" x-show="showAllCollections"> 1585 1586 <div class="category-mobile-menu border-b border-b-solid border-neutral-neutral10 mx-5 pb-4" data-panel-id="758"> 1587 <span class="flex items-center relative mt-4"> 1588 <a class="flex items-center w-[calc(100%-30px)] font-bold py-[13.5px] text-[20px] text-black leading-6 cursor-pointer level-0" 1589 href="https://boutique.rbafrance.fr/collections" 1590 title="Collections" 1591 > 1592 <svg xmlns="http://www.w3.org/2000/svg" id="Icono_Coleccionables" data-name="Icono Coleccionables" width="20" height="20" viewBox="0 0 24 24" class="mr-3 shrink-0" role="img"> 1593 <g id="Coleccionables_Gris_24px"> 1594 <rect id="Rectángulo_1752" data-name="Rectángulo 1752" width="24" height="24" fill="#fff" opacity="0"/> 1595 <g id="Grupo_8266" data-name="Grupo 8266" transform="translate(3.001 1.999)"> 1596 <rect id="Rectángulo_1748" data-name="Rectángulo 1748" width="5" height="19.283" rx="1" transform="translate(0 0.359)" fill="none" stroke="#000" stroke-width="1.5"/> 1597 <rect id="Rectángulo_1750" data-name="Rectángulo 1750" width="5" height="19.283" rx="1" transform="translate(4.795 0.359)" fill="none" stroke="#000" stroke-width="1.5"/> 1598 <path id="Trazado_1194" data-name="Trazado 1194" d="M.987,0,3.978.03a1.006,1.006,0,0,1,1.007.975l.182,17.366a.957.957,0,0,1-.987.955L1.189,19.3a1.006,1.006,0,0,1-1.007-.975L0,.955A.957.957,0,0,1,.987,0Z" transform="translate(9.703 1.424) rotate(-16)" fill="none" stroke="#000" stroke-width="1.5"/> 1599 </g> 1600 </g> 1601 <g id="Coleccionables_Gris_24px-2" data-name="Coleccionables_Gris_24px"> 1602 <rect id="Rectángulo_1752-2" data-name="Rectángulo 1752" width="24" height="24" fill="#fff" opacity="0"/> 1603 <g id="Grupo_8266-2" data-name="Grupo 8266" transform="translate(3.001 1.999)"> 1604 <rect id="Rectángulo_1748-2" data-name="Rectángulo 1748" width="5" height="19.283" rx="1" transform="translate(0 0.359)" fill="none" stroke="#000" stroke-width="1.5"/> 1605 <rect id="Rectángulo_1750-2" data-name="Rectángulo 1750" width="5" height="19.283" rx="1" transform="translate(4.795 0.359)" fill="none" stroke="#000" stroke-width="1.5"/> 1606 <path id="Trazado_1194-2" data-name="Trazado 1194" d="M.987,0,3.978.03a1.006,1.006,0,0,1,1.007.975l.182,17.366a.957.957,0,0,1-.987.955L1.189,19.3a1.006,1.006,0,0,1-1.007-.975L0,.955A.957.957,0,0,1,.987,0Z" transform="translate(9.703 1.424) rotate(-16)" fill="none" stroke="#000" stroke-width="1.5"/> 1607 </g> 1608 </g> 1609</svg> 1610 Collections </a> 1611 <a class="absolute right-0 flex h-8 cursor-pointer" 1612 @click="toggleMobilePanel('758')" 1613 > 1614 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" class="text-black transition-transform duration-200" :class="{ 'rotate-180': isMobilePanelOpen('758') }" aria-hidden="true"> 1615<path d="M12 16L19.9998 24L28 16" stroke="black" stroke-linecap="round"/> 1616</svg> 1617 </a> 1618 </span> 1619 <div 1620 :class="{ 1621 'hidden': !isMobilePanelOpen('758'), 1622 'block': isMobilePanelOpen('758'), 1623 }" 1624 > 1625 <div class="level-1" data-sub-panel-id="758-1">
1626 <span class="flex items-center relative"> 1627 <a class="flex items-center w-[calc(100%-30px)] pr-1.5 py-[10px] mt-2 text-[16px] font-semibold leading-5 text-black cursor-pointer level-1" 1628 href="https://boutique.rbafrance.fr/collections/nouveautes" 1629 title="Nouveautés" 1630 > 1631 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1632<rect x="10" y="6" width="6" height="6" transform="rotate(45 10 6)" fill="black"/> 1633</svg> 1634 Nouveautés </a> 1635 <a class="absolute right-0 flex h-8 mr-0 cursor-pointer" 1636 @click="toggleMobileSubPanel('758-1')" 1637 > 1638 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" class="text-black transition-transform duration-200" :class="{ 'rotate-180': isMobileSubPanelOpen('758-1') }" aria-hidden="true"> 1639<path d="M12 16L19.9998 24L28 16" stroke="black" stroke-linecap="round"/> 1640</svg> 1641 </a> 1642 </span> 1643 <div 1644 class="mb-4" 1645 :class="{ 1646 'hidden': !isMobileSubPanelOpen('758-1'), 1647 'block': isMobileSubPanelOpen('758-1'), 1648 }" 1649 > 1650 <a href="https://boutique.rbafrance.fr/collections/japon" 1651 title="Japon" 1652 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1653 > 1654 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1655<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1656</svg> 1657 Japon </a> 1658 <a href="https://boutique.rbafrance.fr/collections/balzac" 1659 title="Bibliothèque Balzac" 1660 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1661 > 1662 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1663<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1664</svg> 1665 Bibliothèque Balzac </a> 1666 <a href="https://boutique.rbafrance.fr/collections/lovecraft" 1667 title="Lovecraft" 1668 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1669 > 1670 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1671<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1672</svg> 1673 Lovecraft </a> 1674 <a href="https://boutique.rbafrance.fr/collections/nouveautes" 1675 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-bold text-black underline hover:no-underline cursor-pointer level-2" 1676 > 1677 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1678<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1679</svg> 1680 Voir Tout Nouveautés </a> 1681 </div> 1682 </div> 1683 <div class="level-1" data-sub-panel-id="758-2">
1684 <span class="flex items-center relative"> 1685 <a class="flex items-center w-[calc(100%-30px)] pr-1.5 py-[10px] mt-2 text-[16px] font-semibold leading-5 text-black cursor-pointer level-1" 1686 href="https://boutique.rbafrance.fr/collections/livres" 1687 title="Livres" 1688 > 1689 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1690<rect x="10" y="6" width="6" height="6" transform="rotate(45 10 6)" fill="black"/> 1691</svg> 1692 Livres </a> 1693 <a class="absolute right-0 flex h-8 mr-0 cursor-pointer" 1694 @click="toggleMobileSubPanel('758-2')" 1695 > 1696 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" class="text-black transition-transform duration-200" :class="{ 'rotate-180': isMobileSubPanelOpen('758-2') }" aria-hidden="true"> 1697<path d="M12 16L19.9998 24L28 16" stroke="black" stroke-linecap="round"/> 1698</svg> 1699 </a> 1700 </span> 1701 <div 1702 class="mb-4" 1703 :class="{ 1704 'hidden': !isMobileSubPanelOpen('758-2'), 1705 'block': isMobileSubPanelOpen('758-2'), 1706 }" 1707 > 1708 <a href="https://boutique.rbafrance.fr/collections/barbie-fashion-collection" 1709 title="Barbie Fashion collection" 1710 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1711 > 1712 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1713<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1714</svg> 1715 Barbie Fashion collection </a> 1716 <a href="https://boutique.rbafrance.fr/collections/legendes-de-la-mode" 1717 title="Légendes De La Mode" 1718 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1719 > 1720 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1721<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1722</svg> 1723 Légendes De La Mode </a> 1724 <a href="https://boutique.rbafrance.fr/collections/romans-eternels" 1725 title="Romans Eternels" 1726 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1727 > 1728 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1729<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1730</svg> 1731 Romans Eternels </a> 1732 <a href="https://boutique.rbafrance.fr/collections/catalog/product/view/id/151398/" 1733 title="Jules Verne" 1734 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1735 > 1736 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1737<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1738</svg> 1739 Jules Verne </a> 1740 <a href="https://boutique.rbafrance.fr/collections/crochet-passion-premium" 1741 title="Crochet Passion Premium" 1742 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1743 > 1744 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1745<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1746</svg> 1747 Crochet Passion Premium </a> 1748 <a href="https://boutique.rbafrance.fr/collections/romans-eternels-be" 1749 title="Romans Éternels BE" 1750 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1751 > 1752 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1753<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1754</svg> 1755 Romans Éternels BE </a> 1756 <a href="https://boutique.rbafrance.fr/collections/livres" 1757 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-bold text-black underline hover:no-underline cursor-pointer level-2" 1758 > 1759 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1760<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1761</svg> 1762 Voir Tout Livres </a> 1763 </div> 1764 </div> 1765 <div class="level-1" data-sub-panel-id="758-3">
1766 <span class="flex items-center relative"> 1767 <a class="flex items-center w-[calc(100%-30px)] pr-1.5 py-[10px] mt-2 text-[16px] font-semibold leading-5 text-black cursor-pointer level-1" 1768 href="https://boutique.rbafrance.fr/collections/jeunesse" 1769 title="Jeunesse" 1770 > 1771 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1772<rect x="10" y="6" width="6" height="6" transform="rotate(45 10 6)" fill="black"/> 1773</svg> 1774 Jeunesse </a> 1775 </span> 1776 </div> 1777 <div class="level-1" data-sub-panel-id="758-4"> 1778 <span class="flex items-center relative"> 1779 <a class="flex items-center w-[calc(100%-30px)] pr-1.5 py-[10px] mt-2 text-[16px] font-semibold leading-5 text-black cursor-pointer level-1" 1780 href="https://boutique.rbafrance.fr/collections/exclusivite-web" 1781 title="Exclusivité web" 1782 > 1783 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1784<rect x="10" y="6" width="6" height="6" transform="rotate(45 10 6)" fill="black"/> 1785</svg> 1786 Exclusivité web </a> 1787 <a class="absolute right-0 flex h-8 mr-0 cursor-pointer" 1788 @click="toggleMobileSubPanel('758-4')" 1789 > 1790 <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" class="text-black transition-transform duration-200" :class="{ 'rotate-180': isMobileSubPanelOpen('758-4') }" aria-hidden="true"> 1791<path d="M12 16L19.9998 24L28 16" stroke="black" stroke-linecap="round"/> 1792</svg> 1793 </a> 1794 </span> 1795 <div 1796 class="mb-4" 1797 :class="{ 1798 'hidden': !isMobileSubPanelOpen('758-4'), 1799 'block': isMobileSubPanelOpen('758-4'), 1800 }" 1801 > 1802 <a href="https://boutique.rbafrance.fr/collections/exclusivite-web/vente-au-numero" 1803 title="Vente Au Numéro" 1804 class="flex items-center w-full pl-0 pr-1.5 py-[8px] text-[16px] font-normal leading-5 text-black cursor-pointer level-2" 1805 > 1806 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1807<rect x="10" y="7" width="4" height="4" transform="rotate(45 10 7)" fill="#CCCCCC"/> 1808</svg> 1809 Vente Au Numéro </a> 1810 </div> 1811 </div> 1812 <a href="https://boutique.rbafrance.fr/collections" 1813 class="flex hidden items-center w-[c
1813alc(100%-30px)] px-1.5 py-[11px] text-[16px] font-semibold text-black cursor-pointer level-1" 1814 > 1815 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="shrink-0 mr-3" role="img"> 1816<rect x="10" y="6" width="6" height="6" transform="rotate(45 10 6)" fill="black"/> 1817</svg> 1818 Voir Tout Collections </a> 1819 </div> 1820 </div> 1821 1822 </div> 1823 <div class="menu-links mx-5 py-0"> 1824 1825 1826<div class="customer__wrapper pb-5 d-block d-md-none flex flex-col"> 1827 <!--Payer Mon Colis--> 1828 <h5> 1829 <a id="click_payer_mon_colis" 1830 class="text-neutral-neutral100 font-normal flex gap-3 py-[25px] border-b border-b-solid border-neutral-neutral10" 1831 href="#" 1832 data-linktext="pay_package" 1833 onclick="return eventTopMenuPayerMonColis(this)"> 1834 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="w-5 h-5 leading-6" role="img"> 1835<g clip-path="url(#clip0_1673_231)"> 1836<path d="M13.6026 6.46668C12.9465 5.97099 12.1653 5.6678 11.3466 5.59109C10.528 5.51438 9.70407 5.66717 8.96732 6.03235C8.23058 6.39754 7.61008 6.96067 7.17538 7.65866C6.74068 8.35664 6.50893 9.16189 6.50613 9.98417C6.50332 10.8065 6.72956 11.6133 7.1595 12.3142C7.58943 13.0151 8.20606 13.5825 8.9403 13.9527C9.67453 14.3229 10.4974 14.4813 11.3166 14.4102C12.1358 14.3391 12.919 14.0412 13.5784 13.55" stroke="black" stroke-miterlimit="10" stroke-linecap="round"/> 1837<path d="M5.11499 8.9248L11.19 8.9473" stroke="black" stroke-miterlimit="10" stroke-linecap="round"/> 1838<path d="M5.1084 10.9492L11.1834 10.9717" stroke="black" stroke-miterlimit="10" stroke-linecap="round"/> 1839<path d="M10 19.375C15.1777 19.375 19.375 15.1777 19.375 10C19.375 4.82233 15.1777 0.625 10 0.625C4.82233 0.625 0.625 4.82233 0.625 10C0.625 15.1777 4.82233 19.375 10 19.375Z" stroke="black"/> 1840</g> 1841<defs> 1842<clipPath id="clip0_1673_231"> 1843<rect width="20" height="20" fill="white"/> 1844</clipPath> 1845</defs> 1846</svg> 1847 <span class="category-item-name">Payer mon colis</span> 1848 </a> 1849 </h5> 1850 <h5> 1851 <a id="click_help" class="py-[25px] text-neutral-neutral100 font-normal flex gap-3" 1852 href="https://boutique.rbafrance.fr/centre-assistance" 1853 data-linktext="help"> 1854 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="w-5 h-5 leading-6" role="img"> 1855<path d="M10.0001 18.3332C14.6025 18.3332 18.3334 14.6022 18.3334 9.99984C18.3334 5.39746 14.6025 1.6665 10.0001 1.6665C5.39771 1.6665 1.66675 5.39746 1.66675 9.99984C1.66675 14.6022 5.39771 18.3332 10.0001 18.3332Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/> 1856<path d="M8.3335 7.49961C8.33343 7.24063 8.39372 6.9852 8.50958 6.75358C8.62544 6.52196 8.79368 6.32052 9.00096 6.16526C9.20824 6.00999 9.44884 5.90517 9.7037 5.8591C9.95855 5.81303 10.2206 5.82699 10.4691 5.89986C10.7177 5.97274 10.9458 6.10253 11.1354 6.27893C11.325 6.45533 11.4709 6.6735 11.5615 6.91611C11.6521 7.15873 11.6849 7.41912 11.6574 7.67663C11.6298 7.93414 11.5426 8.18168 11.4027 8.39961C10.9043 9.17461 10.0002 9.91295 10.0002 10.8329V11.2496M9.9935 14.1663H10.001" stroke="black" stroke-linecap="round" stroke-linejoin="round"/> 1857</svg> 1858 <span class="category-item-name">Aide et contact</span> 1859 </a> 1860 </h5> 1861</div> 1862<div class="menu-links pt-5"> 1863 <a class=" logo logo-menu-mobile flex items-center text-xl font-medium tracking-wide text-black 1864 no-underline hover:no-underline font-title max-w-[180px] lg:max-w-full" 1865 href="https://boutique.rbafrance.fr/collections/" 1866 title="" 1867 aria-label="store logo" 1868 onclick="eventTopMenuLogo(this)"> 1869 <img src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/images/logo.svg" 1870 title="" 1871 alt="" 1872 class="!h-5" 1873 /> 1874 </a> 1875</div>
1876<script> 1877 function eventTopMenuCustomer(element) { 1878 var text = element.getAttribute('data-linktext'); 1879 var linkText = normalizeGA4Value(text); 1880 dataLayer.push({ 1881 "event": "custom_event", 1882 "event_name": "click_hamburger_menu", 1883 "link_text": linkText, 1884 "link_url": linkText === 'pay_package' ? undefined : element.href 1885 }); 1886 } 1887 1888 function eventTopMenuPayerMonColis(element) { 1889 eventTopMenuCustomer(element); 1890 1891 var payerMonColisHeaderLink = document.querySelector('#header > .container > .order-3 .payer-mon-colis-link'); 1892 if (payerMonColisHeaderLink) { 1893 payerMonColisHeaderLink.dataset.skipGaClick = 'true'; 1894 payerMonColisHeaderLink.click(); 1895 } 1896 1897 return false; 1898 } 1899</script>
1899 1900 </div> 1901 </nav> 1902 </div> 1903</div>
1904<script> 1905 'use strict'; 1906 1907 const initMenuMobile_6ac67dc9a729c = () => { 1908 return { 1909 mobilePanelActiveIds: [], 1910 mobileSubPanelActiveIds: [], 1911 open: false, 1912 collectionPage: false, 1913 hasFrontend: true, 1914 showAllCollections: true, 1915 toggleMenu() { 1916 this.open = !this.open; 1917 let topBarWrapperMobile = document.querySelector('.top-bar'); 1918 if (topBarWrapperMobile) { 1919 if (this.open) { 1920 topBarWrapperMobile.classList.add('hidden'); 1921 } else { 1922 topBarWrapperMobile.classList.remove('hidden'); 1923 } 1924 } 1925 }, 1926 isMobilePanelOpen(panelId) { 1927 return this.mobilePanelActiveIds.includes(panelId); 1928 }, 1929 toggleMobilePanel(panelId) { 1930 if (this.isMobilePanelOpen(panelId)) { 1931 this.mobilePanelActiveIds = this.mobilePanelActiveIds.filter(id => id !== panelId); 1932 return; 1933 } 1934 1935 this.mobilePanelActiveIds.push(panelId); 1936 }, 1937 isMobileSubPanelOpen(panelId) { 1938 return this.mobileSubPanelActiveIds.includes(panelId); 1939 }, 1940 toggleMobileSubPanel(panelId) { 1941 if (this.isMobileSubPanelOpen(panelId)) { 1942 this.mobileSubPanelActiveIds = this.mobileSubPanelActiveIds.filter(id => id !== panelId); 1943 return; 1944 } 1945 1946 this.mobileSubPanelActiveIds.push(panelId); 1947 }, 1948 isCollectibleOrMagazinePage() { 1949 return this.hasFrontend 1950 || document.body.classList.contains('page-product-collectable') 1951 || document.body.classList.contains('page-product-bundle') 1952 || ['collectable', 'bundle'].includes('collectable'); 1953 }, 1954 openFirstLevelPanels() { 1955 this.mobilePanelActiveIds = Array.from(this.$root.querySelectorAll('[data-panel-id]')) 1956 .map(panel => panel.dataset.panelId) 1957 .filter(Boolean); 1958 }, 1959 init() { 1960 let topBarWrapperMobile = document.querySelector('.top-bar'); 1961 if (topBarWrapperMobile) { 1962 if (this.open) { 1963 topBarWrapperMobile.classList.add('hidden'); 1964 } else { 1965 topBarWrapperMobile.classList.remove('hidden'); 1966 } 1967 } 1968 1969 if (document.body.classList.contains('page-product-collectable') || this.hasFrontend) { 1970 this.collectionPage = true; 1971 1972 if (document.body.classList.contains('page-product-collectable')) { 1973 let headerMain = document.querySelector('#header'), 1974 colMenuWrap = document.querySelector('.collectible-menu-wrapper'); 1975 1976 if (headerMain && colMenuWrap) { 1977 let frontendPrincipalColor = window.getComputedStyle(colMenuWrap).getPropertyValue('background-color'); 1978 headerMain.style.backgroundColor = frontendPrincipalColor; 1979 let selectedMenuItem = document.querySelector('.cursor-pointer.active'); 1980 if (selectedMenuItem) { 1981 let selectedListIcon = selectedMenuItem.querySelector('.rounded'); 1982 if (selectedListIcon) { 1983 selectedListIcon.style.backgroundColor = frontendPrincipalColor; 1984 } 1985 } 1986 } 1987 } 1988 1989 this.$nextTick(() => { 1990 this.$root.querySelectorAll('.revistas-categories-wrapper').forEach((panel) => { 1991 panel.classList.add('active'); 1992 const trigger = panel.previousElementSibling; 1993 if (trigger) { 1994 trigger.classList.add('is-open'); 1995 } 1996 }); 1997 }); 1998 } 1999 2000 this.$root.addEventListener('click', (event) => { 2001 const trigger = event.target.closest('.products-hover'); 2002 if (!trigger || !this.$root.contains(trigger)) { 2003 return; 2004 } 2005 const panel = trigger.nextElementSibling; 2006 if (panel && panel.classList.contains('revistas-categories-wrapper')) { 2007 event.preventDefault(); 2008 panel.classList.toggle('active'); 2009 trigger.classList.toggle('is-open'); 2010 } 2011 }); 2012 2013 if (!this.isCollectibleOrMagazinePage()) { 2014 this.openFirstLevelPanels(); 2015 } 2016 },
2017 setActiveMenu(menuNode) { 2018 if (!menuNode) return; 2019 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2020 return link.href === window.location.href.split('?')[0]; 2021 }).map(item => { 2022 item.classList.add('toUnderline'); 2023 const levelZero = item.closest('[data-panel-id]'); 2024 const levelZeroLink = levelZero && levelZero.querySelector('a.level-0'); 2025 if (levelZeroLink) levelZeroLink.classList.add('toUnderline'); 2026 if (levelZero && levelZero.dataset.panelId) { 2027 if (!this.isMobilePanelOpen(levelZero.dataset.panelId)) { 2028 this.mobilePanelActiveIds.push(levelZero.dataset.panelId); 2029 } 2030 } 2031 const levelOne = item.closest('[data-sub-panel-id]'); 2032 if (levelOne && levelOne.dataset.subPanelId) { 2033 if (!this.isMobileSubPanelOpen(levelOne.dataset.subPanelId)) { 2034 this.mobileSubPanelActiveIds.push(levelOne.dataset.subPanelId); 2035 } 2036 } 2037 }); 2038 //Close menu, when collectible-menu-link is clicked 2039 let selfV = this; 2040 document.querySelectorAll('.collectible-menu-ul li').forEach(function (element) { 2041 element.addEventListener('click', function () { 2042 selfV.open = false; 2043 }); 2044 }); 2045 } 2046 } 2047 } 2048</script>
2048 2049<nav 2050 class="navigation hidden lg:block z-20" 2051 aria-label="Main menu" 2052 x-data="initMenuDesktop" 2053 x-ref="nav-desktop" 2054 @load.window="setActiveMenu" 2055> 2056 <ul class="flex gap-x-8 list-none"> 2057 <li 2058 class="level-0 mb-0" 2059 x-data="initMenuDesktopItem" 2060 @click.outside="close" 2061 @keydown.escape="close" 2062 @mouseenter="canHoverOpen" 2063 @mouseleave="canHoverClose" 2064 > 2065 <div 2066 class="level-0 group w-full flex justify-between items-center gap-1 pt-3 pb-[calc(theme(padding.4)_-_4px)] transition" 2067 :aria-expanded="open" 2068 > 2069 <a 2070 href="https://boutique.rbafrance.fr/collections" 2071 class="menu-category-link group-aria-expanded:text-[#A2B6FF]" 2072 > 2073 Collections </a> 2074 <button 2075 type="button" 2076 @click="toggle" 2077 aria-expanded="false" 2078 :aria-expanded="open" 2079 aria-controls="desktop-menu-category-758" 2080 class="flex items-center group" 2081 > 2082 <svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8" fill="none" class="transition text-white group-aria-expanded:rotate-180 group-aria-expanded:!text-[#A2B6FF]" aria-hidden="true"> 2083<path d="M1.14288 2.57129L3.99997 5.42843L6.85717 2.57129" stroke="currentColor" stroke-linecap="round"/> 2084</svg> 2085 </button> 2086 </div> 2087 <div 2088 id="desktop-menu-category-758" 2089 class="nav-dropdown z-30 absolute inset-x-0 text-black" 2090 :class="{ 'is-open': open }" 2091 :aria-hidden="open ? 'false' : 'true'" 2092 > 2093 <div class="nav-dropdown__clip"> 2094 <div class="nav-dropdown__panel border-t border-slate-100 bg-white overflow-auto"> 2095 <div class="container flex flex-col gap-[36px] pt-10 pb-[60px] px-3 min-h-64"> 2096 <div class="submenu-title-wrapper flex items-center justify-between pb-5 border-b border-[#E6E6E6]"> 2097 <a href="https://boutique.rbafrance.fr/collections" class="submenu-title text-[28px] leading-[130%] font-medium" 2098 >Collections</a> 2099 </div> 2100 <div class="flex gap-8 grow"> 2101 <div class="grow flex flex-col"> 2102 <ul class="menu-desktop flex flex-wrap gap-x-8 gap-y-6 list-none"> 2103 <li class="min-w-[14rem] ml-0"> 2104 <a 2105 href="https://boutique.rbafrance.fr/collections/nouveautes" 2106 class="level-1 block pt-1 pb-5 font-semibold text-xl leading-[100%] hover:underline aria-[current=page]:underline" 2107 >Nouveautés</a> 2108 <ul class="list-none mt-0"> 2109 <li class="ml-0"> 2110 <a 2111 href="https://boutique.rbafrance.fr/collections/japon" 2112 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2113 >Japon</a> 2114 </li> 2115 <li class="ml-0"> 2116 <a 2117 href="https://boutique.rbafrance.fr/collections/balzac" 2118 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2119 >Bibliothèque Balzac</a> 2120 </li> 2121 <li class="ml-0"> 2122 <a 2123 href="https://boutique.rbafrance.fr/collections/lovecraft" 2124 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2125 >Lovecraft</a> 2126 </li> 2127 </ul> 2128 <a 2129 href="https://boutique.rbafrance.fr/collections/nouveautes" 2130 class="show-all block mt-3 text-sm hover:underline font-bold leading-[100%] text-[#4C6DE3]" 2131 >Voir plus ›</a> 2132 </li> 2133 <li class="min-w-[14rem] ml-0"> 2134 <a 2135 href="https://boutique.rbafrance.fr/collections/livres" 2136 class="level-1 block pt-1 pb-5 font-semibold text-xl leading-[100%] hover:underline aria-[current=page]:underline" 2137 >Livres</a> 2138 <ul class="list-none mt-0"> 2139 <li class="ml-0"> 2140 <a 2141 href="https://boutique.rbafrance.fr/collections/barbie-fashion-collection" 2142 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2143 >Barbie Fashion collection</a> 2144 </li> 2145 <li class="ml-0"> 2146 <a 2147 href="https://boutique.rbafrance.fr/collections/legendes-de-la-mode" 2148 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2149 >Légendes De La Mode</a> 2150 </li> 2151 <li class="ml-0"> 2152 <a 2153 href="https://boutique.rbafrance.fr/collections/romans-eternels" 2154 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2155 >Romans Eternels</a> 2156 </li> 2157 <li class="ml-0"> 2158 <a 2159 href="https://boutique.rbafrance.fr/collections/catalog/product/view/id/151398/" 2160 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2161 >Jules Verne</a> 2162 </li> 2163 <li class="ml-0"> 2164 <a 2165 href="https://boutique.rbafrance.fr/collections/crochet-passion-premium" 2166 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2167 >Crochet Passion Premium</a> 2168 </li> 2169 <li class="ml-0"> 2170 <a 2171 href="https://boutique.rbafrance.fr/collections/romans-eternels-be" 2172 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2173 >Romans Éternels BE</a> 2174 </li> 2175 </ul> 2176 <a 2177 href="https://boutique.rbafrance.fr/collections/livres" 2178 class="show-all block mt-3 text-sm hover:underline font-bold leading-[100%] text-[#4C6DE3]" 2179 >Voir plus ›</a> 2180 </li> 2181 <li class="min-w-[14rem] ml-0"> 2182 <a 2183 href="https://boutique.rbafrance.fr/collections/exclusivite-web" 2184 class="level-1 block pt-1 pb-5 font-semibold text-xl leading-[100%] hover:underline aria-[current=page]:underline" 2185 >Exclusivité web</a> 2186 <ul class="list-none mt-0"> 2187 <li class="ml-0"> 2188 <a 2189 href="https://boutique.rbafrance.fr/collections/exclusivite-web/vente-au-numero" 2190 class="level-2 block pb-1 text-base leading-[120%] hover:underline aria-[current=page]:underline" 2191 >Vente Au Numéro</a> 2192 </li> 2193 </ul> 2194 </li> 2195 </ul> 2196 2197 </div> 2198 </div> 2199 </div> 2200 </div> 2201 </div> 2202 </div> 2203 </li> 2204 </ul> 2205</nav>
2206<script> 2207 function initMenuDesktop() { 2208 return { 2209 setActiveMenu() { 2210 Array.from(this.$root.querySelectorAll('a')) 2211 .filter(link => link.href === window.location.href.split('?')[0]) 2212 .forEach(item => { 2213 item.setAttribute('aria-current', 'page'); 2214 2215 for (let level = 0; level < 3; level++) { 2216 const closestMenu = item.closest(`.level-${level}`); 2217 2218 if (closestMenu) { 2219 const button = closestMenu.querySelector('button'); 2220 if (button) { 2221 button.setAttribute('data-has-current', ''); 2222 } 2223 } 2224 } 2225 } 2226 ); 2227 } 2228 } 2229 } 2230 2231 function initMenuDesktopItem() { 2232 return { 2233 open: false, 2234 setActiveMenu(menuNode) { 2235 if (!menuNode) return; 2236 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2237 return link.href === window.location.href.split('?')[0]; 2238 }).map(item => { 2239 item.classList.add('toUnderline'); 2240 const levelZero = item.closest('div.level-0'); 2241 const levelZeroLink = levelZero && levelZero.querySelector('a.level-0'); 2242 if (levelZeroLink) levelZeroLink.classList.add('toUnderline'); 2243 }); 2244 }, 2245 canHover() { 2246 return window.matchMedia('(hover: hover) and (pointer: fine)').matches; 2247 }, 2248 canHoverOpen() { 2249 if (!this.canHover()) return; 2250 this.open = true; 2251 }, 2252 canHoverClose() { 2253 if (!this.canHover()) return; 2254 this.open = false; 2255 }, 2256 toggle() { 2257 this.open = !this.open; 2258 }, 2259 close() { 2260 this.open = false; 2261 } 2262 } 2263 } 2264 2265 window.addEventListener('alpine:init', () => { 2266 Alpine.data('initMenuDesktop', initMenuDesktop); 2267 Alpine.data('initMenuDesktopItem', initMenuDesktopItem); 2268 }, { once: true }) 2269</script>
2269 2270 2271 2272 2273 <div class="flex items-center order-3"> 2274 <!--Payer Mon Colis--> 2275 2276<div x-data="Object.assign(hyva.modal(), initPayerModal())"> 2277 <a href="#" @click="show('payer_mon_colis_modal', $event)" class="payer-mon-colis-link font-normal relative flex ml-4 no-underline gap-2 cursor-pointer items-center"> 2278 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="w-5 h-5 leading-6 hidden lg:block" role="img"> 2279<g clip-path="url(#clip0_1673_2576)"> 2280<path d="M13.6026 6.46668C12.9465 5.97099 12.1653 5.6678 11.3466 5.59109C10.528 5.51438 9.70407 5.66717 8.96732 6.03235C8.23058 6.39754 7.61008 6.96067 7.17538 7.65866C6.74068 8.35664 6.50893 9.16189 6.50613 9.98417C6.50332 10.8065 6.72956 11.6133 7.1595 12.3142C7.58943 13.0151 8.20606 13.5825 8.9403 13.9527C9.67453 14.3229 10.4974 14.4813 11.3166 14.4102C12.1358 14.3391 12.919 14.0412 13.5784 13.55" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/> 2281<path d="M5.11511 8.9248L11.1901 8.9473" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/> 2282<path d="M5.1084 10.9492L11.1834 10.9717" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/> 2283<path d="M10 0.5C15.2467 0.5 19.5 4.75329 19.5 10C19.5 15.2467 15.2467 19.5 10 19.5C4.75329 19.5 0.5 15.2467 0.5 10C0.5 4.75329 4.75329 0.5 10 0.5Z" stroke="white"/> 2284<path d="M10 19.375C15.1777 19.375 19.375 15.1777 19.375 10C19.375 4.82233 15.1777 0.625 10 0.625C4.82233 0.625 0.625 4.82233 0.625 10C0.625 15.1777 4.82233 19.375 10 19.375Z" stroke="white"/> 2285</g> 2286<defs> 2287<clipPath id="clip0_1673_2576"> 2288<rect width="20" height="20" fill="white"/> 2289</clipPath> 2290</defs> 2291</svg> 2292 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 40 40" fill="none" class="w-10 h-10 leading-6 block lg:hidden" role="img"> 2293<path d="M23.9628 16.1133C23.2411 15.568 22.3818 15.2345 21.4813 15.1501C20.5807 15.0658 19.6744 15.2338 18.864 15.6355C18.0536 16.0372 17.3711 16.6567 16.8929 17.4245C16.4147 18.1923 16.1598 19.078 16.1567 19.9825C16.1536 20.887 16.4025 21.7745 16.8754 22.5456C17.3483 23.3166 18.0266 23.9407 18.8343 24.3479C19.642 24.7551 20.5471 24.9294 21.4482 24.8512C22.3493 24.7729 23.2108 24.4453 23.9362 23.905" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/> 2294<path d="M14.6265 18.8174L21.309 18.8421" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/> 2295<path d="M14.6192 21.0439L21.3017 21.0687" stroke="white" stroke-miterlimit="10" stroke-linecap="round"/> 2296<path d="M20 30.3125C25.6954 30.3125 30.3125 25.6954 30.3125 20C30.3125 14.3046 25.6954 9.6875 20 9.6875C14.3046 9.6875 9.6875 14.3046 9.6875 20C9.6875 25.6954 14.3046 30.3125 20 30.3125Z" stroke="white"/> 2297</svg> 2298 <span class="hidden lg:block"> 2299 Payer mon colis </span> 2300 </a> 2301 <div x-cloak x-bind="overlay('payer_mon_colis_modal')" 2302 x-spread="overlay('payer_mon_colis_modal')" 2303 class="fixed inset-0 bg-black bg-opacity-50 z-50 bg-opacity-20 backdrop-blur-md"> 2304 <div class="fixed flex justify-center items-center text-left z-40 inset-0"> 2305 <div x-ref="payer_mon_colis_modal" role="dialog" aria-modal="true" 2306 class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain payer-mon-colis max-w-[502px] relative max-md:p-[31px] mx-[17px]"> 2307 <div x-cloak x-bind="overlay('payer_mon_colis_info_modal')" 2308 x-spread="overlay('payer_mon_colis_info_modal')" 2309 class="fixed inset-0 bg-black bg-opacity-50 z-50"> 2310 <div class="fixed flex justify-center items-center text-left z-40 inset-0"> 2311 <div x-ref="payer_mon_colis_info_modal" role="dialog" aria-modal="true" 2312 class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain payer-mon-colis-info !p-0 max-w-[820px] relative mx-[17px]"> 2313 <button @click="hide" class="text-rba-primary flex items-center justify-center w-10 h-10 bg-neutral-neutral00 rounded-full p-0 absolute top-5 right-5 hover:bg-neutral-neutral05 active:bg-neutral-neutral10"> 2314 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="18" height="18" role="img"> 2315 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2316</svg> 2317 2318 </button> 2319 <div class="text-rba-primary"> 2320 <style>#html-body [data-pb-style=ALPR4PK],#html-body [data-pb-style=F9RM075]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=ALPR4PK]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=F9RM075]{align-self:stretch}#html-body [data-pb-style=M5K4P7V]{display:flex;width:100%}#html-body [data-pb-style=DDRRILY],#html-body [data-pb-style=WWDRFEI]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:41.6667%;align-self:stretch}#html-body [data-pb-style=WWDRFEI]{width:58.3333%;margin-bottom:50px;padding:40px 48px 58px 44px}#html-body [data-pb-style=VY6V4SO]{margin-bottom:30px;padding-bottom:16px}#html-body [data-pb-style=CHKD96Y]{margin-bottom:23px}#html-body [data-pb-style=IG62GSS]{border-style:none}#html-body [data-pb-style=K0EG0JT],#html-body [data-pb-style=OBN3JOD]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=IG62GSS]{border-style:none} }</style><div data-content-type="row" data-appearance="contained" data-element="main"><div class="max-w-[820px]" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="ALPR4PK"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="F9RM075"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="M5K4P7V"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="DDRRILY"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="IG62GSS"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/Coleccionables/Francia/Contract_desktop_1.jpg" alt="" title="" loading="lazy" width="" height="" data-element="desktop_image" data-pb-style="K0EG0JT"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/Coleccionables/Francia/IMG_Payer_Mon_Colis_Contrato.jpg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="OBN3JOD"></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="WWDRFEI"><h4 class="md:border-b border-rba-negro10" data-content-type="heading" data-appearance="default" data-element="main" data-pb-style="VY6V4SO">Oú trouver mon Nº de contrat?</h4><div class="max-md:!mb-[27px]" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="CHKD96Y"><p>Le numéro de contrat se trouve sur le bon de livraison. Il s'agit d'un numéro à 10 chiffres, situé dans les instructions de paiement par carte bancaire.</p> 2321<p>Pour toute question, vous pouvez contacter le service client par e-mail à l'adresse <a tabindex="0" href="mailto:[email protected]">[email protected]</a> ou en appelant le numéro de téléphone 01 59 13 35 31</p></div></div></div></div></div></div> 2322 <button @click="hide" class="btn btn-secondary min-w-[160px] justify-center absolute md:bottom-[58px] bottom-[32px] md:left-[350px] left-[33px]"> 2323 Retour 2324 </button> 2325 </div> </div> 2326 </div> 2327 </div> 2328 2329 2330 <button @click="hide; clearNumber()" class="text-rba-primary flex items-center justify-center w-10 h-10 bg-neutral-neutral00 rounded-full p-0 absolute top-5 right-5 hover:bg-neutral-neutral05 active:bg-neutral-neutral10"> 2331 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="18" height="18" role="img"> 2332 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2333</svg> 2334 2335 </button> 2336 <div class="text-rba-primary"> 2337 <style>#html-body [data-pb-style=JK52H3P]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=LFDVBR0]{margin-bottom:24px}#html-body [data-pb-style=E4FJDAO]{margin-bottom:12px}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="JK52H3P"><h4 class="text-[28px]" data-content-type="heading" data-appearance="default" data-element="main" data-pb-style="E4FJDAO">Payer mon colis</h4><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="LFDVBR0"><p>Pour régler votre commande, veuillez saisir ci-dessous le numéro de contrat que vous trouverez sur le bon de livraison inclus dans votre envoi.</p></div></div></div> 2338 </div> 2339 <input type="text" 2340 class="number-input mb-4 bg-rba-negro5 w-full rounded-[10px] text-rba-negro60 font-normal border-0 py-[13px] px-5" 2341 placeholder="Numéro de contrat" 2342 x-model="numberText"
2343 @input="createLink" 2344 @keyup.enter="followLink"> 2345 <button 2346 @click="followLink" 2347 class="btn btn-primary cursor-pointer w-full justify-center mb-6 text-[17px] focus:!ring-0 disabled:opacity-50" 2348 x-html="isLoading ? 'Validation en cours...' : 'Je valide'" 2349 x-bind:disabled="isLoading" 2350 > 2351 Je valide 2352 </button> 2353 <div class="w-full text-center text-red" 2354 x-show="hasError" 2355 x-transition:enter="transition ease-out duration-300" 2356 x-transition:enter-start="opacity-0 transform scale-90" 2357 x-transition:enter-end="opacity-100 transform scale-100" 2358 x-transition:leave="transition ease-in duration-300" 2359 x-transition:leave-start="opacity-100 transform scale-100" 2360 x-transition:leave-end="opacity-0 transform scale-90"> 2361 <span x-text="errorMessage"></span> 2362 </div> 2363 <div class="w-full text-center"> 2364 <a href="#" 2365 class="help-payer-mon-colis text-rba-primary hover:text-rba-primary hover:underline text-[15px]" 2366 @click="show('payer_mon_colis_info_modal', $event)"> 2367 Où trouver le numéro de contrat ? 2368 </a> 2369 </div> 2370 </div> 2371 </div> 2372 </div> 2373</div> 2374
2375<script> 2376 function initPayerModal () { 2377 return { 2378 isLoading: false, 2379 hasError: false, 2380 errorMessage: '', 2381 numberText: '', 2382 linkToGo: '', 2383 init() { 2384 2385 let loadEvent = new CustomEvent("PayerMonColisModalLoaded", { "detail": "Example of an event" }); 2386 document.dispatchEvent(loadEvent); 2387 2388 document.addEventListener("click", (evt) => { 2389 const modalEl = document.querySelector('div[x-ref="payer_mon_colis_modal"]'); 2390 let targetEl = evt.target; 2391 do { 2392 if(targetEl === modalEl) { 2393 return; 2394 } 2395 targetEl = targetEl.parentNode; 2396 } while (targetEl); 2397 2398 this.clearNumber(); 2399 }); 2400 }, 2401 createLink() { 2402 this.hasError = false; 2403 this.linkToValidate = '/paiements/payermoncolis/validate/?id=' + this.numberText; 2404 this.linkToGo = '/paiements/payermoncolis/?id=' + this.numberText; 2405 }, 2406 clearNumber() { 2407 document.querySelector('.number-input').value = ''; 2408 this.linkToValidate = ''; 2409 this.linkToGo = ''; 2410 this.hasError = false; 2411 }, 2412 followLink() { 2413 dataLayer.push({ 2414 event: 'custom_event', 2415 event_name: 'submit_paypackage_form', 2416 link_url: new URL(this.linkToGo, window.location.origin).href, 2417 form_id: 'form_payer_mon_colis', 2418 form_name: 'paypackage' 2419 }); 2420 if (this.linkToValidate) { 2421 this.isLoading = true; 2422 fetch(this.linkToValidate, { 2423 method: 'POST', 2424 body: JSON.stringify({'id' : this.numberText}), 2425 headers: { 2426 'Content-Type': 'application/json', 2427 "X-Requested-With": "XMLHttpRequest", 2428 }, 2429 }) 2430 .then(response => { 2431 if (!response.ok) { 2432 throw new Error('Network response was not ok'); 2433 } 2434 return response.json(); 2435 }) 2436 .then(res => { 2437 if (res.status != 'success') { 2438 this.hasError = true; 2439 this.errorMessage = res.message; 2440 let validationErrorEvent = new CustomEvent("PayerMonColis_ValidationError", { "detail": this.errorMessage }); 2441 document.dispatchEvent(validationErrorEvent); 2442 }else{ 2443 let validationSuccessEvent = new CustomEvent("PayerMonColis_ValidationSuccess", { "detail": this.linkToGo }); 2444 document.dispatchEvent(validationSuccessEvent); 2445 this.hasError = false; 2446 window.location.href = this.linkToGo 2447 } 2448 }) 2449 .catch(error => { 2450 //Event error 2451 this.hasError = true; 2452 this.errorMessage = error; 2453 let validationExceptionEvent = new CustomEvent("PayerMonColis_ModalExceptionCatched"); 2454 document.dispatchEvent(validationExceptionEvent); 2455 }) 2456 .finally(() => { 2457 this.isLoading = false; 2458 }); 2459 } 2460 } 2461 } 2462 } 2463 2464</script>
2464 2465 2466 2467 2468 <!--Cart Icon--> 2469 <a id="menu-cart-icon" 2470 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative flex ml-2 lg:ml-6 no-underline" 2471 href="https://boutique.rbafrance.fr/checkout/cart/index/" 2472 onclick="eventTopMenuCart(this)" 2473 > 2474 <div> 2475 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 20 20" fill="none" class="w-6 h-6 leading-6 hidden lg:block" role="img"> 2476<path d="M13.5718 5.64232C13.5718 4.69847 13.1943 3.79328 12.5224 3.12587C11.8505 2.45847 10.9392 2.08353 9.98901 2.08353C9.5172 2.08147 9.04962 2.172 8.61312 2.34992C8.17662 2.52784 7.7798 2.78966 7.44544 3.12032C7.11108 3.45099 6.84577 3.84401 6.66474 4.2768C6.4837 4.7096 6.39051 5.17365 6.39052 5.64232M13.4581 17.9168H6.53482C3.99207 17.9168 2.04064 17.0041 2.59464 13.3324L3.23987 8.35589C3.58155 6.52377 4.75838 5.8219 5.79091 5.8219H14.2319C15.2794 5.8219 16.3882 6.57567 16.7829 8.35589L17.4282 13.3324C17.8984 16.5897 16.0009 17.9168 13.4581 17.9168Z" stroke="white" stroke-linecap="round" stroke-linejoin="round"/> 2477</svg> 2478 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 40 40" fill="none" class="w-10 h-10 leading-6 block lg:hidden" role="img"> 2479<path d="M25.0117 14.4954C25.0117 13.3031 24.5349 12.1597 23.6862 11.3167C22.8375 10.4737 21.6864 10 20.4861 10C19.8901 9.99744 19.2995 10.1118 18.7481 10.3365C18.1968 10.5613 17.6955 10.892 17.2732 11.3097C16.8508 11.7274 16.5157 12.2238 16.287 12.7705C16.0584 13.3172 15.9406 13.9034 15.9406 14.4954M24.8682 30H16.1229C12.911 30 10.4461 28.847 11.1459 24.2092L11.9609 17.923C12.3925 15.6088 13.879 14.7222 15.1832 14.7222H25.8456C27.1687 14.7222 28.5693 15.6743 29.0679 17.923L29.8829 24.2092C30.4769 28.3236 28.0801 30 24.8682 30Z" stroke="white" stroke-linecap="round" stroke-linejoin="round"/> 2480</svg> 2481 <span x-text="cart.summary_count" 2482 class="absolute top-1.5 left-[22px] lg:-top-0.5 lg:left-[13px] hidden w-3.5 h-3.5 px-2 text-xs font-semibold 2483 leading-none text-center text-black text-[8px] uppercase rounded-full bg-neutral-neutral00" 2484 :class="{ 2485 'hidden': !cart.summary_count, 2486 'flex items-center justify-center': cart.summary_count }" 2487 ></span> 2488 </div> 2489 2490 <span class="label text-base pl-2 leading-6 hidden lg:block font-normal"> 2491 Mon panier </span> 2492 </a> 2493 2494 </div> 2495 </div> 2496 <!--Search--> 2497 <div class="absolute z-10 w-full border-t shadow-sm bg-container-lighter border-container-lighter" 2498 id="search-content" 2499 :class="{ 'block': searchOpen}" x-cloak x-show="searchOpen" 2500 @click.outside="searchOpen = false" 2501 > 2502 </div> 2503
2504 <!--Cart Drawer--> 2505
2505<script> 2506 const rbaCartTranslations = { 2507 optionLabels: { 2508 'Primer envÃÂo': 'Primer\u0020env\u00EDo' 2509 }, 2510 entrega: 'Num\u00E9ro', 2511 deliveryContains: 'Le\u0020colis\u0020contient\u0020\u003A', 2512 quantity: 'Quantit\u00E9\u0020\u003A\u0020', 2513 subscriptionPrefix: 'Abonnement\u0020' 2514 }; 2515 function initCartDrawer() { 2516 return { 2517 open: false, 2518 isLoading: false, 2519 cart: {}, 2520 maxItemsToDisplay: 10, 2521 itemsCount: 0, 2522 totalCartAmount: 0, 2523 closeMinicart() { 2524 this.open = false; 2525 const body = document.body; 2526 const scrollY = body.style.top; 2527 //body.classList.remove('fixed'); 2528 2529 window.scrollTo({ 2530 behavior: 'instant', 2531 top: parseInt(scrollY || '0') * -1, 2532 }); 2533 2534 body.style.top = ''; 2535 }, 2536 getData(data) { 2537 if (data.cart) { 2538 this.cart = data.cart; 2539 this.itemsCount = data.cart.items && data.cart.items.length || 0; 2540 this.totalCartAmount = this.cart.summary_count; 2541 this.setCartItems(); 2542 } 2543 this.isLoading = false; 2544 }, 2545 cartItems: [], 2546 getItemCountTitle() { 2547 return hyva.strf('(%0 sur %1)', this.maxItemsToDisplay, this.itemsCount) 2548 }, 2549 setCartItems() { 2550 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 2551 2552 if (this.maxItemsToDisplay > 0) { 2553 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 2554 } 2555 }, 2556 deleteItemFromCart(itemId) { 2557 this.isLoading = true; 2558 2559 const formKey = hyva.getFormKey(); 2560 const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; 2561 const fetchOptions = { 2562 "headers": { 2563 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 2564 }, 2565 "body": "form_key=" + formKey + "&item_id=" + itemId, 2566 "method": "POST", 2567 "mode": "cors", 2568 "credentials": "include" 2569 }; 2570 2571 fetch(postUrl, fetchOptions) 2572 .then(response => { 2573 if (response.redirected) { 2574 return fetch(response.url, fetchOptions); 2575 } 2576 return response; 2577 }) 2578 .then(response => { 2579 if (response.ok) { 2580 return response.json(); 2581 } 2582 window.dispatchMessages && window.dispatchMessages([{ 2583 type: 'warning', 2584 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 2585 }]); 2586 this.isLoading = false; 2587 }) 2588 .then(result => { 2589 if (!result) return; 2590 window.dispatchMessages && window.dispatchMessages([{ 2591 type: result.success ? 'success' : 'error', 2592 text: result.success 2593 ? 'Vous\u0020avez\u0020supprim\u00E9\u0020l\u0027\u00E9l\u00E9ment.' 2594 : result.error_message 2595 }], result.success ? 2000 : 0) 2596 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 2597 }); 2598 }, 2599 updateQty(form) { 2600 if (!form.action) { 2601 return; 2602 } 2603 this.isLoading = true; 2604 2605 const action = form.action; 2606 const formData = new FormData(form); 2607 2608 if (!formData.get('uenc')) { 2609 formData.append('uenc', hyva.getUenc()); 2610 } 2611 2612 formData.append('form_key', hyva.getFormKey()); 2613 2614 const postOptions = { 2615 method: 'POST', 2616 body: formData 2617 }; 2618 2619 window.fetch(action, postOptions) 2620 .then(response => { 2621 if (response.redirected) { 2622 return window.fetch(response.url, postOptions); 2623 } 2624 return response; 2625 }) 2626 .then(response => { 2627 if (!response.ok) { 2628 throw new Error('Response not ok: ' + response.status); 2629 } 2630 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 2631 }) 2632 .catch((error) => { 2633 console.error(error); 2634 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 2635 [{ 2636 type: "error", 2637 text: "Une\u0020erreur\u0020s\u0027est\u0020produite.\u0020Veuillez\u0020r\u00E9essayer." 2638 }], 5000 2639 ); 2640 }) 2641 .finally(() => { 2642 this.isLoading = false;
2643 }); 2644 } 2645 } 2646 } 2647</script>
2647 2648<section id="cart-drawer" 2649 x-data="initCartDrawer()" 2650 @private-content-loaded.window="getData($event.detail.data)" 2651 @toggle-cart.window="open=true" 2652 @keydown.window.escape="open=false" 2653> 2654 <template x-if="cart"> 2655 <div role="dialog" 2656 aria-labelledby="cart-drawer-title" 2657 aria-modal="true" 2658 @click.outside="open=false" 2659 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 2660 <div class="backdrop" 2661 x-show="open" 2662 x-transition:enter="ease-in-out duration-500" 2663 x-transition:enter-start="opacity-0" 2664 x-transition:enter-end="opacity-100" 2665 x-transition:leave="ease-in-out duration-500" 2666 x-transition:leave-start="opacity-100" 2667 x-transition:leave-end="opacity-0" 2668 @click="open=false" 2669 aria-label="Close panel"></div> 2670 <div class="relative md:w-screen w-[440px] max-w-[440px] lg:max-w-[600px] shadow-2xl" 2671 x-show="open" 2672 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 2673 x-transition:enter-start="translate-x-full" 2674 x-transition:enter-end="translate-x-0" 2675 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 2676 x-transition:leave-start="translate-x-0" 2677 x-transition:leave-end="translate-x-full" 2678 > 2679 <div 2680 x-show="open" 2681 x-transition:enter="ease-in-out duration-500" 2682 x-transition:enter-start="opacity-0" 2683 x-transition:enter-end="opacity-100" 2684 x-transition:leave="ease-in-out duration-500" 2685 x-transition:leave-start="opacity-100" 2686 x-transition:leave-end="opacity-0" class="absolute md:top-[42px] md:right-[80px] top-5 right-[15px] flex z-10"> 2687 <button @click="closeMinicart()" aria-label="Close panel" 2688 class="text-black flex items-center justify-center w-10 h-10 bg-neutral-neutral00 rounded-full p-0 absolute top-5 right-5 hover:bg-neutral-neutral05 active:bg-neutral-neutral10"> 2689 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="18" height="18" role="img"> 2690 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2691</svg> 2692 </button> 2693 </div> 2694 <div class=" flex flex-col h-full space-y-6 bg-white shadow-xl lg:pt-10 lg:px-[52px] md:pb-6 py-5 px-2.5 items-center"> 2695 2696 <header class="lg:px-0 mt-9 w-full lg:mt-6 lg:max-w-[436px]"> 2697 <h2 id="cart-drawer-title" class="text-2xl lg:text-3xl mb-1.5 lg:mb-10 leading-7 text-black font-primary font-medium"> 2698 Mon panier <span class="items-total text-xs" 2699 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 2700 x-text="getItemCountTitle()"> 2701 </span> 2702 </h2> 2703 </header> 2704 2705 2706 <div class="items-minicart relative text-center flex flex-col gap-6 px-0 py-6 overflow-y-auto bg-white 2707 sm:gap-8 w-full !mt-0 lg:max-w-[436px]" 2708 :class="{'before:content-icon-cart before:font-icons before:text-7xl': !cart.summary_count}"> 2709 <span x-show="!cart.summary_count" class="label text-base font-semibold"> 2710 Votre panier est vide. </span> 2711 <template x-for="item in cartItems"> 2712 <div class="minicart-item relative flex items-start px-0 lg:px-0 py-4 space-x-4 border-t border-rba-negro5 first-of-type:border-t-0"> 2713 <a :href="item.product_url" class="w-1/4 max-w-[100px]"> 2714 <img 2715 :src="item.product_image.src" 2716 class="w-full" 2717 loading="lazy" 2718 /> 2719 </a> 2720 <div class="w-3/4 text-left !mr-[10%]"> 2721 <div class="mb-2.5"> 2722 <a :href="item.product_url" class="text-base font-semibold">
2723 <span x-html="item.product_type === 'collectable' ? rbaCartTranslations.subscriptionPrefix + item.product_name : item.product_name"></span> 2724 </a> 2725 </div> 2726 <div x-data="{ open: false }"> 2727 <p @click="open = !open; toggleOpen(item.product_name)" 2728 class="view-details after:inline-block after:ml-1.5 after:content-icon-arrow-down after:font-icons after:text-sm 2729 after:text-[12px] font-medium cursor-pointer leading-4 mb-[10px]" 2730 :class="{'after:rotate-180': open}" 2731 x-show="item.details_data"> 2732 Voir les détails </p> 2733 <div x-show="open" class="details-content pb-2.5 text-xs font-primary font-normal"> 2734 <div> 2735 <p class="pb-2.5 text-[12px] font-bold details-data"> 2736 <span x-html="item.details_data"></span> 2737 </p> 2738 </div> 2739 <div> 2740 <p class="text-[12px] text-rba-grey1 description-data"> 2741 <span x-html="item.description_data"></span> 2742 </p> 2743 </div> 2744 <template x-for="option in item.options"> 2745 <div class="pt-2"> 2746 <p class="font-semibold text-xs" 2747 x-text="item.additional_data 2748 ? (rbaCartTranslations.optionLabels[option.label] || option.label) + ' contiene:' 2749 : (rbaCartTranslations.optionLabels[option.label] || option.label) + ':'"></p> 2750 <p class="text-secondary text-xs" 2751 x-html="item.additional_data || (option.value || '').replace(/^Entrega\b/, rbaCartTranslations.entrega)"></p> 2752 <p class="option-id hidden" x-html="option.option_id"></p> 2753 </div> 2754 </template> 2755 </div> 2756 </div> 2757 <p class="flex text-[15px] items-center text-rba-grey1 gap-1 mb-2.5"> 2758 <span x-html="item.qty"></span> X <span x-html="item.product_price"></span> 2759 </p> 2760 <div class="flex items-center"> 2761 <form action="https://boutique.rbafrance.fr/checkout/cart/updatePost/" 2762 x-data="{}" 2763 @submit.prevent="updateQty($event.target)" 2764 method="post" 2765 id="form-validate" 2766 class="form form-cart w-full float-left flex" 2767 > 2768 <button @click="item.qty--, lessQty(item.product_sku, item.qty)" 2769 class="less-qty flex items-center justify-center border border-rba-negro10 rounded-l-lg w-8 h-9 -mr-0.5" 2770 data-cartitem="item.item_id" data-carttype="remove"> 2771 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-rba-negro50" width="20" height="20" role="img"> 2772 <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/> 2773</svg> 2774 </button> 2775 <input :id="'cart-' + item.item_id + '-qty'" 2776 :name="'cart[' + item.item_id + '][qty]'" 2777 :data-sku=item.product_sku 2778 type="number" 2779 :value="item.qty" 2780 size="4" 2781 step="any" 2782 title="Qté" 2783 class="qty form-input-qty relative px-[5px] py-0 text-center text-base w-8 leading-[34px] border-rba-negro10 border-x-0" 2784 required="required" 2785 min="1" 2786 @input.debounce.2000ms="$event.target.form && $event.target.form.dispatchEvent(new Event('submit', { cancelable: true }));" 2787 data-role="cart-item-qty"/> 2788 2789 <button @click="item.qty++, moreQty(item.product_sku, item.qty, item.product_type)" 2790 class="more-qty flex items-center justify-center border border-rba-negro10 rounded-r-lg w-8 h-9 -ml-0.5" 2791 data-carttype="add" 2792 data-cartitem=item.item_id > 2793 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-rba-negro50" width="20" height="20" role="img"> 2794 <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/> 2795</svg> 2796 </button> 2797 </form> 2798 2799 <button class="remove-item-minicart inline-flex before:content-['\e
2799080'] before:font-icons w-[10%] absolute right-0 bottom-12 lg:relative lg:bottom-4" 2800 @click="lessQty(item.product_id, item.qty, item.product_type, item.options), deleteItemFromCart(item.item_id)" 2801 > 2802 </button> 2803 </div> 2804 </div> 2805 </div> 2806 </template> 2807 </div> 2808 2809 2810 <div x-show="cart.summary_count" class="absolute bottom-0 grid pb-6 pt-3.5 bg-white !my-0 !mx-auto border-t border-rba-negro5 2811 max-w-[448px] w-full px-[10px] lg:px-0 lg:max-w-[436px]"> 2812 <div class="w-full py-3 -my-3 mx-auto space-x-4 transition duration-150 ease-in-out rounded-lg mb-[23px]"> 2813 <p class="flex justify-between items-center text-lg font-semibold"> 2814 Total <span class="text-[21px] font-bold" x-html="cart.subtotal"></span> 2815 </p> 2816 </div> 2817 <div class="w-full py-3 -my-3 space-x-4 flex flex-col items-center"> 2818 <a @click.prevent.stop="$dispatch('toggle-authentication', 2819 {url: 'https://boutique.rbafrance.fr/checkout/'});" 2820 href="https://boutique.rbafrance.fr/checkout/" 2821 class="go-checkout btn btn-primary w-full flex justify-center mb-4"> 2822 Commander </a> 2823 <a href="https://boutique.rbafrance.fr/checkout/cart/" 2824 class="view-cart underline font-primary text-[13px] font-bold !m-0"> 2825 Accéder au panier </a> 2826 </div> 2827 </div> 2828 2829 </div> 2830 </div> 2831 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 2832 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 2833 x-show="isLoading" 2834 x-cloak 2835 x-transition:enter="ease-out duration-200" 2836 x-transition:enter-start="opacity-0" 2837 x-transition:enter-end="opacity-100" 2838 x-transition:leave="ease-in duration-200" 2839 x-transition:leave-start="opacity-100" 2840 x-transition:leave-end="opacity-0"> 2841 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 2842<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 2843 <g fill="none" fill-rule="evenodd"> 2844 <g transform="translate(1 1)" stroke-width="2"> 2845 <circle cx="5" cy="50" r="5"> 2846 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 2847 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 2848 </circle> 2849 <circle cx="27" cy="5" r="5"> 2850 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 2851 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 2852 </circle> 2853 <circle cx="49" cy="50" r="5"> 2854 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 2855 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 2856 </circle> 2857 </g> 2858 </g> 2859</svg> 2860 <div class="ml-10 text-primary text-xl"> 2861 Chargement en cours... </div> 2862</div> 2863 </div> 2864 </template> 2865</section>
2866<script> 2867 function toggleOpen(element) { 2868 open = !open; 2869 let eventName; 2870 if(open) { 2871 eventName = 'collapse_content' 2872 } else { 2873 eventName = 'expand_content' 2874 } 2875 dataLayer.push({ 2876 event: 'custom_event', 2877 event_name: eventName, 2878 link_text: 'view_details', 2879 element: 'mini_cart', 2880 content_type: normalizeGA4Value(element) 2881 }); 2882 } 2883 function moreQty(itemSku, itemQty, productType) { 2884 if(productType === 'collectable') { 2885 dataLayer.push({ 2886 event: 'custom_event', 2887 event_name: 'amount_exceeded', 2888 error_message: 'La quantité demandée dépasse la quantité maximale autorisée dans le panier.' 2889 }); 2890 } else { 2891 let url = `${BASE_URL}rba_ga/product/addToCart?sku=`+itemSku+`&qty=`+itemQty+`&addtocart=add&from=mini_cart`; 2892 fetch(url, { 2893 method: 'POST', 2894 headers: { 2895 'Content-Type': 'application/json', 2896 "X-Requested-With": "XMLHttpRequest", 2897 }, 2898 }) 2899 .then(response => { 2900 if (!response.ok) { 2901 throw new Error('Network response was not ok'); 2902 } 2903 return response.json(); 2904 }) 2905 .then(res => { 2906 dataLayer.push(res.resultGa4); 2907 }) 2908 .catch(error => { 2909 console.error('Fetch error:', error); 2910 }); 2911 } 2912 } 2913 function lessQty(itemId, itemQty, productType, itemOptions) { 2914 let options = itemOptions; 2915 let optionsData = []; 2916 if (options.length === 1 || options.length === 2) { 2917 if (options[0].value) { 2918 optionsData.push({id: options[0].option_id, value: options[0].value}) 2919 } 2920 } 2921 2922 if (options.length === 2) { 2923 if (options[1].value) { 2924 optionsData.push({id: options[1].option_id, value: options[1].value}) 2925 } 2926 2927 } 2928 2929 let url = `${BASE_URL}rba_ga/product/removeFromCart?productId=`+itemId+`&qty=`+itemQty+`&optionsData=`+JSON.stringify(optionsData)+`&from=mini_cart`; 2930 2931 fetch(url, { 2932 method: 'POST', 2933 headers: { 2934 'Content-Type': 'application/json', 2935 "X-Requested-With": "XMLHttpRequest", 2936 }, 2937 }) 2938 .then(response => { 2939 if (!response.ok) { 2940 throw new Error('Network response was not ok'); 2941 } 2942 return response.json(); 2943 }) 2944 .then(res => { 2945 dataLayer.push(res.resultGa4); 2946 }) 2947 .catch(error => { 2948 console.error('Fetch error:', error); 2949 }); 2950 } 2951</script>
2951 2952 2953 <!--Authentication Pop-Up--> 2954
2954<script> 2955 function initAuthentication() { 2956 return { 2957 open: false, 2958 registerOpen: false, 2959 forgotOpen: false, 2960 forceAuthentication: false, 2961 checkoutUrl: 'https://boutique.rbafrance.fr/collections/checkout/index/', 2962 isEmailFirstCheckout: false, 2963 errors: 0, 2964 showLoginPassword: false, 2965 isLoading: false, 2966 forgotLoading: false, 2967 hasCaptchaToken: 0, 2968 popupMessages: { 2969 login: [], 2970 register: [], 2971 forgot: [] 2972 }, 2973 popupMessageTypes: { 2974 login: 'error', 2975 register: 'error', 2976 forgot: 'error' 2977 }, 2978 setPopupMessage: function setPopupMessage(scope, message, type = 'error') { 2979 if (!scope || !this.popupMessages[scope]) { 2980 return; 2981 } 2982 this.popupMessageTypes[scope] = type; 2983 this.popupMessages[scope] = message ? [message] : []; 2984 }, 2985 setPopupError: function setPopupError(scope, message) { 2986 this.setPopupMessage(scope, message, 'error'); 2987 }, 2988 clearPopupError: function clearPopupError(scope = null) { 2989 if (scope && this.popupMessages[scope]) { 2990 this.popupMessages[scope] = []; 2991 this.popupMessageTypes[scope] = 'error'; 2992 return; 2993 } 2994 2995 this.popupMessages.login = []; 2996 this.popupMessages.register = []; 2997 this.popupMessages.forgot = []; 2998 this.popupMessageTypes.login = 'error'; 2999 this.popupMessageTypes.register = 'error'; 3000 this.popupMessageTypes.forgot = 'error'; 3001 }, 3002 closeModals: function () { 3003 this.open = false; 3004 this.registerOpen = false; 3005 this.forgotOpen = false; 3006 this.isLoading = false; 3007 this.forgotLoading = false; 3008 this.clearPopupError(); 3009 }, 3010 openLogin: function (targetUrl = null, fromForgotPopup = false) { 3011 if (fromForgotPopup && typeof dataLayer !== 'undefined') { 3012 dataLayer.push({ 3013 event: 'custom_event', 3014 event_name: 'click_back_to_login', 3015 link_url: window.location.href, 3016 element: 'forgotten_password_screen' 3017 }); 3018 } 3019 3020 this.checkoutUrl = targetUrl || this.checkoutUrl; 3021 this.registerOpen = false; 3022 this.forgotOpen = false; 3023 this.open = true; 3024 this.clearPopupError('login'); 3025 }, 3026 openRegister: function (targetUrl = null, fromLoginPopup = false) { 3027 if (fromLoginPopup && typeof dataLayer !== 'undefined') { 3028 dataLayer.push({ 3029 event: 'custom_event', 3030 event_name: 'click_sign_up_here', 3031 link_url: 'https\u003A\u002F\u002Fboutique.rbafrance.fr\u002Fcollections\u002Fcustomer\u002Faccount\u002Fcreate\u002F' 3032 }); 3033 } 3034 3035 this.checkoutUrl = targetUrl || this.checkoutUrl; 3036 this.open = false; 3037 this.forgotOpen = false; 3038 this.registerOpen = true; 3039 this.clearPopupError('register'); 3040 }, 3041 openForgot: function (fromLoginPopup = false) { 3042 if (fromLoginPopup && typeof dataLayer !== 'undefined') { 3043 dataLayer.push({ 3044 event: 'custom_event', 3045 event_name: 'click_forgotten_password', 3046 link_url: 'https\u003A\u002F\u002Fboutique.rbafrance.fr\u002Fcollections\u002Fcustomer\u002Faccount\u002Fforgotpassword\u002F' 3047 }); 3048 } 3049 3050 this.open = false; 3051 this.registerOpen = false;
3052 this.forgotOpen = true; 3053 this.clearPopupError('forgot'); 3054 }, 3055 submitForm: function () { 3056 if (this.isLoading) { 3057 return; 3058 } 3059 3060 // Do not rename $form, the variable is expected to be declared in the recaptcha output 3061 const $form = document.querySelector('#login-form'); 3062 3063 if (this.errors === 0) { 3064 this.dispatchLoginRequest($form); 3065 } 3066 }, 3067 onPrivateContentLoaded: function (data) { 3068 const isLoggedIn = data.customer && data.customer.firstname; 3069 if (data.cart && !isLoggedIn) { 3070 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 3071 } 3072 }, 3073 redirectIfAuthenticated: function (event) { 3074 if (event.detail && event.detail.url) { 3075 this.checkoutUrl = event.detail.url; 3076 } 3077 if (!this.forceAuthentication) { 3078 window.location.href = this.checkoutUrl; 3079 } 3080 }, 3081 init() { 3082 const params = new URLSearchParams(window.location.search); 3083 if (params.has('is_from_popup')) { 3084 const url = new URL(window.location.href); 3085 url.searchParams.delete('is_from_popup'); 3086 history.replaceState({}, '', url.toString()); 3087 } 3088 }, 3089 handlePostLoginRedirect: function (backendRedirectUrl = null) { 3090 if (this.isEmailFirstCheckout) { 3091 window.location.href = backendRedirectUrl || this.checkoutUrl; 3092 return; 3093 } 3094 3095 const url = new URL(window.location.href); 3096 url.searchParams.set('is_from_popup', 'true'); 3097 window.location.href = url.toString(); 3098 }, 3099 dispatchLoginRequest: function(form) { 3100 this.isLoading = true; 3101 const username = this.$refs['customer-email'].value; 3102 const password = this.$refs['customer-password'].value; 3103 const formKey = hyva.getFormKey(); 3104 const bodyFields = { 3105 'username': username, 3106 'password': password, 3107 'formKey': formKey 3108 }; 3109 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 3110 const recaptchaField = fieldName && form[fieldName]; 3111 if (recaptchaField) { 3112 bodyFields[fieldName] = recaptchaField.value; 3113 } 3114 fetch('https://boutique.rbafrance.fr/collections/customer/ajax/login/', { 3115 method: 'POST', 3116 headers: { 3117 'Content-Type': 'application/json', 3118 'X-Requested-With': 'XMLHttpRequest' 3119 }, 3120 body: JSON.stringify(bodyFields) 3121 } 3122 ).then(response => { 3123 return response.json(); 3124 } 3125 ).then(data => { 3126 if (data.errors) { 3127 this.setPopupError('login', data.message); 3128 dispatchMessages([{ 3129 type: 'error', 3130 text: data.message 3131 }], 5000); 3132 this.errors = 1; 3133 this.hasCaptchaToken = 0; 3134 3135 const rememberMeChecked = document.querySelector('#login-remember')?.checked; 3136 const rememberMeElement = rememberMeChecked ? 'remember_me_true' : 'remember_me_false'; 3137 3138 if (typeof dataLayer !== 'undefined') { 3139 dataLayer.push({ 3140 event: 'custom_event', 3141 event_name: 'login_ko', 3142 element: rememberMeElement, 3143 error_message: (data.message || '').toLowerCase().replace(/ /g, '_'), 3144 form_id: 'login-form', 3145 form_name: 'login' 3146 }); 3147 } 3148 3149 } else { 3150 const rememberMeChecked = document.querySelector('#login-remember')?.checked; 3151 const rememberMeElement = rememberMeChecked ? 'remember_me_true' : 'remember_me_false'; 3152 3153 if (typeof dataLayer !== 'undefined') { 3154 dataLayer.push({ 3155 event: 'custom_event', 3156 event_name: 'login_ok', 3157 link_url: window.location.href, 3158 element: rememberMeElement, 3159 form_id: 'login-form', 3160 form_name: 'login' 3161 }); 3162 } 3163 3164 this.handlePostLoginRedirect(data.redirectUrl || null); 3165 } 3166 }).catch(() => { 3167 this.setPopupError('login', 'Unable\u0020to\u0020sign\u0020in\u0020right\u0020now.\u0020Please\u0020try\u0020again.'); 3168 dispatchMessages([{ 3169 type: 'error', 3170 text: 'Unable\u0020to\u0020sign\u0020in\u0020right\u0020now.\u0020Please\u0020try\u0020again.' 3171 }], 5000); 3172 }).finally(() => { 3173 this.isLoading = false;
3174 }); 3175 }, 3176 onForgotEmailInvalid: function (event) { 3177 if (typeof dataLayer !== 'undefined') { 3178 dataLayer.push({ 3179 event: 'custom_event', 3180 event_name: 'reset_password_ko', 3181 element: 'email', 3182 error_message: (event.target.validationMessage || '').toLowerCase().replace(/ /g, '_') 3183 }); 3184 } 3185 }, 3186 submitForgotPassword: function () { 3187 if (this.forgotLoading) { 3188 return; 3189 } 3190 3191 this.errors = 0; 3192 this.clearPopupError('forgot'); 3193 3194 const form = document.querySelector('#forgot-form'); 3195 if (!form) { 3196 this.setPopupError('forgot', 'Unable\u0020to\u0020process\u0020your\u0020request\u0020right\u0020now.'); 3197 return; 3198 } 3199 3200 3201 if (this.errors !== 0) { 3202 return; 3203 } 3204 3205 this.forgotLoading = true; 3206 3207 const email = this.$refs['forgot-email'] ? this.$refs['forgot-email'].value : ''; 3208 const bodyFields = { 3209 email, 3210 form_key: hyva.getFormKey() 3211 }; 3212 3213 const forgotFieldName = 'g\u002Drecaptcha\u002Dresponse'; 3214 const forgotRecaptchaField = forgotFieldName && form[forgotFieldName]; 3215 if (forgotRecaptchaField) { 3216 bodyFields[forgotFieldName] = forgotRecaptchaField.value; 3217 } 3218 3219 const payload = new URLSearchParams(bodyFields).toString(); 3220 3221 fetch('https://boutique.rbafrance.fr/collections/customer/account/forgotpasswordpost/', { 3222 method: 'POST', 3223 headers: { 3224 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 3225 'X-Requested-With': 'XMLHttpRequest' 3226 }, 3227 body: payload, 3228 credentials: 'same-origin' 3229 }).then((response) => response.text()) 3230 .then((html) => { 3231 const parser = new DOMParser(); 3232 const doc = parser.parseFromString(html, 'text/html'); 3233 const forgotPostUrl = 'https\u003A\u002F\u002Fboutique.rbafrance.fr\u002Fcollections\u002Fcustomer\u002Faccount\u002Fforgotpasswordpost\u002F'; 3234 3235 const errorMessageElement = doc.querySelector('.message-error, .message.message-error'); 3236 if (errorMessageElement && errorMessageElement.textContent) { 3237 const errorMessage = errorMessageElement.textContent.trim(); 3238 this.setPopupError('forgot', errorMessage); 3239 3240 if (typeof dataLayer !== 'undefined') { 3241 dataLayer.push({ 3242 event: 'custom_event', 3243 event_name: 'reset_password_ko', 3244 element: 'email', 3245 error_message: errorMessage.toLowerCase().replace(/ /g, '_') 3246 }); 3247 } 3248 return; 3249 } 3250 3251 const successMessageElement = doc.querySelector('.message-success, .message.message-success'); 3252 if (successMessageElement && successMessageElement.textContent) { 3253 this.setPopupMessage('forgot', successMessageElement.textContent.trim(), 'success'); 3254 } else { 3255 this.setPopupMessage( 3256 'forgot', 3257 'If\u0020there\u0020is\u0020an\u0020account\u0020associated\u0020with\u0020this\u0020email,\u0020you\u0020will\u0020receive\u0020a\u0020password\u0020reset\u0020link.', 3258 'success' 3259 ); 3260 } 3261 3262 if (typeof dataLayer !== 'undefined') { 3263 dataLayer.push({ 3264 event: 'custom_event', 3265 event_name: 'reset_password_ok', 3266 link_url: forgotPostUrl, 3267 form_id: 'forgot-form', 3268 form_name: 'reset_password' 3269 }); 3270 } 3271 }) 3272 .catch(() => { 3273 const errorMessage = 'Unable\u0020to\u0020process\u0020your\u0020request\u0020right\u0020now.\u0020Please\u0020try\u0020again.'; 3274 this.setPopupError('forgot', errorMessage); 3275 3276 if (typeof dataLayer !== 'undefined') { 3277 dataLayer.push({ 3278 event: 'custom_event', 3279 event_name: 'reset_password_ko', 3280 element: 'email', 3281 error_message: errorMessage.toLowerCase().replace(/ /g, '_') 3282 }); 3283 } 3284 }) 3285 .finally(() => { 3286 this.forgotLoading = false;
3287 }); 3288 } 3289 } 3290 } 3291 3292 document.addEventListener('click', function (e) { 3293 const submitBtn = e.target.closest('#authentication-popup .login-actions button[type="submit"]'); 3294 if (submitBtn && !submitBtn.disabled) { 3295 const rememberMeChecked = document.querySelector('#login-remember')?.checked; 3296 const authEl = document.querySelector('#authentication-popup'); 3297 const linkUrl = (authEl && typeof Alpine !== 'undefined') 3298 ? (Alpine.$data(authEl).checkoutUrl || window.location.href) 3299 : window.location.href; 3300 3301 if (typeof dataLayer !== 'undefined') { 3302 dataLayer.push({ 3303 event: 'custom_event', 3304 event_name: 'submit_login', 3305 link_url: linkUrl, 3306 element: rememberMeChecked ? 'remember_me_true' : 'remember_me_false', 3307 form_id: 'login-form', 3308 form_name: 'login' 3309 }); 3310 } 3311 return; 3312 } 3313 3314 const forgotSubmitBtn = e.target.closest('#authentication-popup #forgot-form button[type="submit"]'); 3315 if (forgotSubmitBtn && !forgotSubmitBtn.disabled && typeof dataLayer !== 'undefined') { 3316 dataLayer.push({ 3317 event: 'custom_event', 3318 event_name: 'submit_reset_password', 3319 link_url: 'https\u003A\u002F\u002Fboutique.rbafrance.fr\u002Fcollections\u002Fcustomer\u002Faccount\u002Fforgotpasswordpost\u002F', 3320 form_id: 'forgot-form', 3321 form_name: 'reset_password' 3322 }); 3323 return; 3324 } 3325 3326 const registerSubmitBtn = e.target.closest('#authentication-popup #accountcreate-popup button[type="submit"]'); 3327 if (registerSubmitBtn && !registerSubmitBtn.disabled && typeof dataLayer !== 'undefined') { 3328 const registerForm = document.querySelector('#accountcreate-popup'); 3329 const infoConsent = registerForm?.querySelector('#is_check_info-popup, #is_check_info'); 3330 dataLayer.push({ 3331 event: 'custom_event', 3332 event_name: 'submit_sign_up', 3333 link_url: registerForm?.action || '', 3334 element: infoConsent 3335 ? (infoConsent.checked ? 'info_consent_true' : 'info_consent_false') 3336 : '', 3337 form_id: 'accountcreate-popup', 3338 form_name: 'sign_up' 3339 }); 3340 } 3341 }); 3342</script>
3342 3343<section id="authentication-popup" 3344 x-data="initAuthentication()" 3345 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 3346 @toggle-authentication.window="open = forceAuthentication; registerOpen = false; redirectIfAuthenticated(event)" 3347 @open-customer-authentication.window="openLogin(event.detail && event.detail.url ? event.detail.url : null)" 3348 @open-customer-registration.window="openRegister(event.detail && event.detail.url ? event.detail.url : null)" 3349 @open-customer-forgot-password.window="openForgot()" 3350 @set-register-popup-error.window="setPopupError('register', event.detail && event.detail.message ? event.detail.message : '')" 3351 @clear-register-popup-error.window="clearPopupError('register')" 3352 @keydown.window.escape="closeModals()" 3353> 3354 <div 3355 class="backdrop" 3356 aria-hidden="true" 3357 x-cloak 3358 x-show="open || registerOpen || forgotOpen" 3359 x-transition:enter="ease-in-out duration-500" 3360 x-transition:enter-start="opacity-0" 3361 x-transition:enter-end="opacity-100" 3362 x-transition:leave="ease-in-out duration-500" 3363 x-transition:leave-start="opacity-100" 3364 x-transition:leave-end="opacity-0" 3365 @click="closeModals()" 3366 ></div> 3367 <div role="dialog" 3368 aria-modal="true" 3369 @click.outside="open = false" 3370 @click.self="closeModals()" 3371 class="fixed inset-0 z-30 flex items-center justify-center p-4 sm:p-6" 3372 x-cloak 3373 x-show="open" 3374 > 3375 <div class="relative w-full max-w-[800px] bg-container-lighter rounded-lg" 3376 x-show="open" 3377 x-cloak="" 3378 x-transition:enter="transform transition ease-out duration-300" 3379 x-transition:enter-start="opacity-0 scale-95" 3380 x-transition:enter-end="opacity-100 scale-100" 3381 x-transition:leave="transform transition ease-in duration-200" 3382 x-transition:leave-start="opacity-100 scale-100" 3383 x-transition:leave-end="opacity-0 scale-95" 3384 > 3385 <div class="absolute top-0 right-2 z-20 flex p-2 mt-3"> 3386 <button 3387 type="button" 3388 @click="open = false;" 3389 aria-label="Fermer le panel" 3390 class="flex h-10 w-10 items-center justify-center rounded-full bg-white text-black transition duration-150 ease-in-out hover:bg-neutral-neutral05 active:bg-neutral-neutral10" 3391 > 3392 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="18" height="18" role="img"> 3393 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3394</svg> 3395 </button> 3396 </div> 3397 <template x-if="open"> 3398 <div class="grid grid-cols-1 md:grid-cols-2 bg-white overflow-hidden rounded-lg max-h-[90vh]"> 3399 <div class="pt-[60px] pb-10 px-[30px] overflow-y-auto lg:py-10 lg:px-10"> 3400 <div class="block-customer-login max-w-[380px] mx-auto w-full"> 3401 <h2 class="text-center"> 3402 <span id="authenticate-customer-login" class="block text-2xl leading-[120%] lg:text-[32px] lg:leading-[120%] font-semibold text-primary !mb-6 lg:!mb-7">Commander en utilisant votre compte</span> 3403 </h2> 3404 3405 <div x-show="popupMessages.login.length" 3406 class="mb-4 rounded-xl border border-[#f5c2c7] bg-[#fff5f6] px-4 py-3 text-sm text-[#8f1d2c]" 3407 role="alert"> 3408 <template x-for="(message, index) in popupMessages.login" :key="index"> 3409 <p x-text="message"></p> 3410 </template> 3411 </div> 3412 3413 <form class="form form-login" 3414 method="post"
3415 @submit.prevent="submitForm();" 3416 id="login-form" 3417 > 3418 <div class="fieldset login space-y-3 md:space-y-4"> 3419 <div class="field field-reserved email required rba-float-field mt-0"> 3420 <div class="rba-float-field__control"> 3421 <input name="username" 3422 id="form-login-username" 3423 x-ref="customer-email" 3424 @change="errors = 0" 3425 type="email" 3426 required 3427 autocomplete="off" 3428 title="Email" 3429 placeholder=" " 3430 class="rba-float-field__input" 3431 > 3432 <label for="form-login-username">Email</label> 3433 <span class="rba-float-field__check" aria-hidden="true"><svg class="w-5 h-5" viewBox="0 0 20 20" fill="none" aria-hidden="true"><path d="M16.667 5.833 8.125 14.375 4.167 10.417" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 3434 </div> 3435 </div> 3436 <div class="field field-reserved password required rba-float-field mt-0"> 3437 <div class="rba-float-field__control"> 3438 <input name="password" 3439 id="form-login-password" 3440 type="password" 3441 :type="showLoginPassword ? 'text' : 'password'" 3442 required 3443 x-ref="customer-password" 3444 autocomplete="off" 3445 @change="errors = 0" 3446 title="Mot de passe" 3447 placeholder=" " 3448 class="rba-float-field__input rba-float-field__input--icon" 3449 > 3450 <label for="form-login-password">Mot de passe</label> 3451 <button type="button" 3452 class="rba-float-field__toggle" 3453 @click="showLoginPassword = !showLoginPassword" 3454 :aria-label="showLoginPassword 3455 ? 'Hide\u0020password' 3456 : 'Show\u0020password'" 3457 > 3458 <span x-show="!showLoginPassword"><svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/><circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="1.6"/></svg></span> 3459 <span x-show="showLoginPassword" x-cloak><svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M3 3l18 18M10.585 10.585A3 3 0 0 0 12 15a3 3 0 0 0 2.121-.879M9.88 5.09A10.94 10.94 0 0 1 12 5c4.478 0 8.268 2.943 9.542 7a11.05 11.05 0 0 1-1.673 3.078M6.228 6.228A10.94 10.94 0 0 0 2.458 12c1.274 4.057 5.064 7 9.542 7 1.37 0 2.676-.28 3.86-.79" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 3460 </button> 3461 </div> 3462 </div> 3463 3464 <input name="context" type="hidden" value="checkout" /> 3465 <div class="login-actions pt-0 pb-0 !mt-4"> 3466 <div class="w-full flex items-center justify-between gap-2"> 3467 <label for="login-remember" class="inline-flex items-center gap-2.5 mb-0 cursor-pointer"> 3468 <input id="login-remember" 3469 type="checkbox" 3470 class="checkbox h-4 w-4 roun
3470ded-sm !mr-0 border-[#b5b5b5] text-black shrink-0 focus:ring-0 focus:outline-none" 3471 /> 3472 <span class="text-[13px] leading-[130%] text-neutral-neutral100 font-normal">Se souvenir de moi</span> 3473 </label> 3474 <a class="text-[13px] leading-[130%] text-neutral-neutral100 font-normal whitespace-nowrap forgot-password" 3475 href="https://boutique.rbafrance.fr/collections/customer/account/forgotpassword/" 3476 @click.prevent="openForgot(true)" 3477 > 3478 Mot de passe oublié ? </a> 3479 </div> 3480 <button type="submit" 3481 :disabled="isLoading" class="btn-primary w-full mt-6" 3482 > 3483 <span x-text="isLoading 3484 ? 'Signing\u0020in...' 3485 : 'Connexion'"> 3486 Connexion </span> 3487 </button> 3488 </div> 3489 3490 <div class="!mt-7 pb-0 text-[13px] leading-[130%] font-normal text-neutral-neutral100 text-center clear-both"> 3491 <span>Don't have an account yet?</span> 3492 <button type="button" 3493 @click.prevent="openRegister(null, true)" 3494 class="underline open-register" 3495 > 3496 Register here </button> 3497 </div> 3498 3499 </div> 3500 </form> 3501 <div class="pt-0 clear-both"> 3502 </div> 3503 </div> 3504 </div> 3505 <div class="hidden md:block relative overflow-hidden min-h-0"> 3506 <img 3507 src="https://boutique.rbafrance.fr/media/rba_zentral/popup/default/IMG_ZENTRAL.jpg" 3508 alt="Customer login image" 3509 class="absolute inset-0 h-full w-full object-cover" 3510 loading="lazy" 3511 /> 3512 </div> 3513 </div> 3514 </template> 3515 </div> 3516 </div> 3517 3518 <div role="dialog" 3519 aria-modal="true" 3520 @click.outside="closeModals()" 3521 @click.self="closeModals()" 3522 class="fixed inset-0 z-30 flex items-center justify-center p-4 sm:p-6" 3523 x-cloak 3524 x-show="registerOpen" 3525 > 3526 <div class="relative w-full max-w-[780px] bg-container-lighter rounded-lg" 3527 x-show="registerOpen" 3528 x-cloak="" 3529 x-transition:enter="transform transition ease-out duration-300" 3530 x-transition:enter-start="opacity-0 scale-95" 3531 x-transition:enter-end="opacity-100 scale-100" 3532 x-transition:leave="transform transition ease-in duration-200" 3533 x-transition:leave-start="opacity-100 scale-100" 3534 x-transition:leave-end="opacity-0 scale-95" 3535 > 3536 <div class="absolute top-0 right-2 z-20 flex p-2 mt-3"> 3537 <button 3538 type="button" 3539 @click="closeModals()" 3540 aria-label="Fermer le panel" 3541 class="flex h-10 w-10 items-center justify-center rounded-full bg-white text-black transition duration-150 ease-in-out hover:bg-neutral-neutral05 active:bg-neutral-neutral10" 3542 > 3543 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="18" height="18" role="img"> 3544 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 3545</svg> 3546 </button> 3547 </div> 3548 3549 <div class="bg-white overflow-y-auto rounded-xl max-h-[90vh] px-[30px] pb-10 pt-[60px] lg:py-10 lg:px-[60px]"> 3550 <div x-show="popupMessages.register.length" 3551 class="mb-4 rounded-xl border border-[#f5c2c7] bg-[#fff5f6] px-4 py-3 text-sm text-[#8f1d2c]"
3552 role="alert"> 3553 <template x-for="(message, index) in popupMessages.register" :key="index"> 3554 <p x-html="message"></p> 3555 </template> 3556 </div> 3557 3558<div class="auth-popup-register max-w-[760px] mx-auto w-full"> 3559 <h2 class="text-center"> 3560 <span class="block text-2xl leading-[120%] lg:text-[32px] lg:leading-[120%] font-semibold text-primary !mb-6 lg:!mb-7">S'inscrire</span> 3561 </h2> 3562 3563 3564 <form class="form create account form-create-account" 3565 action="https://boutique.rbafrance.fr/collections/customer/account/createpost/" 3566 x-data="Object.assign(hyva.formValidation($el), initRegisterPopupForm())" 3567 id="accountcreate-popup" 3568 @submit.prevent="submitForm()" 3569 method="post" 3570 enctype="multipart/form-data" 3571 autocomplete="off" 3572 > 3573 <input name="form_key" type="hidden" value="BJ3IJV1J2xV39W98" /> <div class="control"> 3574 <input type="hidden" 3575 value="" 3576 name="g-recaptcha-response" 3577 /> 3578</div> 3579 3580 <input type="hidden" name="success_url" value=""> 3581 <input type="hidden" name="error_url" value=""> 3582 <input type="hidden" name="boti_form_name" value="accountcreate-popup"> 3583 3584 <div class="space-y-3 md:space-y-4"> 3585 <div class="grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-4"> 3586 <div class="field field-reserved firstname required rba-float-field mt-0"> 3587 <div class="rba-float-field__control"> 3588 <input type="text" 3589 id="firstname-popup" 3590 name="firstname" 3591 required 3592 value="" 3593 title="Prénom" 3594 placeholder=" " 3595 class="rba-float-field__input" 3596 @input.debounce="onChange" 3597 /> 3598 <label for="firstname-popup">Prénom</label> 3599 <span class="rba-float-field__check" aria-hidden="true"><svg class="w-5 h-5" viewBox="0 0 20 20" fill="none" aria-hidden="true"><path d="M16.667 5.833 8.125 14.375 4.167 10.417" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 3600 </div> 3601 </div> 3602 <div class="field field-reserved lastname required rba-float-field mt-0"> 3603 <div class="rba-float-field__control"> 3604 <input type="text" 3605 id="lastname-popup" 3606 name="lastname" 3607 required 3608 value="" 3609 title="Nom" 3610 placeholder=" " 3611 class="rba-float-field__input" 3612 @input.debounce="onChange" 3613 /> 3614 <label for="lastname-popup">Nom</label> 3615 <span class="rba-float-field__check" aria-hidden="true"><svg class="w-5 h-5" viewBox="0 0 20 20" fill="none" aria-hidden="true"><path d="M16.667 5.833 8.125 14.375 4.167 10.417" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 3616 </div> 3617 </div> 3618 </div> 3619 3620 <div class="field field-reserved email required rba-float-field mt-0"> 3621 <div class="rba-float-field__control"> 3622 <input type="email" 3623 name="email" 3624 id="email_address-popup" 3625 required 3626 autocomplete="email" 3627 value="" 3628 title="Email" 3629 placeholder=" " 3630 class="rba-float-field__input" 3631 @input.debounce="onChange" 3632 /> 3633 <label for="email_address-popup">Email</label>
3634 <span class="rba-float-field__check" aria-hidden="true"><svg class="w-5 h-5" viewBox="0 0 20 20" fill="none" aria-hidden="true"><path d="M16.667 5.833 8.125 14.375 4.167 10.417" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 3635 </div> 3636 </div> 3637 3638 <div class="grid grid-cols-1 md:grid-cols-2 gap-3 md:gap-4"> 3639 <div class="field field-reserved password required rba-float-field mt-0" 3640 x-data="{ showPassword: false }"> 3641 <div class="rba-float-field__control"> 3642 <input :type="showPassword ? 'text' : 'password'" 3643 id="password-popup" 3644 name="password" 3645 title="Mot de passe" 3646 minlength="6" 3647 required 3648 autocomplete="off" 3649 placeholder=" " 3650 class="rba-float-field__input rba-float-field__input--icon" 3651 @input.debounce="onChange" 3652 /> 3653 <label for="password-popup">Mot de passe</label> 3654 <button type="button" 3655 class="rba-float-field__toggle" 3656 @click="showPassword = !showPassword" 3657 :aria-label="showPassword 3658 ? 'Hide\u0020password' 3659 : 'Show\u0020password'" 3660 > 3661 <span x-show="!showPassword"><svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/><circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="1.6"/></svg></span> 3662 <span x-show="showPassword" x-cloak><svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M3 3l18 18M10.585 10.585A3 3 0 0 0 12 15a3 3 0 0 0 2.121-.879M9.88 5.09A10.94 10.94 0 0 1 12 5c4.478 0 8.268 2.943 9.542 7a11.05 11.05 0 0 1-1.673 3.078M6.228 6.228A10.94 10.94 0 0 0 2.458 12c1.274 4.057 5.064 7 9.542 7 1.37 0 2.676-.28 3.86-.79" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 3663 </button> 3664 </div> 3665 </div> 3666 <div class="field field-reserved confirmation required rba-float-field mt-0" 3667 x-data="{ showPassword: false }"> 3668 <div class="rba-float-field__control"> 3669 <input :type="showPassword ? 'text' : 'password'" 3670 id="password-confirmation-popup" 3671 name="password_confirmation" 3672 title="Confirmer le mot de passe" 3673 data-validate='{"equalTo": "password"}' 3674 required 3675 autocomplete="off" 3676 placeholder=" " 3677 class="rba-float-field__input rba-float-field__input--icon" 3678 @input.debounce="onChange" 3679 /> 3680 <label for="password-confirmation-popup">Confirmer le mot de passe</label> 3681 <button type="button" 3682 class="rba-float-field__toggle" 3683 @click="showPassword = !showPassword" 3684 :aria-label="showPassword 3685 ? 'Hide\u0020password' 3686 : 'Show\u0020password'" 3687 > 3688 <span x-show="!showPassword"><svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round"/><circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="1.6"/></svg></span>
3689 <span x-show="showPassword" x-cloak><svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M3 3l18 18M10.585 10.585A3 3 0 0 0 12 15a3 3 0 0 0 2.121-.879M9.88 5.09A10.94 10.94 0 0 1 12 5c4.478 0 8.268 2.943 9.542 7a11.05 11.05 0 0 1-1.673 3.078M6.228 6.228A10.94 10.94 0 0 0 2.458 12c1.274 4.057 5.064 7 9.542 7 1.37 0 2.676-.28 3.86-.79" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 3690 </button> 3691 </div> 3692 </div> 3693 </div> 3694 3695 <div class="space-y-2 !mt-0 text-xs md:text-sm leading-5 auth-popup-register-consents"> 3696 <div class="field choice tos !mt-3 lg:!mt-0"> 3697 <div class="w-full"> 3698 <label for="tosnew-popup" class="inline-flex items-start gap-2.5 w-full"> 3699 <input type="checkbox" 3700 name="tosnew" 3701 id="tosnew-popup" 3702 x-ref="tosnew" 3703 @change="tosError = false" 3704 class="checkbox h-4 w-4 rounded-sm !mr-0 border-[#b5b5b5] text-black mt-0.5 shrink-0 focus:ring-0 focus:outline-none" 3705 /> 3706 <span class="text-[13px] leading-[130%] text-neutral-neutral100 font-normal">I accept the <a href="https://boutique.rbafrance.fr/politique-de-confidentialite" class="text-neutral-neutral100 underline hover:underline">Privacy Policy</a></span> 3707 </label> 3708 <p x-show="tosError" 3709 x-cloak 3710 class="!text-[0.7rem] leading-5 mt-1 ml-6 text-red-500"> 3711 Vous devez accepter la politique de confidentialité </p> 3712 </div> 3713 </div> 3714 3715 <div class="field choice newsletter"> 3716 <label for="is_check_info-popup" class="inline-flex items-start gap-2.5 w-full"> 3717 <input type="checkbox" 3718 name="is_check_info" 3719 value="1" 3720 id="is_check_info-popup" 3721 class="checkbox h-4 w-4 rounded-sm !mr-0 border-[#b5b5b5] text-black mt-0.5 shrink-0 focus:ring-0 focus:outline-none" 3722 /> 3723 <span class="text-[13px] leading-[130%] text-neutral-neutral100 font-normal">I wish to receive commercial communications about products and/or services offered by the RBA Community. See the <a href="https://boutique.rbafrance.fr/politique-de-confidentialite" class="text-neutral-neutral100 underline hover:underline">Privacy Policy</a></span> 3724 </label> 3725 </div> 3726 3727 </div> 3728 3729 <button type="submit" 3730 :disabled="isLoading" class="btn-primary w-full !mt-6" 3731 title="S'inscrire" 3732 > 3733 <span x-text="isLoading 3734 ? 'Creating\u0020account...' 3735 : 'S\u0027inscrire'"> 3736 S'inscrire </span> 3737 </button> 3738 3739 <div class="paragraph-xs auth-popup-register-legal !mt-0"> 3740 3741<p class="mt-4 text-gray-900"> 3742This form is protected by reCAPTCHA - the <a class="underline" href="https://policies.google.com/privacy" target="_blank" rel="noopener">Google Privacy Policy</a> and <a class="underline" href="https://policies.google.com/terms" target="_blank" rel="noopener">Terms of Service</a> apply.</p> 3743 </div> 3744 3745 <button type="button" 3746 id="back_to_login" 3747 class="underline text-[13px] leading-[130%] text-neutral-neutral100 font-normal back-to-login text-center !mt-5 block mx-auto" 3748 @click.prevent="openLogin(null, true)"> 3749 Back to login </button> 3750 </div> 3751 </form> 3752</div> 3753
3754<script> 3755 function initRegisterPopupForm() { 3756 return { 3757 errors: 0, 3758 hasCaptchaToken: 0, 3759 isLoading: false, 3760 tosError: false, 3761 setRegisterError(message) { 3762 window.dispatchEvent(new CustomEvent('set-register-popup-error', { detail: { message } })); 3763 }, 3764 clearRegisterError() { 3765 window.dispatchEvent(new CustomEvent('clear-register-popup-error')); 3766 }, 3767 submitForm() { 3768 if (this.isLoading) { 3769 return; 3770 } 3771 3772 if (!this.$refs['tosnew'] || !this.$refs['tosnew'].checked) { 3773 this.tosError = true; 3774 return; 3775 } 3776 this.tosError = false; 3777 3778 this.clearRegisterError(); 3779 this.isLoading = true; 3780 this.validate() 3781 .then(() => { 3782 const $form = document.querySelector('#accountcreate\u002Dpopup'); 3783 if (!this.hasCaptchaToken) { 3784 this.errors = 1; 3785 3786 3787 const executeGreCaptcha = () => { 3788 grecaptcha.ready(() => { 3789 grecaptcha.execute( 3790 '6LfkNVgtAAAAAFdtkD5s8tEaGf_b1_5yiF2rmSz\u002D', 3791 {action: 'submit'} 3792 ).then((token) => { 3793 if (token && token.length > 0) { 3794 $form['g\u002Drecaptcha\u002Dresponse'].value = token; 3795 this.errors = 0; 3796 this.hasCaptchaToken = 1; 3797 (this.submitForm || $form.submit).call(this); 3798 } else { 3799 this.errors = 1; 3800 const error = 'ReCaptcha\u0020validation\u0020failed,\u0020please\u0020try\u0020again'; 3801 if (this.setErrorMessages) { 3802 this.setErrorMessages([error]) 3803 this.displayErrorMessage = true; 3804 } else { 3805 window.dispatchMessages && window.dispatchMessages([{type: "error", text: error}], 5000); 3806 } 3807 } 3808 }).catch(exception => { 3809 console.error(exception || `An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?`) 3810 }); 3811 }) 3812 } 3813 3814 if (window.grecaptcha) { 3815 executeGreCaptcha(); 3816 } else { 3817 const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LfkNVgtAAAAAFdtkD5s8tEaGf_b1_5yiF2rmSz\u002D"; 3818 const script = document.createElement('script'); 3819 script.setAttribute('type', 'text/javascript'); 3820 script.setAttribute('src', recaptchaUrl); 3821 document.head.appendChild(script); 3822 3823 script.addEventListener("load", executeGreCaptcha, false); 3824 } 3825 } 3826 3827 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 3828 const recaptchaField = fieldName && $form ? $form[fieldName] : null; 3829 3830 if (recaptchaField && !recaptchaField.value) { 3831 const recaptchaError = 'Please\u0020complete\u0020the\u0020reCAPTCHA\u0020verification.'; 3832 this.setRegisterError(recaptchaError); 3833 if (typeof dataLayer !== 'undefined') { 3834 dataLayer.push({ 3835 event: 'custom_event', 3836 event_name: 'sign_up_ko', 3837 element: 'recaptcha', 3838 error_message: recaptchaError.toLowerCase().replace(/ /g, '_'), 3839 form_id: 'accountcreate\u002Dpopup', 3840 form_name: 'sign_up' 3841 }); 3842 } 3843 this.isLoading = false; 3844 return; 3845 } 3846 3847 if (this.errors === 0) { 3848 const formData = new FormData($form); 3849 3850 fetch($form.action, { 3851 method: 'POST', 3852 body: formData, 3853 credentials: 'same-origin', 3854 headers: { 3855 'X-Requested-With': 'XMLHttpRequest' 3856 } 3857 }).then(async (response) => ({ 3858 html: await response.text(), 3859 ok: response.ok, 3860 status: response.status, 3861 redirected: response.redirected, 3862 responseUrl: response.url || '' 3863 })) 3864 .then(({ html, ok, status, redirected, responseUrl }) => { 3865 const parser = new DOMParser(); 3866 const doc = parser.parseFromString(html, 'text/html'); 3867 3868 const errorMessageElement = doc.querySelector('.message-error, .message.message-error'); 3869 if (errorMessageElement && errorMessageElement.textContent) { 3870 const errorMessage = errorMessageElement.textContent.trim(); 3871 this.setRegisterError(errorMessage); 3872 if (typeof dataLayer !== 'undefined') { 3873 dataLayer.push({ 3874 event: 'custom_event', 3875 event_name: 'sign_up_ko', 3876 element: 'form', 3877 error_message: errorMessage.toLowerCase().replace(/ /g, '_'), 3878 form_id: 'accountcreate\u002Dpopup', 3879 form_name: 'sign_up' 3880 }); 3881 } 3882 return; 3883 } 3884 3885 const fieldErrorElement = doc.querySelector('.mage-error'); 3886 if (fieldErrorElement && fieldErrorElement.textContent) { 3887 const errorMessage = fieldErrorElement.textContent.trim(); 3888 this.setRegisterError(errorMessage); 3889 if (typeof dataLayer !== 'undefined') { 3890 dataLayer.push({ 3891 event: 'custom_event', 3892 event_name: 'sign_up_ko', 3893 element: fieldErrorElement.id ? fieldErrorElement.id.replace(/-error$/, '') : 'form', 3894 error_message: errorMessage.toLowerCase().replace(/ /g, '_'), 3895 form_id: 'accountcreate\u002Dpopup', 3896 form_name: 'sign_up' 3897 }); 3898 } 3899 return; 3900 } 3901 3902 if (!ok) { 3903 const requestError = 'Unable\u0020to\u0020create\u0020your\u0020account\u0020right\u0020now.\u0020Please\u0020try\u0020again.'; 3904 this.setRegisterError(requestError); 3905 if (typeof dataLayer !== 'undefined') { 3906 dataLayer.push({ 3907 event: 'custom_event', 3908 event_name: 'sign_up_ko', 3909 element: 'form', 3910 error_message: `http_${status || 'error'}`, 3911 form_id: 'accountcreate\u002Dpopup', 3912 form_name: 'sign_up' 3913 }); 3914 } 3915 return; 3916 } 3917 3918 const redirectedToCreate = redirected && /customer\/account\/create/.test(responseUrl); 3919 3920 if (redirectedToCreate) { 3921 try { 3922 const cookieEntry = document.cookie.split('; ').find(c => c.startsWith('mage-messages=')); 3923 if (cookieEntry) { 3924 const msgs = JSON.parse(decodeURIComponent(cookieEntry.split('=').slice(1).join('='))); 3925 const err = msgs.find(m => m.type === 'error'); 3926 if (err && err.text) { 3927 this.setRegisterError(err.text); 3928 if (typeof dataLayer !== 'undefined') { 3929 dataLayer.push({ 3930 event: 'custom_event', 3931 event_name: 'sign_up_ko', 3932 element: 'form', 3933 error_message: err.text.toLowerCase().replace(/ /g, '_'), 3934 form_id: 'accountcreate\u002Dpopup', 3935 form_name: 'sign_up' 3936 }); 3937 } 3938 return; 3939 } 3940 } 3941 } catch (e) {} 3942 const genericError = 'Unable\u0020to\u0020create\u0020your\u0020account\u0020right\u0020now.\u0020Please\u0020verify\u0020your\u0020information\u0020and\u0020try\u0020again.'; 3943 this.setRegisterError(genericError); 3944 if (typeof dataLayer !== 'undefined') { 3945 dataLayer.push({ 3946 event: 'custom_event', 3947 event_name: 'sign_up_ko', 3948 element: 'form', 3949 error_message: genericError.toLowerCase().replace(/ /g, '_'), 3950 form_id: 'accountcreate\u002Dpopup', 3951 form_name: 'sign_up' 3952 }); 3953 } 3954 return; 3955 } 3956 3957 const successUrlInput = $form.querySelector('input[name="success_url"]'); 3958 const successUrl = (redirected && responseUrl) 3959 ? responseUrl 3960 : (successUrlInput && successUrlInput.value 3961 ? successUrlInput.value 3962 : 'https\u003A\u002F\u002Fmi.rba.es'); 3963 3964 if (typeof dataLayer !== 'undefined') { 3965 const infoConsent = $form.querySelector('#is_check_info-popup, #is_check_info'); 3966 dataLayer.push({ 3967 event: 'custom_event', 3968 event_name: 'sign_up_ok', 3969 link_url: successUrl, 3970 element: infoConsent 3971 ? (infoConsent.checked ? 'info_consent_true' : 'info_consent_false') 3972 : '', 3973 form_id: 'accountcreate\u002Dpopup', 3974 form_name: 'sign_up' 3975 }); 3976 } 3977 3978 window.location.reload(); 3979 }).catch(() => { 3980 const networkError = 'Unable\u0020to\u0020create\u0020your\u0020account\u0020right\u0020now.\u0020Please\u0020try\u0020again.';
3981 this.setRegisterError(networkError); 3982 if (typeof dataLayer !== 'undefined') { 3983 dataLayer.push({ 3984 event: 'custom_event', 3985 event_name: 'sign_up_ko', 3986 element: 'form', 3987 error_message: networkError.toLowerCase().replace(/ /g, '_'), 3988 form_id: 'accountcreate\u002Dpopup', 3989 form_name: 'sign_up' 3990 }); 3991 } 3992 }).finally(() => { 3993 this.isLoading = false; 3994 }); 3995 3996 return; 3997 } 3998 3999 this.isLoading = false; 4000 }) 4001 .catch((invalid) => { 4002 this.isLoading = false; 4003 if (invalid.length > 0) { 4004 if (typeof dataLayer !== 'undefined') { 4005 invalid.forEach((field) => { 4006 const errorEl = field.closest('.field')?.querySelector('.field-error, .messages [data-msg-field]'); 4007 const errorMessage = (errorEl?.textContent || field.validationMessage || '').trim(); 4008 dataLayer.push({ 4009 event: 'custom_event', 4010 event_name: 'sign_up_ko', 4011 element: field.name || 'form', 4012 error_message: errorMessage.toLowerCase().replace(/ /g, '_'), 4013 form_id: 'accountcreate\u002Dpopup', 4014 form_name: 'sign_up' 4015 }); 4016 }); 4017 } 4018 invalid[0].focus(); 4019 } 4020 }); 4021 } 4022 } 4023 } 4024</script>
4024 4025 </div> 4026 </div> 4027 </div> 4028 4029 <div role="dialog" 4030 aria-modal="true" 4031 @click.outside="closeModals()" 4032 @click.self="closeModals()" 4033 class="fixed inset-0 z-30 flex items-center justify-center p-4 sm:p-6" 4034 x-cloak 4035 x-show="forgotOpen" 4036 > 4037 <div class="relative w-full max-w-[800px] bg-container-lighter rounded-lg" 4038 x-show="forgotOpen" 4039 x-cloak="" 4040 x-transition:enter="transform transition ease-out duration-300" 4041 x-transition:enter-start="opacity-0 scale-95" 4042 x-transition:enter-end="opacity-100 scale-100" 4043 x-transition:leave="transform transition ease-in duration-200" 4044 x-transition:leave-start="opacity-100 scale-100" 4045 x-transition:leave-end="opacity-0 scale-95" 4046 > 4047 <div class="absolute top-0 right-2 z-20 flex p-2 mt-3"> 4048 <button 4049 type="button" 4050 @click="closeModals()" 4051 aria-label="Fermer le panel" 4052 class="flex h-10 w-10 items-center justify-center rounded-full bg-white text-black transition duration-150 ease-in-out hover:bg-neutral-neutral05 active:bg-neutral-neutral10" 4053 > 4054 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="18" height="18" role="img"> 4055 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4056</svg> 4057 </button> 4058 </div> 4059 4060 <template x-if="forgotOpen"> 4061 <div class="grid grid-cols-1 md:grid-cols-2 bg-white overflow-hidden rounded-lg max-h-[90vh]"> 4062 <div class="pt-[60px] px-[30px] pb-10 overflow-y-auto lg:py-10 lg:px-10"> 4063 <div class="max-w-[380px] mx-auto w-full"> 4064 <h2 class="text-center"> 4065 <span class="block text-2xl leading-[120%] lg:text-[32px] lg:leading-[120%] font-semibold text-primary !mb-6 lg:!mb-7">Mot de passe oublié ?</span> 4066 </h2> 4067 4068 <p class="text-center"> 4069 <span class="block text-center text-[13px] leading-[130%] text-neutral-neutral100 font-normal">Please enter your email address.</span> 4070 </p> 4071 4072 <p class="text-center"> 4073 <span class="block text-center text-[13px] leading-[130%] text-neutral-neutral100 font-normal mb-6">We will send you a password reset link.</span> 4074 </p> 4075 4076 <div x-show="popupMessages.forgot.length" 4077 class="mb-4 rounded-xl px-4 py-3 text-sm text-left" 4078 :class="popupMessageTypes.forgot === 'success' 4079 ? 'border border-[#b7e4c7] bg-[#f1fff5] text-[#1b5e20]' 4080 : 'border border-[#f5c2c7] bg-[#fff5f6] text-[#8f1d2c]'" 4081 role="alert"> 4082 <template x-for="(message, index) in popupMessages.forgot" :key="index"> 4083 <p x-text="message"></p> 4084 </template> 4085 </div> 4086 4087 <form class="form form-forgotpassword" 4088 method="post" 4089 @submit.prevent="submitForgotPassword();" 4090 id="forgot-form" 4091 > 4092 4093 <div class="field field-reserved email required rba-float-field mt-0"> 4094 <div class="rba-float-field__control"> 4095 <input type="email" 4096 id="forgot-email" 4097 name="email" 4098 x-ref="forgot-email" 4099 @invalid="onForgotEmailInvalid($event)" 4100 required 4101 autocomplete="email" 4102 title="Email" 4103 placeholder=" " 4104 class="rba-float-field__input" 4105 > 4106 <label for="forgot-email">Email</label>
4107 <span class="rba-float-field__check" aria-hidden="true"><svg class="w-5 h-5" viewBox="0 0 20 20" fill="none" aria-hidden="true"><path d="M16.667 5.833 8.125 14.375 4.167 10.417" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span> 4108 </div> 4109 </div> 4110 4111 <div class="pt-2 space-y-4 text-center"> 4112 <button type="submit" 4113 :disabled="forgotLoading" 4114 class="btn-primary w-full" 4115 > 4116 <span x-text="forgotLoading 4117 ? 'Sending...' 4118 : 'R\u00E9initialiser\u0020le\u0020mot\u0020de\u0020passe'"> 4119 Réinitialiser le mot de passe </span> 4120 </button> 4121 4122 <button type="button" 4123 id="back_to_login" 4124 class="underline text-[13px] leading-[130%] text-neutral-neutral100 font-normal back-to-login text-center !mt-7" 4125 @click.prevent="openLogin(null, true)"> 4126 Back to login </button> 4127 </div> 4128 </form> 4129 4130 <div class="pt-4 text-left"> 4131 </div> 4132 </div> 4133 </div> 4134 <div class="hidden md:block relative overflow-hidden min-h-0"> 4135 <img 4136 src="https://boutique.rbafrance.fr/media/rba_zentral/popup/default/IMG_ZENTRAL.jpg" 4137 alt="Customer forgot password image" 4138 class="absolute inset-0 h-full w-full object-cover" 4139 loading="lazy" 4140 /> 4141 </div> 4142 </div> 4143 </template> 4144 </div> 4145 </div> 4146</section> 4147</div>
4148<script> 4149 (function () { 4150 function syncHeaderHeight() { 4151 var wrapper = document.querySelector('.page-wrapper'); 4152 var header = document.querySelector('header.page-header'); 4153 if (!wrapper || !header) { 4154 return; 4155 } 4156 4157 if (header.classList.contains('header-black-hidden') 4158 || header.classList.contains('header-topbar-hidden') 4159 ) { 4160 return; 4161 } 4162 4163 var headerRect = header.getBoundingClientRect(); 4164 var wrapperRect = wrapper.getBoundingClientRect(); 4165 var scrollY = window.scrollY || window.pageYOffset || 0; 4166 var wrapperOrigin = wrapperRect.top + scrollY; 4167 var position = window.getComputedStyle(header).position; 4168 var height; 4169 4170 if (position === 'fixed' || position === 'sticky') { 4171 // El header está anclado al viewport; .page-wrapper puede no empezar en y=0. 4172 height = Math.round(headerRect.bottom - wrapperOrigin); 4173 } else { 4174 height = Math.round(header.offsetHeight); 4175 } 4176 4177 if (height > 0) { 4178 wrapper.style.setProperty('padding-top', height + 'px', 'important'); 4179 } 4180 } 4181 4182 document.addEventListener('DOMContentLoaded', syncHeaderHeight); 4183 window.addEventListener('load', syncHeaderHeight); 4184 window.addEventListener('resize', syncHeaderHeight); 4185 if (window.visualViewport) { 4186 window.visualViewport.addEventListener('resize', syncHeaderHeight); 4187 } 4188 4189 if (typeof ResizeObserver === 'function') { 4190 document.addEventListener('DOMContentLoaded', function () { 4191 var header = document.querySelector('header.page-header'); 4192 if (!header) { 4193 return; 4194 } 4195 new ResizeObserver(syncHeaderHeight).observe(header); 4196 }); 4197 } 4198 })(); 4199</script>
vendor: 1 bytes, line 4199
4199
4200<script> 4201 async function eventTopMenuCart(element) { 4202 const body = document.body; 4203 body.classList.add('overlay'); 4204 body.style.top = `-${window.scrollY}px`; 4205 //body.classList.add('fixed'); 4206 4207 dataLayer.push({ 4208 "event": "custom_event", 4209 "event_name": "click_top_menu", 4210 "link_text": "shopping_cart", 4211 "link_url": undefined 4212 }); 4213 4214 var url = `${BASE_URL}rba_ga/cart/getCartData?viewcart=1&carttype=mini_cart`; 4215 try { 4216 const response = await fetch(url, { 4217 method: 'POST', 4218 headers: { 4219 'Content-Type': 'application/x-www-form-urlencoded', 4220 "X-Requested-With": "XMLHttpRequest", 4221 }, 4222 }); 4223 4224 const res = await response.json(); 4225 dataLayer.push(res.resultGa4); 4226 } catch (error) { 4227 // Handle error 4228 console.error('Error:', error); 4229 } 4230 } 4231</script>
4231 4232<div class="header-wrapper"><div class="header-frontend header__collectibles"> <nav class="navigation collectible-menu-wrapper collectible-menu-wrapper-it h-[80px] lg:!hidden" aria-label="Collection menu"> 4233 <div class="collectible-subheader-logo shrink-0 max-w-[50%]"> 4234 <img class="collectible-subheader-logo__img max-h-[40px] object-contain object-left" 4235 src="https://boutique.rbafrance.fr/media/catalog/tmp/frontend/Logo_web_2_1.svg" 4236 alt="FR - Balzac"> 4237 </div> 4238 <div> 4239 <span class="collectible-menu-button m-0 ml-0 shrink-0"> 4240 <a href="#subscribe-section" class="action primary collectible-subheader-subscribe action primary">S'abonner</a> </span> 4241 </div> 4242 </nav> 4243 <nav class="navigation collectible-menu-wrapper !hidden lg:!flex" data-mage-init='{"megamenu":{}}'> 4244 <img class="logo col-md-3 logo d-none d-md-flex" src="https://boutique.rbafrance.fr/media/catalog/tmp/frontend/Logo_web_2_1.svg" alt=""> 4245 4246 <div class="col-md-9 collectible-menu-list"> 4247 <style>#html-body [data-pb-style=S78177Y]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="S78177Y"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><ul class="collectible-menu-ul" id="default"> 4248 <li class="collectible-menu-link"><a href="#collection-section">Collection</a></li> 4249 <li class="collectible-menu-link"><a href="#deliveries-section">Ouvrages</a></li> 4250 <li class="collectible-menu-link"><a href="#advantages-section">Offre d’abonnement</a></li> 4251 <li class="collectible-menu-link"><a href="#faqs-section">Questions - Réponses</a></li> 4252 <li class="collectible-menu-button"><a href="#subscribe-section" class="action primary">S'abonner</a></li> 4253 </ul></div></div></div> </div> 4254 4255 <div class="nav-footer"> 4256 <div class="nav-footer__item"> 4257 </div> 4258 4259 <div class="nav-footer__item"> 4260 </div> 4261 </div> 4262 4263 <a 4264 class="logo-mobile d-block d-md-none" 4265 href="https://boutique.rbafrance.fr/collections/" 4266 title="" 4267 aria-label="store logo"> 4268 <img src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/images/logo_coleccionables_rba.svg" 4269 data-mage-init='{"dataLayerClick": 4270 { 4271 "event":"custom_event", 4272 "event-name":"click_top_menu", 4273 "link-text":"rba_logo", 4274 "link-url":"https://boutique.rbafrance.fr/collections/", 4275 "id":"rbalogo" 4276 } 4277 }' 4278 alt=""> 4279</a> 4280 4281 </nav> 4282
4282<script> 4283 document.querySelectorAll('.collectible-menu-list .products-hover').forEach(function (trigger) { 4284 trigger.addEventListener('click', function () { 4285 var panel = trigger.nextElementSibling; 4286 if (panel && panel.classList.contains('revistas-categories-wrapper')) { 4287 panel.classList.toggle('active'); 4288 } 4289 }); 4290 }); 4291 </script>
4291 4292</div></div></header><div class="widget block block-static-block"> 4293 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 4294.main-wrapper ul li { 4295 margin-left: 1rem; 4296 margin-bottom: 0.5rem; 4297 list-style-type: initial; 4298 font-weight: 400; 4299} 4300</style></div></div> 4301<div class="widget block block-static-block"> 4302 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 4303.main-wrapper ul li { 4304 margin-left: 1rem; 4305 margin-bottom: 0.5rem; 4306 list-style-type: initial; 4307 font-weight: 400; 4308} 4309</style></div></div> 4310<div class="widget block block-static-block"> 4311 </div> 4312<div class="widget block block-static-block"> 4313 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
4313<script> 4314 // Crear un elemento <style> 4315 var style = document.createElement('style'); 4316 style.type = 'text/css'; 4317 style.innerHTML = '.widget.block.block-static-block { overflow: hidden; }'; 4318 4319 // Añadir el elemento <style> al <head> 4320 document.head.appendChild(style); 4321</script>
4321</div></div> 4322<main id="maincontent" class="page-main-full-width"><div id="contentarea" tabindex="-1"></div> 4323<div class="page messages"><style>.page.messages { z-index: 25; }</style>
4324<script> 4325 function initMessages() { 4326 return { 4327 messages: window.mageMessages || [], 4328 headerBottom: 0, 4329 init() { 4330 const update = () => { 4331 const header = document.querySelector('header.page-header'); 4332 if (header) this.headerBottom = header.getBoundingClientRect().bottom; 4333 }; 4334 update(); 4335 window.addEventListener('scroll', update, { passive: true }); 4336 window.addEventListener('resize', update, { passive: true }); 4337 }, 4338 isEmpty() { 4339 return this.messages.reduce( 4340 function (isEmpty, message) { 4341 return isEmpty && message === undefined 4342 }, true 4343 ) 4344 }, 4345 hasMessages() { 4346 return !this.isEmpty(); 4347 }, 4348 hasMessage() { 4349 return !!this.message; 4350 }, 4351 removeMessage() { 4352 this.messages[this.index] = undefined; 4353 }, 4354 addMessages(messages, hideAfter) { 4355 messages.map((message) => { 4356 this.messages = this.messages.concat(message); 4357 if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { 4358 hideAfter = window.defaultSuccessMessageTimeout; 4359 } 4360 if (hideAfter) { 4361 this.setHideTimeOut(this.messages.length -1, hideAfter); 4362 } 4363 }); 4364 }, 4365 setHideTimeOut(messageIndex, hideAfter) { 4366 setTimeout((messageIndex) => { 4367 this.messages[messageIndex] = undefined; 4368 }, hideAfter, messageIndex); 4369 }, 4370 getIcon() { 4371 switch (this.message.type) { 4372 case 'success': 4373 return "<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"text-green-500\" width=\"20\" height=\"20\" role=\"img\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"\/>\n<\/svg>\n"; 4374 case 'error': 4375 return "<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"text-red-500\" width=\"20\" height=\"20\" role=\"img\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"\/>\n<\/svg>\n"; 4376 case 'warning': 4377 return "<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"text-amber-500\" width=\"20\" height=\"20\" role=\"img\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"\/>\n<\/svg>\n"; 4378 default: 4379 return "<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"text-blue-600\" width=\"20\" height=\"20\" role=\"img\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clip-rule=\"evenodd\"\/>\n<\/svg>\n"; 4380 } 4381 }, 4382 getTitle() { 4383 switch (this.message.type) { 4384 case 'success': 4385 return 'Succès' 4386 case 'error': 4387 return 'Erreur' 4388 case 'warning': 4389 return 'Attention' 4390 case 'notice': 4391 return 'Notice' 4392 case 'info': 4393 return 'Info' 4394 default: 4395 return '' 4396 } 4397 }, 4398 getMessageStyle() { 4399 switch (this.message.type) { 4400 case 'success': 4401 return 'bg-green-50 border border-green-200' 4402 case 'error': 4403 return 'bg-red-50 border border-red-200' 4404 case 'warning': 4405 return 'bg-amber-50 border border-amber-300' 4406 case 'notice': 4407 case 'info': 4408 return 'bg-blue-50 border border-blue-200' 4409 default: 4410 return 'bg-slate-50 border border-slate-200' 4411 } 4412 }, 4413 getMessageUiId() { 4414 return 'message-' + this.message.type; 4415 }, 4416 eventListeners: { 4417 ['@messages-loaded.window'](event) { 4418 this.addMessages(event.detail.messages, event.detail.hideAfter) 4419 }, 4420 ['@private-content-loaded.window'](event) { 4421 const data = event.detail.data; 4422 if ( 4423 data.messages && 4424 data.messages.messages && 4425 data.messages.messages.length 4426 ) { 4427 this.addMessages(data.messages.messages); 4428 } 4429 }, 4430 ['@clear-messages.window']() { 4431 this.messages = []; 4432 } 4433 } 4434 } 4435 } 4436 window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true}) 4437</script>
4437 4438<section 4439 id="messages" 4440 x-data="initMessages" 4441 x-bind="eventListeners" 4442 aria-live="assertive" 4443 role="alert" 4444> 4445 <template x-if="hasMessages"> 4446 <div class="messages pt-3 pb-4 px-3 fixed inset-x-0 z-50 flex flex-col items-center" 4447 :style="{ top: headerBottom + 'px' }"> 4448 <template x-for="(message, index) in messages" :key="index"> 4449 <template x-if="hasMessage"> 4450 <div 4451 class="message flex items-start gap-3 max-w-screen-sm rounded-xl font-normal py-4 px-5 text-slate-700" 4452 :ui-id="getMessageUiId" 4453 :class="getMessageStyle" 4454 > 4455 <span x-html="getIcon" class="flex-shrink-0 mt-0"></span> 4456 <div class="flex-1 min-w-0 text-sm leading-snug"> 4457 <span 4458 x-text="getTitle" 4459 class="font-semibold text-slate-800 mr-1" 4460 ></span><span x-html="message.text"></span> 4461 </div> 4462 <button 4463 type="button" 4464 class="flex-shrink-0 ml-1 transition-colors text-slate-400 hover:text-slate-700" 4465 aria-label="Close message" 4466 @click.prevent="removeMessage" 4467 > 4468 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="18" height="18" aria-hidden="true"> 4469 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 4470</svg> 4471 </button> 4472 </div> 4473 </template> 4474 </template> 4475 </div> 4476 </template> 4477</section> 4478</div><div class="columns"><div class="column main">
4478<script type="text/x-magento-init"> 4479 { 4480 "*": { 4481 "Vdshop_GoogleTagManager/js/share-product": {} 4482 } 4483 } 4484 </script>
4484 4485 <div id="social-login-popup" class="white-popup mfp-with-anim mfp-hide" 4486 data-mage-init='{"socialPopupForm": {"headerLink":".header.links, .section-item-content .header.links, .authorization-link","popupEffect":"mfp-move-from-top","formLoginUrl":"https:\/\/boutique.rbafrance.fr\/collections\/customer\/ajax\/login\/","forgotFormUrl":"https:\/\/boutique.rbafrance.fr\/collections\/sociallogin\/popup\/forgot\/","createFormUrl":"https:\/\/boutique.rbafrance.fr\/collections\/sociallogin\/popup\/create\/","fakeEmailUrl":"https:\/\/boutique.rbafrance.fr\/collections\/sociallogin\/social\/email\/","showFields":"","popupLogin":false,"actionName":"catalog_product_view","checkMode":true}}'> 4487 </div> 4488 <div style="clear: both"></div>
4489<script> 4490 window.valuesConfigProduct = ''; 4491 window.valuesConfigCheckout = ''; 4492</script>
vendor: 1 bytes, line 4492
4492
4493<script> 4494 'use strict'; 4495 4496 document.addEventListener('DOMContentLoaded', function (){ 4497 let faqTrigger = document.querySelectorAll('.faq-trigger'); 4498 faqTrigger[0].classList.toggle("active"); 4499 let content = faqTrigger[0].nextElementSibling; 4500 if (content.style.maxHeight){ 4501 content.style.maxHeight = null; 4502 content.style.padding = '0px'; 4503 } else { 4504 content.style.maxHeight = content.scrollHeight + 15 + "px"; 4505 content.style.padding = '0 0 15px'; 4506 } 4507 faqTrigger.forEach((el) => { 4508 el.addEventListener("click", function() { 4509 this.classList.toggle("active"); 4510 let content = this.nextElementSibling; 4511 4512 if (content.style.maxHeight){ 4513 content.style.maxHeight = null; 4514 content.style.padding = '0px'; 4515 } else { 4516 content.style.maxHeight = content.scrollHeight + 15 + "px"; 4517 content.style.padding = '0 0 15px'; 4518 } 4519 }); 4520 }); 4521 }); 4522</script>
4522 4523<div class="widget block block-static-block"> 4524 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
4524<script> 4525document.addEventListener('DOMContentLoaded', function() { 4526 const selects = document.querySelectorAll('select'); 4527 4528 console.log(`Se encontraron ${selects.length} elementos <select>.`); 4529 4530 selects.forEach(select => { 4531 const options = select.options; 4532 for (let i = 0; i < options.length; i++) { 4533 const option = options[i]; 4534 const text = option.textContent.trim(); 4535 4536 if (text.includes('Entrega')) { 4537 const nuevoTexto = text.replace('Entrega', 'Numéro').trim(); 4538 console.log(`Cambiando: "${text}" → "${nuevoTexto}"`); 4539 option.textContent = nuevoTexto; // También puedes usar innerHTML si fuese necesario 4540 } 4541 } 4542 }); 4543}); 4544</script>
4544 4545</div></div> 4546</div></div><div class="main-wrapper"><div class="collectable-content"> 4547<div class="product attribute description"> 4548 <strong class="type"></strong> 4549 <div class="value" ><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 4550 <style>#html-body [data-pb-style=M1P7DD5],#html-body [data-pb-style=TVIFWKE]{background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=TVIFWKE]{justify-content:center;display:flex;flex-direction:column;background-position:center center;padding-top:35px;padding-bottom:35px}#html-body [data-pb-style=M1P7DD5]{background-position:left top;align-self:stretch}#html-body [data-pb-style=YUU9YUI]{display:flex;width:100%}#html-body [data-pb-style=H5MWVU1]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:56.25%;align-self:center}#html-body [data-pb-style=U4RK91Q]{margin-bottom:-6px;padding-right:40px;border-style:none}#html-body [data-pb-style=IY9BS0M],#html-body [data-pb-style=QGEDWWV]{max-width:100%;height:auto}#html-body [data-pb-style=TKS285C]{justify-content:center;display:flex;flex-direction:column;background-color:#fff;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-radius:30px;width:43.75%;align-self:center}#html-body [data-pb-style=MCPFUKV]{text-align:center;margin-bottom:20px;border-style:none}#html-body [data-pb-style=FDPAB5H],#html-body [data-pb-style=QX6SIID]{max-width:100%;height:auto}#html-body [data-pb-style=PEL0KYQ]{margin-bottom:12px}#html-body [data-pb-style=JDIAN1N]{margin-bottom:4px}#html-body [data-pb-style=M4B6AEW]{margin-bottom:6px}#html-body [data-pb-style=HDJBFJS]{margin-bottom:20px}#html-body [data-pb-style=EGS6DOJ]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin-bottom:16px}#html-body [data-pb-style=RNHA89I]{margin-bottom:8px}#html-body [data-pb-style=UAE1R0J]{padding-left:10px;padding-right:10px}#html-body [data-pb-style=AWML3JW]{text-align:center;min-height:346px}#html-body [data-pb-style=CGWGS72]{background-position:center center;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=B57NRJ6]{min-height:346px;background-color:transparent}#html-body [data-pb-style=UL9E3A7]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=TCGD4IB]{min-height:346px;background-color:transparent}#html-body [data-pb-style=L1QN0R4]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=RTMI05D]{min-height:346px;background-color:transparent}#html-body [data-pb-style=GYQGD54]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=LO270UD]{min-height:346px;background-color:transparent}#html-body [data-pb-style=EO6JBPP]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=IN6BI5Q]{min-height:346px;background-color:transparent}#html-body [data-pb-style=DU6QI34]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=CGNNNGH]{min-height:346px;background-color:transparent}#html-body [data-pb-style=G7623VH]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=GSJW0Q7]{min-height:346px;background-color:transparent}#html-body [data-pb-style=FNILPL4]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=XW3EJ7K]{min-height:346px;background-color:transparent}#html-body [data-pb-style=P6BJE98]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=KW8QQ21]{min-height:346px;background-color:transparent}#html-body [data-pb-style=TK4KUJ8]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=SAWJNG1]{min-height:346px;background-color:transparent}#html-body [data-pb-style=J5YG9PE]{background-position:left top;background-size:cover;background-repeat:no-repeat;border-radius:10px;min-height:346px}#html-body [data-pb-style=SJUTQDC]{min-height:346px;background-color:transparent}#html-body [data-pb-style=UVWPNGF],#html-body [data-pb-style=XQ8HJSH]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=UVWPNGF]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=XQ8HJSH]{align-self:stretch}#html-body [data-pb-style=OV3OMN4]{display:flex;width:100%}#html-body [data-pb-style=CJLHYLA]{justify-content:center;display:flex;flex-direction:column;background-position:center center;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:center;border-radius:30px;width:calc(41.6667% - 60px);margin-right:60px;align-self:stretch}#html-body [data-pb-style=YA6F0TC]{border-style:none}#html-body [data-pb-style=ELSW83S],#html-body [data-pb-style=OA4PR46]{border-radius:30px;max-width:100%;height:auto}#html-body [data-pb-style=XKM0065]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%;align-self:center}#html-body [data-pb-style=IG718F7],#html-body [data-pb-style=ONEHDP3]{margin-bottom:32px}#html-body [data-pb-style=JUMLVEC]{text-align:left}#html-body [data-pb-style=AGNMX59]{display:inline-block}#html-body [data-pb-style=UUNX5X1]{text-align:center;background-color:#722844;color:#fff}#html-body [data-pb-style=B44OJWU]{justify-content:center;display:flex;flex-direction:column;background-color:#722844;background-position:center center;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=AS1LT2F],#html-body [data-pb-style=MUAKL35]{margin-bottom:8px}#html-body [data-pb-style=PBXXUI6]{text-align:center;margin-bottom:30px;border-style:none}#html-body [data-pb-style=IC500CG],#html-body [data-pb-style=YY61QK2]{max-width:100%;height:auto}#html-body [data-pb-style=F9X8AHI]{text-align:center;margin-bottom:30px;border-style:none}#html-body [data-pb-style=PMPF8VA],#html-body [data-pb-style=RA1TP2P]{max-width:100%;height:auto}#html-body [data-pb-style=XG3IEC0]{text-align:center;padding-top:10px;padding-bottom:40px}#html-body [data-pb-style=G483C4F]{width:100%;border-color:rgba(255,255,255,.43);display:inline-block}#html-body [data-pb-style=DUJX5UO],#html-body [data-pb-style=X14RNLL]{margin-bottom:8px}#html-body [data-pb-style=TJPWBH9]{text-align:center;margin-bottom:30px;border-style:none}#html-body [data-pb-style=SGJHYF4],#html-body [data-pb-style=SGK85QJ]{max-width:100%;height:auto}#html-body [data-pb-style=MHEORYQ]{text-align:center;margin-bottom:30px;border-style:none}#html-body [data-pb-style=AXP1LDF],#html-body [data-pb-style=WT5AJJH]{max-width:100%;height:auto}#html-body [data-pb-style=H3IAFJE]{text-align:center}#html-body [data-pb-style=JCQJ246]{display:inline-block}#html-body [data-pb-style=UR42V7X]{text-align:center;background-color:#edd082;color:#000}#html-body [data-pb-style=KXGH9OW]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=C0GX143]{margin-bottom:8px}#html-body [data-pb-style=SE7RNXV]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;padding-bottom:40px;align-self:stretch}#html-body [data-pb-style=JV5820Q]{display:flex;width:100%}#html-body [data-pb-style=I4BK2DO]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:center;width:25%;padding-left:10px;padding-right:10px;align-self:flex-start}#html-body [data-pb-style=OI7DIVS]{border-style:none}
4550#html-body [data-pb-style=VNUWM6E],#html-body [data-pb-style=YU1UM2H]{max-width:100%;height:auto}#html-body [data-pb-style=L1S5LR8]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:center;width:25%;padding-left:10px;padding-right:10px;align-self:flex-start}#html-body [data-pb-style=QJSPFKX]{border-style:none}#html-body [data-pb-style=E0364D5],#html-body [data-pb-style=JEED9CE]{max-width:100%;height:auto}#html-body [data-pb-style=SA8XWV3]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:center;width:25%;padding-left:10px;padding-right:10px;align-self:flex-start}#html-body [data-pb-style=K8MG1H2]{border-style:none}#html-body [data-pb-style=DS6LEPS],#html-body [data-pb-style=EATXEBG]{max-width:100%;height:auto}#html-body [data-pb-style=GOU1YSQ]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:center;width:25%;padding-left:10px;padding-right:10px;align-self:flex-start}#html-body [data-pb-style=IVL2IIA]{border-style:none}#html-body [data-pb-style=ETCCA7X],#html-body [data-pb-style=FWCM90R]{max-width:100%;height:auto}#html-body [data-pb-style=BCQ4TQH]{justify-content:center;display:flex;flex-direction:column;background-color:#e2ddd5;background-position:center bottom;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;padding-top:56px}#html-body [data-pb-style=AGLTUKG],#html-body [data-pb-style=BIK86KY]{margin-bottom:8px}#html-body [data-pb-style=YYX6ADI]{text-align:center;min-height:300px;margin-bottom:24px}#html-body [data-pb-style=A9K6NFP]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=SU80RGC]{min-height:480px;background-color:transparent}#html-body [data-pb-style=VEA1HPJ]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=WT0ON34]{min-height:480px;background-color:transparent}#html-body [data-pb-style=L1IMMTT]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=N1R91CQ]{min-height:480px;background-color:transparent}#html-body [data-pb-style=DV2XHVG]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=JI1COQP]{min-height:480px;background-color:transparent}#html-body [data-pb-style=GCO5GT6]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=MDX4M28]{min-height:480px;background-color:transparent}#html-body [data-pb-style=XHS3QLX]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=LTGFS1K]{min-height:480px;background-color:transparent}#html-body [data-pb-style=DYVXXEA]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=O2FV26S]{min-height:480px;background-color:transparent}#html-body [data-pb-style=VMP3HWJ]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=WLRR5KH]{min-height:480px;background-color:transparent}#html-body [data-pb-style=C9HKGLY]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=O5I7XRT]{min-height:480px;background-color:transparent}#html-body [data-pb-style=DK2RMDN]{background-position:center center;background-size:contain;background-repeat:no-repeat;min-height:480px}#html-body [data-pb-style=TBB6V2A]{min-height:480px;background-color:transparent}#html-body [data-pb-style=GA25H59]{justify-content:flex-start;background-color:#e2ddd5;background-position:center top;padding-bottom:40px}#html-body [data-pb-style=GA25H59],#html-body [data-pb-style=SYBHDYL],#html-body [data-pb-style=YPHMYQ8]{dis
4550play:flex;flex-direction:column;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=YPHMYQ8]{justify-content:flex-start;background-color:#e2ddd5;background-position:center center;padding-bottom:40px}#html-body [data-pb-style=SYBHDYL]{justify-content:center;background-color:#343434;background-position:left top}#html-body [data-pb-style=T1DJP5S]{text-align:center}#html-body [data-pb-style=KOEM09A]{max-width:840px}#html-body [data-pb-style=OKOLNU5],#html-body [data-pb-style=YX75W7G]{background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-radius:20px}#html-body [data-pb-style=YX75W7G]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top}#html-body [data-pb-style=OKOLNU5]{background-color:#002c54;background-position:center center;padding:30px;align-self:stretch}#html-body [data-pb-style=U4TP7JY]{display:flex;width:100%}#html-body [data-pb-style=HATPJW1]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:66.6667%;padding-right:30px;align-self:center}#html-body [data-pb-style=UTT00TO]{text-align:right}#html-body [data-pb-style=WX7NC8I]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:33.3333%;align-self:center}#html-body [data-pb-style=NN9QWS5]{display:inline-block}#html-body [data-pb-style=JHT47RF]{text-align:center;background-color:#edd082;color:#000}#html-body [data-pb-style=G0NATYV],#html-body [data-pb-style=OG2HXYK]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=OG2HXYK]{justify-content:flex-start;display:none;flex-direction:column}#html-body [data-pb-style=G0NATYV]{background-color:#f0f0f0;border-style:none;border-color:#009fef;border-width:1px;border-radius:30px;padding:40px 60px;align-self:stretch}#html-body [data-pb-style=S9ULOKG]{display:flex;width:100%}#html-body [data-pb-style=USLKHVV]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:center;width:50%;align-self:center}#html-body [data-pb-style=IJDKY4R]{border-style:none}#html-body [data-pb-style=F00RMX5],#html-body [data-pb-style=PUD7N9Y]{max-width:100%;height:auto}#html-body [data-pb-style=DBC191Y]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:50%;padding-left:30px;align-self:center}#html-body [data-pb-style=MBAUQTR]{text-align:left;margin-bottom:8px}#html-body [data-pb-style=MTP8HMU]{margin-bottom:8px}#html-body [data-pb-style=SRFQV0B]{margin-bottom:12px}#html-body [data-pb-style=DAVNOC5]{display:inline-block}#html-body [data-pb-style=DRC3O9V]{text-align:center;background-color:#722844;color:#fff}@media only screen and (max-width: 768px) { #html-body [data-pb-style=F9X8AHI],#html-body [data-pb-style=IJDKY4R],#html-body [data-pb-style=IVL2IIA],#html-body [data-pb-style=K8MG1H2],#html-body [data-pb-style=MCPFUKV],#html-body [data-pb-style=MHEORYQ],#html-body [data-pb-style=OI7DIVS],#html-body [data-pb-style=PBXXUI6],#html-body [data-pb-style=QJSPFKX],#html-body [data-pb-style=TJPWBH9],#html-body [data-pb-style=U4RK91Q],#html-body [data-pb-style=YA6F0TC]{border-style:none} }</style><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 4551 4552/* Código para modificar el fondo del menú contextual, el texto y el borde inferior */ 4553 4554body[class*="frontend-"].page-product-collectable .header-wrapper .header-frontend{ 4555border-color: #722844!important; 4556background-color: #722844!important; 4557} 4558 4559.navigation.collectible-menu-wrapper .collectible-menu-list .collectible-menu-link a{ 4560color: #fff!important; 4561} 4562 4563body[class*="frontend-"] .navigation.collectible-menu-wrapper:not(.collectible-menu-wrapper-it) .collectible-menu-list .collectible-menu-button a{ 4564background-color: #EDD082!important; 4565color: #000!important; 4566} 4567 4568.page-product-collectable .collectible-menu-wrapper-it { 4569border-color: #722844!important; 4570background-color: #722844!important; 4571} 4572 4573/* Código para modificar el CTA del menú */ 4574 4575body[class*="frontend-"] .navigation.collectible-menu-wrapper:not(.collectible-menu-wrapper-it) .collectible-menu-list .collectible-menu-button a, .collectible-menu-button a.primary{ 4576background-color: #EDD082!important; 4577border-color: #EDD082!important; 4578color: #000!important; 4579} 4580 4581/* Código para modificar el CTA de addtocart de forma temporal hasta tener los campos de color */ 4582 4583.catalog-product-view a.pagebuilder-button-primary, .catalog-product-view button.pagebuilder-button-primary, .catalog-product-view div.pagebuilder-button-primary{ 4584 4585background-color: #722844!important; 4586border-color: #722844!important; 4587color: #fff!important; 4588 4589} 4590 4591.collactable-modal{ 4592background-color: #722844!important; 4593border-color: #722844!important; 4594color: #fff!important; 4595} 4596 4597</style> 4598</div><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 4599 </div> 4600</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="anchor-scroll-margin-top" id="hero"></div></div><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 4601 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 4602 4603/* Arregla los rows */ 4604 4605[data-content-type='row'] > div { 4606 margin-bottom: 0px; 4607 padding: 0px; 4608} 4609 4610 4611[data-content-type='row'][data-appearance='full-width'] > .row-full-width-inner { 4612 width: 100%; 4613 margin-right: auto; 4614 margin-left: auto; 4615 padding-right: 0rem; 4616 padding-left: 0rem; 4617} 4618 4619 4620/* Arregla los márgenes de los botones */ 4621 4622[data-content-type='buttons'] [data-content-type='button-item'] { 4623 margin-right: 0px!important; 4624 margin-bottom: 0px!important; 4625 max-width: 100%; 4626} 4627 4628.columns { 4629 row-gap: 0rem!important; 4630} 4631 4632</style></div></div> 4633</div><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 4634 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 4635 4636/* Paddings de la caja de información del Hero de Coleccionables */ 4637 4638.full-padding-hero-responsive{ 4639 padding: 45px 45px; 4640} 4641@media (max-width: 768px) { 4642 4643.full-padding-hero-responsive{ 4644 padding: 30px 20px; 4645} 4646 4647} 4648 4649 4650 4651/* Margen inferior para titulares responsive */ 4652 4653.titular-margin-responsive{ 4654 4655margin-bottom: 50px!important; 4656 4657} 4658 4659 4660@media (max-width: 768px) { 4661 4662.titular-margin-responsive{ 4663 4664margin-bottom: 36px!important; 4665 4666} 4667 4668.titular-responsive-70{ 4669 4670font-size: 70px!important; 4671 4672} 4673 4674} 4675 4676 4677/* Ancho máximo para faqs */ 4678 4679 4680.max-width-840{ 4681 max-width: 840px !important; 4682 width: 100%; 4683 margin-left: auto !important; 4684 margin-right: auto !important; 4685} 4686 4687/* Crea listas personalizadas */ 4688 4689.custom-list { 4690 list-style: none; 4691 padding-left: 0; 4692} 4693 4694.custom-list li { 4695 /* Quitamos el display: flex para evitar el conflicto con las negritas */ 4696 display: block; 4697 position: relative; 4698 padding-left: 1.5em;
4698 /* Espacio para que el texto no pise al icono */ 4699 margin-bottom: 10px; /* Separación entre puntos de la lista */ 4700} 4701 4702.custom-list li::before { 4703 content: "\2726"; /* ✦ */ 4704 position: absolute; 4705 left: 0; 4706 top: 0; 4707 /* Esto asegura que el icono no se mueva aunque el texto tenga negritas */ 4708} 4709 4710 4711 4712.custom-checklist { 4713 list-style: none; 4714 padding-left: 0; 4715} 4716 4717.custom-checklist li { 4718 /* Quitamos el display: flex para evitar el conflicto con las negritas */ 4719 display: block; 4720 position: relative; 4721 padding-left: 1.5em; /* Espacio para que el texto no pise al icono */ 4722 margin-bottom: 10px; /* Separación entre puntos de la lista */ 4723} 4724 4725.custom-checklist li::before { 4726content: ""; /* Obligatorio para que el pseudo-elemento exista */ 4727 position: absolute; 4728 width: 24px; /* Define el ancho que quieras para el icono */ 4729 height: 24px; /* Define el alto que quieras para el icono */ 4730 background-image: url("https://tienda.rba.es/media/wysiwyg/verificacion_1.svg"); 4731 background-size: contain; /* Esto hace que la imagen se adapte al width/height */ 4732 background-repeat: no-repeat; 4733 left: 0; 4734 top: 0; 4735 /* Esto asegura que el icono no se mueva aunque el texto tenga negritas */ 4736} 4737 4738 4739/* Listas personalizadas centradas */ 4740 4741.custom-center-checklist { 4742 list-style: none; 4743 padding-left: 0; 4744 display: flex; 4745 flex-direction: column; 4746 align-items: center; /* centra los items */ 4747 margin: 0 auto; /* asegura centrado del bloque */ 4748 max-width: 500px; /* opcional, ajusta a tu diseño */ 4749} 4750 4751.custom-center-checklist li { 4752 display: flex; 4753 align-items: flex-start; 4754 gap: 0.5em; 4755 text-align: left; /* mantiene el texto alineado correctamente */ 4756} 4757 4758.custom-center-checklist li::before { 4759 content: url("https://stgasrwepro02.blob.core.windows.net/mktcloud/Magento/GreenCheck.svg"); 4760 flex-shrink: 0; 4761 margin-top: 2px; /* ajuste fino vertical del icono */ 4762} 4763 4764 4765/* Aplica un ancho máximo de entre 1700px y 1000px */ 4766 4767@media (min-width: 1024px) { 4768 4769.max-1700 { 4770 max-width: 1700px; 4771 margin-left: auto; 4772 margin-right: auto; 4773} 4774 4775.max-width-1700 { 4776 max-width: 1700px; 4777 margin-left: auto; 4778 margin-right: auto; 4779} 4780 4781.max-1600 { 4782 max-width: 1600px; 4783 margin-left: auto; 4784 margin-right: auto; 4785} 4786 4787.max-width-1600 { 4788 max-width: 1600px; 4789 margin-left: auto; 4790 margin-right: auto; 4791} 4792 4793.max-1500 { 4794 max-width: 1500px; 4795 margin-left: auto; 4796 margin-right: auto; 4797} 4798 4799.max-width-1500 { 4800 max-width: 1500px; 4801 margin-left: auto; 4802 margin-right: auto; 4803} 4804 4805.max-1400 { 4806 max-width: 1400px; 4807 margin-left: auto; 4808 margin-right: auto; 4809} 4810 4811.max-width-1400 { 4812 max-width: 1400px; 4813 margin-left: auto; 4814 margin-right: auto; 4815} 4816 4817.max-1300 { 4818 max-width: 1300px; 4819 margin-left: auto; 4820 margin-right: auto; 4821} 4822 4823.max-width-1300 { 4824 max-width: 1300px; 4825 margin-left: auto; 4826 margin-right: auto; 4827} 4828 4829.max-1000 { 4830 max-width: 1000px; 4831 margin-left: auto; 4832 margin-right: auto; 4833} 4834 4835.max-width-1000 { 4836 max-width: 1000px; 4837 margin-left: auto; 4838 margin-right: auto; 4839} 4840 4841} 4842 4843/* Aplica un padding superior e inferior responsive a los rows (desktop 75px y mobile 56px) */ 4844 4845.padding-row-responsive { 4846 padding-top: 75px; 4847 padding-bottom: 75px; /* Desktop */ 4848} 4849 4850@media (max-width: 768px) { 4851 .padding-row-responsive { 4852 padding-top: 56px; 4853 padding-bottom: 56px; /* Móviles */ 4854 } 4855} 4856 4857 4858/* Aplica un margen inferior responsive a los rows (desktop 90px y mobile 56px) */ 4859 4860.margen-row-responsive { 4861 margin-bottom: 75px; /* Ordenador (por defecto) */ 4862} 4863 4864@media (max-width: 768px) { 4865 .margen-row-responsive { 4866 margin-bottom: 58px; /* Móviles */ 4867 } 4868} 4869 4870/* Añade espacio suficiente en el carrusel de imágenes para que se vean las flechas en desktop */ 4871 4872 4873@media (min-width: 1024px) { 4874 .padding-desktop-20 { 4875 padding-left: 20px; 4876 padding-right: 20px; 4877 } 4878} 4879 4880 4881/* Pone un elemento por encima de otro */ 4882 4883.element-over { 4884 position: relative; 4885 z-index: 10; 4886} 4887.element-under { 4888 position: relative; 4889 z-index: 1; 4890} 4891 4892 4893 4894/* Pone un elemento de una columna en full bleed */ 4895 4896.column-fullbleed { 4897 position: relative; 4898 width: 50vw; 4899 margin-right: calc(50% - 50vw); 4900} 4901 4902 4903/* Sombras */ 4904.shadow{ 4905box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.12); 4906} 4907 4908/* Encapsula un texto en una pastilla y permite alinearla a un texto */ 4909 4910.capsule { 4911 font-size: 15px; 4912 font-weight: 400; 4913 padding: 5px 10px; 4914 border: 1px solid #000; /* negro */ 4915 border-radius: 50px; 4916 line-height: 1; 4917 display: inline-block; 4918} 4919 4920.display-flex { 4921 display: flex; 4922 flex-wrap: wrap; /* Si no cabe en una línea, salta a la segunda línea, como el autolayout */ 4923 align-items: center; 4924 gap: 10px; 4925 4926} 4927 4928.display-flex-line { 4929 display: flex; 4930 gap: 10px; 4931 4932} 4933 4934/* Aplica un efecto hover de escala a las imágenes */ 4935 4936 .imagen-hover { 4937 transition: transform 0.3s ease, box-shadow 0.3s ease; 4938 display: inline-block; 4939 } 4940 4941 .imagen-hover:hover { 4942 transform: scale(1.05); 4943 } 4944 4945/* Aplica un desenfoque de fondo estilo glass, requiere transparencia en el color de fondo. Ojo, entra en conflicto con formularios pop up dentro del mismo bloque */ 4946 4947.backdrop-filter{ 4948 4949backdrop-filter: blur(25px); 4950 4951} 4952 4953/* Fija el tamaño máximo de una columna a pesar de que el row esté en full bleed */ 4954 4955.max-width-midcolumn{ 4956 4957max-width: 620px; 4958 4959} 4960 4961.max-width-midcolumn-580{ 4962 4963max-width: 580px; 4964 4965 4966} 4967 4968.max-width-midcolumn-540{ 4969 4970max-width: 540px; 4971 4972} 4973 4974.max-width-midcolumn-520{ 4975 4976max-width: 520px; 4977 4978} 4979 4980.min-width-column-726{ 4981 4982max-width: 726px; 4983 4984} 4985 4986 4987/* Fija el tamaño máximo de un row a 1440px */ 4988 4989.max-width-row{ 4990 4991max-width: 1440px!important; 4992margin-left: auto!important; 4993margin-right: auto!important; 4994} 4995 4996 4997 4998.padding-0-desktop{ 4999padding-top: 0px!important; 5000padding-bottom: 0px!important; 5001padding-left: 0px!important; 5002padding-right: 0px!important; 5003} 5004 5005/* Mobile */ 5006 5007@media (max-width: 768px){ 5008 5009/* Tamaño de texto para pantallas pequeñas (mobile) */ 5010 5011 .responsive-text-17{ 5012 font-size: 14px!important; 5013 } 5014 5015 5016 .responsive-text-20{ 5017 font-size: 20px!important; 5018 } 5019 5020.responsive-text-30 { 5021 font-size: 30px!important; 5022} 5023 5024/* Reducción de paddings de los rows en mobile */ 5025 5026.margin-mobile{ 5027padding-top: 30px!important; 5028padding-bottom: 30px!important; 5029} 5030 5031.padding-mobile{ 5032padding-top: 45px!important; 5033padding-bottom: 45px!important; 5034} 5035 5036.padding-50-mobile{ 5037padding-top: 50px!important; 5038padding-bottom: 50px!important; 5039} 5040 5041 5042/* Eliminación de paddings de los rows en mobile a 0*/ 5043 5044.padding-0-mobile{ 5045padding-top: 0px!important; 5046padding-bottom: 0px!important; 5047padding-left: 0px!important; 5048padding-right: 0px!important; 5049} 5050 5051.margin-0-mobile{ 5052margin-top: 0px!important; 5053margin-bottom: 0px!important; 5054margin-left: 0px!important; 5055margin-right: 0px!important; 5056} 5057 5058.padding-30-mobile{ 5059padding-top: 30px!important; 5060padding-bottom: 30px!important; 5061padding-left: 30px!important; 5062padding-right: 30px!important; 5063} 5064 5065/* Paddings verticales de 8px en mobile*/ 5066 5067.vpadding-8-mobile{ 5068padding-top: 8px!important; 5069padding-bottom: 8px!important; 5070} 5071 5072/* Alineación de texto al centro en mobile */ 5073 5074.align-center-mobile{ 5075 text-align: center!important; 5076} 5077 5078 5079 5080/* 2 columnas en mobile */ 5081 5082pagebuilder-column { 5083 background-attachment: scroll !important; 5084 flex-basis: 50%; 5085 max-width: 50%; 5086} 5087 5088.two-columns{ 5089 flex-basis: 50%; 5090 max-width: 50%; 5091} 5092 5093/* Alineación horizontal de elementos en caja de texto */ 5094 5095.align-flex { 5096 display: flex; 5097 align-items: center; 5098 gap: 10px; 5099} 5100 5101/* Alinear un botón al centro en mobile */ 5102 5103.center-button{ 5104 display: flex; 5105 justify-content: center; /* centra horizontal */ 5106 align-items: center; /* centra vertical (si das altura al contenedor) */ 5107} 5108 5109/* Añade una línea gris debajo de un row o una columna solo en mobile */ 5110 5111.border-bottom-mobile{ 5112border-bottom: 1px solid #E6E6E6; 5113} 5114 5115/* Añade 20px de padding horizontal en mobile */ 5116 5117.padding-horizontal-20-mobile{ 5118 padding-left: 20px; 5119 padding-right: 20px; 5120} 5121 5122.padding-horizontal-10-mobile{ 5123 padding-left: 10px; 5124 padding-right: 10px; 5125} 5126 5127/* Elimina el border radius */ 5128 5129.br-0-mobile{ 5130border-radius: 0px!important; 5131} 5132 5133/* Añade margen inferior en mobile */ 5134 5135.margin-bottom-45-mobile{ 5136margin-bottom: 45px; 5137} 5138 5139.margin-bottom-30-mobile{ 5140margin-bottom: 30px; 5141} 5142 5143.margin-bottom-20-mobile{ 5144margin-bottom: 20px!important; 5145} 5146 5147.margin-bottom-10-mobile!important{ 5148margin-bottom: 10px; 5149} 5150 5151.orden-mobile-izquierda { 5152order: 2; 5153} 5154.orden-mobile-derecha { 5155order: 1; 5156} 5157 5158} 5159 5160</style></div></div> 5161</div><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 5162 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 5163.top-bar { 5164 display: none; 5165} 5166</style></div></div> 5167</div><div class="padding-0-mobile border-bottom-mobile margen-row-responsive background-image-6ac67dca693b7 background-image-6ac67dca6b08d" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images='{\"de
5167sktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/BG_D_6.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="TVIFWKE"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="16" data-element="main" data-pb-style="M1P7DD5"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="YUU9YUI"><div class="pagebuilder-column" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="H5MWVU1"><figure class="padding-0-mobile" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="U4RK91Q"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Bodego_n_Desktop_39.png" alt="" title="" loading="" width="" height="" data-element="desktop_image" data-pb-style="IY9BS0M"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Bodego_n_Mobile_43.jpg" alt="" title="" loading="" width="" height="" data-element="mobile_image" data-pb-style="QGEDWWV"></figure></div><div class="pagebuilder-column br-0-mobile max-width-midcolumn-540 full-padding-hero-responsive" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="TKS285C"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="MCPFUKV"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Logo_Le_Monde_1_1.svg" alt="" title="" loading="lazy" width="185" height="" data-element="desktop_image" data-pb-style="FDPAB5H"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Logo_Le_Monde_1_1.svg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="QX6SIID"></figure><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="PEL0KYQ"><h1 style="text-align: center;">Collection Bibliothèque Balzac</h1></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="JDIAN1N"><div class="normal" style="text-align: center;"><span style="font-size: 15px; letter-spacing: 1.5px;">OFFRE DE LANCEMENT</span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="M4B6AEW"><div class="semibold" style="text-align: center; line-height: 1.2;"><span style="font-size: 28px;"><span style="color: rgb(238, 100, 9);"><span id="H6VIGD3" style="color: rgb(0, 0, 0);">Le Numéro 1, Le Père Goriot, <span style="color: rgb(114, 40, 68);">3,99 € <span id="H6VIGD3">seulement <span style="color: rgb(238, 100, 9);"><span id="H6VIGD3" style="color: rgb(0, 0, 0);"><span style="color: rgb(114, 40, 68);">*</span></span></span></span></span></span></span></span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="HDJBFJS"><div class="p1 regular" style="text-align: center; line-height: 1.2;"><span style="font-size: 15px;">*plus 0,50 € de frais de port</span></div></div><div class="custom-button center-button" data-content-type="text" data-appearance="default" data-element="main"><p></p><div class="add-collectable-modal"> 5168 <div class="content"> 5169 <button type="button" id="btn-modal-close" class="action close"> 5170 <span>Fermer</span> 5171 </button> 5172 <div class="block-title"> 5173 <span class="text">Choisissez votre plan</span> 5174 </div> 5175 <div class="separator"></div> 5176 <div class="label"> 5177 À partir de quel numéro souhaitez-vous commencer votre abonnement ? </div> 5178 <div class="control"> 5179 <label class="minilabel">Numéro de livraison</label> 5180 <select id="collectable-options" class="collectable-select"> 5181 <option value="17850867" data-sku="1" data-matnr="F719001"> 5182 Numéro 001 - Le Père Goriot </option> 5183 <option value="17850868" data-sku="1" data-matnr="F719002"> 5184 Numéro 002 - Illusions perdues </option> 5185 <option value="17850869" data-sku="1" data-matnr="F719003"> 5186 Numéro 003 - Eugénie Grandet </option> 5187 <option value="17850870" data-sku="2" data-matnr="F719004"> 5188 Numéro 004 - La Peau de chagrin </option> 5189 <option value="17850871" data-sku="2" data-matnr="F719005"> 5190 Numéro 005 - La Femme de trente ans </option> 5191 </select> 5192 </div> 5193 5194 5195 5196 5197 <button class="action primary tocart buynow btn-primary" type="button" title="S'abonner" id="process-subscription">
5198 <span>S'abonner</span> 5199 </button> 5200 5201 5202 <div class="product-add-form suscription-159873" data-content-type="basic"> 5203 <form data-role="tocart-form" x-data="hyva.formValidation($el)" data-product-sku="F719/C-00005648" action="https://boutique.rbafrance.fr/collections/checkout/cart/add/uenc/aHR0cHM6Ly9ib3V0aXF1ZS5yYmFmcmFuY2UuZnIvY29sbGVjdGlvbnMvYmFsemFj/product/159873/" method="post" id="product_addtocart_form" enctype="multipart/form-data"> 5204 <input name="form_key" type="hidden" value="BJ3IJV1J2xV39W98"> <input type="hidden" name="product" value="159873"> 5205 <input type="hidden" name="selected_configurable_option" value=""> 5206 <input type="hidden" name="related_product" id="related-products-field" value=""> 5207 <input type="hidden" name="item" value="159873"> 5208 <input type="hidden" name="qty" id="qty" value="1"> 5209 5210 <div class="field mb-[30px]" style="display:none"> 5211 <div class="control"> 5212 <label class="label font-primary font-normal text-base max-lg:text-left">Choisir le numéro à partir duquel vous souhaitez démarrer votre collection </label> 5213 <select id="options[390630]" name="options[390630]" class="collectable-select" @load.window="showGift({'gift-index':'0','select-name':'390630'})"> 5214 <option value="17850867" data-sku="1" data-matnr="F719001"> 5215 Numéro 001 - Le Père Goriot </option> 5216 <option value="17850868" data-sku="1" data-matnr="F719002"> 5217 Numéro 002 - Illusions perdues </option> 5218 <option value="17850869" data-sku="1" data-matnr="F719003"> 5219 Numéro 003 - Eugénie Grandet </option> 5220 <option value="17850870" data-sku="2" data-matnr="F719004"> 5221 Numéro 004 - La Peau de chagrin </option> 5222 <option value="17850871" data-sku="2" data-matnr="F719005"> 5223 Numéro 005 - La Femme de trente ans </option> 5224 </select> 5225 </div> 5226 </div> 5227 5228 <div class="product-actions"> 5229 <button class="action primary tocart buynow btn-primary" type="submit" title="Je m'abonne" data-sku="F719/C-00005648" data-product-id="159873" data-product-name="Bibliothèque Balzac" id="159873" @click="buyNow($el)">
5230 <span>Je m'abonne</span> 5231 </button> 5232 </div> 5233 </form> 5234 </div> 5235 5236 5237 </div> 5238</div> 5239 5240<div class="row addtocart-widget flex justify-center max-lg:px-[5px]" x-data="initAddToCart()"> 5241 <div class="product-add-form font-primary font-normal text-sm"> 5242 <div class=""> 5243 <a href="#subscribe-section"> 5244 <button type="button" title="S'abonner" class="pagebuilder-button-primary"> 5245 <span>S'abonner</span> 5246 </button> 5247 </a> 5248 </div> 5249 </div> 5250</div> 5251 5252<div class="product-actions products-action-mobile hidden"> 5253 <a href="#subscribe-section" class="action primary action-subscribe btn-primary" title="S'abonner"> 5254 <span>S'abonner</span> 5255 </a> 5256 5257 </div> 5258
5259<script> 5260 function showGift(options) { 5261 const elname = options['select-name'], 5262 giftIndex = Number(options['gift-index']), 5263 element = document.querySelector(`select[name="options[${elname}]"]`); 5264 5265 if (!element) return; 5266 5267 function _applyGiftVisibility(index) { 5268 const giftDescription = document.querySelector('.gift-description'); 5269 if (giftDescription) { 5270 if (Number(index) > giftIndex) { 5271 giftDescription.style.visibility = "hidden"; 5272 giftDescription.style.height = "0px"; 5273 } else { 5274 giftDescription.style.visibility = "visible"; 5275 giftDescription.style.height = "auto"; 5276 } 5277 } 5278 } 5279 5280 function updateGiftDisplay() { 5281 const selected = element.options[element.selectedIndex]; 5282 if (!selected) return; 5283 _applyGiftVisibility(selected.dataset.sku); 5284 } 5285 5286 updateGiftDisplay(); 5287 element.addEventListener('change', updateGiftDisplay); 5288 } 5289 5290 /* 5291 * Delivery combinations (plan × speed) → product/form. 5292 * delivery_type: 1=básica estándar, 2=básica rápida, 3=premium estándar, 4=premium rápida 5293 */ 5294 window.rbaDeliveryCombinations = []; 5295 window.rbaShowDeliveryOptions = false; 5296 window.rbaMainProductId = 159873; 5297 window.rbaIsPremiumMap = {"159873":0}; 5298 5299 /** 5300 * Returns the delivery_type key ('1'–'4') for the current plan + speed selections. 5301 * premium/basic → data-content-type of the active .subscription-plan-container 5302 * fast/standard → input[name="delivery-type"]:checked (value 2=rápida, 1=estándar) 5303 */ 5304 function getActiveCombinationKey() { 5305 var isPremium = false; 5306 var activeContainer = document.querySelector('.subscription-plan-container.active'); 5307 if (activeContainer) { 5308 isPremium = (activeContainer.getAttribute('data-content-type') === 'premium'); 5309 } else { 5310 var firstContainer = document.querySelector('.subscription-plan-container'); 5311 if (firstContainer) { 5312 isPremium = (firstContainer.getAttribute('data-content-type') === 'premium'); 5313 } else { 5314 var map = window.rbaIsPremiumMap || {}; 5315 var mainId = window.rbaMainProductId; 5316 isPremium = map.hasOwnProperty(mainId) ? (map[mainId] === 1) : false; 5317 } 5318 } 5319 var deliveryRadio = document.querySelector('input[name="delivery-type"]:checked');
5320 var isFast = deliveryRadio ? (parseInt(deliveryRadio.value, 10) === 2) : false; 5321 5322 if (isPremium && isFast) return '4'; // Premium rápida 5323 if (isPremium && !isFast) return '3'; // Premium estándar 5324 if (!isPremium && isFast) return '2'; // Básica rápida 5325 return '1'; // Básica estándar 5326 } 5327 5328 /** 5329 * Returns the matching combination row or null when delivery options are 5330 * not enabled / no combinations configured. 5331 */ 5332 function getActiveCombination() { 5333 if (!window.rbaShowDeliveryOptions) { return null; } 5334 var combinations = window.rbaDeliveryCombinations || []; 5335 if (!combinations.length) { return null; } 5336 var key = getActiveCombinationKey(); 5337 for (var i = 0; i < combinations.length; i++) { 5338 if (String(combinations[i].delivery_type) === key) { 5339 return combinations[i]; 5340 } 5341 } 5342 return null; 5343 } 5344 5345 function initAddToCart() { 5346 const submitFormStatus = new Map(); // Mapa para rastrear el estado de cada formulario 5347 5348 return { 5349 options: {}, 5350 5351 init() { 5352 // Evento de scroll global 5353 window.addEventListener('scroll', function () { 5354 let scrollTop = window.scrollY || document.documentElement.scrollTop; 5355 let productsActionMobile = document.querySelector('.products-action-mobile'); 5356 5357 if (scrollTop > 100) { 5358 productsActionMobile.classList.add('active'); 5359 } else { 5360 productsActionMobile.classList.remove('active'); 5361 } 5362 }); 5363 }, 5364 5365 showGift(options) { 5366 showGift(options); 5367 }, 5368 5369 async buyNow(element) { 5370 const form = element.closest('form'); 5371 const formKey = form.id || `form-${Date.now()}`; 5372 5373 let formSubmit = $(form); 5374 if (!submitFormStatus.get(formKey)) { 5375 submitFormStatus.set(formKey, true); 5376 5377 const inputHidden = document.createElement('input'); 5378 inputHidden.type = 'hidden'; 5379 inputHidden.className = 'isbuynow'; 5380 inputHidden.name = 'isbuynow'; 5381 inputHidden.value = '1'; 5382 form.appendChild(inputHidden); 5383 5384 const prodId = element.getAttribute('data-product-id'); 5385 const prodSku = element.getAttribute('data-sku'); 5386 const baseUrl = typeof BASE_URL !== 'undefined' ? BASE_URL : '/'; 5387 const url = `${baseUrl}rba_ga/product/getDuplicateItem?productId=${prodId}`; 5388 5389 try { 5390 const response = await fetch(url, { 5391 method: 'POST', 5392 headers: { 5393 'Content-Type': 'application/x-www-form-urlencoded', 5394 'X-Requested-With': 'XMLHttpRequest', 5395 }, 5396 }); 5397 5398 const res = await response.json(); 5399 5400 if (res.isDuplicate) { 5401 dataLayer.push({ 5402 event: 'custom_event', 5403 event_name: 'amount_exceeded', 5404 error_message: 'The requested qty exceeds the maximum qty allowed in shopping cart', 5405 }); 5406 form.submit(); 5407 } else { 5408 let contentType = 'unknown'; // Valor por defecto 5409 5410 const formContainer = $(`.product-add-form.suscription-${prodId}`); 5411 if (formContainer.length && formContainer.data('content-type')) { 5412 contentType = formContainer.data('content-type'); // Obtener el content_type desde el formulario 5413 } 5414 5415 const $activeSubscription = document.querySelector('.suscription-container.active'); 5416 if ($activeSubscription && $activeSubscription.dataset.contentType) { 5417 contentType = $activeSubscription.dataset.contentType; // Actualizar content_type si existe el contenedor activo 5418 } 5419 const itemVariant = $.trim(formSubmit.find('.collectable-select option:selected').text()) || 'unknown_variant'; 5420 5421 const formContainer2 = element.closest('.product-add-form'); 5422 const productName = formContainer2 ? formContainer2.querySelector('[data-product-name]')?.getAttribute('data-product-name') : ''; 5423 5424 dataLayer.push({ 5425 event: 'custom_event', 5426 event_name: 'direct_to_checkout', 5427 link_url: `${baseUrl}checkout`, 5428 item_variant: normalizeGA4Value(itemVariant), 5429 content_type: contentType, 5430 gift_id: '', 5431 gift_name: '', 5432 element: normalizeGA4Value(productName || '') 5433 }); 5434 5435 const responseGa4 = await fetch(`${baseUrl}rba_ga/product/addToCart`, { 5436 method: 'POST', 5437 headers: { 5438 'Content-Type': 'application/x-www-form-urlencoded', 5439 'X-Requested-With': 'XMLHttpRequest', 5440 }, 5441 body: new URLSearchParams({ 5442 qty: 1, 5443 sku: prodSku, 5444 skuGift: '', 5445 titleGift: '', 5446 from: 'product_view', 5447 itemVariant: document.querySelector('.collectable-select option:checked')?.textContent.trim() || '', 5448 }), 5449 }); 5450 5451 const resGa4 = await responseGa4.json(); 5452 dataLayer.push(resGa4.resultGa4); 5453 5454 form.submit(); 5455 } 5456 } catch (error) { 5457 console.error('Error:', error); 5458 } 5459 } 5460 }, 5461 }; 5462 } 5463 5464 document.addEventListener("DOMContentLoaded", function () { 5465 const cartHandler = initAddToCart(); 5466 cartHandler.init(); 5467 5468 document.querySelectorAll('button.buy-now').forEach(button => { 5469 button.addEventListener('click', () => cartHandler.buyNow(button)); 5470 }); 5471 5472 /** 5473 * Sync all hidden .collectable-select elements to match the visible #collectable-options. 5474 * Matches by material SKU first, then by shipment group, and falls back to index. 5475 */ 5476 function syncAllSelectsBySku(mainSelect) { 5477 if (!mainSelect || mainSelect.selectedIndex < 0) return; 5478 var selectedMatnr = mainSelect.options[mainSelect.selectedIndex].getAttribute('data-matnr'); 5479 var selectedSku = mainSelect.options[mainSelect.selectedIndex].getAttribute('data-sku'); 5480 var mainIndex = mainSelect.selectedIndex; 5481 document.querySelectorAll('.add-collectable-modal .product-add-form select.collectable-select').forEach(function(sel) { 5482 var matched = false;
5483 if (selectedMatnr) { 5484 for (var i = 0; i < sel.options.length; i++) { 5485 if (sel.options[i].getAttribute('data-matnr') === selectedMatnr) { 5486 sel.selectedIndex = i; 5487 matched = true; 5488 break; 5489 } 5490 } 5491 } 5492 if (!matched && selectedSku) { 5493 for (var i = 0; i < sel.options.length; i++) { 5494 if (sel.options[i].getAttribute('data-sku') === selectedSku) { 5495 sel.selectedIndex = i; 5496 matched = true; 5497 break; 5498 } 5499 } 5500 } 5501 if (!matched && sel.options[mainIndex]) { 5502 sel.selectedIndex = mainIndex; 5503 } 5504 sel.dispatchEvent(new Event('change')); 5505 }); 5506 } 5507 5508 //Collectable modal 5509 const collectableModalTransitionMs = 500; 5510 let processBtnPositionTimeout = null; 5511 5512 function openCollectableModal() { 5513 const modal = document.querySelector(".add-collectable-modal"); 5514 if (!modal) return; 5515 5516 window.clearTimeout(processBtnPositionTimeout); 5517 modal.classList.remove("active", "proccess-bt-fixed"); 5518 proccessBtnPosition(true); 5519 // Ensure the closed sticky state is painted before the modal transition starts. 5520 void modal.offsetWidth; 5521 window.requestAnimationFrame(() => { 5522 modal.classList.add("active"); 5523 }); 5524 document.body.classList.add("no-scroll"); 5525 } 5526 5527 function closeCollectableModal() { 5528 const modal = document.querySelector(".add-collectable-modal"); 5529 5530 window.clearTimeout(processBtnPositionTimeout); 5531 modal?.classList.remove("active"); 5532 document.body.classList.remove("no-scroll"); 5533 5534 processBtnPositionTimeout = window.setTimeout(() => { 5535 modal?.classList.remove("proccess-bt-fixed"); 5536 }, collectableModalTransitionMs); 5537 } 5538 5539 // Abrir el modal al hacer clic en el enlace 5540 document.querySelectorAll("a[href='#subscribe-section']").forEach(link => { 5541 link.addEventListener("click", function (e) { 5542 e.preventDefault(); 5543 openCollectableModal(); 5544 5545 try { 5546 var mainSel = document.getElementById('collectable-options'); 5547 if (mainSel) { syncAllSelectsBySku(mainSel); } 5548 } catch(err) { /* ignore */ } 5549 5550 const itemVariant = normalizeGA4Value(document.querySelector('.collectable-select option:checked')?.textContent.trim()) || 'unknown_variant'; 5551 const elementName = 'link-subscribe'; 5552 5553 if (typeof dataLayer !== 'undefined' && Array.isArray(dataLayer)) { 5554 dataLayer.push({ 5555 event: 'custom_event', 5556 event_name: 'click_open_subscription_modal', 5557 item_variant: itemVariant, 5558 element: elementName 5559 }); 5560 } 5561 }); 5562 }); 5563 5564 // Cerrar el modal haciendo clic fuera del modal o del enlace 5565 let modalClosedByClick = false; 5566 document.addEventListener("click", function (e) { 5567 const modal = document.querySelector(".add-collectable-modal"); 5568 5569 if ( 5570 modal?.classList.contains("active") && 5571 !e.target.closest(".add-collectable-modal") && 5572 !e.target.closest("a[href='#subscribe-section']") && 5573 !modalClosedByClick 5574 ) { 5575 closeCollectableModal(); 5576 5577 modalClosedByClick = true; 5578 5579 const collectableSelect = document.querySelector('.collectable-select'); 5580 const itemVariant = collectableSelect ? normalizeGA4Value(collectableSelect.options[collectableSelect.selectedIndex].text.trim()) : 'unknown_variant'; 5581 5582 let contentType = 'unknown'; 5583 const $activeSubscription = document.querySelector('.suscription-container.active'); 5584 if ($activeSubscription && $activeSubscription.dataset.contentType) { 5585 contentType = $activeSubscription.dataset.contentType; 5586 } 5587 5588 if (contentType === 'unknown') { 5589 const $visibleForm = document.querySelector('.add-collectable-modal .product-add-form[data-content-type]'); 5590 if ($visibleForm && $visibleForm.dataset.contentType) { 5591 contentType = $visibleForm.dataset.contentType; 5592 } 5593 } 5594 5595 const elementName = 'click_outside_modal'; 5596 5597 if (typeof dataLayer !== 'undefined' && Array.isArray(dataLayer)) { 5598 dataLayer.push({ 5599 event: 'custom_event', 5600 event_name: 'click_close_subscription_modal', 5601 item_variant: itemVariant, 5602 content_type: contentType, 5603 element: elementName 5604 }); 5605 } 5606 5607 setTimeout(() => { 5608 modalClosedByClick = false;
5609 }, 1000); 5610 } 5611 }); 5612 5613 // Cerrar el modal al hacer clic en el botón de cerrar 5614 document.getElementById("btn-modal-close")?.addEventListener("click", function () { 5615 closeCollectableModal(); 5616 const collectableSelect = document.querySelector('.collectable-select'); 5617 const itemVariant = collectableSelect ? normalizeGA4Value(collectableSelect.options[collectableSelect.selectedIndex].text.trim()) : 'unknown_variant'; 5618 5619 let contentType = 'unknown'; 5620 5621 const $activeSubscription = document.querySelector('.suscription-container.active'); 5622 if ($activeSubscription && $activeSubscription.dataset.contentType) { 5623 contentType = $activeSubscription.dataset.contentType; 5624 } 5625 if (contentType === 'unknown') { 5626 const $visibleForm = document.querySelector('.add-collectable-modal .product-add-form[data-content-type]'); 5627 if ($visibleForm && $visibleForm.dataset.contentType) { 5628 contentType = $visibleForm.dataset.contentType; 5629 } 5630 } 5631 const elementName = 'btn-modal-close'; 5632 5633 if (typeof dataLayer !== 'undefined' && Array.isArray(dataLayer)) { 5634 dataLayer.push({ 5635 event: 'custom_event', 5636 event_name: 'click_close_subscription_modal', 5637 item_variant: itemVariant, 5638 content_type: contentType, 5639 element: elementName 5640 }); 5641 } 5642 }); 5643 5644 // Verificar el hash al cargar la página 5645 checkHash(); 5646 function checkHash() { 5647 if (window.location.hash === "#subscribe-section") { 5648 openCollectableModal(); 5649 } 5650 } 5651 5652 // Sincronizar opciones seleccionadas entre formularios 5653 document.getElementById("collectable-options")?.addEventListener("change", function (e) { 5654 syncAllSelectsBySku(e.target); 5655 }); 5656 5657 // Activar suscripción al hacer clic en el plan container 5658 document.querySelectorAll(".subscription-plan-container").forEach(container => { 5659 container.addEventListener("click", function () { 5660 document.querySelectorAll(".subscription-plan-container").forEach(el => el.classList.remove("active")); 5661 5662 let radioButton = container.querySelector('input[type="radio"]'); 5663 if (radioButton) { 5664 radioButton.checked = true; 5665 container.classList.add("active"); 5666 } 5667 }); 5668 }); 5669 5670 // Activar opción de entrega al hacer clic en el contenedor 5671 document.querySelectorAll(".delivery-option-container").forEach(container => { 5672 container.addEventListener("click", function () { 5673 document.querySelectorAll(".delivery-option-container").forEach(el => el.classList.remove("active")); 5674 5675 let radioButton = container.querySelector('input[type="radio"]'); 5676 if (radioButton) { 5677 radioButton.checked = true; 5678 container.classList.add("active"); 5679 } 5680 }); 5681 }); 5682 5683 // Procesar la suscripción al hacer clic en el botón 5684 document.getElementById("process-subscription")?.addEventListener("click", function () { 5685 5686 // Force the selected delivery option into the target form's select before submitting 5687 function applyCollectableSelection(form) { 5688 var mainSel = document.getElementById('collectable-options'); 5689 if (!mainSel || !form) return; 5690 var selected = mainSel.options[mainSel.selectedIndex]; 5691 var selectedMatnr = selected ? selected.getAttribute('data-matnr') : ''; 5692 var selectedSku = selected ? selected.getAttribute('data-sku') : ''; 5693 var mainVal = mainSel.value; 5694 var formSel = form.querySelector('select.collectable-select'); 5695 if (formSel && mainVal) { 5696 if (selectedMatnr) { 5697 for (var i = 0; i < formSel.options.length; i++) { 5698 if (formSel.options[i].getAttribute('data-matnr') === selectedMatnr) { 5699 formSel.selectedIndex = i; 5700 formSel.dispatchEvent(new Event('change')); 5701 return; 5702 } 5703 } 5704 } 5705 5706 if (selectedSku) { 5707 for (var i = 0; i < formSel.options.length; i++) { 5708 if (formSel.options[i].getAttribute('data-sku') === selectedSku) { 5709 formSel.selectedIndex = i; 5710 formSel.dispatchEvent(new Event('change')); 5711 return; 5712 } 5713 } 5714 } 5715 5716 var opt = formSel.querySelector('option[value="' + CSS.escape(mainVal) + '"]'); 5717 if (!opt) { 5718 syncAllSelectsBySku(mainSel); 5719 return; 5720 } 5721 5722 formSel.value = mainVal; 5723 formSel.dispatchEvent(new Event('change')); 5724 } 5725 } 5726 5727 // If combinations are configured, derive the product from active (plan × delivery) 5728 const combo = getActiveCombination(); 5729 if (combo) {
5730 const comboForm = document.querySelector( 5731 '.add-collectable-modal .product-add-form.suscription-' + combo.product_id + ' form[data-role="tocart-form"]' 5732 ); 5733 if (comboForm) { 5734 applyCollectableSelection(comboForm); 5735 const buyNowButton = comboForm.closest('.product-add-form') 5736 ?.querySelector('.action.primary.tocart.buynow:not([disabled])'); 5737 if (buyNowButton) { 5738 cartHandler.buyNow(buyNowButton); 5739 } else { 5740 comboForm.submit(); 5741 } 5742 } 5743 return; 5744 } 5745 5746 // No combinations — fall back to plan radio selection 5747 const selectedSubscription = document.querySelector("input[name='suscription-type']:checked")?.value; 5748 const form = selectedSubscription 5749 ? document.querySelector(`.add-collectable-modal .product-add-form.${CSS.escape(selectedSubscription)} form`) 5750 : document.querySelector(".add-collectable-modal .product-add-form form"); 5751 5752 if (form) { 5753 applyCollectableSelection(form); 5754 const buyNowButton = form.querySelector(".tocart.buynow"); 5755 if (buyNowButton) { 5756 cartHandler.buyNow(buyNowButton); 5757 } else { 5758 //Si no existe "buynow" envia el formulario 5759 form.dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); 5760 } 5761 } 5762 }); 5763 5764 function proccessBtnPosition(calculateInactive = false, forceRecalculate = false) { 5765 let processSubscriptionBtn = document.getElementById("process-subscription"); 5766 let modal = document.querySelector(".add-collectable-modal"); 5767 5768 if (!processSubscriptionBtn || !modal) return; 5769 5770 if (!modal.classList.contains("active") && calculateInactive !== true) { 5771 modal.classList.remove("proccess-bt-fixed"); 5772 return; 5773 } 5774 5775 if (modal.classList.contains("active") 5776 && modal.classList.contains("proccess-bt-fixed") 5777 && forceRecalculate !== true 5778 ) { 5779 return; 5780 } 5781 5782 let btnOffsetTop = processSubscriptionBtn.getBoundingClientRect().top; 5783 let limit = window.innerHeight - 100; 5784 5785 modal.classList.remove("proccess-bt-fixed"); 5786 5787 if (btnOffsetTop > limit) { 5788 modal.classList.add("proccess-bt-fixed"); 5789 } 5790 } 5791 5792 window.addEventListener("resize", () => proccessBtnPosition(false, true)); 5793 5794 5795 }); 5796</script>
vendor: 1 bytes, line 5796
5796
5797<script> 5798 // Customize modal styles from configed_css 5799 const modalBackground = findStyleForClass("collactable-modal", "background"); 5800 const modalColor = findStyleForClass("collactable-modal", "color"); 5801 5802 addDynamicStyles(modalBackground, modalColor); 5803 5804 5805 function findStyleForClass(className, property = "background") { 5806 const regex = new RegExp(`\\.${className}\\b`); 5807 5808 for (const sheet of document.styleSheets) { 5809 try { 5810 // Search only in stylesheets that include "/configed_css/" 5811 if (sheet.href && sheet.href.includes("/configed_css/")) { 5812 for (const rule of sheet.cssRules) { 5813 // Check if the rule contains the specified class 5814 if (regex.test(rule.selectorText)) { 5815 const value = rule.style[property] || rule.style[`${property}Color`]; 5816 5817 // Convert to HEX if the value is in RGB format 5818 if (value && value.startsWith("rgb")) { 5819 return rgbToHex(value); 5820 } 5821 5822 if (value) { 5823 return value; 5824 } 5825 } 5826 } 5827 } 5828 } catch (e) { 5829 console.warn("Could not read a stylesheet:", e); 5830 } 5831 } 5832 5833 // Return 'inherit' default 5834 return 'inherit'; 5835 } 5836 5837 function rgbToHex(rgb) { 5838 const result = rgb.match(/\d+/g).map(x => parseInt(x).toString(16).padStart(2, '0')); 5839 return `#${result.join("")}`; 5840 } 5841 5842 function addDynamicStyles(modalBackground, modalColor) { 5843 if(modalBackground !== 'inherit' || modalColor !== 'inherit'){ 5844 const styles = ` 5845 .add-collectable-modal .content .suscription-container.active { 5846 background: ${modalBackground.startsWith('#') 5847 ? `rgba(${parseInt(modalBackground.slice(1, 3), 16)}, 5848 ${parseInt(modalBackground.slice(3, 5), 16)}, 5849 ${parseInt(modalBackground.slice(5, 7), 16)}, 0.10)` 5850 : `${modalBackground} 0.10`}; 5851 border-color: ${modalBackground}; 5852 } 5853 .add-collectable-modal .content .suscription-container input[type="radio"] { 5854 border-color: ${modalBackground}; 5855 } 5856 .add-collectable-modal .content .suscription-container input[type="radio"]:checked { 5857 border-color: ${modalBackground}; 5858 } 5859 .add-collectable-modal .content .suscription-container input[type="radio"]:checked::after { 5860 background-color: ${modalBackground}; 5861 } 5862 .add-collectable-modal .content .suscription-container .best-choice { 5863 background: ${modalBackground}; 5864 color: ${modalColor}; 5865 } 5866 .add-collectable-modal .content #process-subscription { 5867 background: ${modalBackground} !important; 5868 border: 2px solid ${modalBackground} !important; 5869 color: ${modalColor} !important; 5870 } 5871 `; 5872 5873 const styleElement = document.createElement('style'); 5874 styleElement.type = 'text/css'; 5875 5876 styleElement.appendChild(document.createTextNode(styles)); 5877 5878 document.head.appendChild(styleElement); 5879 } 5880 } 5881</script>
5881 5882</div></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="anchor-scroll-margin-top" id="collection-section"></div></div><div class="padding-desktop-20 padding-horizontal-10-mobile max-1700" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="EGS6DOJ"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="RNHA89I"><div class="normal" style="text-align: center;"><span style="font-size: 15px; letter-spacing: 1.5px;">LA COLLECTION<br></span></div></div><div class="titular-margin-responsive" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="UAE1R0J"><h2 style="text-align: center;">L’œuvre monumentale du maître du roman français</h2></div><div class="pagebuilder-slider" data-content-type="slider" data-appearance="default" data-autoplay="true" data-autoplay-speed="4000" data-fade="false" data-infinite-loop="true" data-show-arrows="true" data-show-dots="true" data-slider-type="" data-slides-to-show="4" data-slides-to-show-mobile="1" data-center-mode="false" data-center-padding="0" data-element="main" data-pb-style="AWML3JW"><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca693d6 background-image-6ac67dca6b0a3" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C01_9.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="CGWGS72"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="B57NRJ6"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca693d6 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C01_9.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0a3 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C01_9.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca693de background-image-6ac67dca6b0ac" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C02_7.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="UL9E3A7"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="TCGD4IB"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca693de {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C02_7.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0ac {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C02_7.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca693e4 background-image-6ac67dca6b0b3" data-background-images='{\"de
5882sktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C03_7.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="L1QN0R4"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="RTMI05D"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca693e4 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C03_7.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0b3 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C03_7.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca693ea background-image-6ac67dca6b0b9" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C04_8.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="GYQGD54"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="LO270UD"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca693ea {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C04_8.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0b9 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C04_8.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca693ef background-image-6ac67dca6b0bf" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C05_7.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="EO6JBPP"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="IN6BI5Q"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca693ef {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C05_7.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0bf {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C05_7.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca693f5 background-image-6ac67dca6b0c4" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C06_8.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="DU6QI34"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="CGNNNGH"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca693f5 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C06_8.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0c4 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C06_8.jpg);}</style></div></div>
5882<div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca6940f background-image-6ac67dca6b0ca" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C07_7.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="G7623VH"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="GSJW0Q7"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca6940f {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C07_7.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0ca {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C07_7.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69416 background-image-6ac67dca6b0cf" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C08_8.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="FNILPL4"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="XW3EJ7K"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69416 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C08_8.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0cf {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C08_8.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca6941b background-image-6ac67dca6b0d5" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C09_7.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="P6BJE98"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="KW8QQ21"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca6941b {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C09_7.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0d5 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C09_7.jpg);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69420 background-image-6ac67dca6b0da" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C10_5.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="TK4KUJ8"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="SAWJNG1"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69420 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C10_5.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0da {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C10_5.jpg);}</style></div></div>
5882<div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69425 background-image-6ac67dca6b0e0" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/C11_4.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="J5YG9PE"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="SJUTQDC"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69425 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C11_4.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0e0 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/C11_4.jpg);}</style></div></div></div></div><div class="padding-horizontal-20-mobile margen-row-responsive" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="UVWPNGF"><div class="row-full-width-inner" data-element="inner"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="XQ8HJSH"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="OV3OMN4"><div class="pagebuilder-column desktop-only" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="CJLHYLA"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="YA6F0TC"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Balzac.jpg" alt="" title="" loading="lazy" width="" height="" data-element="desktop_image" data-pb-style="ELSW83S"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Balzac.jpg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="OA4PR46"></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="XKM0065"><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="IG718F7"><div class="semibold" style="line-height: 1.2;"><span style="font-size: 24px;">Tout l'édifice romanesque de Balzac dans une édition de luxe<br></span></div></div><div data-content-type="text" data-appearance="default" data-element="main"><ul class="custom-list"> 5883<li style="line-height: 1.4; font-size: 20px;"><strong>L’édition la plus fidèle à la volonté de Balzac. </strong>Pour la première fois, l’édition définitive de ses romans dans un luxueux écrin à la hauteur de son œuvre.</li> 5884</ul></div><div data-content-type="text" data-appearance="default" data-element="main"><ul class="custom-list"> 5885<li style="line-height: 1.4; font-size: 20px;">Une traversée magistrale de l’univers balzacien réunissant <strong>La Comédie humaine</strong> dans son intégralité, les <strong>œuvres de jeunesse</strong> et les <strong>Contes drolatiques</strong>.<strong><br></strong></li> 5886</ul></div><div data-content-type="text" data-appearance="default" data-element="main"><ul class="custom-list"> 5887<li style="line-height: 1.4; font-size: 20px;"><strong>Cartonnages de couverture</strong> inspirés des grandes reliures d'époque avec marquages au fer à dorer.<strong><br></strong></li> 5888</ul></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="ONEHDP3"><ul class="custom-list"> 5889<li style="line-height: 1.4; font-size: 20px;">Reproductions des <strong>gravures</strong> signées par les plus grands artistes de l'époque.</li> 5890</ul></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="JUMLVEC" class="center-button"><div class="custom-button" data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="AGNMX59"><a class="pagebuilder-button-primary" href="#subscribe-section" target="" data-link-type="default" data-hover-bg="#5b2036" data-hover-text="#ffffff" data-element="link" data-pb-style="UUNX5X1"><span data-element="link_text">Je m’abonne maintenant !</span></a></div></div></div></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="anchor-scroll-margin-top" id="advantages-section"></div></div><div class="padding-horizontal-20-mobile padding-row-responsive margen-row-responsive background-image-6ac67dca6942f background-image-6ac67dca6b0ea" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images='{\"de
5890sktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/BG_Oferta.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="B44OJWU"><div class="row-full-width-inner" data-element="inner"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="MUAKL35"><div class="normal" style="text-align: center;"><span style="font-size: 15px; letter-spacing: 1.5px; color: rgb(255, 255, 255);">OFFRE D’ABONNEMENT À PARTIR DU NUMÉRO 1<br></span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="AS1LT2F"><h2 style="text-align: center;"><span style="color: rgb(0, 0, 0);"><span id="FO64AIN"><span style="color: rgb(255, 255, 255);">Votre 1<sup>er</sup> envoi : 2 volumes + 1 volume gratuit pour</span> <span style="color: rgb(206, 212, 217);"><s>29,97 €</s></span> <span style="color: rgb(237, 208, 130);">16,98 € seulement !</span><br></span></span></h2></div><div class="titular-margin-responsive" data-content-type="text" data-appearance="default" data-element="main"><div class="normal" style="text-align: center; line-height: 1.2;"><span style="color: rgb(255, 255, 255); font-size: 20px;"><span id="FO64AIN">(Plus 1,50 € de frais de port)</span></span></div></div><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="PBXXUI6"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Oferta_16.png" alt="" title="" loading="lazy" width="" height="" data-element="desktop_image" data-pb-style="IC500CG"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Oferta_16.png" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="YY61QK2"></figure><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="F9X8AHI"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/primer_envio_desktop_22.svg" alt="" title="" loading="lazy" width="1100" height="" data-element="desktop_image" data-pb-style="RA1TP2P"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/primer_envio_desktop_22.svg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="PMPF8VA"></figure><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="XG3IEC0"><hr data-element="line" data-pb-style="G483C4F"></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="DUJX5UO"><div class="normal" style="text-align: center;"><span style="font-size: 15px; letter-spacing: 1.5px; color: rgb(255, 255, 255);">OFFRE D’ABONNEMENT À PARTIR DU NUMÉRO 2<br></span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="X14RNLL"><h2 style="text-align: center;"><span style="color: rgb(0, 0, 0);"><span id="FO64AIN"><span style="color: rgb(255, 255, 255);">Votre 1<sup>er</sup> envoi : 1 volume + 1 volume gratuit pour</span> <span style="color: rgb(206, 212, 217);"><s>25,98 €</s></span> <span style="color: rgb(237, 208, 130);">12,99 € seulement !</span><br></span></span></h2></div><div class="titular-margin-responsive" data-content-type="text" data-appearance="default" data-element="main"><div class="normal" style="text-align: center; line-height: 1.2;"><span style="color: rgb(255, 255, 255); font-size: 20px;"><span id="FO64AIN">(Plus 1 € de frais de port)</span></span></div></div><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="TJPWBH9"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Oferta_2_9.png" alt="" title="" loading="lazy" width="900" height="" data-element="desktop_image" data-pb-style="SGK85QJ"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Oferta_2_9.png" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="SGJHYF4"></figure><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="MHEORYQ"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/segundo_envio_desktop_6.svg" alt="" title="" loading="lazy" width="700" height="" data-element="desktop_image" data-pb-style="AXP1LDF"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/segundo_envio_desktop_6.svg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="WT5AJJH"></figure><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="H3IAFJE"><div class="custom-button" data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="JCQJ246"><a class="pagebuilder-button-secondary" href="#subscribe-section" target="" data-link-type="default" data-hover-bg="#d8be79" data-hover-text="#000000" data-element="link" data-pb-style="UR42V7X"><span data-element="link_text">S'abonner</span></a></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="anchor-scroll-margin-top" id="regalos"></div></div><div class="margen-row-responsive padding-horizontal-20-mobile" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="KXGH9OW"><div class="row-full-width-inner" data-element="inner"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="C0GX143"><div class="normal" style="text-align: center;"><span style="font-size: 15px; letter-spacing: 1.5px;">CADEAUX D’ABBONEMENT<br></span></div></div><div class="titular-margin-responsive" data-content-type="text" data-appearance="default" data-element="main"><h2 style="text-align: center;">Abonnez-vous dès maintenant et recevez des cadeaux exclusifs</h2></div><div class="pagebuilder-column-group padding-0-mobile" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="SE7RNXV"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="JV5820Q"><div class="pagebuilder-column margin-bottom-45-mobile" data-content-type="column" data-appearance="align-top" data-background-images="{}" data-element="main" data-pb-style="I4BK2DO"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="OI7DIVS"><a href="#subscribe-section" target="" data-link-type="default" title="" data-element="link"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/R2_87.jpg" alt="" title="" loading="lazy" width="" height="" data-element="desktop_image" data-pb-style="VNUWM6E"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/R2_87.jpg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="YU1UM2H"></a></figure></div><div class="pagebuilder-column margin-bottom-45-mobile" data-content-type="column" data-appearance="align-top" data-background-images="{}" data-element="main" data-pb-style="L1S5LR8"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="QJSPFKX"><a href="#subscribe-section" target="" data-link-type="default" title="" data-element="link"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/R3_92.jpg" alt="" title="" loading="lazy" width="" height="" data-element="desktop_image" data-pb-style="JEED9CE"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/R3_92.jpg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="E0364D5"></a></figure></div><div class="pagebuilder-column margin-bottom-45-mobile" data-content-type="column" data-appearance="align-top" data-background-images="{}" data-element="main" data-pb-style="SA8XWV3"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="K8MG1H2"><a href="#subscribe-section" target="" data-link-type="default" title="" data-element="link"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/R4_53.jpg" alt="" title="" loading="lazy" width="" height="" data-element="desktop_image" data-pb-style="DS6LEPS"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/R4_53.jpg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="EATXEBG"></a></figure></div><div class="pagebuilder-column margin-bottom-45-mobile" data-content-type="column" data-appearance="align-top" data-background-images="{}" data-element="main" data-pb-style="GOU1YSQ"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="IVL2IIA"><a href="#subscribe-section" target="" data-link-type="default" title="" data-element="link"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/R5_7.jpg" alt="" title="" loading="lazy" width="" height="" data-element="desktop_image" data-pb-style="ETCCA7X"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/R5_7.jpg" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="FWCM90R"></a></figure></div></div></div><div data-content-type="text" data-appearance="default" data-element="main"><div class="p1 regular" style="text-align: center; line-height: 1.2;"><span style="font-size: 14px;"><em>Cadeaux réservés aux abonnements à partir du n°1, 2 ou 3 de la collection. Si vous vous abonnez à partir du n°1, vous recevrez les cadeaux présentés sur cette page avec vos envois 2, 5, 7, 9, et 11. Visuels non contractuels. En cas de rupture de stock, les cadeaux seront remplacés par d’autres cadeaux d’une valeur égale ou supérieure.</em></span></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="anchor-scroll-margin-top" id="deliveries-section"></div></div><div class="padding-horizontal-20-mobile background-image-6ac67dca6943d background-image-6ac67dca6b0f7" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images='{\"de
5890sktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/fondo-liso.jpg\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="BCQ4TQH"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="AGLTUKG"><div class="normal" style="text-align: center;"><span style="font-size: 15px; letter-spacing: 1.5px;">OUVRAGES<br></span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="BIK86KY"><h2 style="text-align: center;">Premier envoi : 3 volumes pour 16,98 € seulement *!</h2></div><div class="titular-margin-responsive" data-content-type="text" data-appearance="default" data-element="main"><div class="normal" style="text-align: center; line-height: 1.2;"><span style="color: rgb(0, 0, 0); font-size: 20px;"><span id="FO64AIN">*plus 1,50 € de frais de port</span></span></div></div><div class="pagebuilder-slider max-1500" data-content-type="slider" data-appearance="default" data-autoplay="false" data-autoplay-speed="4000" data-fade="false" data-infinite-loop="true" data-show-arrows="true" data-show-dots="true" data-slider-type="" data-slides-to-show="4" data-slides-to-show-mobile="1" data-center-mode="false" data-center-padding="0" data-element="main" data-pb-style="YYX6ADI"><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69442 background-image-6ac67dca6b0fd" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/1_54.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="A9K6NFP"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="SU80RGC"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69442 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/1_54.png);}</style><style type="text/css">.background-image-6ac67dca6b0fd {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/1_54.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69447 background-image-6ac67dca6b103" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/2_52.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="VEA1HPJ"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="WT0ON34"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69447 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/2_52.png);}</style><style type="text/css">.background-image-6ac67dca6b103 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/2_52.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca6944c background-image-6ac67dca6b108" data-background-images='{\"de
5890sktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/3_53.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="L1IMMTT"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="N1R91CQ"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca6944c {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/3_53.png);}</style><style type="text/css">.background-image-6ac67dca6b108 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/3_53.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69451 background-image-6ac67dca6b10e" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/4_43.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="DV2XHVG"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="JI1COQP"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69451 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/4_43.png);}</style><style type="text/css">.background-image-6ac67dca6b10e {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/4_43.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69456 background-image-6ac67dca6b113" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/5_39.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="GCO5GT6"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="MDX4M28"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69456 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/5_39.png);}</style><style type="text/css">.background-image-6ac67dca6b113 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/5_39.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca6945b background-image-6ac67dca6b118" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/6_33.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="XHS3QLX"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="LTGFS1K"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca6945b {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/6_33.png);}</style><style type="text/css">.background-image-6ac67dca6b118 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/6_33.png);}</style></div></div>
5890<div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca6945f background-image-6ac67dca6b11d" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/7_33.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="DYVXXEA"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="O2FV26S"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca6945f {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/7_33.png);}</style><style type="text/css">.background-image-6ac67dca6b11d {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/7_33.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69464 background-image-6ac67dca6b123" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/8_30.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="VMP3HWJ"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="WLRR5KH"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69464 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/8_30.png);}</style><style type="text/css">.background-image-6ac67dca6b123 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/8_30.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca69469 background-image-6ac67dca6b128" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/9_28.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="C9HKGLY"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="O5I7XRT"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca69469 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/9_28.png);}</style><style type="text/css">.background-image-6ac67dca6b128 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/9_28.png);}</style></div></div><div data-content-type="slide" data-slide-name="" data-appearance="poster" data-show-button="never" data-show-overlay="never" data-element="main"><div data-element="empty_link"><div class="pagebuilder-slide-wrapper lazy-background background-image-6ac67dca6946e background-image-6ac67dca6b12d" data-background-images='{\"desktop_image\":\"https://boutique.rbafrance.fr/media/wysiwyg/10_21.png\"}' data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" background_lazy="pagebuilder-slide-wrapper lazy-background" data-element="wrapper" data-pb-style="DK2RMDN"><div class="pagebuilder-overlay pagebuilder-poster-overlay" data-overlay-color="" aria-label="" title="" data-element="overlay" data-pb-style="TBB6V2A"><div class="pagebuilder-poster-content"><div data-element="content"></div></div></div></div><style type="text/css">.background-image-6ac67dca6946e {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/10_21.png);}</style><style type="text/css">.background-image-6ac67dca6b12d {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/10_21.png);}</style></div></div></div></div><div class="deliveries-list-wrapper toggle-list-content margin-bottom-20-mobile" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="GA25H59"><div class="row-full-width-inner" data-element="inner"><div data-content-type="text" data-appearance="default" data-element="main"><p> </p><div class="deliveries-list-wrapper collectable-deliveries flex max-md:flex-col" data-collectable-name=""> 5891 <div class="deliveries-list col-12 col-md-4 max-md:mr-[28px] max-md:ml-[28px] block flex-wrap max-md:flex-col lg:w-[33%]"> 5892 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]">
5893 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5894 Numéro 1 : </span> 5895 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5896 Le Père Goriot </span> 5897 </p> 5898 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5899 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5900 Numéro 2 : </span> 5901 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5902 Illusions perdues </span> 5903 </p> 5904 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5905 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5906 Numéro 3 : </span> 5907 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5908 Eugénie Grandet </span> 5909 </p> 5910 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5911 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5912 Numéro 4 : </span> 5913 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5914 La Peau de chagrin </span> 5915 </p> 5916 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5917 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5918 Numéro 5 : </span> 5919 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5920 La Femme de trente ans </span> 5921 </p> 5922 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5923 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5924 Numéro 6 : </span> 5925 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5926 Le Colonel Chabert </span> 5927 </p> 5928 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5929 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5930 Numéro 7 : </span> 5931 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5932 Splendeurs et Misères des courtisanes </span> 5933 </p> 5934 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5935 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5936 Numéro 8 : </span>
5937 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5938 Les Chouans </span> 5939 </p> 5940 </div> 5941 <div class="deliveries-list col-12 col-md-4 max-md:mr-[28px] max-md:ml-[28px] block flex-wrap max-md:flex-col lg:w-[33%]"> 5942 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5943 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5944 Numéro 9 : </span> 5945 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5946 Le Lys dans la vallée </span> 5947 </p> 5948 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5949 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5950 Numéro 10 : </span> 5951 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5952 Modeste Mignon </span> 5953 </p> 5954 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5955 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5956 Numéro 11 : </span> 5957 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5958 Le Chef-d’œuvre inconnu </span> 5959 </p> 5960 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5961 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5962 Numéro 12 : </span> 5963 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5964 Mémoires de deux jeunes mariées </span> 5965 </p> 5966 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5967 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5968 Numéro 13 : </span> 5969 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5970 La Cousine Bette </span> 5971 </p> 5972 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5973 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5974 Numéro 14 : </span> 5975 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5976 Le Cousin Pons </span> 5977 </p> 5978 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5979 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5980 Numéro 15 : </span>
5981 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5982 Histoire des Treize </span> 5983 </p> 5984 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5985 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5986 Numéro 16 : </span> 5987 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5988 La Vieille Fille </span> 5989 </p> 5990 </div> 5991 <div class="deliveries-list col-12 col-md-4 max-md:mr-[28px] max-md:ml-[28px] block flex-wrap max-md:flex-col lg:w-[33%]"> 5992 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5993 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 5994 Numéro 17 : </span> 5995 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 5996 Le Curé de Tours </span> 5997 </p> 5998 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 5999 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 6000 Numéro 18 : </span> 6001 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 6002 La Maison du Chat-qui-pelote </span> 6003 </p> 6004 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 6005 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 6006 Numéro 19 : </span> 6007 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 6008 Histoire de la grandeur et de la décadence de Cés </span> 6009 </p> 6010 <p class="mb-5 leading-4 w-max max-w-full lg:basis-[calc(100%/3)] md:basis-[calc(100%/2)] basis-[max-content] md:pl-[40px] md:pr-[40px]"> 6011 <span class="delivery-number font-sans font-semibold text-base leading-[22px]"> 6012 Numéro 20 : </span> 6013 <span class="delivery-title font-sans font-normal text-base leading-[22px]"> 6014 La Rabouilleuse </span> 6015 </p> 6016 </div> 6017 </div> 6018</div></div></div><div data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="YPHMYQ8"><div class="row-full-width-inner" data-element="inner"><div class="toggle-list deliveries" data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div id="toggle-trigger" class="toggle-button"> 6019 <div class="button hide-all"> 6020 <span class="icon icon-up"> </span> 6021 <a href="#all-delivery" class="text">Masquer les premiers numéros</a> 6022 </div> 6023 <div class="button display-all">
6024 <span class="text">Voir les premiers numéros</span> 6025 <span class="icon icon-down"> </span> 6026 </div> 6027 </div> 6028 6029
6030<script> 6031 document.addEventListener('DOMContentLoaded', function() { 6032 let triggerAdvantages = document.getElementById('toggle-trigger-advantages'); 6033 let trigger = document.getElementById('toggle-trigger'); 6034 let content = document.querySelector('.toggle-list-content'); 6035 let openedClass = 'expanded'; 6036 6037 if (content.classList.contains(openedClass)) { 6038 content.removeAttribute('style'); 6039 6040 if (!trigger.classList.contains(openedClass)) { 6041 trigger.classList.add(openedClass); 6042 } 6043 } else { 6044 content.style.display = 'none'; 6045 trigger.classList.remove(openedClass); 6046 } 6047 6048 trigger.addEventListener('click', function() { 6049 if (trigger.classList.contains(openedClass)) { 6050 content.style.display = 'none'; 6051 content.classList.remove(openedClass); 6052 trigger.classList.remove(openedClass); 6053 } else { 6054 content.removeAttribute('style'); 6055 content.classList.add(openedClass); 6056 trigger.classList.add(openedClass); 6057 } 6058 }); 6059 if(triggerAdvantages) { 6060 triggerAdvantages.addEventListener ('click', function () { 6061 if (triggerAdvantages.classList.contains (openedClass)) { 6062 content.style.display = 'none'; 6063 content.classList.remove (openedClass); 6064 triggerAdvantages.classList.remove (openedClass); 6065 } else { 6066 content.removeAttribute ('style'); 6067 content.classList.add (openedClass); 6068 triggerAdvantages.classList.add (openedClass); 6069 } 6070 }); 6071 } 6072 }); 6073</script>
6073 6074</div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="anchor-scroll-margin-top" id="video"></div></div><div class="padding-row-responsive margen-row-responsive padding-horizontal-20-mobile" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="SYBHDYL"><div class="row-full-width-inner" data-element="inner"><div class="titular-margin-responsive" data-content-type="text" data-appearance="default" data-element="main"><h2 style="text-align: center;"><span style="color: rgb(255, 255, 255);">Spot</span></h2></div><div data-content-type="video" data-appearance="default" data-element="main" data-pb-style="T1DJP5S"><div class="pagebuilder-video-inner" data-element="inner" data-pb-style="KOEM09A"><div class="pagebuilder-video-wrapper" data-element="wrapper"><div class="pagebuilder-video-container"><iframe frameborder="0" allowfullscreen="" src="https://player.vimeo.com/video/1227636448?title=0&byline=0&portrait=0" data-element="video"></iframe></div></div></div></div></div></div><div class="padding-horizontal-20-mobile max-1000 margen-row-responsive" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="YX75W7G"><div class="row-full-width-inner" data-element="inner"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="OKOLNU5"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="U4TP7JY"><div class="pagebuilder-column padding-0-mobile" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="HATPJW1"><div class="align-center-mobile margin-bottom-20-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="UTT00TO"><div class="semibold" style="line-height: 1.2;"><span id="S5632GU" style="color: rgb(255, 255, 255); font-size: 24px;">Pour voir la présentation de la collection<br></span></div></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="WX7NC8I"><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" class="center-button"><div class="custom-button" data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="NN9QWS5"><a class="pagebuilder-button-primary" href="https://stgasrwepro02.blob.core.windows.net/mktcloud/F0/FR/F0%20Balzac%20Web%20OK.pdf" target="_blank" data-link-type="default" data-hover-bg="#d8be79" data-hover-text="#000000" data-element="link" data-pb-style="JHT47RF"><span data-element="link_text">Cliquez-ici !</span></a></div></div></div></div></div></div></div><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 6075 <style>#html-body [data-pb-style=HO89EA5]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;padding-left:8px;padding-right:8px}#html-body [data-pb-style=DMP4X1R]{margin-bottom:60px}#html-body [data-pb-style=RW084NY]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=MD4SRHD]{display:flex;width:100%}#html-body [data-pb-style=V7TYPAA]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-radius:22px;width:calc(25% - 32px);margin-left:16px;margin-right:16px;align-self:stretch}#html-body [data-pb-style=FVPOKC8]{text-align:left;margin-bottom:12px;border-style:none}#html-body [data-pb-style=G0DS4WD],#html-body [data-pb-style=UW04MBR]{max-width:100%;height:auto}#html-body [data-pb-style=MA9XW21]{margin-bottom:6px}#html-body [data-pb-style=E4B1YAC]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-radius:22px;width:calc(25% - 32px);margin-left:16px;margin-right:16px;align-self:stretch}#html-body [data-pb-style=OTINKG7]{text-align:left;margin-bottom:12px;border-style:none}#html-body [data-pb-style=ELXU61B],#html-body [data-pb-style=GCLT41S]{max-width:100%;height:auto}#html-body [data-pb-style=MWUEEO1]{margin-bottom:6px}#html-body [data-pb-style=P09N9B2]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-radius:22px;width:calc(25% - 32px);margin-left:16px;margin-right:16px;align-self:stretch}#html-body [data-pb-style=HW2BRYJ]{text-align:left;margin-bottom:12px;border-style:none}#html-body [data-pb-style=M2FJ85A],#html-body [data-pb-style=V0A5T59]{max-width:100%;height:auto}#html-body [data-pb-style=YOJGQVQ]{margin-bottom:6px}#html-body [data-pb-style=J3KFTCS]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;border-radius:22px;width:calc(25% - 32px);margin-left:16px;margin-right:16px;align-self:stretch}#html-body [data-pb-style=PQ0KK0V]{text-align:left;margin-bottom:12px;border-style:none}#html-body [data-pb-style=FLMR44U],#html-body [data-pb-style=FVCEM7L]{max-width:100%;height:auto}#html-body [data-pb-style=FV3EIF2]{margin-bottom:6px}@media only screen and (max-width: 768px) { #html-body [data-pb-style=FVPOKC8],#html-body [data-pb-style=HW2BRYJ],#html-body [data-pb-style=OTINKG7],#html-body [data-pb-style=PQ0KK0V]{border-style:none} }</style><div class="margin-mobile margen-row-responsive" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="HO89EA5"><div class="row-full-width-inner" data-element="inner"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="DMP4X1R"><h2 style="text-align: center;">Les avantages de l'abonnement</h2></div><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="RW084NY"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="MD4SRHD"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="V7TYPAA"><figure class="center-button" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="FVPOKC8"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Tipo_Cancelar.svg" alt="" title="" loading="lazy" width="36" height="" data-element="desktop_image" data-pb-style="UW04MBR"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Tipo_Cancelar.svg" alt="" title="" loading="lazy" width="36" height="" data-element="mobile_image" data-pb-style="G0DS4WD"></figure><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="MA9XW21"><div class="semibold"><span style="font-size: 20px; line-height: 28px; font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">Sans engagement</span></div></div><div class="align-center-mobile margin-bottom-20-mobile" data-content-type="text" data-appearance="default" data-element="main"><p><span style="font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">Vous êtes libre d’interrompre la collection à tout moment.</span></p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="E4B1YAC"><figure class="center-button" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="OTINKG7"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Ventajas_de_suscripcio_n_2.svg" alt="" title="" loading="lazy" width="36" height="" data-element="desktop_image" data-pb-style="GCLT41S"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Ventajas_de_suscripcio_n_2.svg" alt="" title="" loading="lazy" width="36" height="" data-element="mobile_image" data-pb-style="ELXU61B"></figure><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="MWUEEO1"><div class="semibold"><span style="font-size: 20px; line-height: 28px; font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">Cadeaux exclusifs</span></div></div><div class="align-center-mobile margin-bottom-20-mobile" data-content-type="text" data-appearance="default" data-element="main"><p><span style="font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">Cadeaux exclusifs réservés uniquement à nos abonnés.</span></p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="P09N9B2"><figure class="center-button" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="HW2BRYJ"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/Coleccionables/ES_Galdos/Icon_Container2.svg" alt="" title="" loading="lazy" width="36" height="" data-element="desktop_image" data-pb-style="M2FJ85A"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/Coleccionables/ES_Galdos/Icon_Container2.svg" alt="" title="" loading="lazy" width="36" height="" data-element="mobile_image" data-pb-style="V0A5T59"></figure><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="YOJGQVQ"><div class="semibold"><span style="font-size: 20px; line-height: 28px; font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">Livraison garantie</span></div></div><div class="align-center-mobile margin-bottom-20-mobile" data-content-type="text" data-appearance="default" data-element="main"><p><span style="font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">La collection est livrée directement chez vous.</span></p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="J3KFTCS"><figure class="center-button" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="PQ0KK0V"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/Coleccionables/ES_Galdos/Icon_Container3.svg" alt="" title="" loading="lazy" width="36" height="" data-element="desktop_image" data-pb-style="FVCEM7L"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/Coleccionables/ES_Galdos/Icon_Container3.svg" alt="" title="" loading="lazy" width="36" height="" data-element="mobile_image" data-pb-style="FLMR44U"></figure><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="FV3EIF2"><div class="semibold"><span style="font-size: 20px; line-height: 28px; font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">Garantie de satisfaction</span></div></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main"><p><span style="font-family: 'Proxima Nova', 'Helvetica Neue', 'Segoe UI', Arial, sans-serif;">Si vous n'êtes pas satisfait, nous vous remboursons.</span></p></div></div></div></div></div></div></div> 6076</div><div class="margen-row-responsive" data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 6077 <style>#html-body [data-pb-style=AJV43F3],#html-body [data-pb-style=TJKJLB8]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=TJKJLB8]{justify-content:flex-start;display:flex;flex-direction:column;background-color:#f9f9f9}#html-body [data-pb-style=AJV43F3]{align-self:stretch}#html-body [data-pb-style=VRM3W81]{display:flex;width:100%}#html-body [data-pb-style=GHIYPX5],#html-body [data-pb-style=P40BKOA]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:8.33333%;align-self:stretch}#html-body [data-pb-style=P40BKOA]{width:25%;padding-left:20px;padding-right:20px}#html-body [data-pb-style=KPS1YGX]{margin-bottom:4px}#html-body [data-pb-style=TOCRNHU],#html-body [data-pb-style=WTKL4W2]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:8.33333%;align-self:stretch}#html-body [data-pb-style=TOCRNHU]{width:25%;padding-left:20px;padding-right:20px}#html-body [data-pb-style=LINAJ5W]{margin-bottom:4px}#html-body [data-pb-style=T9IOXXK],#html-body [data-pb-style=TESF1UQ]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:8.33333%;align-self:stretch}#html-body [data-pb-style=T9IOXXK]{width:25%;padding-left:20px;padding-right:20px}#html-body [data-pb-style=WDBS8VT]{margin-bottom:4px}#html-body [data-pb-style=SN2GGCS]{text-align:center;border-style:none}#html-body [data-pb-style=ALSCELQ],#html-body [data-pb-style=NVOVWMT]{max-width:100%;height:auto}#html-body [data-pb-style=EQVH4EL]{text-align:center;border-style:none}#html-body [data-pb-style=QLYW7NK],#html-body [data-pb-style=VJTU3O2]{max-width:100%;height:auto}#html-body [data-pb-style=XUJJVD6]{text-align:center;border-style:none}#html-body [data-pb-style=KD51NIY],#html-body [data-pb-style=VFW4H2J]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=EQVH4EL],#html-body [data-pb-style=SN2GGCS],#html-body [data-pb-style=XUJJVD6]{border-style:none} }</style><div class="padding-row-responsive padding-horizontal-20-mobile" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="TJKJLB8"><div class="row-full-width-inner" data-element="inner"><div class="titular-margin-responsive" data-content-type="text" data-appearance="default" data-element="main"><h2 style="text-align: center;">Comment ça marche?</h2></div><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="AJV43F3"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="VRM3W8
60771"><div class="pagebuilder-column margin-bottom-10-mobile" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="GHIYPX5"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="SN2GGCS"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Elige_tu_nu_mero_11.svg" alt="" title="" loading="lazy" width="200" height="" data-element="desktop_image" data-pb-style="ALSCELQ"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Elige_tu_nu_mero_11.svg" alt="" title="" loading="lazy" width="80" height="" data-element="mobile_image" data-pb-style="NVOVWMT"></figure></div><div class="pagebuilder-column margin-bottom-45-mobile" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="P40BKOA"><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="KPS1YGX"><div class="bold" style="line-height: 1.2;"><span style="font-size: 20px; color: rgb(0, 0, 0);">1. Choisissez votre premier numéro</span></div></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main"><div class="regular" style="line-height: 1.4;"><span style="font-size: 17px;">Abonnez-vous à partir du numéro de votre choix.</span></div></div></div><div class="pagebuilder-column margin-bottom-10-mobile" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="WTKL4W2"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="EQVH4EL"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Pago_Seguro_12.
6077svg" alt="" title="" loading="lazy" width="200" height="" data-element="desktop_image" data-pb-style="VJTU3O2"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Pago_Seguro_12.svg" alt="" title="" loading="lazy" width="80" height="" data-element="mobile_image" data-pb-style="QLYW7NK"></figure></div><div class="pagebuilder-column margin-bottom-45-mobile" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="TOCRNHU"><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="LINAJ5W"><div class="bold" style="line-height: 1.2;"><span style="font-size: 20px; color: rgb(0, 0, 0);">2. Payez en toute sécurité</span></div></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main"><div class="regular" style="line-height: 1.4;"><span style="font-size: 17px;">Nous utilisons des plateformes de paiement sûres et fiables.</span></div></div></div><div class="pagebuilder-column margin-bottom-10-mobile" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="TESF1UQ"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="XUJJVD6"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Envi_o_18.svg" alt="" title="" loading="lazy" width="200" height="" data-element="desktop_image" data-pb-style="VFW4H2J"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Envi_o_18.svg" alt="" title="" loading="lazy" width="80" height="" data-element="mobile_image" data-pb-style="KD51NIY"></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="T9IOXXK"><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="WDBS8VT"><div class="bold" style="line-height: 1.2;"><span style="font-size: 20px; color: rgb(0, 0, 0);">3. Recevez-le à domicile</span></div></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main"><div class="regular" style="line-height: 1.4;"><span style="font-size: 17px;">Votre collection et vos cadeaux seront livrés chez vous.</span></div></div></div></div></div></div></div></div> 6078</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="anchor-scroll-margin-top" id="faqs-section"></div></div><div class="padding-horizontal-20-mobile margen-row-responsive" data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 6079 <style>#html-body [data-pb-style=WO8TSL2]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=CUGOSYY]{margin-bottom:36px}#html-body [data-pb-style=E9EI2AV]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=SV12HLG]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=OTBAUBE]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=PEBAJQH]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=JSNSLCB]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=LIW46KF]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=HSIY1W7]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=WE54J5H]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=IF8YVIW]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=R0YWBSX]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=SWME8FD]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=W4REEGX]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=MP9QBMD]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=W4ADQC7]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=MK5RELM]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=R8S5AF8]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=UG93TBC]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=TF13NON]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=KMG6IFX]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=PWKR2UK]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=SR1MJ3L]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=NDUYQJO]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}#html-body [data-pb-style=V8KM0SL]{margin-top:-12px;margin-bottom:-6px}#html-body [data-pb-style=ADHEVNH]{width:100%;border-color:#e6e6e6;display:inline-block}#html-body [data-pb-style=OVGXPIX]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;text-align:left;border-style:none;border-color:#d9d9d9}</style><div data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="WO8TSL2"><div class="row-full-width-inner" data-element="inner"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="CUGOSYY"><h2 style="text-align: center;">Mon abonnement en questions / réponses</h2></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="E9EI2AV"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span lang="FR" style="mso-ansi-language: FR;">Que vais-je recevoir avec mon abonnement ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Si je m'abonne à partir du numéro 1 :</span></p> 6080<ul style="margin-top: 0cm;" type="disc"> 6081<li class="MsoNormal" style="line-height: 107%; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><span lang="FR" style="mso-ansi-language: FR;">Dans mon 1<sup>er</sup> envoi, je recevrai le numéro 1 pour 3,99 € seulement, le numéro 2 pour 12,99 € et le numéro 3 offert, soit un total de 16,98 € pour les trois premiers numéros + 0,50 € de frais de port par numéro, soit un total de 18,48 €. Offre disponible jusqu'au 01/12/2026.</span></li> 6082<li><span lang="FR" style="mso-ansi-language: FR;">Dans mon 2<sup>e</sup> envoi, je recevrai le numéro 4 et 5 au prix de 12,99 € le numéro + 0,50 € de frais de port par numéro, soit un total de 26,98 €.</span></li> 6083<li><span lang="FR" style="mso-ansi-language: FR;">Dans mon 3<sup>e</sup> envoi, je recevrai le numéro 6 et 7 au prix de 12,99 € le numéro + 0,50 € de frais de port par numéro, soit un total de 26,98 €.</span></li> 6084<li><span lang="FR" style="mso-ansi-language: FR;">À partir du 4<sup>e</sup> envoi, je recevrai, environ tous les mois, 4 numéros au prix de 12,99 € le numéro + 0,50 € de frais de port par numéro, soit un total de 53,96 €.</span></li> 6085</ul> 6086<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Si je m'abonne à partir du deuxième numéro ou après, je recevrai les offres correspondantes au numéro de démarrage de la collection.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="SV12HLG"><hr data-element="line" data-pb-style="OTBAUBE"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="PEBAJQH"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span id="HX8OS16" lang="FR" style="mso-ansi-language: FR;">Quels cadeaux vais-je recevoir en m’abonnant ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Si je m'abonne à partir du numéro 1, je recevrai :</span></p> 6087<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Avec mon 1<sup>er</sup> envoi, je recevrai en cadeau <strong>le Nº3 OFFERT</strong>.<br>Avec mon 2<sup>e</sup> envoi, je recevrai en cadeau <strong>un élégant carnet de notes</strong><strong>. </strong></span></p> 6088<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Avec mon 5<sup>e</sup></span><span lang="FR" style="mso-ansi-language: FR;"> et 7<sup>e </sup>envoi, je recevrai en cadeau </span><strong><span lang="FR" style="mso-ansi-language: FR;">deux set de fac-similés des gravures des personnages.<br></span></strong><span lang="FR" style="mso-ansi-language: FR;">Avec mon 9<sup>e</sup> envoi, je recevrai en cadeau <strong>2 volumes <em>NOTRE-DAME DE PARIS</em> de Victor Hugo.</strong></span><strong><span lang="FR" style="mso-ansi-language: FR;"><br></span></strong><span lang="FR" style="mso-ansi-language: FR;">Avec mon 11<sup>e</sup> envoi, je recevrai en cadeau </span><strong><span lang="FR" style="mso-ansi-language: FR;">deux serre-livres.</span></strong></p> 6089<p class="MsoNormal"><strong><span lang="FR" style="mso-ansi-language: FR;"><br></span></strong><span lang="FR" style="mso-ansi-language: FR;">Visuels non contractuels. En cas de rupture de stock, les cadeaux seront remplacés par d’autres cadeaux d’une valeur égale ou supérieure.</span></p> 6090<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Si je m'abonne à partir du deuxième numéro ou après, je recevrai les offres correspondantes au numéro de démarrage de la collection.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="JSNSLCB"><hr data-element="line" data-pb-style="LIW46KF"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="HSIY1W7"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span id="HX8OS16" lang="FR" style="mso-ansi-language: FR;">Combien de numéros contient ma collection</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p><span lang="FR" style="mso-ansi-language: FR;">La collection contient 51 numéros à date. La séquence de parution pourra être modifiée pour des raisons techniques ou commerciales. L’éditeur se réserve le droit de modifier le nombre de numéros de la collection en cas de mévente ou de succès.<br>L'abonnement est sans engagement, vous pouvez l'arrêter à tout moment.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="WE54J5H"><hr data-element="line" data-pb-style="IF8YVIW"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="R0YWBSX"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span lang="FR" style="mso-ansi-language: FR;">Quels sont les délais de livraison ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p><span lang="FR" style="mso-ansi-language: FR;">Je recevrai mon 1<sup>er</sup> colis dans un délai maximum de 7 semaines à compter de la date d'enregistrement de ma demande d'abonnement.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="SWME8FD"><hr data-element="line" data-pb-style="W4REEGX"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="MP9QBMD"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span lang="FR" style="mso-ansi-language: FR;">Comment fonctionne le prélèvement automatique ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p>
6090<span lang="FR" style="mso-ansi-language: FR;">Les prélèvements se feront dans un délai de 10 jours après l'envoi de chaque colis. Vous n'avez pas d'engagement de durée et pouvez interrompre votre collection à tout moment et ce dès le 1<sup>er</sup> envoi. Ceci entraînera l'interruption de vos prélèvements automatiques. Vous garderez les cadeaux déjà reçus.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="W4ADQC7"><hr data-element="line" data-pb-style="MK5RELM"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="R8S5AF8"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span lang="FR" style="mso-ansi-language: FR;">Quels sont les avantages du prélèvement automatique ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Vous ne vous souciez plus du règlement de votre colis.</span></p> 6091<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Votre compte sera débité automatiquement après l’expédition de votre colis et vous ne risquerez plus de ralentir vos livraisons en raison d’un oubli.</span></p> 6092<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Vous restez libre d’arrêter votre abonnement à tout moment, il n'y a aucun engagement de durée.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="UG93TBC"><hr data-element="line" data-pb-style="TF13NON"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="KMG6IFX"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span lang="FR" style="mso-ansi-language: FR;">Et si je ne suis pas satisfait ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Je reste libre d’interrompre ma collection à tout moment par email et ce dès le 1<sup>er</sup> envoi, sans avoir à justifier de motifs. Je garderai mes cadeaux déjà reçus.</span></p> 6093<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Je suis libre de retourner le 1<sup>er</sup> colis dans un délai de 20 jours et les colis suivants dans un délai de 30 jours à compter de la date de leur réception.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="PWKR2UK"><hr data-element="line" data-pb-style="SR1MJ3L"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="NDUYQJO"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span lang="FR" style="mso-ansi-language: FR;">Quelles sont les modalités de validité de l’offre d’abonnement ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">L’offre est valable du 02/09/2026 au 01/12/2026 en France métropolitaine et en Belgique. L’offre est limitée à
6093 une personne par foyer.</span></p></div><div data-content-type="divider" data-appearance="default" data-element="main" data-pb-style="V8KM0SL"><hr data-element="line" data-pb-style="ADHEVNH"></div></div></div><div class="faqs max-width-840" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="OVGXPIX"><div class="row-full-width-inner" data-element="inner"><div class="faq-trigger" data-content-type="text" data-appearance="default" data-element="main"><div class="semibold" style="line-height: 1.3;"><span style="font-size: 18px;"><strong><span lang="FR" style="mso-ansi-language: FR;">Et si je n’ai pas trouvé toutes les réponses à mes questions ?</span></strong></span></div></div><div class="faq-content" data-content-type="text" data-appearance="default" data-element="main"><p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Veuillez écrire à notre service client par e-mail à l’adresse : <a href="mailto:[email protected]">[email protected]</a></span></p></div></div></div></div> 6094</div><div class="margen-row-responsive padding-horizontal-20-mobile" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="OG2HXYK"><div class="row-full-width-inner" data-element="inner"><div class="pagebuilder-column-group padding-30-mobile" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="G0NATYV"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="S9ULOKG"><div class="pagebuilder-column margin-bottom-20-mobile padding-0-mobile" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="USLKHVV"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="IJDKY4R"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Venta_suelta_12.png" alt="" title="" loading="lazy" width="450" height="" data-element="desktop_image" data-pb-style="PUD7N9Y"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Venta_suelta_12.png" alt="" title="" loading="lazy" width="" height="" data-element="mobile_image" data-pb-style="F00RMX5"></figure></div><div class="pagebuilder-column padding-0-mobile" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="DBC191Y"><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="MBAUQTR"><div class="normal"><span id="S34BXAP" style="font-size: 15px; letter-spacing: 1.5px; color: rgb(0, 0, 0);">VENTE AU NUMÉRO<br></span></div></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="MTP8HMU"><h3 id="O7V7S2R">Il vous manque un numéro pour compléter votre collection ?</h3></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="SRFQV0B"><p><span style="font-size: 20px;">Vous le trouverez dans la section.</span></p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" class="center-button"><div class="custom-button" data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="DAVNOC5"><div class="pagebuilder-button-primary" data-hover-bg="#5b2036" data-hover-text="#ffffff" data-element="empty_link" data-pb-style="DRC3O9V"><span data-element="link_text">Vente au numéro</span></div></div></div></div></div></div></div></div><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 6095 <style>#html-body [data-pb-style=AC2VKVY],#html-body [data-pb-style=O4F90PG]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=O4F90PG]{justify-content:center;display:flex;flex-direction:column;background-color:#1a1a1a;padding-top:32px;padding-bottom:32px}#html-body [data-pb-style=AC2VKVY]{align-self:stretch}#html-body [data-pb-style=BXELIWL]{display:flex;width:100%}#html-body [data-pb-style=J7KSKDR],#html-body [data-pb-style=T6OOMWT]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:25%;align-self:stretch}#html-body [data-pb-style=J7KSKDR]{text-align:right;width:16.66666667%;padding-right:24px;align-self:center}#html-body [data-pb-style=YCNA88X]{text-align:right;border-style:none}
6095#html-body [data-pb-style=AN7MU0C],#html-body [data-pb-style=QAE603O]{max-width:100%;height:auto}#html-body [data-pb-style=ESOUOEY]{justify-content:center;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:33.33333333%;align-self:center}#html-body [data-pb-style=IQ8ILJ9]{margin-bottom:4px}#html-body [data-pb-style=UUFHCI9]{margin-top:-4px}#html-body [data-pb-style=FSD17NW]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:25%;align-self:stretch}@media only screen and (max-width: 768px) { #html-body [data-pb-style=YCNA88X]{border-style:none} }</style><div class="padding-horizontal-20-mobile" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="O4F90PG"><div class="row-full-width-inner" data-element="inner"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="AC2VKVY"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="BXELIWL"><div class="pagebuilder-column desktop-only" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="T6OOMWT"></div><div class="pagebuilder-column padding-0-mobile margin-bottom-20-mobile" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="J7KSKDR"><figure class="center-button" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="YCNA88X"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/wysiwyg/Contacto_6.svg" alt="" title="" loading="lazy" width="140" height="" data-element="desktop_image" data-pb-style="QAE603O"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/wysiwyg/Contacto_6.svg" alt="" title="" loading="lazy" width="120" height="" data-element="mobile_image" data-pb-style="AN7MU0C"></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="align-center" data-background-images="{}" data-element="main" data-pb-style="ESOUOEY"><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="IQ8ILJ9"><div class="semibold"><span style="color: rgb(255, 255, 255); font-size: 18pt;">Service client</span></div></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main"><p><span style="color: rgb(191, 191, 191); font-size: 16px;">Vous avez une question à propos de votre collection ou de votre commande ?</span></p></div><div class="align-center-mobile" data-content-type="text" data-appearance="default" data-element="main" data-pb-style="UUFHCI9"><p><span style="color: #ffffff;">01 59 13 35 31 | <a style="color: rgb(255, 255, 255);" href="mailto:[email protected]"><span data-teams="true"><strong>[email protected]</strong></span></a></span></p></div></div><div class="pagebuilder-column desktop-only" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="FSD17NW"></div></div></div></div></div></div> 6096</div><style type="text/css">.background-image-6ac67dca693b7 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/BG_D_6.jpg);}</style><style type="text/css">.background-image-6ac67dca6942f {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/BG_Oferta.jpg);}</style><style type="text/css">.background-image-6ac67dca6943d {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/fondo-liso.jpg);}</style><style type="text/css">.background-image-6ac67dca6b08d {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/BG_D_6.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0ea {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/BG_Oferta.jpg);}</style><style type="text/css">.background-image-6ac67dca6b0f7 {background-image: url(https://boutique.rbafrance.fr/media/wysiwyg/fondo-liso.jpg);}</style></div> 6097</div></div> 6098</div> 6099 6100<div class="schema-hidden"> 6101 <div itemprop="name">Bibliothèque Balzac</div> 6102 <div itemprop="description"><p>L’œuvre monumentale du maître du roman français.</p></div> 6103 <div itemprop="image"></div> 6104 </div> 6105</div> 6106 6107</div></div>
6108<script> 6109 'use strict'; 6110 6111 document.addEventListener('DOMContentLoaded', function (){ 6112 document.querySelectorAll(".collection-text-wrap").forEach((el) => { 6113 let elHeight = el.getBoundingClientRect().height, 6114 truncatedClass = 'truncated'; 6115 6116 if(elHeight > 450) { 6117 let elParent = el.parentNode, 6118 a = document.createElement("a"); 6119 6120 el.classList.add(truncatedClass); 6121 elParent.append(a); 6122 6123 a.textContent = "Apprendre encore plus"; 6124 a.classList.add('learn-more-btn'); 6125 6126 a.addEventListener('click', () => { 6127 if(el.classList.contains(truncatedClass)) { 6128 el.classList.remove(truncatedClass); 6129 a.textContent = "Apprendre moins"; 6130 } else { 6131 el.classList.add(truncatedClass); 6132 a.textContent = "Apprendre encore plus"; 6133 } 6134 }); 6135 } 6136 }); 6137 }); 6138</script>
vendor: 1 bytes, line 6138
6138
6139<script> 6140 'use strict' 6141 6142 document.addEventListener('DOMContentLoaded', function () { 6143 let iframe = document.getElementById('video-desktop'); 6144 let rowVideoTriggerDesktop = document.querySelector('.row-video-trigger-desktop'); 6145 6146 if (!iframe || !rowVideoTriggerDesktop) return; 6147 6148 let player = new Vimeo.Player(iframe); 6149 6150 rowVideoTriggerDesktop.addEventListener('click', function () { 6151 rowVideoTriggerDesktop.style.display = 'none'; 6152 if (window.matchMedia("(max-width:768px)").matches) { 6153 iframe.style.height = '100%'; 6154 } else { 6155 iframe.style.height = '325px'; 6156 } 6157 6158 document.querySelector('.video-wrapper').style.paddingBottom = '56.25%'; 6159 6160 setTimeout(function () { 6161 player.play(); 6162 }, 100); 6163 }); 6164 }); 6165</script>
6165 6166</main>
6166<script type="text/x-magento-init"> 6167{ 6168 "*": { 6169 "Vdshop_UtmOrigin/js/add-utm-cookie": {} 6170 } 6171} 6172</script>
vendor: 1 bytes, line 6172
6172
6173<script> 6174 addInfoCookie(); 6175 6176 function addInfoCookie() { 6177 let origin = getUrlParameter('ORIGIN'); 6178 let originpart = getUrlParameter('ORIGINPART'); 6179 let origincamp = getUrlParameter('ORIGINCAMP'); 6180 let urlparameters = getUrlParameters(); 6181 6182 if (origin) { 6183 hyva.setCookie('ORIGIN', origin, 1, false); 6184 } 6185 if (originpart) { 6186 hyva.setCookie('ORIGINPART', originpart, 1, false); 6187 } 6188 if (origincamp) { 6189 hyva.setCookie('ORIGINCAMP', origincamp, 1, false); 6190 } 6191 if (urlparameters) { 6192 hyva.setCookie('URLPARAMETERS', urlparameters, 1, false); 6193 } 6194 } 6195 6196 function getUrlParameter(sParam) { 6197 var sPageURL = window.location.search.substring(1), 6198 sURLVariables = sPageURL.split('&'), 6199 sParameterName, 6200 i; 6201 6202 for (i = 0; i < sURLVariables.length; i++) { 6203 sParameterName = sURLVariables[i].split('='); 6204 6205 if (sParameterName[0] === sParam) { 6206 return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]); 6207 } 6208 } 6209 return false; 6210 } 6211 6212 function getUrlParameters() { 6213 return window.location.search.substring(1); 6214 } 6215</script>
6215 6216<footer class="page-footer"><div class="widget block block-static-block"> 6217 <style>#html-body [data-pb-style=G42G26F],#html-body [data-pb-style=LXW5FRG]{justify-content:center;display:flex;flex-direction:column;background-color:#000;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=LXW5FRG]{padding-top:45px;padding-bottom:35px}#html-body [data-pb-style=G42G26F]{padding:30px 20px}#html-body [data-pb-style=SWWHX69]{margin-bottom:11px}#html-body [data-pb-style=BH2ARD9],#html-body [data-pb-style=EV2L886],#html-body [data-pb-style=K4L05TR],#html-body [data-pb-style=M74F1VM]{margin-bottom:16px}#html-body [data-pb-style=RBOAE76]{margin-top:16px;margin-bottom:16px}#html-body [data-pb-style=QYSL08H]{margin-bottom:11px}#html-body [data-pb-style=MOPJYSA]{margin-top:16px;margin-bottom:16px}#html-body [data-pb-style=CL9OVSA],#html-body [data-pb-style=O0JKMHW],#html-body [data-pb-style=XA66FT6]{margin-bottom:16px}#html-body [data-pb-style=M86FHXP]{text-align:left;margin-bottom:16px}#html-body [data-pb-style=CUC6PXX],#html-body [data-pb-style=CV10F1R],#html-body [data-pb-style=PSVE6GC]{width:100%;border-width:1px;border-color:#1a1a1a;display:inline-block}#html-body [data-pb-style=URH4NUJ]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=JP7PU57]{text-align:center;margin-bottom:45px;border-style:none}#html-body [data-pb-style=XAQ1GLV],#html-body [data-pb-style=YJ4KKDV]{max-width:100%;height:auto}#html-body [data-pb-style=AA3P33H]{margin-bottom:30px;border-style:none}#html-body [data-pb-style=BBQYD1R],#html-body [data-pb-style=JIM7JYN]{max-width:100%;height:auto}#html-body [data-pb-style=B7T0TE0]{display:flex;width:100%}#html-body [data-pb-style=BN7KFDB],#html-body [data-pb-style=S93Y4AO]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:56.25%;margin-top:16px;align-self:stretch}#html-body [data-pb-style=S93Y4AO]{width:12.5%}#html-body [data-pb-style=OM8UTS7]{text-align:center}#html-body [data-pb-style=I0AS45T]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:31.25%;margin-top:16px;align-self:stretch}@media only screen and (max-width: 768px) { #html-body [data-pb-style=AA3P33H],#html-body [data-pb-style=JP7PU57]{border-style:none} }</style><div class="desktop-only" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="LXW5FRG"><div class="row-full-width-inner" data-element="inner"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="JP7PU57"><a href="https://boutique.rbafrance.fr" target="" data-link-type="default" title="" data-element="link"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/Logos/RBA_Blanco.svg" alt="" title="" loading="lazy" width="70" height="" data-element="desktop_image" data-pb-style="XAQ1GLV"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/Logos/RBA_Blanco.svg" alt="" title="" loading="lazy" width="70" height="" data-element="mobile_image" data-pb-style="YJ4KKDV"></a></figure><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="SWWHX69"><div class="regular" style="text-align: center;"><span style="font-size: 12px; color: #b3b3b3;"><a tabindex="0" href="/"><span style="font-size: 17px; color: #ffffff;">Collections</span></a> <span style="color: #666666;"> </span><span style="font-size: 14px;"><span style="color: #b3b3b3;"><a style="color: #b3b3b3;" tabindex="0" href="https://boutique.rbafrance.fr/collections/nouveautes">Nouveautés</a></span> <a tabindex="0" href="https://boutique.rbafrance.fr/collections/livres"><span style="color: #b3b3b3;">Livres</span></a> <span style="color: #b3b3b3;"><a style="color: #b3b3b3;" tabindex="0" href="https://boutique.rbafrance.fr/collections/jeunesse">Jeunesse</a></span> </span><span style="font-size: 17px; color: #ffffff;"><span style="color: #666666;">|</span> <a tabindex="0" title="Contact" href="/centre-assistance#contact">Contact </a><span style="color: #666666;"><a tabindex="0" title="Contact" href="/centre-assistance#S2HU11F"> </a>| </span> <a style="color: #ffffff;" tabindex="0" href="https://boutique.rbafrance.fr/collections/centre-assistance">Aide</a></span></span></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="CUC6PXX"></div><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="URH4NUJ"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="B7T0TE0"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="BN7KFDB"><div data-content-type="text" data-appearance="default" data-element="main"><div class="regular" style="text-align: right;"><span style="font-size: 12px; color: #b3b3b3;"><a style="color: #b3b3b3;" tabindex="0" href="/avis-legal">Avis légal</a> <span style="color: #666666;">|</span> <a style="color: #b3b3b3;" tabindex="0" href="/politique-de-confidentialite"> Politique de confidentialité</a> <span style="color: #666666;">|</span> <a style="color: #b3b3b3;" tabindex="0" href="/cookie-policy"> Politique en matière de cookies </a> <span style="color: #666666;">| </span></span></div></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="S93Y4AO"><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="OM8UTS7" data-decoded="true"><p> 6218 <span style="font-size: 12px; font-weight: 400;"> 6219 <a tabindex="0" href="javascript:Didomi.preferences.show()">
6220 <span style="color: #b3b3b3;">Gérer les cookies</span> 6221 </a> 6222 </span> 6223</p> 6224</div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="I0AS45T"><div data-content-type="text" data-appearance="default" data-element="main"><div class="regular" style="text-align: left;"><span style="font-size: 12px; color: #b3b3b3;"><span style="color: #666666;">| <a style="color: #b3b3b3;" tabindex="0" href="/conditions-generales-vente-abonnement">Conditions générales de vente</a></span></span></div></div></div></div></div></div></div><div class="mobile-only" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="G42G26F"><div class="row-full-width-inner" data-element="inner"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="AA3P33H"><a href="https://boutique.rbafrance.fr" target="" data-link-type="default" title="" data-element="link"><img class="pagebuilder-mobile-hidden" src="https://boutique.rbafrance.fr/media/Logos/RBA_Blanco.svg" alt="" title="" loading="lazy" width="70" height="" data-element="desktop_image" data-pb-style="BBQYD1R"><img class="pagebuilder-mobile-only" src="https://boutique.rbafrance.fr/media/Logos/RBA_Blanco.svg" alt="" title="" loading="lazy" width="70" height="" data-element="mobile_image" data-pb-style="JIM7JYN"></a></figure><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="M74F1VM"><div class="regular"><a tabindex="0" href="https://boutique.rbafrance.fr/"><span style="color: #ffffff;">Collections</span></a></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="BH2ARD9"><div class="regular" style="text-align: left;"><span style="font-size: 14px; color: #b3b3b3;">▸ <a style="color: #b3b3b3;" tabindex="0" href="https://boutique.rbafrance.fr/collections/nouveautes">Nouveautés</a></span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="K4L05TR"><div class="regular" style="text-align: left;"><span style="font-size: 14px; color: #b3b3b3;">▸ <a style="color: #b3b3b3;" href="https://boutique.rbafrance.fr/collections/livres">Livres</a></span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="EV2L886"><div class="regular" style="text-align: left;"><span style="font-size: 14px; color: #b3b3b3;">▸ <a style="color: #b3b3b3;" tabindex="0" href="https://boutique.rbafrance.fr/collections/jeunesse">Jeunesse</a></span></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="CV10F1R"></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="RBOAE76"><div class="regular"><span style="color: #ffffff;"><a style="color: #ffffff;" tabindex="0" href="/centre-assistance#contact">Contact</a></span></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="QYSL08H"><div class="regular"><span style="color: #ffffff;"><a style="color: #ffffff;" tabindex="0" href="https://boutique.rbafrance.fr/collections/centre-assistance">Aide</a></span></div></div><div data-content-type="divider" data-appearance="default" data-element="main"><hr data-element="line" data-pb-style="PSVE6GC"></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="MOPJYSA"><div class="regular" style="text-align: left;"><a tabindex="0" href="https://boutique.rbafrance.fr/avis-legal"><span style="font-size: 14px; color: #b3b3b3;">Avis légal</span></a></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="O0JKMHW"><div class="regular" style="text-align: left;"><a tabindex="0" href="https://boutique.rbafrance.fr/politique-de-confidentialite"><span style="font-size: 14px; color: #b3b3b3;">Politique de confidentialité</span></a></div></div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="CL9OVSA"><div class="regular" style="text-align: left;"><a tabindex="0" href="https://boutique.rbafrance.fr/cookie-policy"><span style="font-size: 14px; color: #b3b3b3;">Politique en matière de cookies</span></a></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="M86FHXP" data-decoded="true"><p> 6225 <span style="font-size: 14px; font-weight: 500"> 6226 <a tabindex="0" href="javascript:Didomi.preferences.show()">
6227 <span style="color: #b3b3b3;">Gérer les cookies</span> 6228 </a> 6229 </span> 6230</p> 6231</div><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="XA66FT6"><div class="regular" style="text-align: left;"><a tabindex="0" href="https://boutique.rbafrance.fr/conditions-generales-vente-abonnement"><span style="font-size: 14px; color: #b3b3b3;">Conditions générales de vente</span></a></div></div></div></div></div> 6232</footer> 6233 <div id="am-recaptcha-container" data-bind="scope:'amRecaptcha'"></div> 6234 6235
6235<script type="text/x-magento-init"> 6236 { 6237 "#am-recaptcha-container": { 6238 "Magento_Ui/js/core/app": { 6239 "components": { 6240 "amRecaptcha": { 6241 "component": "Amasty_InvisibleCaptcha/js/view/am-recaptcha" 6242 } 6243 } 6244 } 6245 } 6246 } 6247</script>
6247 6248 6249
6250<script type="text/x-magento-init"> 6251 { 6252 "*": { 6253 "maskedLink": {} 6254 } 6255 } 6256</script>
6256 6257 6258
6258<script type="text/x-magento-init"> 6259 { 6260 "*": { 6261 "Rba_GoogleAnalytics/js/cart/show":{} 6262 } 6263 } 6264 </script>
6264 6265 6266
6266<script type="text/x-magento-init"> 6267 { 6268 "*": { 6269 "Vdshop_GoogleTagManager/js/cart/show": { 6270 "dataCart": [] } 6271 } 6272 } 6273 </script>
6273 6274 6275
6275<script type="text/x-magento-init"> 6276 { 6277 "*": { 6278 "Vdshop_GoogleTagManager/js/default/slide":{} 6279 } 6280 } 6281 </script>
6281 6282 6283
6283<script type="text/x-magento-init"> 6284 { 6285 "*": { 6286 "Vdshop_GoogleTagManager/js/default/timing":{} 6287 } 6288 } 6289 </script>
6289 6290
6291<script> 6292 (() => { 6293 function src_default(Alpine) { 6294 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 6295 let evaluate = evaluateLater(expression); 6296 let options = { 6297 rootMargin: getRootMargin(modifiers), 6298 threshold: getThreshhold(modifiers) 6299 }; 6300 let observer = new IntersectionObserver((entries) => { 6301 entries.forEach((entry) => { 6302 if (entry.isIntersecting === (value === "leave")) 6303 return; 6304 evaluate(); 6305 modifiers.includes("once") && observer.disconnect(); 6306 }); 6307 }, options); 6308 observer.observe(el); 6309 cleanup(() => { 6310 observer.disconnect(); 6311 }); 6312 }); 6313 } 6314 function getThreshhold(modifiers) { 6315 if (modifiers.includes("full")) 6316 return 0.99; 6317 if (modifiers.includes("half")) 6318 return 0.5; 6319 if (!modifiers.includes("threshold")) 6320 return 0; 6321 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 6322 if (threshold === "100") 6323 return 1; 6324 if (threshold === "0") 6325 return 0; 6326 return Number(`.${threshold}`); 6327 } 6328 function getLengthValue(rawValue) { 6329 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 6330 return match ? match[1] + (match[2] || "px") : void 0; 6331 } 6332 function getRootMargin(modifiers) { 6333 const key = "margin"; 6334 const fallback = "0px 0px 0px 0px"; 6335 const index = modifiers.indexOf(key); 6336 if (index === -1) 6337 return fallback; 6338 let values = []; 6339 for (let i = 1; i < 5; i++) { 6340 values.push(getLengthValue(modifiers[index + i] || "")); 6341 } 6342 values = values.filter((v) => v !== void 0); 6343 return values.length ? values.join(" ").trim() : fallback; 6344 } 6345 6346 document.addEventListener("alpine:init", () => { 6347 window.Alpine.plugin(src_default); 6348 }); 6349 })(); 6350</script>
vendor: 1 bytes, line 6350
6350
6351<script> 6352 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","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"intersect"})) { 6353 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 6354 } 6355</script>
vendor: 1 bytes, line 6355
6355
6356<script> 6357 (function () { 6358 "use strict"; 6359 6360 const hasAlpine = new Promise(resolve => { 6361 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 6362 }); 6363 6364 const hasInteract = new Promise(resolve => { 6365 (events => { 6366 const onInteract = () => { 6367 resolve(); 6368 events.forEach(type => window.removeEventListener(type, onInteract)); 6369 } 6370 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 6371 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 6372 }); 6373 6374 const onIntersect = (el) => { 6375 return new Promise(resolve => { 6376 const observer = new IntersectionObserver(entries => { 6377 for (const entry of entries) { 6378 if (entry.isIntersecting) { 6379 observer.disconnect() 6380 resolve(); 6381 } 6382 } 6383 }, {}); 6384 observer.observe(el); 6385 }); 6386 } 6387 6388 function runComponent(el) { 6389 hasAlpine.then(() => { 6390 el.removeAttribute('x-ignore'); 6391 queueMicrotask(() => Alpine.initTree(el)); 6392 }); 6393 } 6394 6395 function initDeferredComponents() { 6396 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 6397 el.setAttribute('x-ignore', ''); 6398 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 6399 switch (deferUntil) { 6400 case 'interact': 6401 hasInteract.then(() => runComponent(el)); 6402 break; 6403 case 'intersect': 6404 onIntersect(el).then(() => runComponent(el)) 6405 break; 6406 case 'idle': 6407 window.requestIdleCallback 6408 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 6409 : setTimeout(() => runComponent(el), 4000); 6410 break; 6411 case 'eager': 6412 runComponent(el); 6413 break; 6414 default: 6415 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 6416 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 6417 } 6418 } 6419 }); 6420 } 6421 6422 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 6423 })() 6424</script>
6424 6425
6426<script type="module" 6427 src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/Hyva_Theme/js/alpine3.min.js" 6428 defer 6429 crossorigin 6430></script>
vendor: 1 bytes, line 6430
6430
6431<script> 6432 'use strict'; 6433 function dispatchMessages(messages, hideAfter) { 6434 const messagesEvent = new CustomEvent("messages-loaded", { 6435 detail: { 6436 messages: messages, 6437 hideAfter: hideAfter 6438 } 6439 }); 6440 window.dispatchEvent(messagesEvent); 6441 } 6442 6443 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 6444 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 6445 } 6446 6447 (function( hyva, undefined ) { 6448 6449 hyva.initFormKey = () => { 6450 const inputSelector = 'input[name="form_key"]', 6451 formKey = hyva.getFormKey(); 6452 6453 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 6454 input.value = formKey 6455 }); 6456 } 6457 6458 hyva.initMessages = () => { 6459 try { 6460 const messages = hyva.getCookie('mage-messages'); 6461 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 6462 6463 dispatchMessages(window.mageMessages); 6464 6465 // empty `mage-messages` cookie 6466 const skipSetDomain = true; 6467 hyva.setCookie('mage-messages','', -1, skipSetDomain); 6468 6469 } catch (error) { 6470 console.warn('Error parsing Cookie Messages:', error); 6471 } 6472 } 6473 6474 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 6475 hyva.alpineInitialized(hyva.initMessages) 6476 6477 }( window.hyva = window.hyva || {} )); 6478</script>
vendor: 1 bytes, line 6478
6478
6479<script> 6480 'use strict'; 6481 { 6482 const private_content_key = 'mage-cache-storage'; 6483 const private_content_expire_key = 'mage-cache-timeout'; 6484 const private_content_version_key = 'private_content_version'; 6485 const section_data_ids_key = 'section_data_ids'; 6486 const mage_cache_session_id_key = 'mage-cache-sessid'; 6487 const last_visited_store_key = 'last_visited_store'; 6488 6489 const ttl = 3600; 6490 6491 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 6492 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 6493 } 6494 6495 function loadSectionData () { 6496 const browserStorage = hyva.getBrowserStorage(); 6497 if (!browserStorage) { 6498 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 6499 [{ 6500 type: "warning", 6501 text: "Please enable LocalStorage in your browser." 6502 }] 6503 ); 6504 return; 6505 } 6506 try { 6507 let isInvalid = false; 6508 6509 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 6510 isInvalid = true; 6511 } 6512 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 6513 6514 if (!hyva.getCookie(mage_cache_session_id_key)) { 6515 isInvalid = true; 6516 browserStorage.removeItem(private_content_key); 6517 const skipSetDomain = true; 6518 const days = false; 6519 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 6520 } 6521 6522 const cookieVersion = hyva.getCookie(private_content_version_key); 6523 const storageVersion = browserStorage.getItem(private_content_version_key); 6524 6525 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 6526 isInvalid = true; 6527 } 6528 6529 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 6530 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 6531 browserStorage.removeItem(private_content_key); 6532 } 6533 6534 if (isInvalid && cookieVersion) { 6535 fetchPrivateContent([]); 6536 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 6537 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 6538 if ( 6539 privateContent && 6540 privateContentExpires && 6541 privateContent.cart && 6542 privateContent.customer 6543 ) { 6544 dispatchPrivateContent(privateContent); 6545 } else { 6546 fetchPrivateContent([]); 6547 } 6548 } else { 6549 if (document.getElementById('default-section-data')) { 6550 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 6551 dispatchPrivateContent(privateContent); 6552 } else { 6553 dispatchPrivateContent({}); 6554 } 6555 } 6556 6557 } catch (error) { 6558 console.warn('Error retrieving Private Content:', error); 6559 } 6560 } 6561 6562 hyva.alpineInitialized(loadSectionData) 6563 window.addEventListener('reload-customer-section-data', loadSectionData); 6564 6565 function dispatchPrivateContent(data) { 6566 const privateContentEvent = new CustomEvent("private-content-loaded", { 6567 detail: { 6568 data: data 6569 } 6570 }); 6571 window.dispatchEvent(privateContentEvent); 6572 } 6573 6574 function fetchPrivateContent(sections) { 6575 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 6576 method: 'GET', 6577 headers: { 6578 'Content-Type': 'application/json', 6579 'X-Requested-With': 'XMLHttpRequest' 6580 } 6581 }) 6582 .then(response => response.json()) 6583 .then( 6584 data => { 6585 if (data) { 6586 try { 6587 const browserStorage = hyva.getBrowserStorage(); 6588 6589 // merge new data preserving non-invalidated sections 6590 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 6591 6592 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 6593 delete oldSectionData['checkout-data']; 6594 } 6595 const newSectionData = Object.assign(oldSectionData, data); 6596 6597 dispatchPrivateContent(newSectionData); 6598 6599 // don't persist messages, they've been dispatched already 6600 if (newSectionData.messages && newSectionData.messages.messages ) { 6601 newSectionData.messages.messages = []; 6602 } 6603 6604 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 6605 6606 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 6607 browserStorage.setItem(private_content_expire_key, expiresAt); 6608 6609 const newCookieVersion = hyva.getCookie(private_content_version_key); 6610 browserStorage.setItem(private_content_version_key, newCookieVersion); 6611 6612 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 6613 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 6614 hyva.setCookie( 6615 section_data_ids_key, 6616 JSON.stringify( 6617 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 6618 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 6619 return sectionDataIds; 6620 }, {}) 6621 ), 6622 false, 6623 true 6624 ); 6625 } catch (error) { 6626 console.warn("Couldn't store privateContent", error); 6627 } 6628 } 6629 } 6630 ); 6631 } 6632 } 6633</script>
vendor: 1 bytes, line 6633
6633
6634<script> 6635 (() => { 6636 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 6637 })() 6638</script>
vendor: 1 bytes, line 6638
6638
6639<script> 6640 (events => { 6641 const dispatchUserInteractionEvent = () => { 6642 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 6643 window.dispatchEvent(new Event('init-external-scripts')) 6644 }; 6645 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 6646 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 6647</script>
vendor: 1 bytes, line 6647
6647
6648<script src="https://boutique.rbafrance.fr/static/version1790894180/frontend/Rba/Hyva/fr_FR/Magento_PageBuilder/js/glider.min.js"></script>
vendor: 1 bytes, line 6648
6648
6649<script> 6650 'use strict'; 6651 6652 (() => { 6653 const initCarousels = (elements) => { 6654 const parseBoolean = (value, defaultValue = false) => { 6655 if (value === undefined || value === null || value === '') { 6656 return defaultValue; 6657 } 6658 6659 const normalizedValue = String(value).toLowerCase(); 6660 if (['true', '1', 'yes', 'on'].includes(normalizedValue)) { 6661 return true; 6662 } 6663 if (['false', '0', 'no', 'off'].includes(normalizedValue)) { 6664 return false; 6665 } 6666 6667 return defaultValue; 6668 }; 6669 6670 const parseAutoplayDelay = (value, defaultValue = 4000) => { 6671 const parsedValue = parseInt(String(value ?? ''), 10); 6672 6673 if (!Number.isFinite(parsedValue) || parsedValue <= 0) { 6674 return defaultValue; 6675 } 6676 6677 return parsedValue < 100 ? parsedValue * 1000 : parsedValue; 6678 }; 6679 6680 const pushCollectiblesSliderEvent = (eventName, linkText, linkUrl) => { 6681 window.dataLayer = window.dataLayer || []; 6682 6683 const payload = { 6684 event: 'custom_event', 6685 event_name: eventName, 6686 element: 'collectibles_slider' 6687 }; 6688 6689 if (linkText !== undefined) { 6690 payload.link_text = linkText; 6691 } 6692 6693 if (linkUrl !== undefined) { 6694 payload.link_url = linkUrl; 6695 } 6696 6697 window.dataLayer.push(payload); 6698 }; 6699 6700 let lastArrowEvent = { 6701 name: null, 6702 time: 0 6703 }; 6704 6705 const pushArrowEventOnce = (eventName) => { 6706 const now = Date.now(); 6707 6708 if (lastArrowEvent.name === eventName && now - lastArrowEvent.time < 300) { 6709 return; 6710 } 6711 6712 lastArrowEvent = { 6713 name: eventName, 6714 time: now 6715 }; 6716 6717 pushCollectiblesSliderEvent(eventName); 6718 }; 6719 6720 const bindCollectiblesTracking = () => { 6721 if (window.collectiblesSliderTrackingBound === true) { 6722 return; 6723 } 6724 6725 const getElementFromEvent = (event) => { 6726 const path = typeof event.composedPath === 'function' ? event.composedPath() : []; 6727 6728 return path.find((item) => item instanceof Element) || ( 6729 event.target instanceof Element ? event.target : null 6730 ); 6731 }; 6732 6733 const handleArrowEvent = (event) => { 6734 const clickedElement = getElementFromEvent(event); 6735 6736 if (!clickedElement) { 6737 return; 6738 } 6739 6740 const prevButton = clickedElement.closest('.glider-prev'); 6741 const nextButton = clickedElement.closest('.glider-next'); 6742 6743 if (prevButton) { 6744 pushArrowEventOnce('click_prev'); 6745 return; 6746 } 6747 6748 if (nextButton) { 6749 pushArrowEventOnce('click_next'); 6750 } 6751 }; 6752 6753 document.addEventListener('pointerdown', handleArrowEvent, true); 6754 document.addEventListener('touchstart', handleArrowEvent, true); 6755 document.addEventListener('mousedown', handleArrowEvent, true); 6756 document.addEventListener('click', (event) => { 6757 const clickedElement = getElementFromEvent(event); 6758 6759 if (!clickedElement) { 6760 return; 6761 } 6762 6763 const prevButton = clickedElement.closest('.glider-prev'); 6764 const nextButton = clickedElement.closest('.glider-next'); 6765 6766 if (prevButton) { 6767 pushArrowEventOnce('click_prev'); 6768 return; 6769 } 6770 6771 if (nextButton) { 6772 pushArrowEventOnce('click_next'); 6773 return; 6774 } 6775 6776 const carousel = clickedElement.closest( 6777 '[data-content-type="products"][data-appearance="carousel"], [data-content-type="slider"]' 6778 ); 6779 6780 if (!carousel) { 6781 return; 6782 } 6783 6784 const dotButton = clickedElement.closest('.glider-dot'); 6785 const collectibleLink = clickedElement.closest('[data-content-type="slide"] a[href]'); 6786 6787 if (dotButton) {
6788 const dots = Array.from(carousel.querySelectorAll('.glider-dot')); 6789 const dotIndex = dots.indexOf(dotButton); 6790 6791 pushCollectiblesSliderEvent( 6792 'click_dot', 6793 dotIndex >= 0 ? dotIndex + 1 : undefined 6794 ); 6795 return; 6796 } 6797 6798 if (collectibleLink) { 6799 pushCollectiblesSliderEvent( 6800 'click_watch_collectible', 6801 collectibleLink.textContent.trim() || undefined, 6802 collectibleLink.href 6803 ); 6804 } 6805 }, true); 6806 6807 window.collectiblesSliderTrackingBound = true; 6808 }; 6809 6810 const ensureSliderNav = (slider) => { 6811 if (!slider.querySelector('.carousel-nav')) { 6812 slider.insertAdjacentHTML( 6813 'beforeend', 6814 '\u000A\u003Cdiv\u0020class\u003D\u0022carousel\u002Dnav\u0020flex\u0020items\u002Dcenter\u0020justify\u002Dcenter\u0020flex\u002D1\u0020p\u002D4\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Pr\u00E9c\u00E9dent\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dprev\u0020w\u002D8\u0020h\u002D8\u0020mr\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020width\u003D\u002224\u0022\u0020height\u003D\u002224\u0022\u0020role\u
6814003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M15\u002019l\u002D7\u002D7\u00207\u002D7\u0022\u002F\u003E\u000A\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u0020\u0020\u0020\u0020\u003Cdiv\u0020role\u003D\u0022tablist\u0022\u0020class\u003D\u0022glider\u002Ddots\u0020select\u002Dnone\u0020flex\u0020flex\u002Dwrap\u0020mx\u002D1\u0020justify\u002Dcenter\u0020p\u002D0\u0020focus\u003Aoutline\u002Dnone\u0022\u003E\u003C\u002Fdiv\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Suivant\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dnext\u0020w\u002D8\u0020h\u002D8\u0020ml\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020width\u003D\u002224\u0022\u0020height\u003D\u002224\u0022\u0020role\u
6814003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M9\u00205l7\u00207\u002D7\u00207\u0022\u002F\u003E\u000A\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u003C\u002Fdiv\u003E\u000A' 6815 ); 6816 } 6817 }; 6818 6819 const bindArrowTracking = (container) => { 6820 const prev = container.querySelector('.glider-prev'); 6821 const next = container.querySelector('.glider-next'); 6822 if (prev && next && !prev.dataset.gaTrackingBound) { 6823 prev.addEventListener('click', () => pushArrowEventOnce('click_prev')); 6824 next.addEventListener('click', () => pushArrowEventOnce('click_next')); 6825 prev.dataset.gaTrackingBound = '1'; 6826 } 6827 }; 6828 6829 const initSliderFallback = (slider) => { 6830 if (slider.dataset.fallbackInitialized === '1') { 6831 bindArrowTracking(slider); 6832 return; 6833 } 6834 6835 const hasWrappedContent = !!slider.querySelector('[data-role="glider-content"]'); 6836 if (!hasWrappedContent) { 6837 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 6838 } 6839 6840 slider.classList.add('glider-contain'); 6841 ensureSliderNav(slider); 6842 bindCollectiblesTracking(); 6843 6844 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 6845 const slides = gliderElement 6846 ? Array.from(gliderElement.querySelectorAll(':scope > [data-content-type="slide"]')) 6847 : []; 6848 6849 if (!gliderElement || slides.length === 0) { 6850 return; 6851 } 6852 6853 const parsedSlidesToShowMobile = parseInt(slider.dataset.slidesToShowMobile, 10); 6854 const parsedSlidesToShowDesktop = parseInt(slider.dataset.slidesToShow, 10); 6855 const slidesToShowMobile = Number.isFinite(parsedSlidesToShowMobile) && parsedSlidesToShowMobile > 0 6856 ? parsedSlidesToShowMobile 6857 : 1; 6858 const slidesToShowDesktop = Number.isFinite(parsedSlidesToShowDesktop) && parsedSlidesToShowDesktop > 0 6859 ? parsedSlidesToShowDesktop 6860 : slidesToShowMobile; 6861 6862 const getSlidesToShow = () => window.matchMedia('(min-width: 1024px)').matches 6863 ? slidesToShowDesktop 6864 : slidesToShowMobile; 6865 6866 const applyLayout = () => { 6867 const perView = Math.max(getSlidesToShow(), 1); 6868 const width = `${100 / perView}%`; 6869 6870 gliderElement.classList.add('glider', 'draggable'); 6871 gliderElement.style.display = 'flex'; 6872 gliderElement.style.overflowX = 'auto'; 6873 gliderElement.style.scrollSnapType = 'x mandatory'; 6874 gliderElement.style.scrollBehavior = 'smooth'; 6875 gliderElement.style.WebkitOverflowScrolling = 'touch'; 6876 gliderElement.style.paddingLeft = 'unset'; 6877 gliderElement.style.paddingRight = 'unset'; 6878 gliderElement.style.marginLeft = '0px'; 6879 gliderElement.style.marginRight = '0px'; 6880 6881 slides.forEach((slide) => { 6882 slide.style.flex = `0 0 ${width}`; 6883 slide.style.maxWidth = width; 6884 slide.style.height = 'auto'; 6885 slide.style.minHeight = 'inherit'; 6886 slide.style.scrollSnapAlign = 'start'; 6887 }); 6888 }; 6889 6890 const gliderPrev = slider.querySelector('.glider-prev'); 6891 const gliderNext = slider.querySelector('.glider-next'); 6892 const gliderDots = slider.querySelector('.glider-dots'); 6893 6894 bindCollectiblesTracking(); 6895 6896 const showArrows = parseBoolean(slider.dataset.showArrows, false); 6897 const showDots = parseBoolean(slider.dataset.showDots, false); 6898 const infiniteLoop = parseBoolean(slider.dataset.infiniteLoop, true); 6899 const autoplayEnabled = parseBoolean(slider.dataset.autoplay, false); 6900 const autoplayDelay = parseAutoplayDelay(slider.dataset.autoplaySpeed); 6901 let fallbackAutoplayTimeout = null; 6902 let fallbackAutoplayPaused = false;
6903 let currentTargetPage = 0; 6904 6905 const getSlideWidth = () => { 6906 const perView = Math.max(getSlidesToShow(), 1); 6907 return gliderElement.clientWidth / perView; 6908 }; 6909 6910 const getPageCount = () => slides.length; 6911 6912 const getMaxPage = () => Math.max(0, slides.length - getSlidesToShow()); 6913 6914 const getCurrentPage = () => { 6915 const slideWidth = getSlideWidth(); 6916 if (!slideWidth) { 6917 return 0; 6918 } 6919 const raw = Math.round(gliderElement.scrollLeft / slideWidth); 6920 return Math.max(Math.min(raw, getMaxPage()), 0); 6921 }; 6922 6923 const updateDots = () => { 6924 if (!showDots || !gliderDots) { 6925 return; 6926 } 6927 6928 const pages = getPageCount(); 6929 6930 if (gliderDots.childElementCount !== pages) { 6931 gliderDots.innerHTML = ''; 6932 for (let pageIndex = 0; pageIndex < pages; pageIndex += 1) { 6933 const dot = document.createElement('button'); 6934 dot.type = 'button'; 6935 dot.className = `glider-dot${pageIndex === 0 ? ' active' : ''}`; 6936 dot.setAttribute('aria-label', `Page ${pageIndex + 1}`); 6937 dot.addEventListener('click', () => { 6938 currentTargetPage = pageIndex; 6939 gliderElement.scrollTo({ 6940 left: getSlideWidth() * pageIndex, 6941 behavior: 'smooth' 6942 }); 6943 updateDots(); 6944 }); 6945 gliderDots.appendChild(dot); 6946 } 6947 } 6948 6949 Array.from(gliderDots.children).forEach((dot, index) => { 6950 dot.classList.toggle('active', index === currentTargetPage); 6951 }); 6952 }; 6953 6954 const scheduleFallbackAutoplay = () => { 6955 if (!autoplayEnabled) { 6956 return; 6957 } 6958 6959 window.clearTimeout(fallbackAutoplayTimeout); 6960 6961 if (fallbackAutoplayPaused) { 6962 return; 6963 } 6964 6965 fallbackAutoplayTimeout = window.setTimeout(() => { 6966 const pages = getPageCount(); 6967 if (pages <= 1) { 6968 return; 6969 } 6970 6971 const maxPage = getMaxPage(); 6972 if (!infiniteLoop && currentTargetPage >= maxPage) { 6973 return; 6974 } 6975 6976 const targetPage = currentTargetPage < maxPage ? currentTargetPage + 1 : 0; 6977 currentTargetPage = targetPage; 6978 gliderElement.scrollTo({ 6979 left: getSlideWidth() * targetPage, 6980 behavior: 'smooth' 6981 }); 6982 }, autoplayDelay); 6983 }; 6984 6985 if (autoplayEnabled && !slider.dataset.fallbackAutoplayBound) { 6986 const pauseFallbackAutoplay = () => { 6987 fallbackAutoplayPaused = true; 6988 window.clearTimeout(fallbackAutoplayTimeout); 6989 }; 6990 6991 const unpauseFallbackAutoplay = () => { 6992 fallbackAutoplayPaused = false; 6993 scheduleFallbackAutoplay(); 6994 }; 6995 6996 slider.addEventListener('mouseover', pauseFallbackAutoplay, { passive: true }); 6997 slider.addEventListener('touchstart', pauseFallbackAutoplay, { passive: true }); 6998 slider.addEventListener('mouseout', unpauseFallbackAutoplay, { passive: true }); 6999 slider.addEventListener('touchend', unpauseFallbackAutoplay, { passive: true }); 7000 slider.dataset.fallbackAutoplayBound = '1'; 7001 } 7002 7003 if (showArrows && gliderPrev && gliderNext) { 7004 const updateFallbackArrows = () => { 7005 const show = window.matchMedia('(min-width: 1024px)').matches; 7006 if (show) { 7007 gliderPrev.classList.remove('hidden'); 7008 gliderNext.classList.remove('hidden'); 7009 gliderPrev.style.removeProperty('display'); 7010 gliderNext.style.removeProperty('display'); 7011 } else { 7012 gliderPrev.style.setProperty('display', 'none', 'important'); 7013 gliderNext.style.setProperty('display', 'none', 'important'); 7014 } 7015 }; 7016 updateFallbackArrows(); 7017 window.addEventListener('resize', updateFallbackArrows, { passive: true }); 7018 7019 if (!gliderPrev.dataset.fallbackBound) { 7020 gliderPrev.addEventListener('click', () => { 7021 const maxPage = getMaxPage(); 7022 const targetPage = currentTargetPage > 0 7023 ? currentTargetPage - 1 7024 : (infiniteLoop ? maxPage : 0); 7025 currentTargetPage = targetPage; 7026 gliderElement.scrollTo({ 7027 left: getSlideWidth() * targetPage, 7028 behavior: 'smooth' 7029 }); 7030 updateDots(); 7031 }); 7032 gliderPrev.dataset.fallbackBound = '1'; 7033 } 7034 7035 if (!gliderNext.dataset.fallbackBound) { 7036 gliderNext.addEventListener('click', () => { 7037 const maxPage = getMaxPage(); 7038 const targetPage = currentTargetPage < maxPage 7039 ? currentTargetPage + 1 7040 : (infiniteLoop ? 0 : maxPage); 7041 currentTargetPage = targetPage; 7042 gliderElement.scrollTo({ 7043 left: getSlideWidth() * targetPage, 7044 behavior: 'smooth' 7045 }); 7046 updateDots(); 7047 }); 7048 gliderNext.dataset.fallbackBound = '1'; 7049 } 7050 7051 bindArrowTracking(slider); 7052 } 7053 7054 if (!gliderElement.dataset.fallbackDragBound) { 7055 let isDragging = false;
7056 let dragStartX = 0; 7057 let scrollStartX = 0; 7058 let scrollDebounce = null; 7059 7060 gliderElement.addEventListener('mousedown', (event) => { 7061 isDragging = true; 7062 dragStartX = event.pageX; 7063 scrollStartX = gliderElement.scrollLeft; 7064 gliderElement.classList.add('drag'); 7065 event.preventDefault(); 7066 }); 7067 7068 window.addEventListener('mousemove', (event) => { 7069 if (!isDragging) { 7070 return; 7071 } 7072 const movement = event.pageX - dragStartX; 7073 gliderElement.scrollLeft = scrollStartX - movement; 7074 }); 7075 7076 window.addEventListener('mouseup', () => { 7077 if (!isDragging) { 7078 return; 7079 } 7080 isDragging = false; 7081 gliderElement.classList.remove('drag'); 7082 updateDots(); 7083 }); 7084 7085 let loopGuard = false; 7086 7087 gliderElement.addEventListener('scroll', () => { 7088 if (scrollDebounce) { 7089 window.clearTimeout(scrollDebounce); 7090 } 7091 scrollDebounce = window.setTimeout(() => { 7092 currentTargetPage = getCurrentPage(); 7093 updateDots(); 7094 scheduleFallbackAutoplay(); 7095 }, 60); 7096 }, { passive: true }); 7097 7098 let touchLoopStartX = 0; 7099 let touchLoopStartPage = -1; 7100 gliderElement.addEventListener('touchstart', (e) => { 7101 touchLoopStartX = e.touches[0].clientX; 7102 touchLoopStartPage = currentTargetPage; 7103 }, { passive: true }); 7104 7105 gliderElement.addEventListener('touchend', (e) => { 7106 if (loopGuard || !infiniteLoop) { 7107 return; 7108 } 7109 const touchEndX = e.changedTouches[0].clientX; 7110 const swipeDelta = touchLoopStartX - touchEndX; 7111 const maxPage = getMaxPage(); 7112 const maxScroll = gliderElement.scrollWidth - gliderElement.clientWidth; 7113 7114 if (touchLoopStartPage >= maxPage && swipeDelta > 30) { 7115 loopGuard = true; 7116 currentTargetPage = 0; 7117 window.setTimeout(() => { 7118 gliderElement.style.scrollBehavior = 'auto'; 7119 gliderElement.scrollLeft = 0; 7120 window.setTimeout(() => { 7121 gliderElement.style.scrollBehavior = 'smooth'; 7122 loopGuard = false; 7123 updateDots(); 7124 }, 50); 7125 }, 350); 7126 } else if (touchLoopStartPage <= 0 && swipeDelta < -30) { 7127 loopGuard = true; 7128 currentTargetPage = maxPage; 7129 window.setTimeout(() => { 7130 gliderElement.style.scrollBehavior = 'auto'; 7131 gliderElement.scrollLeft = maxScroll; 7132 window.setTimeout(() => { 7133 gliderElement.style.scrollBehavior = 'smooth'; 7134 loopGuard = false; 7135 updateDots(); 7136 }, 50); 7137 }, 350); 7138 } 7139 }, { passive: true }); 7140 7141 gliderElement.addEventListener('wheel', (e) => { 7142 if (loopGuard || !infiniteLoop) { 7143 return; 7144 } 7145 const maxPage = getMaxPage(); 7146 const currentPage = getCurrentPage(); 7147 const maxScroll = gliderElement.scrollWidth - gliderElement.clientWidth; 7148 if (currentPage >= maxPage && e.deltaX > 5) { 7149 e.preventDefault(); 7150 loopGuard = true; 7151 currentTargetPage = 0; 7152 gliderElement.style.scrollBehavior = 'auto'; 7153 gliderElement.scrollLeft = 0; 7154 window.setTimeout(() => { 7155 gliderElement.style.scrollBehavior = 'smooth'; 7156 loopGuard = false;
7157 updateDots(); 7158 }, 100); 7159 } else if (currentPage <= 0 && e.deltaX < -5) { 7160 e.preventDefault(); 7161 loopGuard = true; 7162 currentTargetPage = maxPage; 7163 gliderElement.style.scrollBehavior = 'auto'; 7164 gliderElement.scrollLeft = maxScroll; 7165 window.setTimeout(() => { 7166 gliderElement.style.scrollBehavior = 'smooth'; 7167 loopGuard = false; 7168 updateDots(); 7169 }, 100); 7170 } 7171 }, { passive: false }); 7172 7173 gliderElement.dataset.fallbackDragBound = '1'; 7174 } 7175 7176 slider.classList.add('glider-contain', 'glider-initialized'); 7177 slider.dataset.gliderInitialized = '1'; 7178 slider.dataset.fallbackInitialized = '1'; 7179 7180 applyLayout(); 7181 updateDots(); 7182 scheduleFallbackAutoplay(); 7183 window.addEventListener('resize', () => { 7184 applyLayout(); 7185 updateDots(); 7186 scheduleFallbackAutoplay(); 7187 }, { passive: true }); 7188 }; 7189 7190 if (typeof Glider === 'undefined') { 7191 elements.forEach((element) => { 7192 if (element.dataset.contentType === 'slider') { 7193 initSliderFallback(element); 7194 } 7195 }); 7196 return; 7197 } 7198 7199 const initProductCarousel = (carousel) => { 7200 const gliderElement = carousel.querySelector('[data-role="glider-content"]'); 7201 7202 if (!gliderElement) { 7203 return; 7204 } 7205 7206 const gliderDots = carousel.querySelector('.glider-dots'); 7207 const gliderPrev = carousel.querySelector('.glider-prev'); 7208 const gliderNext = carousel.querySelector('.glider-next'); 7209 7210 bindCollectiblesTracking(); 7211 7212 const glider = new Glider(gliderElement, { 7213 slidesToShow: 2, 7214 slidesToScroll: 1, 7215 scrollLock: true, 7216 rewind: true, 7217 draggable: true, 7218 dragVelocity: 2.5, 7219 dots: gliderDots, 7220 arrows: { 7221 prev: gliderPrev, 7222 next: gliderNext, 7223 }, 7224 responsive: [ 7225 { 7226 breakpoint: 768, 7227 settings: { 7228 slidesToShow: 3, 7229 slidesToScroll: 1, 7230 } 7231 }, 7232 { 7233 breakpoint: 1024, 7234 settings: { 7235 slidesToShow: 4, 7236 slidesToScroll: 1, 7237 } 7238 }, 7239 ], 7240 }); 7241 7242 carousel.classList.remove('overflow-x-scroll'); 7243 bindArrowTracking(carousel); 7244 const updateProductArrows = () => { 7245 const show = window.matchMedia('(min-width: 1024px)').matches; 7246 if (show) { 7247 gliderPrev.classList.remove('hidden'); 7248 gliderNext.classList.remove('hidden'); 7249 gliderPrev.style.removeProperty('display'); 7250 gliderNext.style.removeProperty('display'); 7251 } else { 7252 gliderPrev.style.setProperty('display', 'none', 'important'); 7253 gliderNext.style.setProperty('display', 'none', 'important'); 7254 } 7255 }; 7256 updateProductArrows(); 7257 window.addEventListener('resize', updateProductArrows, { passive: true }); 7258 7259 if (parseBoolean(carousel.dataset.autoplay, false)) { 7260 gliderAutoplay( 7261 glider, 7262 carousel.dataset.autoplaySpeed, 7263 carousel.dataset.infiniteLoop 7264 ); 7265 } 7266
7267 window.addEventListener('page-builder-tab-activate', event => { 7268 const tab = event.detail.tab; 7269 if (tab && tab.contains(gliderElement)) { 7270 event.detail.nextTick.then(() => { 7271 requestAnimationFrame(() => glider.refresh(true)); 7272 }); 7273 } 7274 }); 7275 }; 7276 7277 const initSliderCarousel = (slider) => { 7278 if (slider.dataset.gliderInitialized === '1') { 7279 return; 7280 } 7281 7282 const hasWrappedContent = !!slider.querySelector('[data-role="glider-content"]'); 7283 if (!hasWrappedContent) { 7284 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 7285 } 7286 slider.classList.add('glider-contain'); 7287 ensureSliderNav(slider); 7288 7289 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 7290 const gliderDots = slider.querySelector('.glider-dots'); 7291 const gliderPrev = slider.querySelector('.glider-prev'); 7292 const gliderNext = slider.querySelector('.glider-next'); 7293 7294 bindCollectiblesTracking(); 7295 7296 if (!gliderElement) { 7297 return; 7298 } 7299 7300 const parsedSlidesToShowMobile = parseInt(slider.dataset.slidesToShowMobile, 10); 7301 const parsedSlidesToShowDesktop = parseInt(slider.dataset.slidesToShow, 10); 7302 const slidesToShowMobile = Number.isFinite(parsedSlidesToShowMobile) && parsedSlidesToShowMobile > 0 7303 ? parsedSlidesToShowMobile 7304 : 1; 7305 const slidesToShowDesktop = Number.isFinite(parsedSlidesToShowDesktop) && parsedSlidesToShowDesktop > 0 7306 ? parsedSlidesToShowDesktop 7307 : slidesToShowMobile; 7308 7309 let glider; 7310 try { 7311 glider = new Glider(gliderElement, { 7312 slidesToShow: slidesToShowMobile, 7313 slidesToScroll: 1, 7314 scrollLock: true, 7315 scrollLockDelay: 250, 7316 rewind: true, 7317 draggable: true, 7318 dragVelocity: 2.5, 7319 dots: gliderDots, 7320 arrows: { 7321 prev: gliderPrev, 7322 next: gliderNext, 7323 }, 7324 responsive: [ 7325 { 7326 breakpoint: 1024, 7327 settings: { 7328 slidesToShow: slidesToShowDesktop, 7329 slidesToScroll: 1, 7330 } 7331 }, 7332 ], 7333 }); 7334 } catch (error) { 7335 initSliderFallback(slider); 7336 return; 7337 } 7338 7339 slider.classList.add('glider-initialized'); 7340 slider.dataset.gliderInitialized = '1'; 7341 bindArrowTracking(slider); 7342 if (parseBoolean(slider.dataset.showArrows, false) && gliderPrev && gliderNext) { 7343 const updateSliderArrows = () => { 7344 const show = window.matchMedia('(min-width: 1024px)').matches; 7345 if (show) { 7346 gliderPrev.classList.remove('hidden'); 7347 gliderNext.classList.remove('hidden'); 7348 gliderPrev.style.removeProperty('display'); 7349 gliderNext.style.removeProperty('display'); 7350 } else { 7351 gliderPrev.style.setProperty('display', 'none', 'important'); 7352 gliderNext.style.setProperty('display', 'none', 'important'); 7353 } 7354 }; 7355 updateSliderArrows(); 7356 window.addEventListener('resize', updateSliderArrows, { passive: true }); 7357 } 7358 7359 if (parseBoolean(slider.dataset.autoplay, false)) { 7360 gliderAutoplay( 7361 glider, 7362 slider.dataset.autoplaySpeed, 7363 slider.dataset.infiniteLoop 7364 ); 7365 } 7366
7367 window.addEventListener('page-builder-tab-activate', event => { 7368 const tab = event.detail.tab; 7369 if (tab && tab.contains(gliderElement)) { 7370 event.detail.nextTick.then(() => { 7371 requestAnimationFrame(() => glider.refresh(true)); 7372 }); 7373 } 7374 }); 7375 }; 7376 7377 const gliderAutoplay = (glider, milliseconds, loop) => { 7378 const autoplayDelay = parseAutoplayDelay(milliseconds); 7379 const shouldLoop = parseBoolean(loop, false); 7380 const pagesCount = glider.track.childElementCount; 7381 let slideTimeout = null; 7382 let nextIndex = 1; 7383 let paused = false; 7384 7385 const slide = () => { 7386 slideTimeout = setTimeout( 7387 () => { 7388 if (shouldLoop && nextIndex >= pagesCount) { 7389 nextIndex = 0; 7390 } 7391 glider.scrollItem(nextIndex); 7392 }, 7393 autoplayDelay 7394 ); 7395 }; 7396 7397 glider.ele.addEventListener('glider-animated', () => { 7398 nextIndex = glider.slide + glider.opt.slidesToScroll; 7399 window.clearInterval(slideTimeout); 7400 if (!paused && (shouldLoop || nextIndex < pagesCount)) { 7401 slide(); 7402 } 7403 }); 7404 7405 const pause = () => { 7406 if (!paused) { 7407 clearInterval(slideTimeout); 7408 paused = true; 7409 } 7410 }; 7411 7412 const unpause = () => { 7413 if (paused) { 7414 slide(); 7415 paused = false; 7416 } 7417 }; 7418 7419 glider.ele.parentElement.addEventListener('mouseover', pause, { passive: true }); 7420 glider.ele.parentElement.addEventListener('touchstart', pause, { passive: true }); 7421 glider.ele.parentElement.addEventListener('mouseout', unpause, { passive: true }); 7422 glider.ele.parentElement.addEventListener('touchend', unpause, { passive: true }); 7423 7424 slide(); 7425 }; 7426 7427 elements.forEach(element => { 7428 if (element.dataset.contentType === 'products') { 7429 initProductCarousel(element); 7430 } 7431 7432 if (element.dataset.contentType === 'slider') { 7433 initSliderCarousel(element); 7434 } 7435 }); 7436 7437 elements.forEach(element => bindArrowTracking(element)); 7438 }; 7439 7440 const initWhenReady = () => { 7441 const carouselElements = document.querySelectorAll( 7442 `[data-content-type="products"][data-appearance="carousel"], 7443 [data-content-type="slider"]` 7444 ); 7445 7446 if (carouselElements.length === 0) { 7447 return; 7448 } 7449 7450 initCarousels(carouselElements); 7451 }; 7452 7453 if (document.readyState === 'loading') { 7454 window.addEventListener('DOMContentLoaded', initWhenReady, { once: true }); 7455 } else { 7456 initWhenReady(); 7457 } 7458 })(); 7459</script>
7459<script> 7460 'use strict'; 7461 7462 (() => { 7463 const applyShowOnHover = (element) => { 7464 const showOverlayOnHover = (element) => { 7465 const overlay = element.querySelector('.pagebuilder-overlay'); 7466 const color = overlay.dataset.overlayColor; 7467 7468 element.addEventListener('mouseover', () => { 7469 overlay.style.backgroundColor = color; 7470 }); 7471 element.addEventListener('mouseout', () => { 7472 overlay.style.backgroundColor = 'transparent'; 7473 }); 7474 }; 7475 7476 const showButtonOnHover = (element) => { 7477 const button = element.querySelector('.pagebuilder-banner-button'); 7478 7479 element.addEventListener('mouseover', () => { 7480 button.style.opacity = '1'; 7481 button.style.visibility = 'visible'; 7482 }); 7483 element.addEventListener('mouseout', () => { 7484 button.style.opacity = '0'; 7485 button.style.visibility = 'hidden'; 7486 }); 7487 }; 7488 7489 if (element.dataset.showOverlay === 'hover') { 7490 showOverlayOnHover(element); 7491 } 7492 if (element.dataset.showButton === 'hover') { 7493 showButtonOnHover(element); 7494 } 7495 }; 7496 7497 window.addEventListener('DOMContentLoaded', () => { 7498 document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { 7499 applyShowOnHover(element); 7500 }); 7501 }); 7502 })(); 7503</script>
vendor: 1 bytes, line 7503
7503
7504<script> 7505 function initConfigurableOptions(productId, optionConfig) { 7506 7507 function findPathParam(key) { 7508 const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; 7509 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 7510 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 7511 for (let i = 0; i < pathParts.length; i += 2) { 7512 if (pathParts[i] === key && pathParts.length > i) { 7513 return pathParts[i + 1]; 7514 } 7515 } 7516 } 7517 7518 return { 7519 optionConfig, 7520 productId, 7521 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 7522 allowedAttributeOptions: [], 7523 selectedValues: [], 7524 init() { 7525 this.findAllowedAttributeOptions(); 7526 this.$nextTick(() => { 7527 if (typeof this.optionConfig.defaultValues === 'object') { 7528 for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { 7529 this.changeOption(attributeId, value + ''); 7530 } 7531 } 7532 }); 7533 }, 7534 findSimpleIndex() { 7535 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 7536 }, 7537 calculateSimpleIndexForPartialSelection(selectedValues) { 7538 if (selectedValues.length === 0) return 0; 7539 let productIndexIds = Object.keys(this.optionConfig.index); 7540 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 7541 const productsWithAttributeMatch = selectedValues[attribute] 7542 ? productIndexIds.filter((productIndex) => { 7543 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 7544 }) 7545 : []; 7546 7547 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 7548 }) 7549 return productIndexIds[0]; 7550 }, 7551 calculateSimpleIndexForFullSelection(selectedValues) { 7552 const productIndexes = this.optionConfig.index; 7553 return Object.keys(productIndexes).find(productIndex => { 7554 const productCandidateOptions = productIndexes[productIndex]; 7555 7556 for (const productOption in productCandidateOptions) { 7557 if ( 7558 ! selectedValues[productOption] || 7559 selectedValues[productOption] !== productCandidateOptions[productOption] 7560 ) { 7561 return false; 7562 } 7563 } 7564 return productIndex; 7565 }); 7566 }, 7567 productIndex: 0, 7568 findAllowedAttributeOptions() { 7569 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 7570 }, 7571 calculateAllowedAttributeOptions(selectedValues) { 7572 const allAttributes = this.optionConfig.attributes; 7573 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 7574 return a.position - b.position 7575 }); 7576 7577 const newAllowedAttributeOptions = []; 7578 7579 allAttributesSorted.forEach(attribute => { 7580 const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); 7581 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); 7582 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 7583 return !!option.products.find(product => { 7584 return availableIndexes.includes(product); 7585 }) 7586 }); 7587 }); 7588 return newAllowedAttributeOptions; 7589 }, 7590 calculateAvailableProductIndexes(selectedOptions) { 7591 if (Object.keys(selectedOptions).length === 0) { 7592 if (Object.values(this.optionConfig.salable || {}).length) { 7593 return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) 7594 } 7595 return Object.keys(this.optionConfig.index); 7596 } 7597 7598 const selectedIds = Object.keys(selectedOptions); 7599 if (Object.values(this.optionConfig.salable || {}).length) { 7600 const selectedOptionIndexes = selectedIds.map(attrId => { 7601 const optionValue = selectedOptions[attrId]; 7602 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 7603 }) 7604 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 7605 return acc.filter(index => optionIndexes.includes(index)); 7606 }); 7607 } else { 7608 const productIndexes = this.optionConfig.index; 7609 return Object.keys(productIndexes).filter(index => { 7610 for (const attrId of selectedIds) { 7611 if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false 7612 } 7613 return true 7614 }); 7615 } 7616 }, 7617 findAttributeByOptionId(optionId) { 7618 for (const attributeId in this.optionConfig.attributes) { 7619 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 7620 if (attributeOptions.find(option => option.id === optionId)) { 7621 return attributeId; 7622 } 7623 } 7624 }, 7625 getAllowedAttributeOptions(attributeId) { 7626 return this.allowedAttributeOptions[attributeId] || [] 7627 }, 7628 getProductIdsForOption(option) { 7629 const attributeId = this.findAttributeByOptionId(option.id); 7630 const allOptions = this.optionConfig.attributes[attributeId]; 7631 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 7632 return opt && opt.products 7633 ? opt.products 7634 : []; 7635 }, 7636 findProductIdsForPartialSelection(optionSelection) { 7637 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 7638 const newCandidates = this.getProductIdsForOption({id: optionId}); 7639 return candidates === null 7640 ? newCandidates 7641 : candidates.filter(productId => newCandidates.includes(productId)); 7642 }, null); 7643 return candidateProducts || []; 7644 },
7645 findCheapestProductForPartialSelection(optionSelection) { 7646 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 7647 return candidateProducts.reduce((cheapest, simpleIdx) => { 7648 // in the first iteration we start with simpleIdx as the currently cheapest product 7649 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 7650 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 7651 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 7652 ? simpleIdx 7653 : cheapest; 7654 }, 0) 7655 }, 7656 findProductIdToUseForOptionPrice(option) { 7657 // try to find a product for a complete selection 7658 const attributeId = this.findAttributeByOptionId(option.id); 7659 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 7660 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 7661 // if there is no complete selection, use the cheapest product for the option 7662 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 7663 }, 7664 getAttributeOptionLabel(option) { 7665 const optionProduct = this.findProductIdToUseForOptionPrice(option); 7666 if ((! optionProduct) || (optionProduct === this.productIndex)) { 7667 return option.label; 7668 } 7669 7670 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 7671 7672 if (this.optionConfig.optionPrices[optionProduct]) { 7673 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 7674 if (optionPrice !== currentPrice){ 7675 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 7676 } 7677 } 7678 return option.label; 7679 }, 7680 getOptionPriceAdjustmentBasePrice() { 7681 if (this.optionConfig.optionPrices[this.productIndex]) { 7682 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 7683 } 7684 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 7685 return this.optionConfig.optionPrices[cheapestForSelection] 7686 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 7687 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 7688 }, 7689 clearOptionIfActive(optionId, value) { 7690 if (this.selectedValues[optionId] === value) { 7691 this.blurLabel() 7692 this.changeOption(optionId, '') 7693 } 7694 }, 7695 removeAttrFromSelection(selectedValues, attributeId) { 7696 attributeId = parseInt(attributeId); 7697 return selectedValues.reduce((newSelection, val, attr) => { 7698 if (attr !== attributeId) { 7699 newSelection[attr] = val; 7700 } 7701 return newSelection; 7702 }, []); 7703 }, 7704 changeOption(attributeId, value) { 7705 if (value === '') { 7706 this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) 7707 } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { 7708 this.selectedValues[attributeId] = value; 7709 } 7710 this.findSimpleIndex(); 7711 this.findAllowedAttributeOptions(); 7712 this.updatePrices(); 7713 this.updateGallery(); 7714 window.dispatchEvent( 7715 new CustomEvent( 7716 'configurable-selection-changed', 7717 { 7718 detail: { 7719 productId: this.productId, 7720 optionId: attributeId, 7721 value: value, 7722 productIndex: this.productIndex, 7723 selectedValues: this.selectedValues, 7724 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 7725 } 7726 } 7727 ) 7728 ); 7729 }, 7730 calculateIsMinimalPrice() { 7731 return ( 7732 this.selectedValues.filter(value => !!value).length < 7733 Object.keys(this.optionConfig.attributes).length 7734 ); 7735 }, 7736 updatePrices() { 7737 const value = this.productIndex ? 7738 this.optionConfig.optionPrices[this.productIndex] : 7739 this.optionConfig.prices; 7740 window.dispatchEvent( 7741 new CustomEvent( 7742 "update-prices-" + this.productId, 7743 { 7744 detail: Object.assign( 7745 value, 7746 { isMinimalPrice: this.calculateIsMinimalPrice() } 7747 ) 7748 } 7749 ) 7750 ); 7751 }, 7752 updateGallery () { 7753 if (this.productIndex) { 7754 const images = this.optionConfig.images[this.productIndex]; 7755 images && window.dispatchEvent(new CustomEvent( 7756 "update-gallery", 7757 { detail: this.sortImagesByPosition(images) } 7758 )); 7759 } else { 7760 window.dispatchEvent(new Event("reset-gallery")); 7761 } 7762 }, 7763 sortImagesByPosition(images) { 7764 return images.sort((x, y) => { 7765 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 7766 }); 7767 }, 7768 onGetCartData(data) { 7769 if (this.productId === '159873') { 7770 this.preselectCartItems(data); 7771 this.preselectQuerystringItems(); 7772 this.preselectLocationHashItems(); 7773 } 7774 }, 7775 preselectCartItems(data) { 7776 // pre-select options based on cart data for current (quote) itemId 7777 const cart = data && data.cart; 7778 if (cart && cart.items) { 7779 const cartItem = cart.items.find((item) => { 7780 return ( 7781 item.item_id === this.itemId 7782 && item.product_id === this.productId 7783 ) 7784 }); 7785 if (cartItem && cartItem.options && cartItem.options.length) { 7786 cartItem.options.map(option => { 7787 this.changeOption(option.option_id, option.option_value); 7788 }) 7789 } 7790 } 7791 }, 7792 preselectQuerystringItems() { 7793 // pre-select option like ?size=167 7794 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 7795 this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); 7796 }, 7797 preselectLocationHashItems() { 7798 // pre-select option like #144=167 7799 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 7800 this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); 7801 }, 7802 preselectItemsBasedOnLocation(getLocationValue) { 7803 Object.values(this.optionConfig.attributes).map(attribute => { 7804 this.changeOption(attribute.id, getLocationValue(attribute)) 7805 }); 7806 } 7807 } 7808 } 7809 7810</script>
vendor: 1 bytes, line 7810
7810
7811<script> 7812 function initSwatchOptions(swatchConfig) { 7813 return { 7814 swatchConfig, 7815 getAttributeSwatchData(attributeId) { 7816 const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); 7817 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 7818 7819 return swatchConfig; 7820 }, 7821 getAllAttributeOptions(attributeId) { 7822 return ( 7823 this.optionConfig.attributes[attributeId] && 7824 this.optionConfig.attributes[attributeId].options 7825 ) || [] 7826 }, 7827 optionIsActive(attributeId, optionId) { 7828 // return true if a product with this option is in stock 7829 return !!this.getAllowedAttributeOptions(attributeId).find( 7830 option => option.id === optionId 7831 ) 7832 }, 7833 optionIsEnabled(attributeId, optionId) { 7834 // return true if a product with this option is enabled 7835 for (const productId in this.optionConfig.index) { 7836 if (this.optionConfig.index[productId][attributeId] === optionId) { 7837 return true; 7838 } 7839 } 7840 return false; 7841 }, 7842 mapSwatchTypeNumberToTypeCode(typeNumber) { 7843 switch ("" + typeNumber) { 7844 case "1": 7845 return "color" 7846 case "2": 7847 return "image" 7848 case "3": 7849 return "empty" 7850 case "0": 7851 default: 7852 return "text" 7853 } 7854 }, 7855 getTypeOfFirstOption(attributeId) { 7856 for (const optionId in this.swatchConfig[attributeId]) { 7857 const option = this.swatchConfig[attributeId][optionId]; 7858 if (typeof option.type !== 'undefined') { 7859 return this.mapSwatchTypeNumberToTypeCode(option.type); 7860 } 7861 } 7862 }, 7863 getVisualSwatchType(attributeId, targetOptionId) { 7864 // If a type configuration is present for the given option id, use it 7865 const config = this.swatchConfig[attributeId]; 7866 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 7867 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 7868 } 7869 7870 // Otherwise - if no config is present for the target option - use the type of the first option 7871 // with a type property from the attribute, thus assuming its the same type as the target option. 7872 // (This edge case condition can occur on single swatch products if some options are not salable) 7873 return this.getTypeOfFirstOption(attributeId); 7874 }, 7875 getSwatchType(attributeId, optionId) { 7876 // Deserialize the attribute details the first time they are used 7877 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 7878 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 7879 } 7880 const type = this.swatchConfig[attributeId] && 7881 this.swatchConfig[attributeId].details && 7882 this.swatchConfig[attributeId].details.swatch_input_type || 7883 "empty"; 7884 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 7885 }, 7886 isTextSwatch(attributeId, optionId) { 7887 return this.getSwatchType(attributeId, optionId) === 'text'; 7888 }, 7889 isVisualSwatch(attributeId, optionId) { 7890 const type = this.getSwatchType(attributeId, optionId); 7891 7892 return ['image', 'color'].includes(type); 7893 }, 7894 getSwatchBackgroundStyle(attributeId, optionId) {
7895 const config = this.getSwatchConfig(attributeId, optionId); 7896 const type = this.getSwatchType(attributeId, optionId); 7897 7898 if (type === "color") { 7899 return 'background-color:' + config.value; 7900 } else if (type === "image") { 7901 return "background: #ffffff url('" + config.value + "') no-repeat center"; 7902 } else { 7903 return ''; 7904 } 7905 }, 7906 getSwatchText(attributeId, optionId) { 7907 const config = this.getSwatchConfig(attributeId, optionId); 7908 return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); 7909 }, 7910 getOptionLabelFromOptionConfig(attributeId, optionId) { 7911 // Fallback if no value is present in swatchConfig data 7912 // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 7913 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); 7914 return option && option[0] && option[0].label ||''; 7915 }, 7916 getSwatchConfig(attributeId, optionId) { 7917 return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] 7918 ? this.swatchConfig[attributeId][optionId] 7919 : false; 7920 }, 7921 activeTooltipItem: false, 7922 tooltipPositionElement: false, 7923 isTooltipVisible() { 7924 return this.activeTooltipItem &&
7925 this.getSwatchConfig( 7926 this.activeTooltipItem.attribute, 7927 this.activeTooltipItem.item 7928 ); 7929 }, 7930 isFirstItemCol() { 7931 return this.activeTooltipItem.index === 0; 7932 }, 7933 getTooltipImageStyle(attributeId, optionId) { 7934 const config = this.getSwatchConfig(attributeId, optionId); 7935 const type = this.getSwatchType(attributeId, optionId); 7936 7937 if (type === "color") { 7938 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 7939 } else if (type === "image") { 7940 return "background: #ffffff url('" + config.thumb + 7941 "') center center no-repeat; width: 110px; height: 90px;"; 7942 } else { 7943 return 'display:none'; 7944 } 7945 }, 7946 getTooltipPosition() { 7947 return this.tooltipPositionElement ? 7948 `top: ${this.tooltipPositionElement.offsetTop}px;` + 7949 `left: ${ 7950 this.tooltipPositionElement.offsetLeft - ( 7951 this.tooltipPositionElement.closest('.snap') && 7952 this.tooltipPositionElement.closest('.snap').scrollLeft || 7953 0 7954 ) 7955 }px;` : '' 7956 }, 7957 getTooltipLabel() { 7958 return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 7959 }, 7960 focusedLabel: false, 7961 focusLabel(optionId) { 7962 this.focusedLabel = optionId; 7963 }, 7964 blurLabel() { 7965 this.focusedLabel = false; 7966 }, 7967 showSwatches: false, 7968 initShowSwatchesIntersect() { 7969 if ('IntersectionObserver' in window && !window.scrollY) { 7970 let io = new IntersectionObserver( 7971 entries => { 7972 entries.map(entry => { 7973 if (entry.isIntersecting) { 7974 this.showSwatches = true; 7975 io.unobserve(this.$root); 7976 } 7977 }) 7978 } 7979 ); 7980 io.observe(this.$root); 7981 } else { 7982 this.showSwatches = true 7983 } 7984 } 7985 } 7986 } 7987</script>
vendor: 1 bytes, line 7987
7987
7988<script> 7989 'use strict'; 7990 7991 const grecaptchaV2LoadCallbacks = []; 7992 7993 function executeRecaptchaLoadCallbacks () { 7994 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 7995 const callback = grecaptchaV2LoadCallbacks.pop(); 7996 typeof callback === 'string' ? window[callback]() : callback(); 7997 } 7998 } 7999 8000 (function() { 8001 const loadRecaptchaScript = (event) => { 8002 8003 if (window.grecaptcha || !event.target.form) { 8004 return; 8005 } 8006 8007 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 8008 const siteKey = '6LfkNVgtAAAAAFdtkD5s8tEaGf_b1_5yiF2rmSz\u002D'; 8009 const script = document.createElement('script'); 8010 script.type = 'text/javascript'; 8011 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 8012 script.async = true; 8013 document.head.appendChild(script); 8014 8015 script.addEventListener('load', () => { 8016 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 8017 }); 8018 } 8019 8020 window.forceLoadRecaptchaScript = (form) => { 8021 loadRecaptchaScript({target: {form: form || 'dummy'}}); 8022 executeRecaptchaLoadCallbacks(); 8023 }; 8024 8025 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 8026 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 8027 8028 }()); 8029 8030</script>
vendor: 1 bytes, line 8030
8030
8031<script> 8032 'use strict'; 8033 8034 (function () { 8035 const modals = []; 8036 const excludedFromFocusTrapping = new Set(); 8037 8038 function trapFocusInNextModalWithOverlay() { 8039 for (let idx = modals.length -1; idx >= 0; idx--) { 8040 const nextOnStack = modals[idx]; 8041 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 8042 if (! isOverlayDisabled(nextDialogElement)) { 8043 hyva.trapFocus(nextDialogElement); 8044 break; 8045 } 8046 } 8047 } 8048 8049 function focusables(dialogElement) { 8050 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 8051 return Array.from(dialogElement.querySelectorAll(selector)) 8052 .filter(el => !el.hasAttribute('disabled')); 8053 } 8054 8055 function firstVisible(elements) { 8056 const a = Array.from(elements); 8057 for (let i = 0; i < a.length; i++) { 8058 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 8059 } 8060 return null; 8061 } 8062 8063 function isInViewport(element) { 8064 const rect = element && element.getBoundingClientRect(); 8065 return rect && 8066 rect.top >= 0 && 8067 rect.left >= 0 && 8068 rect.right <= window.innerWidth && 8069 rect.bottom <= window.innerHeight; 8070 } 8071 8072 function setFocusAfterTransition(dialogElement, duration) { 8073 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 8074 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 8075 next: for (let candidate of candidates) { 8076 for (let child of nested) { 8077 if (child.contains(candidate)) continue next; 8078 } 8079 setTimeout(() => candidate.focus(), 50); 8080 break; 8081 } 8082 window.setTimeout(() => { 8083 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 8084 focusables(dialogElement)[0] || 8085 null; 8086 focusElement && isInViewport(focusElement) && focusElement.focus(); 8087 }, Math.max(1, duration)); 8088 } 8089 8090 function determineTrigger($refs, dialog, trigger) { 8091 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 8092 return dialog.target; 8093 } 8094 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 8095 return trigger.target; 8096 } 8097 if (typeof trigger === 'string') { 8098 try { 8099 return $refs[trigger] || document.querySelector(trigger) 8100 } catch (e) {} 8101 } 8102 if (trigger instanceof Element) { 8103 return trigger; 8104 } 8105 8106 return null; 8107 } 8108 8109 function isOverlayDisabled(dialog) { 8110 return dialog && dialog.hasAttribute('x-no-overlay') 8111 } 8112 8113 function areRemainingModalsWithoutOverlay(modals) 8114 { 8115 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 8116 8117 return overflowDisabled.length === modals.length; 8118 } 8119 8120 window.hyva.modal = function(options) { 8121 8122 const config = Object.assign({ 8123 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 8124 transitionEnterStart: 'opacity-0', 8125 transitionEnterEnd: 'opacity-100', 8126 transitionLeave: 'transition ease-in duration-300', 8127 transitionLeaveStart: 'opacity-100', 8128 transitionLeaveEnd: 'opacity-0', 8129 }, options); 8130 let lastHide = 0; 8131 8132 return { 8133 opened: {}, 8134 show(dialog, trigger) { 8135 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 8136 const name = typeof dialog === 'string' ? dialog : config.dialog; 8137 const dialogElement = this.$refs[name]; 8138 if (! dialogElement) { 8139 return; 8140 } 8141 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 8142 8143 dialogElement.scrollTop = 0; 8144 8145 if (this.opened[name]) { 8146 return; 8147 } 8148 8149 if (focusTargetAfterHide) { 8150 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 8151 } 8152 8153 this.opened[name] = true; 8154 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 8155 setFocusAfterTransition(dialogElement, config.duration); 8156 8157 const frame = {name, instance: this, focusTarget: focu
8157sTargetAfterHide, time: Date.now()}; 8158 8159 modals.push(frame); 8160 if (useOverlay) { 8161 document.body.classList.add('overflow-hidden'); 8162 } 8163 return new Promise(resolve => frame.resolve = resolve); 8164 }, 8165 cancel() { 8166 this.hide(false); 8167 }, 8168 ok() { 8169 this.hide(true); 8170 }, 8171 hide(value) { 8172 if (Date.now() - lastHide < config.duration) { 8173 return; 8174 } 8175 lastHide = Date.now(); 8176 8177 const modal = modals.pop() || {}; 8178 const name = modal.name; 8179 this.opened[name] = false; 8180 hyva.releaseFocus(modal.instance.$refs[modal.name]) 8181 trapFocusInNextModalWithOverlay(); 8182 8183 const nextFocusAfterHide = modal.focusTarget; 8184 nextFocusAfterHide && setTimeout(() => { 8185 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 8186 nextFocusAfterHide.focus() 8187 }, config.duration); 8188 8189 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 8190 document.body.classList.remove('overflow-hidden'); 8191 } 8192 8193 modal.resolve(value); 8194 }, 8195 overlay(dialog) { 8196 const name = typeof dialog === 'string' ? dialog : config.dialog; 8197 return { 8198 ['x-show']() { 8199 return this.opened[name] 8200 }, 8201 ['x-transition:enter']: config.transitionEnter, 8202 ['x-transition:enter-start']: config.transitionEnterStart, 8203 ['x-transition:enter-end']: config.transitionEnterEnd, 8204 ['x-transition:leave']: config.transitionLeave, 8205 ['x-transition:leave-start']: config.transitionLeaveStart, 8206 ['x-transition:leave-end']: config.transitionLeaveEnd, 8207 ['@hyva-modal-show.window'](event) { 8208 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 8209 } 8210 }; 8211 } 8212 }; 8213 } 8214 8215 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 8216 8217 window.hyva.modal.pop = function () { 8218 if (modals.length > 0) { 8219 const modal = modals[modals.length -1]; 8220 modal.instance.hide(); 8221 } 8222 } 8223 8224 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 8225 typeof selectors === 'string' || selectors instanceof String 8226 ? excludedFromFocusTrapping.add(selectors) 8227 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 8228 } 8229 8230 window.hyva.modal.eventListeners = { 8231 keydown: event => { 8232 if (event.key === 'Escape') { 8233 window.hyva.modal.pop(); 8234 } 8235 }, 8236 click: event => { 8237 if (modals.length > 0) { 8238 const modal = modals[modals.length -1]; 8239 const dialog = modal.instance.$refs[modal.name]; 8240 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 8241 ! isOverlayDisabled(dialog) && // if dialog has overlay 8242 ! dialog.contains(event.target)) { // if click is outside of dialog 8243 modal.instance.hide(); 8244 } 8245 } 8246 } 8247 }; 8248 8249 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 8250 8251 document.addEventListener('click', window.hyva.modal.eventListeners.click); 8252 })(); 8253</script>
8253 8254 8255
8256<script type="application/json" id="default-section-data"> 8257 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"BE":{"name":"Belgique","regions":{"577":{"code":"VAN","name":"Antwerpen"},"578":{"code":"WBR","name":"Brabant wallon"},"579":{"code":"BRU","name":"Brussels-Capital Region"},"580":{"code":"WHT","name":"Hainaut"},"582":{"code":"WLG","name":"Li\u00e8ge"},"581":{"code":"VLI","name":"Limburg"},"583":{"code":"WLX","name":"Luxembourg"},"584":{"code":"WNA","name":"Namur"},"585":{"code":"VOV","name":"Oost-Vlaanderen"},"586":{"code":"VBR","name":"Vlaams-Brabant"},"587":{"code":"VWV","name":"West-Vlaanderen"}}},"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"},"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"},"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"}
8257,"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"}}},"data_id":1791393226},"captcha":[],"wishlist":{"items":[]},"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"payments":[],"hyva_checkout":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script>
8257 8258</div>
8258<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-a02fffc1c342b7076d9","applicationID":"975218076","transactionName":"YFNWZUJWCEQDUkxbX1kZdVJEXglZTVJZRlFbWVMeQEUJUxdSTB1GXlND","queueTime":0,"applicationTime":1252,"atts":"TBRBEwpMGxtAUBoIS0pL","errorBeacon":"bam.nr-data.net","agent":""}</script>
8258</body> 8259</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.