{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/pdp-review-lightbox.js?cb=r21-tur132-lightbox-decoupled"],
  "sourcesContent": ["/* r21 cache-bust 2026-05-25T16:00 \u2014 Tur 132 lightbox-PDP DOM decoupling */\n/* ============================================================\n   PDP REVIEW LIGHTBOX v4.4 (r21) \u2014 Editorial split (photo + text)\n   ------------------------------------------------------------\n   Adapted from D:/Claude/santo/Review (App.jsx) to vanilla JS.\n\n   Tur 132 (25 May 2026) \u2014 Hakan Bey: \"Lightbox'ta yorumlar\u0131 gezdim\n   diye pdp sayfas\u0131nda neden t\u00FCm yorumlar\u0131 g\u00F6z\u00FCk\u00FCr hale getirdin?\n   orada daha fazla g\u00F6ster'e basmas\u0131 gerekirdi. neden ayn\u0131 ak\u0131\u015F\u0131\n   orada uygulad\u0131n?\"\n\n   PDP DOM separation. Forward arrow past last visible review now\n   calls `api.fetchNextSilent(sectionEl)` which returns RAW JM review\n   objects WITHOUT appending to PDP DOM. Raw reviews live in module\n   Map `_extraReviews` (uuid keyed). `reviewsInScope` is a VIRTUAL\n   list of mixed entries:\n     { kind: 'dom', row, uuid }   \u2190 reviews server-rendered or appended via\n                                    PDP \"Daha Fazla G\u00F6ster\" button\n     { kind: 'raw', raw, uuid }   \u2190 reviews fetched silently for lightbox\n   Dedup: if a raw uuid later appears in DOM (PDP button clicked after\n   lightbox usage), the Map entry is dropped from the virtual list.\n   Net effect: PDP card count stays at the user-clicked size; lightbox\n   gezinti consumes its own silent page cursor.\n\n   Tur 130 (25 May 2026) \u2014 Hakan Bey: \"lightbox a\u00E7\u0131ld\u0131\u011F\u0131nda sol\n   \u00FCstte X/11 yazmas\u0131n\u0131 beklerdim. 5. resimden sonra ileri bast\u0131\u011F\u0131mda\n   6/10 yaz\u0131yor bu do\u011Fru de\u011Fil. \u2026 5 ten sonra fetch yaparken bir\n   LOADING (T\u00FCrk\u00E7esi Y\u00FCkleniyor yazmal\u0131) g\u00F6sterimi yapsak iyi olur\n   gibi?\"\n\n   Total counter now reads from the section's `data-rating-count`\n   (true JM total for the product, e.g. 11) instead of the growing\n   DOM card count. Falls back to `window.SantoPDPReviews.getTotalCount`,\n   then to `reviewsInScope.length` as last resort.\n\n   Loading indicator: `[data-review-lightbox-loading]` (hidden by\n   default) is revealed before silent fetch and hidden in its\n   `.then`. Tur 132: stage-center overlay (CSS) instead of top-left\n   corner.\n\n   Tur 129 (25 May 2026, superseded by Tur 132) \u2014 original lightbox\n   arrow-next called `api.loadMore` which appended cards to PDP DOM,\n   silently consuming PDP's \"Daha Fazla G\u00F6ster\" pagination. Replaced\n   by silent fetch above.\n\n   Markup contract (sections/product-reviews.liquid):\n     [data-review-row]                          each review row (any element)\n       data-review-id           string\n       data-review-rating       0..5\n       data-review-has-photos   \"true\" | \"false\"\n       data-review-has-text     \"true\" | \"false\"\n       data-review-date-iso     YYYY-MM-DD\n       data-review-photos       JSON array of full URLs\n       data-review-photo-count  integer\n       data-review-body         plain text (truncated upstream OK,\n                                 lightbox shows full)\n       data-review-title        plain text (optional)\n       data-review-name         reviewer name\n       data-review-initials     1-2 letter avatar fallback\n       data-review-date         dd.mm.yyyy formatted\n       data-review-source       \"trendyol\" | \"\" (becomes \"Trendyol\")\n       data-review-verified     \"true\" | \"false\"\n\n     [data-review-photo-trigger][data-photo-index]   photo tile (button or anchor)\n       click \u2192 opens lightbox at that photoIndex\n\n     .lightbox[data-review-lightbox]            modal root\n       data-variant set per-open: \"mixed\" | \"photo-only\" | \"text-only\"\n\n   Navigation:\n     Side arrows / keyboard \u2190/\u2192 \u2192 navigate BETWEEN REVIEWS\n                                  (within current filter+show-more)\n                                  resets photoIndex to 0.\n                                  Forward arrow at last review with\n                                  remaining JM pages \u2192 fetch next 5,\n                                  then advance to first new card.\n     Thumb strip / stage click \u2192 navigate BETWEEN PHOTOS of current review.\n     Esc / overlay click outside stage \u2192 close.\n\n   Fetch is delegated to `pdp-reviews-pagination.js` via\n   `window.SantoPDPReviews` (hasMore, loadMore, isLoading).\n   ============================================================ */\n(function () {\n  \"use strict\";\n\n  function init() {\n    const overlay = document.querySelector(\"[data-review-lightbox]\");\n    if (!overlay) return;\n\n    // Stage children\n    const imgEl = overlay.querySelector(\"[data-review-lightbox-img]\");\n    const frameEl = overlay.querySelector(\"[data-review-lightbox-frame]\");\n    const thumbsEl = overlay.querySelector(\"[data-review-lightbox-thumbs]\");\n    const stageCounterEl = overlay.querySelector(\"[data-review-lightbox-stagecounter]\");\n    const stagePhotoIdx = overlay.querySelector(\"[data-review-lightbox-photo-idx]\");\n    const stagePhotoTot = overlay.querySelector(\"[data-review-lightbox-photo-total]\");\n\n    // Top counter (review index)\n    const indexEl = overlay.querySelector(\"[data-review-lightbox-index]\");\n    const totalEl = overlay.querySelector(\"[data-review-lightbox-total]\");\n    // Tur 130 \u2014 loading indicator under the counter; toggled during JM fetch\n    // path inside gotoReview (forward arrow at last DOM card).\n    const loadingEl = overlay.querySelector(\"[data-review-lightbox-loading]\");\n\n    // Text col\n    const starsEl = overlay.querySelector(\"[data-review-lightbox-stars]\");\n    const dateEl = overlay.querySelector(\"[data-review-lightbox-date]\");\n    const verifiedEl = overlay.querySelector(\"[data-review-lightbox-verified]\");\n    const titleEl = overlay.querySelector(\"[data-review-lightbox-title]\");\n    const bodyEl = overlay.querySelector(\"[data-review-lightbox-body]\");\n    const nameEl = overlay.querySelector(\"[data-review-lightbox-name]\");\n    const sourceEl = overlay.querySelector(\"[data-review-lightbox-source]\");\n    const initialsEl = overlay.querySelector(\"[data-review-lightbox-initials]\");\n\n    // Controls\n    const prevBtn = overlay.querySelector(\"[data-review-lightbox-prev]\");\n    const nextBtn = overlay.querySelector(\"[data-review-lightbox-next]\");\n    const closeBtn = overlay.querySelector(\"[data-review-lightbox-close]\");\n\n    if (!imgEl || !thumbsEl) return;\n\n    // Tur 132 \u2014 `reviewsInScope` is now a VIRTUAL list of mixed entries:\n    //   { kind: 'dom', row, uuid }   \u2190 reviews server-rendered or appended via PDP button\n    //   { kind: 'raw', raw, uuid }   \u2190 reviews fetched silently for lightbox-only scope\n    // Dedup: if a raw uuid later appears in DOM, the Map entry is dropped.\n    let reviewsInScope = [];\n    const _extraReviews = new Map(); // uuid \u2192 raw JM review (lightbox-only silent fetch results)\n    let reviewIndex = 0;\n    let photoIndex = 0;\n    let currentPhotos = [];\n    let returnFocusEl = null;\n\n    function safeParse(jsonStr) {\n      if (!jsonStr) return [];\n      try {\n        const arr = JSON.parse(jsonStr);\n        if (!Array.isArray(arr)) return [];\n        return arr.filter(function (u) {\n          return typeof u === \"string\" && u.length > 0;\n        });\n      } catch (e) {\n        return [];\n      }\n    }\n\n    function pad2(n) {\n      n = String(n);\n      return n.length < 2 ? \"0\" + n : n;\n    }\n\n    function readMeta(row) {\n      return {\n        photos: safeParse(row.getAttribute(\"data-review-photos\")),\n        body: row.getAttribute(\"data-review-body\") || \"\",\n        title: row.getAttribute(\"data-review-title\") || \"\",\n        name: row.getAttribute(\"data-review-name\") || \"\",\n        initials: row.getAttribute(\"data-review-initials\") || \"\",\n        date: row.getAttribute(\"data-review-date\") || \"\",\n        rating: parseInt(row.getAttribute(\"data-review-rating\") || \"0\", 10) || 0,\n        source: row.getAttribute(\"data-review-source\") || \"\",\n        verified: row.getAttribute(\"data-review-verified\") === \"true\",\n        hasPhotos: row.getAttribute(\"data-review-has-photos\") === \"true\",\n        hasText: row.getAttribute(\"data-review-has-text\") === \"true\",\n      };\n    }\n\n    // Tur 132 \u2014 entry dispatch: `dom` entries use the existing row reader,\n    // `raw` entries defer to the shared helper exposed by pagination.js\n    // (`window.SantoPDPReviews.rawReviewToLightboxMeta`). Both return the\n    // same shape; consumers don't need to branch beyond this fn.\n    function readMetaFromEntry(entry) {\n      if (!entry) return null;\n      if (entry.kind === \"raw\") {\n        if (\n          window.SantoPDPReviews &&\n          typeof window.SantoPDPReviews.rawReviewToLightboxMeta === \"function\"\n        ) {\n          return window.SantoPDPReviews.rawReviewToLightboxMeta(entry.raw);\n        }\n        return null;\n      }\n      return readMeta(entry.row);\n    }\n\n    function variantOf(meta) {\n      if (meta.hasPhotos && !meta.hasText) return \"photo-only\";\n      if (meta.hasText && !meta.hasPhotos) return \"text-only\";\n      return \"mixed\";\n    }\n\n    function getVisibleReviews() {\n      // r18: lightbox scope = ALL reviews in DOM (Liquid renders every review\n      // server-side; .pdp-review-card--hidden / .rv-row--hidden only controls\n      // PDP visibility before \"Daha Fazla G\u00F6ster\"). Only filter by active\n      // facet filters (--filtered-out), not by the show-more reveal state.\n      return Array.prototype.slice\n        .call(document.querySelectorAll(\"[data-review-row]\"))\n        .filter(function (r) {\n          const filteredOut =\n            r.classList.contains(\"rv-row--filtered-out\") ||\n            r.classList.contains(\"pdp-review-card--filtered-out\");\n          return !filteredOut;\n        });\n    }\n\n    // Tur 132 \u2014 merge DOM rows with the lightbox-only Map entries.\n    // Dedup: when PDP \"Daha Fazla G\u00F6ster\" has appended a card that the\n    // lightbox previously fetched silently, the resulting DOM row carries\n    // the same uuid; drop the Map entry to prevent rendering it twice.\n    function getVisibleReviewsAll() {\n      var domRows = getVisibleReviews();\n      var domUuids = new Set();\n      var entries = domRows.map(function (row) {\n        var u = row.getAttribute(\"data-review-uuid\") || \"\";\n        if (u) domUuids.add(u);\n        return { kind: \"dom\", row: row, uuid: u };\n      });\n      _extraReviews.forEach(function (rawReview, uuid) {\n        if (!domUuids.has(uuid)) {\n          entries.push({ kind: \"raw\", raw: rawReview, uuid: uuid });\n        }\n      });\n      return entries;\n    }\n\n    function renderStars(rating) {\n      if (!starsEl) return;\n      starsEl.innerHTML = \"\";\n      const r = Math.max(0, Math.min(5, parseInt(rating || 0, 10) || 0));\n      const ns = \"http://www.w3.org/2000/svg\";\n      for (let i = 1; i <= 5; i++) {\n        const svg = document.createElementNS(ns, \"svg\");\n        svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n        svg.setAttribute(\"width\", \"13\");\n        svg.setAttribute(\"height\", \"13\");\n        svg.setAttribute(\"aria-hidden\", \"true\");\n        const path = document.createElementNS(ns, \"path\");\n        path.setAttribute(\n          \"d\",\n          \"M12 2.5l2.95 6.5 7.05.7-5.3 4.85 1.55 7.1L12 17.9l-6.25 3.75 1.55-7.1L2 9.7l7.05-.7L12 2.5z\",\n        );\n        if (i <= r) {\n          path.setAttribute(\"fill\", \"currentColor\");\n        } else {\n          path.setAttribute(\"fill\", \"none\");\n          path.setAttribute(\"stroke\", \"currentColor\");\n          path.setAttribute(\"stroke-width\", \"1\");\n        }\n        svg.appendChild(path);\n        starsEl.appendChild(svg);\n      }\n    }\n\n    function renderSource(source) {\n      if (!sourceEl) return;\n      const s = (source || \"\").toString().trim();\n      if (!s) {\n        sourceEl.textContent = \"\";\n        return;\n      }\n      const cap = s.charAt(0).toUpperCase() + s.slice(1);\n      sourceEl.textContent = cap.toUpperCase() + \" \u00DCZERINDEN\";\n    }\n\n    function renderThumbs() {\n      thumbsEl.innerHTML = \"\";\n      if (currentPhotos.length <= 1) {\n        thumbsEl.style.display = \"none\";\n        return;\n      }\n      thumbsEl.style.display = \"\";\n      currentPhotos.forEach(function (url, i) {\n        const btn = document.createElement(\"button\");\n        btn.type = \"button\";\n        btn.className = \"lb-thumb\" + (i === photoIndex ? \" is-active\" : \"\");\n        btn.setAttribute(\"role\", \"tab\");\n        btn.setAttribute(\"aria-selected\", i === photoIndex ? \"true\" : \"false\");\n        btn.setAttribute(\"aria-label\", i + 1 + \" / \" + currentPhotos.length);\n        btn.dataset.thumbIndex = String(i);\n        const im = document.createElement(\"img\");\n        im.src = url;\n        im.alt = \"\";\n        im.loading = \"lazy\";\n        im.decoding = \"async\";\n        btn.appendChild(im);\n        btn.addEventListener(\"click\", function (e) {\n          e.stopPropagation();\n          showPhoto(i);\n        });\n        thumbsEl.appendChild(btn);\n      });\n    }\n\n    function syncThumbsScroll() {\n      const active = thumbsEl.querySelector(\".lb-thumb.is-active\");\n      if (active && active.scrollIntoView) {\n        try {\n          active.scrollIntoView({ behavior: \"smooth\", block: \"nearest\", inline: \"center\" });\n        } catch (e) {\n          active.scrollIntoView();\n        }\n      }\n    }\n\n    function updateActiveThumb() {\n      const thumbs = thumbsEl.querySelectorAll(\".lb-thumb\");\n      thumbs.forEach(function (t, i) {\n        if (i === photoIndex) {\n          t.classList.add(\"is-active\");\n          t.setAttribute(\"aria-selected\", \"true\");\n        } else {\n          t.classList.remove(\"is-active\");\n          t.setAttribute(\"aria-selected\", \"false\");\n        }\n      });\n      syncThumbsScroll();\n    }\n\n    function updateStageCounter() {\n      if (!stageCounterEl) return;\n      if (currentPhotos.length <= 1) {\n        stageCounterEl.setAttribute(\"hidden\", \"\");\n      } else {\n        stageCounterEl.removeAttribute(\"hidden\");\n        if (stagePhotoIdx) stagePhotoIdx.textContent = String(photoIndex + 1);\n        if (stagePhotoTot) stagePhotoTot.textContent = String(currentPhotos.length);\n      }\n    }\n\n    function showPhoto(i) {\n      if (!currentPhotos.length) {\n        imgEl.src = \"\";\n        return;\n      }\n      photoIndex = ((i % currentPhotos.length) + currentPhotos.length) % currentPhotos.length;\n      imgEl.src = currentPhotos[photoIndex];\n      imgEl.alt = \"M\u00FC\u015Fteri yorumu foto\u011Fraf\u0131\";\n      updateActiveThumb();\n      updateStageCounter();\n    }\n\n    function renderReview() {\n      if (!reviewsInScope.length) return;\n      reviewIndex =\n        ((reviewIndex % reviewsInScope.length) + reviewsInScope.length) % reviewsInScope.length;\n      const entry = reviewsInScope[reviewIndex];\n      const meta = readMetaFromEntry(entry);\n      if (!meta) return;\n      const variant = variantOf(meta);\n\n      overlay.setAttribute(\"data-variant\", variant);\n\n      currentPhotos = meta.photos;\n\n      // Counter (top-left)\n      // Tur 130 \u2014 total is the JM real review count for this product\n      // (data-rating-count on the section, e.g. 11), NOT the growing DOM\n      // card count. Falls back to public API getTotalCount, then to scope\n      // length as last resort.\n      // Tur 132 \u2014 raw entries have no DOM row, so sectionEl falls back to\n      // the page's single .pdp-reviews node (PDP renders one per product).\n      if (indexEl) indexEl.textContent = pad2(reviewIndex + 1);\n      if (totalEl) {\n        var sectionEl =\n          entry.kind === \"dom\" && entry.row\n            ? entry.row.closest(\".pdp-reviews\")\n            : document.querySelector(\".pdp-reviews\");\n        var attrTotal = sectionEl\n          ? parseInt(sectionEl.getAttribute(\"data-rating-count\"), 10) || 0\n          : 0;\n        var apiTotal = 0;\n        if (\n          !attrTotal &&\n          sectionEl &&\n          window.SantoPDPReviews &&\n          typeof window.SantoPDPReviews.getTotalCount === \"function\"\n        ) {\n          apiTotal = window.SantoPDPReviews.getTotalCount(sectionEl) || 0;\n        }\n        var total = attrTotal || apiTotal || reviewsInScope.length;\n        totalEl.textContent = pad2(total);\n      }\n\n      // Stars\n      renderStars(meta.rating);\n\n      // Date\n      if (dateEl) dateEl.textContent = meta.date || \"\";\n\n      // Verified\n      if (verifiedEl) {\n        if (meta.verified) verifiedEl.removeAttribute(\"hidden\");\n        else verifiedEl.setAttribute(\"hidden\", \"\");\n      }\n\n      // Title\n      if (titleEl) {\n        const t = (meta.title || \"\").trim();\n        if (t) {\n          titleEl.removeAttribute(\"hidden\");\n          titleEl.textContent = t;\n        } else {\n          titleEl.setAttribute(\"hidden\", \"\");\n          titleEl.textContent = \"\";\n        }\n      }\n\n      // Body (lightbox always shows full text)\n      if (bodyEl) {\n        const txt = (meta.body || \"\").trim();\n        if (txt) {\n          bodyEl.classList.remove(\"is-muted\");\n          bodyEl.textContent = txt;\n        } else if (meta.hasPhotos) {\n          bodyEl.classList.add(\"is-muted\");\n          bodyEl.textContent = \"Sadece foto\u011Fraf payla\u015F\u0131ld\u0131.\";\n        } else {\n          bodyEl.classList.remove(\"is-muted\");\n          bodyEl.textContent = \"\";\n        }\n      }\n\n      // Author footer\n      if (nameEl) nameEl.textContent = meta.name || \"\";\n      renderSource(meta.source);\n      if (initialsEl) initialsEl.textContent = meta.initials || \"\";\n\n      // Clamp photoIndex when review changes\n      if (photoIndex >= currentPhotos.length) photoIndex = 0;\n\n      renderThumbs();\n      if (currentPhotos.length) showPhoto(photoIndex);\n      else {\n        imgEl.src = \"\";\n        updateStageCounter();\n      }\n\n      updateReviewNavState();\n    }\n\n    function updateReviewNavState() {\n      const single = reviewsInScope.length <= 1;\n      [prevBtn, nextBtn].forEach(function (b) {\n        if (!b) return;\n        if (single) {\n          b.style.display = \"none\";\n          b.disabled = true;\n        } else {\n          b.style.display = \"\";\n          b.disabled = false;\n        }\n      });\n    }\n\n    function gotoReview(dir) {\n      if (!reviewsInScope.length) return;\n\n      // \u2500\u2500\u2500 Tur 132: forward navigation past last virtual entry \u2192 SILENT JM fetch \u2500\u2500\u2500\n      // When the user reaches the last entry currently in scope (DOM rows\n      // + lightbox-only Map entries) and JM still has unfetched pages, call\n      // `api.fetchNextSilent(sectionEl)` which returns raw review objects\n      // WITHOUT touching PDP DOM or PDP \"Daha Fazla G\u00F6ster\" pagination.\n      // The raw reviews are pushed into `_extraReviews` (uuid keyed) and\n      // `reviewsInScope` is rebuilt to include them as `kind:'raw'` entries.\n      //\n      // Previously (Tur 129, superseded) lightbox arrow-next delegated to\n      // `api.loadMore` which appended DOM cards and silently consumed PDP\n      // pagination. Hakan Bey: \"Lightbox'ta yorumlar\u0131 gezdim diye pdp\n      // sayfas\u0131nda neden t\u00FCm yorumlar\u0131 g\u00F6z\u00FCk\u00FCr hale getirdin? orada daha\n      // fazla g\u00F6ster'e basmas\u0131 gerekirdi. neden ayn\u0131 ak\u0131\u015F\u0131 orada uygulad\u0131n?\"\n      if (dir > 0 && reviewIndex === reviewsInScope.length - 1) {\n        // Look up the section via any DOM entry, or fall back to the\n        // single .pdp-reviews node on the page (PDP renders one).\n        var domEntry = null;\n        for (var i = 0; i < reviewsInScope.length; i++) {\n          if (reviewsInScope[i].kind === \"dom\" && reviewsInScope[i].row) {\n            domEntry = reviewsInScope[i];\n            break;\n          }\n        }\n        var sectionEl =\n          domEntry && domEntry.row\n            ? domEntry.row.closest(\".pdp-reviews\")\n            : document.querySelector(\".pdp-reviews\");\n        var api = window.SantoPDPReviews;\n\n        if (\n          sectionEl &&\n          api &&\n          typeof api.hasMoreSilent === \"function\" &&\n          typeof api.fetchNextSilent === \"function\"\n        ) {\n          // Drop the click while a fetch is already in flight.\n          if (typeof api.isLoading === \"function\" && api.isLoading(sectionEl)) {\n            return;\n          }\n          if (api.hasMoreSilent(sectionEl)) {\n            var beforeLen = reviewsInScope.length;\n            // Visual hint on the next arrow during the network round-trip.\n            if (nextBtn) {\n              nextBtn.disabled = true;\n              nextBtn.setAttribute(\"aria-busy\", \"true\");\n            }\n            // Tur 130 \u2014 show \"Y\u00FCkleniyor\u2026\" while the JM fetch is in flight.\n            // Tur 132 \u2014 overlay now sits stage-center (CSS), not top-left.\n            if (loadingEl) loadingEl.hidden = false;\n            api.fetchNextSilent(sectionEl).then(function (result) {\n              // Push every fetched review into the lightbox-only Map.\n              // Filter to non-empty uuids so the dedup in getVisibleReviewsAll\n              // has something to key on.\n              if (result && Array.isArray(result.reviews)) {\n                result.reviews.forEach(function (rv) {\n                  if (!rv) return;\n                  var uuid = String(rv.uuid || rv.id || rv.review_id || \"\").trim();\n                  if (!uuid) return;\n                  _extraReviews.set(uuid, rv);\n                });\n              }\n              // Recompute virtual scope (DOM rows + Map entries, dedup'd).\n              reviewsInScope = getVisibleReviewsAll();\n              if (reviewsInScope.length > beforeLen) {\n                // First newly-added entry (index = previous length).\n                reviewIndex = beforeLen;\n              } else {\n                // No new entries (network failure / mid-flight exhaustion).\n                // Wrap to the start as graceful fallback.\n                reviewIndex = 0;\n              }\n              photoIndex = 0;\n              renderReview();\n              if (nextBtn) {\n                nextBtn.disabled = false;\n                nextBtn.removeAttribute(\"aria-busy\");\n              }\n              // Tur 130 \u2014 hide loading indicator (covers success + failure\n              // paths since fetchNextSilent never rejects).\n              if (loadingEl) loadingEl.hidden = true;\n            });\n            return;\n          }\n        }\n      }\n\n      // \u2500\u2500\u2500 Default: modulo wrap. Covers backward navigation, and forward\n      //     navigation once all JM pages are exhausted. \u2500\u2500\u2500\n      reviewIndex =\n        (((reviewIndex + dir) % reviewsInScope.length) + reviewsInScope.length) %\n        reviewsInScope.length;\n      photoIndex = 0;\n      renderReview();\n    }\n\n    function openLightbox(rowEl, startPhotoIdx, triggerEl) {\n      // Tur 132 \u2014 entry-based scope. The click always originates from a DOM\n      // row (photo tile or row body); raw entries only appear after silent\n      // fetch via lightbox arrow-next, so they're never the initial focus.\n      reviewsInScope = getVisibleReviewsAll();\n      if (!reviewsInScope.length && rowEl) {\n        // Fallback: include the row even if not visible (defensive).\n        var fallbackUuid = rowEl.getAttribute(\"data-review-uuid\") || \"\";\n        reviewsInScope = [{ kind: \"dom\", row: rowEl, uuid: fallbackUuid }];\n      }\n      if (!reviewsInScope.length) return;\n\n      // Find the entry whose DOM row matches the click target.\n      var found = -1;\n      for (var i = 0; i < reviewsInScope.length; i++) {\n        var e = reviewsInScope[i];\n        if (e.kind === \"dom\" && e.row === rowEl) {\n          found = i;\n          break;\n        }\n      }\n      reviewIndex = found >= 0 ? found : 0;\n      photoIndex = parseInt(startPhotoIdx, 10) || 0;\n      returnFocusEl = triggerEl || null;\n\n      renderReview();\n\n      overlay.removeAttribute(\"hidden\");\n      void overlay.offsetHeight;\n      overlay.classList.add(\"is-open\");\n\n      document.body.style.overflow = \"hidden\";\n      document.documentElement.style.overflow = \"hidden\";\n\n      document.addEventListener(\"keydown\", onKeydown);\n\n      setTimeout(function () {\n        if (closeBtn) {\n          try {\n            closeBtn.focus();\n          } catch (e) {}\n        }\n      }, 50);\n    }\n\n    function closeLightbox() {\n      overlay.classList.remove(\"is-open\");\n      document.body.style.overflow = \"\";\n      document.documentElement.style.overflow = \"\";\n      document.removeEventListener(\"keydown\", onKeydown);\n      setTimeout(function () {\n        if (!overlay.classList.contains(\"is-open\")) {\n          overlay.setAttribute(\"hidden\", \"\");\n          imgEl.src = \"\";\n        }\n      }, 320);\n      if (\n        returnFocusEl &&\n        typeof returnFocusEl.focus === \"function\" &&\n        document.contains(returnFocusEl)\n      ) {\n        try {\n          returnFocusEl.focus();\n        } catch (e) {}\n      }\n      returnFocusEl = null;\n    }\n\n    function onKeydown(event) {\n      if (event.key === \"Escape\") {\n        event.preventDefault();\n        closeLightbox();\n        return;\n      }\n      if (event.key === \"ArrowLeft\") {\n        event.preventDefault();\n        gotoReview(-1);\n        return;\n      }\n      if (event.key === \"ArrowRight\") {\n        event.preventDefault();\n        gotoReview(+1);\n        return;\n      }\n    }\n\n    // \u2500\u2500\u2500 Click delegation: photo trigger and row body open lightbox \u2500\u2500\u2500\n    document.addEventListener(\"click\", function (event) {\n      // 0. Explicit keyboard/AT open button (native <button>; also fires on Enter/Space)\n      const openBtn = event.target.closest(\"[data-review-open]\");\n      if (openBtn) {\n        const r = openBtn.closest(\"[data-review-row]\");\n        if (!r) return;\n        event.preventDefault();\n        openLightbox(r, 0, openBtn);\n        return;\n      }\n\n      // 1. Photo tile \u2014 open at clicked photo index\n      const tile = event.target.closest(\"[data-review-photo-trigger]\");\n      if (tile) {\n        const row = tile.closest(\"[data-review-row]\");\n        if (!row) return;\n        event.preventDefault();\n        const idx = parseInt(tile.getAttribute(\"data-photo-index\") || \"0\", 10) || 0;\n        openLightbox(row, idx, tile);\n        return;\n      }\n\n      // 2. Row body click \u2014 open at photo 0 (skip if click on interactive descendants)\n      const row = event.target.closest(\"[data-review-row]\");\n      if (!row) return;\n      // Photo wrappers inside the card already handled above; skip everything else clickable.\n      if (\n        event.target.closest(\n          \".helpful, .photo-strip, .pdp-review-card__photo, a, button, select, input, textarea, label\",\n        )\n      )\n        return;\n      event.preventDefault();\n      openLightbox(row, 0, row);\n    });\n\n    // Keyboard activation is handled by the native .pdp-review-card__open <button>\n    // (Enter/Space \u2192 click \u2192 handler #0 above). The <article> is no longer a\n    // role=\"button\"/tabindex target, so no separate keydown handler is needed.\n\n    // \u2500\u2500\u2500 Stage frame click \u2192 next photo \u2500\u2500\u2500\n    if (frameEl) {\n      frameEl.addEventListener(\"click\", function (e) {\n        if (!currentPhotos.length || currentPhotos.length === 1) return;\n        if (e.target.closest(\".lb-stage-counter\")) return;\n        showPhoto(photoIndex + 1);\n      });\n    }\n\n    // \u2500\u2500\u2500 Side arrows: navigate between reviews \u2500\u2500\u2500\n    if (prevBtn)\n      prevBtn.addEventListener(\"click\", function (e) {\n        e.stopPropagation();\n        gotoReview(-1);\n      });\n    if (nextBtn)\n      nextBtn.addEventListener(\"click\", function (e) {\n        e.stopPropagation();\n        gotoReview(+1);\n      });\n\n    // \u2500\u2500\u2500 Close handlers \u2500\u2500\u2500\n    if (closeBtn)\n      closeBtn.addEventListener(\"click\", function (e) {\n        e.stopPropagation();\n        closeLightbox();\n      });\n    overlay.addEventListener(\"click\", function (event) {\n      // Click outside any stage child = close\n      if (event.target === overlay) closeLightbox();\n    });\n\n    // \u2500\u2500\u2500 Touch swipe on text col: navigate between reviews \u2500\u2500\u2500\n    let touchStartX = null;\n    const textCol = overlay.querySelector(\".lb-text-col\");\n    if (textCol) {\n      textCol.addEventListener(\n        \"touchstart\",\n        function (e) {\n          if (e.touches && e.touches.length === 1) touchStartX = e.touches[0].clientX;\n        },\n        { passive: true },\n      );\n      textCol.addEventListener(\n        \"touchend\",\n        function (e) {\n          if (touchStartX === null) return;\n          const endX =\n            e.changedTouches && e.changedTouches[0] ? e.changedTouches[0].clientX : touchStartX;\n          const dx = endX - touchStartX;\n          touchStartX = null;\n          if (Math.abs(dx) < 50) return;\n          if (dx > 0) gotoReview(-1);\n          else gotoReview(+1);\n        },\n        { passive: true },\n      );\n    }\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["row"]
}
