<!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="Coussin Agueda sur mesure |Tissu Gaston y Daniela"/>
<meta name="description" content=" Apportez une touche chic et naturelle à votre intérieur grâce à la pose d’un coussin Agueda confectionné sur-mesure avec des finitions impeccables."/>
<meta name="keywords" content=" Coussin Agueda"/>
<meta name="robots" content="INDEX,FOLLOW"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="p:domain_verify" content="aa513b099452a422663e385ef0b121b1"/>
<title>Coussin Agueda sur mesure |Tissu Gaston y Daniela</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/createurs/gaston-y-daniela/coussin-agueda" />
<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="COUSSIN AGUEDA" />
<meta property="og:image"
content="https://cdn4.mesrideaux.fr/catalog/product/cache/6517c62f5899ad6aa0ba23ceb3eeff97/c/o/coussin-agueda-vue-large.webp" />
<meta property="og:description"
content="Envie de réveiller votre canapé, d’adoucir votre fauteuil ou de donner du relief à votre lit avec une pièce vraiment élégante ? Le coussin Agueda sur mesure est pensé pour sublimer votre décoration avec un rendu raffiné, léger et parfaitement ajusté à votre intérieur. Grâce à une fabrication à la demande, vous choisissez les bonnes dimensions, le style et les finitions pour obtenir un coussin décoratif qui s’intègre naturellement à votre ambiance (salon contemporain ou chambre plus cocooning).
 " />
