<!doctype html>
<html lang="fr">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#">
<meta charset="utf-8"/>
<meta name="title" content="Rideau Majorelle en velours : élégance florale chic"/>
<meta name="description" content=" Créez une ambiance très chic avec un rideau Majorelle en velours, pensé pour sublimer vos fenêtres grâce à un tombé élégant, floral et raffiné."/>
<meta name="keywords" content="RIDEAU MAJORELLE SUR VELOURS"/>
<meta name="robots" content="INDEX,FOLLOW"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="p:domain_verify" content="aa513b099452a422663e385ef0b121b1"/>
<title>Rideau Majorelle en velours : élégance florale chic</title>
<link rel="stylesheet" type="text/css" media="all" href="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/css/styles.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/css/product.css" />
<link rel="stylesheet" type="text/css" media="all" href="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/css/jquery.nice-number.css" />
<link rel="stylesheet" type="text/css">
<script type="text/javascript" async="async" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Dbm_Axeptio/js/checkbox.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Mesrideaux_Ga4Datalayer/js/ga4-datalayer.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Mesrideaux_Ga4Datalayer/js/catalog-tracking.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Mesrideaux_Ga4Datalayer/js/promotion-tracking.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/slick.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Emipro_CosuiteID/js/customoption.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Mesrideaux_Ga4Datalayer/js/wishlist-tracking.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Mesrideaux_Ga4Datalayer/js/catalog-variant-item.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Estarter_AjaxCart/js/jquery.magnific-popup.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Estarter_AjaxCart/js/ajaxAddToCart.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/magento-ui-modal-shim.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Magento_Catalog/js/catalog-add-to-cart.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Magento_Catalog/js/validate-product.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Magento_Catalog/js/price-options.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Magento_Catalog/js/magento-init-bridge.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/product-view.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/jquery.nice-number.min.js"></script>
<script type="text/javascript" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/product.min.js"></script>
<script type="text/javascript" defer="defer" src="//t4.my-probance.one/webtrax/rsc/mesrideaux.js"></script>
<script type="text/javascript" defer="defer" src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Doofinder_Feed/js/df_add_to_cart_hyva.min.js"></script>
<link rel="canonical" href="https://www.mesrideaux.fr/rideau-majorelle-sur-velours.html" />
<link rel="icon" type="image/x-icon" href="https://cdn4.mesrideaux.fr/favicon/default/favicon.svg" />
<link rel="shortcut icon" type="image/x-icon" href="https://cdn4.mesrideaux.fr/favicon/default/favicon.svg" />
<script>
window.dataLayer = window.dataLayer || [];
</script>
<script>
sessionStorage.setItem('referrer', sessionStorage.getItem('referrer') || document.referrer);
var referrer = sessionStorage.getItem('referrer');
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'Referrer': referrer,
});
window._axcb = window._axcb || [];
window._axcb.push(function (sdk) {
sdk.on('cookies:complete', function (choices) {
sessionStorage.removeItem('referrer');
});
});
</script><!-- Google Tag Manager -->
<script>
window.dataLayer = window.dataLayer || [];
window.gtag = window.gtag || function () {
window.dataLayer.push(arguments);
};
</script>
<!-- GTM loader disabled: Cloudflare Google Tag Gateway serves /metrics/
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l !== 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', '');
</script>
-->
<!-- End Google Tag Manager -->
<script>
var BASE_URL = 'https://www.mesrideaux.fr/';
var THEME_PATH = 'https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR';
var COOKIE_CONFIG = {
"expires": null,
"path": "\u002F",
"domain": ".mesrideaux.fr",
"secure": true,
"lifetime": "3600",
"cookie_restriction_enabled": false };
var CURRENT_STORE_CODE = 'default';
var CURRENT_WEBSITE_ID = '1';
window.hyva = window.hyva || {}
window.cookie_consent_groups = window.cookie_consent_groups || {}
window.cookie_consent_groups['necessary'] = true;
window.cookie_consent_config = window.cookie_consent_config || {};
window.cookie_consent_config['necessary'] = [].concat(
window.cookie_consent_config['necessary'] || [],
[
'user_allowed_save_cookie',
'form_key',
'mage-messages',
'private_content_version',
'mage-cache-sessid',
'last_visited_store',
'section_data_ids'
]
);
//# sourceURL=hyva-variables.js
</script>
<script>
(function( hyva, undefined ) {
function lifetimeToExpires(options, defaults) {
const lifetime = options.lifetime || defaults.lifetime;
if (lifetime) {
const date = new Date;
date.setTime(date.getTime() + lifetime * 1000);
return date;
}
return null;
}
function generateRandomString() {
const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
length = 16;
let formKey = '',
charactersLength = allowedCharacters.length;
for (let i = 0; i < length; i++) {
formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
}
return formKey;
}
const sessionCookieMarker = {noLifetime: true}
const cookieTempStorage = {};
const internalCookie = {
get(name) {
const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
return v ? v[2] : null;
},
set(name, value, days, skipSetDomain) {
let expires,
path,
domain,
secure,
samesite;
const defaultCookieConfig = {
expires: null,
path: '/',
domain: null,
secure: false,
lifetime: null,
samesite: 'lax'
};
const cookieConfig = window.COOKIE_CONFIG || {};
expires = days && days !== sessionCookieMarker
? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
: lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
path = cookieConfig.path || defaultCookieConfig.path;
domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
secure = cookieConfig.secure || defaultCookieConfig.secure;
samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
document.cookie = name + "=" + encodeURIComponent(value) +
(expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
(path ? '; path=' + path : '') +
(domain ? '; domain=' + domain : '') +
(secure ? '; secure' : '') +
(samesite ? '; samesite=' + samesite : 'lax');
},
isWebsiteAllowedToSaveCookie() {
const allowedCookies = this.get('user_allowed_save_cookie');
if (allowedCookies) {
const allowedWebsites = JSON.parse(unescape(allowedCookies));
return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
}
return false;
},
getGroupByCookieName(name) {
const cookieConsentConfig = window.cookie_consent_config || {};
let group = null;
for (let prop in cookieConsentConfig) {
if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
if (cookieConsentConfig[prop].includes(name)) {
group = prop;
break;
}
}
return group;
},
isCookieAllowed(name) {
const cookieGroup = this.getGroupByCookieName(name);
return cookieGroup
? window.cookie_consent_groups[cookieGroup]
: this.isWebsiteAllowedToSaveCookie();
},
saveTempStorageCookies() {
for (const [name, data] of Object.entries(cookieTempStorage)) {
if (this.isCookieAllowed(name)) {
this.set(name, data['value'], data['days'], data['skipSetDomain']);
delete cookieTempStorage[name];
}
}
}
};
hyva.getCookie = (name) => {
const cookieConfig = window.COOKIE_CONFIG || {};
if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
}
return internalCookie.get(name);
}
hyva.setCookie = (name, value, days, skipSetDomain) => {
const cookieConfig = window.COOKIE_CONFIG || {};
if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
cookieTempStorage[name] = {value, days, skipSetDomain};
return;
}
return internalCookie.set(name, value, days, skipSetDomain);
}
hyva.setSessionCookie = (name, value, skipSetDomain) => {
return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
}
hyva.getBrowserStorage = () => {
const browserStorage = window.localStorage || window.sessionStorage;
if (!browserStorage) {
console.warn('Browser Storage is unavailable');
return false;
}
try {
browserStorage.setItem('storage_test', '1');
browserStorage.removeItem('storage_test');
} catch (error) {
console.warn('Browser Storage is not accessible', error);
return false;
}
return browserStorage;
}
hyva.postForm = (postParams) => {
const form = document.createElement("form");
let data = postParams.data;
if (! postParams.skipUenc && ! data.uenc) {
data.uenc = btoa(window.location.href);
}
form.method = "POST";
form.action = postParams.action;
Object.keys(postParams.data).map(key => {
const field = document.createElement("input");
field.type = 'hidden'
field.value = postParams.data[key];
field.name = key;
form.appendChild(field);
});
const form_key = document.createElement("input");
form_key.type = 'hidden';
form_key.value = hyva.getFormKey();
form_key.name="form_key";
form.appendChild(form_key);
document.body.appendChild(form);
form.submit();
}
hyva.getFormKey = function () {
let formKey = hyva.getCookie('form_key');
if (!formKey) {
formKey = generateRandomString();
hyva.setCookie('form_key', formKey);
}
return formKey;
}
hyva.formatPrice = (value, showSign, options = {}) => {
const groupSeparator = options.groupSeparator;
const decimalSeparator = options.decimalSeparator
delete options.groupSeparator;
delete options.decimalSeparator;
const formatter = new Intl.NumberFormat(
'fr\u002DFR',
Object.assign({
style: 'currency',
currency: 'EUR',
signDisplay: showSign ? 'always' : 'auto'
}, options)
);
return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
formatter.formatToParts(value).map(({type, value}) => {
switch (type) {
case 'currency':
return '\u20AC' || value;
case 'minusSign':
return '- ';
case 'plusSign':
return '+ ';
case 'group':
return groupSeparator !== undefined ? groupSeparator : value;
case 'decimal':
return decimalSeparator !== undefined ? decimalSeparator : value;
default :
return value;
}
}).reduce((string, part) => string + part) :
formatter.format(value);
}
const formatStr = function (str, nStart) {
const args = Array.from(arguments).slice(2);
return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
const idx = parseInt(n) - nStart;
if (args[idx] === null || args[idx] === void 0) {
return m;
}
return p.length % 2
? p.slice(0, -1).replace('%%', '%') + args[idx]
: p.replace('%%', '%') + n;
})
}
hyva.str = function (string) {
const args = Array.from(arguments);
args.splice(1, 0, 1);
return formatStr.apply(undefined, args);
}
hyva.strf = function () {
const args = Array.from(arguments);
args.splice(1, 0, 0);
return formatStr.apply(undefined, args);
}
/**
* Take a html string as `content` parameter and
* extract an element from the DOM to replace in
* the current page under the same selector,
* defined by `targetSelector`
*/
hyva.replaceDomElement = (targetSelector, content) => {
// Parse the content and extract the DOM node using the `targetSelector`
const parser = new DOMParser();
const doc = parser.parseFromString(content, 'text/html');
const contentNode = doc.querySelector(targetSelector);
// Bail if content or target can't be found
if (!contentNode || !document.querySelector(targetSelector)) {
return;
}
hyva.activateScripts(contentNode);
// Replace the old DOM node with the new content
document.querySelector(targetSelector).replaceWith(contentNode);
// Reload customerSectionData and display cookie-messages if present
window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
hyva.initMessages();
}
hyva.removeScripts = (contentNode) => {
const scripts = contentNode.getElementsByTagName('script');
for (let i = 0; i < scripts.length; i++) {
scripts[i].parentNode.removeChild(scripts[i]);
}
const templates = contentNode.getElementsByTagName('template');
for (let i = 0; i < templates.length; i++) {
const container = document.createElement('div');
container.innerHTML = templates[i].innerHTML;
hyva.removeScripts(container);
templates[i].innerHTML = container.innerHTML;
}
}
hyva.activateScripts = (contentNode) => {
// Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
const scripts = Array.from(contentNode.getElementsByTagName('script'));
// Iterate over all script tags to duplicate+inject each into the head
for (const original of scripts) {
const script = document.createElement('script');
original.type && (script.type = original.type);
script.innerHTML = original.innerHTML;
// Remove the original (non-executing) script from the contentNode
original.parentNode.removeChild(original)
// Add script to head
document.head.appendChild(script);
}
return contentNode;
}
const replace = {['+']: '-', ['/']: '_', ['=']: ','};
hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
let currentTrap;
const focusableElements = (rootElement) => {
const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
return Array.from(rootElement.querySelectorAll(selector))
.filter(el => {
return el.style.display !== 'none'
&& !el.disabled
&& el.tabIndex !== -1
&& (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
})
}
const focusTrap = (e) => {
const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
if (!isTabPressed) return;
const focusable = focusableElements(currentTrap)
const firstFocusableElement = focusable[0]
const lastFocusableElement = focusable[focusable.length - 1]
e.shiftKey
? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
: document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
};
hyva.releaseFocus = (rootElement) => {
if (currentTrap && (!rootElement || rootElement === currentTrap)) {
currentTrap.removeEventListener('keydown', focusTrap)
currentTrap = null
}
}
hyva.trapFocus = (rootElement) => {
if (!rootElement) return;
hyva.releaseFocus()
currentTrap = rootElement
rootElement.addEventListener('keydown', focusTrap)
const firstElement = focusableElements(rootElement)[0]
firstElement && firstElement.focus()
}
hyva.safeParseNumber = (rawValue) => {
const number = rawValue ? parseFloat(rawValue) : null;
return Array.isArray(number) || isNaN(number) ? rawValue : number;
}
const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
const camelCase = toCamelCase(name);
const key = '__hyva_bool_' + name
return new Proxy(Object.assign(
additionalMethods,
{
[key]: !!value,
[name]() {return !!this[key]},
['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
['not' + camelCase]() {return !this[key]},
['toggle' + camelCase]() {this[key] = !this[key]},
[`set${camelCase}True`]() {this[key] = true},
[`set${camelCase}False`]() {this[key] = false},
}
), {
set(target, prop, value) {
return prop === name
? (target[key] = !!value)
: Reflect.set(...arguments);
}
})
}
hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
}( window.hyva = window.hyva || {} ));
//# sourceURL=hyva.js
</script>
<script type="speculationrules">
{
"tag": "Hyva Theme",
"prefetch": [{
"source": "document",
"where": {
"and": [
{ "href_matches": "/*" },
{ "not": {
"href_matches": ["/customer/*","/search/*","/sales/*","/wishlist/*","/checkout/*","/paypal/*","/newsletter/*","/stores/store/redirect/*"] }},
{ "not": {
"selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"]
}}
]
},
"eagerness": "moderate"
}]
}
</script>
<script>
const viewTransitionToGalleryPageStorage = 'view-transition-to-gallery-page-type';
const setTransitionNameBetweenGallery = async (url, promise) => {
if (window.matchMedia('(prefers-reduced-motion)').matches) return;
const productGallery = document.getElementById('gallery-main');
const productListItem = document.querySelector(`.product-item-photo[href="${url}"]`);
const targetElement = productListItem || productGallery;
if (targetElement) {
targetElement.style.viewTransitionName = 'view-transition-to-gallery';
await promise;
targetElement.style.viewTransitionName = '';
}
};
const getViewTransitionToGalleryPageIsProduct = () => {
return document.body.classList.contains('catalog-product-view') ? 'product-page' : 'other'
}
window.addEventListener('pageswap', async (e) => {
if (!e.viewTransition) return;
const pageType = getViewTransitionToGalleryPageIsProduct();
const target = new URL(e.activation.entry.url);
sessionStorage.setItem(viewTransitionToGalleryPageStorage, pageType);
setTransitionNameBetweenGallery(target.href, e.viewTransition.finished);
});
window.addEventListener('pagereveal', async (e) => {
if (!e.viewTransition || (window.navigation && !window.navigation.activation.from)) return;
const previousPageType = sessionStorage.getItem(viewTransitionToGalleryPageStorage);
const pageType = getViewTransitionToGalleryPageIsProduct();
sessionStorage.removeItem(viewTransitionToGalleryPageStorage);
if (previousPageType === pageType) return;
const target = new URL(window.navigation.activation.from.url);
setTransitionNameBetweenGallery(target.href, e.viewTransition.ready);
});
</script>
<meta property="og:type" content="product" />
<meta property="og:title"
content="RIDEAU MAJORELLE SUR VELOURS" />
<meta property="og:image"
content="https://cdn4.mesrideaux.fr/catalog/product/cache/6517c62f5899ad6aa0ba23ceb3eeff97/r/i/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp" />
<meta property="og:description"
content="Apportez du relief, de la couleur et une vraie présence décorative à votre intérieur avec le rideau Majorelle en velours. Confectionné sur mesure, ce rideau transforme vos fenêtres en élément central pour votre pièce tout en habillant votre espace avec élégance. Son motif floral généreux, inspiré d’un jardin vibrant et lumineux, crée une atmosphère raffinée, chaleureuse et pleine de caractère. Dans votre salon, votre chambre ou votre espace de réception, il attire le regard sans jamais perdre en sophistication.
 " />
