Skip to product information
-20%
Couverture Fleurie Premium
À partir de 199 dh 249 dh
Élégance et confort pour votre chambre, en toute saison.
La Couverture Fleurie Premium associe un format généreux de 2,20 × 2,40 m à 5 designs floraux, pour apporter une touche plus élégante et confortable à votre chambre.
Format : 2,20 × 2,40 m
🚚 Livraison Marrakech : 19 DH · Partout au Maroc : 39 DH
✓ Produit présenté avec ses détails réels
✓ 5 designs au choix
✓ Livraison partout au Maroc
✓ Informations et prix affichés clairement
. The theme's own native variant-picker already keeps this
param in sync for its own purposes; we mirror that here explicitly
(via replaceState, so it doesn't spam browser history) in case
something about our restyled picker is short-circuiting that. ---- */
try {
var url = new URL(window.location.href);
if (url.searchParams.get('variant') !== variantId) {
url.searchParams.set('variant', variantId);
window.history.replaceState(window.history.state, '', url.toString());
}
} catch (e) { /* URL API unavailable or blocked — no-op */ }
/* ---- Third signal: broadcast the change as a couple of commonly-used
custom DOM event names/shapes. Several Shopify apps subscribe to one
of these conventions to learn about a variant change happening
outside their own UI; dispatching a small set of the most common
shapes costs nothing and doesn't rely on the app matching Shopify's
full PUB_SUB_EVENTS.variantChange (which is scoped to Liquid/theme JS
modules, not reachable from here). ---- */
var cfpEventDetail = { variantId: variantId, id: variantId, variant: { id: variantId } };
['variant:change', 'variantChange', 'product:variant-change'].forEach(function(evtName){
document.dispatchEvent(new CustomEvent(evtName, { detail: cfpEventDetail, bubbles: true }));
});
}
/* ---- Defensive wrapper: an uncaught error in any one of these calls must
never prevent the MutationObserver below from being attached, since that
observer is what keeps the fix applied across the theme's own re-renders.
(This is exactly how the previous :has()-based querySelector calls used
to fail: a syntax error on an unsupported selector threw, which aborted
this whole IIFE before the observer was ever registered.) ---- */
function cfpSafe(fn){
try { fn(); } catch (err) { /* no-op — never let one failure break the rest */ }
}
document.addEventListener('change', function(e){
cfpSafe(cfpApplyStructuralRoles);
var offerFieldset = cfpGetOfferFieldset();
if (e.target && offerFieldset && offerFieldset.contains(e.target)) {
cfpSafe(cfpSyncVariantEverywhere);
}
});
document.addEventListener('click', function(e){
if (e.target && e.target.closest && e.target.closest('#rsi_buy_now_button')) {
cfpSafe(cfpSyncVariantEverywhere);
}
}, true);
cfpSafe(cfpApplyStructuralRoles);
cfpSafe(cfpInjectOffers);
cfpSafe(cfpSyncVariantEverywhere);
setTimeout(function(){ cfpSafe(cfpInjectOffers); }, 150);
setTimeout(function(){ cfpSafe(cfpInjectOffers); }, 600);
setTimeout(function(){ cfpSafe(cfpInjectOffers); }, 1500);
setTimeout(function(){ cfpSafe(cfpSyncVariantEverywhere); }, 150);
setTimeout(function(){ cfpSafe(cfpSyncVariantEverywhere); }, 600);
setTimeout(function(){ cfpSafe(cfpSyncVariantEverywhere); }, 1500);
/* ---- Shopify's own variant-picker re-renders (replaces) this markup after
initial paint whenever the page loads on a non-default ?variant=, which wiped
out the one-shot injected content above (the "shows correctly for a split
second, then reverts" bug). A MutationObserver keeps re-applying the same
idempotent injection every time that happens, so it survives any number of
re-renders instead of running once.
Watching ".product-information" itself was fragile: if the theme's re-render
replaces that whole element (not just its children), the observer stays
attached to the old, now-detached node and silently stops firing — which
matches the intermittent "works once, then back to no price" behavior seen.
document.documentElement is never itself replaced, so subtree mutations
anywhere on the page are always caught, regardless of how deep the theme's
re-render goes. ---- */
var cfpPending = false;
var cfpObserver = new MutationObserver(function(){
if (cfpPending) return;
cfpPending = true;
setTimeout(function(){
cfpPending = false;
cfpSafe(cfpInjectOffers);
cfpSafe(cfpSyncVariantEverywhere);
}, 30);
});
try {
cfpObserver.observe(document.documentElement, { childList: true, subtree: true });
} catch (err) { /* MutationObserver unsupported — the initial cfpSafe() calls above still ran */ }
})();'>