{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/rp-reviews-carousel.js?rpreviews=20260923a"],
  "sourcesContent": ["(() => {\n  const STORAGE_KEY = \"rp-user-reviews-v1\";\n\n  const pageWindow = (current, total) => {\n    if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n    const set = new Set([1, total]);\n    for (let i = current - 1; i <= current + 2; i += 1) if (i >= 1 && i <= total) set.add(i);\n    if (current <= 3) [2, 3, 4].forEach((n) => { if (n < total) set.add(n); });\n    if (current >= total - 2) [total - 3, total - 2, total - 1].forEach((n) => { if (n > 1) set.add(n); });\n    return Array.from(set).sort((a, b) => a - b);\n  };\n\n  const parseDate = (el) => {\n    const raw = (el.getAttribute(\"data-date\") || \"\").trim();\n    if (!raw) return 0;\n    const t = Date.parse(raw);\n    return Number.isFinite(t) ? t : 0;\n  };\n\n  const readStoredReviews = () => {\n    try {\n      const raw = localStorage.getItem(STORAGE_KEY);\n      if (!raw) return [];\n      const parsed = JSON.parse(raw);\n      return Array.isArray(parsed) ? parsed : [];\n    } catch {\n      return [];\n    }\n  };\n\n  const writeStoredReviews = (list) => {\n    try {\n      localStorage.setItem(STORAGE_KEY, JSON.stringify(list.slice(0, 40)));\n    } catch {\n      try {\n        const slim = list.slice(0, 20).map((r) => ({ ...r, photos: (r.photos || []).slice(0, 1) }));\n        localStorage.setItem(STORAGE_KEY, JSON.stringify(slim));\n      } catch {}\n    }\n  };\n\n  const starsFor = (rating) => {\n    const n = Math.max(1, Math.min(5, parseInt(rating, 10) || 5));\n    return \"\u2605\".repeat(n) + \"\u2606\".repeat(5 - n);\n  };\n\n  const todayIso = () => {\n    const d = new Date();\n    const m = String(d.getMonth() + 1).padStart(2, \"0\");\n    const day = String(d.getDate()).padStart(2, \"0\");\n    return `${d.getFullYear()}-${m}-${day}`;\n  };\n\n  const normName = (value) => (value || \"\").replace(/\\s+/g, \" \").trim().toLowerCase();\n\n  const fileKey = (src) => {\n    if (!src) return \"\";\n    const clean = String(src).split(\"?\")[0];\n    const parts = clean.split(\"/\");\n    return (parts[parts.length - 1] || clean).toLowerCase();\n  };\n\n  const compressImageFile = (file) =>\n    new Promise((resolve) => {\n      if (!file || !file.type || !file.type.startsWith(\"image/\")) {\n        resolve(null);\n        return;\n      }\n      const url = URL.createObjectURL(file);\n      const img = new Image();\n      img.onload = () => {\n        URL.revokeObjectURL(url);\n        const w = img.naturalWidth || img.width || 1;\n        const h = img.naturalHeight || img.height || 1;\n        const scale = Math.min(1, 1200 / Math.max(w, h));\n        const cw = Math.max(1, Math.round(w * scale));\n        const ch = Math.max(1, Math.round(h * scale));\n        const canvas = document.createElement(\"canvas\");\n        canvas.width = cw;\n        canvas.height = ch;\n        const ctx = canvas.getContext(\"2d\");\n        if (!ctx) {\n          resolve(null);\n          return;\n        }\n        ctx.drawImage(img, 0, 0, cw, ch);\n        let dataUrl = \"\";\n        try {\n          dataUrl = canvas.toDataURL(\"image/jpeg\", 0.72);\n        } catch {\n          resolve(null);\n          return;\n        }\n        resolve({ name: file.name || \"photo.jpg\", dataUrl });\n      };\n      img.onerror = () => {\n        URL.revokeObjectURL(url);\n        resolve(null);\n      };\n      img.src = url;\n    });\n\n  const buildReviewCard = (review) => {\n    const rating = Math.max(1, Math.min(5, parseInt(review.rating, 10) || 5));\n    const author = (review.author || \"Client\").trim() || \"Client\";\n    const initial = (author.slice(0, 1) || \"P\").toUpperCase();\n    const photos = Array.isArray(review.photos) ? review.photos.filter((p) => p && p.dataUrl) : [];\n    const hasPhoto = photos.length > 0;\n    const first = hasPhoto ? photos[0] : null;\n    const date = review.date || todayIso();\n    const quote = review.body || \"\";\n    const article = document.createElement(\"article\");\n    article.className =\n      \"rp-reviews-list__item rp-testimonial__item \" + (hasPhoto ? \"rp-reviews-list__item--photo\" : \"rp-reviews-list__item--text\");\n    article.setAttribute(\"role\", \"listitem\");\n    article.setAttribute(\"data-rp-review-item\", \"\");\n    article.setAttribute(\"data-rp-user-review\", \"1\");\n    article.setAttribute(\"data-rating\", String(rating));\n    article.setAttribute(\"data-has-photo\", hasPhoto ? \"1\" : \"0\");\n    article.setAttribute(\"data-has-video\", \"0\");\n    article.setAttribute(\"data-date\", date);\n    article.setAttribute(\"data-helpful\", \"0\");\n    article.setAttribute(\"aria-label\", `Avis de ${author}`);\n    if (hasPhoto && first) {\n      article.setAttribute(\"data-rp-review-open\", \"\");\n      article.setAttribute(\"data-rp-photo-src\", first.dataUrl);\n      article.setAttribute(\"data-rp-photo-alt\", `Photo de ${author}`);\n      article.tabIndex = 0;\n    }\n    const thumbs = hasPhoto\n      ? `<div class=\"rp-reviews-list__thumb rp-testimonial__photo\" aria-hidden=\"true\">\n            <img src=\"${first.dataUrl}\" alt=\"\" width=\"96\" height=\"96\" loading=\"eager\" decoding=\"async\" draggable=\"false\">\n          </div>`\n      : \"\";\n    article.innerHTML = `\n      <div class=\"rp-reviews-list__body rp-testimonial__body\">\n        <div class=\"rp-testimonial__stars\" aria-label=\"${rating} sur 5\">${starsFor(rating)}</div>\n        <div class=\"rp-reviews-list__who\">\n          <span class=\"rp-reviews-list__avatar\" aria-hidden=\"true\">${initial}</span>\n          <div class=\"rp-reviews-list__who-meta\">\n            <div class=\"rp-reviews-list__who-row\">\n              <strong class=\"rp-reviews-list__name\">${author.replace(/</g, \"&lt;\")}</strong>\n              <span class=\"rp-testimonial__verified\">En cours de v\u00E9rif.</span>\n            </div>\n            <time class=\"rp-reviews-list__date\" datetime=\"${date}\">${date}</time>\n          </div>\n        </div>\n        <p class=\"rp-testimonial__quote\">${String(quote).replace(/</g, \"&lt;\")}</p>\n      </div>\n      ${thumbs}\n    `;\n    return article;\n  };\n\n  const collectStripPhotos = (root) => {\n    const strip = root.querySelector(\"[data-rp-reviews-photostrip]\");\n    if (!strip) return [];\n    return Array.from(strip.querySelectorAll(\"[data-rp-photostrip-item]\"))\n      .map((btn) => {\n        const img = btn.querySelector(\"img\");\n        const src = btn.getAttribute(\"data-rp-photo-src\") || img?.currentSrc || img?.src || \"\";\n        return {\n          src,\n          alt: btn.getAttribute(\"data-rp-photo-alt\") || \"\",\n          author: normName(btn.getAttribute(\"data-author\")),\n          key: fileKey(src),\n        };\n      })\n      .filter((p) => p.src);\n  };\n\n  const attachPhotoToCard = (el, photo) => {\n    if (!el || !photo?.src) return;\n    el.setAttribute(\"data-has-photo\", \"1\");\n    el.setAttribute(\"data-rp-review-open\", \"\");\n    el.setAttribute(\"data-rp-photo-src\", photo.src);\n    el.setAttribute(\"data-rp-photo-alt\", photo.alt || el.getAttribute(\"data-rp-photo-alt\") || \"\");\n    el.classList.add(\"rp-reviews-list__item--photo\");\n    el.classList.remove(\"rp-reviews-list__item--text\");\n    if (!el.querySelector(\".rp-reviews-list__thumb img, .rp-testimonial__photo img\")) {\n      const thumb = document.createElement(\"div\");\n      thumb.className = \"rp-reviews-list__thumb rp-testimonial__photo\";\n      thumb.setAttribute(\"aria-hidden\", \"true\");\n      thumb.innerHTML = `<img src=\"${photo.src}\" alt=\"\" width=\"96\" height=\"96\" loading=\"eager\" decoding=\"async\" draggable=\"false\">`;\n      el.appendChild(thumb);\n    }\n  };\n\n  const cardAuthor = (el) =>\n    normName(el.querySelector(\".rp-reviews-list__name\")?.textContent || el.getAttribute(\"aria-label\") || \"\");\n\n  const cardHasPhoto = (el) =>\n    el.getAttribute(\"data-has-photo\") === \"1\" ||\n    !!(el.getAttribute(\"data-rp-photo-src\") || \"\").trim() ||\n    !!el.querySelector(\".rp-reviews-list__thumb img, .rp-testimonial__photo img\");\n\n  const hydrateCardsFromStrip = (root, allItems) => {\n    const photos = collectStripPhotos(root);\n    if (!photos.length || !allItems.length) return photos;\n    const used = new Set();\n\n    const takePhoto = (predicate) => {\n      const index = photos.findIndex((p, i) => !used.has(i) && predicate(p));\n      if (index < 0) return null;\n      used.add(index);\n      return photos[index];\n    };\n\n    allItems.forEach((el) => {\n      if (cardHasPhoto(el)) {\n        const srcKey = fileKey(el.getAttribute(\"data-rp-photo-src\") || el.querySelector(\"img\")?.src || \"\");\n        const match = photos.findIndex((p, i) => !used.has(i) && p.key && p.key === srcKey);\n        if (match >= 0) used.add(match);\n        el.setAttribute(\"data-has-photo\", \"1\");\n        return;\n      }\n      const author = cardAuthor(el);\n      const photo = takePhoto((p) => author && p.author && author === p.author);\n      if (photo) attachPhotoToCard(el, photo);\n    });\n\n    return photos;\n  };\n\n  const bindReviewsList = (root) => {\n    const list = root.querySelector(\"[data-rp-reviews-list]\");\n    if (!list || list.dataset.rpPagerBound === \"1\") return;\n    list.dataset.rpPagerBound = \"1\";\n    const itemsHost = list.querySelector(\"[data-rp-reviews-items]\");\n    let allItems = Array.from(list.querySelectorAll(\"[data-rp-review-item]\"));\n    const pager = list.querySelector(\"[data-rp-reviews-pager]\");\n    const pagesEl = list.querySelector(\"[data-rp-page-numbers]\");\n    const prevBtn = list.querySelector(\"[data-rp-page-prev]\");\n    const nextBtn = list.querySelector(\"[data-rp-page-next]\");\n    const emptyEl = list.querySelector(\"[data-rp-reviews-empty]\");\n    const perPage = Math.max(2, Math.min(8, parseInt(list.getAttribute(\"data-per-page\") || \"3\", 10) || 3));\n    if (!allItems.length && !itemsHost) return;\n    let page = 1;\n    let sortMode = list.getAttribute(\"data-rp-default-sort\") || \"photos-first\";\n    const ratingFilters = new Set();\n\n    const stripPhotoCount = () => collectStripPhotos(root).length;\n\n    const matchesFilters = (el) => {\n      const rating = parseInt(el.getAttribute(\"data-rating\") || \"5\", 10) || 5;\n      const hasPhoto = cardHasPhoto(el);\n      if (ratingFilters.size && !ratingFilters.has(rating)) return false;\n      if (sortMode === \"photos-only\" && !hasPhoto) return false;\n      return true;\n    };\n\n    const sortItems = (arr) => {\n      const copy = arr.slice();\n      copy.sort((a, b) => {\n        const ra = parseInt(a.getAttribute(\"data-rating\") || \"5\", 10) || 5;\n        const rb = parseInt(b.getAttribute(\"data-rating\") || \"5\", 10) || 5;\n        const da = parseDate(a);\n        const db = parseDate(b);\n        const ha = parseInt(a.getAttribute(\"data-helpful\") || \"0\", 10) || 0;\n        const hb = parseInt(b.getAttribute(\"data-helpful\") || \"0\", 10) || 0;\n        const pa = cardHasPhoto(a) ? 1 : 0;\n        const pb = cardHasPhoto(b) ? 1 : 0;\n        const va = a.getAttribute(\"data-has-video\") === \"1\" ? 1 : 0;\n        const vb = b.getAttribute(\"data-has-video\") === \"1\" ? 1 : 0;\n        switch (sortMode) {\n          case \"highest\":\n            return rb - ra || db - da;\n          case \"lowest\":\n            return ra - rb || db - da;\n          case \"photos-first\":\n            return pb - pa || db - da;\n          case \"photos-only\":\n            return db - da || rb - ra;\n          case \"videos-first\":\n            return vb - va || db - da;\n          case \"helpful\":\n            return hb - ha || db - da;\n          default:\n            return db - da || rb - ra;\n        }\n      });\n      return copy;\n    };\n\n    const visibleItems = () => sortItems(allItems.filter(matchesFilters));\n\n    const setItemVisible = (el, on) => {\n      el.classList.toggle(\"is-off-page\", !on);\n      el.setAttribute(\"aria-hidden\", on ? \"false\" : \"true\");\n      if (el.hasAttribute(\"data-rp-review-open\")) el.tabIndex = on ? 0 : -1;\n      else el.removeAttribute(\"tabindex\");\n      if (on) {\n        el.removeAttribute(\"hidden\");\n        el.hidden = false;\n      } else {\n        el.setAttribute(\"hidden\", \"\");\n        el.hidden = true;\n      }\n    };\n\n    const hideEmpty = () => {\n      if (!emptyEl) return;\n      emptyEl.hidden = true;\n      emptyEl.removeAttribute(\"data-rp-empty\");\n    };\n\n    const showPage = (n) => {\n      hydrateCardsFromStrip(root, allItems);\n      let matched = visibleItems();\n      const stripCount = stripPhotoCount();\n\n      if (sortMode === \"photos-only\" && matched.length === 0 && stripCount > 0) {\n        sortMode = \"photos-first\";\n        matched = visibleItems();\n      }\n\n      if (itemsHost) {\n        matched.forEach((el) => itemsHost.appendChild(el));\n        allItems.forEach((el) => {\n          if (!matched.includes(el)) itemsHost.appendChild(el);\n        });\n      }\n\n      const totalPages = Math.max(1, Math.ceil(matched.length / perPage));\n      page = Math.min(totalPages, Math.max(1, n));\n      const start = (page - 1) * perPage;\n      const end = start + perPage;\n      allItems.forEach((el) => setItemVisible(el, false));\n      matched.forEach((el, i) => {\n        setItemVisible(el, i >= start && i < end);\n      });\n\n      if (emptyEl) {\n        const showEmpty = matched.length === 0;\n        const photoEmpty = sortMode === \"photos-only\" && stripCount > 0;\n        if (!showEmpty || photoEmpty) {\n          hideEmpty();\n        } else {\n          emptyEl.hidden = false;\n          if (sortMode === \"photos-only\") {\n            emptyEl.dataset.rpEmpty = \"photos\";\n            emptyEl.textContent = \"Aucun avis avec photo pour le moment.\";\n            if (stripCount > 0) hideEmpty();\n          } else if (sortMode === \"videos-first\" && ratingFilters.size === 0) {\n            emptyEl.dataset.rpEmpty = \"videos\";\n            emptyEl.textContent = \"Aucun avis vid\u00E9o pour le moment.\";\n          } else {\n            emptyEl.dataset.rpEmpty = \"filter\";\n            emptyEl.textContent = \"Aucun avis ne correspond \u00E0 ce filtre pour le moment.\";\n          }\n        }\n      }\n\n      if (pager) {\n        if (matched.length <= perPage) pager.hidden = true;\n        else {\n          pager.hidden = false;\n          if (pagesEl) {\n            pagesEl.innerHTML = \"\";\n            const pages = pageWindow(page, totalPages);\n            let last = 0;\n            pages.forEach((i) => {\n              if (last && i - last > 1) {\n                const dots = document.createElement(\"span\");\n                dots.className = \"rp-reviews-list__ellipsis\";\n                dots.textContent = \"\u2026\";\n                dots.setAttribute(\"aria-hidden\", \"true\");\n                pagesEl.appendChild(dots);\n              }\n              const btn = document.createElement(\"button\");\n              btn.type = \"button\";\n              btn.className = \"rp-reviews-list__page\" + (i === page ? \" is-active\" : \"\");\n              btn.textContent = String(i);\n              btn.setAttribute(\"aria-label\", `Page ${i}`);\n              if (i === page) btn.setAttribute(\"aria-current\", \"page\");\n              btn.addEventListener(\"click\", () => showPage(i));\n              pagesEl.appendChild(btn);\n              last = i;\n            });\n          }\n          if (prevBtn) prevBtn.disabled = page <= 1;\n          if (nextBtn) nextBtn.disabled = page >= totalPages;\n        }\n      }\n      list.setAttribute(\"data-total\", String(matched.length));\n    };\n\n    const prependReview = (review) => {\n      if (!itemsHost) return;\n      const card = buildReviewCard(review);\n      itemsHost.insertBefore(card, itemsHost.firstChild);\n      allItems = [card, ...allItems.filter((el) => el !== card)];\n      showPage(1);\n    };\n    list._rpPrependReview = prependReview;\n\n    const stored = readStoredReviews();\n    if (stored.length && itemsHost) {\n      const existingIds = new Set(allItems.map((el) => el.getAttribute(\"data-rp-review-id\")).filter(Boolean));\n      stored.slice().reverse().forEach((review) => {\n        if (review.id && existingIds.has(review.id)) return;\n        const card = buildReviewCard(review);\n        if (review.id) card.setAttribute(\"data-rp-review-id\", review.id);\n        itemsHost.insertBefore(card, itemsHost.firstChild);\n        allItems.unshift(card);\n      });\n    }\n\n    hydrateCardsFromStrip(root, allItems);\n\n    if (prevBtn) prevBtn.addEventListener(\"click\", () => showPage(page - 1));\n    if (nextBtn) nextBtn.addEventListener(\"click\", () => showPage(page + 1));\n\n    const filterToggle = list.querySelector(\"[data-rp-reviews-filter-toggle]\");\n    const filtersPanel = list.querySelector(\"[data-rp-reviews-filters]\");\n    if (filterToggle && filtersPanel) {\n      filterToggle.addEventListener(\"click\", () => {\n        const open = filtersPanel.hidden;\n        filtersPanel.hidden = !open;\n        filterToggle.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\n      });\n      filtersPanel.querySelectorAll(\"[data-rp-rating-filter]\").forEach((btn) => {\n        btn.addEventListener(\"click\", () => {\n          const r = parseInt(btn.getAttribute(\"data-rp-rating-filter\") || \"0\", 10);\n          if (!r) return;\n          if (ratingFilters.has(r)) {\n            ratingFilters.delete(r);\n            btn.classList.remove(\"is-active\");\n            btn.setAttribute(\"aria-pressed\", \"false\");\n          } else {\n            ratingFilters.add(r);\n            btn.classList.add(\"is-active\");\n            btn.setAttribute(\"aria-pressed\", \"true\");\n          }\n          showPage(1);\n        });\n      });\n    }\n\n    const sortRoot = list.querySelector(\"[data-rp-reviews-sort]\");\n    const sortToggle = list.querySelector(\"[data-rp-reviews-sort-toggle]\");\n    const sortMenu = list.querySelector(\"[data-rp-reviews-sort-menu]\");\n    const closeSort = () => {\n      if (!sortMenu || !sortToggle) return;\n      sortMenu.hidden = true;\n      sortToggle.setAttribute(\"aria-expanded\", \"false\");\n    };\n    if (sortToggle && sortMenu) {\n      sortMenu.querySelectorAll(\"[data-rp-sort]\").forEach((el) => {\n        const selected = (el.getAttribute(\"data-rp-sort\") || \"\") === sortMode;\n        el.setAttribute(\"aria-selected\", selected ? \"true\" : \"false\");\n        el.classList.toggle(\"is-active\", selected);\n      });\n      sortToggle.addEventListener(\"click\", (e) => {\n        e.stopPropagation();\n        const open = sortMenu.hidden;\n        sortMenu.hidden = !open;\n        sortToggle.setAttribute(\"aria-expanded\", open ? \"true\" : \"false\");\n      });\n      sortMenu.querySelectorAll(\"[data-rp-sort]\").forEach((opt) => {\n        opt.addEventListener(\"click\", () => {\n          sortMode = opt.getAttribute(\"data-rp-sort\") || \"recent\";\n          sortMenu.querySelectorAll(\"[data-rp-sort]\").forEach((el) => {\n            const on = el === opt;\n            el.setAttribute(\"aria-selected\", on ? \"true\" : \"false\");\n            el.classList.toggle(\"is-active\", on);\n          });\n          closeSort();\n          showPage(1);\n        });\n      });\n      document.addEventListener(\"click\", (e) => {\n        if (!sortRoot?.contains(e.target)) closeSort();\n      });\n    }\n    document.addEventListener(\"keydown\", (e) => {\n      if (e.key === \"Escape\") closeSort();\n    });\n    showPage(1);\n  };\n\n  const bindLightbox = (root) => {\n    const lightbox = root.querySelector(\"[data-rp-review-lightbox]\");\n    if (!lightbox || lightbox.dataset.rpLightboxBound === \"1\") return;\n    lightbox.dataset.rpLightboxBound = \"1\";\n    const img = lightbox.querySelector(\"[data-rp-lightbox-img]\");\n    let lastFocus = null;\n    let homeParent = null;\n    let homeNext = null;\n    const restoreLightboxHome = () => {\n      if (!homeParent || !homeParent.isConnected) {\n        homeParent = null;\n        homeNext = null;\n        return;\n      }\n      if (homeNext && homeNext.parentNode === homeParent) homeParent.insertBefore(lightbox, homeNext);\n      else homeParent.appendChild(lightbox);\n      homeParent = null;\n      homeNext = null;\n    };\n    const close = () => {\n      lightbox.hidden = true;\n      lightbox.setAttribute(\"aria-hidden\", \"true\");\n      lightbox.classList.remove(\"is-open\");\n      document.documentElement.classList.remove(\"rp-review-lightbox-open\");\n      restoreLightboxHome();\n      if (img) {\n        img.removeAttribute(\"src\");\n        img.alt = \"\";\n      }\n      if (lastFocus && typeof lastFocus.focus === \"function\") {\n        try {\n          lastFocus.focus();\n        } catch {}\n      }\n      lastFocus = null;\n    };\n    let openedAt = 0;\n    const open = (src, alt, trigger) => {\n      if (!src || !img) return;\n      const now = Date.now();\n      if (lightbox.classList.contains(\"is-open\") && now - openedAt < 400) return;\n      openedAt = now;\n      lastFocus = trigger || document.activeElement;\n      img.src = src;\n      img.alt = alt || \"Photo avis client\";\n      if (lightbox.parentElement !== document.body) {\n        homeParent = lightbox.parentElement;\n        homeNext = lightbox.nextSibling;\n        document.body.appendChild(lightbox);\n      }\n      lightbox.hidden = false;\n      lightbox.setAttribute(\"aria-hidden\", \"false\");\n      lightbox.classList.add(\"is-open\");\n      document.documentElement.classList.add(\"rp-review-lightbox-open\");\n      lightbox.querySelector(\".rp-testimonial__lightbox-close\")?.focus?.();\n    };\n    const resolveCard = (e) => {\n      let card = e.target?.closest?.(\"[data-rp-review-open]\") || null;\n      if (card && root.contains(card) && !card.hidden) return card;\n      card =\n        (typeof e.composedPath === \"function\" ? e.composedPath() : []).find(\n          (n) => n && n.nodeType === 1 && n.hasAttribute?.(\"data-rp-review-open\")\n        ) || null;\n      return card && root.contains(card) && !card.hidden ? card : null;\n    };\n    lightbox.addEventListener(\"click\", (e) => {\n      const closer = e.target.closest(\"[data-rp-lightbox-close]\");\n      if (!closer || !lightbox.contains(closer)) return;\n      e.preventDefault();\n      close();\n    });\n    document.addEventListener(\"keydown\", (e) => {\n      if (e.key === \"Escape\" && lightbox.classList.contains(\"is-open\")) {\n        e.preventDefault();\n        close();\n      }\n    });\n    root.addEventListener(\"click\", (e) => {\n      if (e.target.closest?.(\".rp-reviews-list__pager\")) return;\n      const card = resolveCard(e);\n      if (!card) return;\n      const src = card.getAttribute(\"data-rp-photo-src\");\n      if (src) {\n        e.preventDefault();\n        open(src, card.getAttribute(\"data-rp-photo-alt\") || \"\", card);\n      }\n    });\n    root.addEventListener(\"keydown\", (e) => {\n      const card = e.target.closest?.(\"[data-rp-review-open]\");\n      if (!card || !root.contains(card) || card.hidden) return;\n      if (e.key === \"Enter\" || e.key === \" \") {\n        e.preventDefault();\n        open(card.getAttribute(\"data-rp-photo-src\"), card.getAttribute(\"data-rp-photo-alt\") || \"\", card);\n      }\n    });\n  };\n\n  const bindPhotoFields = (modal) => {\n    const host = modal.querySelector(\"[data-rp-review-photos]\");\n    if (!host || host.dataset.rpPhotosBound === \"1\") return;\n    host.dataset.rpPhotosBound = \"1\";\n    const gallery = host.querySelector(\"[data-rp-review-photo-gallery]\");\n    const camera = host.querySelector(\"[data-rp-review-photo-camera]\");\n    const previews = host.querySelector(\"[data-rp-review-photo-previews]\");\n    const meta = host.querySelector(\"[data-rp-review-photo-meta]\");\n    const photos = [];\n    const syncMeta = () => {\n      if (!meta) return;\n      if (!photos.length) {\n        meta.value = \"\";\n        return;\n      }\n      meta.value = `${photos.length} photo(s) : ${photos.map((p) => p.name).join(\", \")}`;\n    };\n    const render = () => {\n      if (!previews) return;\n      previews.innerHTML = \"\";\n      if (!photos.length) {\n        previews.hidden = true;\n        syncMeta();\n        return;\n      }\n      previews.hidden = false;\n      photos.forEach((photo, index) => {\n        const fig = document.createElement(\"figure\");\n        fig.className = \"rp-review-write__preview\";\n        fig.innerHTML = `\n          <img src=\"${photo.dataUrl}\" alt=\"Aper\u00E7u ${index + 1}\" width=\"72\" height=\"72\">\n          <button type=\"button\" class=\"rp-review-write__preview-remove\" aria-label=\"Retirer la photo\">\u00D7</button>\n        `;\n        fig.querySelector(\"button\")?.addEventListener(\"click\", () => {\n          photos.splice(index, 1);\n          render();\n        });\n        previews.appendChild(fig);\n      });\n      syncMeta();\n    };\n    const addFiles = async (fileList) => {\n      const files = Array.from(fileList || []).filter((f) => f && f.type && f.type.startsWith(\"image/\"));\n      for (const file of files) {\n        if (photos.length >= 3) break;\n        const compressed = await compressImageFile(file);\n        if (compressed) photos.push(compressed);\n      }\n      render();\n      if (gallery) gallery.value = \"\";\n      if (camera) camera.value = \"\";\n    };\n    gallery?.addEventListener(\"change\", () => addFiles(gallery.files));\n    camera?.addEventListener(\"change\", () => addFiles(camera.files));\n    host._rpGetPhotos = () => photos.slice();\n    host._rpClearPhotos = () => {\n      photos.length = 0;\n      render();\n    };\n  };\n\n  const bindWriteReview = (root) => {\n    const modal = root.querySelector(\"[data-rp-review-write-modal]\");\n    if (!modal || modal.dataset.rpWriteBound === \"1\") return;\n    modal.dataset.rpWriteBound = \"1\";\n    const openBtns = root.querySelectorAll(\"[data-rp-review-write]\");\n    if (!openBtns.length) return;\n    bindPhotoFields(modal);\n    let lastFocus = null;\n    let homeParent = null;\n    let homeNext = null;\n    const restore = () => {\n      if (!homeParent || !homeParent.isConnected) {\n        homeParent = null;\n        homeNext = null;\n        return;\n      }\n      if (homeNext && homeNext.parentNode === homeParent) homeParent.insertBefore(modal, homeNext);\n      else homeParent.appendChild(modal);\n      homeParent = null;\n      homeNext = null;\n    };\n    const close = () => {\n      modal.hidden = true;\n      modal.setAttribute(\"aria-hidden\", \"true\");\n      modal.classList.remove(\"is-open\");\n      document.documentElement.classList.remove(\"rp-review-write-open\");\n      restore();\n      if (lastFocus && typeof lastFocus.focus === \"function\") {\n        try {\n          lastFocus.focus();\n        } catch {}\n      }\n      lastFocus = null;\n    };\n    const open = (trigger) => {\n      lastFocus = trigger || document.activeElement;\n      if (modal.parentElement !== document.body) {\n        homeParent = modal.parentElement;\n        homeNext = modal.nextSibling;\n        document.body.appendChild(modal);\n      }\n      modal.hidden = false;\n      modal.setAttribute(\"aria-hidden\", \"false\");\n      modal.classList.add(\"is-open\");\n      document.documentElement.classList.add(\"rp-review-write-open\");\n      modal.querySelector(\"input, textarea, button:not([data-rp-review-write-close])\")?.focus?.();\n    };\n    openBtns.forEach((btn) => {\n      btn.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        open(btn);\n      });\n    });\n    modal.addEventListener(\"click\", (e) => {\n      if (e.target.closest(\"[data-rp-review-write-close]\")) {\n        e.preventDefault();\n        close();\n      }\n    });\n    document.addEventListener(\"keydown\", (e) => {\n      if (e.key === \"Escape\" && modal.classList.contains(\"is-open\")) {\n        e.preventDefault();\n        close();\n      }\n    });\n    const form = modal.querySelector(\"form.rp-review-write__form\");\n    if (form && form.dataset.rpSubmitBound !== \"1\") {\n      form.dataset.rpSubmitBound = \"1\";\n      form.addEventListener(\"submit\", () => {\n        const photosHost = modal.querySelector(\"[data-rp-review-photos]\");\n        const photos = photosHost?._rpGetPhotos?.() || [];\n        const nameInput = form.querySelector('[name=\"contact[name]\"]');\n        const bodyInput = form.querySelector('[name=\"contact[body]\"]');\n        const ratingInput = form.querySelector('[name=\"contact[note]\"]:checked');\n        const metaInput = form.querySelector(\"[data-rp-review-photo-meta]\");\n        const author = (nameInput?.value || \"\").trim() || \"Client\";\n        const body = (bodyInput?.value || \"\").trim();\n        const rating = ratingInput?.value || \"5\";\n        if (photos.length && bodyInput) {\n          const note = `\\n\\n[Photos jointes c\u00F4t\u00E9 client : ${photos.length} \u2014 ${photos.map((p) => p.name).join(\", \")}. Publier via Photo client dans le th\u00E8me apr\u00E8s v\u00E9rif.]`;\n          if (!bodyInput.value.includes(\"[Photos jointes\")) bodyInput.value = body + note;\n        }\n        if (metaInput) {\n          metaInput.value = photos.length\n            ? `${photos.length} photo(s) : ${photos.map((p) => p.name).join(\", \")}`\n            : \"aucune\";\n        }\n        const review = {\n          id: `u-${Date.now()}`,\n          author,\n          body,\n          rating,\n          date: todayIso(),\n          photos: photos.map((p) => ({ name: p.name, dataUrl: p.dataUrl })),\n        };\n        const stored = readStoredReviews();\n        stored.unshift(review);\n        writeStoredReviews(stored);\n        const list = root.querySelector(\"[data-rp-reviews-list]\");\n        if (list && typeof list._rpPrependReview === \"function\") list._rpPrependReview(review);\n        photosHost?._rpClearPhotos?.();\n      });\n    }\n  };\n\n  const bindPhotostrip = (root) => {\n    const strip = root.querySelector(\"[data-rp-reviews-photostrip]\");\n    if (!strip || strip.dataset.rpStripBound === \"1\") return;\n    strip.dataset.rpStripBound = \"1\";\n    const track = strip.querySelector(\"[data-rp-photostrip-track]\");\n    const nextBtn = strip.querySelector(\"[data-rp-photostrip-next]\");\n    if (!track) return;\n    const pruneBroken = () => {\n      track.querySelectorAll(\"[data-rp-photostrip-item]\").forEach((btn) => {\n        const img = btn.querySelector(\"img\");\n        if (!img) {\n          btn.remove();\n          return;\n        }\n        const kill = () => {\n          if (!img.naturalWidth) btn.remove();\n        };\n        if (img.complete) kill();\n        else {\n          img.addEventListener(\"error\", () => btn.remove(), { once: true });\n          img.addEventListener(\"load\", kill, { once: true });\n        }\n        if (typeof img.decode === \"function\") img.decode().catch(() => {});\n      });\n    };\n    pruneBroken();\n    setTimeout(pruneBroken, 1200);\n    const syncNext = () => {\n      if (!nextBtn) return;\n      const max = track.scrollWidth - track.clientWidth;\n      const canScroll = max > 8;\n      const atEnd = track.scrollLeft >= max - 8;\n      nextBtn.hidden = !canScroll || atEnd;\n    };\n    nextBtn?.addEventListener(\"click\", (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      const step = Math.max(160, Math.floor(track.clientWidth * 0.72));\n      track.scrollBy({ left: step, behavior: \"smooth\" });\n    });\n    track.addEventListener(\"scroll\", syncNext, { passive: true });\n    window.addEventListener(\"resize\", syncNext);\n    requestAnimationFrame(syncNext);\n    setTimeout(syncNext, 250);\n    setTimeout(syncNext, 1300);\n  };\n\n  const init = () => {\n    document.querySelectorAll(\".rp-testimonial\").forEach((root) => {\n      bindReviewsList(root);\n      bindPhotostrip(root);\n      bindLightbox(root);\n      bindWriteReview(root);\n    });\n  };\n\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", init, { once: true });\n  else init();\n  document.addEventListener(\"shopify:section:load\", init);\n})();\n"],
  "mappings": "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",
  "names": []
}
