{
  "version": 3,
  "sources": ["/cdn/shop/t/9/assets/noirmoutier.js?x=1794256343244"],
  "sourcesContent": ["/* Epicerie du Chateau - interactions (porte depuis la maquette, null-safe multi-pages) */\n(function () {\n  'use strict';\n\n  // Mobile menu\n  var burger = document.getElementById('burgerBtn');\n  var mobileMenu = document.getElementById('mobileMenu');\n  var menuOverlay = document.getElementById('menuOverlay');\n  var menuClose = document.getElementById('menuClose');\n\n  function openMenu() {\n    mobileMenu.classList.add('open');\n    burger.classList.add('open');\n    document.body.style.overflow = 'hidden';\n  }\n  function closeMenu() {\n    mobileMenu.classList.remove('open');\n    burger.classList.remove('open');\n    document.body.style.overflow = '';\n  }\n  if (burger && mobileMenu) {\n    burger.addEventListener('click', function () {\n      mobileMenu.classList.contains('open') ? closeMenu() : openMenu();\n    });\n  }\n  if (menuClose) menuClose.addEventListener('click', closeMenu);\n  if (menuOverlay) menuOverlay.addEventListener('click', closeMenu);\n\n  document.querySelectorAll('.mobile-menu__link').forEach(function (link) {\n    link.addEventListener('click', function (e) {\n      var href = this.getAttribute('href');\n      if (href && href.indexOf('#') !== 0) {\n        e.preventDefault();\n        closeMenu();\n        setTimeout(function () { window.location.href = href; }, 50);\n      } else {\n        closeMenu();\n      }\n    });\n  });\n\n  // Nav scroll state\n  var nav = document.getElementById('nav');\n  if (nav) {\n    window.addEventListener('scroll', function () {\n      nav.classList.toggle('scrolled', window.scrollY > 60);\n    }, { passive: true });\n  }\n\n  // Hero image zoom on load\n  var heroWrap = document.getElementById('heroImageWrap');\n  if (heroWrap) {\n    window.addEventListener('load', function () { heroWrap.classList.add('loaded'); });\n  }\n\n  // Scroll reveal\n  var revealEls = document.querySelectorAll('.reveal');\n  if (revealEls.length && 'IntersectionObserver' in window) {\n    var observer = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (entry.isIntersecting) {\n          entry.target.classList.add('visible');\n          observer.unobserve(entry.target);\n        }\n      });\n    }, { threshold: 0.12, rootMargin: '0px 0px -60px 0px' });\n    revealEls.forEach(function (el) { observer.observe(el); });\n  }\n\n  // Animated counters\n  var countEls = document.querySelectorAll('.count');\n  if (countEls.length && 'IntersectionObserver' in window) {\n    var counterObserver = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (!entry.isIntersecting) return;\n        var el = entry.target;\n        var target = parseInt(el.dataset.target, 10);\n        var duration = 1800;\n        var start = performance.now();\n        var animate = function (now) {\n          var progress = Math.min((now - start) / duration, 1);\n          var ease = 1 - Math.pow(1 - progress, 3);\n          el.textContent = Math.round(ease * target);\n          if (progress < 1) requestAnimationFrame(animate);\n        };\n        requestAnimationFrame(animate);\n        counterObserver.unobserve(el);\n      });\n    }, { threshold: 0.5 });\n    countEls.forEach(function (el) { counterObserver.observe(el); });\n  }\n\n  // Parallax hero on scroll\n  var heroImg = document.getElementById('heroImg');\n  if (heroImg) {\n    window.addEventListener('scroll', function () {\n      var scrolled = window.scrollY;\n      if (scrolled < window.innerHeight) {\n        // scale 1.15 = marge (overscan) pour que la translation n'expose jamais de vide\n        heroImg.style.transform = 'scale(1.15) translateY(' + (scrolled * 0.06) + 'px)';\n      }\n    }, { passive: true });\n  }\n\n  // Product card hover - lift sibling cards\n  var pcards = document.querySelectorAll('.product-card');\n  pcards.forEach(function (card) {\n    card.addEventListener('mouseenter', function () {\n      pcards.forEach(function (c) { if (c !== card) c.style.opacity = '0.75'; });\n    });\n    card.addEventListener('mouseleave', function () {\n      pcards.forEach(function (c) { c.style.opacity = ''; });\n    });\n  });\n\n  // Gallery items stagger on reveal\n  document.querySelectorAll('.gallery__item').forEach(function (item, i) {\n    item.style.transitionDelay = (i * 0.08) + 's';\n  });\n\n  // Cart badge - branche sur le panier Shopify (rendu serveur + maj apres ajout AJAX)\n  function refreshCartBadge(count) {\n    var badge = document.getElementById('navCartCount');\n    if (!badge) return;\n    if (count > 0) {\n      badge.textContent = count > 9 ? '9+' : count;\n      badge.classList.add('visible');\n    } else {\n      badge.classList.remove('visible');\n    }\n  }\n  document.addEventListener('DOMContentLoaded', function () {\n    fetch('/cart.js', { headers: { 'Accept': 'application/json' } })\n      .then(function (r) { return r.json(); })\n      .then(function (cart) { refreshCartBadge(cart.item_count); })\n      .catch(function () {});\n  });\n\n  // Toast de confirmation : cree des le chargement pour que les lecteurs d'ecran l'annoncent (role status)\n  var toastEl = document.createElement('div');\n  toastEl.id = 'omp-toast';\n  toastEl.className = 'toast';\n  toastEl.setAttribute('role', 'status');\n  toastEl.setAttribute('aria-live', 'polite');\n  document.body.appendChild(toastEl);\n\n  function showToast(msg, withCartLink) {\n    var t = toastEl;\n    t.textContent = msg;\n    if (withCartLink) {\n      var link = document.createElement('a');\n      link.href = '/cart';\n      link.className = 'toast__link';\n      link.textContent = 'Voir le panier';\n      t.appendChild(link);\n    }\n    t.classList.add('show');\n    clearTimeout(t._tm);\n    t._tm = setTimeout(function () { t.classList.remove('show'); }, 4000);\n  }\n\n  function bumpCartBadge() {\n    var badge = document.getElementById('navCartCount');\n    if (!badge) return;\n    badge.classList.remove('bump');\n    void badge.offsetWidth;\n    badge.classList.add('bump');\n  }\n\n  // Quick-add depuis les cartes catalogue (sans quitter la page, panier natif Shopify)\n  document.addEventListener('submit', function (e) {\n    var form = e.target.closest && e.target.closest('[data-quick-add]');\n    if (!form) return;\n    e.preventDefault();\n    var btn = form.querySelector('button');\n    fetch('/cart/add.js', { method: 'POST', headers: { 'Accept': 'application/json' }, body: new FormData(form) })\n      .then(function (r) { if (!r.ok) throw new Error('add'); return r.json(); })\n      .then(function () {\n        if (btn) {\n          btn.classList.add('added');\n          clearTimeout(btn._tm);\n          if (btn.classList.contains('product-add')) {\n            // Fiche produit : le bouton lui-meme confirme l'ajout pendant 2,5 s\n            if (!btn.dataset.label) btn.dataset.label = btn.textContent.trim();\n            btn.textContent = 'Ajout\u00E9 au panier';\n            btn._tm = setTimeout(function () { btn.textContent = btn.dataset.label; btn.classList.remove('added'); }, 2500);\n          } else {\n            btn._tm = setTimeout(function () { btn.classList.remove('added'); }, 1000);\n          }\n        }\n        showToast('Ajout\u00E9 au panier', true);\n        return fetch('/cart.js', { headers: { 'Accept': 'application/json' } }).then(function (r) { return r.json(); });\n      })\n      .then(function (cart) { if (cart) { refreshCartBadge(cart.item_count); bumpCartBadge(); } })\n      .catch(function () { showToast('Indisponible pour le moment'); });\n  });\n})();\n(function(){var f=function(){document.querySelectorAll('.product-long p').forEach(function(p){p.innerHTML=p.innerHTML.replace(/&nbsp; | &nbsp;/g,' ')})};if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',f)}else{f()}})();"],
  "mappings": "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",
  "names": []
}