<meta property="og:url" content="https://www.mesrideaux.fr/rideau-majorelle-sur-velours.html" />
<meta property="product:price:amount" content="374"/>
<meta property="product:price:currency"
content="EUR"/>
<meta property="product:availability" content="in stock"/>
<link rel="preload" href="https://cdn4.mesrideaux.fr/catalog/product/cache/207e23213cf636ccdef205098cf3c8a3/r/i/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp" as="image">
<script>
(function () {
let amSwiperProcessed = false;
window.addEventListener('load-amswiper', () => {
if (amSwiperProcessed) {
window?.Swiper && window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
return;
}
const script = document.createElement('script');
script.src = 'https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Amasty_LibSwiperJs/js/vendor/swiper/swiper.min.js';
script.async = true;
document.body.appendChild(script);
amSwiperProcessed = true;
script.onload = () => {
window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
}
const stylesHref = 'https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Amasty_LibSwiperJs/vendor/swiper/swiper.min.css';
if (document.querySelector(`link[href="${stylesHref}"]`)) {
return;
}
const styles = document.createElement('link');
styles.rel = 'stylesheet';
styles.type = 'text/css';
styles.href = stylesHref;
document.head.appendChild(styles);
});
}());
</script>
<script nonce="czN4Zjl2MDhuejNia2g4Y2xiMDU4Y2ttejRuams3eTM=">
var dfPageType = "product";
var dfProductId = "35439";
var dfCategoryName = "Cr\u00e9ateurs > Thevenon";
</script>
<script nonce="czN4Zjl2MDhuejNia2g4Y2xiMDU4Y2ttejRuams3eTM=">
(function(w, k) {w[k] = window[k] ||
function () { (window[k].q = window[k].q || []).push(arguments) }})(window, "doofinderApp")
doofinderApp("config", "language", "fr")
doofinderApp("config", "currency", "EUR")
doofinderApp("config", "priceName", "EUR")
</script>
<script src="https://eu1-config.doofinder.com/2.x/5d359ac0-164d-4242-a2c0-4393cf13f41a.js" async></script></head>
<body id="html-body" class="page-product-configurable catalog-product-view product-rideau-majorelle-sur-velours page-layout-1column page-layout-product-full-width">
<input name="form_key" type="hidden" value="fjQIJcI8gxUDUYBO" />
<noscript>
<section
class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"
aria-labelledby="messageGlobalNoScriptMessage"
>
<div class="container text-center">
<p id="messageGlobalNoScriptMessage">
<strong>Javascript est désactivé dans votre navigateur.</strong>
<span>
Pour une expérience optimale sur notre site, veuillez autoriser Javascript sur votre navigateur. </span>
</p>
</div>
</section>
</noscript>
<script>
document.body.addEventListener('touchstart', () => {}, {passive: true})
</script>
<div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white contentarea"
href="#contentarea">
<span>
Aller au contenu </span>
</a>
<script>
function initHeader() {
return {
searchOpen: false,
cart: {},
isCartOpen: false,
getData(data) {
this.cart = data.cart ?? {};
},
summaryCount() {
return this.cart.summary_count || 0;
},
cartAriaLabel() {
return 'Toggle\u0020minicart, ' +
(this.isCartEmpty() ? 'Votre\u0020panier\u0020est\u0020vide' : (
Math.abs(this.summaryCount()) > 1 ?
hyva.str('\u00251\u0020articles', this.summaryCount()) :
hyva.str('\u00251\u0020item', this.summaryCount())
))
},
isCartEmpty() {
return !this.cart.summary_count;
},
toggleCart() {
this.isCartOpen = this.$event.detail?.isOpen ?? true;
this.$dispatch('toggle-cart', { isOpen: this.isCartOpen })
},
toggleSearch() {
this.searchOpen = !this.searchOpen;
this.$dispatch('search-open');
},
searchClose() {
this.searchOpen = false;
this.$refs.searchButton.focus();
},
searchEscape() {
this.searchClose();
},
initBannerBelowHeader() {
if (typeof jQuery === 'undefined' || typeof jQuery.fn.slick === 'undefined') {
return;
}
const el = this.$refs.bannerBelowHeaderItems;
if (!el || jQuery(el).hasClass('slick-initialized')) {
return;
}
jQuery(el).slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
dots: false,
autoplay: true,
autoplaySpeed: 2000,
infinite: true,
adaptiveHeight: true,
vertical: window.innerWidth >= 768,
// Handle window resizing to switch vertical/horizontal mode
responsive: [
{
breakpoint: 768,
settings: {
vertical: false,
verticalSwiping: false,
cssEase: 'linear',
speed: 11500,
autoplay: true,
autoplaySpeed: 0,
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
dots: false,
infinite: true,
// Make it act like a marquee (continuous scroll)
variableWidth: true,
centerMode: false,
swipe: false,
touchMove: false,
}
},
{
breakpoint: 9999, // essentially for all above
settings: {
vertical: true,
verticalSwiping: true,
}
}
]
});
}
}
}
// Ajoute la classe 'fixe-header' au scroll selon la version (desktop/mobile)
function handleHeaderFixedOnScroll() {
const header = document.getElementById('header');
if (!header) return;
const container = header.querySelector(':scope > .container');
const DESKTOP_BREAKPOINT = 1024;
// Marge anti-rebond iOS Safari : évite le basculement rapide fixe/non-fixe
const SCROLL_HYSTERESIS = 10;
const MOBILE_MIN_SCROLL = 10;
let isFixed = false;
let rafId = null;
let scrollThreshold = 0;
let headerBottomThreshold = 0;
function cacheScrollThresholds() {
const rect = header.getBoundingClientRect();
headerBottomThreshold = rect.bottom + window.scrollY;
if (container) {
const containerRect = container.getBoundingClientRect();
scrollThreshold = containerRect.top + window.scrollY;
}
}
function setFixedHeader(fixed) {
if (fixed === isFixed) return;
isFixed = fixed;
header.classList.toggle('fixe-header', fixed);
if (container) {
header.style.setProperty(
'--header-fixed-spacer',
fixed ? container.offsetHeight + 'px' : '0px'
);
}
}
function updateFixedHeader() {
const isDesktop = window.innerWidth >= DESKTOP_BREAKPOINT;
const scrollY = Math.max(0, window.scrollY);
if (isDesktop) {
const shouldFix = scrollY >= headerBottomThreshold;
const shouldUnfix = scrollY < headerBottomThreshold - SCROLL_HYSTERESIS;
setFixedHeader(isFixed ? !shouldUnfix : shouldFix);
return;
}
if (!container) return;
if (!isFixed) {
setFixedHeader(scrollY > MOBILE_MIN_SCROLL && scrollY >= scrollThreshold);
} else {
setFixedHeader(scrollY > MOBILE_MIN_SCROLL && scrollY >= scrollThreshold - SCROLL_HYSTERESIS);
}
}
function scheduleUpdate() {
if (rafId !== null) return;
rafId = requestAnimationFrame(() => {
rafId = null;
updateFixedHeader();
});
}
function handleResize() {
const wasFixed = isFixed;
if (wasFixed) {
setFixedHeader(false);
}
cacheScrollThresholds();
if (wasFixed) {
updateFixedHeader();
}
}
cacheScrollThresholds();
updateFixedHeader();
window.addEventListener('scroll', scheduleUpdate, { passive: true });
window.addEventListener('resize', handleResize, { passive: true });
}
if (typeof window !== "undefined") {
window.addEventListener('DOMContentLoaded', handleHeaderFixedOnScroll, { once: true });
}
window.addEventListener('alpine:init', () => {
Alpine.data('initHeader', initHeader);
}, { once: true })
</script>
<div id="header"
class="header-2 relative z-30 w-full border-b shadow bg-white border-gray-100"
x-data="initHeader()"
@private-content-loaded.window="getData(event.detail.data)"
>
<div class="bannerBelowHeader" x-init="initBannerBelowHeader()">
<div class="bannerBelowHeader__items overflow-hidden" x-ref="bannerBelowHeaderItems">
<div class="bannerBelowHeader__item">
Chaque création est fabriquée sur commande. </div>
<div class="bannerBelowHeader__item">
En raison des fermetures estivales de nos ateliers, les délais de confection seront allongés pour les commandes passées en juillet et en août.
Merci pour votre compréhension. </div>
</div>
</div>
<div class="container flex flex-wrap lg:flex-nowrap items-center justify-between w-full px-6 py-0 mx-auto mt-0">
<!--Logo-->
<div class="sm:order-1 lg:order-0 w-full pb-2 sm:w-auto sm:pb-0 logo-container">
<a
class="flex items-center justify-center text-xl font-medium"
href="https://www.mesrideaux.fr/"
aria-label="Go to Home page"
>
<img
src="https://cdn4.mesrideaux.fr/logo/default/mesrideaux_logo_1.svg"
alt="Logo MesRideaux"
width="189" height="64" loading="eager"
>
</a>
</div>
<!--Main Navigation-->
<script>
// Procédure JS simple
function initMobileMenu() {
const closeMenuButton = document.querySelector(".close-menu-mobile");
const toggleMenuButton = document.querySelector('#header .container .menu-mobile > [type="button"]');
const mobileMenu = document.querySelector('#header .container .menu-mobile > #mobile-snowdog-menu');
toggleMenuButton.addEventListener("click", function() {
if (mobileMenu.classList.contains("active")) {
// toggleMenuButton.setAttribute("aria-expanded", "false");
mobileMenu.classList.remove("active");
document.body.classList.remove("fixed-to-scroll");
} else {
// toggleMenuButton.setAttribute("aria-expanded", "true");
mobileMenu.classList.add("active");
document.body.classList.add("fixed-to-scroll");
}
});
closeMenuButton.addEventListener("click", function() {
mobileMenu.classList.remove("active");
document.body.classList.remove("fixed-to-scroll");
mobileMenu.querySelectorAll('.submenu.active').forEach(sub => {
sub.classList.remove('active');
});
});
// Ajoute un événement pour ouvrir les sous-menus quand on clique sur .menu-arrow dans le menu mobile
mobileMenu.querySelectorAll('.menu-arrow').forEach(arrow => {
arrow.addEventListener('click', function(e) {
e.preventDefault();
const submenu = this.parentElement.querySelector(':scope > .submenu');
if (submenu) {
// Remove 'active' class from all submenu elements that currently have it
mobileMenu.querySelectorAll('.submenu.active').forEach(sub => {
// sub.classList.remove('active');
});
submenu.classList.add('active');
}
});
});
// Ajoute un événement pour fermer les sous-menus quand on clique sur "retour" (menu-back-button)
mobileMenu.querySelectorAll('.menu-back-button').forEach(backButton => {
backButton.addEventListener('click', function(e) {
e.preventDefault();
// Le bouton retour est dans le li.menu-back-item juste avant le ul.submenu
// On vise le parent du bouton (li), puis l'ul.submenu qui suit
const submenu = this.closest('.submenu');
if (submenu && submenu.classList.contains('active')) {
submenu.classList.remove('active');
}
});
});
}
// Appelée une seule fois quand Alpine est initialisé
window.addEventListener('alpine:init', () => {
initMobileMenu();
}, { once: true });
</script>
<div x-data="{ open: false }" class="lg:hidden menu-mobile">
<button
type="button"
class="btn bg-transparent border-transparent p-2"
@click="open = !open"
:aria-expanded="open"
aria-controls="mobile-snowdog-menu"
aria-label="Toggle menu"
>
<span class="sr-only">Toggle menu</span>
<span class="block w-6 h-0.5 bg-current mb-1"></span>
<span class="block w-6 h-0.5 bg-current mb-1"></span>
<span class="block w-6 h-0.5 bg-current"></span>
</button>
<div
id="mobile-snowdog-menu"
x-show="open"
x-cloak
class="absolute inset-x-0 top-full z-20 bg-white border-t border-slate-200 shadow-md"
>
<nav aria-label="Mobile Main Menu">
<ul class="py-2">
<ul class="py-2"><li class="level0 parent first level-top">
<a
href="https://www.mesrideaux.fr/rideaux.html"
class="main-menu__link"
data-menu="menu-1">
Rideaux</a>
<span class="menu-arrow">
</span><ul class="level1 submenu"><li class="menu-back-item"><button type="button" class="menu-back-button">
Retour
</button></li><li class="level1 column-simple w-25 first"><a
href="https://www.mesrideaux.fr/rideau-taffetas-moire.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-84"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-thevenon-taffetas-moire-beige-gros-plan_2.webp"
alt="Rideau Taffetas Moiré alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Taffetas Moiré</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/rideau-kimono-flowers.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-339"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-kimono-flowers-fond-rouge-gros-plan_1.webp"
alt="Rideau Kimono Flowers alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Kimono Flowers</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/rideau-velours-texture-studio.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-350"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-velours-texture-studio-blanc-casse-gros-plan_2.webp"
alt="Rideau Velours Texture Studio alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Velours Texture Studio</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/tissu-scopello.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-351"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-scopello-granito-photo-tissu_4.webp"
alt="Rideau Scopello alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Scopello</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="/stores-bateaux.html"
data-menu="menu-2" class="main-menu__link" >
Stores </a>
<span class="menu-arrow">
</span><ul class="level1 submenu"><li class="menu-back-item"><button type="button" class="menu-back-button">
Retour
</button></li><li class="level1 column-simple w-25  first"><a
href="https://www.mesrideaux.fr/store-bateau-amara-aquaclean-32637.html"
class="snowdog-menu-link column-simple w-25  product-menu submenu-with-image w-full text-center"
data-menu="menu-342"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-casal-amara-aquaclean-argent-gros-plan_3.webp"
alt="STORE BATEAU AMARA AQUACLEAN alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">STORE BATEAU AMARA AQUACLEAN</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/store-bateau-suzie.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-343"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-thevenon-suzie-vert-fond-vanille-gros-plan_1.webp"
alt="Store bateau Suzie alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Store bateau Suzie</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/store-bateau-samani.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-352"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-gaston-y-daniela-samani-beige-et-bleu-gros-plan_1.webp"
alt=" alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Store bateau Samani</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/store-bateau-scopello.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-353"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-luciano-marcato-scopello-navy-gros-plan_1.webp"
alt="Store bateau Scopello alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Store bateau Scopello</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="/coussins.html"
data-menu="menu-234" class="main-menu__link" >
Coussins </a>
<span class="menu-arrow">
</span><ul class="level1 submenu"><li class="menu-back-item"><button type="button" class="menu-back-button">
Retour
</button></li><li class="level1 column-simple w-25 first"><a
href="https://www.mesrideaux.fr/coussin-osier.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-344"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-lelievre-osier-pavot-gros-plan_1.webp"
alt="Coussin Osier alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Coussin Osier</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/coussin-sake.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-345"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-sake-taupe-gros-plan_1.webp"
alt="Coussin Sake alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Coussin Sake</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/coussin-poissons-coffre.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-354"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-thevenon-poissons-coffre-fond-marine-sur-lin-gros-plan_1.webp"
alt="COUSSIN POISSONS COFFRE alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">COUSSIN POISSONS COFFRE</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/coussin-french-ikat.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-355"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-thevenon-french-ikat-indigo-outdoor-gros-plan_1.webp"
alt="COUSSIN FRENCH IKAT alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">COUSSIN FRENCH IKAT</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="/coussins-banquette.html"
data-menu="menu-233" class="main-menu__link" >
Banquettes </a>
<span class="menu-arrow">
</span><ul class="level1 submenu"><li class="menu-back-item"><button type="button" class="menu-back-button">
Retour
</button></li><li class="level1 column-simple submenu-with-image w-25  product-menu first"><a
href="https://www.mesrideaux.fr/banquette-together-cool-clean.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-346"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-thevenon-together-cool-clean-biscuit-gros-plan_1.webp"
alt="BANQUETTE TOGETHER COOL CLEAN alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">BANQUETTE TOGETHER COOL CLEAN</span>
</a>
</li><li class="level1 column-simple submenu-with-image w-25  product-menu"><a
href="https://www.mesrideaux.fr/banquette-lempicka.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-347"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-casal-lempicka-jour-imperial-gros-plan.webp"
alt="Coussin Sake alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Banquette Lempicka</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/banquette-amara-aquaclean.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-356"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-casal-amara-aquaclean-canard-gros-plan_1.webp"
alt="BANQUETTE AMARA AQUACLEAN alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">BANQUETTE AMARA AQUACLEAN</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/banquette-blues-jacquard-bronze"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-357"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-thevenon-blues-jacquard-bronze-gros-plan.webp"
alt="BANQUETTE BLUES JACQUARD BRONZE alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">BANQUETTE BLUES JACQUARD BRONZE</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="https://www.mesrideaux.fr/tissus.html"
class="main-menu__link"
data-menu="menu-8">
Tissus</a>
<span class="menu-arrow">
</span><ul class="level1 submenu"><li class="menu-back-item"><button type="button" class="menu-back-button">
Retour
</button></li><li class="level1 column-simple submenu-with-image w-25  product-menu first"><a
href="https://www.mesrideaux.fr/tissu-muse.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-348"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-thevenon-muse-fond-bleu-jean-photo-tissu_1.webp"
alt="Tissu Muse alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Tissu Muse</span>
</a>
</li><li class="level1 column-simple submenu-with-image w-25  product-menu"><a
href="https://www.mesrideaux.fr/tissu-timeline.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-349"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-thevenon-timeline-fond-abricot-photo-tissu.webp"
alt="TISSU AU METRE HANA BOIS DE ROSE alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">TISSU TIMELINE</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/tissu-sake.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-358"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-casal-sake-ambre-photo-tissu_2.webp"
alt="Tissu Sake alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Tissu Sake</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/tissu-sillage.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-359"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-casal-sillage-eau-claire-photo-tissu_3.webp"
alt="Tissu Sillage alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Tissu Sillage</span>
</a>
</li></ul></li><li class="level0 parent last level-top">
<a
href="/blog/"
data-menu="menu-10" class="main-menu__link" target="_blank" rel="noopener" >
Blog </a>
<span class="menu-arrow">
</span><ul class="level1 submenu"><li class="menu-back-item"><button type="button" class="menu-back-button">
Retour
</button></li><li class="level1 blog-menu first last"><style>#html-body [data-pb-style=W2L5VRG]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=JI2ELJW]{display:flex;width:100%}#html-body [data-pb-style=JSPTWRL]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:75%;align-self:stretch}#html-body [data-pb-style=XMNY19H]{display:inline-block}#html-body [data-pb-style=REMAYEC]{text-align:center}#html-body [data-pb-style=C6GHF61]{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=DFUABM1]{border-style:none}#html-body [data-pb-style=KIQKOH9],#html-body [data-pb-style=XD2AIPT]{max-width:100%;height:auto}@media only screen and (max-width: 767px) { #html-body [data-pb-style=DFUABM1]{border-style:none} }</style><div class="pagebuilder-column-group container" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-background-lazy-load="false" data-element="main" data-pb-style="W2L5VRG"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="JI2ELJW"><div class="pagebuilder-column menu-blog-left" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="false" data-element="main" data-pb-style="JSPTWRL"><div data-content-type="text" data-appearance="default" data-element="main"><p>Découvrez les dernières tendances et les meilleures astuces déco ! Pour en savoir plus, rendez-vous sur notre blog <strong data-start="115" data-end="132">MesRideaux.fr</strong>.<br data-start="133" data-end="136"></p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="XMNY19H"><a class="pagebuilder-button-primary" href="/blog/" target="_blank" data-link-type="default" data-element="link" data-pb-style="REMAYEC"><span data-element="link_text">Explorez dès maintenant !</span></a></div></div><div data-content-type="text" data-appearance="default" data-element="main"><p> </p>
<p>Vous avez des questions ou souhaitez échanger des idées déco ? Retrouvez-nous sur <a title="trouvez-nous sur instagram" href="https://www.instagram.com/mesrideaux/" target="_blank" rel="noopener">Instagram</a> pour des inspirations quotidiennes et des conseils personnalisés !</p>
<p>Contactez-nous directement sur <a href="/cdn-cgi/l/email-protection#0b6864657f6a687f4b666e7879626f6e6a7e73256d79" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="4b2824253f2a283f0b262e3839222f2e2a3e33652d39">[email protected]</span></a> et laissez-vous inspirer.</p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="C6GHF61"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="DFUABM1"><img width="1536" height="1024" class="pagebuilder-mobile-hidden" src="https://cdn4.mesrideaux.fr/wysiwyg/blog.png" alt="Blog mesrideaux" title="" loading="lazy" data-element="desktop_image" data-pb-style="XD2AIPT"><img width="1536" height="1024" class="pagebuilder-mobile-only" src="https://cdn4.mesrideaux.fr/wysiwyg/blog.png" alt="Blog mesrideaux" title="" loading="lazy" data-element="mobile_image" data-pb-style="KIQKOH9"></figure></div></div></div></li></ul></li></ul> </ul>
<button
type="button"
class="absolute close-menu-mobile"
>
<span class="sr-only">Close menu</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" class="feather feather-x">
<line x1="18" y1="6" x2="6" y2="18"/>
<line x1="6" y1="6" x2="18" y2="18"/>
</svg>
</button>
</nav>
</div>
</div>
<div class="hidden lg:flex items-center gap-2 md:gap-1 order-1 lg:order-0 md:-mr-1 search-header-container justify-center">
<button
id="menu-search-icon"
class="btn bg-transparent border-transparent p-1 justify-between"
@click.prevent="toggleSearch"
aria-label="Toggle search form"
aria-haspopup="true"
:aria-expanded="searchOpen"
x-ref="searchButton"
>
<span class="menu-search-text">RECHERCHER ...</span>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</button>
</div>
<div class="flex items-center gap-2 md:gap-1 order-1 lg:order-0 md:-mr-1 right-header-container justify-end">
<div class="avis-verif-header">
<a href="https://www.avis-verifies.com/avis-clients/mesrideaux.fr" target="_blank">
<img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/avis-verifies.png" alt="Avis Verifies" >
<div class="avis-verif-header__content flex items-start justify-center">
<div class="o-stars">
<!-- Utiliser la largeur de .c-content pour le rendu de la note (ratio / 5 à exprimer en %)-->
<div class="c-content lazyload" data-loaded="true"></div>
<div class="c-bkg lazyload" data-loaded="true"></div>
</div>
<strong>4.8/5</strong>
</div>
</a>
</div>
<button
id="menu-search-icon-mobile"
class="btn bg-transparent border-transparent p-1 lg:hidden"
@click.prevent="toggleSearch"
aria-label="Toggle search form"
aria-haspopup="true"
:aria-expanded="searchOpen"
x-ref="searchButton"
>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</button>
<!-- BLOCK header.customer -->
<div
class="relative inline-block customer-menu-icon customer-menu-icon"
x-data="initCustomerMenu"
x-bind="eventListeners"
>
<button
type="button"
id="customer-menu"
class="btn bg-transparent border-transparent p-1"
@click="toggleOpen"
:aria-expanded="open"
aria-label="Mon compte"
aria-haspopup="true"
>
<img
src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/user.svg"
alt=""
aria-hidden="true"
width="16"
height="16"
/>
</button>
<nav
class="z-10 absolute right-0 w-40 sm:w-48 mt-2 lg:mt-3 -me-4 py-2 px-1 rounded-md shadow-lg bg-white overflow-auto"
aria-labelledby="customer-menu"
x-show="open"
x-transition
x-cloak
>
<div x-show="!isLoggedIn" x-cloak>
<a id="customer.header.sign.in.link"
class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
onclick="hyva.setCookie && hyva.setCookie( 'login_redirect', window.location.href, 1 )"
href="/connexion"
title="Se connecter"
>
Se connecter</a>
<a id="customer.header.register.link"
class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
href="/creer-un-compte"
title="Créer un compte"
>
Créer un compte </a>
</div>
<div x-show="isLoggedIn" x-cloak>
<a id="customer.header.dashboard.link"
class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
href="https://www.mesrideaux.fr/customer/account/"
title="Mon compte"
>
Mon compte </a>
<span id="customer.header.sign.out.delimiter"
class="delimiter block border-b border-container w-full my-2"
></span>
<a id="customer.header.sign.out.link"
class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
href="https://www.mesrideaux.fr/customer/account/logout/"
title="Déconnexion"
>
Déconnexion </a>
</div>
</nav>
</div>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
function initCustomerMenu() {
return {
isLoggedIn: false,
...hyva.createBooleanObject('open', false, {
eventListeners: {
['@pageshow.window'](event) {
if (event.persisted) {
this.setOpenFalse()
}
},
['@keyup.escape']() {
this.setOpenFalse()
},
['@click.outside']() {
this.setOpenFalse()
},
['@private-content-loaded.window'](event) {
const data = event.detail.data;
this.isLoggedIn = !!(data.customer && data.customer.firstname);
}
}
})
}
}
window.addEventListener('alpine:init', () => Alpine.data('initCustomerMenu', initCustomerMenu), {once: true})
</script>
<!-- /BLOCK header.customer -->
<div class="customer-menu-icon">
<button
id="menu-cart-icon"
type="button"
class="relative btn bg-transparent border-transparent p-1"
x-ref="cartButton"
:aria-label="cartAriaLabel"
@click="toggleCart"
:aria-expanded="isCartOpen"
aria-haspopup="dialog"
>
<img
src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/cart.svg"
alt=""
aria-hidden="true"
width="20"
height="20"
/>
<span
x-text="summaryCount"
x-show="summaryCount"
x-cloak
class="absolute -top-1.5 -right-1.5 px-2 py-1 rounded-full bg-primary text-on-primary text-xs font-semibold leading-none text-center uppercase tabular-nums"
aria-hidden="true"
></span>
</button>
</div>
</div>
</div>
<div
id="search-content"
class="absolute z-10 w-full border-t shadow-sm bg-white border-gray-100"
x-cloak
x-show="searchOpen"
@click.outside="searchClose"
@keydown.escape="searchEscape"
>
<script>
'use strict';
function initMiniSearch() {
return {
minSearchLength: 3,
suggestions: [],
suggest() {
const search = this.$refs.searchInput;
if (search.value.length >= this.minSearchLength) {
search.setCustomValidity('');
search.reportValidity();
this.fetchSuggestions(search.value);
} else {
this.suggestions = [];
}
},
fetchSuggestions(term) {
fetch(
window.BASE_URL + 'search/ajax/suggest?' + new URLSearchParams({q: term}),
{
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
}
)
.then(response => response.json())
.then(result => this.suggestions = result);
},
search(term) {
const search = this.$refs.searchInput;
term = term || search.value;
if (term.length < this.minSearchLength) {
search.setCustomValidity('Longueur\u0020minimale\u0020de\u0020requ\u00EAte\u0020recherche\u00203');
search.reportValidity();
} else {
search.setCustomValidity('');
search.value = term;
this.$refs.form.submit();
}
},
focusElement(element) {
if (element && element.nodeName === "DIV") {
element.focus();
return true;
} else {
return false;
}
}
}
}
</script>
<div class="container py-2 mx-auto text-black" x-data="initMiniSearch()">
<search title="Magasin" role="search">
<form
id="search_mini_form"
class="form minisearch flex"
action="https://www.mesrideaux.fr/catalogsearch/result/"
method="get"
@submit.prevent="search()"
x-ref="form"
>
<label class="sr-only" for="search">
Chercher </label>
<input
id="search"
x-ref="searchInput"
type="search"
autocomplete="off"
name="q"
value=""
placeholder="Rechercher dans tout le magasin..."
maxlength="128"
class="form-input w-full rounded-e-none"
@search-open.window.debounce.10="$el.focus(); $el.select()"
@focus.once="suggest"
@input.debounce.300="suggest"
@keydown.arrow-down.prevent="focusElement($root.querySelector('[tabindex]'))"
>
<button
type="submit"
class="btn btn-primary p-2.5 rounded-s-none shrink-0 outline-offset-0"
title="Chercher"
aria-label="Chercher"
>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg>
</button>
</form>
</search>
<template x-if="suggestions.length > 0">
<nav
aria-label="Search Suggestions"
class="flex flex-col mt-1 text-grey-800 gap-1"
>
<template x-for="suggestion in suggestions">
<button
type="button"
class="flex justify-between p-2 bg-white even:bg-gray-50 border border-gray-300 hover:bg-gray-100"
@click="search(suggestion.title)"
@keydown.enter="search(suggestion.title)"
@keydown.arrow-up.prevent="focusElement($event.target.previousElementSibling) || $refs.searchInput.focus()"
@keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)"
>
<span x-text="suggestion.title"></span>
<span x-text="suggestion.num_results"></span>
</button>
</template>
</nav>
</template>
</div>
</div>
<script>
// Procédure JS simple
function initDesktopMenu() {
const menuItems = document.querySelectorAll(".menu-desktop nav > ul > li");
function closeAll() {
document.querySelectorAll(".menu-desktop .submenu").forEach(sub => {
sub.classList.remove("active");
});
}
menuItems.forEach(item => {
const submenu = item.querySelector(".menu-desktop .submenu");
if (submenu) {
item.addEventListener("mouseenter", () => {
closeAll();
submenu.classList.add("active");
});
item.addEventListener("mouseleave", () => {
submenu.classList.remove("active");
});
}
});
}
// Appelée une seule fois quand Alpine est initialisé
window.addEventListener('alpine:init', () => {
initDesktopMenu();
}, { once: true });
</script>
<div class="hidden lg:flex z-20 navigation lg:px-0 menu-desktop h-full items-center">
<nav
class="w-full h-full"
aria-label="Main menu"
>
<ul class="flex items-center flex-wrap py-0 h-full justify-center no-wrap">
<li class="level0 parent first level-top">
<a
href="https://www.mesrideaux.fr/rideaux.html"
class="main-menu__link"
data-menu="menu-1">
Rideaux</a>
<ul class="level0 submenu"><li class="level1 column-simple w-25 first"><a
href="https://www.mesrideaux.fr/rideau-taffetas-moire.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-84"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-thevenon-taffetas-moire-beige-gros-plan_2.webp"
alt="Rideau Taffetas Moiré alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Taffetas Moiré</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/rideau-kimono-flowers.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-339"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-kimono-flowers-fond-rouge-gros-plan_1.webp"
alt="Rideau Kimono Flowers alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Kimono Flowers</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/rideau-velours-texture-studio.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-350"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-velours-texture-studio-blanc-casse-gros-plan_2.webp"
alt="Rideau Velours Texture Studio alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Velours Texture Studio</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/tissu-scopello.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-351"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/r/i/rideau-scopello-granito-photo-tissu_4.webp"
alt="Rideau Scopello alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Rideau Scopello</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="/stores-bateaux.html"
data-menu="menu-2" class="main-menu__link" >
Stores </a>
<ul class="level0 submenu"><li class="level1 column-simple w-25  first"><a
href="https://www.mesrideaux.fr/store-bateau-amara-aquaclean-32637.html"
class="snowdog-menu-link column-simple w-25  product-menu submenu-with-image w-full text-center"
data-menu="menu-342"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-casal-amara-aquaclean-argent-gros-plan_3.webp"
alt="STORE BATEAU AMARA AQUACLEAN alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">STORE BATEAU AMARA AQUACLEAN</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/store-bateau-suzie.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-343"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-thevenon-suzie-vert-fond-vanille-gros-plan_1.webp"
alt="Store bateau Suzie alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Store bateau Suzie</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/store-bateau-samani.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-352"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-gaston-y-daniela-samani-beige-et-bleu-gros-plan_1.webp"
alt=" alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Store bateau Samani</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/store-bateau-scopello.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-353"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-luciano-marcato-scopello-navy-gros-plan_1.webp"
alt="Store bateau Scopello alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Store bateau Scopello</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="/coussins.html"
data-menu="menu-234" class="main-menu__link" >
Coussins </a>
<ul class="level0 submenu"><li class="level1 column-simple w-25 first"><a
href="https://www.mesrideaux.fr/coussin-osier.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-344"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-lelievre-osier-pavot-gros-plan_1.webp"
alt="Coussin Osier alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Coussin Osier</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/coussin-sake.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-345"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-sake-taupe-gros-plan_1.webp"
alt="Coussin Sake alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Coussin Sake</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/coussin-poissons-coffre.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-354"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-thevenon-poissons-coffre-fond-marine-sur-lin-gros-plan_1.webp"
alt="COUSSIN POISSONS COFFRE alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">COUSSIN POISSONS COFFRE</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/coussin-french-ikat.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-355"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-thevenon-french-ikat-indigo-outdoor-gros-plan_1.webp"
alt="COUSSIN FRENCH IKAT alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">COUSSIN FRENCH IKAT</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="/coussins-banquette.html"
data-menu="menu-233" class="main-menu__link" >
Banquettes </a>
<ul class="level0 submenu"><li class="level1 column-simple submenu-with-image w-25  product-menu first"><a
href="https://www.mesrideaux.fr/banquette-together-cool-clean.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-346"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-thevenon-together-cool-clean-biscuit-gros-plan_1.webp"
alt="BANQUETTE TOGETHER COOL CLEAN alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">BANQUETTE TOGETHER COOL CLEAN</span>
</a>
</li><li class="level1 column-simple submenu-with-image w-25  product-menu"><a
href="https://www.mesrideaux.fr/banquette-lempicka.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-347"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-casal-lempicka-jour-imperial-gros-plan.webp"
alt="Coussin Sake alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Banquette Lempicka</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/banquette-amara-aquaclean.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-356"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-casal-amara-aquaclean-canard-gros-plan_1.webp"
alt="BANQUETTE AMARA AQUACLEAN alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">BANQUETTE AMARA AQUACLEAN</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/banquette-blues-jacquard-bronze"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-357"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-thevenon-blues-jacquard-bronze-gros-plan.webp"
alt="BANQUETTE BLUES JACQUARD BRONZE alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">BANQUETTE BLUES JACQUARD BRONZE</span>
</a>
</li></ul></li><li class="level0 parent level-top">
<a
href="https://www.mesrideaux.fr/tissus.html"
class="main-menu__link"
data-menu="menu-8">
Tissus</a>
<ul class="level0 submenu"><li class="level1 column-simple submenu-with-image w-25  product-menu first"><a
href="https://www.mesrideaux.fr/tissu-muse.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-348"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-thevenon-muse-fond-bleu-jean-photo-tissu_1.webp"
alt="Tissu Muse alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Tissu Muse</span>
</a>
</li><li class="level1 column-simple submenu-with-image w-25  product-menu"><a
href="https://www.mesrideaux.fr/tissu-timeline.html"
class="snowdog-menu-link column-simple submenu-with-image w-25  product-menu product-menu submenu-with-image w-full text-center"
data-menu="menu-349"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/s/t/store-bateau-thevenon-timeline-fond-abricot-photo-tissu.webp"
alt="TISSU AU METRE HANA BOIS DE ROSE alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">TISSU TIMELINE</span>
</a>
</li><li class="level1 column-simple w-25"><a
href="https://www.mesrideaux.fr/tissu-sake.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-358"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/b/a/banquette-casal-sake-ambre-photo-tissu_2.webp"
alt="Tissu Sake alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Tissu Sake</span>
</a>
</li><li class="level1 column-simple w-25 last"><a
href="https://www.mesrideaux.fr/tissu-sillage.html"
class="snowdog-menu-link column-simple w-25 product-menu submenu-with-image w-full text-center"
data-menu="menu-359"
>
<img src="https://cdn4.mesrideaux.fr/snowdog_menu/images/300x300/c/o/coussin-casal-sillage-eau-claire-photo-tissu_3.webp"
alt="Tissu Sillage alt1"
loading="lazy"
width="300"
height="300"
class="mx-auto"
/>
<span class="product-menu-title">Tissu Sillage</span>
</a>
</li></ul></li><li class="level0 parent last level-top">
<a
href="/blog/"
data-menu="menu-10" class="main-menu__link" target="_blank" rel="noopener" >
Blog </a>
<ul class="level0 submenu"><li class="level1 blog-menu first last"><style>#html-body [data-pb-style=W2L5VRG]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=JI2ELJW]{display:flex;width:100%}#html-body [data-pb-style=JSPTWRL]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:75%;align-self:stretch}#html-body [data-pb-style=XMNY19H]{display:inline-block}#html-body [data-pb-style=REMAYEC]{text-align:center}#html-body [data-pb-style=C6GHF61]{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=DFUABM1]{border-style:none}#html-body [data-pb-style=KIQKOH9],#html-body [data-pb-style=XD2AIPT]{max-width:100%;height:auto}@media only screen and (max-width: 767px) { #html-body [data-pb-style=DFUABM1]{border-style:none} }</style><div class="pagebuilder-column-group container" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-background-lazy-load="false" data-element="main" data-pb-style="W2L5VRG"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="JI2ELJW"><div class="pagebuilder-column menu-blog-left" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="false" data-element="main" data-pb-style="JSPTWRL"><div data-content-type="text" data-appearance="default" data-element="main"><p>Découvrez les dernières tendances et les meilleures astuces déco ! Pour en savoir plus, rendez-vous sur notre blog <strong data-start="115" data-end="132">MesRideaux.fr</strong>.<br data-start="133" data-end="136"></p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="XMNY19H"><a class="pagebuilder-button-primary" href="/blog/" target="_blank" data-link-type="default" data-element="link" data-pb-style="REMAYEC"><span data-element="link_text">Explorez dès maintenant !</span></a></div></div><div data-content-type="text" data-appearance="default" data-element="main"><p> </p>
<p>Vous avez des questions ou souhaitez échanger des idées déco ? Retrouvez-nous sur <a title="trouvez-nous sur instagram" href="https://www.instagram.com/mesrideaux/" target="_blank" rel="noopener">Instagram</a> pour des inspirations quotidiennes et des conseils personnalisés !</p>
<p>Contactez-nous directement sur <a href="/cdn-cgi/l/email-protection#97f4f8f9e3f6f4e3d7faf2e4e5fef3f2f6e2efb9f1e5" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="accfc3c2d8cdcfd8ecc1c9dfdec5c8c9cdd9d482cade">[email protected]</span></a> et laissez-vous inspirer.</p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="C6GHF61"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="DFUABM1"><img width="1536" height="1024" class="pagebuilder-mobile-hidden" src="https://cdn4.mesrideaux.fr/wysiwyg/blog.png" alt="Blog mesrideaux" title="" loading="lazy" data-element="desktop_image" data-pb-style="XD2AIPT"><img width="1536" height="1024" class="pagebuilder-mobile-only" src="https://cdn4.mesrideaux.fr/wysiwyg/blog.png" alt="Blog mesrideaux" title="" loading="lazy" data-element="mobile_image" data-pb-style="KIQKOH9"></figure></div></div></div></li></ul></li> </ul>
</nav>
</div>
<!--Cart Drawer-->
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
function initCartDrawer() {
return {
open: false,
isLoading: false,
cart: {},
maxItemsToDisplay: 10,
itemsCount: 0,
showSku: false,
autocompleteNumber: 100,
init() {
if (document.prerendering) {
document.addEventListener("prerenderingchange", () => {
window.dispatchEvent(
new CustomEvent('reload-customer-section-data')
);
}, { once: true });
}
},
showDetails(item) {
return item && item.options && item.options.length || this.showSku;
},
isDesktopViewport() {
return window.innerWidth >= 768;
},
initItemDetailsShown(item) {
if (item.detailsShown === undefined) {
item.detailsShown = this.isDesktopViewport();
}
},
cartIsEmpty() {
return this.itemsCount === 0
},
getData(data) {
if (!data) {
data = this.$event?.detail?.data;
}
if (data?.cart) {
this.cart = data.cart;
this.itemsCount = data.cart.items && data.cart.items.length || 0;
this.setCartItems();
}
this.isLoading = false;
},
initCartDrawerSuggestions(host) {
if (!host) {
return;
}
this.$nextTick(() => {
if (typeof jQuery === 'undefined' || typeof jQuery.fn?.slick !== 'function') {
return;
}
const $list = jQuery(host).find('.cart-drawer-ventes-add-suggestions .product-suggestions__list');
if (!$list.length) {
return;
}
if ($list.hasClass('slick-initialized')) {
$list.slick('setPosition');
return;
}
$list.slick({
slidesToShow: 2,
slidesToScroll: 1,
dots: false,
arrows: true,
infinite: false,
nextArrow: '<button class="btn btn-secondary p-2 slick-arrow-next" aria-label="Next Slide" data-next=""><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" class="rtl:-rotate-180" aria-hidden="true"><path d="M5 12h14M12 5l7 7-7 7"></path></svg></button>',
prevArrow: '<button class="btn btn-secondary p-2 slick-arrow-prev" aria-label="Previous Slide" data-prev=""><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" class="rtl:-rotate-180" aria-hidden="true"><path d="m12 19-7-7 7-7M19 12H5"></path></svg></button>',
responsive: [
{
breakpoint: 768,
settings: {
slidesToShow: 1,
arrows: false,
dots: true
}
}
]
});
});
},
refreshCartDrawerSuggestions() {
const host = this.$refs.cartDrawerSuggestionsHost;
if (host && this.cart.ventes_add_suggestions_html) {
this.initCartDrawerSuggestions(host);
}
},
cartItems: [],
getItemCountTitle() {
return hyva.strf('\u00250\u0020of\u0020\u00251\u0020products\u0020in\u0020cart\u0020displayed', this.maxItemsToDisplay, this.itemsCount)
},
shouldShowItemCount() {
return this.maxItemsToDisplay && this.maxItemsToDisplay < this.itemsCount;
},
setCartItems() {
const isDesktop = this.isDesktopViewport();
let items = this.cart.items && [...this.cart.items].sort((a, b) => b.item_id - a.item_id) || [];
if (this.maxItemsToDisplay > 0) {
items = items.slice(0, parseInt(this.maxItemsToDisplay, 10));
}
this.cartItems = items.map((item) => ({
...item,
detailsShown: item.detailsShown !== undefined ? item.detailsShown : isDesktop,
}));
},
updateItemQty(event) {
const form = event.target;
this.isLoading = true;
hyvaAjaxFormMinicart({ form, redirect: false }, () => {
this.isLoading = false;
});
},
deleteItemFromCart() {
const itemId = this.item.item_id;
const formKey = hyva.getFormKey();
this.isLoading = true;
hyvaAjaxFormMinicart({
url: BASE_URL + 'checkout/sidebar/removeItem/',
body: 'form_key=' + formKey + '&item_id=' + itemId,
message: 'Vous\u0020avez\u0020supprim\u00E9\u0020l\u0027\u00E9l\u00E9ment.'
}, () => {
this.isLoading = false
});
},
toggleCartDrawer(event) {
const wasOpen = this.open;
this.open = event.detail?.isOpen ?? !this.open;
if (this.open && !wasOpen) {
this.refreshCartDrawerSuggestions();
}
},
openCartDrawer() {
this.open = true;
this.refreshCartDrawerSuggestions();
},
closeCartDrawer() {
this.open = false;
},
getSectionDataExtraActions() {
if (!this.cart.extra_actions) {
return '';
}
const contentNode = document.createElement('div');
contentNode.innerHTML = this.cart.extra_actions;
hyva.activateScripts(contentNode);
return contentNode.innerHTML;
},
productIsVisibleInSite() {
return this.item.product_has_url && this.item.is_visible_in_site_visibility
},
productIsNotVisibleInSite() {
return !this.productIsVisibleInSite()
},
productIsNotGroupedAndVisibleInSite() {
return this.item.product_type !== 'grouped' && this.item.is_visible_in_site_visibility
},
productAriaLabel() {
return hyva.strf(this.$el.dataset.ariaLabel, this.item.product_name)
},
proceedToCheckout() {
this.closeCartDrawer()
this.$dispatch(
'toggle-authentication',
{
url: 'https://www.mesrideaux.fr/checkout/'
}
)
},
setItemMessage(itemId, message) {
const items = this.cartItems;
items.forEach((item) => {
if (item.item_id === itemId) {
item.message = message;
}
});
},
cartListeners: {
['@private-content-loaded.window'](event) {
this.getData(event.detail.data);
},
['@toggle-cart.window'](event) {
this.toggleCartDrawer(event);
},
['@minicart-error-message.window'](event) {
if (!event.detail) return;
const { itemId, message } = event.detail;
this.setItemMessage(itemId, message);
},
["@pageshow.window"](event) {
if (event.persisted) {
this.open = false;
window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
}
}
}
}
}
window.addEventListener('alpine:init', () => {
Alpine.data('initCartDrawer', initCartDrawer);
}, { once: true })
async function hyvaAjaxFormMinicart(
{
form = null,
url = '',
body = '',
redirect = 'default',
message = '',
} = {},
callback = () => {}
) {
const formData = body ? body : (form ? new FormData(form) : '');
const postUrl = url ? url : (form ? form.action : '');
if (!formData || !postUrl) {
console.warn('You must provide the form or formData and postUrl!');
return;
}
const formUenc = hyva.getUenc();
const itemId = body ? new URLSearchParams(body).get('item_id') : formData.get('item_id');
let bodyUrl = new URLSearchParams(formData);
bodyUrl.append('uenc', formUenc);
try {
const response = await fetch(postUrl, {
method: 'POST',
body: bodyUrl.toString(),
mode: 'cors',
credentials: 'include',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest'
}
});
if (!response.ok) {
return form.submit();
}
if (redirect === 'default' && response.redirected) {
return window.location.href = response.url;
} else if (redirect !== 'default' && redirect !== false) {
return window.location.href = redirect;
}
const responseBody = await response.json();
if (!responseBody.success) {
throw responseBody.error_message;
}
window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
} catch (error) {
window.dispatchEvent(new CustomEvent('minicart-error-message', { detail: { itemId, message: error } }));
} finally {
callback();
}
}
</script>
<dialog
id="cart-drawer"
aria-labelledby="cart-drawer-title"
class="w-[480px] w-full h-full max-h-full me-0 open:flex flex-col transition ease-out duration-300 motion-reduce:duration-0 rounded-e-none p-4"
x-data="initCartDrawer"
x-bind="cartListeners"
x-show="open"
x-htmldialog="closeCartDrawer"
closeby="any"
x-transition:enter="transition ease-in-out duration-500"
x-transition:enter-start="translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="translate-x-full"
>
<div class="flex gap-2 justify-between">
<p id="cart-drawer-title" class="text-2xl">
Mon panier <span
class="items-total text-xs"
x-show="shouldShowItemCount"
x-text="getItemCountTitle"
></span>
</p>
<button
type="button"
class="btn bg-transparent border-transparent p-2 pt-0 items-start"
@click="closeCartDrawer"
aria-label="Close minicart"
>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12"/></svg>
</button>
</div>
<template x-if="cartIsEmpty">
<div class="grow grid place-items-center">
<div class="text-center">
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="120" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" class="inline-block text-fg/30 max-w-full h-auto cart-drawer-empty-icon" aria-hidden="true"><path d="m15 11-1 9M19 11l-4-7M2 11h20M3.5 11l1.6 7.4a2 2 0 0 0 2 1.6h9.8a2 2 0 0 0 2-1.6l1.7-7.4M4.5 15.5h15M5 11l4-7M9 11l1 9"/></svg>
<p class="mt-10 text-xl">
<strong>Votre panier est vide</strong>
</p>
</div>
</div>
</template>
<template x-if="itemsCount">
<div class="grow items-list-cart-drawer min-h-0 flex flex-col overflow-y-auto overscroll-y-contain mask-overflow mask-dir-y">
<ul class="flex-1 flex flex-col">
<template x-for="item in cartItems" :key="item.item_id">
<li class="flex flex-wrap gap-4 md:gap-6 items-start py-4 px-1">
<div class="flex gap-4">
<template x-if="productIsVisibleInSite">
<a
class="block shrink-0 max-w-[25%]"
:href="item.product_url"
data-aria-label="Product "%0""
:title="item.product_name"
>
<img
class="radius-img"
:src="item.product_image.src"
:width="item.product_image.width"
:height="item.product_image.height"
loading="lazy"
:alt="item.product_name"
>
</a>
</template>
<template x-if="productIsNotVisibleInSite">
<div class="block shrink-0 max-w-[25%]">
<img
class="radius-img"
:src="item.product_image.src"
:width="item.product_image.width"
:height="item.product_image.height"
loading="lazy"
:alt="item.product_name"
/>
</div>
</template>
<div class="grow space-y-4">
<div class="flex gap-1 justify-between items-start flex-wrap">
<p class="item-cart-drawer-title w-full">
<span x-html="item.qty"></span> x <strong x-html="item.product_name"></strong>
</p>
<span class="price-box w-full" x-html="item.product_price"></span>
</div>
</div>
</div>
<!-- Afficher détail (mobile only) Alpine toggle, always open on desktop -->
<div
class="w-full"
x-init="initItemDetailsShown(item)"
@resize.window="if (isDesktopViewport()) { item.detailsShown = true }"
>
<template x-if="showDetails(item)">
<div>
<!-- Only visible on mobile < 768px -->
<button
type="button"
class="btn btn-primary px-3 py-1 mb-2 block md:hidden"
@click="item.detailsShown = !item.detailsShown"
x-text="item.detailsShown ? 'Masquer la configuration' : 'Afficher la configuration'"
:aria-expanded="item.detailsShown ? 'true' : 'false'"
></button>
<div
x-show="item.detailsShown"
x-transition
class="w-full"
>
<dl class="table text-sm w-full">
<template x-if="showSku">
<div class="table-row">
<dt class="table-cell config-label font-normal min-w-16 pe-2 pb-2">
Réf </dt>
<dd class="table-cell font-bold pb-2" x-html="item.product_sku"></dd>
</div>
</template>
<template x-for="option in item.options">
<div class="table-row">
<dt
class="table-cell config-label font-normal min-w-16 pe-2 pb-2"
x-text="option.label"
></dt>
<dd class="table-cell font-bold pb-2" x-html="option.value"></dd>
</div>
</template>
</dl>
</div>
</div>
</template>
</div>
<div class="flex flex-wrap gap-2 justify-end items-center w-full">
<div class="inline-flex flex-wrap items-center gap-1">
<a
:href="item.configure_url"
x-show="productIsNotGroupedAndVisibleInSite"
class="btn p-2"
data-aria-label="Edit product "%0""
:aria-label="productAriaLabel"
>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497zM15 5l4 4"/></svg>
</a>
<button
type="button"
class="btn p-2"
@click="deleteItemFromCart"
data-aria-label="Remove product "%0" from cart"
:aria-label="productAriaLabel"
>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/></svg>
</button>
</div>
<template x-if="item.message">
<div class="message error" x-text="item.message"></div>
</template>
</div>
</li>
</template>
</ul>
<div
x-ref="cartDrawerSuggestionsHost"
class="cart-drawer-ventes-add-suggestions-host shrink-0"
x-show="itemsCount && cart.ventes_add_suggestions_html"
x-html="cart.ventes_add_suggestions_html"
x-effect="cart.ventes_add_suggestions_html && initCartDrawerSuggestions($el)"
></div>
</div>
</template>
<template x-if="itemsCount">
<div class="pt-4">
<dl class="flex gap-2 justify-between items-center text-sm font-bold">
<dt>Sous-total</dt>
<dd x-html="cart.subtotal"></dd>
</dl>
<div class="flex flex-col gap-y-4 mt-8">
<a
@click.prevent.stop="proceedToCheckout"
href="https://www.mesrideaux.fr/checkout/"
class="btn btn-primary"
>
Commander </a>
<a
href="https://www.mesrideaux.fr/checkout/cart/"
class="btn btn-secondary"
>
Afficher et modifier le panier </a>
<div x-html="getSectionDataExtraActions"></div>
</div>
</div>
</template>
<template x-if="cartIsEmpty">
<div class="flex flex-col">
<button
type="button"
@click="closeCartDrawer"
class="btn btn-primary"
>Continuez vos achats</button>
</div>
</template>
<div
class="z-50 fixed inset-0 flex justify-center items-center bg-white/70 select-none"
x-show="isLoading"
x-cloak
x-transition.opacity.duration.200ms
>
<div class="flex items-center">
<svg xmlns="http://www.w3.org/2000/svg" width="54" height="54" viewbox="0 0 24 24" stroke="currentColor" fill="none" stroke-width="2" stroke-linecap="round" class="animate-spin" aria-hidden="true">
<circle style="opacity: .3;" cx="12" cy="12" r="10"/>
<path fill="none" stroke-width="2" d="M12,2 a10,10 0 0,1 10,10"/>
</svg>
<div class="ml-10 text-xl">
Chargement... </div>
</div>
</div>
</dialog>
<!--Authentication Pop-Up-->
<!-- BLOCK authentication-popup --><script>
function initAuthentication() {
return {
open: false,
close() {
this.open = false;
},
forceAuthentication: false,
checkoutUrl: 'https://www.mesrideaux.fr/checkout/index/',
errors: 0,
hasCaptchaToken: 0,
displayErrorMessage: false,
errorMessages: [],
setErrorMessages(message) {
this.errorMessages = [message];
this.displayErrorMessage = true;
},
submitForm() {
// Do not rename $form, the variable is expected to be declared in the recaptcha output
const $form = document.querySelector('#login-form');
if (this.errors === 0) {
this.dispatchLoginRequest($form);
}
},
onPrivateContentLoaded() {
const data = this.$event.detail.data;
const isLoggedIn = data.customer && data.customer.firstname;
if (data.cart && !isLoggedIn) {
this.forceAuthentication = !data.cart.isGuestCheckoutAllowed;
}
},
redirectIfAuthenticated() {
const event = this.$event;
this.open = this.forceAuthentication;
if (event.detail && event.detail.url) {
this.checkoutUrl = event.detail.url;
}
if (!this.forceAuthentication) {
window.location.href = this.checkoutUrl;
}
},
resetErrors() {
this.errors = 0;
},
dispatchLoginRequest(form) {
this.isLoading = true;
const username = this.$refs['customer-email'].value;
const password = this.$refs['customer-password'].value;
const formKey = hyva.getFormKey();
const bodyFields = {
'username': username,
'password': password,
'formKey': formKey
};
const fieldName = '';
const recaptchaField = fieldName && form[fieldName];
if (recaptchaField) {
bodyFields[fieldName] = recaptchaField.value;
}
fetch('https://www.mesrideaux.fr/customer/ajax/login/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify(bodyFields)
}
).then(response => {
return response.json()
}
).then(data => {
this.isLoading = false;
if (data.errors) {
this.setErrorMessages(data.message);
this.errors = 1;
this.hasCaptchaToken = 0;
} else {
window.location.href = this.checkoutUrl;
}
});
},
eventListeners: {
['@private-content-loaded.window']() {
this.onPrivateContentLoaded();
},
['@toggle-authentication.window']() {
this.redirectIfAuthenticated();
},
['@pageshow.window'](event) {
if (event.persisted) {
this.close();
};
}
}
}
}
window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true})
</script>
<dialog
id="authentication-popup"
aria-labelledby="authentication-popup-title"
class="open:flex flex-col transition ease-out duration-300 motion-reduce:duration-0 p-0"
x-data="initAuthentication"
x-bind="eventListeners"
x-show="open"
x-htmldialog="close"
closeby="any"
x-transition
>
<div class="pt-8 px-8">
<div class="flex gap-2 justify-between items-center">
<p id="authentication-popup-title" class="text-xl">
<strong>Connexion client</strong>
</p>
<button
type="button"
class="btn bg-transparent border-transparent p-2"
@click="close"
aria-label="Fermer le panneau"
>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12"/></svg>
</button>
</div>
<div class="message error" x-show="errors" x-cloak>
<template x-for="(message, index) in errorMessages" :key="index">
<div>
<template x-if="message">
<span x-html="message"></span>
</template>
</div>
</template>
</div>
</div>
<div class="block-customer-login p-8">
<p id="authenticate-customer-login" class="text-lg mb-2">
<strong>Commandez en utilisant votre compte</strong>
</p>
<form
id="login-form"
class="form form-login"
method="post"
@submit.prevent="submitForm"
>
<input name="context" type="hidden" value="checkout">
<div class="flex flex-col gap-4">
<div class="field email required">
<label for="form-login-username">
<span>Adresse mail</span>
</label>
<div class="control">
<input
id="form-login-username"
name="username"
type="email"
class="form-input w-full"
required
autocomplete="off"
x-ref="customer-email"
@change="resetErrors"
>
</div>
</div>
<div class="field password required">
<label for="form-login-password">
<span>Mot de passe</span>
</label>
<div class="control">
<input
id="form-login-password"
name="password"
type="password"
class="form-input w-full"
required
autocomplete="off"
x-ref="customer-password"
@change="resetErrors"
>
</div>
</div>
</div>
<div class="actions-toolbar">
<button
type="submit"
class="btn btn-primary"
>
Se connecter </button>
<a
href="https://www.mesrideaux.fr/customer/account/forgotpassword/"
class="underline hover:no-underline"
>
Mot de passe oublié ? </a>
</div>
</form>
</div>
<div class="block-new-customer p-8 border-t border-gray-300">
<p id="authenticate-new-customer" class="text-lg mb-2">
<strong>Commander en tant que nouveau client</strong>
</p>
<div class="block-content">
<p class="mb-1">
Créer un compte a de nombreux avantages : </p>
<ul class="list-disc pl-5">
<li> Voir la commande et suivre l'expédition</li>
<li> Suivre l'historique des commandes</li>
<li> Commander plus rapidement</li>
</ul>
<div class="actions-toolbar mt-6 mb-2">
<a href="https://www.mesrideaux.fr/customer/account/create/"
class="inline-flex btn btn-primary">
Créer un compte </a>
</div>
</div>
</div>
</dialog>
<!-- /BLOCK authentication-popup -->
</div>
</header><div class="top-container">
<nav class="breadcrumbs shadow-sm hidden lg:block" aria-label="Breadcrumb">
<div class="container">
<ol class="items list-reset py-4 rounded flex flex-wrap text-grey text-sm">
<li class="item flex home">
<a
href="https://www.mesrideaux.fr/"
aria-label="Aller à la page d'accueil"
>Accueil</a>
</li>
<li class="item flex category20">
<span aria-hidden="true" class="separator text-fg-secondary px-2">/</span>
<a
href="https://www.mesrideaux.fr/rideaux.html"
>Rideaux</a>
</li>
<li class="item flex product">
<span aria-hidden="true" class="separator text-fg-secondary px-2">/</span>
<a
href="https://www.mesrideaux.fr/rideau-majorelle-sur-velours.html"
class="text-fg-secondary"
aria-current="page"
>RIDEAU MAJORELLE SUR VELOURS</a>
</li>
</ol>
</div>
</nav>
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/www.mesrideaux.fr\/","name":"Accueil"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/www.mesrideaux.fr\/rideaux.html","name":"Rideaux"}},{"@type":"ListItem","position":3,"item":{"@id":"https:\/\/www.mesrideaux.fr\/rideau-majorelle-sur-velours.html","name":"RIDEAU MAJORELLE SUR VELOURS"}}] }
</script>
</div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div>
<div class="page messages"><script>
function initMessages() {
"use strict";
return {
messages: window.mageMessages || [],
isEmpty() {
return this.messages.reduce(
function (isEmpty, message) {
return isEmpty && message === undefined
}, true
)
},
hasMessages() {
return !this.isEmpty();
},
hasMessage() {
return !!this.message;
},
removeMessage() {
this.messages[this.index] = undefined;
},
addMessages(messages, hideAfter) {
messages.map((message) => {
if (!message.text || !message.text.trim()) return;
this.messages = this.messages.concat(message);
if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) {
hideAfter = window.defaultSuccessMessageTimeout;
}
if (hideAfter) {
this.setHideTimeOut(this.messages.length -1, hideAfter);
}
});
},
setHideTimeOut(messageIndex, hideAfter) {
setTimeout((messageIndex) => {
this.messages[messageIndex] = undefined;
}, hideAfter, messageIndex);
},
eventListeners: {
['@messages-loaded.window'](event) {
this.addMessages(event.detail.messages, event.detail.hideAfter)
},
['@private-content-loaded.window'](event) {
const data = event.detail.data;
if (
data.messages &&
data.messages.messages &&
data.messages.messages.length
) {
this.addMessages(data.messages.messages);
}
},
['@clear-messages.window']() {
this.messages = [];
},
['@pageshow.window'](event) {
if (event.persisted) {
this.messages = [];
};
}
},
getMessageUiId() {
return 'message-' + this.message.type;
}
}
}
window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true})
</script>
<section id="messages"
x-data="initMessages"
x-bind="eventListeners"
role="alert"
>
<template x-if="hasMessages">
<div class="w-full">
<div class="messages container mx-auto py-3">
<template x-for="(message, index) in messages" :key="index">
<div>
<template x-if="hasMessage">
<div class="message"
:class="message.type"
:ui-id="getMessageUiId"
>
<span x-html="message.text"></span>
<button
type="button"
class="text-gray-600 hover:text-black"
aria-label="Close message"
@click.prevent="removeMessage"
>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
</svg>
</button>
</div>
</template>
</div>
</template>
</div>
</div>
</template>
</section>
</div> <div class="container flex flex-col md:flex-row flex-wrap">
<h1 class="page-title text-3xl font-semibold mb-8 text-center md:sr-only"
itemprop=name data-ui-id="page-title-wrapper"
>
RIDEAU MAJORELLE SUR VELOURS </h1>
</div>
<div class="columns"><div class="column main"><div class="product-info-main"><div class="container">
<section
class="columns-infos"
aria-label="Info produit"
>
<div
id="gallery"
x-data="initGallery()"
x-bind="eventListeners"
>
<div
:class="{ 'gallery-fullscreen w-full h-full min-h-0 fixed inset-0 bg-white z-50 flex flex-col mb-0': fullscreen, 'mb-6': !fullscreen }"
class="product-gallery"
:role="fullscreen ? 'dialog' : false"
:aria-modal="fullscreen"
:aria-label="fullscreen ? 'Gallery\u0020modal\u0020fullscreen' : false"
>
<div
class="relative w-full"
:class="fullscreen ? 'flex-1 min-h-0 self-stretch flex flex-col' : 'self-center'"
@touchstart.passive="handleTouchStart"
@touchmove.passive="handleTouchMove"
x-transition:enter="ease-out duration-500"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
>
<div
id="gallery-main"
class="relative"
:class="{ 'flex-1 min-h-0': fullscreen }"
aria-live="polite"
aria-atomic="true"
>
<img
alt="RIDEAU MAJORELLE SUR VELOURS"
title="RIDEAU MAJORELLE SUR VELOURS"
class="object-contain object-center w-full h-auto"
:class="fullscreen ? 'invisible max-h-[75vh]' : 'invisible'"
src="https://cdn4.mesrideaux.fr/catalog/product/cache/207e23213cf636ccdef205098cf3c8a3/r/i/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp"
width="700"
height="700"
itemprop="image"
>
<template x-for="(image, index) in images" :key="index">
<img
:alt="image.caption || 'RIDEAU\u0020MAJORELLE\u0020SUR\u0020VELOURS'"
:title="image.caption || 'RIDEAU\u0020MAJORELLE\u0020SUR\u0020VELOURS'"
class="absolute inset-0 object-contain object-center w-full m-auto"
:class="{ 'max-h-[75vh]': fullscreen }"
width="700"
height="700"
:loading="active !== index ? 'lazy' : 'eager'"
:src="fullscreen ? image.full : image.img"
x-transition.opacity.duration.500ms
x-show="active === index"
>
</template>
<button
type="button"
class="absolute inset-0 w-full outline-offset-2"
aria-label="Click to view image in fullscreen"
x-ref="galleryFullscreenBtn"
x-show="!fullscreen && images[active].type !== 'video'"
x-cloak
@click="openFullscreen()"
@keydown.enter="openFullscreen()"
></button>
<button
type="button"
class="group absolute inset-0 outline-offset-2 grid place-items-center"
aria-label="Play video"
x-show="images[active].type === 'video' && !activeVideoType"
x-cloak
@click="activateVideo()"
@keydown.enter="activateVideo()"
>
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 20 20" fill="currentColor" class="stroke-white/75 fill-black/20 transition ease-in group-hover:scale-110 md:w-24 md:h-24" width="44" height="44" aria-hidden="true">
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z" clip-rule="evenodd"/>
</svg>
</button>
<div class="absolute inset-0 hidden w-full h-full bg-white nonmobile"
:class="{ 'hidden': activeVideoType !== 'youtube' }"
x-transition.opacity.duration.500ms
x-show="images[active].type === 'video' && activeVideoType === 'youtube'"
>
<div id="youtube-player" class="w-full h-full"></div>
</div>
<div class="absolute inset-0 hidden w-full h-full bg-white"
:class="{ 'hidden': activeVideoType !== 'vimeo' }"
x-transition.opacity.duration.500ms
x-show="images[active].type === 'video' && activeVideoType === 'vimeo'"
>
<div id="vimeo-player" class="w-full h-full"></div>
</div>
</div>
</div>
<div @resize.window.debounce="calcPageSize(); $nextTick(() => calcActive())">
<div
id="thumbs"
class="flex items-center gap-4"
:class="{ 'fixed justify-center bottom-0 left-0 right-0': fullscreen, 'mx-6' : fullscreen && !isSlider}"
x-show="images.length > 1"
x-cloak
>
<button
type="button"
aria-label="Précédent"
tabindex="-1"
class="p-2.5 flex items-center justify-center self-stretch text-black outline-none focus:outline-none flex-none"
:class="{ 'opacity-25 pointer-events-none' : isSliderStart, 'hidden' : !isSlider }"
@click="scrollPrevious"
><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
</svg>
</button>
<div class="js_thumbs_slides thumbs-wrapper relative flex flex-nowrap w-full min-w-0 overflow-auto js_slides snap"
x-ref="jsThumbSlides"
@scroll.debounce="calcPageSize(); calcActive(); calcScrollStartEnd()"
>
<template x-for="(image, index) in images" :key="index">
<div class="js_thumbs_slide flex shrink-0 mb-2 mr-2 lg:mr-4 last:mr-0">
<button
type="button"
@click.prevent="setActive(index);"
class="relative block hover:border-primary focus:border-primary"
:class="{'border-primary': active === index}"
>
<span class="sr-only">
View larger image </span>
<img
:src="image.thumb"
:alt="image.caption || 'RIDEAU\u0020MAJORELLE\u0020SUR\u0020VELOURS\u0020thumbnail'"
:title="image.caption || 'RIDEAU\u0020MAJORELLE\u0020SUR\u0020VELOURS\u0020thumbnail'"
width="90"
height="90"
>
<span
class="absolute inset-0 grid place-items-center"
x-show="image.type === 'video'"
>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-white/75 fill-black/20" width="44" height="44" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z"/>
</svg>
</span>
</button>
</div>
</template>
</div>
<button
type="button"
x-show="images.length > 1"
x-cloak
aria-label="Suivant"
tabindex="-1"
class="p-2.5 flex items-center justify-center self-stretch text-black outline-none focus:outline-none flex-none"
:class="{ 'opacity-25 pointer-events-none' : isSliderEnd, 'hidden' : !isSlider }"
@click="scrollNext"
><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
</svg>
</button>
</div>
</div>
<div class="absolute top-0 right-0 pt-4 pr-4">
<button @click="closeFullScreen()"
type="button"
class="hidden text-gray-500 p-3 hover:text-gray-600 focus:text-gray-600 transition ease-in-out duration-150"
:class="{ 'hidden': !fullscreen, 'block': fullscreen }"
aria-label="Close fullscreen"
>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
</svg>
</button>
</div>
</div>
<div class="mb-4 flex flex-wrap gap-2 items-center">
<div class="" title="Commande échantillon">
<button
type="submit"
form="product_addtocart_form"
name="sampleorder"
title="Commande échantillon"
class="flex justify-between btn btn-underline"
id="product-sample-button"
value="sampleorder"
x-on:click="$dispatch('hyva-sample-order', { price: '' })"
>
<svg width="32" height="32" viewbox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="32" height="32" fill="url(#pattern0_2001_1435)"/>
<defs>
<pattern id="pattern0_2001_1435" patterncontentunits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_2001_1435" transform="scale(0.03125)"/>
</pattern>
<image id="image0_2001_1435" width="32" height="32" preserveaspectratio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAuQAAALkB4qdB6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALsSURBVFiFxdZLiFdVHAfwz0ks84VoJpovdKIMbEZGDFwEoeSqQgUFSaJ2Bu0KWvTY9HAxQbXISApBGMMHCG1a1MJFGBriQlGIwEeSRtCAaZOjXhf3XOZ4597//16d9MBvcc75/X7f7znn9zghyzL3czxQXgghhPtCIITwegjhCEZCCJdCCIMhhCX3gkTAt8gqZBhbsiwzHoJp6MXCZM2WEuhP+Ku09t5dAk/FAP5NfP6MHjicLK6JBhPwNm4mezvuEHwBjtfc8Hb4I05OVRhvwJXEYH1L8FWJ/1Su443iCX6Ni/9gdoWTlTEWMlzC5Ibgm0tXXsgQ1qUx8HmyeRAPVzj7LNFZ0AD8/dLzFfIblpV0PYrzidIRzC0pfZjsL+0APAl7at77EB4ZYxMNV+Biovw71sVgXIkzyd67NeBzYmRXgX+DByvtukTrUI3DXXgose3FuQq9G3ir43OVTjFFfVFK5STmR5sXcblC5zJe6BovNdf5FL7CD/gCn2AkOv4e06Pem/GUZfCzeLpRtrTI6efl1WwCJuJreQpfKIEfxpymfkORCk1HCGEWDsTpc/KGdgqPYxCvxRt8IuociDHSE+d78QwWofkNRKJPGi1ce5L1Q3gnmX+a3MgMfJnMJ0njrAX4WvydOLqGHdiJjVFnnrxoTW/stwZsWWT9YwQZMBqEqVxAf7TpT+LhBBa3JmA0DavKaFl+wbxotwFXS/t/YnVjAngMx0pO6grRPklTQp/by3khw3i5KwEsd3s6dSrFA+TZU7q9uThaQ/iDKpsiA2fLC0eh3K0Z9XcI1MnY3+HWqjpt63a8vEu2BHxcQ+JoxeFafUiGMLNh2r6C/ypInEdfSqDNl+zVpvkd7Z819oNbHPalgkDTT+lgG/CERA9OV5C4IS/bNpU2qr7lH9VFcUMSM+RddSQB/w6zCoXdNUEzjK13ClxDZIWkW6ab2+QpeF3++x3EkvECr5Mx7TiEELLy4v84Wv8HxnvcAgz17yw0qX/7AAAAAElFTkSuQmCC"/>
</defs>
</svg>
<span class="lg:block">
Commander un échantillon </span>
</button>
</div>
</div>
</div>
<script>
function initGallery () {
let touchXDown, touchYDown;
return {
"active": 0,
"videoData": {},
"activeVideoType": false,
"autoplayVideo": false,
"loopVideo": false,
"relatedVideos": false,
"vimeoPlayer": null,
"fullscreen": false,
"isSlider": false,
"initialImages": [{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp","caption":"RIDEAU MAJORELLE SUR VELOURS","position":"0","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan_2.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan_2.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan_2.webp","caption":"RIDEAU MAJORELLE SUR VELOURS","position":"1","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu_2.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu_2.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu_2.webp","caption":"RIDEAU MAJORELLE SUR VELOURS","position":"2","isMain":false,"type":"image","videoUrl":null}],
"images": [{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large_2.webp","caption":"RIDEAU MAJORELLE SUR VELOURS","position":"0","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan_2.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan_2.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan_2.webp","caption":"RIDEAU MAJORELLE SUR VELOURS","position":"1","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu_2.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu_2.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu_2.webp","caption":"RIDEAU MAJORELLE SUR VELOURS","position":"2","isMain":false,"type":"image","videoUrl":null}],
"appendOnReceiveImages": false,
"activeSlide": 0,
"isSliderStart": true,
"isSliderEnd": false,
"itemCount": 0,
"pageSize": 4,
"pageFillers": 0,
"focusTrapListener": null,
init() {
this.initActive();
this.$nextTick(() => {
this.calcPageSize();
this.calcScrollStartEnd();
});
this.$watch('fullscreen', open => {
this.$nextTick(() => {
this.scrollLock(open);
window.requestAnimationFrame(() => {
this.calcPageSize()
});
});
})
},
receiveImages(images) {
if (this.appendOnReceiveImages) {
const initialUrls = this.initialImages.map(image => image.full);
const newImages = images.filter(image => ! initialUrls.includes(image.full));
this.images = [].concat(this.initialImages, newImages);
this.setActive(newImages.length ? this.initialImages.length : 0);
} else {
this.images = images;
// Cosuite / options image (emiproOptionImage) is appended last; without this,
// configurable products keep active=0 (appendOnReceiveImages is false for them)
// so the option appears in thumbs but not as the main slide.
let optionImageIndex = -1;
let i;
for (i = 0; i < images.length; i++) {
if (images[i] && images[i].emiproOptionImage) {
optionImageIndex = i;
}
}
if (optionImageIndex !== -1) {
this.setActive(optionImageIndex);
} else {
this.setActive(0);
}
}
this.$nextTick(() => {
this.scrollTo(this.active);
});
this.itemCount = this.images.length;
},
resetGallery() {
this.images = this.initialImages;
this.itemCount = this.images.length;
this.initActive();
this.$nextTick(() => {
this.scrollTo(this.active);
});
},
initActive() {
let active = this.images.findIndex(function(image) {
return image.isMain === true
});
if (active === -1) {
active = 0;
}
this.setActive(active);
},
setActive(index) {
this.active = index;
this.activeVideoType = false;
if (window.youtubePlayer) {
window.youtubePlayer.stopVideo();
}
if (this.vimeoPlayer) {
this.vimeoPlayer.contentWindow.postMessage(JSON.stringify({"method": "pause"}), "*");
}
if (this.images[index].type === 'video' && this.autoplayVideo) {
this.activateVideo();
}
},
activateVideo() {
const videoData = this.getVideoData();
if (!videoData) { return }
this.activeVideoType = videoData.type;
if (videoData.type === "youtube") {
if (!window.youtubePlayer) {
this.initYoutubeAPI(videoData);
} else {
window.youtubePlayer.loadVideoById(videoData.id);
}
} else if (videoData.type === "vimeo") {
this.initVimeoVideo(videoData);
}
},
getVideoData() {
const videoUrl = this.images[this.active] && this.images[this.active].videoUrl;
if (!videoUrl) { return }
let id,
type,
youtubeRegex,
vimeoRegex,
useYoutubeNoCookie = false;
if (videoUrl.match(/youtube\.com|youtu\.be|youtube-nocookie.com/)) {
id = videoUrl.replace(/^\/(embed\/|v\/)?/, '').replace(/\/.*/, '');
type = 'youtube';
youtubeRegex = /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/;
id = videoUrl.match(youtubeRegex)[1];
if (videoUrl.match(/youtube-nocookie.com/)) {
useYoutubeNoCookie = true;
}
} else if (videoUrl.match(/vimeo\.com/)) {
type = 'vimeo';
vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
'?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)'
].join(''));
id = videoUrl.match(vimeoRegex)[3];
}
return id ? {
id: id, type: type, useYoutubeNoCookie: useYoutubeNoCookie
} : false;
},
initYoutubeAPI(videoData) {
if (document.getElementById('loadYoutubeAPI')) {
return;
}
const params = {
"autoplay": true
};
const loadYoutubeAPI = document.createElement('script');
loadYoutubeAPI.src = 'https://www.youtube.com/iframe_api';
loadYoutubeAPI.id = 'loadYoutubeAPI';
const firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(loadYoutubeAPI, firstScriptTag);
const host = (videoData.useYoutubeNoCookie) ?
'https://www.youtube-nocookie.com' :
'https://www.youtube.com';
if (!this.relatedVideos) {
params.rel = 0;
}
const fireYoutubeAPI = document.createElement('script');
fireYoutubeAPI.innerHTML = `function onYouTubeIframeAPIReady() {
window.youtubePlayer = new YT.Player('youtube-player', {
host: '${host}',
videoId: '${videoData.id}',
playerVars: ${JSON.stringify(params)},
});
}`;
firstScriptTag.parentNode.insertBefore(fireYoutubeAPI, firstScriptTag);
},
initVimeoVideo(videoData) {
let additionalParams = '&autoplay=1';
let src = '';
const timestamp = new Date().getTime();
const vimeoContainer = document.getElementById("vimeo-player");
const videoId = videoData.id;
if (!vimeoContainer || !videoId) return;
if (this.loopVideo) {
additionalParams += '&loop=1';
}
src = 'https://player.vimeo.com/video/' +
videoId + '?api=1&player_id=vimeo' +
videoId +
timestamp +
additionalParams;
vimeoContainer.innerHTML =
`<iframe id="${'vimeo' + videoId + timestamp}"
src="${src}"
width="640" height="360"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen
referrerPolicy="origin"
allow="autoplay"
class="object-center w-full h-full object-fit"
></iframe>`;
this.vimeoPlayer = vimeoContainer.childNodes[0];
},
getSlider() {
return this.$refs.jsThumbSlides;
},
calcPageSize() {
const slider = this.getSlider();
if (slider) {
const slideEl = slider.querySelector('.js_thumbs_slide');
if (!slideEl) return;
const isVertical = slider.scrollHeight > slider.scrollWidth;
const styles = window.getComputedStyle(slideEl);
const margin = parseInt(isVertical ? styles.marginBottom : styles.marginRight);
const itemSize = isVertical ? slideEl.clientHeight : slideEl.clientWidth;
const viewportSize = isVertical ? slider.clientHeight : slider.clientWidth;
this.itemCount = slider.querySelectorAll('.js_thumbs_slide').length;
this.pageSize = Math.max(1, Math.round(viewportSize / (itemSize + margin)));
this.pageFillers = (
this.pageSize * Math.ceil(this.itemCount / this.pageSize)
) - this.itemCount;
this.isSlider = this.itemCount > this.pageSize;
}
},
calcScrollStartEnd() {
const slider = this.getSlider();
if (slider) {
const isVertical = slider.scrollHeight > slider.scrollWidth;
if (isVertical) {
this.isSliderStart = slider.scrollTop === 0;
this.isSliderEnd = Math.ceil(slider.scrollTop + slider.offsetHeight) >= slider.scrollHeight;
} else {
this.isSliderStart = slider.scrollLeft === 0;
this.isSliderEnd = Math.ceil(slider.scrollLeft + slider.offsetWidth) >= slider.scrollWidth;
}
}
},
calcActive() {
const slider = this.getSlider();
if (slider) {
const isVertical = slider.scrollHeight > slider.scrollWidth;
const sliderItems = this.itemCount + this.pageFillers;
const trackSize = isVertical ? slider.scrollHeight : slider.scrollWidth;
const position = isVertical ? slider.scrollTop : slider.scrollLeft;
const calculatedActiveSlide = position / (trackSize / sliderItems);
this.activeSlide = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize;
}
},
scrollPrevious() {
this.scrollTo(this.activeSlide - this.pageSize);
},
scrollNext() {
this.scrollTo(this.activeSlide + this.pageSize);
},
scrollTo(idx) {
const slider = this.getSlider();
if (slider) {
const isVertical = slider.scrollHeight > slider.scrollWidth;
const trackSize = isVertical ? slider.scrollHeight : slider.scrollWidth;
const slideSize = trackSize / (this.itemCount + this.pageFillers);
if (isVertical) {
slider.scrollTop = Math.floor(slideSize) * idx;
} else {
slider.scrollLeft = Math.floor(slideSize) * idx;
}
this.activeSlide = idx;
}
},
setActiveAndScrollTo(index) {
this.setActive(index)
if (this.isSlider) {
this.scrollTo(index);
}
},
eventListeners: {
['@keydown.window.escape']() {
if (!this.fullscreen) return;
this.closeFullScreen()
},
['@update-gallery.window'](event) {
this.receiveImages(event.detail);
},
['@reset-gallery.window'](event) {
this.resetGallery();
},
['@keyup.arrow-right.window']() {
if (!this.fullscreen) return;
this.nextItem();
},
['@keyup.arrow-left.window']() {
if (!this.fullscreen) return;
this.previousItem();
},
},
scrollLock(use = true) {
document.body.style.overflow = use ? "hidden" : "";
},
openFullscreen() {
this.fullscreen = true;
hyva.trapFocus(this.$root);
},
closeFullScreen() {
const setFocusTo = this.$refs.galleryFullscreenBtn;
this.fullscreen = false;
hyva.releaseFocus(this.$root);
this.$nextTick(() => {
this.calcPageSize();
setFocusTo && setFocusTo.focus()
});
},
handleTouchStart(event) {
if (
this.images.length <= 1 ||
event.touches.length > 1 ||
(window.visualViewport && window.visualViewport.scale > 1.01)
) return;
const firstTouch = event.touches[0];
touchXDown = firstTouch.clientX;
touchYDown = firstTouch.clientY;
},
handleTouchMove(event) {
if (
this.images.length <= 1 ||
event.touches.length > 1 ||
(window.visualViewport && window.visualViewport.scale > 1.01) ||
!touchXDown ||
!touchYDown
) return;
const xDiff = touchXDown - event.touches[0].clientX;
const yDiff = touchYDown - event.touches[0].clientY;
if (Math.abs(xDiff) > Math.abs(yDiff)) {
const newIndex = xDiff > 0 ? this.getNextIndex() : this.getPreviousIndex();
this.setActiveAndScrollTo(newIndex)
}
touchXDown = touchYDown = null;
},
getPreviousIndex() {
return this.active > 0 ? this.active - 1 : this.itemCount - 1;
},
getNextIndex() {
return this.active + 1 === this.itemCount ? 0 : this.active + 1;
},
previousItem() {
if (this.active === 0) return;
this.setActiveAndScrollTo(this.active - 1);
},
nextItem() {
if ((this.active + 1) === this.itemCount) return;
this.setActiveAndScrollTo(this.active + 1);
},
}
}
</script>
<div class="card mb-0">
<div class="hidden mb-6 md:block">
<div class="page-title text-3xl font-bold mb-6"
aria-hidden=true data-ui-id="page-title-wrapper"
>
RIDEAU MAJORELLE SUR VELOURS </div>
</div>
<!-- <div class="my-2 flex"> -->
<!-- </div> -->
<!--<div class="mb-4 leading-relaxed product-description prose">--><!--</div>-->
<!-- <div class="flex flex-col sm:flex-row justify-between my-4">
<div class="inline-flex flex-wrap items-center gap-x-6">
</div>
</div> -->
<!-- <dl id="product-details">
<div class="flex border-t border-gray-300 py-2 last:mb-6 last:border-b attribute-">
<dt class="w-1/2 text-left text-gray-700 product-detail-label">
</dt>
<dd class="w-1/2 ml-2 text-left text-gray-900 product-detail-value">
</dd>
</div>
</dl> -->
<form method="post"
action="https://www.mesrideaux.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cubWVzcmlkZWF1eC5mci9yaWRlYXUtbWFqb3JlbGxlLXN1ci12ZWxvdXJzLmh0bWw_Y29sb3Jpcz0xMTYw/product/35439/"
class="mb-0"
id="product_addtocart_form"
enctype="multipart/form-data"
data-sku="2503908-thevenon-rideau-1"
>
<input type="hidden" name="product" value="35439">
<input type="hidden" name="selected_configurable_option" value="">
<input type="hidden" name="related_product" id="related-products-field" value="">
<input type="hidden" name="item" value="35439">
<input name="form_key" type="hidden" value="fjQIJcI8gxUDUYBO" /> <script>
function initConfigurableSwatchOptions_35439() {
const configurableOptionsComponent = initConfigurableOptions(
'35439',
{"attributes":{"221":{"id":"221","code":"colorie","label":"Coloris","options":[{"id":"1160","label":"Camel fond bleu roi sur velours","products":["26228"]},{"id":"1161","label":"Jaune fond canard sur velours","products":["26229"]},{"id":"1165","label":"Rose fond creme sur velours","products":["26227"]}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"26227":{"baseOldPrice":{"amount":13.43},"oldPrice":{"amount":16.116001},"basePrice":{"amount":34.2465},"finalPrice":{"amount":41.100001},"tierPrices":[],"msrpPrice":{"amount":0}},"26228":{"baseOldPrice":{"amount":13.43},"oldPrice":{"amount":16.116001},"basePrice":{"amount":34.2465},"finalPrice":{"amount":41.100001},"tierPrices":[],"msrpPrice":{"amount":0}},"26229":{"baseOldPrice":{"amount":13.43},"oldPrice":{"amount":16.116001},"basePrice":{"amount":34.2465},"finalPrice":{"amount":41.100001},"tierPrices":[],"msrpPrice":{"amount":0}}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u202f","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":13.43},"oldPrice":{"amount":16.116001},"basePrice":{"amount":34.2465},"finalPrice":{"amount":41.100001}},"productId":"35439","chooseText":"Choisissez une option...","images":{"26227":[{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-vue-large.webp","caption":null,"position":"2","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-gros-plan.webp","caption":null,"position":"3","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-rose-fond-creme-sur-velours-photo-tissu.webp","caption":null,"position":"4","isMain":false,"type":"image","videoUrl":null}],"26228":[{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-vue-large.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-vue-large.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-vue-large.webp","caption":null,"position":"1","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-gros-plan.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-gros-plan.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-gros-plan.webp","caption":null,"position":"2","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-photo-tissu.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-photo-tissu.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-camel-fond-bleu-roi-sur-velours-photo-tissu.webp","caption":null,"position":"3","isMain":false,"type":"image","videoUrl":null}],"26229":[{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-vue-large.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-vue-large.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-vue-large.webp","caption":null,"position":"2","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-gros-plan.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-gros-plan.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-gros-plan.webp","caption":null,"position":"3","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-photo-tissu.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-photo-tissu.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/r\/i\/rideau-majorelle-jaune-fond-canard-sur-velours-photo-tissu.webp","caption":null,"position":"4","isMain":false,"type":"image","videoUrl":null}]},"index":{"26227":{"221":"1165"},"26228":{"221":"1160"},"26229":{"221":"1161"}},"salable":[],"canDisplayShowOutOfStockStatus":false,"channel":"website","salesChannelCode":"base","sku":{"26227":"2503908-thevenon-rideau","26228":"2503909-thevenon-rideau","26229":"2503911-thevenon-rideau"},"offerSample":{"26227":"1","26228":"1","26229":"1"},"offerSampleCost":{"26227":"0","26228":"0","26229":"0"}} );
const swatchOptionsComponent = initSwatchOptions(
{"221":{"1160":{"type":"1","value":"#567eb1","label":"Camel fond bleu roi sur velours"},"1161":{"type":"1","value":"#3e6177","label":"Jaune fond canard sur velours"},"1165":{"type":"1","value":"#f2e9e0","label":"Rose fond creme sur velours"},"additional_data":"{\"swatch_input_type\":\"visual\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":\"0\"}"}} );
return Object.assign(
configurableOptionsComponent,
swatchOptionsComponent,
{
getColorisOptionFromUrlParam(paramName) {
try {
const params = new URLSearchParams(window.location.search || '');
const value = params.get(paramName);
if (!value || !/^\d+$/.test(value)) {
return null;
}
// Les IDs d'options sont stockés en string dans optionConfig ;
// on conserve donc le type string pour les comparaisons strictes.
return value;
} catch (e) {
return null;
}
},
getColorisAttributeId() {
const attributes = this.optionConfig?.attributes || {};
const entries = Object.entries(attributes);
if (!entries.length) {
return null;
}
const found = entries.find(([, attributeData]) => {
const code = String(attributeData?.code || attributeData?.attribute_code || '').toLowerCase();
const label = String(attributeData?.label || '').toLowerCase();
return code === 'colorie'
|| code === 'coloris'
|| code === 'couleur'
|| label.indexOf('coloris') !== -1
|| label.indexOf('couleur') !== -1;
});
return found ? found[0] : null;
},
applyColorisOption(attributeId, optionId) {
if (!optionId) {
return false;
}
if (!this.optionIsEnabled(attributeId, optionId) || !this.optionIsActive(attributeId, optionId)) {
return false;
}
this.changeOption(attributeId, optionId);
return true;
},
applyColorisFromUrl() {
const attributeId = this.getColorisAttributeId();
if (!attributeId) {
return false;
}
const currentColoris = this.getColorisOptionFromUrlParam('current_coloris');
if (this.applyColorisOption(attributeId, currentColoris)) {
return true;
}
const suggestionColoris = this.getColorisOptionFromUrlParam('coloris');
return this.applyColorisOption(attributeId, suggestionColoris);
},
hasAttributeSelectionInUrl() {
try {
const params = new URLSearchParams(window.location.search || '');
if (params.has('coloris') || params.has('current_coloris')) {
return true;
}
const attributes = this.optionConfig?.attributes || {};
return Object.entries(attributes).some(([attributeId, attributeData]) => {
const code = String(attributeData?.code || attributeData?.attribute_code || '');
return params.has(attributeId)
|| params.has(`super_attribute[${attributeId}]`)
|| (code && params.has(code));
});
} catch (e) {
return false;
}
},
autoSelectFirstColorSwatch() {
if (this.hasAttributeSelectionInUrl()) {
return;
}
const attributeIds = Object.keys(this.optionConfig?.attributes || {});
if (!attributeIds.length) {
return;
}
const firstAttributeId = attributeIds[0];
if (this.selectedValues && this.selectedValues[firstAttributeId]) {
return;
}
const firstAttribute = this.optionConfig.attributes[firstAttributeId];
if (!firstAttribute || !Array.isArray(firstAttribute.options)) {
return;
}
const firstActiveOption = firstAttribute.options.find((option) =>
this.optionIsEnabled(firstAttributeId, option.id) &&
this.optionIsActive(firstAttributeId, option.id)
);
if (!firstActiveOption) {
return;
}
this.changeOption(firstAttributeId, firstActiveOption.id);
},
applyDefaultColorSelection() {
if (!this.applyColorisFromUrl()) {
this.autoSelectFirstColorSwatch();
}
}
}
);
}
</script>
<div x-data="initConfigurableSwatchOptions_35439()"
x-init="$nextTick(() => applyDefaultColorSelection())"
@private-content-loaded.window="onGetCartData($event.detail.data)"
class="relative mb-6"
x-defer="intersect"
>
<div>
<div class="swatch-attribute colorie">
<div class="flex flex-wrap flex-col sm:flex-row items-center py-4 sm:py-1 w-full border-gray-300">
<label
class="w-full text-left label product-option-label"
id="attribute-label-35439-221"
aria-hidden="true"
>
<span class="label-text">Coloris :</span>
<span
class="ml-2"
x-text="getSwatchText(221, selectedValues[221])"
></span>
</label>
<div class="w-full text-left product-option-values">
<div
class="flex items-center -mx-1 space-x-4 swatch-attribute-options mt-2"
role="radiogroup"
aria-label="Coloris"
>
<template
x-for="(item, index) in optionConfig.attributes[221].options"
:key="item.id"
>
<div x-id="['attribute-option-35439-'+item.id]">
<template x-if="optionIsEnabled(221, item.id) && optionIsActive(221, item.id)">
<label
:for="$id('attribute-option-35439-'+item.id)"
class="swatch-option relative cursor-pointer select-none bg-container-lighter product-option-value-label tete"
:class="{ 'border-container-lighter ring ring-primary/50': (selectedValues[221] === item.id), 'border-container-darker': (selectedValues[221] !== item.id), '' : !isTextSwatch(221, item.id), 'border-container-lighter ring ring-primary/75' : focusedLabel === item.id }"
:style="getSwatchBackgroundStyle('221', item.id) + ( selectedValues[221] === item.id ? ( getSwatchType(221, item.id) === 'color' ? ( getSwatchConfig(221, item.id) && getSwatchConfig(221, item.id).value ? '; outline-color:' + getSwatchConfig(221, item.id).value + '; outline-width: 1px;outline-offset: 1px;outline-style: solid;' : '; outline-color: black; outline-width: 1px;outline-offset: 1px;outline-style: solid;' ) : '; outline-color: black; outline-width: 1px;outline-offset: 1px;outline-style: solid;' ) : '' )"
@mouseenter.self="if (window.innerWidth >= 768) { activeTooltipItem = { attribute: '221', item: item.id, index }; tooltipPositionElement = $event.target; }"
@mouseleave.self="if (window.innerWidth >= 768) activeTooltipItem = false"
>
<input
:id="$id('attribute-option-35439-'+item.id)"
:value="item.id"
name="super_attribute[221]"
type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input"
style="z-index:-1"
x-on:focus="focusLabel(item.id)"
x-on:blur="blurLabel()"
x-on:change="changeOption(221, $event.target.value); dispatchConfigurableSelectionChanged()"
x-data="{ attributeId: 221, productId: 35439 }"
x-on:click="clearOptionIfActive(attributeId, item.id) checkSampleProduct($event.target, attributeId, productId); "
x-model="selectedValues[221]"
:required="getAllowedAttributeOptions(221).filter( attributeOption => selectedValues[attributeOption] ).length === 0"
:aria-label="getSwatchText(221, item.id)"
aria-describedby="attribute-label-35439-221"
>
<template x-if="isTextSwatch(221, item.id)">
<div
x-html="getSwatchText(221, item.id)"
class="pointer-events-none select-none whitespace-nowrap"
aria-hidden="true"
></div>
</template>
</label>
</template>
<template x-if="optionIsEnabled(221, item.id) && !optionIsActive(221, item.id)">
<div
class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter"
:class="{ 'w-6 h-6' : !isTextSwatch(221, item.id), }"
:style="getSwatchBackgroundStyle('221',item.id)"
>
<div x-html="getSwatchText(221, item.id)"
class="whitespace-nowrap"
:class="{ 'sr-only' : !isTextSwatch(221, item.id) }"
></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute pointer-events-none select-none"
:style="getTooltipPosition()"
>
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-sm leading-tight text-black transform -translate-x-1/2 -translate-y-full bg-white rounded-lg shadow-lg text-center"
:class="{'-translate-x-5' : isFirstItemCol()}"
>
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-gray-300"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template>
<span class="mx-2 text-lg font-semibold whitespace-nowrap subtitle"
x-html="getTooltipLabel()"
></span>
</div>
<div class="absolute z-10 w-3 h-3 bg-white origin-top-left rotate-45 translate-x-4 -translate-y-8 shadow-xl" aria-hidden="true"></div>
</div>
</template>
</div>
<div class="product-options-wrapper" id="product-options-wrapper">
<div class="configurateur-step-title">Personnalisez votre produit :</div>
<div class="fieldset" tabindex="0">
<script type="text/x-magento-init">
{
"#product_addtocart_form": {
"Magento_Catalog/js/validate-product": {
"radioCheckboxClosest": ".nested",
"ignore": ".ignore",
"bindSubmit": true
},
"priceOptions": {
"optionConfig": {"580329":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Largeur de tringle"},"580333":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Hauteur du dessus de la tringle au sol"},"580332":{"1499081":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"1 paire"},"1499082":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"1 grand rideau"}},"580331":{"1499075":{"prices":{"oldPrice":{"amount":25.200001,"adjustments":[]},"basePrice":{"amount":21},"finalPrice":{"amount":25.200001}},"type":"fixed","name":"Ruflette"},"1499076":{"prices":{"oldPrice":{"amount":26.400001,"adjustments":[]},"basePrice":{"amount":22},"finalPrice":{"amount":26.400001}},"type":"fixed","name":"Plis simples"},"1499077":{"prices":{"oldPrice":{"amount":31.200001,"adjustments":[]},"basePrice":{"amount":26},"finalPrice":{"amount":31.200001}},"type":"fixed","name":"Plis doubles"},"1499078":{"prices":{"oldPrice":{"amount":31.200001,"adjustments":[]},"basePrice":{"amount":26},"finalPrice":{"amount":31.200001}},"type":"fixed","name":"Plis plats"},"1499079":{"prices":{"oldPrice":{"amount":34.800001,"adjustments":[]},"basePrice":{"amount":29},"finalPrice":{"amount":34.800001}},"type":"fixed","name":"Oeillets"},"1499080":{"prices":{"oldPrice":{"amount":30.000001,"adjustments":[]},"basePrice":{"amount":25},"finalPrice":{"amount":30.000001}},"type":"fixed","name":"Wave"}},"580330":{"1499069":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Aucune"},"1499070":{"prices":{"oldPrice":{"amount":24.000001,"adjustments":[]},"basePrice":{"amount":20},"finalPrice":{"amount":24.000001}},"type":"fixed","name":"Classique blanche"},"1499071":{"prices":{"oldPrice":{"amount":24.000001,"adjustments":[]},"basePrice":{"amount":20},"finalPrice":{"amount":24.000001}},"type":"fixed","name":"Classique \u00e9crue"},"1499072":{"prices":{"oldPrice":{"amount":43.200001,"adjustments":[]},"basePrice":{"amount":36},"finalPrice":{"amount":43.200001}},"type":"fixed","name":"Molletonn\u00e9e \u00e9crue"},"1499073":{"prices":{"oldPrice":{"amount":31.200001,"adjustments":[]},"basePrice":{"amount":26},"finalPrice":{"amount":31.200001}},"type":"fixed","name":"Occultante blanche"},"1499074":{"prices":{"oldPrice":{"amount":78.000001,"adjustments":[]},"basePrice":{"amount":65},"finalPrice":{"amount":78.000001}},"type":"fixed","name":"Thermique & Phonique"}},"580335":{"1499085":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Canon de fusil"},"1499086":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Nickel mat"},"1499087":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Nickel brillant"},"1499088":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Laiton brillant"},"1499089":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Cuivre"},"1499090":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Bronze"},"1499091":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Noir mat"},"1499092":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Blanc"}},"580334":{"1499083":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Au sol"},"1499084":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Cassant (3cm seront ajout\u00e9s \u00e0 votre hauteur renseign\u00e9e)"}}},
"controlContainer": ".field",
"priceHolderSelector": "[data-product-id='35439'][data-role=priceBox]"
}
}
}
</script>
<a href="javascript:void(0);"
class="take-measures openModel" data-id="takeMeasures">Comment prendre vos mesures ?</a>
<div id="takeMeasures" style="display: none;">
<div class="take-measures-content-1">
<h2>COMMENT PRENDRE MES MESURES</h2>
<p> </p>
<p><img src="https://cdn4.mesrideaux.fr/wysiwyg/Croquis_Rideaux.jpg" alt="prise de mesure rideaux" width="322" height="400"></p>
<h3>Largeur : minimum 50 cm - maximum 700 cm<br>Hauteur : minimum 50 cm - maximum 700 cm</h3> </div>
<div class="take-measures-content-video">
<style>#html-body [data-pb-style=I8BFPGD]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=WR0MBWI]{display:flex;width:100%}#html-body [data-pb-style=GGA15NR],#html-body [data-pb-style=IQD00HG],#html-body [data-pb-style=YLP520U]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:33.3333%;align-self:stretch}</style><div class="pagebuilder-column-group videos-grid videos-grid-prises-de-mesures" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-background-lazy-load="false" data-element="main" data-pb-style="I8BFPGD"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="WR0MBWI"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="GGA15NR"><div data-content-type="video" data-appearance="default" data-element="main"><div class="pagebuilder-video-inner" data-element="inner"><div class="pagebuilder-video-wrapper" data-element="wrapper"><div class="pagebuilder-video-container"><iframe frameborder="0" allowfullscreen="" src="https://www.youtube.com/embed/QQ6qPV-LntM" data-element="video"></iframe></div></div></div></div><div data-content-type="text" data-appearance="default" data-element="main"><p>Comment mesurer des rideaux ?</p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="YLP520U"><div data-content-type="video" data-appearance="default" data-element="main"><div class="pagebuilder-video-inner" data-element="inner"><div class="pagebuilder-video-wrapper" data-element="wrapper"><div class="pagebuilder-video-container"><iframe frameborder="0" allowfullscreen="" src="https://www.youtube.com/embed/89IcPs9MlWs" data-element="video"></iframe></div></div></div></div><div data-content-type="text" data-appearance="default" data-element="main"><p>Comment prendre les mesures pour vos stores bateaux ?</p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="IQD00HG"><div data-content-type="video" data-appearance="default" data-element="main"><div class="pagebuilder-video-inner" data-element="inner"><div class="pagebuilder-video-wrapper" data-element="wrapper"><div class="pagebuilder-video-container"><iframe frameborder="0" allowfullscreen="" src="https://www.youtube.com/embed/UKTxpQN8ufY" data-element="video"></iframe></div></div></div></div><div data-content-type="text" data-appearance="default" data-element="main"><p>Comment prendre les mesures pour votre store enrouleur ?</p></div></div></div></div>
</div>
</div>
<div id="configurateur" class="set_storerideaux">
<div class="step pdp-dropdown mb-4" id="step_1">
<button
type="button"
class="step-title pdp-dropdown__toggle w-full flex items-center justify-between gap-2 py-2 text-left"
aria-expanded="false"
>
<span class="pdp-dropdown__label">Étape 1 : J’indique mes dimensions</span>
<span class="pdp-dropdown__caret" aria-hidden="true"></span>
</button>
<div class="pdp-dropdown__panel" aria-hidden="true">
<div class="pdp-dropdown__inner">
<div class="step-wrapper">
<div class="field choice" id="field-deja-tringle-info">
<input
type="checkbox"
class="checkbox product-custom-option"
name="deja_tringle"
id="deja_tringle"
value="1"
/>
<label class="label" for="deja_tringle">
J'ai déjà une tringle </label>
</div>
<!--
@ Karan Emipro
custom option dependant for Select option
-->
<!-- custom options depends -->
<script type="text/javascript">
function jsHidetext(optionId){
require(['jquery'], function ($) {
if(document.getElementById('options_'+optionId+'_text')){
if(!$('#options_'+optionId+'_text').hasClass('dependsText')){
document.getElementById('options_'+optionId+'_text').parentElement.parentElement.style.display = 'none';
}
}
});
}
</script>
<!-- custom options depends -->
<div class="field required" id="field-rideau-largeur">
<label class="label" for="options_580329_text">
Largeur de tringle </label>
<div class="control">
<input type="text"
id="options_580329_text"
placeholder="max 700cm"
class="input-text product-custom-option"
data-validate="{"required":true,"integer":true,"range-french":["50","700"],"validate-min-french":0}"
name="options[580329]"
data-sku="rideau-largeur"
data-selector="options[580329]"
data-msg-range="La valeur n’est pas dans la plage spécifiée."
data-msg-minlength="Numéro invalide"
data-msg-validate-number="Numéro invalide."
data-default-digitsrange="50-700"
data-default-isrequired="1"
value=""/>
</div>
</div>
<!--
@ Karan Emipro
custom option dependant for thumb option
-->
<!-- custom options depends -->
<!-- custom options depends -->
<!--
@ Karan Emipro
custom option dependant for Select option
-->
<!-- custom options depends -->
<script type="text/javascript">
function jsHidetext(optionId){
require(['jquery'], function ($) {
if(document.getElementById('options_'+optionId+'_text')){
if(!$('#options_'+optionId+'_text').hasClass('dependsText')){
document.getElementById('options_'+optionId+'_text').parentElement.parentElement.style.display = 'none';
}
}
});
}
</script>
<!-- custom options depends -->
<div class="field required" id="field-rideau-hauteur">
<label class="label" for="options_580333_text">
Hauteur du dessus de la tringle au sol </label>
<div class="control">
<input type="text"
id="options_580333_text"
placeholder="max 700cm"
class="input-text product-custom-option"
data-validate="{"required":true,"integer":true,"range-french":["50","700"],"validate-min-french":0}"
name="options[580333]"
data-sku="rideau-hauteur"
data-selector="options[580333]"
data-msg-range="La valeur n’est pas dans la plage spécifiée."
data-msg-minlength="Numéro invalide"
data-msg-validate-number="Numéro invalide."
data-default-digitsrange="50-700"
data-default-isrequired="1"
value=""/>
</div>
</div>
<!--
@ Karan Emipro
custom option dependant for thumb option
-->
<!-- custom options depends -->
<!-- custom options depends -->
<span
class="btn-validconfig btn btn-primary"
data-step="1"
>
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="step pdp-dropdown mb-4" id="step_50">
<button
type="button"
class="step-title pdp-dropdown__toggle w-full flex items-center justify-between gap-2 py-2 text-left"
aria-expanded="false"
>
<span class="pdp-dropdown__label">Étape 2 : Je choisis le nombre de rideaux par fenêtre</span>
<span class="pdp-dropdown__caret" aria-hidden="true"></span>
</button>
<div class="pdp-dropdown__panel" aria-hidden="true">
<div class="pdp-dropdown__inner">
<div class="step-wrapper">
<div id="nombre-de-rideaux-(par-fenêtre)" class="field required">
<label class="label" for="select_580332" style="display: block;line-height: 1.3;">
<span style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable">Nombre de rideaux (par fenêtre)</span>
</label>
<div class="control">
<span ></span>
<div class="options-list nested"
id="options-580332-list"><div class="field choice admin__field admin__field-option required"><input data-sku="2" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-nombre radio admin__control-radio option04 required product-custom-option" name="options[580332]" id="options_580332_2" value="1499081" data-value="" data-selector="options[580332]" price="0" lastchange="" onclick="changeRadioChek('580332','radio')" /><label class="label admin__field-label"
for="options_580332_2">1 paire<span class="option-final-price" data-option-key="580332_1499081"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="1" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-nombre radio admin__control-radio option04 required product-custom-option" name="options[580332]" id="options_580332_3" value="1499082" data-value="" data-selector="options[580332]" price="0" lastchange="" onclick="changeRadioChek('580332','radio')" /><label class="label admin__field-label"
for="options_580332_3">1 grand rideau<span class="option-final-price" data-option-key="580332_1499082"></span></label></div></div>
<!-- custom options depends -->
<!-- custom options depends -->
<!-- custom options depends -->
<input id="options_580332" type="radio" style="display:none;" price="" value="" name="options[580332]">
<!-- custom options depends -->
<span id="options-580332-container"></span>
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580332","optionPrice":0,"optionValue":"1499081"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580332","optionPrice":0,"optionValue":"1499082"}],
OptionId: 0 };
window.__emiproCustomOptionDefaultQueue = window.__emiproCustomOptionDefaultQueue || [];
window.__emiproCustomOptionDefaultQueue.push(payload);
if (window.__emiproCustomOptionDefaultRunnerBound) {
return;
}
window.__emiproCustomOptionDefaultRunnerBound = true;
function applyDefaultOptions() {
var queue = window.__emiproCustomOptionDefaultQueue || [];
var i, j, data, item, listNode, listInputs, input, selectNode, selectOption;
for (i = 0; i < queue.length; i++) {
data = queue[i] && queue[i].defaultOption ? queue[i].defaultOption : [];
for (j = 0; j < data.length; j++) {
item = data[j];
if (!item || String(item.optionDefaultValue) !== '1') {
continue;
}
if (item.optiontype === 'radio'
|| item.optiontype === 'checkbox'
|| item.optiontype === 'thumb_gallery'
|| item.optiontype === 'thumb_gallery_popup'
|| item.optiontype === 'thumb_gallery_multi'
) {
listNode = document.getElementById('options-' + item.optionLable + '-list');
if (!listNode) {
continue;
}
listInputs = listNode.querySelectorAll('input[value="' + item.optionValue + '"]');
if (!listInputs.length) {
continue;
}
input = listInputs[0];
input.checked = true;
input.dispatchEvent(new Event('click', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true }));
} else if (item.optiontype === 'drop_down' || item.optiontype === 'multiple') {
selectNode = document.getElementById('select_' + item.optionLable);
if (!selectNode) {
continue;
}
selectOption = selectNode.querySelector('option[value="' + item.optionValue + '"]');
if (!selectOption) {
continue;
}
selectOption.selected = true;
selectNode.dispatchEvent(new Event('change', { bubbles: true }));
}
}
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
setTimeout(applyDefaultOptions, 0);
});
} else {
setTimeout(applyDefaultOptions, 0);
}
})();
</script>
<div style="display:none"><div class="custom-div-to-show-popup"></div></div><script type="text/javascript">
var mediaurl = "https://www.mesrideaux.fr/";
var baseImageChange = "";
var enabled_tooltip = "0";
var enabled_cmi = "1";
var flag = 0;
</script>
<!-- custom options depends -->
<script type="text/javascript">
function jsHide(optionId){
require(['jquery'], function ($) {
if (document.getElementById('options-'+optionId+'-list')) {
var getActiveClass = $('#options-'+optionId+'-list').children().hasClass('selectDepend');
if(!getActiveClass){
document.getElementById('options-'+optionId+'-list').parentElement.parentElement.style.display = 'none';
}
}
if(document.getElementById('select_'+optionId)){
if(!$('#select_'+optionId).attr('multiple')){
var getSelectedOptionValue = $('#select_'+optionId+' :selected').val();
if(!getSelectedOptionValue){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}else{
var getSelectedOption = $('#select_'+optionId+' :selected').length;
if(getSelectedOption<1){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}
}
});
}
</script>
<!-- custom options depends -->
<span
class="btn-validconfig btn btn-primary"
data-step="50"
>
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="step pdp-dropdown mb-4" id="step_2">
<button
type="button"
class="step-title pdp-dropdown__toggle w-full flex items-center justify-between gap-2 py-2 text-left"
aria-expanded="false"
>
<span class="pdp-dropdown__label">Étape 3 : Je sélectionne ma tête de rideaux</span>
<span class="pdp-dropdown__caret" aria-hidden="true"></span>
</button>
<div class="pdp-dropdown__panel" aria-hidden="true">
<div class="pdp-dropdown__inner">
<div class="step-wrapper">
<a href="javascript:void(0);" class="take-measures openModel" data-id="infoTeterideau">Infos</a>
<div id="infoTeterideau" style="display: none;">
<table style="width: 865px;" border="0" cellspacing="0" cellpadding="0" align="left">
<tbody>
<tr>
<td style="width: 227.578px;" width="225px"><img src="https://cdn4.mesrideaux.fr/wysiwyg/ruflette-infos.webp" alt="Ruflettes" width="226" height="82"></td>
<td style="width: 634.422px;" width="630px">
<p><strong>Ruflette</strong><br>Avec cette finition, à vous de créer les plis que vous souhaitez, selon l'ampleur et l'espacement désirés. Cousu sur toute la largeur du tissu selon les dimensions transmises, le galon fronceur (ruflette) permettra d'adapter votre rideau à différentes mesures de tringles.</p>
<p>Coefficient d’ampleur entre 1,5 et 2 ; il est optimisé en fonction de vos mesures et de la laize du tissu choisi.</p>
</td>
</tr>
<tr>
<td style="width: 227.578px;"><img src="https://cdn4.mesrideaux.fr/wysiwyg/1pli.jpg" alt="Plis simples" width="225" height="81"></td>
<td style="width: 634.422px;">
<p><strong>Plis simples<br></strong>Répartis à intervalles réguliers les plis simples structurent le rideau et lui donnent une ondulation restreinte pour que les grands dessins se déploient en restant lisibles. Au dos, des crochets montés sur glissière (agrafes en plastique Microflex©) permettent d'ajuster facilement la hauteur du rideau.</p>
<p>Coefficient d’ampleur entre 1,5 et 1,8 ; il est optimisé en fonction de vos mesures et de la laize du tissu choisi.</p>
</td>
</tr>
<tr>
<td style="width: 227.578px;"><img src="https://cdn4.mesrideaux.fr/wysiwyg/2plis_1.jpg" alt="Plis doubles" width="225" height="81"></td>
<td style="width: 634.422px;">
<p><strong> Plis doubles<br></strong> Appelés également "plis flamands", pincés et réguliers, ils forment un pli creux et donnent de l'ampleur à vos rideaux.<br> Au dos, découvrez notre système de crochets montés sur glissière (agrafes en plastique Microflex©) qui vous permettra d'ajuster facilement la hauteur de votre rideau.</p>
<p> Coefficient d’ampleur entre 1,8 et 2,3 ; il est optimisé en fonction de vos mesures et de la laize du tissu choisi</p>
</td>
</tr>
<tr>
<td style="width: 227.578px;"><img src="https://cdn4.mesrideaux.fr/wysiwyg/plisplats-infos.webp" alt="plis plats" width="225" height="81"></td>
<td style="width: 634.422px;">
<p><strong>Plis plats<br></strong>Une finition très nette pour un tombé rectiligne et moderne.<br>Au dos, découvrez notre système de crochets montés sur glissière (agrafes en plastique Microflex©) qui vous permettra d'ajuster facilement la hauteur de votre rideau.</p>
<p>Coefficient d’ampleur entre 2 et 2,2 ; il est optimisé en fonction de vos mesures et de la laize du tissu choisi</p>
</td>
</tr>
<tr>
<td style="width: 227.578px;"><img src="https://cdn4.mesrideaux.fr/wysiwyg/oeillets-infos.webp" alt="Oeillets" width="225" height="81"></td>
<td style="width: 634.422px;">
<p><strong>Oeillets<br></strong>A la fois moderne et sobre, la finition oeillets est un grand classique de confection. Vous ferez votre choix entre 7 coloris d'anneaux de 40mm de diamètre (intérieur). N'hésitez cependant pas à nous contacter si vos mesures impliquent des anneaux plus petits ou plus larges.</p>
<p>Coefficient d’ampleur entre 1,6 et 2 ; il est optimisé en fonction de vos mesures et de la laize du tissu choisi</p>
</td>
</tr>
<tr>
<td style="width: 227.578px;"><img src="https://cdn4.mesrideaux.fr/wysiwyg/wave.webp" alt="Wave" width="225" height="81"></td>
<td style="width: 634.422px;">
<p><strong>Wave<br></strong>Les rideaux Wave se distinguent par leurs ondulations régulières et élégantes, créant un tombé fluide et contemporain. Grâce à un système de glisseurs espacés de manière uniforme, le tissu forme des vagues harmonieuses qui restent identiques, même lorsque le rideau est ouvert ou fermé. Cette finition apporte une esthétique épurée, moderne et raffinée, idéale pour valoriser les grandes baies vitrées et offrir une décoration intérieure à la fois sobre et sophistiquée.</p>
<p>coefficient d'ampleur entre 1.8 et 2 : il est optimisé en fonction de vos mesures et de la laize du tissu choisi</p>
</td>
</tr>
</tbody>
</table> </div>
<div id="tête-de-rideaux" class="field required">
<div class="control">
<span class="hide" id="emispanlable_580331"></span>
<div class="options-list nested" style=""
id="options-580331-list"><div class="field choice admin__field admin__field-option required"><input data-sku="ruflette" data-price="+ 25,20 € "
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580331","Ruflette",21,"media/customoptions/r/u/ruflette_2.jpg","+ 25,20 € ","thumb_gallery",580331,"img","https://www.mesrideaux.fr/media/customoptions/r/u/ruflette.jpg","")' type="radio" class="rideau-tete radio admin__control-radio option01 required product-custom-option" name="options[580331]" id="options_580331_2" value="1499075" data-value="" data-selector="options[580331]" price="21" lastchange=""><label class="label admin__field-label"
for="options_580331_2"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/r/u/ruflette.jpg" data-src="https://www.mesrideaux.fr/media/customoptions/r/u/ruflette.jpg" alt="Ruflette" height="70" width="200" loading="lazy"></div><span>Ruflette</span><span class="option-final-price" data-option-key="580331_1499075"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="plis-simple" data-price="+ 26,40 € "
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580331","Plis simples",22,"media/customoptions/t/_/t_te_1_pli.jpg","+ 26,40 € ","thumb_gallery",580331,"img","https://www.mesrideaux.fr/media/customoptions/1/p/1pli.jpg","")' type="radio" class="rideau-tete radio admin__control-radio option01 required product-custom-option" name="options[580331]" id="options_580331_3" value="1499076" data-value="" data-selector="options[580331]" price="22" lastchange=""><label class="label admin__field-label"
for="options_580331_3"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/1/p/1pli.jpg" data-src="https://www.mesrideaux.fr/media/customoptions/1/p/1pli.jpg" alt="Plis simples" height="70" width="200" loading="lazy"></div><span>Plis simples</span><span class="option-final-price" data-option-key="580331_1499076"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="plis-doubles" data-price="+ 31,20 € "
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580331","Plis doubles",26,"media/customoptions/d/e/de_tail_rideaux_2_plis_15927673717_o.jpg","+ 31,20 € ","thumb_gallery",580331,"img","https://www.mesrideaux.fr/media/customoptions/2/p/2plis.jpg","")' type="radio" class="rideau-tete radio admin__control-radio option01 required product-custom-option" name="options[580331]" id="options_580331_4" value="1499077" data-value="" data-selector="options[580331]" price="26" lastchange=""><label class="label admin__field-label"
for="options_580331_4"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/2/p/2plis.jpg" data-src="https://www.mesrideaux.fr/media/customoptions/2/p/2plis.jpg" alt="Plis doubles" height="70" width="200" loading="lazy"></div><span>Plis doubles</span><span class="option-final-price" data-option-key="580331_1499077"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="plis-plats" data-price="+ 31,20 € "
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580331","Plis plats",26,"media/customoptions/s/l/slider_plisplats_2.jpg","+ 31,20 € ","thumb_gallery",580331,"img","https://www.mesrideaux.fr/media/customoptions/p/l/plisplats_3.jpg","")' type="radio" class="rideau-tete radio admin__control-radio option01 required product-custom-option" name="options[580331]" id="options_580331_5" value="1499078" data-value="" data-selector="options[580331]" price="26" lastchange=""><label class="label admin__field-label"
for="options_580331_5"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/p/l/plisplats_3.jpg" data-src="https://www.mesrideaux.fr/media/customoptions/p/l/plisplats_3.jpg" alt="Plis plats" height="70" width="200" loading="lazy"></div><span>Plis plats</span><span class="option-final-price" data-option-key="580331_1499078"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="oeillets" data-price="+ 34,80 € "
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580331","Oeillets",29,"media/customoptions/t/e/tete_oeillets_1.jpg","+ 34,80 € ","thumb_gallery",580331,"img","https://www.mesrideaux.fr/media/customoptions/o/e/oeillets_4.jpg","")' type="radio" class="rideau-tete radio admin__control-radio option01 required product-custom-option" name="options[580331]" id="options_580331_6" value="1499079" data-value="" data-selector="options[580331]" price="29" lastchange="580335"><label class="label admin__field-label"
for="options_580331_6"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/o/e/oeillets_4.jpg" data-src="https://www.mesrideaux.fr/media/customoptions/o/e/oeillets_4.jpg" alt="Oeillets" height="70" width="200" loading="lazy"></div><span>Oeillets</span><span class="option-final-price" data-option-key="580331_1499079"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="wave" data-price="+ 30,00 € "
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580331","Wave",25,"media/customoptions/w/a/wave-large-2.webp","+ 30,00 € ","thumb_gallery",580331,"img","https://www.mesrideaux.fr/media/customoptions/w/a/wave.webp","")' type="radio" class="rideau-tete radio admin__control-radio option01 required product-custom-option" name="options[580331]" id="options_580331_7" value="1499080" data-value="" data-selector="options[580331]" price="25" lastchange=""><label class="label admin__field-label"
for="options_580331_7"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/w/a/wave.webp" data-src="https://www.mesrideaux.fr/media/customoptions/w/a/wave.webp" alt="Wave" height="70" width="200" loading="lazy"></div><span>Wave</span><span class="option-final-price" data-option-key="580331_1499080"></span></label></div></div>
<!-- custom options depends -->
<input id="options_580331" type="radio" style="display:none;" price="" value="" name="options[580331]">
<!-- custom options depends -->
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580331","optionPrice":21,"optionValue":"1499075"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580331","optionPrice":22,"optionValue":"1499076"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580331","optionPrice":26,"optionValue":"1499077"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580331","optionPrice":26,"optionValue":"1499078"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580331","optionPrice":29,"optionValue":"1499079"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580331","optionPrice":25,"optionValue":"1499080"}],
OptionId: 0 };
window.__emiproCustomOptionDefaultQueue = window.__emiproCustomOptionDefaultQueue || [];
window.__emiproCustomOptionDefaultQueue.push(payload);
if (window.__emiproCustomOptionDefaultRunnerBound) {
return;
}
window.__emiproCustomOptionDefaultRunnerBound = true;
function applyDefaultOptions() {
var queue = window.__emiproCustomOptionDefaultQueue || [];
var i, j, data, item, listNode, listInputs, input, selectNode, selectOption;
for (i = 0; i < queue.length; i++) {
data = queue[i] && queue[i].defaultOption ? queue[i].defaultOption : [];
for (j = 0; j < data.length; j++) {
item = data[j];
if (!item || String(item.optionDefaultValue) !== '1') {
continue;
}
if (item.optiontype === 'radio'
|| item.optiontype === 'checkbox'
|| item.optiontype === 'thumb_gallery'
|| item.optiontype === 'thumb_gallery_popup'
|| item.optiontype === 'thumb_gallery_multi'
) {
listNode = document.getElementById('options-' + item.optionLable + '-list');
if (!listNode) {
continue;
}
listInputs = listNode.querySelectorAll('input[value="' + item.optionValue + '"]');
if (!listInputs.length) {
continue;
}
input = listInputs[0];
input.checked = true;
input.dispatchEvent(new Event('click', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true }));
} else if (item.optiontype === 'drop_down' || item.optiontype === 'multiple') {
selectNode = document.getElementById('select_' + item.optionLable);
if (!selectNode) {
continue;
}
selectOption = selectNode.querySelector('option[value="' + item.optionValue + '"]');
if (!selectOption) {
continue;
}
selectOption.selected = true;
selectNode.dispatchEvent(new Event('change', { bubbles: true }));
}
}
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
setTimeout(applyDefaultOptions, 0);
});
} else {
setTimeout(applyDefaultOptions, 0);
}
})();
</script>
<div style="display:none"><div class="custom-div-to-show-popup"></div></div><script type="text/javascript">
var mediaurl = "https://www.mesrideaux.fr/";
var baseImageChange = "";
var enabled_tooltip = "0";
var enabled_cmi = "1";
var flag = 0;
</script>
<!-- custom options depends -->
<script type="text/javascript">
function jsHide(optionId){
require(['jquery'], function ($) {
if (document.getElementById('options-'+optionId+'-list')) {
var getActiveClass = $('#options-'+optionId+'-list').children().hasClass('selectDepend');
if(!getActiveClass){
document.getElementById('options-'+optionId+'-list').parentElement.parentElement.style.display = 'none';
}
}
if(document.getElementById('select_'+optionId)){
if(!$('#select_'+optionId).attr('multiple')){
var getSelectedOptionValue = $('#select_'+optionId+' :selected').val();
if(!getSelectedOptionValue){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}else{
var getSelectedOption = $('#select_'+optionId+' :selected').length;
if(getSelectedOption<1){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}
}
});
}
</script>
<!-- custom options depends -->
<div id="finition-oeillets" class="field">
<label class="label" for="select_580335" style="display: block;line-height: 1.3;">
<span id="emioptlable_580335" data-value="Finition oeillets" data-value-old="Finition oeillets" style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable">Finition oeillets</span>
</label>
<div class="control">
<span class="hide" id="emispanlable_580335"></span>
<div class="options-list nested" style=""
id="options-580335-list"><div class="field choice admin__field admin__field-option" style="display:none;"><input type="radio" id="none_options_580335" class="radio admin__control-radio option01 product-custom-option" data-value="" name="options[580335]" data-selector="options[580335]" value="" checked="checked" /><label class="label admin__field-label" for="options_580335"><span>Aucun</span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition2" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Canon de fusil",0,"media/customoptions/c/a/canon_de_fusil_3.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/c/a/canon_de_fusil_3.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_2" value="1499085" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_2"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/a/canon_de_fusil_3.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/c/a/canon_de_fusil_3.jpg" alt="Canon de fusil" height="70" width="200" loading="lazy"></div><span>Canon de fusil</span><span class="option-final-price" data-option-key="580335_1499085"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition1" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Nickel mat",0,"media/customoptions/n/i/nickel_mat_2.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/n/i/nickel_mat_2.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_3" value="1499086" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_3"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/n/i/nickel_mat_2.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/n/i/nickel_mat_2.jpg" alt="Nickel mat" height="70" width="200" loading="lazy"></div><span>Nickel mat</span><span class="option-final-price" data-option-key="580335_1499086"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition5" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Nickel brillant",0,"media/customoptions/n/i/nickel_brillant_9.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/n/i/nickel_brillant_9.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_4" value="1499087" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_4"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/n/i/nickel_brillant_9.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/n/i/nickel_brillant_9.jpg" alt="Nickel brillant" height="70" width="200" loading="lazy"></div><span>Nickel brillant</span><span class="option-final-price" data-option-key="580335_1499087"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition7" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Laiton brillant",0,"media/customoptions/l/a/laiton_mat.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/l/a/laiton_mat.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_5" value="1499088" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_5"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/l/a/laiton_mat.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/l/a/laiton_mat.jpg" alt="Laiton brillant" height="70" width="200" loading="lazy"></div><span>Laiton brillant</span><span class="option-final-price" data-option-key="580335_1499088"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition3" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Cuivre",0,"media/customoptions/c/u/cuivre_2.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/c/u/cuivre_2.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_6" value="1499089" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_6"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/u/cuivre_2.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/c/u/cuivre_2.jpg" alt="Cuivre" height="70" width="200" loading="lazy"></div><span>Cuivre</span><span class="option-final-price" data-option-key="580335_1499089"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition4" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Bronze",0,"media/customoptions/b/r/bronze_3.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/b/r/bronze_3.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_7" value="1499090" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_7"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/b/r/bronze_3.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/b/r/bronze_3.jpg" alt="Bronze" height="70" width="200" loading="lazy"></div><span>Bronze</span><span class="option-final-price" data-option-key="580335_1499090"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition6" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Noir mat",0,"media/customoptions/n/o/noir_mat.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/n/o/noir_mat.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_8" value="1499091" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_8"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/n/o/noir_mat.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/n/o/noir_mat.jpg" alt="Noir mat" height="70" width="200" loading="lazy"></div><span>Noir mat</span><span class="option-final-price" data-option-key="580335_1499091"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="finition8" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580335","Blanc",0,"media/customoptions/o/e/oeillets_blanc_2.jpg","","thumb_gallery",580335,"img","https://cdn4.mesrideaux.fr/customoptions/o/e/oeillets_blanc_2.jpg","")' type="radio" class="rideau-finitions-tete radio admin__control-radio option01 product-custom-option" name="options[580335]" id="options_580335_9" value="1499092" data-value="" data-selector="options[580335]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580335_9"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/o/e/oeillets_blanc_2.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/o/e/oeillets_blanc_2.jpg" alt="Blanc" height="70" width="200" loading="lazy"></div><span>Blanc</span><span class="option-final-price" data-option-key="580335_1499092"></span></label></div></div>
<!-- custom options depends -->
<input id="options_580335" type="radio" style="display:none;" price="" value="" name="options[580335]">
<!-- custom options depends -->
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499085"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499086"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499087"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499088"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499089"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499090"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499091"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580335","optionPrice":0,"optionValue":"1499092"}],
OptionId: 0 };
window.__emiproCustomOptionDefaultQueue = window.__emiproCustomOptionDefaultQueue || [];
window.__emiproCustomOptionDefaultQueue.push(payload);
if (window.__emiproCustomOptionDefaultRunnerBound) {
return;
}
window.__emiproCustomOptionDefaultRunnerBound = true;
function applyDefaultOptions() {
var queue = window.__emiproCustomOptionDefaultQueue || [];
var i, j, data, item, listNode, listInputs, input, selectNode, selectOption;
for (i = 0; i < queue.length; i++) {
data = queue[i] && queue[i].defaultOption ? queue[i].defaultOption : [];
for (j = 0; j < data.length; j++) {
item = data[j];
if (!item || String(item.optionDefaultValue) !== '1') {
continue;
}
if (item.optiontype === 'radio'
|| item.optiontype === 'checkbox'
|| item.optiontype === 'thumb_gallery'
|| item.optiontype === 'thumb_gallery_popup'
|| item.optiontype === 'thumb_gallery_multi'
) {
listNode = document.getElementById('options-' + item.optionLable + '-list');
if (!listNode) {
continue;
}
listInputs = listNode.querySelectorAll('input[value="' + item.optionValue + '"]');
if (!listInputs.length) {
continue;
}
input = listInputs[0];
input.checked = true;
input.dispatchEvent(new Event('click', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true }));
} else if (item.optiontype === 'drop_down' || item.optiontype === 'multiple') {
selectNode = document.getElementById('select_' + item.optionLable);
if (!selectNode) {
continue;
}
selectOption = selectNode.querySelector('option[value="' + item.optionValue + '"]');
if (!selectOption) {
continue;
}
selectOption.selected = true;
selectNode.dispatchEvent(new Event('change', { bubbles: true }));
}
}
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
setTimeout(applyDefaultOptions, 0);
});
} else {
setTimeout(applyDefaultOptions, 0);
}
})();
</script>
<div style="display:none"><div class="custom-div-to-show-popup"></div></div><script type="text/javascript">
var mediaurl = "https://www.mesrideaux.fr/";
var baseImageChange = "";
var enabled_tooltip = "0";
var enabled_cmi = "1";
var flag = 0;
</script>
<!-- custom options depends -->
<script type="text/javascript"> jsHide(580335); </script><script type="text/javascript">
function jsHide(optionId){
require(['jquery'], function ($) {
if (document.getElementById('options-'+optionId+'-list')) {
var getActiveClass = $('#options-'+optionId+'-list').children().hasClass('selectDepend');
if(!getActiveClass){
document.getElementById('options-'+optionId+'-list').parentElement.parentElement.style.display = 'none';
}
}
if(document.getElementById('select_'+optionId)){
if(!$('#select_'+optionId).attr('multiple')){
var getSelectedOptionValue = $('#select_'+optionId+' :selected').val();
if(!getSelectedOptionValue){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}else{
var getSelectedOption = $('#select_'+optionId+' :selected').length;
if(getSelectedOption<1){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}
}
});
}
</script>
<!-- custom options depends -->
<span
class="btn-validconfig btn btn-primary"
data-step="2"
>
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="step pdp-dropdown mb-4" id="step_3">
<button
type="button"
class="step-title pdp-dropdown__toggle w-full flex items-center justify-between gap-2 py-2 text-left"
aria-expanded="false"
>
<span class="pdp-dropdown__label">Étape 4 : Je sélectionne ma doublure</span>
<span class="pdp-dropdown__caret" aria-hidden="true"></span>
</button>
<div class="pdp-dropdown__panel" aria-hidden="true">
<div class="pdp-dropdown__inner">
<div class="step-wrapper">
<div id="doublure" class="field required">
<div class="control">
<span ></span>
<div class="options-list nested"
id="options-580330-list"><div class="field choice admin__field admin__field-option required"><input data-sku="non" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-doublure radio admin__control-radio option04 required product-custom-option" name="options[580330]" id="options_580330_2" value="1499069" data-value="" data-selector="options[580330]" price="0" lastchange="" onclick="changeRadioChek('580330','radio')" /><label class="label admin__field-label"
for="options_580330_2">Aucune<span class="option-final-price" data-option-key="580330_1499069"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="classique-blanche" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-doublure radio admin__control-radio option04 required product-custom-option" name="options[580330]" id="options_580330_3" value="1499070" data-value="" data-selector="options[580330]" price="20" lastchange="" onclick="changeRadioChek('580330','radio')" /><label class="label admin__field-label"
for="options_580330_3">Classique blanche<span class="option-final-price" data-option-key="580330_1499070"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="classique-ecrue" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-doublure radio admin__control-radio option04 required product-custom-option" name="options[580330]" id="options_580330_4" value="1499071" data-value="" data-selector="options[580330]" price="20" lastchange="" onclick="changeRadioChek('580330','radio')" /><label class="label admin__field-label"
for="options_580330_4">Classique écrue<span class="option-final-price" data-option-key="580330_1499071"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="molletonnée" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-doublure radio admin__control-radio option04 required product-custom-option" name="options[580330]" id="options_580330_5" value="1499072" data-value="" data-selector="options[580330]" price="36" lastchange="" onclick="changeRadioChek('580330','radio')" /><label class="label admin__field-label"
for="options_580330_5">Molletonnée écrue<span class="option-final-price" data-option-key="580330_1499072"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="occultante" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-doublure radio admin__control-radio option04 required product-custom-option" name="options[580330]" id="options_580330_6" value="1499073" data-value="" data-selector="options[580330]" price="26" lastchange="" onclick="changeRadioChek('580330','radio')" /><label class="label admin__field-label"
for="options_580330_6">Occultante blanche<span class="option-final-price" data-option-key="580330_1499073"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="thermique-phonique" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="rideau-doublure radio admin__control-radio option04 required product-custom-option" name="options[580330]" id="options_580330_7" value="1499074" data-value="" data-selector="options[580330]" price="65" lastchange="" onclick="changeRadioChek('580330','radio')" /><label class="label admin__field-label"
for="options_580330_7">Thermique & Phonique<span class="option-final-price" data-option-key="580330_1499074"></span></label></div></div>
<!-- custom options depends -->
<!-- custom options depends -->
<!-- custom options depends -->
<input id="options_580330" type="radio" style="display:none;" price="" value="" name="options[580330]">
<!-- custom options depends -->
<span id="options-580330-container"></span>
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580330","optionPrice":0,"optionValue":"1499069"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580330","optionPrice":20,"optionValue":"1499070"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580330","optionPrice":20,"optionValue":"1499071"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580330","optionPrice":36,"optionValue":"1499072"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580330","optionPrice":26,"optionValue":"1499073"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"580330","optionPrice":65,"optionValue":"1499074"}],
OptionId: 0 };
window.__emiproCustomOptionDefaultQueue = window.__emiproCustomOptionDefaultQueue || [];
window.__emiproCustomOptionDefaultQueue.push(payload);
if (window.__emiproCustomOptionDefaultRunnerBound) {
return;
}
window.__emiproCustomOptionDefaultRunnerBound = true;
function applyDefaultOptions() {
var queue = window.__emiproCustomOptionDefaultQueue || [];
var i, j, data, item, listNode, listInputs, input, selectNode, selectOption;
for (i = 0; i < queue.length; i++) {
data = queue[i] && queue[i].defaultOption ? queue[i].defaultOption : [];
for (j = 0; j < data.length; j++) {
item = data[j];
if (!item || String(item.optionDefaultValue) !== '1') {
continue;
}
if (item.optiontype === 'radio'
|| item.optiontype === 'checkbox'
|| item.optiontype === 'thumb_gallery'
|| item.optiontype === 'thumb_gallery_popup'
|| item.optiontype === 'thumb_gallery_multi'
) {
listNode = document.getElementById('options-' + item.optionLable + '-list');
if (!listNode) {
continue;
}
listInputs = listNode.querySelectorAll('input[value="' + item.optionValue + '"]');
if (!listInputs.length) {
continue;
}
input = listInputs[0];
input.checked = true;
input.dispatchEvent(new Event('click', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true }));
} else if (item.optiontype === 'drop_down' || item.optiontype === 'multiple') {
selectNode = document.getElementById('select_' + item.optionLable);
if (!selectNode) {
continue;
}
selectOption = selectNode.querySelector('option[value="' + item.optionValue + '"]');
if (!selectOption) {
continue;
}
selectOption.selected = true;
selectNode.dispatchEvent(new Event('change', { bubbles: true }));
}
}
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
setTimeout(applyDefaultOptions, 0);
});
} else {
setTimeout(applyDefaultOptions, 0);
}
})();
</script>
<div style="display:none"><div class="custom-div-to-show-popup"></div></div><script type="text/javascript">
var mediaurl = "https://www.mesrideaux.fr/";
var baseImageChange = "";
var enabled_tooltip = "0";
var enabled_cmi = "1";
var flag = 0;
</script>
<!-- custom options depends -->
<script type="text/javascript">
function jsHide(optionId){
require(['jquery'], function ($) {
if (document.getElementById('options-'+optionId+'-list')) {
var getActiveClass = $('#options-'+optionId+'-list').children().hasClass('selectDepend');
if(!getActiveClass){
document.getElementById('options-'+optionId+'-list').parentElement.parentElement.style.display = 'none';
}
}
if(document.getElementById('select_'+optionId)){
if(!$('#select_'+optionId).attr('multiple')){
var getSelectedOptionValue = $('#select_'+optionId+' :selected').val();
if(!getSelectedOptionValue){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}else{
var getSelectedOption = $('#select_'+optionId+' :selected').length;
if(getSelectedOption<1){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}
}
});
}
</script>
<!-- custom options depends -->
<span
class="btn-validconfig btn btn-primary"
data-step="3"
>
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="step pdp-dropdown mb-4" id="step_4">
<button
type="button"
class="step-title pdp-dropdown__toggle w-full flex items-center justify-between gap-2 py-2 text-left"
aria-expanded="false"
>
<span class="pdp-dropdown__label">Étape 5 : Je sélectionne mon tombant</span>
<span class="pdp-dropdown__caret" aria-hidden="true"></span>
</button>
<div class="pdp-dropdown__panel" aria-hidden="true">
<div class="pdp-dropdown__inner">
<div class="step-wrapper">
<div id="tombant" class="field required">
<div class="control">
<span class="hide" id="emispanlable_580334"></span>
<div class="options-list nested" style=""
id="options-580334-list"><div class="field choice admin__field admin__field-option required"><input data-sku="ausol" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580334","Au sol",0,"media/customoptions/t/o/tombant_ausol.jpg","","thumb_gallery",580334,"img","https://cdn4.mesrideaux.fr/customoptions/t/o/tombant_ausol_1.jpg","")' type="radio" class="rideau-tombant radio admin__control-radio option01 required product-custom-option" name="options[580334]" id="options_580334_2" value="1499083" data-value="" data-selector="options[580334]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580334_2"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/t/o/tombant_ausol_1.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/t/o/tombant_ausol_1.jpg" alt="Au sol" height="70" width="200" loading="lazy"></div><span>Au sol</span><span class="option-final-price" data-option-key="580334_1499083"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="cassant" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_580334","Cassant (3cm seront ajoutés à votre hauteur renseignée)",0,"media/customoptions/t/o/tombant_5cm_1.jpg","","thumb_gallery",580334,"img","https://cdn4.mesrideaux.fr/customoptions/t/o/tombant_5cm_2.jpg","")' type="radio" class="rideau-tombant radio admin__control-radio option01 required product-custom-option" name="options[580334]" id="options_580334_3" value="1499084" data-value="" data-selector="options[580334]" price="0" lastchange=""><label class="label admin__field-label"
for="options_580334_3"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/t/o/tombant_5cm_2.jpg" data-src="https://cdn4.mesrideaux.fr/customoptions/t/o/tombant_5cm_2.jpg" alt="Cassant (3cm seront ajoutés à votre hauteur renseignée)" height="70" width="200" loading="lazy"></div><span>Cassant (3cm seront ajoutés à votre hauteur renseignée)</span><span class="option-final-price" data-option-key="580334_1499084"></span></label></div></div>
<!-- custom options depends -->
<input id="options_580334" type="radio" style="display:none;" price="" value="" name="options[580334]">
<!-- custom options depends -->
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580334","optionPrice":0,"optionValue":"1499083"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"580334","optionPrice":0,"optionValue":"1499084"}],
OptionId: 0 };
window.__emiproCustomOptionDefaultQueue = window.__emiproCustomOptionDefaultQueue || [];
window.__emiproCustomOptionDefaultQueue.push(payload);
if (window.__emiproCustomOptionDefaultRunnerBound) {
return;
}
window.__emiproCustomOptionDefaultRunnerBound = true;
function applyDefaultOptions() {
var queue = window.__emiproCustomOptionDefaultQueue || [];
var i, j, data, item, listNode, listInputs, input, selectNode, selectOption;
for (i = 0; i < queue.length; i++) {
data = queue[i] && queue[i].defaultOption ? queue[i].defaultOption : [];
for (j = 0; j < data.length; j++) {
item = data[j];
if (!item || String(item.optionDefaultValue) !== '1') {
continue;
}
if (item.optiontype === 'radio'
|| item.optiontype === 'checkbox'
|| item.optiontype === 'thumb_gallery'
|| item.optiontype === 'thumb_gallery_popup'
|| item.optiontype === 'thumb_gallery_multi'
) {
listNode = document.getElementById('options-' + item.optionLable + '-list');
if (!listNode) {
continue;
}
listInputs = listNode.querySelectorAll('input[value="' + item.optionValue + '"]');
if (!listInputs.length) {
continue;
}
input = listInputs[0];
input.checked = true;
input.dispatchEvent(new Event('click', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true }));
} else if (item.optiontype === 'drop_down' || item.optiontype === 'multiple') {
selectNode = document.getElementById('select_' + item.optionLable);
if (!selectNode) {
continue;
}
selectOption = selectNode.querySelector('option[value="' + item.optionValue + '"]');
if (!selectOption) {
continue;
}
selectOption.selected = true;
selectNode.dispatchEvent(new Event('change', { bubbles: true }));
}
}
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
setTimeout(applyDefaultOptions, 0);
});
} else {
setTimeout(applyDefaultOptions, 0);
}
})();
</script>
<div style="display:none"><div class="custom-div-to-show-popup"></div></div><script type="text/javascript">
var mediaurl = "https://www.mesrideaux.fr/";
var baseImageChange = "";
var enabled_tooltip = "0";
var enabled_cmi = "1";
var flag = 0;
</script>
<!-- custom options depends -->
<script type="text/javascript">
function jsHide(optionId){
require(['jquery'], function ($) {
if (document.getElementById('options-'+optionId+'-list')) {
var getActiveClass = $('#options-'+optionId+'-list').children().hasClass('selectDepend');
if(!getActiveClass){
document.getElementById('options-'+optionId+'-list').parentElement.parentElement.style.display = 'none';
}
}
if(document.getElementById('select_'+optionId)){
if(!$('#select_'+optionId).attr('multiple')){
var getSelectedOptionValue = $('#select_'+optionId+' :selected').val();
if(!getSelectedOptionValue){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}else{
var getSelectedOption = $('#select_'+optionId+' :selected').length;
if(getSelectedOption<1){
document.getElementById('select_'+optionId).parentElement.parentElement.style.display = 'none';
document.getElementById('select_'+optionId).disabled = true;
}
}
}
});
}
</script>
<!-- custom options depends -->
<span
class="btn-validconfig btn btn-primary reloadprice"
data-step="4"
>
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="stepper-recap">
<span class="stepper-recap-title">
Veuillez valider toutes les étapes de la personnalisation </span>
<ul>
<li data-scrolltarget="#step_1" class="step_1">1</li>
<li data-scrolltarget="#step_50" class="step_50">2</li>
<li data-scrolltarget="#step_2" class="step_2">3</li>
<li data-scrolltarget="#step_3" class="step_3">4</li>
<li data-scrolltarget="#step_4" class="step_4">5</li>
</ul>
</div>
</div>
<script>
require(
[
'jquery',
'Magento_Ui/js/modal/modal'
],
function ($, modal) {
var options = {
type: 'popup',
responsive: true,
innerScroll: true,
buttons: []
};
function findByIdInDomAndShadow(id, root) {
var searchRoot = root || document;
if (!searchRoot) {
return null;
}
if (searchRoot.getElementById) {
var directMatch = searchRoot.getElementById(id);
if (directMatch) {
return directMatch;
}
}
var elements = searchRoot.querySelectorAll ? searchRoot.querySelectorAll('*') : [];
for (var i = 0; i < elements.length; i++) {
if (elements[i].shadowRoot) {
var inShadow = findByIdInDomAndShadow(id, elements[i].shadowRoot);
if (inShadow) {
return inShadow;
}
}
}
return null;
}
function initModalById(id) {
var element = findByIdInDomAndShadow(id);
if (element) {
modal(options, $(element));
}
}
function findInEventPath(event, selector) {
var path = event && event.originalEvent && event.originalEvent.composedPath
? event.originalEvent.composedPath()
: [];
for (var i = 0; i < path.length; i++) {
if (path[i] && path[i].matches && path[i].matches(selector)) {
return path[i];
}
}
if (event && event.target && event.target.closest) {
return event.target.closest(selector);
}
return null;
}
initModalById('takeMeasures');
initModalById('infoTombant');
initModalById('infoTeterideau');
$(document).on("click", function (event) {
var trigger = null;
var path = event.originalEvent && event.originalEvent.composedPath
? event.originalEvent.composedPath()
: [];
for (var i = 0; i < path.length; i++) {
if (path[i] && path[i].classList && path[i].classList.contains('openModel')) {
trigger = path[i];
break;
}
}
if (!trigger && event.target && event.target.closest) {
trigger = event.target.closest('.openModel');
}
if (!trigger) {
return;
}
var modalId = trigger.getAttribute('data-id');
var modalElement = findByIdInDomAndShadow(modalId);
if (!modalElement) {
return;
}
$(modalElement).modal('openModal');
$(modalElement).show();
});
$('#configurateur .step').first().addClass('--active');
if (window.mrSyncConfiguratorStepDropdownsFromDom) {
window.mrSyncConfiguratorStepDropdownsFromDom();
}
// $("body").on('click', '.step-title', function (e, state) {
// if (!$(this).next('.step-wrapper').is(":visible")) {
// $(this).parent().addClass("--active");
// }else {
// $(this).parent().removeClass("--active");
// }
// });
// select ept_emioptlable & addclass
var $nbrrideaux = $('.rideau-nombre.option04').parent().parent().parent().parent();
$nbrrideaux.addClass('nbr-rideaux-wrapper');
$(document).on('click', 'a[href^="#"]', function(e) {
var id = $(this).attr('href');
var $id = $(id);
if ($id.length === 0) {
return;
}
e.preventDefault();
var pos = $id.offset().top;
$('body, html').animate({scrollTop: pos});
});
// Get the modal
var modal = $("#finition-oeillets");
// Get the button that opens the modal
var btn = $('[data-sku="oeillets"]').next();
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
modal.find('.control').append('<span class="close">×</span>');
// When the user clicks the button, open the modal
btn.on('click', function() {
modal.show();
});
// When the user clicks on <span> (x), close the modal
modal.find('.close').on('click', function() {
modal.hide();
console.log('____',$('.modals-overlay'));
$('.modals-overlay').remove();
});
// close modal on click outside at anywhere
$(document).on('click', function (e) {
var closeButton = findInEventPath(e, '.action-close');
var clickedInsideModalContent = findInEventPath(e, '.modal-inner-wrap');
var clickedOverlay = findInEventPath(e, '.modals-overlay');
var clickedPopupBackdrop = findInEventPath(e, '.modal-popup._show');
var openedPopup = document.querySelector('.modal-popup._show');
if (!openedPopup) {
return;
}
if (closeButton) {
$(openedPopup).modal('closeModal');
$('.modals-overlay').remove();
return;
}
// Close on outside click (overlay/backdrop), including Shadow DOM events.
if (!clickedInsideModalContent && (clickedOverlay || clickedPopupBackdrop)) {
$(openedPopup).modal('closeModal');
$('.modals-overlay').remove();
}
});
$(document).on('change', '#finition-oeillets input[type="radio"]', function(){
modal.hide();
});
}
);
</script>
</div>
</div>
</form>
<script type="text/x-magento-init">
{
"#product_addtocart_form": {
"Magento_Catalog/js/validate-product": {
"bindSubmit": true
}
}
}
</script>
<div class="flex flex-col sm:flex-row items-end my-4 mt-0 stepper-recap-price flex-wrap">
<div role="group" aria-label="Prix">
<div class="price-box price-final_price" data-role="priceBox" data-product-id="35439" data-price-box="product-id-35439"> <span class="price-from-label"><small>Prix à partir de : </small></span>
<span class="initial"
itemprop="offers" itemscope itemtype="https://schema.org/Offer">
<span class="price">374 €</span> <meta itemprop="price" content="374">
<meta itemprop="priceCurrency" content="EUR">
TTC </span>
<span></span>
<script>
require(
[
'jquery',
],
function ($) {
setTimeout(function () {
$(".step.--active .btn-validconfig").click(function (e) {
e.preventDefault();
setTimeout(function () {
$('.price-from-label').hide();
}, 500);
});
}, 1000);
}
);
</script>
</div></div>
<div class="flex mt-4 ml-auto sm:mt-0 product-cta-add-to-cart-container">
<div
x-data="{isSampleValue: 0, samplePriceValue: '0'}"
@hyva-sample-order.window="isSampleValue = 1; samplePriceValue = $event.detail.price"
>
<input type="hidden" name="sample-price" form="product_addtocart_form" :value="samplePriceValue">
<input type="hidden" name="isSample" id="isSample" form="product_addtocart_form" :value="isSampleValue">
<button type="submit" form="product_addtocart_form" class="cursor-pointer btn btn-secondary" title="Ajouter au panier">
<span class="lg:block">Ajouter au panier </span>
</button>
</div>
</div>
</div>
<div class="flex mt-4 justify-end mb-4">
<script>
function initWishlist_6a4eea588eef5() {
return {
isLoading: false,
addToWishlist(productId) {
if (this.isLoading) {
return;
}
this.isLoading = true;
const postParams = {
action: BASE_URL + "wishlist/index/add/",
data: {
product: productId,
uenc: hyva.getUenc()
}
}
postParams.data['form_key'] = hyva.getFormKey();
postParams.data['qty'] = document.getElementById(`qty[${productId}]`)
? document.getElementById(`qty[${productId}]`).value || 1
: 1;
let postData = Object.keys(postParams.data).map(key => {
return `${key}=${postParams.data[key]}`;
}).join('&');
Array.from(document.querySelectorAll(
'[name^=options], [name^=super_attribute], [name^=bundle_option], [name^=super_group], [name^=links]')
).map(input => {
if (input.type === "select-multiple") {
Array.from(input.selectedOptions).forEach(option => {
postData += `&${input.name}=${option.value}`
})
} else {
if(!(['radio', 'checkbox', 'select'].includes(input.type) && !input.checked)) {
postData += `&${input.name}=${input.value}`
}
}
});
fetch(postParams.action, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": postData,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then((response) => {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to wishlist."
}], 5000
);
}
}).then((response) => {
if (!response) {
return;
}
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: (response.success) ? "success" : "error",
text: (response.success)
? "Produit a été ajouté à votre liste d'achats."
: response.error_message
}], 5000
);
const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch((error) => {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000
);
}).finally(() => {
this.isLoading = false;
});
}
}
}
</script>
<button x-data="initWishlist_6a4eea588eef5()"
@click.prevent="addToWishlist(35439)"
:disabled="isLoading"
:aria-busy="isLoading"
title="Ajouter à la liste d'achats"
aria-label="Ajouter à la liste d'achats"
id="add-to-wishlist"
class="btn p-2 rounded-full ml-4 relative inline-flex items-center justify-center w-9 h-9"
data-addto="wishlist"
>
<span x-show="!isLoading" x-cloak aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" aria-hidden="true"><path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"/></svg>
</span>
<span x-show="isLoading" x-cloak class="inline-flex items-center justify-center" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" class="animate-spin" aria-hidden="true"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>
</span>
<span class="sr-only" x-text="isLoading ? 'Chargement...' : ''"></span>
</button>
</div>
</div>
<div
x-data="{ expanded: false }"
class="mb-4 product-description prose relative"
>
<div
class="transition-all duration-300 product-description-text"
>
Apportez du relief, de la couleur et une vraie présence décorative à votre intérieur avec le rideau Majorelle en velours. Confectionné sur mesure, ce rideau transforme vos fenêtres en élément central pour votre pièce tout en habillant votre espace avec élégance. Son motif floral généreux, inspiré d’un jardin vibrant et lumineux, crée une atmosphère raffinée, chaleureuse et pleine de caractère. Dans votre salon, votre chambre ou votre espace de réception, il attire le regard sans jamais perdre en sophistication.
</div>
<button
type="button"
class="bg-white px-2 py-1 mt-2 text-sm font-medium underline toggle-short-description mx-auto"
>Lire la suite</button>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const toggleShortDescription = document.querySelector('.toggle-short-description');
const productDescriptionText = document.querySelector('.product-description-text');
let expanded = false;
const collapsedHeight = '45px';
// Helper to apply/collapse only if viewport < 768px
function applyShortDescBehavior() {
if (window.innerWidth < 768) {
productDescriptionText.style.transition = 'height 0.3s';
if (!expanded) {
productDescriptionText.style.height = collapsedHeight;
toggleShortDescription.textContent = 'Lire la suite';
} else {
// Ensure expanded height correct on resize
productDescriptionText.style.height = productDescriptionText.scrollHeight + 'px';
toggleShortDescription.textContent = 'Réduire';
}
toggleShortDescription.style.display = '';
} else {
// Remove inline height for desktop and hide button
productDescriptionText.style.height = '';
toggleShortDescription.style.display = 'none';
}
}
// Initial setup
applyShortDescBehavior();
toggleShortDescription.addEventListener('click', function() {
if (window.innerWidth >= 768) return; // Don't react on desktop
if (!expanded) {
productDescriptionText.style.height = productDescriptionText.scrollHeight + 'px';
toggleShortDescription.textContent = 'Réduire';
} else {
productDescriptionText.style.height = collapsedHeight;
toggleShortDescription.textContent = 'Lire la suite';
}
expanded = !expanded;
});
window.addEventListener('resize', function() {
applyShortDescBehavior();
});
});
</script>
<div class="product-additional-info">
<div class="pdp-dropdown mb-4">
<button
type="button"
class="pdp-dropdown__toggle w-full flex items-center justify-between gap-2 py-2 text-left"
aria-expanded="false"
>
<span class="pdp-dropdown__label">Descriptions</span>
<span class="pdp-dropdown__caret" aria-hidden="true"></span>
</button>
<div class="pdp-dropdown__panel" aria-hidden="true">
<div class="pdp-dropdown__inner">
<div class="leading-relaxed product-description prose">
<h2 dir="ltr"><strong>Un tissu en velours au motif floral signé Thevenon</strong></h2>
<p dir="ltr">Le rideau Majorelle en velours met à l’honneur un tissu d’éditeur au dessin expressif, édité par la Maison Thevenon. Son décor évoque des branches jaillissantes, des couleurs lumineuses et une composition végétale dynamique. Sur support velours, le motif gagne en profondeur. La matière capte la lumière, intensifie les nuances et apporte une sensation enveloppante à la décoration.</p>
<p dir="ltr">Ce tissu Majorelle convient parfaitement aux intérieurs qui recherchent une touche artistique, florale et contemporaine. Grâce à sa laize de 140 cm et à son poids de 300 g/m², il permet de réaliser des rideaux décoratifs avec un beau tombé. Son style floral imprimé s’intègre aussi bien dans une ambiance classique revisitée que dans un décor plus audacieux.</p>
<h2 dir="ltr"><strong>Une confection sur mesure au service du beau tombé</strong></h2>
<p dir="ltr">Ce rideau est confectionné selon vos dimensions afin de s’adapter précisément à vos fenêtres, à votre hauteur sous plafond et à l’effet recherché. Le sur-mesure permet d’obtenir un rendu harmonieux avec des proportions justes et une finition soignée.</p>
<p dir="ltr">Notre savoir-faire de confection valorise la richesse du velours et le mouvement du motif. Selon vos préférences, vous pouvez choisir différentes finitions pour créer un rideau élégant, pratique et parfaitement adapté à votre intérieur (tombé ample, rendu plus structuré ou esprit décoratif affirmé).</p>
<h2 dir="ltr"><strong>Mettre en valeur votre rideau Majorelle en velours</strong></h2>
<p dir="ltr">Pour un effet généreux, privilégiez une ampleur suffisante afin de révéler toute la beauté du dessin. Dans votre pièce lumineuse, le velours du tissu Majorelle apporte du relief et adoucit l’ambiance. Dans une décoration plus sobre, il devient une pièce forte, capable de réveiller l’ensemble avec élégance.</p>
<p dir="ltr">Associez ce rideau sur mesure à des teintes naturelles, profondes ou poudrées selon le coloris choisi. Le rideau Majorelle en velours est idéal pour créer une décoration intérieure expressive, raffinée et personnalisée.</p>
<p> </p> </div>
</div>
</div>
</div>
<div class="pdp-dropdown mb-4">
<button
type="button"
class="pdp-dropdown__toggle w-full flex items-center justify-between gap-2 py-2 text-left"
aria-expanded="false"
>
<span class="pdp-dropdown__label">Caractéristiques</span>
<span class="pdp-dropdown__caret" aria-hidden="true"></span>
</button>
<div class="pdp-dropdown__panel" aria-hidden="true">
<div class="pdp-dropdown__inner">
<div class="table-wrapper max-w-prose overflow-x-auto" id="product-attributes-gallery">
<table class="additional-attributes w-full">
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Réf.</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Réf."
> 2503908-thevenon </td>
</tr>
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Éditeur</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Éditeur"
> Thevenon </td>
</tr>
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Laize / Largeur</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Laize / Largeur"
> 140 cm </td>
</tr>
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Information</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Information"
> 100% Polyester </td>
</tr>
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Raccord vertical</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Raccord vertical"
> 64 cm </td>
</tr>
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Raccord horizontal</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Raccord horizontal"
> 133.5 cm </td>
</tr>
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Conseil</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Conseil"
> Prévoir un rétrécissement de 2 à 5% au premier lavage </td>
</tr>
<tr class="border-b border-gray-300 last:border-b-0">
<th class="col label w-1/2 py-2 text-left text-fg-secondary font-normal product-attribute-label"
scope="row">Informations techniques</th>
<td class="col data w-1/2 py-2 pl-2 text-left product-attribute-value"
data-th="Informations techniques"
> <div class="flex flex-wrap gap-2 fiche-technique-items"><div class="flex items-center gap-2 w-full" data-fiche-technique-id="371"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/371.png" alt="Lavage programme modéré 30°C" width="48" height="48">Lavage programme modéré 30°C</div><div class="flex items-center gap-2 w-full" data-fiche-technique-id="375"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/375.png" alt="Ne pas sécher à la machine" width="48" height="48">Ne pas sécher à la machine</div><div class="flex items-center gap-2 w-full" data-fiche-technique-id="379"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/379.png" alt="Repassage à température faible" width="48" height="48">Repassage à température faible</div><div class="flex items-center gap-2 w-full" data-fiche-technique-id="382"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/382.png" alt="Blanchiment exclu" width="48" height="48">Blanchiment exclu</div><div class="flex items-center gap-2 w-full" data-fiche-technique-id="385"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/385.png" alt="Nettoyage à sec processus de ménagement" width="48" height="48">Nettoyage à sec processus de ménagement</div></div> </td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div></section>
<div class="product-options-bottom">
</div>
<section
id="mesrideaux-product-cross-sell"
class="snap-slider product-slider my-8"
aria-label="Vous aimeriez aussi ..."
x-data
x-snap-slider.group-pager
x-defer="intersect"
>
<a
href="#mesrideaux-product-cross-sell-slider-end"
class="sr-only focus:not-sr-only focus:absolute focus:z-30 focus:bg-white"
>Press to skip carousel</a>
<div class="flex gap-2 justify-center items-center w-full text-center mb-4">
<h2 class="text-2xl font-medium">Vous aimeriez aussi ...</h2>
<div class="flex gap-2 hidden">
<button
type="button"
class="btn btn-secondary p-2 invisible"
aria-label="Previous Slide"
data-prev
disabled
><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" class="rtl:-rotate-180" aria-hidden="true"><path d="m12 19-7-7 7-7M19 12H5"/></svg>
</button>
<button
type="button"
class="btn btn-secondary p-2 invisible"
aria-label="Next Slide"
data-next
disabled
><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewbox="0 0 24 24" class="rtl:-rotate-180" aria-hidden="true"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
</button>
</div>
</div>
<div class="snap-track md:[--snap-cols:2] lg:[--snap-cols:3] xl:[--snap-cols:4]" data-track tabindex="0" aria-live="polite">
<div
id="mesrideaux-product-cross-sell-16762"
class="flex flex-col"
role="tabpanel"
>
<article class="product-block product-block--list flex flex-col item product product-item col-lg-4 col-md-4 col-sm-4 col-xs-12">
<div class="product-item-info flex flex-col flex-1" data-container="product-grid">
<a href="https://www.mesrideaux.fr/rideaux/rideau-kiowa-rainbow-1533824715" data-plp-product-url>
<div class="product-block__first">
<div class="product-block__images overflow-hidden">
<!--<span class="best lazyload">--> <!--</span>-->
<img src="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-kiowa-rainbow-vue-large.webp"
alt="RIDEAU KIOWA RAINBOW"
class="img-responsive product-image-photo lazyload"
height="216" width="216" loading="lazy" decoding="async" fetchpriority="low"
/>
<div class="product-block__see icon-search">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewbox="0 0 32 32" style="" fill="white">
<path d="M28.664 32l-10.146-10.148 0.697-0.697 9.449 9.449 1.939-1.938-9.452-9.454 0.697-0.697 10.149 10.151-3.332 3.334zM12.085 24.203c-3.342-0.003-6.366-1.365-8.549-3.563l-0.001-0.001c-4.714-4.714-4.714-12.387 0-17.102s12.388-4.715 17.102 0v0c4.714 4.714 4.714 12.387 0 17.102-0.444 0.445-0.922 0.856-1.43 1.228l-0.034 0.024c-1.961 1.443-4.423 2.31-7.088 2.312h-0zM12.085 0.987c-0.005 0-0.012 0-0.018 0-3.060 0-5.83 1.241-7.834 3.247l-0 0c-4.33 4.331-4.33 11.374 0 15.708 3.884 3.884 9.923 4.368 14.361 1.152 0.499-0.365 0.938-0.742 1.347-1.151v0c4.33-4.332 4.33-11.378 0-15.709v0c-2.005-2.006-4.775-3.248-7.835-3.248-0.007 0-0.014 0-0.021 0h0.001z"></path>
</svg>
</div>
<span class="product-block__alt-img lazyload e" data-hover-bg="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-kiowa-rainbow-gros-plan.webp"></span>
</div>
</div>
</a>
<div data-role="add-to-links" class="actions-secondary">
</div>
<div class="product-block__content product details product-item-details flex flex-col flex-1">
<a href="https://www.mesrideaux.fr/rideaux/rideau-kiowa-rainbow-1533824715" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Rideau kiowa rainbow </p>
<p class="product-block__subtitle">Romo</p> </a>
<div class="product-block__price">
<div class="product-block__price__first flex justify-between">
<span class="product-block__price__label">À partir de :</span>
<span class="product-block__price__value"> <div class="price-box price-final_price italic" data-role="priceBox" data-product-id="16762">
<span class="price-container price-final_price tax weee">
<span data-price-amount="1800.0000"
data-price-type="finalPrice"
class="price-wrapper">1 800 € </span>
</span>
<span>TTC</span>
<!--<div class="product-block__price__last text-right">-->
<span class="product-block__price__unit">
</span>
<!--</div>-->
</div>
</span>
</div>
</div>
</div>
</div>
<div class="product-block__cta">
<a href="https://www.mesrideaux.fr/rideaux/rideau-kiowa-rainbow-1533824715" class="btn btn-primary" data-plp-product-url>
<span class="classic-button width-60-button">Personnaliser</span>
</a>
</div>
</article>
</div>
<div
id="mesrideaux-product-cross-sell-32040"
class="flex flex-col"
role="tabpanel"
>
<article class="product-block product-block--list flex flex-col item product product-item col-lg-4 col-md-4 col-sm-4 col-xs-12">
<div class="product-item-info flex flex-col flex-1" data-container="product-grid">
<a href="https://www.mesrideaux.fr/rideau-mimosa.html?coloris=705" data-plp-product-url>
<div class="product-block__first">
<div class="product-block__images overflow-hidden">
<span class="new lazyload">Nouveau</span>
<!--<span class="best lazyload">--> <!--</span>-->
<img src="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-mimosa-santorin-vue-large_1_1.webp"
alt="Rideau Mimosa"
class="img-responsive product-image-photo lazyload"
height="216" width="216" loading="lazy" decoding="async" fetchpriority="low"
/>
<div class="product-block__see icon-search">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewbox="0 0 32 32" style="" fill="white">
<path d="M28.664 32l-10.146-10.148 0.697-0.697 9.449 9.449 1.939-1.938-9.452-9.454 0.697-0.697 10.149 10.151-3.332 3.334zM12.085 24.203c-3.342-0.003-6.366-1.365-8.549-3.563l-0.001-0.001c-4.714-4.714-4.714-12.387 0-17.102s12.388-4.715 17.102 0v0c4.714 4.714 4.714 12.387 0 17.102-0.444 0.445-0.922 0.856-1.43 1.228l-0.034 0.024c-1.961 1.443-4.423 2.31-7.088 2.312h-0zM12.085 0.987c-0.005 0-0.012 0-0.018 0-3.060 0-5.83 1.241-7.834 3.247l-0 0c-4.33 4.331-4.33 11.374 0 15.708 3.884 3.884 9.923 4.368 14.361 1.152 0.499-0.365 0.938-0.742 1.347-1.151v0c4.33-4.332 4.33-11.378 0-15.709v0c-2.005-2.006-4.775-3.248-7.835-3.248-0.007 0-0.014 0-0.021 0h0.001z"></path>
</svg>
</div>
<span class="product-block__alt-img lazyload e" data-hover-bg="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-mimosa-santorin-gros-plan_1_1.webp"></span>
</div>
</div>
</a>
<div data-role="add-to-links" class="actions-secondary">
</div>
<div class="product-block__content product details product-item-details flex flex-col flex-1">
<a href="https://www.mesrideaux.fr/rideau-mimosa.html?coloris=705" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Rideau mimosa </p>
<p class="product-block__subtitle">Lelièvre</p> </a>
<div class="product-block__price">
<div class="product-block__price__first flex justify-between">
<span class="product-block__price__label">À partir de :</span>
<span class="product-block__price__value"> <div class="price-box price-final_price italic" data-role="priceBox" data-product-id="32040">
<span class="price-container price-final_price tax weee">
<span data-price-amount="2008.0000"
data-price-type="finalPrice"
class="price-wrapper">2 008 € </span>
</span>
<span>TTC</span>
<!--<div class="product-block__price__last text-right">-->
<span class="product-block__price__unit">
</span>
<!--</div>-->
</div>
</span>
</div>
</div>
</div>
</div>
<div class="product-block__cta">
<a href="https://www.mesrideaux.fr/rideau-mimosa.html?coloris=705" class="btn btn-primary" data-plp-product-url>
<span class="classic-button width-60-button">Personnaliser</span>
</a>
</div>
</article>
</div>
<div
id="mesrideaux-product-cross-sell-32221"
class="flex flex-col"
role="tabpanel"
>
<article class="product-block product-block--list flex flex-col item product product-item col-lg-4 col-md-4 col-sm-4 col-xs-12">
<div class="product-item-info flex flex-col flex-1" data-container="product-grid">
<a href="https://www.mesrideaux.fr/rideau-olea-32221.html?coloris=518" data-plp-product-url>
<div class="product-block__first">
<div class="product-block__images overflow-hidden">
<!--<span class="best lazyload">--> <!--</span>-->
<img src="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-olea-or-vue-large_1_1.webp"
alt="Rideau Olea"
class="img-responsive product-image-photo lazyload"
height="216" width="216" loading="lazy" decoding="async" fetchpriority="low"
/>
<div class="product-block__see icon-search">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewbox="0 0 32 32" style="" fill="white">
<path d="M28.664 32l-10.146-10.148 0.697-0.697 9.449 9.449 1.939-1.938-9.452-9.454 0.697-0.697 10.149 10.151-3.332 3.334zM12.085 24.203c-3.342-0.003-6.366-1.365-8.549-3.563l-0.001-0.001c-4.714-4.714-4.714-12.387 0-17.102s12.388-4.715 17.102 0v0c4.714 4.714 4.714 12.387 0 17.102-0.444 0.445-0.922 0.856-1.43 1.228l-0.034 0.024c-1.961 1.443-4.423 2.31-7.088 2.312h-0zM12.085 0.987c-0.005 0-0.012 0-0.018 0-3.060 0-5.83 1.241-7.834 3.247l-0 0c-4.33 4.331-4.33 11.374 0 15.708 3.884 3.884 9.923 4.368 14.361 1.152 0.499-0.365 0.938-0.742 1.347-1.151v0c4.33-4.332 4.33-11.378 0-15.709v0c-2.005-2.006-4.775-3.248-7.835-3.248-0.007 0-0.014 0-0.021 0h0.001z"></path>
</svg>
</div>
<span class="product-block__alt-img lazyload e" data-hover-bg="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-olea-or-photo-tissu_1.webp"></span>
</div>
</div>
</a>
<div data-role="add-to-links" class="actions-secondary">
</div>
<div class="product-block__content product details product-item-details flex flex-col flex-1">
<a href="https://www.mesrideaux.fr/rideau-olea-32221.html?coloris=518" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Rideau olea </p>
<p class="product-block__subtitle">Lelièvre</p> </a>
<div class="product-block__price">
<div class="product-block__price__first flex justify-between">
<span class="product-block__price__label">À partir de :</span>
<span class="product-block__price__value"> <div class="price-box price-final_price italic" data-role="priceBox" data-product-id="32221">
<span class="price-container price-final_price tax weee">
<span data-price-amount="1404.0000"
data-price-type="finalPrice"
class="price-wrapper">1 404 € </span>
</span>
<span>TTC</span>
<!--<div class="product-block__price__last text-right">-->
<span class="product-block__price__unit">
</span>
<!--</div>-->
</div>
</span>
</div>
</div>
</div>
</div>
<div class="product-block__cta">
<a href="https://www.mesrideaux.fr/rideau-olea-32221.html?coloris=518" class="btn btn-primary" data-plp-product-url>
<span class="classic-button width-60-button">Personnaliser</span>
</a>
</div>
</article>
</div>
<div
id="mesrideaux-product-cross-sell-35440"
class="flex flex-col"
role="tabpanel"
>
<article class="product-block product-block--list flex flex-col item product product-item col-lg-4 col-md-4 col-sm-4 col-xs-12">
<div class="product-item-info flex flex-col flex-1" data-container="product-grid">
<a href="https://www.mesrideaux.fr/rideau-celine-sur-coton.html?coloris=1007" data-plp-product-url>
<div class="product-block__first">
<div class="product-block__images overflow-hidden">
<span class="new lazyload">Nouveau</span>
<!--<span class="best lazyload">--> <!--</span>-->
<img src="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-celine-fond-ficelle-vue-large_1_1.webp"
alt="RIDEAU CELINE"
class="img-responsive product-image-photo lazyload"
height="216" width="216" loading="lazy" decoding="async" fetchpriority="low"
/>
<div class="product-block__see icon-search">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewbox="0 0 32 32" style="" fill="white">
<path d="M28.664 32l-10.146-10.148 0.697-0.697 9.449 9.449 1.939-1.938-9.452-9.454 0.697-0.697 10.149 10.151-3.332 3.334zM12.085 24.203c-3.342-0.003-6.366-1.365-8.549-3.563l-0.001-0.001c-4.714-4.714-4.714-12.387 0-17.102s12.388-4.715 17.102 0v0c4.714 4.714 4.714 12.387 0 17.102-0.444 0.445-0.922 0.856-1.43 1.228l-0.034 0.024c-1.961 1.443-4.423 2.31-7.088 2.312h-0zM12.085 0.987c-0.005 0-0.012 0-0.018 0-3.060 0-5.83 1.241-7.834 3.247l-0 0c-4.33 4.331-4.33 11.374 0 15.708 3.884 3.884 9.923 4.368 14.361 1.152 0.499-0.365 0.938-0.742 1.347-1.151v0c4.33-4.332 4.33-11.378 0-15.709v0c-2.005-2.006-4.775-3.248-7.835-3.248-0.007 0-0.014 0-0.021 0h0.001z"></path>
</svg>
</div>
<span class="product-block__alt-img lazyload e" data-hover-bg="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-celine-fond-ficelle-photo-tissu_1_1.webp"></span>
</div>
</div>
</a>
<div data-role="add-to-links" class="actions-secondary">
</div>
<div class="product-block__content product details product-item-details flex flex-col flex-1">
<a href="https://www.mesrideaux.fr/rideau-celine-sur-coton.html?coloris=1007" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Rideau celine </p>
<p class="product-block__subtitle">Thevenon</p> </a>
<div class="product-block__price">
<div class="product-block__price__first flex justify-between">
<span class="product-block__price__label">À partir de :</span>
<span class="product-block__price__value"> <div class="price-box price-final_price italic" data-role="priceBox" data-product-id="35440">
<span class="price-container price-final_price tax weee">
<span data-price-amount="340.0000"
data-price-type="finalPrice"
class="price-wrapper">340 € </span>
</span>
<span>TTC</span>
<!--<div class="product-block__price__last text-right">-->
<span class="product-block__price__unit">
</span>
<!--</div>-->
</div>
</span>
</div>
</div>
</div>
</div>
<div class="product-block__cta">
<a href="https://www.mesrideaux.fr/rideau-celine-sur-coton.html?coloris=1007" class="btn btn-primary" data-plp-product-url>
<span class="classic-button width-60-button">Personnaliser</span>
</a>
</div>
</article>
</div>
<div
id="mesrideaux-product-cross-sell-32428"
class="flex flex-col"
role="tabpanel"
>
<article class="product-block product-block--list flex flex-col item product product-item col-lg-4 col-md-4 col-sm-4 col-xs-12">
<div class="product-item-info flex flex-col flex-1" data-container="product-grid">
<a href="https://www.mesrideaux.fr/rideau-kimono-flowers.html?coloris=814" data-plp-product-url>
<div class="product-block__first">
<div class="product-block__images overflow-hidden">
<span class="new lazyload">Nouveau</span>
<!--<span class="best lazyload">--> <!--</span>-->
<img src="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-kimono-flowers-fond-rouge-vue-large-.webp"
alt="Rideau Kimono Flowers"
class="img-responsive product-image-photo lazyload"
height="216" width="216" loading="lazy" decoding="async" fetchpriority="low"
/>
<div class="product-block__see icon-search">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewbox="0 0 32 32" style="" fill="white">
<path d="M28.664 32l-10.146-10.148 0.697-0.697 9.449 9.449 1.939-1.938-9.452-9.454 0.697-0.697 10.149 10.151-3.332 3.334zM12.085 24.203c-3.342-0.003-6.366-1.365-8.549-3.563l-0.001-0.001c-4.714-4.714-4.714-12.387 0-17.102s12.388-4.715 17.102 0v0c4.714 4.714 4.714 12.387 0 17.102-0.444 0.445-0.922 0.856-1.43 1.228l-0.034 0.024c-1.961 1.443-4.423 2.31-7.088 2.312h-0zM12.085 0.987c-0.005 0-0.012 0-0.018 0-3.060 0-5.83 1.241-7.834 3.247l-0 0c-4.33 4.331-4.33 11.374 0 15.708 3.884 3.884 9.923 4.368 14.361 1.152 0.499-0.365 0.938-0.742 1.347-1.151v0c4.33-4.332 4.33-11.378 0-15.709v0c-2.005-2.006-4.775-3.248-7.835-3.248-0.007 0-0.014 0-0.021 0h0.001z"></path>
</svg>
</div>
<span class="product-block__alt-img lazyload e" data-hover-bg="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-kimono-flowers-fond-rouge-gros-plan_1.webp"></span>
</div>
</div>
</a>
<div data-role="add-to-links" class="actions-secondary">
</div>
<div class="product-block__content product details product-item-details flex flex-col flex-1">
<a href="https://www.mesrideaux.fr/rideau-kimono-flowers.html?coloris=814" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Rideau kimono flowers </p>
<p class="product-block__subtitle">Thevenon</p> </a>
<div class="product-block__price">
<div class="product-block__price__first flex justify-between">
<span class="product-block__price__label">À partir de :</span>
<span class="product-block__price__value"> <div class="price-box price-final_price italic" data-role="priceBox" data-product-id="32428">
<span class="price-container price-final_price tax weee">
<span data-price-amount="340.0000"
data-price-type="finalPrice"
class="price-wrapper">340 € </span>
</span>
<span>TTC</span>
<!--<div class="product-block__price__last text-right">-->
<span class="product-block__price__unit">
</span>
<!--</div>-->
</div>
</span>
</div>
</div>
</div>
</div>
<div class="product-block__cta">
<a href="https://www.mesrideaux.fr/rideau-kimono-flowers.html?coloris=814" class="btn btn-primary" data-plp-product-url>
<span class="classic-button width-60-button">Personnaliser</span>
</a>
</div>
</article>
</div>
<div
id="mesrideaux-product-cross-sell-21896"
class="flex flex-col"
role="tabpanel"
>
<article class="product-block product-block--list flex flex-col item product product-item col-lg-4 col-md-4 col-sm-4 col-xs-12">
<div class="product-item-info flex flex-col flex-1" data-container="product-grid">
<a href="https://www.mesrideaux.fr/rideaux/rideau-merlin-heure-bleue" data-plp-product-url>
<div class="product-block__first">
<div class="product-block__images overflow-hidden">
<!--<span class="best lazyload">--> <!--</span>-->
<img src="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-merlin-heure-bleue-vue-large.webp"
alt="RIDEAU MERLIN HEURE BLEUE"
class="img-responsive product-image-photo lazyload"
height="216" width="216" loading="lazy" decoding="async" fetchpriority="low"
/>
<div class="product-block__see icon-search">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewbox="0 0 32 32" style="" fill="white">
<path d="M28.664 32l-10.146-10.148 0.697-0.697 9.449 9.449 1.939-1.938-9.452-9.454 0.697-0.697 10.149 10.151-3.332 3.334zM12.085 24.203c-3.342-0.003-6.366-1.365-8.549-3.563l-0.001-0.001c-4.714-4.714-4.714-12.387 0-17.102s12.388-4.715 17.102 0v0c4.714 4.714 4.714 12.387 0 17.102-0.444 0.445-0.922 0.856-1.43 1.228l-0.034 0.024c-1.961 1.443-4.423 2.31-7.088 2.312h-0zM12.085 0.987c-0.005 0-0.012 0-0.018 0-3.060 0-5.83 1.241-7.834 3.247l-0 0c-4.33 4.331-4.33 11.374 0 15.708 3.884 3.884 9.923 4.368 14.361 1.152 0.499-0.365 0.938-0.742 1.347-1.151v0c4.33-4.332 4.33-11.378 0-15.709v0c-2.005-2.006-4.775-3.248-7.835-3.248-0.007 0-0.014 0-0.021 0h0.001z"></path>
</svg>
</div>
<span class="product-block__alt-img lazyload e" data-hover-bg="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-merlin-heure-bleue-gros-plan.webp"></span>
</div>
</div>
</a>
<div data-role="add-to-links" class="actions-secondary">
</div>
<div class="product-block__content product details product-item-details flex flex-col flex-1">
<a href="https://www.mesrideaux.fr/rideaux/rideau-merlin-heure-bleue" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Rideau merlin heure bleue </p>
<p class="product-block__subtitle">Lelièvre</p> </a>
<div class="product-block__price">
<div class="product-block__price__first flex justify-between">
<span class="product-block__price__label">À partir de :</span>
<span class="product-block__price__value"> <div class="price-box price-final_price italic" data-role="priceBox" data-product-id="21896">
<span class="price-container price-final_price tax weee">
<span data-price-amount="1972.0000"
data-price-type="finalPrice"
class="price-wrapper">1 972 € </span>
</span>
<span>TTC</span>
<!--<div class="product-block__price__last text-right">-->
<span class="product-block__price__unit">
</span>
<!--</div>-->
</div>
</span>
</div>
</div>
</div>
</div>
<div class="product-block__cta">
<a href="https://www.mesrideaux.fr/rideaux/rideau-merlin-heure-bleue" class="btn btn-primary" data-plp-product-url>
<span class="classic-button width-60-button">Personnaliser</span>
</a>
</div>
</article>
</div>
<div
id="mesrideaux-product-cross-sell-32142"
class="flex flex-col"
role="tabpanel"
>
<article class="product-block product-block--list flex flex-col item product product-item col-lg-4 col-md-4 col-sm-4 col-xs-12">
<div class="product-item-info flex flex-col flex-1" data-container="product-grid">
<a href="https://www.mesrideaux.fr/rideau-elvis-jacquard.html?coloris=1000" data-plp-product-url>
<div class="product-block__first">
<div class="product-block__images overflow-hidden">
<!--<span class="best lazyload">--> <!--</span>-->
<img src="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-elvis-jacquard-noir-orange-bleu-vue-large_1.webp"
alt="Rideau Elvis Jacquard"
class="img-responsive product-image-photo lazyload"
height="216" width="216" loading="lazy" decoding="async" fetchpriority="low"
/>
<div class="product-block__see icon-search">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewbox="0 0 32 32" style="" fill="white">
<path d="M28.664 32l-10.146-10.148 0.697-0.697 9.449 9.449 1.939-1.938-9.452-9.454 0.697-0.697 10.149 10.151-3.332 3.334zM12.085 24.203c-3.342-0.003-6.366-1.365-8.549-3.563l-0.001-0.001c-4.714-4.714-4.714-12.387 0-17.102s12.388-4.715 17.102 0v0c4.714 4.714 4.714 12.387 0 17.102-0.444 0.445-0.922 0.856-1.43 1.228l-0.034 0.024c-1.961 1.443-4.423 2.31-7.088 2.312h-0zM12.085 0.987c-0.005 0-0.012 0-0.018 0-3.060 0-5.83 1.241-7.834 3.247l-0 0c-4.33 4.331-4.33 11.374 0 15.708 3.884 3.884 9.923 4.368 14.361 1.152 0.499-0.365 0.938-0.742 1.347-1.151v0c4.33-4.332 4.33-11.378 0-15.709v0c-2.005-2.006-4.775-3.248-7.835-3.248-0.007 0-0.014 0-0.021 0h0.001z"></path>
</svg>
</div>
<span class="product-block__alt-img lazyload e" data-hover-bg="https://cdn4.mesrideaux.fr/catalog/product/cache/eddd32ef720e909fecec8d69051e6d0d/r/i/rideau-elvis-jacquard-noir-orange-bleu-gros-plan_1.webp"></span>
</div>
</div>
</a>
<div data-role="add-to-links" class="actions-secondary">
</div>
<div class="product-block__content product details product-item-details flex flex-col flex-1">
<a href="https://www.mesrideaux.fr/rideau-elvis-jacquard.html?coloris=1000" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Rideau elvis jacquard </p>
<p class="product-block__subtitle">Thevenon</p> </a>
<div class="product-block__price">
<div class="product-block__price__first flex justify-between">
<span class="product-block__price__label">À partir de :</span>
<span class="product-block__price__value"> <div class="price-box price-final_price italic" data-role="priceBox" data-product-id="32142">
<span class="price-container price-final_price tax weee">
<span data-price-amount="532.0000"
data-price-type="finalPrice"
class="price-wrapper">532 € </span>
</span>
<span>TTC</span>
<!--<div class="product-block__price__last text-right">-->
<span class="product-block__price__unit">
</span>
<!--</div>-->
</div>
</span>
</div>
</div>
</div>
</div>
<div class="product-block__cta">
<a href="https://www.mesrideaux.fr/rideau-elvis-jacquard.html?coloris=1000" class="btn btn-primary" data-plp-product-url>
<span class="classic-button width-60-button">Personnaliser</span>
</a>
</div>
</article>
</div>
</div>
<div class="snap-pager" data-pager>
<a
href="#mesrideaux-product-cross-sell-16762"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about RIDEAU KIOWA RAINBOW </span>
</a>
<a
href="#mesrideaux-product-cross-sell-32040"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about Rideau Mimosa </span>
</a>
<a
href="#mesrideaux-product-cross-sell-32221"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about Rideau Olea </span>
</a>
<a
href="#mesrideaux-product-cross-sell-35440"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about RIDEAU CELINE </span>
</a>
<a
href="#mesrideaux-product-cross-sell-32428"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about Rideau Kimono Flowers </span>
</a>
<a
href="#mesrideaux-product-cross-sell-21896"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about RIDEAU MERLIN HEURE BLEUE </span>
</a>
<a
href="#mesrideaux-product-cross-sell-32142"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about Rideau Elvis Jacquard </span>
</a>
</div>
<span id="mesrideaux-product-cross-sell-slider-end" tabindex="-1"></span>
</section>
<!-- <section aria-label=""> -->
<!-- </section> -->
</div> <div id="alma-widget"></div>
<script type="text/x-magento-init">
{
"#alma\u002Dwidget": {
"Alma_MonthlyPayments/js/view/catalog/badge": {
"customDisplay" : {
"hasCustomPosition" : false,
"customContainerSelector" : "\u0023maincontent",
"isPrepend" : true },
"containerId" : "alma\u002Dwidget",
"productPrice" : 4110,
"useQuantityForWidgetPrice": true,
"productId": 35439,
"merchantId": "merchant_11uc97j6O9dZT6Z4PecWN7RA4vpkJ1IaAT",
"activeMode": "LIVE",
"locale": "fr",
"jsonPlans": [{"installmentsCount":2,"minAmount":5000,"maxAmount":300000,"deferredDays":0,"deferredMonths":0},{"installmentsCount":3,"minAmount":5000,"maxAmount":300000,"deferredDays":0,"deferredMonths":0},{"installmentsCount":4,"minAmount":5000,"maxAmount":300000,"deferredDays":0,"deferredMonths":0}] }
}
}
</script>
</div></div></div></main><footer class="page-footer"><div class="footer content"><style>#html-body [data-pb-style=M1HA2FN],#html-body [data-pb-style=O26AHVQ]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=M1HA2FN]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=O26AHVQ]{align-self:stretch}#html-body [data-pb-style=Y52369T]{display:flex;width:100%}#html-body [data-pb-style=LTR636G]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:20%;align-self:stretch}#html-body [data-pb-style=ORGW39L]{border-style:none}#html-body [data-pb-style=B19THHK],#html-body [data-pb-style=EXJ44W4]{max-width:100%;height:auto}#html-body [data-pb-style=QL7J452]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:20%;align-self:stretch}#html-body [data-pb-style=RSWEPXA]{border-style:none}#html-body [data-pb-style=PCAVPF1],#html-body [data-pb-style=W5AF6BC]{max-width:100%;height:auto}#html-body [data-pb-style=LWP7OW4]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:20%;align-self:stretch}#html-body [data-pb-style=OW3HGFW]{border-style:none}#html-body [data-pb-style=IAN9EP8],#html-body [data-pb-style=J2LQSG1]{max-width:100%;height:auto}#html-body [data-pb-style=BCKGN1M]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:20%;align-self:stretch}#html-body [data-pb-style=CJYMKTF]{border-style:none}#html-body [data-pb-style=LY5E1E1],#html-body [data-pb-style=WU6V83T]{max-width:100%;height:auto}#html-body [data-pb-style=XAQPWKE]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:20%;align-self:stretch}#html-body [data-pb-style=HGTGEEL]{border-style:none}#html-body [data-pb-style=CR3KM6H],#html-body [data-pb-style=YX61JBX]{max-width:100%;height:auto}@media only screen and (max-width: 767px) { #html-body [data-pb-style=CJYMKTF],#html-body [data-pb-style=HGTGEEL],#html-body [data-pb-style=ORGW39L],#html-body [data-pb-style=OW3HGFW],#html-body [data-pb-style=RSWEPXA]{border-style:none} }</style><div data-content-type="row" data-appearance="contained" data-element="main"><div class="container footer-reassurance" 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-background-lazy-load="false" data-element="inner" data-pb-style="M1HA2FN"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="15" data-background-lazy-load="false" data-element="main" data-pb-style="O26AHVQ"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="Y52369T"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="LTR636G"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="ORGW39L"><img class="pagebuilder-mobile-hidden" src="https://cdn4.mesrideaux.fr/wysiwyg/gift-box.svg" alt="Livraison gratuite" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="desktop_image" data-pb-style="EXJ44W4"><img class="pagebuilder-mobile-only" src="https://cdn4.mesrideaux.fr/wysiwyg/gift-box.svg" alt="Livraison gratuite" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="mobile_image" data-pb-style="B19THHK"></figure><div data-content-type="text" data-appearance="default" data-element="main"><div class="c-title">Livraison gratuite</div>
<p><span class="c-content">À partir de 100€TTC, partout en France métropolitaine</span></p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="QL7J452"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="RSWEPXA"><img class="pagebuilder-mobile-hidden" src="https://cdn4.mesrideaux.fr/wysiwyg/diamond_1.svg" alt="Qualité garantie" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="desktop_image" data-pb-style="PCAVPF1"><img class="pagebuilder-mobile-only" src="https://cdn4.mesrideaux.fr/wysiwyg/diamond_1.svg" alt="Qualité garantie" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="mobile_image" data-pb-style="W5AF6BC"></figure><div data-content-type="text" data-appearance="default" data-element="main"><div class="c-title">
<div class="c-title">Qualité garantie</div>
<span class="c-content">Tous nos tissus et confections sont garantis 2 ans</span></div></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="LWP7OW4"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="OW3HGFW"><img class="pagebuilder-mobile-hidden" src="https://cdn4.mesrideaux.fr/wysiwyg/chat-bubble.svg" alt="Conseil" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="desktop_image" data-pb-style="J2LQSG1"><img class="pagebuilder-mobile-only" src="https://cdn4.mesrideaux.fr/wysiwyg/chat-bubble.svg" alt="Conseil" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="mobile_image" data-pb-style="IAN9EP8"></figure><div data-content-type="text" data-appearance="default" data-element="main"><div class="c-title">
<div class="c-title">Nos conseils</div>
<p class="c-content">Une expertise métier approuvée au service de nos clients</p>
</div></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="BCKGN1M"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="CJYMKTF"><img class="pagebuilder-mobile-hidden" src="https://cdn4.mesrideaux.fr/wysiwyg/eiffel-tower.svg" alt="Fabrication française" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="desktop_image" data-pb-style="WU6V83T"><img class="pagebuilder-mobile-only" src="https://cdn4.mesrideaux.fr/wysiwyg/eiffel-tower.svg" alt="Fabrication française" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="mobile_image" data-pb-style="LY5E1E1"></figure><div data-content-type="text" data-appearance="default" data-element="main"><div class="c-title">
<div class="c-title">Fabrication française</div>
<span class="c-content">Pour l'immense majorité de nos produits</span></div></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-background-lazy-load="" data-element="main" data-pb-style="XAQPWKE"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="HGTGEEL"><img class="pagebuilder-mobile-hidden" src="https://cdn4.mesrideaux.fr/wysiwyg/echantillon_1.svg" alt="échantillons" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="desktop_image" data-pb-style="CR3KM6H"><img class="pagebuilder-mobile-only" src="https://cdn4.mesrideaux.fr/wysiwyg/echantillon_1.svg" alt="échantillons" title="" width="" height="" loading="lazy" data-use-native-image-dimensions="true" data-element="mobile_image" data-pb-style="YX61JBX"></figure><div data-content-type="text" data-appearance="default" data-element="main"><div class="c-title">
<div class="c-title">Échantillons à domicile</div>
<span class="c-content">Pour être sûr de votre choix</span></div></div></div></div></div></div></div><!-- Optimus -->
<script type="text/javascript">
(function () {
var d = document;
var g = d.createElement('script');
var s = d.getElementsByTagName('script')[0];
g.type = 'text/javascript';
g.async = true;
g.defer = true;
g.src = "https://j01l4h3n.com/optimus-TB9jPsnck.js";
s.parentNode.insertBefore(g, s);
})();
</script>
<!-- End Optimus Code -->
<div class="content newsletter-custom text-center py-section">
<div class="container py-0">
<h2>RESTONS EN CONTACT !</h2>
</div>
<form class="form subscribe amform-form"
novalidate
action="https://www.mesrideaux.fr/newsletter/subscriber/new/"
method="post"
data-mage-init='{"validation": {"errorClass": "mage-error"}}'
id="newsletter-validate-detail"
x-data="newsletterForm()"
x-on:submit.prevent="submit($event)">
<input name="form_key" type="hidden" value="fjQIJcI8gxUDUYBO" />
<div class="container-newsletter container">
<div class="field newsletter content flex justify-center items-center">
<div class="field newsletter custom-container-field-newsletter">
<div class="control">
<input class="input-text form-control input-lg"
name="email"
type="email"
id="newsletter"
placeholder="Entrez votre adresse email"
data-validate="{required:true, 'validate-email':true}"
x-model="email"
x-on:focus="showRgpd = true"
/>
</div>
</div>
<div class="actions container-button-newsletter">
<button class="classic-button btn btn-primary" type="submit">
<span>Je m'inscris</span>
</button>
</div>
</div>
<div class="message" x-show="message" x-cloak>
<span id="loading-message" x-text="message" :class="statusClass"></span>
</div>
<div class="field newsletter rgpd" x-show="showRgpd" x-cloak>
<div class="c-checkbox">
<label for="newsletter-rgpd-consent">
<span>En soumettant ce formulaire, j’accepte que les informations saisies soient utilisées pour apporter une réponse par mail ou par téléphone à ma demande</span>
</label>
<div class="field newsletter custom-container-field-newsletter">
<div class="control">
<input
id="newsletter-rgpd-consent"
type="checkbox"
name="newsletter-rgpd-consent"
style="margin-top: -47px"
required data-validation="required" data-validation-error-msg="Vous devez accepter de recevoir la newsletter" data-validate="{required:true}" >
</div>
</div>
</div>
<script>
/* (() => {
const initConsentCheckbox = () => {
const checkboxArgs = {
'checkboxElement': document.querySelector('#newsletter-rgpd-consent'),
'triggerElement': document.querySelector('#newsletter-validate-detail div.container-button-newsletter button'),
'consentCheckboxID': '63a57a314ad00ca96337d6e2'
};
const checkbox = new CheckboxAxeptio(checkboxArgs);
}
if (document.readyState === 'complete') {
initConsentCheckbox();
} else {
document.addEventListener("DOMContentLoaded", initConsentCheckbox);
}
})();*/
</script>
</div>
</div>
</form>
<div class="social-media-newsletter">
<div class="social-media-newsletter__item">
<a href="https://www.facebook.com/mesRideauxfr-114783795207929/" target="_blank">
<img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/facebook.svg" alt="facebook" >
</a>
</div>
<div class="social-media-newsletter__item">
<a href="https://www.instagram.com/mesrideaux/" target="_blank">
<img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/instagram.svg" alt="instagrm" >
</a>
</div>
<div class="social-media-newsletter__item">
<a href="https://fr.pinterest.com/mesrideauxfr/" target="_blank">
<img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/pinterest.svg" alt="pinterest" >
</a>
</div>
</div>
</div>
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('newsletterForm', () => ({
showRgpd: false,
email: '',
message: '',
statusClass: '',
resetForm() {
setTimeout(() => {
this.message = '';
this.email = '';
this.statusClass = '';
}, 3000);
},
async submit(event) {
const form = event.target;
const url = form.action;
// Validation côté client
const email = this.email.trim();
const consentCheckbox = document.querySelector('#newsletter-rgpd-consent');
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
this.statusClass = 'error';
if (!email) {
this.message = 'Veuillez saisir votre adresse e-mail.';
this.resetForm();
return;
}
if (!emailRegex.test(email)) {
this.message = 'Veuillez saisir une adresse e-mail valide.';
this.resetForm();
return;
}
if (consentCheckbox && !consentCheckbox.checked) {
this.message = 'Veuillez cocher la case de consentement pour la newsletter.';
this.resetForm();
return;
}
this.statusClass = '';
this.message = 'Envoi en cours...';
try {
const formKeyInput = form.querySelector('input[name="form_key"]');
const formKey = formKeyInput ? formKeyInput.value : '';
const body = new URLSearchParams({ email,form_key: formKey }).toString();
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
body
});
const data = await response.json().catch(() => ({}));
if (data.status && data.status !== 'ERROR') {
this.email = '';
this.resetForm();
}
this.statusClass = data.status === 'ERROR' ? 'error' : 'success';
this.message = data.msg || 'Votre demande a été prise en compte.';
this.resetForm();
} catch (e) {
this.statusClass = 'error';
this.message = e.message || 'Une erreur est survenue.';
this.resetForm();
}
}
}));
});
</script>
<div class="bg-ivory">
<div class="container">
<div class="flex flex-wrap gap-y-16">
<nav
class="footer-menu w-full"
data-mage-init='{"snowdogMenu": {}}'
>
<ul class="footer-menu__list flex flex-wrap lg:gap-x-4 lg:gap-y-2">
<li class="footer-menu__item footer-menu__item--parent w-full md:w-1/2 lg:w-auto lg:flex-1">
<span class="footer-menu__item-toggle">
<span
data-menu="menu-88" class="footer-menu__link" tabindex="0"
>
Nos Services </span>
</span>
<div class="footer-menu__submenu">
<ul class="footer-menu__inner-list footer-menu__inner-list--level1" data-menu="menu-88">
<li class="footer-menu__inner-item footer-menu__inner-item--all footer-menu__inner-item--level1">
<span
class="footer-menu__inner-link" tabindex="0"
>
Tout voir </span>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="/notre-valeur-ajoutee"
data-menu="menu-89" class="footer-menu__inner-link" >
Notre valeur ajoutée </a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/prendre-des-mesures"
class="footer-menu__inner-link"
data-menu="menu-100">
Prendre des mesures</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/faq"
class="footer-menu__inner-link"
data-menu="menu-101">
FAQ</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/videos"
class="footer-menu__inner-link"
data-menu="menu-102">
Vidéos</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/b2b"
class="footer-menu__inner-link"
data-menu="menu-103">
Service BtoB</a>
</li>
</ul>
</div>
</li>
<li class="footer-menu__item footer-menu__item--parent w-full md:w-1/2 lg:w-auto lg:flex-1">
<span class="footer-menu__item-toggle">
<span
data-menu="menu-90" class="footer-menu__link" tabindex="0"
>
Nos marques </span>
</span>
<div class="footer-menu__submenu">
<ul class="footer-menu__inner-list footer-menu__inner-list--level1" data-menu="menu-90">
<li class="footer-menu__inner-item footer-menu__inner-item--all footer-menu__inner-item--level1">
<span
class="footer-menu__inner-link" tabindex="0"
>
Tout voir </span>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/thevenon.html"
class="footer-menu__inner-link"
data-menu="menu-104">
Thevenon</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/casal.html"
class="footer-menu__inner-link"
data-menu="menu-302">
Casal</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/luciano-marcato.html"
class="footer-menu__inner-link"
data-menu="menu-307">
Luciano Marcato</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/pierre-frey.html"
class="footer-menu__inner-link"
data-menu="menu-111">
Pierre Frey</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/jab.html"
class="footer-menu__inner-link"
data-menu="menu-106">
JAB</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/lelievre.html"
class="footer-menu__inner-link"
data-menu="menu-107">
Lelièvre</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/gaston-y-daniela.html"
class="footer-menu__inner-link"
data-menu="menu-309">
Gaston y Daniela</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/elitis.html"
class="footer-menu__inner-link"
data-menu="menu-105">
Elitis</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/createurs/romo.html"
class="footer-menu__inner-link"
data-menu="menu-109">
Romo</a>
</li>
</ul>
</div>
</li>
<li class="footer-menu__item footer-menu__item--parent w-full md:w-1/2 lg:w-auto lg:flex-1">
<span class="footer-menu__item-toggle">
<span
data-menu="menu-92" class="footer-menu__link" tabindex="0"
>
Nos Produits </span>
</span>
<div class="footer-menu__submenu">
<ul class="footer-menu__inner-list footer-menu__inner-list--level1" data-menu="menu-92">
<li class="footer-menu__inner-item footer-menu__inner-item--all footer-menu__inner-item--level1">
<span
class="footer-menu__inner-link" tabindex="0"
>
Tout voir </span>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/je-decouvre-sur-mesure"
class="footer-menu__inner-link"
data-menu="menu-93">
Je découvre</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/rideaux.html"
class="footer-menu__inner-link"
data-menu="menu-114">
Nos Rideaux sur mesure</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/stores-bateaux.html"
class="footer-menu__inner-link"
data-menu="menu-115">
Nos Stores Bateau</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/tissus.html"
class="footer-menu__inner-link"
data-menu="menu-117">
Nos Tissus</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="/coussins.html"
data-menu="menu-118" class="footer-menu__inner-link" >
Nos Coussins </a>
</li>
</ul>
</div>
</li>
<li class="footer-menu__item footer-menu__item--parent w-full md:w-1/2 lg:w-auto lg:flex-1">
<span class="footer-menu__item-toggle">
<span
data-menu="menu-94" class="footer-menu__link" tabindex="0"
>
À propos </span>
</span>
<div class="footer-menu__submenu">
<ul class="footer-menu__inner-list footer-menu__inner-list--level1" data-menu="menu-94">
<li class="footer-menu__inner-item footer-menu__inner-item--all footer-menu__inner-item--level1">
<span
class="footer-menu__inner-link" tabindex="0"
>
Tout voir </span>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="/contact"
data-menu="menu-122" class="footer-menu__inner-link" >
Nous contacter </a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/cgv"
class="footer-menu__inner-link"
data-menu="menu-123">
Conditions générales de vente</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/mentions-legales"
class="footer-menu__inner-link"
data-menu="menu-124">
Mentions légales</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<a
href="https://www.mesrideaux.fr/qui-sommes-nous"
class="footer-menu__inner-link"
data-menu="menu-126">
Qui sommes nous !</a>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1">
<div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="avis-verif-header">
<a href="https://www.avis-verifies.com/avis-clients/mesrideaux.fr" target="_blank">
<img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/avis-verifies.png" alt="Avis Verifies" >
<div class="avis-verif-header__content flex items-start justify-center">
<div class="o-stars">
<!-- Utiliser la largeur de .c-content pour le rendu de la note (ratio / 5 à exprimer en %)-->
<div class="c-content lazyload" data-loaded="true"></div>
<div class="c-bkg lazyload" data-loaded="true"></div>
</div>
<strong>4.8/5</strong>
</div>
</a>
</div></div> </li>
</ul>
</div>
</li>
<li class="footer-menu__item footer-menu__item--parent contact-nos-experts w-full md:w-1/2 lg:w-auto lg:flex-1">
<span class="footer-menu__item-toggle">
<span
data-menu="menu-96" class="footer-menu__link" tabindex="0"
>
Contactez nos experts ! </span>
</span>
<div class="footer-menu__submenu">
<ul class="footer-menu__inner-list footer-menu__inner-list--level1" data-menu="menu-96">
<li class="footer-menu__inner-item footer-menu__inner-item--all footer-menu__inner-item--level1">
<span
class="footer-menu__inner-link" tabindex="0"
>
Tout voir </span>
</li>
<li class="footer-menu__inner-item footer-menu__inner-item--level1 footer-contact">
<style>#html-body [data-pb-style=YCVWN71]{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-background-lazy-load="" data-element="inner" data-pb-style="YCVWN71"><div data-content-type="text" data-appearance="default" data-element="main"><p><a href="tel:014256392">01 42 56 31 92</a></p>
<p>Du Lundi au Jeudi<br>- 10h00 à 13h00<br>- 14h30 à 18h00</p>
<p>Le Vendredi<br>- 10h00 à 13h00<br>- 14h00 à 16h00</p>
<p>(hors jours fériés)</p>
<p>Ou par e-mail à :<br><a href="/cdn-cgi/l/email-protection#73101c1d07121007331e1600211a171612060b5d1501" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="1a7975746e7b796e5a777f6968737e7f7b6f62347c68">[email protected]</span></a></p></div></div></div> </li>
</ul>
</div>
</li>
</ul>
</nav>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
document.addEventListener('DOMContentLoaded', function () {
function closeAllSubmenusExcept(submenuToShow) {
document.querySelectorAll('.footer-menu__submenu').forEach(function(submenu) {
if (submenu !== submenuToShow) {
submenu.style.height = '0px';
submenu.style.overflow = 'hidden';
submenu.setAttribute('data-open', 'false');
}
});
}
function setupFooterMenuToggle() {
var isMobile = window.innerWidth < 768;
document.querySelectorAll('.footer-menu__item--parent > .footer-menu__item-toggle').forEach(function(toggle) {
var submenu = toggle.nextElementSibling;
// Prépare la transition CSS lors du premier passage en mobile
if (submenu) {
submenu.style.transition = 'height 0.3s ease';
}
if (isMobile) {
// Réinitialise le style pour mobile
if (submenu) {
submenu.style.overflow = 'hidden';
if (submenu.getAttribute('data-open') !== 'true') {
submenu.style.height = '0px';
} else {
submenu.style.height = submenu.scrollHeight + 'px';
}
}
// Empêche le double binding
if (!toggle._footerMenuToggleHandler) {
toggle._footerMenuToggleHandler = function (e) {
e.preventDefault();
if (submenu) {
if (submenu.getAttribute('data-open') !== 'true') {
// Ferme les autres et ouvre celui-ci
closeAllSubmenusExcept(submenu);
submenu.style.height = submenu.scrollHeight + 'px';
submenu.setAttribute('data-open', 'true');
// Remove 'active' class from all .footer-menu__item-toggle elements
document.querySelectorAll('.footer-menu__item-toggle.active').forEach(function(activeToggle) {
activeToggle.classList.remove('active');
});
toggle.classList.add('active');
} else {
submenu.style.height = '0px';
submenu.setAttribute('data-open', 'false');
toggle.classList.remove('active');
}
}
};
toggle.addEventListener('click', toggle._footerMenuToggleHandler);
}
} else {
// Réinitialise tout en desktop
if (submenu) {
submenu.style.height = '';
submenu.style.overflow = '';
submenu.style.transition = '';
submenu.setAttribute('data-open', 'true');
}
// Retire les handlers s'ils existent
if (toggle._footerMenuToggleHandler) {
toggle.removeEventListener('click', toggle._footerMenuToggleHandler);
toggle._footerMenuToggleHandler = null;
}
}
});
}
setupFooterMenuToggle();
window.addEventListener('resize', function () {
setupFooterMenuToggle();
});
});
</script>
</div>
</div>
<div class="copyright-container">
<div class="container py-6 flex items-center sm:flex-row flex-col">
<p class="text-center">
Toutes œuvres, dessins et autres marques ici utilisées sont la propriété de leurs auteurs ou sociétés détentrices. L'utilisation de la publication de ces œuvres sur le présent site web est réalisée à des fins d'illustration et de démonstration technique, sans volonté de violation de droit d'auteur.
</p>
</div>
</div>
</div>
<script>
</script>
<script>
'use strict';
function amBrandsPopup() {
let cached = false;
const displayError = (error) => {
console.error(error);
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: "Une\u0020erreur\u0020s\u0027est\u0020produite.\u0020Merci\u0020d\u0027essayer\u0020ult\u00E9rieurement."
}], 10000
);
};
let letters = [
"A","B","C","D",
"E","F","G","H","I","J","K","L","M",
"N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"
];
return {
hoverPanelActiveId: null,
selectedLetter: null,
items: [],
letters: [],
showCount: null,
showFilter: null,
showImages: true,
showSearch: null,
loading: false,
label: 'Brands',
isPopupEnabled: false,
isTopMenuItemEnabled: false,
cache: false,
isMobile: false,
initErrorMessages(errors) {
const messages = [];
for (let error in Object.keys(errors)) {
messages.push({type: 'error', text: errors[error].message});
}
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(messages, 10000);
},
chooseLetter(letter) {
this.selectedLetter = this.selectedLetter === letter ? null : letter;
},
getQuery() {
return "query BrandsPopupQuery { ambrandlist(\n showCount: true\n displayZero: true\n ) {\n all_letters,\n items {\n alt\n brandId\n cnt\n image\n img\n label\n letter\n url\n }\n }\n storeConfig {\n amshopby_brand_general_brands_brands_popup,\n amshopby_brand_general_menu_item_label,\n amshopby_brand_general_brands_page,\n amshopby_brand_general_topmenu_enabled,\n amshopby_brand_general_brands_popup_config {\n show_images,\n display_zero,\n filter_display_all,\n image_width,\n image_height,\n show_filter,\n show_count\n }\n } }" },
/**
* Retrieve media url for given path
*
* @param path
* @returns {string}
*/
getMediaUrl(path) {
const baseUrl = BASE_URL.replace('index.php/', '');
if (path.includes('://')) {
return path;
}
let productImageUrl = `${baseUrl}${path}`;
const regexDuplicateDomain = new RegExp(`^(https?:\/\/[^/]+).*\\1`);
productImageUrl = productImageUrl.replace(regexDuplicateDomain, '$1');
return productImageUrl.includes('/product/placeholder/')
? productImageUrl.replace(/\/media(?=\/static)/, '')
: productImageUrl;
},
checkIsMobileResolution() {
this.isMobile = window.matchMedia('(max-width: 1023px)').matches;
},
getBrandUrl(url){
return BASE_URL + url;
},
init() {
this.checkIsMobileResolution();
this.$watch('hoverPanelActiveId', (value) => {
if (value === 'am-brand') {
this.sendRequest();
}
});
},
/**
* Get brands by letter
*
* @param result
* @returns {{imageWidth: *, isTopMenuItemEnabled: *, showCount: *, displayAll: *, showFilter: *, showImages: *, isPopupEnabled: *, label: *, imageHeight: *, filterDisplayAll: *, brandsPage: *}}
*/
settingsMapper(result) {
const config = result.data.storeConfig?.amshopby_brand_general_brands_popup_config;
return {
showImages: config.show_images,
showCount: config.show_count,
showFilter: config.show_filter,
imageWidth: config.image_width,
imageHeight: config.image_height,
filterDisplayAll: config.filter_display_all,
displayAll: config.display_zero,
isPopupEnabled: result.data.storeConfig?.amshopby_brand_general_brands_brands_popup,
label: result.data.storeConfig?.amshopby_brand_general_menu_item_label,
isTopMenuItemEnabled: result.data.storeConfig?.amshopby_brand_general_topmenu_enabled,
brandsPage: result.data.storeConfig?.amshopby_brand_general_brands_page,
}
},
/**
* Send request to graphql
*
* @returns {Promise<any>}
*/
async sendRequest() {
if (this.isMobile) {
return false;
}
this.loading = true;
try {
if (cached) {
this.loading = false;
return false;
}
const response = await fetch('https://www.mesrideaux.fr/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Store': 'default'
},
credentials: 'include',
body: JSON.stringify({query: this.getQuery(), variables: {}})
});
const result = await response.json();
if (result?.errors) {
this.initErrorMessages(result.errors);
return;
}
const data = result.data?.ambrandlist;
const mapper = this.settingsMapper(result);
// Update component settings
Object.keys(mapper).forEach(config => {
this[config] = mapper[config];
});
if (!this.filterDisplayAll) {
letters = data.all_letters.split(',');
}
const items = data.items.map(brand => {
brand.image = brand.img
? this.getMediaUrl(brand.img) : (brand.image ? this.getMediaUrl(brand.image) : null);
return brand;
});
this.letters = letters.map(letter => ({
letter,
brands: this.getLetterItems(items, letter),
}));
this.items = this.letters.filter(row => row.brands?.length > 0);
cached = true;
} catch (error) {
displayError(error);
} finally {
this.loading = false;
}
},
/**
* Get brands by letter
*
* @param items
* @param letter
* @returns {*}
*/
getLetterItems(items, letter) {
return items.filter(row => row.letter === letter);
},
convertHtml(text) {
let textField = document.createElement("textarea");
textField.innerHTML = text;
return textField.value;
}
}
}
</script>
</div></footer><script>
window.axeptioSettings = {
clientId: '63a5761113e6a0cbbb89b1f4',
sdk: '//static.axept.io/sdk-slim.js'
, cookiesVersion: "mesrideaux-fr",
};
window.dbmAxeptioSettings = {"cgv":{"type":"contracts","id":"63a57a001c8726954e302b01"},"pdc":{"type":"contracts","id":"63a57a0bd23a56961461ec36"},"contact":{"type":"processings","id":"63a57a304ad00ca96337d6dd"},"newsletter":{"type":"processings","id":"63a57a314ad00ca96337d6e2"}};
(function (d, s) {
// Prevent duplicate SDK init (module + GTM or repeated handle render).
if (window.__dbmAxeptioSdkInjected) {
return;
}
var alreadyPresent = d.querySelector('script[src*="static.axept.io/sdk"]');
if (alreadyPresent || window._axcb) {
window.__dbmAxeptioSdkInjected = true;
return;
}
var t = d.getElementsByTagName(s)[0], e = d.createElement(s);
e.async = true;
e.src = window.axeptioSettings.sdk;
window.__dbmAxeptioSdkInjected = true;
t.parentNode.insertBefore(e, t);
})(document, 'script');
</script>
<script>
let SnapSlider = class {
constructor(el, {
labelSepparator = 'de',
autoPager,
groupPager
} = {}) {
this.el = el;
this.track = this.el.querySelector("[data-track]");
if (!this.track) {
console.warn(
"No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track",
this.el
);
return;
}
this.initialLoad = true;
this.slides = [];
this.inViewObserver;
this.mutationObserver;
this.resizeObserver;
this.pager = this.el.querySelector("[data-pager]");
this.navBtns = Array.from(
this.el.querySelectorAll("[data-next], [data-prev]")
);
this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator;
this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false;
this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false;
this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
this.sliderId = this.el.id || this.sliderLabel || "slider";
this.markerIdName = "data-target-id";
this.pagerClasses = this.el.dataset.pagerClass || "snap-pager";
this.markerClasses = this.el.dataset.markerClass || "snap-marker";
this.init();
}
init() {
this.setupSlides();
this.setupNav();
if (this.useAutoPager) {
this.createPager();
} else {
this.setupPager();
}
this.setupObservers();
this.setupMutationObserver();
this.setupResizeObserver();
this.el.addEventListener("click", this.eventHandler.bind(this));
this.el.addEventListener("keydown", this.eventHandler.bind(this));
}
destroy() {
this.inViewObserver?.disconnect();
this.mutationObserver?.disconnect();
this.resizeObserver?.disconnect();
this.el.removeEventListener("click", this.eventHandler.bind(this));
this.el.removeEventListener("keydown", this.eventHandler.bind(this));
}
roundUpIfGreaterThan(number, min = 8) {
const decimalPart = number - Math.floor(number);
return decimalPart >= min ? Math.ceil(number) : Math.floor(number);
}
getInViewItems() {
const inViewSlides = this.track.querySelectorAll("[data-in-view]");
const firstInViewSlide = inViewSlides[0] || null;
const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null;
const isAtStart = firstInViewSlide === this.slides[0];
const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1];
return {
inViewSlides,
totalInViewSlides: inViewSlides.length,
firstInViewSlide,
lastInViewSlide,
isAtStart,
isAtEnd,
hasNoOverflow: isAtStart && isAtEnd
};
}
groupPagerMarkers() {
if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return;
const totalVisibleSlides = this.roundUpIfGreaterThan(
this.track.offsetWidth / this.slides[0].offsetWidth
);
const markers = Array.from(this.pager.querySelectorAll("a, button"));
markers.forEach((marker, index) => {
marker.style.display = index % totalVisibleSlides === 0 ? null : "none";
});
}
handleInView(entries) {
entries.forEach((entry) => {
const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector(
`[${this.markerIdName}="${entry.target.id}"]`
));
entry.target.toggleAttribute("data-in-view", entry.isIntersecting);
entry.target.toggleAttribute("inert", !entry.isIntersecting);
marker?.setAttribute("aria-current", entry.isIntersecting);
marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1");
});
const {
isAtStart,
isAtEnd,
hasNoOverflow
} = this.getInViewItems();
this.navBtns.forEach((btn) => {
if (btn.hasAttribute("data-next")) {
btn.style.visibility = hasNoOverflow ? "hidden" : null;
isAtEnd ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
}
if (btn.hasAttribute("data-prev")) {
btn.style.visibility = hasNoOverflow ? "hidden" : null;
isAtStart ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
}
});
if (this.pager) {
this.pager.style.visibility = hasNoOverflow ? "hidden" : null;
}
if (!this.initialLoad) {
this.el.dispatchEvent(
new CustomEvent("slideChange", {
detail: this.getInViewItems()
})
);
} else {
this.initialLoad = false;
}
if (document.activeElement.parentElement.hasAttribute("data-pager")) {
const activeItems = this.pager.querySelectorAll('[tabindex="0"]');
if (activeItems.length) {
activeItems[0].focus({ preventScroll: true });
}
}
}
getSlides() {
if (!this.track) return [];
return Array.from(this.track.children).filter(
(child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script"
);
}
refreshSlides() {
this.initialLoad = true;
this.slides = this.getSlides();
this.setupSlides();
if (this.useAutoPager) {
this.createPager();
} else {
this.setupPager();
}
this.groupPagerMarkers();
this.setupObservers();
}
setupSlides() {
this.slides = this.getSlides();
this.slides.forEach((slide, index) => {
const totalSlides = this.slides.length;
const currentSlide = index + 1;
const existingLabel = slide.getAttribute("aria-label") || "";
const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture";
const slideLabelTag = isImage ? "alt" : "aria-label";
const hasAutoLabel = existingLabel.startsWith(
`${currentSlide} ${this.slideLabelSepparator} `
);
if (!slide.hasAttribute("id")) {
slide.setAttribute(
"id",
`${this.sliderId}-item-${currentSlide}`
);
}
if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) {
slide.setAttribute(
slideLabelTag,
`${currentSlide} ${this.slideLabelSepparator} ${totalSlides}`
);
}
if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) {
slide.setAttribute("role", "group");
}
if (this.pager && !isImage) {
slide.setAttribute("role", "tabpanel");
}
if (slide.getAttribute("role") === "group") {
slide.setAttribute("aria-roledescription", "item");
}
});
if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") {
this.el.setAttribute("role", "region");
}
if (!this.el.hasAttribute("aria-roledescription")) {
this.el.setAttribute("aria-roledescription", "carousel");
}
this.track.setAttribute("tabindex", 0);
this.track.setAttribute("aria-live", "polite");
}
setupNav() {
this.navBtns.forEach((btn) => {
btn.setAttribute("disabled", "");
btn.removeAttribute("hidden");
btn.classList.remove("invisible");
btn.style.visibility = null;
});
}
createPager() {
const newPager = document.createElement("nav");
newPager.setAttribute("data-pager", "");
newPager.setAttribute("role", "tablist");
newPager.classList.add(...this.pagerClasses.split(" "));
this.slides.forEach((slide, index) => {
const marker = document.createElement("button");
const slideId = slide.id || `${this.sliderId}-item-${index + 1}`;
marker.setAttribute(this.markerIdName, slideId);
marker.classList.add(...this.markerClasses.split(" "));
this.setupPagerMarker(marker, index);
newPager.appendChild(marker);
if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") {
slide.removeAttribute("aria-roledescription");
slide.setAttribute("role", "tabpanel");
}
});
if (this.pager) {
this.pager.setAttribute("role", "tablist");
this.pager.replaceChildren(...newPager.children);
} else {
this.track.after(newPager);
this.pager = this.el.querySelector("[data-pager]");
}
}
setupPager() {
if (!this.pager) return;
this.pager.setAttribute("role", "tablist");
const items = Array.from(this.pager.querySelectorAll("a, button"));
items.forEach((marker, index) => this.setupPagerMarker(marker, index));
}
setupPagerMarker(marker, index) {
const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
const slideId = markerId || `${this.sliderId}-item-${index + 1}`;
if (!markerId) {
marker.setAttribute(this.markerIdName, slideId);
}
marker.setAttribute("role", "tab");
marker.setAttribute("aria-controls", slideId);
marker.setAttribute("aria-posinset", index + 1);
marker.setAttribute("aria-setsize", this.slides.length);
marker.setAttribute("tabindex", "-1");
if (!marker.hasAttribute("aria-label")) {
marker.setAttribute("aria-label", `Slide ${index + 1}`);
}
}
setupObservers() {
if (this.inViewObserver) {
this.inViewObserver.disconnect();
}
this.inViewObserver = new IntersectionObserver(
this.handleInView.bind(this), {
root: this.track,
threshold: 0.8
}
);
this.slides.forEach((slide) => this.inViewObserver.observe(slide));
}
setupMutationObserver() {
this.mutationObserver = new MutationObserver(
this.refreshSlides.bind(this)
);
this.mutationObserver.observe(this.track, {
childList: true,
subtree: false
});
}
setupResizeObserver() {
this.resizeObserver = new ResizeObserver(
this.groupPagerMarkers.bind(this)
);
this.resizeObserver.observe(this.el);
}
goToSlideDir(dir = "next") {
const {
firstInViewSlide,
lastInViewSlide
} = this.getInViewItems();
const isPrev = dir === "prev";
let targetSlide = isPrev ? firstInViewSlide?.previousElementSibling : lastInViewSlide?.nextElementSibling;
if (!targetSlide) return;
if (targetSlide.tagName.toLowerCase() === "template") {
targetSlide = isPrev ? targetSlide?.previousElementSibling : targetSlide?.nextElementSibling;
}
targetSlide.scrollIntoView({ block: "nearest", inline: isPrev ? "end" : "start" });
}
pagerToSlide(event) {
if (!event.target.closest("[data-pager]")) return;
const marker = event.target.closest("a, button");
if (!marker) return;
event.preventDefault();
const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
const targetSlide = this.track.querySelector(`#${slideId}`);
targetSlide?.scrollIntoView({ block: "nearest", inline: "start" });
}
eventHandler(event) {
const target = event.target.closest(
"[data-next], [data-prev], [data-pager]"
);
if (!target) return;
if (event.type === "click") {
if (target.hasAttribute("data-next")) {
this.goToSlideDir("next");
} else if (target.hasAttribute("data-prev")) {
this.goToSlideDir("prev");
} else if (target.closest("[data-pager]")) {
this.pagerToSlide(event);
}
}
if (event.type === "keydown" && target.closest("[data-pager]")) {
if (event.key === "ArrowRight") {
this.goToSlideDir("next");
} else if (event.key === "ArrowLeft") {
this.goToSlideDir("prev");
}
}
}
};
(() => {
function alpineSnapSlider(Alpine) {
Alpine.directive("snap-slider", (el, {
modifiers
}, {
cleanup
}) => {
const autoPager = modifiers.includes("auto-pager");
const groupPager = modifiers.includes("group-pager");
const slider = new SnapSlider(el, {
autoPager,
groupPager
});
cleanup(() => {
slider.destroy();
});
});
}
document.addEventListener("alpine:init", () => {
window.Alpine.plugin(alpineSnapSlider);
});
})();
//# sourceURL=alpine-snap-slider.js
</script>
<script>
(() => {
// src/dialog.js
function dialog_default(Alpine) {
Alpine.directive("htmldialog", fylgjaAlpineDialog);
function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) {
const evaluate = expression.length ? evaluateLater(expression) : () => {};
const canEvaluate = expression.length > 0;
const lockPageScroll = modifiers.includes("noscroll");
const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest");
el.style.display = null;
el.style.length === 0 && el.removeAttribute("style");
if (el._x_isShown) {
open();
}
const closeBySupported = (() => {
return "closedBy" in HTMLDialogElement.prototype;
})();
function scrollLock(use = true) {
document.body.style.overflow = use ? "hidden" : "";
}
function dialogSubmit(event) {
if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") {
event.preventDefault();
evaluate();
}
}
function escapeDialog(event) {
if (event.key !== "Escape") return;
event.preventDefault();
if (closeBy === "none") return;
evaluate();
}
function handleCloseByEvent(event) {
if (event.target !== el) return;
const rect = el.getBoundingClientRect();
const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;
if (!isInDialog) {
if (closeBy === "any") {
if (closeBySupported) {
event.preventDefault();
}
evaluate();
}
}
}
function handleCloseEvent() {
evaluate();
}
function open() {
if (el.hasAttribute("open")) return;
el.showModal();
scrollLock(lockPageScroll);
}
function close() {
if (!el.hasAttribute("open")) return;
el.close();
scrollLock(false);
}
el._x_doShow = () => open();
el._x_doHide = () => close();
el.addEventListener("keydown", escapeDialog);
el.addEventListener("submit", dialogSubmit);
el.addEventListener("click", handleCloseByEvent);
el.addEventListener("cancel", handleCloseEvent);
cleanup(() => {
el.removeEventListener("keydown", escapeDialog);
el.removeEventListener("submit", dialogSubmit);
el.removeEventListener("click", handleCloseByEvent);
el.removeEventListener("cancel", handleCloseEvent);
scrollLock(false);
});
}
}
function modifierValue(modifiers, key, fallback) {
if (modifiers.indexOf(key) === -1) return fallback;
const rawValue = modifiers[modifiers.indexOf(key) + 1];
if (!rawValue) return fallback;
if (key === "closeby") {
const allowedValues = ["auto", "none", "closerequest", "any"];
const options = allowedValues.join(", ");
if (!allowedValues.includes(rawValue)) {
console.warn(
`"${rawValue}" is not one of the allowed values for closeby: ${options}`
);
return fallback;
}
}
return rawValue;
}
// src/cdn.js
document.addEventListener("alpine:init", () => {
window.Alpine.plugin(dialog_default);
});
})();
//# sourceURL=alpine-htmldialog.js
</script>
<script>
(() => {
function src_default(Alpine) {
Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
let evaluate = evaluateLater(expression);
let options = {
rootMargin: getRootMargin(modifiers),
threshold: getThreshold(modifiers)
};
let observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting === (value === "leave"))
return;
evaluate();
modifiers.includes("once") && observer.disconnect();
});
}, options);
observer.observe(el);
cleanup(() => {
observer.disconnect();
});
}));
}
function getThreshold(modifiers) {
if (modifiers.includes("full"))
return 0.99;
if (modifiers.includes("half"))
return 0.5;
if (!modifiers.includes("threshold"))
return 0;
let threshold = modifiers[modifiers.indexOf("threshold") + 1];
if (threshold === "100")
return 1;
if (threshold === "0")
return 0;
return Number(`.${threshold}`);
}
function getLengthValue(rawValue) {
let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
return match ? match[1] + (match[2] || "px") : void 0;
}
function getRootMargin(modifiers) {
const key = "margin";
const fallback = "0px 0px 0px 0px";
const index = modifiers.indexOf(key);
if (index === -1)
return fallback;
let values = [];
for (let i = 1; i < 5; i++) {
values.push(getLengthValue(modifiers[index + i] || ""));
}
values = values.filter((v) => v !== void 0);
return values.length ? values.join(" ").trim() : fallback;
}
document.addEventListener("alpine:init", () => {
window.Alpine.plugin(src_default);
});
})();
//# sourceURL=alpine-intersect.js
</script>
<script>
for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]:not([x-data] [x-data])":"intersect",".product-info [x-data]:not([x-data] [x-data])":"intersect","#filters-content [x-data]:not([x-data] [x-data])":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]:not([x-data] [x-data])":"intersect","#notice-cookie-block":"idle"})) {
document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
}
//# sourceURL=alpine-defer-rules.js
</script>
<script>
(() => {
const hasAlpine = new Promise(resolve => {
window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
});
const hasInteract = new Promise(resolve => {
(events => {
const onInteract = () => {
resolve();
events.forEach(type => window.removeEventListener(type, onInteract));
}
events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
})(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
});
const onIntersect = (el) => {
return new Promise(resolve => {
const observer = new IntersectionObserver(entries => {
for (const entry of entries) {
if (entry.isIntersecting) {
observer.disconnect()
resolve();
}
}
}, {});
observer.observe(el);
});
}
function runComponent(el) {
hasAlpine.then(() => {
el.removeAttribute('x-ignore');
queueMicrotask(() => Alpine.initTree(el));
});
}
function initDeferredComponents() {
document.querySelectorAll('[x-data][x-defer]').forEach(el => {
el.setAttribute('x-ignore', '');
const deferUntil = (el.getAttribute('x-defer') || '').trim();
switch (deferUntil) {
case 'interact':
hasInteract.then(() => runComponent(el));
break;
case 'intersect':
onIntersect(el).then(() => runComponent(el))
break;
case 'idle':
window.requestIdleCallback
? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
: setTimeout(() => runComponent(el), 4000);
break;
case 'eager':
runComponent(el);
break;
default:
if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
}
}
});
}
window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
})();
//# sourceURL=alpine-defer.js
</script>
<script>
(()=>{function g(n){n.directive("collapse",e),e.inline=(t,{modifiers:i})=>{i.includes("min")&&(t._x_doShow=()=>{},t._x_doHide=()=>{})};function e(t,{modifiers:i}){let r=l(i,"duration",250)/1e3,u=l(i,"min",0),h=!i.includes("min");t._x_isShown||(t.style.height=`${u}px`),!t._x_isShown&&h&&(t.hidden=!0),t._x_isShown||(t.style.overflow="hidden");let c=(d,s)=>{let o=n.setStyles(d,s);return s.height?()=>{}:o},f={transitionProperty:"height",transitionDuration:`${r}s`,transitionTimingFunction:"cubic-bezier(0.4, 0.0, 0.2, 1)"};t._x_transition={in(d=()=>{},s=()=>{}){h&&(t.hidden=!1),h&&(t.style.display=null);let o=t.getBoundingClientRect().height;t.style.height="auto";let a=t.getBoundingClientRect().height;o===a&&(o=u),n.transition(t,n.setStyles,{during:f,start:{height:o+"px"},end:{height:a+"px"}},()=>t._x_isShown=!0,()=>{t.getBoundingClientRect().height==a&&(t.style.overflow=null)})},out(d=()=>{},s=()=>{}){let o=t.getBoundingClientRect().height;n.transition(t,c,{during:f,start:{height:o+"px"},end:{height:u+"px"}},()=>t.style.overflow="hidden",()=>{t._x_isShown=!1,t.style.height==`${u}px`&&h&&(t.style.display="none",t.hidden=!0)})}}}}function l(n,e,t){if(n.indexOf(e)===-1)return t;let i=n[n.indexOf(e)+1];if(!i)return t;if(e==="duration"){let r=i.match(/([0-9]+)ms/);if(r)return r[1]}if(e==="min"){let r=i.match(/([0-9]+)px/);if(r)return r[1]}return i}document.addEventListener("alpine:init",()=>{window.Alpine.plugin(g)});})();
</script>
<script>
// x-teleport implementation
(_ => {
document.addEventListener('DOMContentLoaded', event => {
// x-teleport available only for template
if (!Alpine.version.startsWith('2')) {
return;
}
const teleportDirective = (el, expression) => {
let target = document.querySelector(expression)
let clone = el.content.cloneNode(true).firstElementChild;
target.appendChild(clone);
setTimeout(() => {
target.querySelectorAll('[x-data]')
.forEach(el => Alpine.initializeComponent(el));
}, 0)
};
document.querySelectorAll('template').forEach(el => {
if (!el.hasAttribute('x-teleport')) {
return;
}
teleportDirective(el, el.getAttribute('x-teleport'));
});
document.querySelectorAll('[x-data]').forEach(el => {
if (el.hasAttribute('x-init')) {
return;
}
setTimeout(() => {
Alpine.initializeComponent(el);
}, 0);
});
});
})()
</script>
<script type="module"
src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Hyva_Theme/js/alpine3.min.js"
defer
crossorigin
></script>
<script>
function dispatchMessages(messages, hideAfter) {
const messagesEvent = new CustomEvent("messages-loaded", {
detail: {
messages: messages,
hideAfter: hideAfter
}
});
window.dispatchEvent(messagesEvent);
}
if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
}
(function( hyva, undefined ) {
hyva.initFormKey = () => {
const inputSelector = 'input[name="form_key"]',
formKey = hyva.getFormKey();
Array.from(document.querySelectorAll(inputSelector)).map(function (input) {
input.value = formKey
});
}
hyva.initMessages = () => {
try {
const messages = hyva.getCookie('mage-messages');
window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
dispatchMessages(window.mageMessages);
// empty `mage-messages` cookie
const skipSetDomain = true;
hyva.setCookie('mage-messages','', -1, skipSetDomain);
} catch (error) {
console.warn('Error parsing Cookie Messages:', error);
}
}
window.addEventListener('DOMContentLoaded', hyva.initFormKey);
hyva.alpineInitialized(hyva.initMessages)
}( window.hyva = window.hyva || {} ));
//# sourceURL=hyva-cookies.js
</script>
<script>
{
const private_content_key = 'mage-cache-storage';
const private_content_expire_key = 'mage-cache-timeout';
const private_content_version_key = 'private_content_version';
const section_data_ids_key = 'section_data_ids';
const mage_cache_session_id_key = 'mage-cache-sessid';
const last_visited_store_key = 'last_visited_store';
const ttl = 3600;
if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
}
function loadSectionData () {
const browserStorage = hyva.getBrowserStorage();
if (!browserStorage) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Please enable LocalStorage in your browser."
}]
);
return;
}
try {
let isInvalid = false;
if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
isInvalid = true;
}
hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
if (!hyva.getCookie(mage_cache_session_id_key)) {
isInvalid = true;
browserStorage.removeItem(private_content_key);
const skipSetDomain = true;
const days = false;
hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
}
const cookieVersion = hyva.getCookie(private_content_version_key);
const storageVersion = browserStorage.getItem(private_content_version_key);
if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
isInvalid = true;
}
const privateContentExpires = browserStorage.getItem(private_content_expire_key);
if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
browserStorage.removeItem(private_content_key);
}
if (isInvalid && cookieVersion) {
fetchPrivateContent([]);
} else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
if (
privateContent &&
privateContentExpires &&
privateContent.cart &&
privateContent.customer
) {
dispatchPrivateContent(privateContent);
} else {
fetchPrivateContent([]);
}
} else {
if (document.getElementById('default-section-data')) {
const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim());
dispatchPrivateContent(privateContent);
} else {
dispatchPrivateContent({});
}
}
} catch (error) {
console.warn('Error retrieving Private Content:', error);
}
}
hyva.alpineInitialized(loadSectionData)
window.addEventListener('reload-customer-section-data', loadSectionData);
window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
function dispatchPrivateContent(data) {
const privateContentEvent = new CustomEvent("private-content-loaded", {
detail: {
data: window.processSectionDataBeforeDispatch(data)
}
});
window.dispatchEvent(privateContentEvent);
}
function fetchPrivateContent(sections) {
fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
}
})
.then(response => response.ok && response.json())
.then(
data => {
if (data) {
try {
const browserStorage = hyva.getBrowserStorage();
// merge new data preserving non-invalidated sections
const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
delete oldSectionData['checkout-data'];
}
const newSectionData = Object.assign(oldSectionData, data);
dispatchPrivateContent(newSectionData);
// don't persist messages, they've been dispatched already
if (newSectionData.messages && newSectionData.messages.messages ) {
newSectionData.messages.messages = [];
}
browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
browserStorage.setItem(private_content_expire_key, expiresAt);
const newCookieVersion = hyva.getCookie(private_content_version_key);
browserStorage.setItem(private_content_version_key, newCookieVersion);
// We don't need the section_data_ids in Hyvä, but we store them for compatibility
// with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
hyva.setCookie(
section_data_ids_key,
JSON.stringify(
Object.keys(data).reduce((sectionDataIds, sectionKey) => {
sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
return sectionDataIds;
}, {})
),
false,
true
);
} catch (error) {
console.warn("Couldn't store privateContent", error);
}
}
}
);
}
}
//# sourceURL=hyva-private-content.js
</script>
<script>
(() => {
document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
})()
</script>
<script>
(events => {
const dispatchUserInteractionEvent = () => {
events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
window.dispatchEvent(new Event('init-external-scripts'))
};
events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true}))
})(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown']);
//# sourceURL=hyva-init-external-scripts.js
</script>
<script>
function initConfigurableOptions(productId, optionConfig) {
function findPathParam(key) {
const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL;
const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/');
const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3);
for (let i = 0; i < pathParts.length; i += 2) {
if (pathParts[i] === key && pathParts.length > i) {
return pathParts[i + 1];
}
}
}
return {
optionConfig,
productId,
itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'),
allowedAttributeOptions: [],
selectedValues: [],
init() {
this.buildLookupMap();
this.findAllowedAttributeOptions();
this.$nextTick(() => {
if (typeof this.optionConfig.defaultValues === 'object') {
for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) {
this.changeOption(attributeId, value + '');
}
}
this.preselectQuerystringItems();
this.preselectLocationHashItems();
});
},
productIndex: 0,
productIndexForPrice: 0,
productIndexesMap: null,
productIndexesKeys: null,
attributeCount: 0,
optionIsActive(attributeId, optionId) {
return !!this.getAllowedAttributeOptions(attributeId).find(
option => option.id === optionId
)
},
optionIsEnabled(attributeId, optionId) {
for (const productId in this.optionConfig.index) {
if (this.optionConfig.index[productId][attributeId] === optionId) {
return true;
}
}
return false;
},
findSimpleIndex() {
this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues);
this.productIndexForPrice = this.findCheapestProductForPartialSelection(this.selectedValues);
},
calculateSimpleIndexForPartialSelection(selectedValues) {
if (selectedValues.length === 0) return 0;
return this.findProductIdsForPartialSelection(selectedValues)[0];
},
buildLookupMap() {
this.productIndexesMap = new Map();
this.attributeCount = Object.keys(this.optionConfig.attributes).length;
for (const id in this.optionConfig.index) {
const options = this.optionConfig.index[id];
if (! this.productIndexesKeys) {
this.productIndexesKeys = Object.keys(options).sort();
}
const key = JSON.stringify(options, this.productIndexesKeys);
this.productIndexesMap.set(key, id);
}
},
calculateSimpleIndexForFullSelection(selectedValues) {
if (! this.isFullSelection(selectedValues)) return false;
const attrKeys = this.productIndexesKeys || [];
const normalised = {};
for (let i = 0; i < attrKeys.length; i++) {
normalised[attrKeys[i]] = selectedValues[attrKeys[i]];
}
const queryKey = JSON.stringify(normalised, attrKeys);
return this.productIndexesMap.get(queryKey);
},
findAllowedAttributeOptions() {
this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues);
},
calculateAllowedAttributeOptions(selectedValues) {
const allAttributes = this.optionConfig.attributes;
const allAttributesSorted = Object.values(allAttributes).sort((a,b) => {
return a.position - b.position
});
const newAllowedAttributeOptions = [];
allAttributesSorted.forEach(attribute => {
const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id));
const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr);
newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => {
return !!option.products.find(product => {
return availableIndexes.includes(product);
})
});
});
return newAllowedAttributeOptions;
},
calculateAvailableProductIndexes(selectedOptions) {
if (Object.keys(selectedOptions).length === 0) {
if (Object.values(this.optionConfig.salable || {}).length) {
return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i)
}
return Object.keys(this.optionConfig.index);
}
const selectedIds = Object.keys(selectedOptions);
if (Object.values(this.optionConfig.salable || {}).length) {
const selectedOptionIndexes = selectedIds.map(attrId => {
const optionValue = selectedOptions[attrId];
return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || []
})
return selectedOptionIndexes.reduce((acc, optionIndexes) => {
return acc.filter(index => optionIndexes.includes(index));
});
} else {
const productIndexes = this.optionConfig.index;
return Object.keys(productIndexes).filter(index => {
for (const attrId of selectedIds) {
if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false
}
return true
});
}
},
findAttributeByOptionId(optionId) {
for (const attributeId in this.optionConfig.attributes) {
const attributeOptions = this.optionConfig.attributes[attributeId].options || [];
if (attributeOptions.find(option => option.id === optionId)) {
return attributeId;
}
}
},
getAllowedAttributeOptions(attributeId) {
return this.allowedAttributeOptions[attributeId] || []
},
getAllAttributeOptions(attributeId) {
return (
this.optionConfig.attributes[attributeId] &&
this.optionConfig.attributes[attributeId].options
) || []
},
getProductIdsForOption(option) {
const attributeId = this.findAttributeByOptionId(option.id);
const allOptions = this.optionConfig.attributes[attributeId];
const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id);
return opt && opt.products
? opt.products
: [];
},
findProductIdsForPartialSelection(optionSelection) {
const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => {
const newCandidates = this.getProductIdsForOption({id: optionId});
return candidates === null
? newCandidates
: candidates.filter(productId => newCandidates.includes(productId));
}, null);
return candidateProducts || [];
},
findCheapestProductForPartialSelection(optionSelection) {
const candidateProducts = this.findProductIdsForPartialSelection(optionSelection);
return candidateProducts.reduce((cheapest, simpleIdx) => {
// in the first iteration we start with simpleIdx as the currently cheapest product
if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx;
const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount;
return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount
? simpleIdx
: cheapest;
}, 0)
},
findProductIdToUseForOptionPrice(option) {
// try to find a product for a complete selection
const attributeId = this.findAttributeByOptionId(option.id);
const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id});
const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection);
// if there is no complete selection, use the cheapest product for the option
return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection);
},
getAttributeOptionLabel(option) {
const optionProduct = this.findProductIdToUseForOptionPrice(option);
if ((! optionProduct) || (optionProduct === this.productIndexForPrice)) {
return option.label;
}
const currentPrice = this.getOptionPriceAdjustmentBasePrice();
if (this.optionConfig.optionPrices[optionProduct]) {
const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount;
if (optionPrice !== currentPrice){
return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true);
}
}
return option.label;
},
getOptionPriceAdjustmentBasePrice() {
if (this.optionConfig.optionPrices[this.productIndexForPrice]) {
return this.optionConfig.optionPrices[this.productIndexForPrice].finalPrice.amount
}
return this.optionConfig.prices.finalPrice.amount; // default price if no option selection
},
clearOptionIfActive(optionId, value) {
if (this.selectedValues[optionId] === value) {
this.blurLabel()
this.changeOption(optionId, '')
}
},
removeAttrFromSelection(selectedValues, attributeId) {
attributeId = parseInt(attributeId);
return selectedValues.reduce((newSelection, val, attr) => {
if (attr !== attributeId) {
newSelection[attr] = val;
}
return newSelection;
}, []);
},
changeOption(attributeId, value) {
if (value === '') {
this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId)
} else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) {
this.selectedValues[attributeId] = value;
}
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateGallery();
const candidates = this.findProductIdsForPartialSelection(this.selectedValues);
window.dispatchEvent(
new CustomEvent(
'configurable-selection-changed',
{
detail: {
productId: this.productId,
optionId: attributeId,
value: value,
productIndex: this.productIndex,
selectedValues: this.selectedValues,
candidates: candidates,
skuCandidates: Object.values(candidates).map(id => this.optionConfig.sku?.[id] ?? null).filter(Boolean),
}
}
)
);
},
calculateIsMinimalPrice() {
return ! this.isFullSelection(this.selectedValues);
},
isFullSelection(selectedValues) {
return Object.keys(selectedValues).length === this.attributeCount;
},
updatePrices() {
const value = this.optionConfig.optionPrices[this.productIndexForPrice] || this.optionConfig.prices;
window.dispatchEvent(
new CustomEvent(
"update-prices-" + this.productId,
{
detail: Object.assign(
value,
{ isMinimalPrice: this.calculateIsMinimalPrice() }
)
}
)
);
},
updateGallery () {
if (this.productIndex) {
const images = this.optionConfig.images[this.productIndex];
images && window.dispatchEvent(new CustomEvent(
"update-gallery",
{ detail: this.sortImagesByPosition(images) }
));
} else {
window.dispatchEvent(new Event("reset-gallery"));
}
},
sortImagesByPosition(images) {
return images.sort((x, y) => {
return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1)
});
},
onGetCartData(data) {
if (this.productId === '35439') {
this.preselectCartItems(data);
}
},
preselectCartItems(data) {
// pre-select options based on cart data for current (quote) itemId
const cart = data && data.cart;
if (cart && cart.items) {
const cartItem = cart.items.find((item) => {
return (
item.item_id === this.itemId
&& item.product_id === this.productId
)
});
if (cartItem && cartItem.options && cartItem.options.length) {
cartItem.options.map(option => {
this.changeOption(option.option_id, option.option_value);
})
}
}
},
preselectQuerystringItems() {
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?',''));
this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code));
},
preselectLocationHashItems() {
// pre-select option like #144=167
const urlHashParams = new URLSearchParams(window.location.hash.replace('#',''));
this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id));
},
preselectItemsBasedOnLocation(getLocationValue) {
Object.values(this.optionConfig.attributes).map(attribute => {
const v = getLocationValue(attribute);
v && this.changeOption(attribute.id, v)
});
}
}
}
</script>
<script>
function initSwatchOptions(swatchConfig) {
return {
swatchConfig,
products: [],
matchedProducts: [],
getAttributeSwatchData(attributeId) {
const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]);
swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']);
return swatchConfig;
},
getAllAttributeOptions(attributeId) {
return (
this.optionConfig.attributes[attributeId] &&
this.optionConfig.attributes[attributeId].options
) || []
},
optionIsActive(attributeId, optionId) {
// return true if a product with this option is in stock
return !!this.getAllowedAttributeOptions(attributeId).find(
option => option.id === optionId
)
},
optionIsEnabled(attributeId, optionId) {
// return true if a product with this option is enabled
for (const productId in this.optionConfig.index) {
if (this.optionConfig.index[productId][attributeId] === optionId) {
return true;
}
}
return false;
},
mapSwatchTypeNumberToTypeCode(typeNumber) {
switch ("" + typeNumber) {
case "1":
return "color"
case "2":
return "image"
case "3":
return "empty"
case "0":
default:
return "text"
}
},
getTypeOfFirstOption(attributeId) {
for (const optionId in this.swatchConfig[attributeId]) {
const option = this.swatchConfig[attributeId][optionId];
if (typeof option.type !== 'undefined') {
return this.mapSwatchTypeNumberToTypeCode(option.type);
}
}
},
getVisualSwatchType(attributeId, targetOptionId) {
// If a type configuration is present for the given option id, use it
const config = this.swatchConfig[attributeId];
if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') {
return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type);
}
// Otherwise - if no config is present for the target option - use the type of the first option
// with a type property from the attribute, thus assuming its the same type as the target option.
// (This edge case condition can occur on single swatch products if some options are not salable)
return this.getTypeOfFirstOption(attributeId);
},
getSwatchType(attributeId, optionId) {
// Deserialize the attribute details the first time they are used
if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) {
this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId);
}
const type = this.swatchConfig[attributeId] &&
this.swatchConfig[attributeId].details &&
this.swatchConfig[attributeId].details.swatch_input_type ||
"empty";
return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type;
},
isTextSwatch(attributeId, optionId) {
return this.getSwatchType(attributeId, optionId) === 'text';
},
isVisualSwatch(attributeId, optionId) {
const type = this.getSwatchType(attributeId, optionId);
return ['image', 'color'].includes(type);
},
getSwatchBackgroundStyle(attributeId, optionId) {
const config = this.getSwatchConfig(attributeId, optionId);
const type = this.getSwatchType(attributeId, optionId);
if (type === "color") {
return 'background-color:' + config.value;
} else if (type === "image") {
return "background: #ffffff url('" + config.value + "') no-repeat center";
} else {
return '';
}
},
getSwatchText(attributeId, optionId) {
const config = this.getSwatchConfig(attributeId, optionId);
return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId);
},
getOptionLabelFromOptionConfig(attributeId, optionId) {
// Fallback if no value is present in swatchConfig data
// Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190
const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId);
return option && option[0] && option[0].label ||'';
},
getSwatchConfig(attributeId, optionId) {
return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId]
? this.swatchConfig[attributeId][optionId]
: false;
},
activeTooltipItem: false,
tooltipPositionElement: false,
isTooltipVisible() {
return this.activeTooltipItem &&
this.getSwatchConfig(
this.activeTooltipItem.attribute,
this.activeTooltipItem.item
);
},
isFirstItemCol() {
return this.activeTooltipItem.index === 0;
},
getTooltipImageStyle(attributeId, optionId) {
const config = this.getSwatchConfig(attributeId, optionId);
const type = this.getSwatchType(attributeId, optionId);
if (type === "color") {
return 'background-color:' + config.value + '; width: 110px; height: 90px;';
} else if (type === "image") {
return "background: #ffffff url('" + config.thumb +
"') center center no-repeat; width: 110px; height: 90px;";
} else {
return 'display:none';
}
},
getTooltipPosition() {
return this.tooltipPositionElement ?
`top: ${this.tooltipPositionElement.offsetTop}px;` +
`left: ${
this.tooltipPositionElement.offsetLeft - (
this.tooltipPositionElement.closest('.snap') &&
this.tooltipPositionElement.closest('.snap').scrollLeft ||
0
)
}px;` : ''
},
getTooltipLabel() {
return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label
},
focusedLabel: false,
focusLabel(optionId) {
this.focusedLabel = optionId;
},
blurLabel() {
this.focusedLabel = false;
},
showSwatches: false,
initShowSwatchesIntersect() {
if ('IntersectionObserver' in window && !window.scrollY) {
let io = new IntersectionObserver(
entries => {
entries.map(entry => {
if (entry.isIntersecting) {
this.showSwatches = true;
io.unobserve(this.$root);
}
})
}
);
io.observe(this.$root);
} else {
this.showSwatches = true
}
},
checkSampleProduct(target, attrId, productId) {
this.products[attrId] = target.value;
const productArray = this.optionConfig.index;
const sampleProduct = this.optionConfig.offerSample;
const sampleProductCost = this.optionConfig.offerSampleCost;
const productKey = Object.keys(this.products)
.map(key => `${key}:${this.products[key]}`)
.join(',');
for (let key in productArray) {
let product = productArray[key];
const productKeyArray = Object.keys(product)
.map(attr => `${attr}:${product[attr]}`)
.join(',');
if (productKeyArray === productKey) {
if (sampleProduct[key] == 1) {
document.querySelector('#sampleButtonConfigurbale-' + productId).classList.remove('hidden');
} else {
document.querySelector('#sampleButtonConfigurbale-' + productId).classList.add('hidden');
}
}
}
}
}
}
</script>
<script>
'use strict';
const grecaptchaV2LoadCallbacks = [];
function executeRecaptchaLoadCallbacks () {
while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
const callback = grecaptchaV2LoadCallbacks.pop();
typeof callback === 'string' ? window[callback]() : callback();
}
}
(function() {
const loadRecaptchaScript = (event) => {
if (window.grecaptcha || !event.target.form) {
return;
}
const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
const siteKey = '';
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
script.async = true;
document.head.appendChild(script);
script.addEventListener('load', () => {
Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled'));
});
}
window.forceLoadRecaptchaScript = (form) => {
loadRecaptchaScript({target: {form: form || 'dummy'}});
executeRecaptchaLoadCallbacks();
};
document.body.addEventListener('input', loadRecaptchaScript, { once: true });
document.body.addEventListener('focus', loadRecaptchaScript, { once: true });
}());
</script>
<template id="popup-template">
<div class="popin-call-client">
<div class="modal-content">
<div>
<span class="close"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="21"><g fill="none" fill-rule="evenodd" stroke="#4a3328" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"><path d="m2 1.5 18 18M2 19.5l18-18"/></g></svg> </span>
<svg xmlns="http://www.w3.org/2000/svg" width="91" height="91" viewbox="0 0 24 24" fill="#1C1F49"><path d="M12 0c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm3.445 17.827c-3.684 1.684-9.401-9.43-5.8-11.308l1.053-.519 1.746 3.409-1.042.513c-1.095.587 1.185 5.04 2.305 4.497l1.032-.505 1.76 3.397-1.054.516z"/></svg>
<h3> Besoin d’être accompagné dans votre choix ?</h3>
<h4> Contactez-nous ! Nos conseillers déco sont à votre disposition.</h4>
<a href="tel:+330142563192" class="contact-number">01 42 56 31 92</a>
</div>
</div>
</div>
</template>
<style>
.popin-call-client {
position: fixed;
z-index: 10000;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: none;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
background-color: rgb(239 231 221 / 69%)
}
.popin-call-client.active {
display: -webkit-box;
display: -ms-flexbox;
display: flex
}
.popin-call-client .modal-content {
background-color: #fefefe;
padding: 20px 15px;
max-width: 90%;
-webkit-box-shadow: none;
box-shadow: none;
border-radius: 8px;
}
@media screen and (min-width: 767px) {
.popin-call-client .modal-content {
max-width: 70%
}
}
@media screen and (min-width: 1024px) {
.popin-call-client .modal-content {
width: 887px;
max-width: none;
padding: 22.5px 30px
}
}
.popin-call-client .modal-content>div {
margin-top: 6px;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
text-align: center
}
.popin-call-client .modal-content>div svg {
height: auto;
margin-bottom: 22px
}
.popin-call-client .modal-content>div h3 {
font-size: 24px;
line-height: 32px;
letter-spacing: 2px;
font-weight: 400;
color: #1C1F49;
margin-bottom: 10px;
text-transform: uppercase;
max-width: 80%
}
@media screen and (min-width: 1024px) {
.popin-call-client .modal-content>div h3 {
font-size: 30px;
line-height: 42px;
max-width: 589px
}
}
.popin-call-client .modal-content>div h4 {
font-size: 18px;
line-height: 22px;
letter-spacing: 2.4px;
font-weight: 400;
color: var(--text-color);
margin-bottom: 10px;
max-width: 80%;
/* font-family: "Nunito", sans-serif */
}
@media screen and (min-width: 1024px) {
.popin-call-client .modal-content>div h4 {
line-height: 32px;
margin-bottom: 25px;
max-width: 515px
}
}
.popin-call-client .modal-content>div a {
font-size: 18px;
border: var(--color-beige) solid 2px;
letter-spacing: 3.05px;
padding: 11px 30px 12px 30px;
color: var(--text-color);
margin-bottom: 17px;
line-height: 42px;
font-weight: 700;
/* font-family: "Nunito", sans-serif */
}
@media screen and (min-width: 1024px) {
.popin-call-client .modal-content>div a {
font-size: 22px;
margin-bottom: 27.5px
}
}
.popin-call-client>div .close {
opacity: 1;
width: 100%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: end;
-ms-flex-pack: end;
justify-content: flex-end
}
.popin-call-client>div .close svg {
-webkit-transform: scale(0.82);
transform: scale(0.82);
margin-bottom: 0
}
.popin-call-client .close:hover,
.popin-call-client .close:focus {
color: black;
text-decoration: none;
cursor: pointer
}
</style>
<script>
// Vérifie si le cookie existe
function getCookie(name) {
const cookieArr = document.cookie.split(";");
for (let i = 0; i < cookieArr.length; i++) {
const cookiePair = cookieArr[i].split("=");
if (name == cookiePair[0].trim()) {
return decodeURIComponent(cookiePair[1]);
}
}
return null;
}
// Définit le cookie avec le nom et la valeur spécifiés, ainsi que la durée de vie et le chemin
function setCookie(name, value, days, path) {
let expires = "";
if (days) {
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + encodeURIComponent(value) + expires + "; path=" + path;
}
if (getCookie("popup") == null) {
// if (true) {
setTimeout(function() {
const popupTemplate = document.getElementById("popup-template");
if(popupTemplate) {
const popupContent = popupTemplate.content.cloneNode(true);
const modal = popupContent.querySelector(".popin-call-client");
document.body.appendChild(modal);
modal.style.display = "flex";
setCookie("popup", "true", 1, "/");
const closeModal = modal.querySelector(".close");
closeModal.onclick = function() {
modal.style.display = "none";
};
modal.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
}
}, 40000)
}
</script>
<script>(function () {
'use strict';
var PROBANCE_TOKEN = 'stEBgropGvokUIr';
var PROBANCE_TRACKER_NAME = 'Prob_Track';
var PROBANCE_TIMEOUT = 90;
var PROBANCE_ENDPOINT = '//t4.my-probance.one/webtrax';
var PROBANCE_QUERY_PARAM = 'idprob';
var VISITOR_IDENTIFIER_TYPE = 'email';
var lastTrackedUrl = '';
function getCustomerData() {
if (window.customerData) {
return window.customerData;
}
try {
var rawStorage = localStorage.getItem('mage-cache-storage');
if (!rawStorage) {
return null;
}
var parsedStorage = JSON.parse(rawStorage);
return parsedStorage && parsedStorage.customer ? parsedStorage.customer : null;
} catch (error) {
return null;
}
}
function getVisitorId() {
var customer = getCustomerData();
if (!customer) {
return '';
}
return customer.email || 'non-connected';
}
function getBasketId() {
if (window.checkoutConfig && window.checkoutConfig.quoteData) {
return String(window.checkoutConfig.quoteData.entity_id || '').trim();
}
return '';
}
function getCurrentProductName() {
var productName = document.querySelector('h1.page-title.text-3xl.font-semibold.mb-8.text-center');
if (!productName) {
return '';
}
var productName = productName.textContent.trim();
return productName.charAt(0).toUpperCase() + productName.slice(1).toLowerCase();
}
function getCurrentProductId() {
var productInput = document.querySelector('form[action*="/checkout/cart/add"] input[name="product"]');
if (!productInput) {
return '';
}
return String(productInput.value || '').trim();
}
function createProbanceTracker(typeID, myId) {
var crm = null;
try {
crm = new window.PROBANCE_CRMTracker(
PROBANCE_TOKEN,
PROBANCE_TRACKER_NAME,
PROBANCE_TIMEOUT,
PROBANCE_ENDPOINT,
PROBANCE_QUERY_PARAM
);
} catch (err) {
return null;
}
if (crm === null) {
return null;
}
var probanceTracker = new window.PROBANCE_trackers();
probanceTracker.setCRM(crm);
if (myId !== null && myId !== undefined && myId !== '') {
crm.setCustomer(myId, typeID);
}
probanceTracker.doNotTrackOnInit();
probanceTracker.init();
return probanceTracker;
}
window.ViewedPage = function ViewedPage() {
if (typeof window.PROBANCE_CRMTracker !== 'function' || typeof window.PROBANCE_trackers !== 'function') {
return;
}
var typeID = VISITOR_IDENTIFIER_TYPE;
var my_id = getVisitorId();
var pid = getCurrentProductId();
var aid = '';
var pname = getCurrentProductName();
var url = document.location.href;
var tracker = createProbanceTracker(typeID, my_id);
if (!tracker) {
return;
}
if (pid === null || pid === undefined) {
pid = '';
}
if (aid === null || aid === undefined) {
aid = '';
}
tracker.track(url, [['product_id', pid], ['article_id', aid],['product_name', pname], ['action', 'visit']]);
lastTrackedUrl = url;
};
window.Cartin = function Cartin(payload) {
if (typeof window.PROBANCE_CRMTracker !== 'function' || typeof window.PROBANCE_trackers !== 'function') {
return;
}
var data = payload || {};
var typeID = VISITOR_IDENTIFIER_TYPE;
var my_id = getVisitorId();
var pid = String(data.pid || '').trim();
var aid = String(data.aid || '').trim();
var bid = String(data.bid || getBasketId() || '').trim();
var url = document.location.href;
var pname = getCurrentProductName();
var tracker = createProbanceTracker(typeID, my_id);
if (!tracker) {
return;
}
if (pid === null || pid === undefined) {
pid = '';
}
if (aid === null || aid === undefined) {
aid = '';
}
if (bid === null || bid === undefined) {
bid = '';
}
tracker.trackEvent(url, [['product_id', pid], ['article_id', aid], ['basket_id', bid],['product_name', pname], ['action', 'cart']]);
};
document.addEventListener('submit', function (event) {
var form = event.target;
if (!(form instanceof HTMLFormElement)) {
return;
}
var action = (form.getAttribute('action') || '').toLowerCase();
if (action.indexOf('/checkout/cart/add') === -1) {
return;
}
var productInput = form.querySelector('input[name="product"]');
var productId = productInput ? String(productInput.value || '').trim() : '';
window.Cartin({pid: productId, aid: productId});
}, true);
function trackIfUrlChanged() {
var currentUrl = document.location.href;
if (currentUrl === lastTrackedUrl) {
return;
}
window.ViewedPage();
}
function bindAjaxNavigationTracking() {
var originalPushState = window.history.pushState;
var originalReplaceState = window.history.replaceState;
window.history.pushState = function () {
var result = originalPushState.apply(this, arguments);
setTimeout(trackIfUrlChanged, 0);
return result;
};
window.history.replaceState = function () {
var result = originalReplaceState.apply(this, arguments);
setTimeout(trackIfUrlChanged, 0);
return result;
};
window.addEventListener('popstate', trackIfUrlChanged);
window.addEventListener('hashchange', trackIfUrlChanged);
}
if (window.jQuery && typeof window.jQuery === 'function') {
window.jQuery(document).ready(function () {
window.ViewedPage();
bindAjaxNavigationTracking();
});
} else if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
window.ViewedPage();
bindAjaxNavigationTracking();
});
} else {
window.ViewedPage();
bindAjaxNavigationTracking();
}
})();</script>
<script>
window.mrGa4CatalogProductConfig = {"item":{"item_id":"2503908-thevenon-rideau-1","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Multicolor"},"variants":{"26227":{"item_id":"2503908-thevenon-rideau","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Rose fond creme sur velours"},"26228":{"item_id":"2503909-thevenon-rideau","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Camel fond bleu roi sur velours"},"26229":{"item_id":"2503911-thevenon-rideau","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Jaune fond canard sur velours"}},"requiresVariantSelection":true,"ecommerce":{"currency":"EUR","value":0,"items":[{"item_id":"2503908-thevenon-rideau-1","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Multicolor"}]}};
</script>
<script>
window.mrGa4ConfiguratorConfig = {"item":{"item_id":"2503908-thevenon-rideau-1","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Multicolor"},"item_category":"Rideaux sur mesure","variants":{"26227":{"item_id":"2503908-thevenon-rideau","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Rose fond creme sur velours"},"26228":{"item_id":"2503909-thevenon-rideau","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Camel fond bleu roi sur velours"},"26229":{"item_id":"2503911-thevenon-rideau","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Jaune fond canard sur velours"}},"steps":{"1":{"step_name":"dimensions","label":"J’indique mes dimensions"},"50":{"step_name":"nombre_rideaux","label":"Je choisis le nombre de rideaux par fenêtre"},"2":{"step_name":"tete_rideaux","label":"Je sélectionne ma tête de rideaux"},"3":{"step_name":"doublure","label":"Je sélectionne ma doublure"},"4":{"step_name":"tombant","label":"Je sélectionne mon tombant"}}};
</script>
<script>
window.mrGa4WishlistConfig = {"item":{"item_id":"2503908-thevenon-rideau-1","item_name":"RIDEAU MAJORELLE SUR VELOURS","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Rideaux sur mesure","product_type":"made_to_measure","item_variant":"Multicolor"}};
</script>
<script src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/Mesrideaux_Ga4Datalayer/js/configurateur-tracking.min.js"></script>
<script src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/configurable-custom-options.min.js"></script>
<script src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/js/configurable-cross-sell.min.js"></script>
<script type="text/json" id="default-section-data">
{"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"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"LU":{"name":"Luxembourg"},"data_id":1783556696},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"payments":[],"wishlist":{"items":[]},"alma_section":[],"hyva_checkout":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[],"magepal-gtm-jsdatalayer":[]}</script>
<script>
(()=> {
'use strict';
const amBrandPosition = {
selectors: {
brands: '#maincontent > .container .amshopby-option-link',
productInfoTitleP: '.product-info-main p.title-font'
},
amBrandPositionInit() {
const brands = document.querySelectorAll(this.selectors.brands);
let target;
if (!brands.length) {
return;
}
target = document.querySelector(this.selectors.productInfoTitleP);
for (let brand of brands) {
brand.classList.remove('flex');
brand.classList.add('inline-flex');
this.moveElement(brand, target);
}
},
moveElement(element, target) {
const fragment = document.createDocumentFragment();
fragment.appendChild(element);
target.append(fragment);
element.classList.remove('hidden');
}
}
document.addEventListener('DOMContentLoaded', () => {
amBrandPosition.amBrandPositionInit();
})
})()
</script></div><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a18330403ca4d09a',t:'MTc4MzU1NjY5NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>