<meta property="og:url" content="https://www.mesrideaux.fr/createurs/gaston-y-daniela/coussin-agueda" />
<meta property="product:price:amount" content="217"/>
<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/c/o/coussin-agueda-vue-large.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="cnA4cXpuMGdhbDVzNmNnemNtd2tlZ3ltcnR6aHpiY3o=">
var dfPageType = "product";
var dfProductId = "29996";
var dfCategoryName = "Cr\u00e9ateurs > Gaston y Daniela";
</script>
<script nonce="cnA4cXpuMGdhbDVzNmNnemNtd2tlZ3ltcnR6aHpiY3o=">
(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="catalog-product-view product-coussin-agueda page-layout-1column">
<input name="form_key" type="hidden" value="1hz3gWuNnl2g4AD3" />
<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#f2919d9c86939186b29f9781809b969793878adc9480" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="8fece0e1fbeeecfbcfe2eafcfde6ebeaeefaf7a1e9fd">[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#4a2925243e2b293e0a272f3938232e2f2b3f32642c38" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="c6a5a9a8b2a7a5b286aba3b5b4afa2a3a7b3bee8a0b4">[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 category48">
<span aria-hidden="true" class="separator text-fg-secondary px-2">/</span>
<a
href="https://www.mesrideaux.fr/createurs.html"
>Créateurs</a>
</li>
<li class="item flex category58">
<span aria-hidden="true" class="separator text-fg-secondary px-2">/</span>
<a
href="https://www.mesrideaux.fr/createurs/gaston-y-daniela.html"
>Gaston y Daniela</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/coussin-agueda"
class="text-fg-secondary"
aria-current="page"
>COUSSIN AGUEDA</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\/createurs.html","name":"Cr\u00e9ateurs"}},{"@type":"ListItem","position":3,"item":{"@id":"https:\/\/www.mesrideaux.fr\/createurs\/gaston-y-daniela.html","name":"Gaston y Daniela"}},{"@type":"ListItem","position":4,"item":{"@id":"https:\/\/www.mesrideaux.fr\/coussin-agueda","name":"COUSSIN AGUEDA"}}] }
</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"
>
COUSSIN AGUEDA </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="COUSSIN AGUEDA"
title="COUSSIN AGUEDA"
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/c/o/coussin-agueda-vue-large.webp"
width="700"
height="700"
itemprop="image"
>
<template x-for="(image, index) in images" :key="index">
<img
:alt="image.caption || 'COUSSIN\u0020AGUEDA'"
:title="image.caption || 'COUSSIN\u0020AGUEDA'"
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 || 'COUSSIN\u0020AGUEDA\u0020thumbnail'"
:title="image.caption || 'COUSSIN\u0020AGUEDA\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: '0' })"
>
<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\/c\/o\/coussin-agueda-vue-large.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/c\/o\/coussin-agueda-vue-large.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/c\/o\/coussin-agueda-vue-large.webp","caption":"COUSSIN AGUEDA","position":"5","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/c\/o\/coussin-agueda-gros-plan.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/c\/o\/coussin-agueda-gros-plan.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/c\/o\/coussin-agueda-gros-plan.webp","caption":"COUSSIN AGUEDA","position":"6","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/c\/o\/coussin-agueda-photo-tissu.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/c\/o\/coussin-agueda-photo-tissu.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/c\/o\/coussin-agueda-photo-tissu.webp","caption":"COUSSIN AGUEDA","position":"7","isMain":false,"type":"image","videoUrl":null}],
"images": [{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/c\/o\/coussin-agueda-vue-large.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/c\/o\/coussin-agueda-vue-large.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/c\/o\/coussin-agueda-vue-large.webp","caption":"COUSSIN AGUEDA","position":"5","isMain":true,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/c\/o\/coussin-agueda-gros-plan.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/c\/o\/coussin-agueda-gros-plan.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/c\/o\/coussin-agueda-gros-plan.webp","caption":"COUSSIN AGUEDA","position":"6","isMain":false,"type":"image","videoUrl":null},{"thumb":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/3380650127d143eec657262365bd2ea0\/c\/o\/coussin-agueda-photo-tissu.webp","img":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/c\/o\/coussin-agueda-photo-tissu.webp","full":"https:\/\/cdn4.mesrideaux.fr\/catalog\/product\/cache\/74c1057f7991b4edb2bc7bdaa94de933\/c\/o\/coussin-agueda-photo-tissu.webp","caption":"COUSSIN AGUEDA","position":"7","isMain":false,"type":"image","videoUrl":null}],
"appendOnReceiveImages": true,
"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"
>
COUSSIN AGUEDA </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/aHR0cHM6Ly93d3cubWVzcmlkZWF1eC5mci9jb3Vzc2luLWFndWVkYQ~~/product/29996/"
class="mb-0"
id="product_addtocart_form"
enctype="multipart/form-data"
data-sku="gdt5287-001-gaston-coussin"
>
<input type="hidden" name="product" value="29996">
<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="29996">
<input name="form_key" type="hidden" value="1hz3gWuNnl2g4AD3" /> <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": {"552850":{"1447429":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"40 x 40 cm"},"1447430":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"50 x 30 cm"},"1447431":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"50 x 40 cm"},"1447432":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"50 x 50 cm"},"1447433":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"60 x 30 cm"},"1447434":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"60 x 60 cm"}},"550550":{"1435501":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Bord \u00e0 bord"},"1435502":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Bordures personnalis\u00e9es (passepoils)"}},"543773":{"1398807":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Avec int\u00e9rieur"},"1398808":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Sans int\u00e9rieur"}},"541626":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Nombre de coussin identiques"},"548403":{"1428877":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"M\u00eame tissu"},"1428878":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Noir"},"1428879":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Blanc"},"1428880":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Gris souris"},"1428881":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Vert d\u2019eau"},"1428882":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Bleu stone"},"1428883":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Aucun"}},"546089":{"1412679":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"M\u00eame tissu"},"1412680":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Linum naturel"},"1412681":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Lin lav\u00e9 noir"},"1412682":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Lin lav\u00e9 blanc"},"1412683":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Lin lav\u00e9 brouillard"},"1412684":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Lin lav\u00e9 anthracite"},"1412685":{"prices":{"oldPrice":{"amount":0,"adjustments":[]},"basePrice":{"amount":0},"finalPrice":{"amount":0}},"type":"fixed","name":"Aucun"}}},
"controlContainer": ".field",
"priceHolderSelector": "[data-product-id='29996'][data-role=priceBox]"
}
}
}
</script>
<div id="configurateur" class="set_coussins">
<div class="step pdp-dropdown mb-4" id="step_12">
<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">
<a href="javascript:void(0);"
class="take-measures openModel" data-id="popupInfo">Plus d'informations sur les coussins</a>
<div id="popupInfo" >
<p>Contenu en cours de confection</p> </div>
<div id="" class="field required">
<label class="label" for="select_552850" style="display: block;line-height: 1.3;">
<span id="emioptlable_552850" data-value="" data-value-old="" style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable"></span>
</label>
<div class="control">
<span class="hide" id="emispanlable_552850"></span>
<div class="options-list nested" style=""
id="options-552850-list"><div class="field choice admin__field admin__field-option required"><input data-sku="40x40" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_552850","40 x 40 cm",0,"media/customoptions/c/o/coussin_carr_.jpg","","thumb_gallery",552850,"img","https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-40x40.png","")' type="radio" class="coussin-dimension radio admin__control-radio option01 required product-custom-option" name="options[552850]" id="options_552850_2" value="1447429" data-value="" data-selector="options[552850]" price="0" lastchange=""><label class="label admin__field-label"
for="options_552850_2"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-40x40.png" data-src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-40x40.png" alt="40 x 40 cm" height="70" width="200" loading="lazy"></div><span>40 x 40 cm</span><span class="option-final-price" data-option-key="552850_1447429"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="50x30" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_552850","50 x 30 cm",0,"media/customoptions/c/o/coussin_rect.jpeg","","thumb_gallery",552850,"img","https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x30.png","")' type="radio" class="coussin-dimension radio admin__control-radio option01 required product-custom-option" name="options[552850]" id="options_552850_3" value="1447430" data-value="" data-selector="options[552850]" price="0" lastchange=""><label class="label admin__field-label"
for="options_552850_3"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x30.png" data-src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x30.png" alt="50 x 30 cm" height="70" width="200" loading="lazy"></div><span>50 x 30 cm</span><span class="option-final-price" data-option-key="552850_1447430"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="50x40" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_552850","50 x 40 cm",0,"media/customoptions/c/o/coussin_rect_1.jpeg","","thumb_gallery",552850,"img","https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x40.png","")' type="radio" class="coussin-dimension radio admin__control-radio option01 required product-custom-option" name="options[552850]" id="options_552850_4" value="1447431" data-value="" data-selector="options[552850]" price="0" lastchange=""><label class="label admin__field-label"
for="options_552850_4"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x40.png" data-src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x40.png" alt="50 x 40 cm" height="70" width="200" loading="lazy"></div><span>50 x 40 cm</span><span class="option-final-price" data-option-key="552850_1447431"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="50x50" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_552850","50 x 50 cm",0,"media/customoptions/c/o/coussin_carr__1.jpeg","","thumb_gallery",552850,"img","https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x50.png","")' type="radio" class="coussin-dimension radio admin__control-radio option01 required product-custom-option" name="options[552850]" id="options_552850_5" value="1447432" data-value="" data-selector="options[552850]" price="0" lastchange=""><label class="label admin__field-label"
for="options_552850_5"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x50.png" data-src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-50x50.png" alt="50 x 50 cm" height="70" width="200" loading="lazy"></div><span>50 x 50 cm</span><span class="option-final-price" data-option-key="552850_1447432"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="60x30" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_552850","60 x 30 cm",0,"media/customoptions/c/o/coussin_rect.jpg","","thumb_gallery",552850,"img","https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-60x30.png","")' type="radio" class="coussin-dimension radio admin__control-radio option01 required product-custom-option" name="options[552850]" id="options_552850_6" value="1447433" data-value="" data-selector="options[552850]" price="0" lastchange=""><label class="label admin__field-label"
for="options_552850_6"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-60x30.png" data-src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-60x30.png" alt="60 x 30 cm" height="70" width="200" loading="lazy"></div><span>60 x 30 cm</span><span class="option-final-price" data-option-key="552850_1447433"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="60x60" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_552850","60 x 60 cm",0,"media/customoptions/c/o/coussin_carr__1.jpg","","thumb_gallery",552850,"img","https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-60x60.png","")' type="radio" class="coussin-dimension radio admin__control-radio option01 required product-custom-option" name="options[552850]" id="options_552850_7" value="1447434" data-value="" data-selector="options[552850]" price="0" lastchange=""><label class="label admin__field-label"
for="options_552850_7"><div class="option-wrapper-img"><img class="lazyload" src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-60x60.png" data-src="https://cdn4.mesrideaux.fr/customoptions/c/o/coussin-60x60.png" alt="60 x 60 cm" height="70" width="200" loading="lazy"></div><span>60 x 60 cm</span><span class="option-final-price" data-option-key="552850_1447434"></span></label></div></div>
<!-- custom options depends -->
<input id="options_552850" type="radio" style="display:none;" price="" value="" name="options[552850]">
<!-- custom options depends -->
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"552850","optionPrice":0,"optionValue":"1447429"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"552850","optionPrice":0,"optionValue":"1447430"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"552850","optionPrice":0,"optionValue":"1447431"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"552850","optionPrice":0,"optionValue":"1447432"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"552850","optionPrice":0,"optionValue":"1447433"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"552850","optionPrice":0,"optionValue":"1447434"}],
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="12">
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="step pdp-dropdown mb-4" id="step_40">
<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 sélectionne ma finition</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="finition" class="field required">
<label class="label" for="select_550550" style="display: block;line-height: 1.3;">
<span id="emioptlable_550550" data-value="Finition" data-value-old="Finition" style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable">Finition</span>
</label>
<div class="control">
<span class="hide" id="emispanlable_550550"></span>
<div class="options-list nested" style=""
id="options-550550-list"><div class="field choice admin__field admin__field-option required"><input data-sku="coussin-finition-bord" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_550550","Bord à bord",0,"media/customoptions/c/o/coussin-bord-a-bord-visuel.webp","","thumb_gallery",550550,"img","https://www.mesrideaux.fr/media/customoptions/c/o/coussin-bord-a-bord-visuel-picto.webp","")' type="radio" class="coussin-Finition radio admin__control-radio option01 required product-custom-option" name="options[550550]" id="options_550550_2" value="1435501" data-value="" data-selector="options[550550]" price="0" lastchange=""><label class="label admin__field-label"
for="options_550550_2"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/c/o/coussin-bord-a-bord-visuel-picto.webp" data-src="https://www.mesrideaux.fr/media/customoptions/c/o/coussin-bord-a-bord-visuel-picto.webp" alt="Bord à bord" height="70" width="200" loading="lazy"></div><span>Bord à bord</span><a href="javascript:void(0);" class="openModel">i</a><span class="option-final-price" data-option-key="550550_1435501"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="coussin-finition-passepoil" data-price=""
style="visibility: hidden;height: 35px; width: 35px;"
onclick=' activeinputdiv(this,"emispanlable_550550","Bordures personnalisées (passepoils)",0,"media/customoptions/c/o/coussin-passepoil-visuel.webp","","thumb_gallery",550550,"img","https://www.mesrideaux.fr/media/customoptions/c/o/coussin-passepoil-visuel-picto.webp","")' type="radio" class="coussin-Finition radio admin__control-radio option01 required product-custom-option" name="options[550550]" id="options_550550_3" value="1435502" data-value="" data-selector="options[550550]" price="0" lastchange="546089||548403"><label class="label admin__field-label"
for="options_550550_3"><div class="option-wrapper-img"><img class="lazyload" src="https://www.mesrideaux.fr/media/customoptions/c/o/coussin-passepoil-visuel-picto.webp" data-src="https://www.mesrideaux.fr/media/customoptions/c/o/coussin-passepoil-visuel-picto.webp" alt="Bordures personnalisées (passepoils)" height="70" width="200" loading="lazy"></div><span>Bordures personnalisées (passepoils)</span><a href="javascript:void(0);" class="openModel">i</a><span class="option-final-price" data-option-key="550550_1435502"></span></label></div></div>
<!-- custom options depends -->
<input id="options_550550" type="radio" style="display:none;" price="" value="" name="options[550550]">
<!-- custom options depends -->
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"550550","optionPrice":0,"optionValue":"1435501"},{"optionDefaultValue":"0","optiontype":"thumb_gallery","optionLable":"550550","optionPrice":0,"optionValue":"1435502"}],
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="velours" class="field">
<label class="label" for="select_548403" style="display: block;line-height: 1.3;">
<span style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable">Velours</span>
</label>
<div class="control">
<span ></span>
<div class="options-list nested"
id="options-548403-list"><div class="field choice admin__field admin__field-option"><input data-sku="coussin-velours-tst" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-velours radio admin__control-radio option04 product-custom-option" name="options[548403]" id="options_548403_2" value="1428877" data-value="" data-selector="options[548403]" price="0" lastchange="" onclick="changeRadioChek('548403','radio')" /><label class="label admin__field-label"
for="options_548403_2">Même tissu<span class="option-final-price" data-option-key="548403_1428877"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-velours-sln" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-velours radio admin__control-radio option04 product-custom-option" name="options[548403]" id="options_548403_3" value="1428878" data-value="" data-selector="options[548403]" price="0" lastchange="" onclick="changeRadioChek('548403','radio')" /><label class="label admin__field-label"
for="options_548403_3">Noir<span class="option-final-price" data-option-key="548403_1428878"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-velours-b" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-velours radio admin__control-radio option04 product-custom-option" name="options[548403]" id="options_548403_4" value="1428879" data-value="" data-selector="options[548403]" price="0" lastchange="" onclick="changeRadioChek('548403','radio')" /><label class="label admin__field-label"
for="options_548403_4">Blanc<span class="option-final-price" data-option-key="548403_1428879"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-velours-gs" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-velours radio admin__control-radio option04 product-custom-option" name="options[548403]" id="options_548403_5" value="1428880" data-value="" data-selector="options[548403]" price="0" lastchange="" onclick="changeRadioChek('548403','radio')" /><label class="label admin__field-label"
for="options_548403_5">Gris souris<span class="option-final-price" data-option-key="548403_1428880"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-velours-ve" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-velours radio admin__control-radio option04 product-custom-option" name="options[548403]" id="options_548403_6" value="1428881" data-value="" data-selector="options[548403]" price="0" lastchange="" onclick="changeRadioChek('548403','radio')" /><label class="label admin__field-label"
for="options_548403_6">Vert d’eau<span class="option-final-price" data-option-key="548403_1428881"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-velours-bs" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-velours radio admin__control-radio option04 product-custom-option" name="options[548403]" id="options_548403_7" value="1428882" data-value="" data-selector="options[548403]" price="0" lastchange="" onclick="changeRadioChek('548403','radio')" /><label class="label admin__field-label"
for="options_548403_7">Bleu stone<span class="option-final-price" data-option-key="548403_1428882"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-velours-aucun" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-velours radio admin__control-radio option04 product-custom-option" name="options[548403]" id="options_548403_8" value="1428883" data-value="" data-selector="options[548403]" price="0" lastchange="" onclick="changeRadioChek('548403','radio')" /><label class="label admin__field-label"
for="options_548403_8">Aucun<span class="option-final-price" data-option-key="548403_1428883"></span></label></div></div>
<!-- custom options depends -->
<!-- custom options depends -->
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"radio","optionLable":"548403","optionPrice":0,"optionValue":"1428877"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"548403","optionPrice":0,"optionValue":"1428878"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"548403","optionPrice":0,"optionValue":"1428879"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"548403","optionPrice":0,"optionValue":"1428880"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"548403","optionPrice":0,"optionValue":"1428881"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"548403","optionPrice":0,"optionValue":"1428882"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"548403","optionPrice":0,"optionValue":"1428883"}],
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(548403); </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 -->
<div id="lin" class="field">
<label class="label" for="select_546089" style="display: block;line-height: 1.3;">
<span style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable">Lin</span>
</label>
<div class="control">
<span ></span>
<div class="options-list nested"
id="options-546089-list"><div class="field choice admin__field admin__field-option"><input data-sku="coussin-lin-tst" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-lin radio admin__control-radio option04 product-custom-option" name="options[546089]" id="options_546089_2" value="1412679" data-value="" data-selector="options[546089]" price="0" lastchange="" onclick="changeRadioChek('546089','radio')" /><label class="label admin__field-label"
for="options_546089_2">Même tissu<span class="option-final-price" data-option-key="546089_1412679"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-lin-ln" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-lin radio admin__control-radio option04 product-custom-option" name="options[546089]" id="options_546089_3" value="1412680" data-value="" data-selector="options[546089]" price="0" lastchange="" onclick="changeRadioChek('546089','radio')" /><label class="label admin__field-label"
for="options_546089_3">Linum naturel<span class="option-final-price" data-option-key="546089_1412680"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-lin-lln" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-lin radio admin__control-radio option04 product-custom-option" name="options[546089]" id="options_546089_4" value="1412681" data-value="" data-selector="options[546089]" price="0" lastchange="" onclick="changeRadioChek('546089','radio')" /><label class="label admin__field-label"
for="options_546089_4">Lin lavé noir<span class="option-final-price" data-option-key="546089_1412681"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-lin-llb" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-lin radio admin__control-radio option04 product-custom-option" name="options[546089]" id="options_546089_5" value="1412682" data-value="" data-selector="options[546089]" price="0" lastchange="" onclick="changeRadioChek('546089','radio')" /><label class="label admin__field-label"
for="options_546089_5">Lin lavé blanc<span class="option-final-price" data-option-key="546089_1412682"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-lin-llbr" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-lin radio admin__control-radio option04 product-custom-option" name="options[546089]" id="options_546089_6" value="1412683" data-value="" data-selector="options[546089]" price="0" lastchange="" onclick="changeRadioChek('546089','radio')" /><label class="label admin__field-label"
for="options_546089_6">Lin lavé brouillard<span class="option-final-price" data-option-key="546089_1412683"></span></label></div><div class="field choice admin__field admin__field-option"><input data-sku="coussin-lin-lla" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-lin radio admin__control-radio option04 product-custom-option" name="options[546089]" id="options_546089_7" value="1412684" data-value="" data-selector="options[546089]" price="0" lastchange="" onclick="changeRadioChek('546089','radio')" /><label class="label admin__field-label"
for="options_546089_7">Lin lavé anthracite<span class="option-final-price" data-option-key="546089_1412684"></span></label></div><div class="field choice admin__field admin__field-option selectDepend"><input data-sku="coussin-lin-aucun" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-lin radio admin__control-radio option04 product-custom-option" name="options[546089]" id="options_546089_8" value="1412685" data-value="checked"><label class="label admin__field-label"
for="options_546089_8">Aucun<span class="option-final-price" data-option-key="546089_1412685"></span></label></div></div>
<!-- custom options depends -->
<!-- custom options depends -->
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"radio","optionLable":"546089","optionPrice":0,"optionValue":"1412679"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"546089","optionPrice":0,"optionValue":"1412680"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"546089","optionPrice":0,"optionValue":"1412681"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"546089","optionPrice":0,"optionValue":"1412682"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"546089","optionPrice":0,"optionValue":"1412683"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"546089","optionPrice":0,"optionValue":"1412684"},{"optionDefaultValue":"1","optiontype":"radio","optionLable":"546089","optionPrice":0,"optionValue":"1412685"}],
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(546089); </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="40">
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="step pdp-dropdown mb-4" id="step_41">
<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 mon intérieur</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="popupInterieur">Plus d'informations sur l'intérieur</a>
<div id="popupInterieur" >
<p>Contenu en cours de confection</p> </div>
<div id="intérieur" class="field required">
<label class="label" for="select_543773" style="display: block;line-height: 1.3;">
<span style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable">Intérieur</span>
</label>
<div class="control">
<span ></span>
<div class="options-list nested"
id="options-543773-list"><div class="field choice admin__field admin__field-option required"><input data-sku="coussin-interieur-avec" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-interieur radio admin__control-radio option04 required product-custom-option" name="options[543773]" id="options_543773_2" value="1398807" data-value="" data-selector="options[543773]" price="0" lastchange="" onclick="changeRadioChek('543773','radio')" /><label class="label admin__field-label"
for="options_543773_2">Avec intérieur<span class="option-final-price" data-option-key="543773_1398807"></span></label></div><div class="field choice admin__field admin__field-option required"><input data-sku="coussin-interieur-sans" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-interieur radio admin__control-radio option04 required product-custom-option" name="options[543773]" id="options_543773_3" value="1398808" data-value="" data-selector="options[543773]" price="0" lastchange="" onclick="changeRadioChek('543773','radio')" /><label class="label admin__field-label"
for="options_543773_3">Sans intérieur<span class="option-final-price" data-option-key="543773_1398808"></span></label></div></div>
<!-- custom options depends -->
<!-- custom options depends -->
<!-- custom options depends -->
<input id="options_543773" type="radio" style="display:none;" price="" value="" name="options[543773]">
<!-- custom options depends -->
<span id="options-543773-container"></span>
</div>
</div>
<script>
(function () {
var payload = {
defaultOption: [{"optionDefaultValue":"0","optiontype":"radio","optionLable":"543773","optionPrice":0,"optionValue":"1398807"},{"optionDefaultValue":"0","optiontype":"radio","optionLable":"543773","optionPrice":0,"optionValue":"1398808"}],
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="41">
<span class="ok">OK</span>
<span class="valid">Valider</span>
</span>
</div>
</div>
</div>
</div>
<div class="step pdp-dropdown mb-4" id="step_42">
<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 mon nombre de coussins</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">
<!--
@ 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-coussin-nbr-coussins">
<label class="label" for="options_541626_text">
Nombre de coussin identiques </label>
<div class="control">
<input type="text"
id="options_541626_text"
placeholder=""
class="input-text product-custom-option"
data-validate="{"required":true,"validate-number-french":true,"min":1,"validate-min-french":1}"
name="options[541626]"
data-sku="coussin-nbr-coussins"
data-selector="options[541626]"
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="1-300"
data-default-isrequired="1"
value="1"/>
</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="42">
<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_12" class="step_12">1</li>
<li data-scrolltarget="#step_40" class="step_40">2</li>
<li data-scrolltarget="#step_41" class="step_41">3</li>
<li data-scrolltarget="#step_42" class="step_42">4</li>
</ul>
</div>
</div>
<script>
require(
[
'jquery',
'Magento_Ui/js/modal/modal'
],
function ($, modal) {
var options = {
type: 'popup',
responsive: true,
innerScroll: true,
buttons: []
};
if($('#popupInfo').length)
modal(options, $('#popupInfo'));
if($('#popupInterieur').length)
modal(options, $('#popupInterieur'));
$(".openModel").on("click", function () {
var modalId = $(this).data('id');
$('#' + modalId).modal('openModal');
});
$('#configurateur .step').first().addClass('--active');
if (window.mrSyncConfiguratorStepDropdownsFromDom) {
window.mrSyncConfiguratorStepDropdownsFromDom();
}
$(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});
});
//Add option "aucun" to popup
var content = '<div id="others" class="field">';
content+= '<label class="label">';
content+= '<span style="display: inline-block; overflow: hidden; text-overflow: ellipsis; font-weight: 600;" class="ept_emioptlable">Autres</span></label>';
content+= '<div class="control">';
content+= '<span></span>';
content+= '<div class="options-list nested">';
content+= '<div class="field choice admin__field admin__field-option">';
content+= '<input data-sku="coussin-other" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-other radio admin__control-radio option04 product-custom-option" id="options_coussin_other" data-value="" price="0" />';
content+= '<label class="label admin__field-label" for="options_coussin_other">Aucun</label>';
content+= '</div>';
content+= '<div class="field choice admin__field admin__field-option">';
content+= '<input data-sku="coussin-tonsurton" style="display: inline-block; vertical-align: middle;height: 100%; margin-left: 8px; box-shadow:none;" type="radio" class="coussin-tonsurton radio admin__control-radio option04 product-custom-option" id="options_coussin_tonsurton" data-value="" price="0" />';
content+= '<label class="label admin__field-label" for="options_coussin_tonsurton">Même tissu</label>';
content+= '</div>';
content+= '</div>';
content+= '</div>';
content+= '</div>';
$('input[data-sku="coussin-velours-aucun"], input[data-sku="coussin-lin-aucun"], input[data-sku="coussin-velours-tst"], input[data-sku="coussin-lin-tst"]').parent().hide();
$(content).insertAfter("#lin");
//Get the modal
var modal = $("#velours, #lin, #others");
modal.wrapAll( "<div class='popup'><div class='popup-inner'></div></div>");
// Get the button that opens the modal
var btn = $('[data-sku="coussin-finition-passepoil"]').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();
$(this).parents('.step-wrapper').find('.popup').show();
});
// When the user clicks on <span> (x), close the modal
modal.find('.close').on('click', function() {
modal.hide();
$(this).parents('.step-wrapper').find('.popup').hide();
});
jQuery('.popup-inner #velours .field input.radio').on('change', function() {
jQuery('.popup-inner #lin .field input.radio').prop('checked', false);
jQuery('.popup-inner #others .field input.radio').prop('checked', false);
modal.hide();
$(this).parents('.step-wrapper').find('.popup').hide();
});
jQuery('.popup-inner #lin .field input.radio').on('change', function() {
jQuery('.popup-inner #velours .field input.radio').prop('checked', false);
jQuery('.popup-inner #others .field input.radio').prop('checked', false);
modal.hide();
$(this).parents('.step-wrapper').find('.popup').hide();
});
jQuery('.popup-inner #others .field input.radio').on('change', function() {
jQuery('.popup-inner #velours .field input.radio').prop('checked', false);
jQuery('.popup-inner #lin .field input.radio').prop('checked', false);
jQuery('.popup-inner #others .field input.radio').prop('checked', false);
var sku = $(this).data('sku');
if(sku == 'coussin-other'){
$('input[data-sku="coussin-lin-aucun"]').prop('checked', true);
$('input[data-sku="coussin-lin-tst"]').prop('checked', false);
}else{
$('input[data-sku="coussin-lin-tst"]').prop('checked', true);
$('input[data-sku="coussin-lin-aucun"]').prop('checked', false);
$(this).parents('.step-wrapper').find('.popup').hide();
}
$(this).prop('checked', true);
modal.hide();
$(this).parents('.step-wrapper').find('.popup').hide();
});
$('.tringle__quantity-wrapper .input-number-decrement').on("click", function(e) {
if($('input[data-sku="coussin-nbr-coussins"]').val() == 0){
$('input[data-sku="coussin-nbr-coussins"]').prop("value", 1);
}
});
// close modal on click outside at anywhere
$(document).on('click', function (e) {
if (($(e.target).hasClass("modal-popup")) && ($(e.target).hasClass('_show'))) {
$(e.target).find('.action-close').trigger('click');
$('.modals-overlay').remove();
}
});
$('.product-options-description').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="29996" data-price-box="product-id-29996"> <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">217 €</span> <meta itemprop="price" content="217">
<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_6a4ee3ef12854() {
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_6a4ee3ef12854()"
@click.prevent="addToWishlist(29996)"
: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"
>
Envie de réveiller votre canapé, d’adoucir votre fauteuil ou de donner du relief à votre lit avec une pièce vraiment élégante ? Le coussin Agueda sur mesure est pensé pour sublimer votre décoration avec un rendu raffiné, léger et parfaitement ajusté à votre intérieur. Grâce à une fabrication à la demande, vous choisissez les bonnes dimensions, le style et les finitions pour obtenir un coussin décoratif qui s’intègre naturellement à votre ambiance (salon contemporain ou chambre plus cocooning).
</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>Tissu Agueda aux rayures délicates et à l’esprit naturel</strong></h2>
<p dir="ltr">Édité par Gaston y Daniela, le tissu Agueda séduit par son motif rayures discret et sa palette “white & raw”, idéale pour créer une atmosphère lumineuse et haut de gamme. Sa composition associe des fibres qui donnent à la fois tenue et souplesse (viscose, polyester, lin, coton). Le résultat obtenu est un toucher agréable, une matière qui capte bien la lumière et un aspect naturellement texturé, parfait pour un coussin personnalisé au style chic et intemporel.</p>
<h2 dir="ltr"><strong>La confection et le savoir-faire fait pour vous</strong></h2>
<p dir="ltr">Chaque coussin sur mesure est réalisé à la commande, avec une attention portée à l’alignement des rayures et à la netteté des finitions. Vous obtenez un rendu propre, équilibré et durable, que ce soit pour un coussin de canapé, un coussin d’appoint ou une composition de plusieurs coussins décoratifs. Le sur-mesure permet aussi d’adapter le confort et l’esthétique à vos usages (lecture, détente, déco, accueil).</p>
<h2 dir="ltr"><strong>Les conseils de choix pour une déco harmonieuse</strong></h2>
<p dir="ltr">Pour un effet design, mixez plusieurs formats (par exemple rectangulaire + carré) et jouez sur les contrastes (lin uni, bouclette, velours ou coton texturé). Le tissu Agueda fonctionne très bien dans une déco minimaliste, bord de mer, maison d’architecte ou scandinave. Besoin d’un rendu harmonieux ? Optez pour un rappel de teintes naturelles (écru, sable, blanc cassé) et variez seulement les textures. Avec Agueda, votre coussin devient une pièce décorative de signature sobre, mais jamais fade.</p>
<p dir="ltr"> </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."
> gdt5287-001-gaston </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"
> Gaston y Daniela </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"
> 300 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"
> 55%VI 23%PLY 17%LI 5%COT </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"
> 13 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="382"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/382.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="375"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/375.png" alt="Repassage à température moyenne" width="48" height="48">Repassage à température moyenne</div><div class="flex items-center gap-2 w-full" data-fiche-technique-id="380"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/380.png" alt="Blanchiment exclu" width="48" height="48">Blanchiment exclu</div><div class="flex items-center gap-2 w-full" data-fiche-technique-id="372"><img src="https://cdn3.mesrideaux.fr/version1783511887/frontend/MesRideaux/hyva-child/fr_FR/icons/caracteristiques/372.png" alt="Nettoyage à sec processus normal" width="48" height="48">Nettoyage à sec processus normal</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-32343"
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/coussin-moontrace.html?coloris=1117" 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/c/o/coussin-chivasso-moontrace-vieux-rose-gris-vue-large_1.webp"
alt="Coussin Moontrace"
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/c/o/coussin-chivasso-moontrace-vieux-rose-gris-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/coussin-moontrace.html?coloris=1117" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Coussin moontrace </p>
<p class="product-block__subtitle">Chivasso</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="32343">
<span class="price-container price-final_price tax weee">
<span data-price-amount="212.0000"
data-price-type="finalPrice"
class="price-wrapper">212 € </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/coussin-moontrace.html?coloris=1117" 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-32245"
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/coussin-arsene.html?coloris=946" 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/c/o/coussin-pierre-frey-arsene-miel-vue-large_1.webp"
alt="Coussin Arsene"
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/c/o/coussin-pierre-frey-arsene-miel-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/coussin-arsene.html?coloris=946" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Coussin arsene </p>
<p class="product-block__subtitle">Pierre Frey</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="32245">
<span class="price-container price-final_price tax weee">
<span data-price-amount="325.0000"
data-price-type="finalPrice"
class="price-wrapper">325 € </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/coussin-arsene.html?coloris=946" 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-32364"
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/coussin-portofino.html?coloris=648" 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/c/o/coussin-pierre-frey-portofino-ivoire-vue-large_1.webp"
alt="COUSSIN PORTOFINO"
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/c/o/coussin-pierre-frey-portofino-ivoire-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/coussin-portofino.html?coloris=648" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Coussin portofino </p>
<p class="product-block__subtitle">Pierre Frey</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="32364">
<span class="price-container price-final_price tax weee">
<span data-price-amount="294.0000"
data-price-type="finalPrice"
class="price-wrapper">294 € </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/coussin-portofino.html?coloris=648" 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-32260"
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/coussin-cotiella.html?coloris=616" 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/c/o/coussin-gaston-y-daniela-cotiella-creme-vue-large_1.webp"
alt="COUSSIN COTIELLA"
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/c/o/coussin-gaston-y-daniela-cotiella-creme-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/coussin-cotiella.html?coloris=616" class="product-block__link flex flex-col flex-1" data-plp-product-url>
<p class="product-block__title flex-1">
Coussin cotiella </p>
<p class="product-block__subtitle">Gaston y Daniela</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="32260">
<span class="price-container price-final_price tax weee">
<span data-price-amount="299.0000"
data-price-type="finalPrice"
class="price-wrapper">299 € </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/coussin-cotiella.html?coloris=616" 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-32343"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about Coussin Moontrace </span>
</a>
<a
href="#mesrideaux-product-cross-sell-32245"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about Coussin Arsene </span>
</a>
<a
href="#mesrideaux-product-cross-sell-32364"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about COUSSIN PORTOFINO </span>
</a>
<a
href="#mesrideaux-product-cross-sell-32260"
class="snap-marker"
role="tab"
x-cloak
>
<span class="sr-only">
View more about COUSSIN COTIELLA </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" : 18605,
"useQuantityForWidgetPrice": true,
"productId": 29996,
"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="1hz3gWuNnl2g4AD3" />
<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#22414d4c56434156624f4751704b464743575a0c4450" target="_blank" rel="noopener"><span class="__cf_email__" data-cfemail="92f1fdfce6f3f1e6d2fff7e1e0fbf6f7f3e7eabcf4e0">[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 === '29996') {
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":"gdt5287-001-gaston-coussin","item_name":"COUSSIN AGUEDA","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Coussins","product_type":"made_to_measure","item_variant":"Beige"},"variants":[],"requiresVariantSelection":false,"ecommerce":{"currency":"EUR","value":0,"items":[{"item_id":"gdt5287-001-gaston-coussin","item_name":"COUSSIN AGUEDA","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Coussins","product_type":"made_to_measure","item_variant":"Beige"}]}};
</script>
<script>
window.mrGa4ConfiguratorConfig = {"item":{"item_id":"gdt5287-001-gaston-coussin","item_name":"COUSSIN AGUEDA","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Coussins","product_type":"made_to_measure","item_variant":"Beige"},"item_category":"Coussins","variants":[],"steps":{"12":{"step_name":"dimensions","label":"J’indique mes dimensions"},"40":{"step_name":"finition","label":"Je sélectionne ma finition"},"41":{"step_name":"interieur","label":"Je sélectionne mon intérieur"},"42":{"step_name":"nombre_coussins","label":"Je sélectionne mon nombre de coussins"}}};
</script>
<script>
window.mrGa4WishlistConfig = {"item":{"item_id":"gdt5287-001-gaston-coussin","item_name":"COUSSIN AGUEDA","affiliation":"mesrideaux.fr","currency":"EUR","price":0,"quantity":1,"item_brand":"MesRideaux","item_category":"Coussins","product_type":"made_to_measure","item_variant":"Beige"}};
</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":1783555055},"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:'a1834f580b8dd0af',t:'MTc4MzU1Nzk2OA=='};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>