PageSourceSearch

https://boutique.rbafrance.fr/collections/balzac

html rbafrance.fr collected 2026-10-07 17:13:47 UTC 631,377 bytes, 8,259 lines download raw bytes

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&#xE8;que&#x20;Balzac" />
573<meta property="og:image"
574      content="https://boutique.rbafrance.fr/media/catalog/product/F/7/F719_130.jpg?optimize=low&amp;bg-color=255,255,255&amp;fit=bounds&amp;height=265&amp;width=265&amp;canvas=265:265" />
575<meta property="og:description"
576      content="L&#x2019;&#x0153;uvre&#x20;monumentale&#x20;du&#x20;ma&#xEE;tre&#x20;du&#x20;roman&#x20;fran&#xE7;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&#xE1;ngulo_1752" data-name="Rect&#xE1;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&#xE1;ngulo_1748" data-name="Rect&#xE1;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&#xE1;ngulo_1750" data-name="Rect&#xE1;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&#xE1;ngulo_1752-2" data-name="Rect&#xE1;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&#xE1;ngulo_1748-2" data-name="Rect&#xE1;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&#xE1;ngulo_1750-2" data-name="Rect&#xE1;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&#xE9;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&#xE8;que&#x20;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&#x20;Fashion&#x20;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&#xE9;gendes&#x20;De&#x20;La&#x20;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&#x20;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&#x20;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&#x20;Passion&#x20;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&#x20;&#xC9;ternels&#x20;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&#xE9;&#x20;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&#x20;Au&#x20;Num&#xE9;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&#x20;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&uacute; trouver mon N&ordm; 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&eacute;ro de contrat se trouve sur le bon de livraison. Il s'agit d'un num&eacute;ro &agrave; 10 chiffres, situ&eacute; dans les instructions de paiement par carte bancaire.</p>
2321<p>Pour toute question, vous pouvez contacter le service client par e-mail &agrave; l'adresse <a tabindex="0" href="mailto:[email protected]">[email protected]</a> ou en appelant le num&eacute;ro de t&eacute;l&eacute;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&#xE9;"
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&#x20;le&#x20;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&#x20;de&#x20;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&#039;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&#x20;login&#x20;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&#x20;le&#x20;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&#039;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&#xE9;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&#x20;de&#x20;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&#x20;le&#x20;mot&#x20;de&#x20;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&#x27;inscrire"
3732            >
3733                <span x-text="isLoading
3734                    ? 'Creating\u0020account...'
3735                    : 'S\u0027inscrire'">
3736                    S&#039;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&#x20;le&#x20;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&#x20;forgot&#x20;password&#x20;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&#x20;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&#x20;-&#x20;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&#243;digo para modificar el fondo del men&#250; 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&#243;digo para modificar el CTA del men&#250; */
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&#243;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&#225;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&#243;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&#225;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&#243;n entre puntos de la lista */
4700}
4701
4702.custom-list li::before {
4703  content: "\2726"; /* &#10022; */
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&#243;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&#241;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&#225;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&#243;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&#243;viles */
4867  }
4868}
4869
4870/* A&#241;ade espacio suficiente en el carrusel de im&#225;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&#237;nea, salta a la segunda l&#237;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&#225;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&#241;o m&#225;ximo de una columna a pesar de que el row est&#233; 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&#241;o m&#225;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&#241;o de texto para pantallas peque&#241;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&#243;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&#243;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&#243;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&#243;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&#243;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&#241;ade una l&#237;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&#241;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&#241;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&egrave;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&eacute;ro 1, Le P&egrave;re Goriot, <span style="color: rgb(114, 40, 68);">3,99&nbsp;&euro;&nbsp;<span id="H6VIGD3">seulement&nbsp;<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 &euro; 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            &Agrave; partir de quel num&eacute;ro souhaitez-vous commencer votre abonnement ?        </div>
5178                                                                            <div class="control">
5179                        <label class="minilabel">Num&eacute;ro de livraison</label>
5180                        <select id="collectable-options" class="collectable-select">
5181                                                                                                                                    <option value="17850867" data-sku="1" data-matnr="F719001">
5182                                        Num&eacute;ro 001 -  Le P&egrave;re Goriot                                    </option>
5183                                                                                                                                                                                                    <option value="17850868" data-sku="1" data-matnr="F719002">
5184                                        Num&eacute;ro 002 -  Illusions perdues                                    </option>
5185                                                                                                                                                                                                    <option value="17850869" data-sku="1" data-matnr="F719003">
5186                                        Num&eacute;ro 003 -  Eug&eacute;nie Grandet                                    </option>
5187                                                                                                                                                                                                    <option value="17850870" data-sku="2" data-matnr="F719004">
5188                                        Num&eacute;ro 004 -  La Peau de chagrin                                    </option>
5189                                                                                                                                                                                                    <option value="17850871" data-sku="2" data-matnr="F719005">
5190                                        Num&eacute;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&eacute;ro  &agrave; partir duquel vous souhaitez d&eacute;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&eacute;ro 001 -  Le P&egrave;re Goriot                                                </option>
5216                                                                                                                                                                                                                                                                                                                        <option value="17850868" data-sku="1" data-matnr="F719002">
5217                                                    Num&eacute;ro 002 -  Illusions perdues                                                </option>
5218                                                                                                                                                                                                                                                                                                                        <option value="17850869" data-sku="1" data-matnr="F719003">
5219                                                    Num&eacute;ro 003 -  Eug&eacute;nie Grandet                                                </option>
5220                                                                                                                                                                                                                                                                                                                        <option value="17850870" data-sku="2" data-matnr="F719004">
5221                                                    Num&eacute;ro 004 -  La Peau de chagrin                                                </option>
5222                                                                                                                                                                                                                                                                                                                        <option value="17850871" data-sku="2" data-matnr="F719005">
5223                                                    Num&eacute;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&egrave;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 &#215; speed) &#8594; product/form.
5292     * delivery_type: 1=b&#225;sica est&#225;ndar, 2=b&#225;sica r&#225;pida, 3=premium est&#225;ndar, 4=premium r&#225;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'&#8211;'4') for the current plan + speed selections.
5301     * premium/basic  &#8594; data-content-type of the active .subscription-plan-container
5302     * fast/standard  &#8594; input[name="delivery-type"]:checked (value 2=r&#225;pida, 1=est&#225;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&#225;pida
5323        if (isPremium && !isFast)  return '3'; // Premium est&#225;ndar
5324        if (!isPremium && isFast)  return '2'; // B&#225;sica r&#225;pida
5325        return '1';                            // B&#225;sica est&#225;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&#243;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&#225;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&#243;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&#243;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&#243;n al hacer clic en el bot&#243;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 &#215; 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 &#8212; 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&rsquo;&oelig;uvre monumentale du ma&icirc;tre du roman fran&ccedil;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'&eacute;difice romanesque de Balzac dans une &eacute;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&rsquo;&eacute;dition la plus fid&egrave;le &agrave; la volont&eacute; de Balzac. </strong>Pour la premi&egrave;re fois, l&rsquo;&eacute;dition d&eacute;finitive de ses romans dans un luxueux &eacute;crin &agrave; la hauteur de son &oelig;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&eacute;e magistrale de l&rsquo;univers balzacien r&eacute;unissant <strong>La Com&eacute;die humaine</strong> dans son int&eacute;gralit&eacute;, les <strong>&oelig;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&eacute;s des grandes reliures d'&eacute;poque avec marquages au fer &agrave; 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&eacute;es par les plus grands artistes de l'&eacute;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&rsquo;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&rsquo;ABONNEMENT &Agrave; PARTIR DU NUM&Eacute;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 &euro;</s></span> <span style="color: rgb(237, 208, 130);">16,98 &euro; 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&nbsp;&euro; 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&rsquo;ABONNEMENT &Agrave; PARTIR DU NUM&Eacute;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 &euro;</s></span> <span style="color: rgb(237, 208, 130);">12,99 &euro; 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 &euro; 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&rsquo;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&egrave;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&eacute;serv&eacute;s aux abonnements &agrave; partir du n&deg;1, 2 ou 3 de la collection. Si vous vous abonnez &agrave; partir du n&deg;1, vous recevrez les cadeaux pr&eacute;sent&eacute;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&eacute;s par d&rsquo;autres cadeaux d&rsquo;une valeur &eacute;gale ou sup&eacute;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 &euro; 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 &euro; 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&eacute;ro 1 :                 </span>
5895                <span class="delivery-title font-sans font-normal text-base leading-[22px]">
5896                     Le P&egrave;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&eacute;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&eacute;ro 3 :                 </span>
5907                <span class="delivery-title font-sans font-normal text-base leading-[22px]">
5908                     Eug&eacute;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&eacute;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&eacute;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&eacute;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&eacute;ro 7 :                 </span>
5931                <span class="delivery-title font-sans font-normal text-base leading-[22px]">
5932                     Splendeurs et Mis&egrave;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&eacute;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&eacute;ro 9 :                 </span>
5945                <span class="delivery-title font-sans font-normal text-base leading-[22px]">
5946                     Le Lys dans la vall&eacute;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&eacute;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&eacute;ro 11 :                 </span>
5957                <span class="delivery-title font-sans font-normal text-base leading-[22px]">
5958                     Le Chef-d&rsquo;&oelig;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&eacute;ro 12 :                 </span>
5963                <span class="delivery-title font-sans font-normal text-base leading-[22px]">
5964                     M&eacute;moires de deux jeunes mari&eacute;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&eacute;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&eacute;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&eacute;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&eacute;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&eacute;ro 17 :                 </span>
5995                <span class="delivery-title font-sans font-normal text-base leading-[22px]">
5996                     Le Cur&eacute; 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&eacute;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&eacute;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&eacute;cadence de C&eacute;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&eacute;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">&nbsp;</span>
6021            <a href="#all-delivery" class="text">Masquer les premiers num&eacute;ros</a>
6022            </div>
6023            <div class="button display-all">
6024            <span class="text">Voir les premiers num&eacute;ros</span>
6025            <span class="icon icon-down">&nbsp;</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&amp;byline=0&amp;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&eacute;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 &ecirc;tes libre d&rsquo;interrompre la collection &agrave; 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&eacute;serv&eacute;s uniquement &agrave; nos abonn&eacute;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&eacute;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'&ecirc;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 &ccedil;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&eacute;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 &agrave; partir du num&eacute;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&eacute;curit&eacute;</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&ucirc;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 &agrave; 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&eacute;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&eacute;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 &agrave; partir du num&eacute;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&eacute;ro 1 pour 3,99 &euro; seulement, le num&eacute;ro 2 pour 12,99 &euro; et le num&eacute;ro 3 offert, soit un total de 16,98 &euro; pour les trois premiers num&eacute;ros + 0,50 &euro; de frais de port par num&eacute;ro, soit un total de 18,48 &euro;. 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&eacute;ro 4 et 5 au prix de 12,99 &euro; le num&eacute;ro + 0,50 &euro; de frais de port par num&eacute;ro, soit un total de 26,98 &euro;.</span></li>
6083<li><span lang="FR" style="mso-ansi-language: FR;">Dans mon 3<sup>e</sup> envoi, je recevrai le num&eacute;ro 6 et 7 au prix de 12,99 &euro; le num&eacute;ro + 0,50 &euro; de frais de port par num&eacute;ro, soit un total de 26,98 &euro;.</span></li>
6084<li><span lang="FR" style="mso-ansi-language: FR;">&Agrave; partir du 4<sup>e</sup> envoi, je recevrai, environ tous les mois, 4 num&eacute;ros au prix de 12,99 &euro; le num&eacute;ro + 0,50 &euro; de frais de port par num&eacute;ro, soit un total de 53,96 &euro;.</span></li>
6085</ul>
6086<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Si je m'abonne &agrave; partir du deuxi&egrave;me num&eacute;ro ou apr&egrave;s, je recevrai les offres correspondantes au num&eacute;ro de d&eacute;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&rsquo;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 &agrave; partir du num&eacute;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&ordm;3 OFFERT</strong>.<br>Avec mon 2<sup>e</sup> envoi, je recevrai en cadeau&nbsp;<strong>un &eacute;l&eacute;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&eacute;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&eacute;s par d&rsquo;autres cadeaux d&rsquo;une valeur &eacute;gale ou sup&eacute;rieure.</span></p>
6090<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Si je m'abonne &agrave; partir du deuxi&egrave;me num&eacute;ro ou apr&egrave;s, je recevrai les offres correspondantes au num&eacute;ro de d&eacute;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&eacute;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&eacute;ros &agrave; date. La s&eacute;quence de parution pourra &ecirc;tre modifi&eacute;e pour des raisons techniques ou commerciales. L&rsquo;&eacute;diteur se r&eacute;serve le droit de modifier le nombre de num&eacute;ros de la collection en cas de m&eacute;vente ou de succ&egrave;s.<br>L'abonnement est sans engagement, vous pouvez l'arr&ecirc;ter &agrave; 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&eacute;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&eacute;lai maximum de 7 semaines &agrave; 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&eacute;l&egrave;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&eacute;l&egrave;vements se feront dans un d&eacute;lai de 10 jours apr&egrave;s l'envoi de chaque colis. Vous n'avez pas d'engagement de dur&eacute;e et pouvez interrompre votre collection &agrave; tout moment et ce d&egrave;s le 1<sup>er</sup> envoi. Ceci entra&icirc;nera l'interruption de vos pr&eacute;l&egrave;vements automatiques. Vous garderez les cadeaux d&eacute;j&agrave; re&ccedil;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&eacute;l&egrave;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&egrave;glement de votre colis.</span></p>
6091<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Votre compte sera d&eacute;bit&eacute; automatiquement apr&egrave;s l&rsquo;exp&eacute;dition de votre colis et vous ne risquerez plus de ralentir vos livraisons en raison d&rsquo;un oubli.</span></p>
6092<p class="MsoNormal"><span lang="FR" style="mso-ansi-language: FR;">Vous restez libre d&rsquo;arr&ecirc;ter votre abonnement &agrave; tout moment, il n'y a aucun engagement de dur&eacute;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&rsquo;interrompre ma collection &agrave; tout moment par email et ce d&egrave;s le 1<sup>er</sup> envoi, sans avoir &agrave; justifier de motifs. Je garderai mes cadeaux d&eacute;j&agrave; re&ccedil;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&eacute;lai de 20 jours et les colis suivants dans un d&eacute;lai de 30 jours &agrave; compter de la date de leur r&eacute;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&eacute;s de validit&eacute; de l&rsquo;offre d&rsquo;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&rsquo;offre est valable du 02/09/2026 au 01/12/2026 en France m&eacute;tropolitaine et en Belgique. L&rsquo;offre est limit&eacute;e &agrave;
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&rsquo;ai pas trouv&eacute; toutes les r&eacute;ponses &agrave; 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 &eacute;crire &agrave; notre service client par e-mail &agrave; l&rsquo;adresse :&nbsp;<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&Eacute;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&eacute;ro pour compl&eacute;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&eacute;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 &agrave; propos de votre collection&nbsp;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&nbsp; | &nbsp;<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>&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666;"> &nbsp;</span><span style="font-size: 14px;"><span style="color: #b3b3b3;"><a style="color: #b3b3b3;" tabindex="0" href="https://boutique.rbafrance.fr/collections/nouveautes">Nouveaut&eacute;s</a></span> &nbsp; &nbsp; &nbsp; &nbsp;<a tabindex="0" href="https://boutique.rbafrance.fr/collections/livres"><span style="color: #b3b3b3;">Livres</span></a>&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b3b3b3;"><a style="color: #b3b3b3;" tabindex="0" href="https://boutique.rbafrance.fr/collections/jeunesse">Jeunesse</a></span>&nbsp; &nbsp; &nbsp; </span><span style="font-size: 17px; color: #ffffff;"><span style="color: #666666;">|</span>&nbsp;&nbsp; &nbsp; &nbsp;<a tabindex="0" title="Contact" href="/centre-assistance#contact">Contact &nbsp; &nbsp;&nbsp;</a><span style="color: #666666;"><a tabindex="0" title="Contact" href="/centre-assistance#S2HU11F">&nbsp;</a>|&nbsp;</span>&nbsp; &nbsp; &nbsp; <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&eacute;gal</a>&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666;">|</span>&nbsp; &nbsp; &nbsp; <a style="color: #b3b3b3;" tabindex="0" href="/politique-de-confidentialite">&nbsp;Politique de confidentialit&eacute;</a>&nbsp; &nbsp; &nbsp; <span style="color: #666666;">|</span>&nbsp; &nbsp; &nbsp; <a style="color: #b3b3b3;" tabindex="0" href="/cookie-policy">&nbsp;Politique en mati&egrave;re de cookies </a>&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666;">|&nbsp; &nbsp;</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;">|&nbsp; &nbsp; &nbsp;<a style="color: #b3b3b3;" tabindex="0" href="/conditions-generales-vente-abonnement">Conditions g&eacute;n&eacute;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;">&#9656; <a style="color: #b3b3b3;" tabindex="0" href="https://boutique.rbafrance.fr/collections/nouveautes">Nouveaut&eacute;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;">&#9656; <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;">&#9656; <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&eacute;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&eacute;</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&egrave;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&eacute;n&eacute;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&#x3A;&#x2F;&#x2F;boutique.rbafrance.fr&#x2F;static&#x2F;version1790894180&#x2F;frontend&#x2F;Rba&#x2F;Hyva&#x2F;fr_FR&#x2F;Magento_PageBuilder&#x2F;js&#x2F;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.