{
  "version": 3,
  "sources": ["/cdn/shop/t/248/assets/mm-main-product-helper.js?mmfix=chatguard"],
  "sourcesContent": ["/* ============================================================================\n   mm-main-product-helper.js \u2014 logique JS de la fiche produit\n   ----------------------------------------------------------------------------\n   Charg\u00E9 uniquement par sections/main-product.liquid (balise <script> en fin\n   de section). Regroupe :\n   - accord\u00E9ons descriptifs (mmShowAccordeonContent) ;\n   - s\u00E9lecteur de quantit\u00E9 + prix du CTA (mmQtty / mmUpdatePrice) ;\n   - popup vid\u00E9o (displayForVideo) et chat Tidio mobile ;\n   - le custom element <variant-selector> : changement de variante avec\n     re-fetch de la section via ?variant=X&section_id=Y (Section Rendering) ;\n   - les accessoires cochables (.mm-accessory-card) : prix du bouton\n     (updateCTAButtonPrice), prix r\u00E9duits conditionnels (updateCardPrices).\n   Travaille main dans la main avec assets/mm_cart.js qui fournit\n   mmAddProductToCart() et updateProgressBarPreview()/updateProgressBarFull()\n   (appel\u00E9es ici : ce fichier suppose mm_cart.js d\u00E9j\u00E0 charg\u00E9).\n   ========================================================================== */\n\n// Ouvre/ferme un accord\u00E9on de la fiche produit (animation height 0 \u2192 scrollHeight).\n// Appel\u00E9e en onclick sur les titres d'accord\u00E9on dans sections/main-product.liquid.\nfunction mmShowAccordeonContent(elemToShowClass, titleClass) {\n    var accordeonToShow = document.querySelector(elemToShowClass);\n    var title = document.querySelector(titleClass);\n\n    var accordeonHeight = accordeonToShow.scrollHeight;\n    if (accordeonToShow.style.height == \"0px\" || accordeonToShow.style.height == \"\") {\n        accordeonToShow.style.height = accordeonHeight + \"px\";\n    } else {\n        accordeonToShow.style.height = \"0px\";\n    }\n\n    title.classList.toggle(\"mm-active\");\n}\n\n// Incr\u00E9mente/d\u00E9cr\u00E9mente le champ quantit\u00E9 (.mm-product-qtty-number), plancher\n// \u00E0 1, puis recalcule les prix affich\u00E9s. Appel\u00E9e en onclick sur les boutons\n// +/\u2212 de sections/main-product.liquid (mmQtty(1) / mmQtty(-1)).\nfunction mmQtty(delta) {\n    var number = document.querySelector(\".mm-product-qtty-number\");\n    var oldValue = number.value;\n    if (oldValue == 1 && delta == -1) {\n    } else {\n        let newValue = parseInt(oldValue, 10) + parseInt(delta, 10);\n        number.value = newValue;\n\t      mmUpdatePrice(newValue);\n\n    }\n}\n\n// R\u00E9affiche tous les prix (.mm-product-price-update) = prix unitaire\n// (data-value, en centimes) \u00D7 quantit\u00E9. Appel\u00E9e uniquement par mmQtty.\n// NB : symbole \u20AC en dur et point d\u00E9cimal (pas de virgule ici, contrairement\n// aux autres formatages du th\u00E8me).\nfunction mmUpdatePrice(qtty) {\n  let priceAll = document.querySelectorAll(\".mm-product-price-update\");\n  priceAll.forEach(function (price) {\n    price.innerHTML = `${((price.dataset.value * qtty) / 100).toFixed(2)}\u20AC`;\n  });\n}\n\n\n// Ouvre/ferme la popup vid\u00E9o produit : fige le scroll et fixe le header en\n// \"open\" ; en \"close\", remet le scroll et stoppe + rembobine la vid\u00E9o.\n// Appel\u00E9e en onclick depuis sections/main-product.liquid (croix des popups\n// .mm-product-popup-video / -proof).\n// NB : `new Vimeo.Player()` est tent\u00E9 syst\u00E9matiquement \u2014 le constructeur\n// renvoie toujours un objet, donc la branche else (vid\u00E9o HTML5 native,\n// mmVideo.pause()) est inatteignable ; et si la lib Vimeo n'est pas charg\u00E9e,\n// l'appel l\u00E8ve une ReferenceError.\nfunction displayForVideo(statut) {\n    var header = document.querySelector(\".header-wrapper\");\n    if (statut == \"open\") {\n        document.querySelector(\"html\").classList.add(\"stop-scrolling\");\n        header.classList.add(\"mm-header-fixed-video\");\n    } else if (statut == \"close\") {\n        document.querySelector(\"html\").classList.remove(\"stop-scrolling\");\n        header.classList.remove(\"mm-header-fixed-video\");\n        var mmVideo = document.querySelector(\".mm-video-popup_video-content\");\n        var playerVimeo = new Vimeo.Player(mmVideo);\n        if (playerVimeo != null) {\n          playerVimeo.pause().then(function () {\n            return playerVimeo.setCurrentTime(0);\n          });\n        } else {\n          mmVideo.pause();\n          mmVideo.currentTime = 0;\n        }\n    }\n}\n\n// ===== Chat Tidio (mobile uniquement) =====\n// Sur mobile, le widget Tidio est cach\u00E9 par d\u00E9faut et n'appara\u00EEt qu'au clic\n// sur le bouton custom .chat-button (rendu par sections/main-product.liquid).\n// \u00C0 la fermeture du chat, on re-cache la bulle et on nettoie tous les styles\n// inline que Tidio laisse sur <html>/<body> (sinon la page reste fig\u00E9e).\n// \u26A0\uFE0F 09.07.2026 \u2014 POST-MORTEM : depuis le relift (17/06), le chat IA a remplac\u00E9\n// Tidio et .chat-button n'existe PLUS sur la PDP. L'addEventListener non\n// prot\u00E9g\u00E9 jetait un TypeError qui TUAIT TOUT CE FICHIER sur mobile\n// (innerWidth<768) : VariantSelector jamais d\u00E9fini \u2192 s\u00E9lection de variante\n// morte (bug \u00AB 2XL ajoute XL au panier \u00BB) + barre d'info fig\u00E9e + prix\n// accessoires morts. Invisible sur desktop (bloc entier saut\u00E9). D'o\u00F9 la garde\n// ci-dessous : ce bloc ne doit JAMAIS pouvoir tuer le reste du fichier.\nif (window.innerWidth < 768) {\n    (function () {\n        function onTidioChatApiReady() {\n            window.tidioChatApi.hide();\n            window.tidioChatApi.on(\"close\", function () {\n                window.tidioChatApi.hide();\n                var html = document.querySelector(\"html\");\n                var body = document.querySelector(\"body\");\n                html.style.overflow = \"\";\n                html.style.margin = \"\";\n                body.style.overflow = \"\";\n                body.style.height = \"\";\n                body.style.width = \"\";\n                body.style.visibility = \"\";\n                body.style.display = \"\";\n                body.style.inset = \"\";\n                body.style.margin = \"\";\n                body.style.opacity = \"\";\n            });\n        }\n\n        if (window.tidioChatApi) {\n            window.tidioChatApi.on(\"ready\", onTidioChatApiReady);\n        } else {\n            document.addEventListener(\"tidioChat-ready\", onTidioChatApiReady);\n        }\n\n        var mmChatBtn = document.querySelector(\".chat-button\");\n        if (mmChatBtn) {\n            mmChatBtn.addEventListener(\"click\", function () {\n                window.tidioChatApi.show();\n                window.tidioChatApi.open();\n            });\n        }\n    })();\n}\n\n// FORM\n// Custom element <variant-selector> (markup dans sections/main-product.liquid,\n// \u00E9v\u00E9nements \"change\" aussi dispatch\u00E9s programmatiquement par\n// sections/MM-Modal-Tailles.liquid quand on choisit un t\u00E9l\u00E9phone).\n// \u00C0 chaque changement d'option : retrouve la variante dans le JSON inline\n// (.mm-main-product-json), met \u00E0 jour l'URL (?variant=), les prix des cards\n// (c\u00F4t\u00E9 client, sans flash), re-fetch la section rendue serveur\n// (?variant=X&section_id=Y, avec cache m\u00E9moire) pour swapper prix/CTA/infos,\n// et bascule la galerie sur l'image de la variante.\nclass VariantSelector extends HTMLElement {\n  constructor() {\n    super();\n    this.cached = {};\n    this.container = this.closest(\"#product-form\");\n    this.addEventListener(\"change\", this.onVariantChange);\n  }\n\n  onVariantChange() {\n    this.getSelectedOptions();\n    this.getSelectedVariant();\n\n    if (this.currentVariant) {\n      // 09.07.2026 (bug mobile \"2XL ajoute XL au panier\") : \u00E9crit l'ID de la\n      // variante choisie TOUT DE SUITE dans le champ cach\u00E9 lu par l'ajout au\n      // panier (#mmSelectedProductId, lu par mmValidationButton). Avant, ce\n      // champ n'\u00E9tait r\u00E9\u00E9crit qu'\u00E0 la FIN du fetch de section\n      // (variantFetch -> renderVariantInfo) : sur mobile (r\u00E9seau plus lent +\n      // CTA sticky sous le pouce), taper \"Ajouter\" avant la r\u00E9ponse envoyait\n      // l'ancienne variante (la 1re / d\u00E9faut) au panier. Le fetch repasse\n      // ensuite avec la m\u00EAme valeur -> aucun changement pour le reste.\n      const idInput = (this.container || document).querySelector(\"#mmSelectedProductId\");\n      if (idInput) idInput.value = this.currentVariant.id;\n      // M\u00EAme course pour la barre d'info sous les cartes : son texte\n      // n'arrivait qu'avec le fetch -> per\u00E7ue comme fig\u00E9e sur mobile (sur\n      // desktop, le JS de survol data-helpbar masquait le retard). On copie\n      // en synchrone le data-helpbar de la carte s\u00E9lectionn\u00E9e quand il existe\n      // (le fetch resynchronisera avec le rendu serveur, valeur identique).\n      const mmCheckedInput = this.querySelector(\".mm-product-variant-input:checked\");\n      const mmSelectedCard = mmCheckedInput && mmCheckedInput.parentElement\n        ? mmCheckedInput.parentElement.querySelector(\".mm-selector-card[data-helpbar]\")\n        : null;\n      const mmHelpbarText = (this.container || document).querySelector(\".mm-selector-variants-container-info-tels [data-helpbar-text]\");\n      if (mmSelectedCard && mmHelpbarText && mmSelectedCard.dataset.helpbar) {\n        mmHelpbarText.textContent = mmSelectedCard.dataset.helpbar;\n      }\n\n      this.updateURL();\n      // Met \u00E0 jour imm\u00E9diatement les prix des cards variants (mm-vs2-label-db-price)\n      this.updateVariantCardsPrices();\n      this.variantFetch();\n      this.updateMedia();\n    }\n  }\n\n  getSelectedOptions() {\n    // Cas 1 : s\u00E9lecteurs classiques (select)\n    if (this.querySelector(\"select.mm-product-form-variant-values\")) {\n      this.options = Array.from(\n        this.querySelectorAll(\"select.mm-product-form-variant-values\"),\n        (select) => select.value\n      );\n    } \n    // Cas 2 : s\u00E9lecteurs avec radios (nouvelle version)\n    else {\n      this.options = Array.from(\n        this.querySelectorAll(\".mm-product-variant-input:checked, input[type='radio'][name^='mm_options_']:checked\"),\n        (input) => input.value\n      );\n    }\n  }\n\n  getVariantJSON() {\n    this.variantData =\n      this.variantData ||\n      JSON.parse(this.querySelector('.mm-main-product-json[type=\"application/json\"]').textContent);\n    return this.variantData;\n  }\n\n  // R\u00E9solution de la variante : d'abord par public_title \"Opt1 / Opt2\"\n  // (fragile : d\u00E9pend du s\u00E9parateur exact de Shopify), sinon fallback par\n  // comparaison position \u00E0 position du tableau options.\n  getSelectedVariant() {\n    const variants = this.getVariantJSON();\n\n    // Si on a 2 options s\u00E9lectionn\u00E9es (ex: Cat\u00E9gorie + Adaptateur)\n    if (this.options.length >= 2) {\n      const joined = `${this.options[0]} / ${this.options[1]}`;\n      this.currentVariant = variants.find(v => v.public_title === joined);\n      if (this.currentVariant) return;\n    }\n\n    // Sinon on essaie de matcher par tableau d\u2019options (fallback)\n    this.currentVariant = variants.find(variant => {\n      if (!variant.options) return false;\n      return !variant.options\n        .map((opt, i) => this.options[i] === opt)\n        .includes(false);\n    });\n  }\n\n  updateURL() {\n    if (!this.currentVariant) return;\n    window.history.replaceState(\n      {},\n      \"\",\n      `${this.dataset.url}?variant=${this.currentVariant.id}#mm-selector`\n    );\n  }\n\n  // Re-fetch de la section produit rendue serveur pour la variante choisie\n  // (Section Rendering API). Le HTML pars\u00E9 est mis en cache par URL pour\n  // rendre instantan\u00E9s les allers-retours entre variantes.\n  variantFetch() {\n    const variantUrl = `${this.dataset.url}?variant=${this.currentVariant.id}&section_id=${this.dataset.section}`;\n\n    if (this.cached[variantUrl]) {\n      this.renderVariantInfo(this.cached[variantUrl]);\n      return;\n    }\n\n    fetch(variantUrl)\n      .then((res) => res.text())\n      .then((htmlText) => {\n        const html = new DOMParser().parseFromString(htmlText, \"text/html\");\n        this.cached[variantUrl] = html;\n        this.renderVariantInfo(html);\n      })\n      .catch((e) => console.error(e));\n  }\n\n  renderVariantInfo(html) {\n    this.updateElementOuter(\"#mmSelectedProductId\", html);\n    this.updateElementOuter(`#price-${this.dataset.section}`, html);\n    this.updateElementOuter(\".mm-product-form-submit-button\", html);\n    // Info tels (metafield custom.info_tels) \u2014 swap depuis le HTML serveur.\n    // La div est toujours rendue c\u00F4t\u00E9 Liquid (m\u00EAme vide) pour que ce swap\n    // marche aussi en passant d'une variante avec info_tels \u00E0 une sans.\n    this.updateElement(\".mm-selector-variants-container-info-tels\", html);\n    // On ne touche plus aux \u00E9l\u00E9ments .mm-reload (prix dans les cards variants)\n    // pour \u00E9viter tout \"flash\" : les prix sont mis \u00E0 jour c\u00F4t\u00E9 client dans updateVariantCardsPrices().\n  }\n\n  /**\n   * Met \u00E0 jour les prix affich\u00E9s dans les cards variants (design B)\n   * en fonction de la cat\u00E9gorie s\u00E9lectionn\u00E9e, sans attendre le fetch serveur.\n   */\n  updateVariantCardsPrices() {\n    const variants = this.getVariantJSON();\n    if (!this.options || this.options.length === 0) return;\n    const selectedOption1 = this.options[0]; // Cat\u00E9gorie s\u00E9lectionn\u00E9e\n\n    // Chaque card design B poss\u00E8de un input radio juste avant le label .mm-vs2-label-db\n    const cards = this.container\n      ? this.container.querySelectorAll('.mm-vs2-label-db')\n      : [];\n\n    cards.forEach(card => {\n      const input = card.previousElementSibling;\n      if (!input || !input.value) return;\n\n      const option2Value = input.value;\n\n      const matchingVariant = variants.find(v =>\n        v.option1 === selectedOption1 && v.option2 === option2Value\n      );\n\n      if (!matchingVariant) return;\n\n      const priceEl = card.querySelector('.mm-vs2-label-db-price');\n      if (!priceEl) return;\n\n      const priceCents = parseInt(matchingVariant.price, 10);\n      if (!priceCents) return;\n\n      const priceFormatted = (priceCents / 100).toFixed(2).replace('.', ',') + '\u20AC';\n      priceEl.textContent = priceFormatted;\n    });\n  }\n\n  // Helpers de swap DOM depuis le HTML re-fetch\u00E9 : innerHTML (updateElement),\n  // outerHTML (updateElementOuter), ou liste appari\u00E9e par index\n  // (updateMultipleElement \u2014 plus utilis\u00E9 par renderVariantInfo actuellement).\n  updateElement(selector, html) {\n    const dest = this.container.querySelector(selector);\n    const src = html.querySelector(selector);\n    if (src && dest) dest.innerHTML = src.innerHTML;\n  }\n\n  updateElementOuter(selector, html) {\n    const dest = this.container.querySelector(selector);\n    const src = html.querySelector(selector);\n    if (src && dest) dest.outerHTML = src.outerHTML;\n  }\n\n  updateMultipleElement(selector, html) {\n    const dests = this.container.querySelectorAll(selector);\n    const srcs = html.querySelectorAll(selector);\n    if (srcs.length && dests.length) {\n      for (let i = 0; i < srcs.length; i++) {\n        if (dests[i] && srcs[i]) dests[i].outerHTML = srcs[i].outerHTML;\n      }\n    }\n  }\n\n  // Bascule la galerie sur l'image associ\u00E9e \u00E0 la variante : simule un clic\n  // sur la miniature Splide correspondante (#thumbnail-carousel).\n  updateMedia() {\n    if (!this.currentVariant || !this.currentVariant.featured_media) return;\n\n    const mediaId = this.currentVariant.featured_media.id;\n    document.querySelectorAll(\"#thumbnail-carousel .splide__slide\").forEach((media) => {\n      if (media.dataset.id && media.dataset.id == mediaId) {\n        media.click();\n      }\n    });\n  }\n}\n\ncustomElements.define(\"variant-selector\", VariantSelector);\n\n\n// Bloc mort (Bold Bundles) : d\u00E9j\u00E0 comment\u00E9, et contiendrait du Liquid\n// ({{ section.id }}) qui n'est jamais interpr\u00E9t\u00E9 dans un asset .js.\n// window.addEventListener(\"load\", function () {\n//     setTimeout(function () {\n//         const comboInclude = document.querySelector(\".bold-bundles-product\");\n//         if (comboInclude != undefined) {\n//             const parentDiv = document.getElementById(\"mm-bundle-product-{{ section.id }}\");\n//             if (parentDiv != undefined) {\n//                 parentDiv.appendChild(comboInclude);\n//             }\n//         }\n//     }, 50);\n// });\n\n\n/* Toggle Quick Upsell (plaque m\u00E9tal) */\n// Au clic sur la carte upsell, toggle la classe mm-upsell-add-to-card (lue\n// par mmAddProductToCart dans mm_cart.js via .mm-clickable / \u00E9tat de la carte)\n// et permute l'affichage des deux prix du CTA.\n// NB : getElementById(\"product-form\") sans garde \u2014 le script planterait sur\n// une page sans #product-form (OK tant qu'il n'est charg\u00E9 que par\n// sections/main-product.liquid).\nconst productForm = document.getElementById(\"product-form\");\nconst quickUpsell = productForm.querySelector('.mm-upsell-product-container');\n\nif (quickUpsell) {\n  const priceContainerAll = productForm.querySelectorAll(\".mm-quick-upsell-price\");\n  quickUpsell.addEventListener(\"click\", () => {\n    quickUpsell.classList.toggle(\"mm-upsell-add-to-card\");\n    priceContainerAll.forEach((priceContainer) => {\n      priceContainer.classList.toggle(\"hidden\");\n    })\n  })\n}\n\n// ACCESSORIES\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  mmSetupProductAccessorties();\n});\n// Fonction quasi NO-OP (et typo dans le nom : \"Accessorties\").\n// Elle lit basePrice et d\u00E9finit formatPrice mais n'en fait RIEN : reliquat\n// d'une ancienne impl\u00E9mentation. Effet de bord r\u00E9el possible : TypeError au\n// DOMContentLoaded si .mm-quick-upsell-price .mm-product-price-update est\n// absent (priceDisplayElements[0] undefined).\nfunction mmSetupProductAccessorties() {\n  const accessoryCheckboxes = document.querySelectorAll(\".mm-product-accessories-container input[type='checkbox']\");\n  const priceDisplayElements = document.querySelectorAll(\".mm-cta-price.mm-quick-upsell-price .mm-product-price-update\");\n\n  // Prix du produit principal\n    //console.log('priceDisplayElements[0]', priceDisplayElements[0])\n    const basePrice = parseInt(priceDisplayElements[0].dataset.price); // Exemple: 4995 = 49,95\u20AC\n    //console.log('priceDisplayElements[0].dataset.price', priceDisplayElements[0].dataset.price)\n\n  function formatPrice(cents) {\n    return (cents / 100).toFixed(2).replace('.', ',') + '\u20AC';\n  }\n};\n\n\n// Recalcule le prix affich\u00E9 sur le bouton d'achat : prix de la variante\n// + accessoires coch\u00E9s (au prix r\u00E9duit si la remise est visible sur la card),\n// avec gestion du prix barr\u00E9 (compare_at) masqu\u00E9 quand il n'apporte rien.\n// Appel\u00E9e par checkThisCard \u00E0 chaque (d\u00E9)coche d'accessoire.\nfunction updateCTAButtonPrice() {\n  const visiblePriceElem = document.querySelector('#product-form .mm-product-price-update');\n  if (!visiblePriceElem) return;\n\n  // Base : prix variant (r\u00E9el) et prix de r\u00E9f\u00E9rence (compare_at, fallback price)\n  const basePrice = parseInt(visiblePriceElem.getAttribute('data-price')) || 0;\n  const baseComparePrice =\n    parseInt(visiblePriceElem.getAttribute('data-compare-price')) || basePrice;\n\n  // Somme des accessoires coch\u00E9s : prix pay\u00E9 (r\u00E9duit si applicable) vs prix de r\u00E9f\u00E9rence (data-price)\n  const checkedAccessories = document.querySelectorAll('.mm-accessory-card input[type=\"checkbox\"]:checked');\n  let accessoriesTotal = 0;\n  let accessoriesTotalCompare = 0;\n\n  checkedAccessories.forEach(input => {\n    const card = input.closest('.mm-accessory-card');\n    const unchangedPrice = !!card.querySelector('[data-unchanged]');\n    const reducedVisible =\n      !unchangedPrice && card.querySelector('[data-reduced]')?.style.display !== 'none';\n\n    const fullPrice = parseInt(input.getAttribute('data-price')) || 0;\n    const paidPrice = reducedVisible\n      ? parseInt(input.getAttribute('data-price-reduced')) || fullPrice\n      : fullPrice;\n\n    accessoriesTotal += paidPrice;       // ce qu'on paie\n    accessoriesTotalCompare += fullPrice; // r\u00E9f\u00E9rence (data-price, conform\u00E9ment \u00E0 la convention)\n  });\n\n  const total = basePrice + accessoriesTotal;\n  const totalCompare = baseComparePrice + accessoriesTotalCompare;\n\n  // Maj du prix pay\u00E9\n  const priceUpdateElems = document.querySelectorAll('#product-form .mm-cta-price .mm-product-price-update');\n  priceUpdateElems.forEach(el => {\n    el.setAttribute('data-value', total);\n    el.innerHTML = `${(total / 100).toFixed(2).replace('.', ',')}\u20AC`;\n  });\n\n  // Maj du prix barr\u00E9 : afficher uniquement si totalCompare > total\n  const comparePriceUpdateElems = document.querySelectorAll('#product-form .mm-cta-price .mm-product-compare-price-update');\n  const showCompare = totalCompare > total;\n  comparePriceUpdateElems.forEach(el => {\n    if (showCompare) {\n      el.style.display = '';\n      el.setAttribute('data-value', totalCompare);\n      el.innerHTML = `${(totalCompare / 100).toFixed(2).replace('.', ',')}\u20AC`;\n    } else {\n      el.style.display = 'none';\n    }\n  });\n}\n\n// Handler onchange des checkboxes accessoires (snippets/mm-accessory-card.liquid).\n// Toggle le style de la card puis resynchronise prix CTA, barre de paliers\n// (updateProgressBarPreview \u2014 d\u00E9finie dans mm_cart.js) et prix des cards.\nfunction checkThisCard(checkbox) {\n  const card = checkbox.closest('.mm-accessory-card');\n  card.classList.toggle('mm-active', checkbox.checked);\n\n  updateCTAButtonPrice();\n  updateProgressBarPreview(); \n  updateCardPrices();\n}\n\n// Affiche/masque les prix r\u00E9duits ([data-reduced] vs [data-original]) sur les\n// cards accessoires. R\u00E8gle m\u00E9tier : la remise ne s'applique qu'aux cards de\n// type \"Accessoires\", qu'\u00E0 la PREMI\u00C8RE card coch\u00E9e, et seulement si le total\n// pr\u00E9dictif (produit + panier) atteint le seuil. Met aussi \u00E0 jour\n// checkbox.dataset.displayedPrice, lu par updateProgressBarFull (mm_cart.js).\n// ATTENTION : seuil 2900 en dur ici, alors que updatePricesBasedOnCart\n// (mm_cart.js) utilise 3000 pour la m\u00EAme logique \u2014 incoh\u00E9rence probable.\n// M\u00EAme pi\u00E8ge que dans mm_cart.js : querySelector('data-accessory-in-cart')\n// teste l'existence de la balise sans v\u00E9rifier value=\"true\".\nfunction updateCardPrices() {\n  const cards = document.querySelectorAll('.mm-accessory-card-wrapper');\n\n  // Un accessoire remis\u00E9 est D\u00C9J\u00C0 au panier \u2192 le cr\u00E9neau \"1 accessoire \u00E0 -50%\"\n  // est CONSOMM\u00C9 \u2192 on force TOUTES les cartes au plein tarif (plus aucun prix\n  // barr\u00E9). (Bug 19/06 : avant on faisait juste `return`, ce qui laissait les\n  // cartes \u00E0 leur \u00E9tat -50% pr\u00E9c\u00E9dent \u2014 d'o\u00F9 les lumi\u00E8res/accessoires encore\n  // barr\u00E9s alors que la remise \u00E9tait d\u00E9j\u00E0 utilis\u00E9e.)\n  if (document.querySelector('data-accessory-in-cart')) {\n    cards.forEach(card => {\n      card.querySelectorAll('[data-reduced]').forEach(el => el.style.display = 'none');\n      card.querySelectorAll('[data-original]').forEach(el => el.style.display = 'block');\n      const cb = card.querySelector('input[type=\"checkbox\"]');\n      if (cb) cb.dataset.displayedPrice = cb.dataset.price;\n    });\n    return;\n  }\n\n  const checkedCards = Array.from(cards).filter(card => card.querySelector('input[type=\"checkbox\"]').checked);\n  // Bug lumi\u00E8res (19/06) : seuls les accessoires \u00C9LIGIBLES (type \"Accessoires\")\n  // \"consomment\" le cr\u00E9neau -50%. Un non-accessoire coch\u00E9 (ex. lumi\u00E8res) ne doit\n  // PAS retirer le -50% des vrais accessoires (plaque/cordon).\n  const checkedAccessoryCards = checkedCards.filter(card => card.dataset.type === 'Accessoires');\n\n  // dataset.PRICE (variante seule, rendu serveur) et pas dataset.value :\n  // value est r\u00E9\u00E9crit par updateCTAButtonPrice() en \u00AB variante + accessoires\n  // coch\u00E9s \u00BB \u2192 un accessoire coch\u00E9 gonflerait le pr\u00E9dictif qui pilote le\n  // seuil d'affichage du -50% (m\u00EAme bug que la frise, corrig\u00E9 29/07/2026).\n  const product_value = parseInt(document.querySelector('#mmDataPriceElem')?.dataset.price || 0);\n  const cart_value = parseInt(document.querySelector('.mm-dc-cta')?.dataset.totalPrice || 0);\n  const total_predictive_value = product_value + cart_value;\n\n  //console.log('total_predictive_value ::', total_predictive_value)\n\n  if (total_predictive_value >= 2900) {\n    //console.log('on affiche les prix r\u00E9duits');\n    if (checkedAccessoryCards.length === 0) {\n      // Aucun accessoire \u00C9LIGIBLE coch\u00E9 (panier vide OU seulement des non-accessoires\n      // type lumi\u00E8res) : on (r\u00E9)affiche le -50% sur TOUS les accessoires \u00E9ligibles\n      cards.forEach(card => {\n        const reducedAll = card.querySelectorAll('[data-reduced]');\n        const originalAll = card.querySelectorAll('[data-original]');\n        const isAccessory = card.dataset.type === 'Accessoires';\n        //console.log('isAccessory', isAccessory)\n\n        if (isAccessory) {\n          if (reducedAll) {\n            reducedAll.forEach(function(reduced) {\n              reduced.style.display = 'block';\n            })\n          }\n          if (originalAll) {\n            originalAll.forEach(function(original) {\n              original.style.display = 'none';\n            })\n          }\n        } else {\n          // Pas un accessoire \u2192 on garde le prix normal\n          if (reducedAll) {\n            reducedAll.forEach(function(reduced) {\n              reduced.style.display = 'none';\n            })\n          }\n          if (originalAll) {\n            originalAll.forEach(function(original) {\n              original.style.display = 'block';\n            })\n          }\n        }\n      });\n    } else {\n      // Une ou plusieurs cartes coch\u00E9es\n      cards.forEach(card => {\n        const checkbox = card.querySelector('input[type=\"checkbox\"]');\n        const reducedAll = card.querySelectorAll('[data-reduced]');\n        const originalAll = card.querySelectorAll('[data-original]');\n        const isAccessory = card.dataset.type === 'Accessoires';\n\n        if (!checkbox.checked) {\n          // Non coch\u00E9e \u2192 prix normal\n          if (reducedAll) {\n            reducedAll.forEach(function(reduced) {\n              reduced.style.display = 'none';\n            })\n          }\n          if (originalAll) {\n            originalAll.forEach(function(original) {\n              original.style.display = 'block';\n            })\n          }\n          checkbox.dataset.displayedPrice = checkbox.dataset.price;\n        } else {\n          if (card === checkedAccessoryCards[0]) {\n            // Premier accessoire \u00C9LIGIBLE coch\u00E9 \u2192 prix r\u00E9duit (le cr\u00E9neau -50%)\n            if (reducedAll) {\n              reducedAll.forEach(function(reduced) {\n                reduced.style.display = 'block';\n              })\n            }\n            if (originalAll) {\n              originalAll.forEach(function(original) {\n                original.style.display = 'none';\n              })\n            }\n            checkbox.dataset.displayedPrice = checkbox.dataset.priceReduced;\n          } else {\n            // Sinon prix normal (ou si ce n\u2019est pas un accessoire)\n            if (reducedAll) {\n              reducedAll.forEach(function(reduced) {\n                reduced.style.display = 'none';\n              })\n            }\n            if (originalAll) {\n              originalAll.forEach(function(original) {\n                original.style.display = 'block';\n              })\n            }\n            checkbox.dataset.displayedPrice = checkbox.dataset.price;\n          }\n        }\n      });\n    }\n  } else {\n    //console.log('on n\\'affiche pas les prix r\u00E9duits');\n    // on n'affiche pas les prix r\u00E9duits\n    cards.forEach(card => {\n      const reducedAll = card.querySelectorAll('[data-reduced]');\n      const originalAll = card.querySelectorAll('[data-original]');\n      if (reducedAll) {\n        reducedAll.forEach(function(reduced) {\n          reduced.style.display = 'none';\n        })\n      }\n      if (originalAll) {\n        originalAll.forEach(function(original) {\n          original.style.display = 'block';\n        })\n      }\n    });\n  }\n}\n\n\n// Appeler au load de la page\n// Premier rendu de la barre de paliers (fonction d\u00E9finie dans mm_cart.js,\n// qui doit donc \u00EAtre charg\u00E9 avant ce fichier).\nwindow.addEventListener('DOMContentLoaded', updateProgressBarPreview);\n\n\n// Offset du fil d'Ariane sticky : on pose --mm-header-h = hauteur r\u00E9elle du\n// header sticky (diff\u00E9rente mobile/desktop), lue par .mm-breadcrumbs-sticky\n// dans main-product.css. Recalcul\u00E9e au load et au resize/rotation.\n(function () {\n  function setHeaderHeight() {\n    var header = document.querySelector('.shopify-section.section-header');\n    if (!header) return;\n    var h = Math.round(header.getBoundingClientRect().height);\n    if (h > 0) document.documentElement.style.setProperty('--mm-header-h', h + 'px');\n  }\n  setHeaderHeight();\n  window.addEventListener('load', setHeaderHeight);\n  window.addEventListener('resize', setHeaderHeight);\n  window.addEventListener('orientationchange', setHeaderHeight);\n})();\n\n\n// ----------------------------------------------------------------------------\n// Survol des cartes des s\u00E9lecteurs (produit / support) \u2014 DESKTOP uniquement.\n// Au survol d'une carte, la barre d'info affiche le texte de CETTE carte\n// (attribut data-helpbar, pos\u00E9 par le snippet mm-selector-card) ; en quittant,\n// la barre revient au texte de la carte r\u00E9ellement s\u00E9lectionn\u00E9e (variante coch\u00E9e\n// pour le s\u00E9lecteur produit, produit courant .mm-selector-card-selected pour le\n// support), ou au texte initial \u00E0 d\u00E9faut. Sur mobile (pas de hover) : aucun effet.\n// Cible de la barre = le <p data-helpbar-text> rendu dans main-product.liquid.\n// ----------------------------------------------------------------------------\n(function () {\n  function initSelectorHelpbarHover() {\n    if (!window.matchMedia || !window.matchMedia('(hover: hover) and (min-width: 769px)').matches) return;\n\n    document.querySelectorAll('[data-helpbar-text]').forEach(function (bar) {\n      var scope = bar.closest('.mm-selector-variants, .mm-selector-support');\n      if (!scope) return;\n      var cards = scope.querySelectorAll('.mm-selector-card[data-helpbar]');\n      if (!cards.length) return;\n\n      var defaultText = bar.textContent;\n\n      // Texte de la carte actuellement s\u00E9lectionn\u00E9e (suit la vraie s\u00E9lection,\n      // m\u00EAme apr\u00E8s un clic sur une variante), sinon le texte initial.\n      function selectedText() {\n        var activeCard = null;\n        var checked = scope.querySelector('.mm-product-variant-input:checked');\n        if (checked) {\n          var wrap = checked.closest('.mm-product-variant');\n          if (wrap) activeCard = wrap.querySelector('.mm-selector-card[data-helpbar]');\n        }\n        if (!activeCard) activeCard = scope.querySelector('.mm-selector-card-selected[data-helpbar], .mm-selector-card-page[data-helpbar]');\n        var t = activeCard && activeCard.getAttribute('data-helpbar');\n        return (t && t.trim()) ? t : defaultText;\n      }\n\n      cards.forEach(function (card) {\n        card.addEventListener('mouseenter', function () {\n          var t = card.getAttribute('data-helpbar');\n          if (t && t.trim()) bar.textContent = t;\n        });\n        card.addEventListener('mouseleave', function () {\n          bar.textContent = selectedText();\n        });\n      });\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initSelectorHelpbarHover);\n  } else {\n    initSelectorHelpbarHover();\n  }\n})();\n\n\n\n\n\n"],
  "mappings": "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",
  "names": []
}
