{
  "version": 3,
  "sources": ["/cdn/shop/t/112/compiled_assets/snippet-scripts.js?country=FR&currency=EUR"],
  "sourcesContent": ["(function() {\n  var __snippets__ = {};\n  (function() {\n    var element = document.getElementById(\"snippets-script\");\n    var attribute = element ? element.getAttribute(\"data-snippets\") : '';\n    var snippets = attribute.split(\",\").filter(Boolean);\n\n    for (var i = 0; i < snippets.length; i++) {\n      __snippets__[snippets[i]] = true;\n    }\n  })();\n  (function() {\n  if (!__snippets__[\"cm-cart-complementary-products\"] && !Shopify.designMode) return;\n  try {\n    if (!customElements.get('cart-complements')) {\n    customElements.define('cart-complements', class CartComplements extends HTMLElement {\n      connectedCallback() {\n        if (this.dataset.initialized === 'true') return;\n        this.dataset.initialized = 'true';\n        this.remaining = Number(this.dataset.remaining || 0);\n        this.productIds = this.parseProductIds();\n        if (this.remaining <= 0 || !this.productIds.length) return;\n\n        this.panel = this.closest('[id^=\"cm-mini-cart-panel-\"]');\n        if (!this.panel) {\n          this.loadProducts();\n          return;\n        }\n\n        this.panelObserver = new MutationObserver(() => this.loadWhenVisible());\n        this.panelObserver.observe(this.panel, {\n          attributes: true,\n          attributeFilter: ['aria-hidden', 'class', 'hidden', 'style']\n        });\n        this.loadWhenVisible();\n      }\n\n      disconnectedCallback() {\n        if (this.panelObserver) this.panelObserver.disconnect();\n      }\n\n      loadWhenVisible() {\n        if (!this.panel || this.panel.getAttribute('aria-hidden') !== 'false') return;\n        if (this.panelObserver) this.panelObserver.disconnect();\n        this.loadProducts();\n      }\n\n      parseProductIds() {\n        try {\n          return JSON.parse(this.dataset.productIds || '[]').slice(0, 3);\n        } catch (error) {\n          return [];\n        }\n      }\n\n      async fetchRecommendations(intent) {\n        const root = window.Shopify && window.Shopify.routes ? window.Shopify.routes.root : '/';\n        const requests = this.productIds.map(async (productId) => {\n          const url = `${root}recommendations/products.json?product_id=${encodeURIComponent(productId)}&limit=10&intent=${intent}`;\n          try {\n            const response = await fetch(url, { headers: { Accept: 'application/json' } });\n            if (!response.ok) return [];\n            const data = await response.json();\n            return Array.isArray(data.products) ? data.products : [];\n          } catch (error) {\n            return [];\n          }\n        });\n        return (await Promise.all(requests)).flat();\n      }\n\n      selectVariant(product) {\n        const variants = (product.variants || []).filter((variant) => variant.available && Number(variant.price) > 0);\n        if (!variants.length) return null;\n        const reachesThreshold = variants\n          .filter((variant) => Number(variant.price) >= this.remaining)\n          .sort((a, b) => Number(a.price) - Number(b.price));\n        if (reachesThreshold.length) return reachesThreshold[0];\n        return variants.sort((a, b) => Number(b.price) - Number(a.price))[0];\n      }\n\n      rankProducts(products) {\n        const currentProductIds = new Set(this.productIds.map(String));\n        const seenProductIds = new Set();\n        const candidates = [];\n\n        products.forEach((product) => {\n          const productId = String(product.id);\n          const searchable = `${product.handle || ''} ${product.type || ''} ${(product.tags || []).join(' ')}`.toLowerCase();\n          const isGiftCard = searchable.includes('gift card') || searchable.includes('gift-card') || searchable.includes('carte cadeau') || searchable.includes('carte-cadeau');\n          if (currentProductIds.has(productId) || seenProductIds.has(productId) || isGiftCard || !product.available) return;\n          const variant = this.selectVariant(product);\n          if (!variant) return;\n          seenProductIds.add(productId);\n          candidates.push({ product, variant, price: Number(variant.price) });\n        });\n\n        return candidates.sort((a, b) => {\n          const aReaches = a.price >= this.remaining;\n          const bReaches = b.price >= this.remaining;\n          if (aReaches !== bReaches) return aReaches ? -1 : 1;\n          return aReaches ? a.price - b.price : b.price - a.price;\n        });\n      }\n\n      async loadProducts() {\n        const complementary = await this.fetchRecommendations('complementary');\n        let candidates = this.rankProducts(complementary);\n        if (candidates.length < 2) {\n          const related = await this.fetchRecommendations('related');\n          candidates = this.rankProducts(complementary.concat(related));\n        }\n        if (!candidates.length) return;\n        this.renderProducts(candidates.slice(0, 2));\n        this.hidden = false;\n      }\n\n      formatMoney(cents) {\n        try {\n          return new Intl.NumberFormat(this.dataset.locale || undefined, {\n            style: 'currency',\n            currency: this.dataset.currency\n          }).format(cents / 100);\n        } catch (error) {\n          return `${(cents / 100).toFixed(2)} ${this.dataset.currency || ''}`.trim();\n        }\n      }\n\n      productImage(product) {\n        const featuredImage = product.featured_image;\n        if (typeof featuredImage === 'string') return featuredImage;\n        if (featuredImage && featuredImage.src) return featuredImage.src;\n        return Array.isArray(product.images) && product.images.length ? product.images[0] : '';\n      }\n\n      createProduct(candidate) {\n        const { product, variant, price } = candidate;\n        const article = document.createElement('article');\n        article.className = 'cm-cart-complements__product';\n\n        const imageLink = document.createElement('a');\n        imageLink.className = 'cm-cart-complements__image-link';\n        imageLink.href = product.url;\n        const imageUrl = this.productImage(product);\n        if (imageUrl) {\n          const image = document.createElement('img');\n          image.className = 'cm-cart-complements__image';\n          image.src = imageUrl;\n          image.alt = product.title || '';\n          image.loading = 'lazy';\n          image.width = 72;\n          image.height = 72;\n          imageLink.appendChild(image);\n        }\n\n        const content = document.createElement('div');\n        content.className = 'cm-cart-complements__content';\n        const title = document.createElement('a');\n        title.className = 'cm-cart-complements__product-title';\n        title.href = product.url;\n        title.textContent = product.title;\n        const productPrice = document.createElement('span');\n        productPrice.className = 'cm-cart-complements__price';\n        productPrice.textContent = this.formatMoney(price);\n        const button = document.createElement('button');\n        button.className = 'cm-cart-complements__add';\n        button.type = 'button';\n        button.textContent = this.dataset.addLabel;\n        button.addEventListener('click', () => this.addVariant(variant.id, button));\n\n        content.append(title, productPrice, button);\n        article.append(imageLink, content);\n        return article;\n      }\n\n      renderProducts(candidates) {\n        const container = this.querySelector('[data-complementary-products]');\n        if (!container) return;\n        const fragment = document.createDocumentFragment();\n        candidates.forEach((candidate) => fragment.appendChild(this.createProduct(candidate)));\n        container.replaceChildren(fragment);\n      }\n\n      async addVariant(variantId, button) {\n        const status = this.querySelector('[data-complementary-status]');\n        const root = window.Shopify && window.Shopify.routes ? window.Shopify.routes.root : '/';\n        button.disabled = true;\n        button.textContent = this.dataset.addingLabel;\n        if (status) status.textContent = '';\n        try {\n          const response = await fetch(`${root}cart/add.js`, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n            body: JSON.stringify({ items: [{ id: variantId, quantity: 1 }] })\n          });\n          if (!response.ok) throw new Error('cart-add-failed');\n          window.location.reload();\n        } catch (error) {\n          button.disabled = false;\n          button.textContent = this.dataset.addLabel;\n          if (status) status.textContent = this.dataset.errorLabel;\n        }\n      }\n    });\n  }\n  } catch(e) { console.error(e); }\n})();\n\n(function() {\n  if (!__snippets__[\"cm-lazy-chat\"] && !Shopify.designMode) return;\n  try {\n    (() => {\n    const setup = () => {\n      const launcher = document.querySelector('.cm-lazy-chat');\n      const chat = document.querySelector('shopify-chat');\n      const embedData = document.getElementById('shopify-chat-app-embed-data');\n\n      if (!launcher || !chat || chat.shadowRoot) return;\n\n      let label = 'Chat';\n      try {\n        label = JSON.parse(embedData.textContent).settings.buttonLabel || label;\n      } catch (error) {\n        console.debug('Shopify Inbox label unavailable.', error);\n      }\n\n      launcher.querySelector('span').textContent = label;\n      launcher.setAttribute('aria-label', label);\n      launcher.hidden = false;\n\n      const openNativeChat = (attempt = 0) => {\n        const activator = chat.shadowRoot?.querySelector('[part=\"activator\"]');\n        if (activator) {\n          activator.click();\n          launcher.remove();\n          return;\n        }\n\n        if (attempt < 40) window.setTimeout(() => openNativeChat(attempt + 1), 50);\n        else launcher.disabled = false;\n      };\n\n      launcher.addEventListener('click', () => {\n        launcher.disabled = true;\n        const moduleScript = document.createElement('script');\n        moduleScript.type = 'module';\n        moduleScript.crossOrigin = 'anonymous';\n        moduleScript.fetchPriority = 'low';\n        moduleScript.async = true;\n        moduleScript.addEventListener('load', () => openNativeChat(), { once: true });\n        moduleScript.addEventListener('error', () => {\n          launcher.disabled = false;\n        }, { once: true });\n        moduleScript.src = 'https://cdn.shopify.com/storefront/web-components/chat.js';\n        document.head.appendChild(moduleScript);\n      }, { once: true });\n    };\n\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', setup, { once: true });\n    else setup();\n  })();\n  } catch(e) { console.error(e); }\n})();\n\n})();\n"],
  "mappings": "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",
  "names": []
}
