{
  "version": 3,
  "sources": ["/cdn/shop/t/67/assets/stocked.food.custom.js?t=08.10.2026"],
  "sourcesContent": ["(function () {\r\n  if (!window.location.pathname.includes(\"/a/\")) {\r\n    return; // \uD83D\uDEAB Not the subscriptions page\r\n  }\r\n\r\n  // Dynamically classify Skio modals so CSS can target specific calendar behavior\r\n  function classifySkioModals() {\r\n    // Use precise Skio modal classes instead of generic fallbacks\r\n    const modals = document.querySelectorAll(\".SubscriptionModal, .MuiModal-root[role='presentation']\");\r\n    \r\n    modals.forEach((modal) => {\r\n      // Find the exact title of the modal (usually the first h2 or Typography element) to prevent false matches\r\n      const titleEl = modal.querySelector(\"h2, .MuiTypography-h6\");\r\n      const text = titleEl ? (titleEl.textContent || \"\").toLowerCase().trim() : (modal.textContent || \"\").toLowerCase();\r\n\r\n      // Exact word matching for the modal title\r\n      if (text === \"reactivate\" || text.includes(\"reactivate\")) {\r\n        modal.classList.add(\"skio-modal-reactivate\");\r\n        modal.classList.remove(\"skio-modal-edit-frequency\");\r\n        modal.setAttribute(\"data-modal-type\", \"reactivate\");\r\n        injectDynamicCalendarIntoReactivate(modal);\r\n      } else if (\r\n        text === \"edit frequency\" ||\r\n        text === \"change delivery date\" ||\r\n        text === \"next order\" ||\r\n        text === \"billing date\" ||\r\n        text === \"order frequency\" ||\r\n        text.includes(\"frequency\")\r\n      ) {\r\n        modal.classList.add(\"skio-modal-edit-frequency\");\r\n        modal.classList.remove(\"skio-modal-reactivate\");\r\n        modal.setAttribute(\"data-modal-type\", \"edit-frequency\");\r\n      }\r\n    });\r\n  }\r\n  // Get all date ISO strings (YYYY-MM-DD) for the current week (Monday through Sunday)\r\n  function getCurrentWeekDates(refDateStr) {\r\n    let today;\r\n    if (refDateStr) {\r\n      const parts = refDateStr.split(\"-\").map(Number);\r\n      today = new Date(parts[0], parts[1] - 1, parts[2]);\r\n    } else {\r\n      const now = new Date();\r\n      today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n    }\r\n\r\n    const dow = today.getDay(); // 0 = Sun, 1 = Mon ... 6 = Sat\r\n    const daysSinceMonday = (dow + 6) % 7;\r\n    const monday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - daysSinceMonday);\r\n\r\n    const dates = [];\r\n    for (let i = 0; i < 7; i++) {\r\n      const d = new Date(monday.getFullYear(), monday.getMonth(), monday.getDate() + i);\r\n      const y = d.getFullYear();\r\n      const m = String(d.getMonth() + 1).padStart(2, \"0\");\r\n      const day = String(d.getDate()).padStart(2, \"0\");\r\n      dates.push(`${y}-${m}-${day}`);\r\n    }\r\n    return dates;\r\n  }\r\n\r\n  // Inject the custom dynamic calendar into the Reactivate modal and bridge it to Skio's state\r\n  function injectDynamicCalendarIntoReactivate(modal, attempts = 0) {\r\n    if (!modal || !modal.isConnected) return;\r\n    if (modal.querySelector(\".binaery-reactivate-wrapper\")) return;\r\n    if (!window.BinaeryCalendar) return;\r\n\r\n    // React components may render .rdp slightly after the modal wrapper is mounted\r\n    const rdp = modal.querySelector(\".rdp\");\r\n    if (!rdp) {\r\n        if (attempts > 20) return; // Prevent unbounded polling if .rdp never mounts (max 1s)\r\n        setTimeout(() => injectDynamicCalendarIntoReactivate(modal, attempts + 1), 50);\r\n        return;\r\n    }\r\n\r\n    const wrapper = document.createElement(\"div\");\r\n    wrapper.className = \"binaery-reactivate-wrapper binaery-modal-calendar\";\r\n    wrapper.innerHTML = `\r\n      <div class=\"binaery-calendar\" data-binaery-role=\"calendar-host\">\r\n        <div class=\"binaery-calendar-header\">\r\n          <button type=\"button\" class=\"binaery-calendar-nav\" data-binaery-role=\"prev\" aria-label=\"Previous month\">\u2039</button>\r\n          <div class=\"binaery-calendar-month\" data-binaery-role=\"month-label\"></div>\r\n          <button type=\"button\" class=\"binaery-calendar-nav\" data-binaery-role=\"next\" aria-label=\"Next month\">\u203A</button>\r\n        </div>\r\n        <div class=\"binaery-calendar-weekdays\" data-binaery-role=\"weekday-row\">\r\n          <div class=\"binaery-calendar-weekday\"></div><div class=\"binaery-calendar-weekday\"></div><div class=\"binaery-calendar-weekday\"></div>\r\n          <div class=\"binaery-calendar-weekday\"></div><div class=\"binaery-calendar-weekday\"></div><div class=\"binaery-calendar-weekday\"></div>\r\n          <div class=\"binaery-calendar-weekday\"></div>\r\n        </div>\r\n        <div class=\"binaery-calendar-grid\" data-binaery-role=\"day-grid\">\r\n          ${Array(42).fill(0).map((_, i) => `<button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"${i}\"></button>`).join('')}\r\n        </div>\r\n      </div>\r\n    `;\r\n\r\n    rdp.parentNode.insertBefore(wrapper, rdp);\r\n\r\n    const baseRules = window.BinaeryRulesData || { disabledWeekdays: [0, 1, 2, 6], disabledDates: [], disabledRanges: [] };\r\n    const cfg = { firstDay: 1 };\r\n\r\n    // Reactivate Calendar Specific Condition: Disable all dates in the current week (e.g. 29, 30)\r\n    const currentWeekDates = getCurrentWeekDates(window.ukToday);\r\n    const existingDisabled = Array.isArray(baseRules.disabledDates) ? baseRules.disabledDates.slice() : [];\r\n    const disabledDates = Array.from(new Set(existingDisabled.concat(currentWeekDates)));\r\n    const existingRanges = Array.isArray(baseRules.disabledRanges) ? baseRules.disabledRanges.slice() : [];\r\n    const disabledRanges = existingRanges.concat([{\r\n      start: currentWeekDates[0],\r\n      end: currentWeekDates[currentWeekDates.length - 1]\r\n    }]);\r\n    const specialEnabled = (baseRules.specialEnabledDates || []).filter(\r\n      (d) => !currentWeekDates.includes(d)\r\n    );\r\n\r\n    const reactivateRules = Object.assign({}, baseRules, {\r\n      isSkioPortal: true,\r\n      disabledDates: disabledDates,\r\n      disabledRanges: disabledRanges,\r\n      specialEnabledDates: specialEnabled\r\n    });\r\n\r\n    // Prevent accidental clicks on the inline wrapper from triggering overlay dismiss or removeChild errors\r\n    wrapper.addEventListener(\"click\", function (e) {\r\n      if (e.target === wrapper) {\r\n        e.stopPropagation();\r\n      }\r\n    }, true);\r\n\r\n    // Initialize our dynamic calendar inside the wrapper\r\n    window.BinaeryCalendar.initOverlay(wrapper, cfg, reactivateRules);\r\n    // Listen for attribute changes on the calendar host to detect when a user clicks a date\r\n    const host = wrapper.querySelector(\"[data-binaery-role='calendar-host']\");\r\n    if (host) {\r\n      const observer = new MutationObserver((mutations) => {\r\n        mutations.forEach((mutation) => {\r\n          if (mutation.attributeName === \"data-selected-iso\") {\r\n            const iso = host.getAttribute(\"data-selected-iso\");\r\n            if (iso) {\r\n              syncIsoToRdp(iso, modal);\r\n            }\r\n          }\r\n        });\r\n      });\r\n      observer.observe(host, { attributes: true });\r\n\r\n      function showReactivateLoading() {\r\n        let overlay = document.getElementById(\"binaery-portal-loading-overlay\");\r\n        if (!overlay) {\r\n          overlay = document.createElement(\"div\");\r\n          overlay.id = \"binaery-portal-loading-overlay\";\r\n          overlay.setAttribute(\"role\", \"status\");\r\n          overlay.setAttribute(\"aria-live\", \"polite\");\r\n          overlay.style =\r\n            \"position:fixed; inset:0; background:rgba(255,255,255,0.7); z-index:2147483647; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; backdrop-filter:blur(2px);\";\r\n          overlay.innerHTML =\r\n            '<div style=\"width:40px; height:40px; border:4px solid #f3f3f3; border-top:4px solid #000; border-radius:50%; animation: binaery-spin 1s linear infinite;\"></div>' +\r\n            '<span style=\"font-family:inherit; font-size:14px; font-weight:500; color:#111827;\">Reactivating your subscription\u2026</span>' +\r\n            '<style>@keyframes binaery-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }</style>';\r\n          document.body.appendChild(overlay);\r\n        }\r\n        overlay.style.display = \"flex\";\r\n      }\r\n\r\n      // Guard against duplicate registration on the same long-lived modal node\r\n      if (!modal.__binaeryReloadListenerAttached) {\r\n        modal.__binaeryReloadListenerAttached = true;\r\n        const controller = new AbortController();\r\n        let reloadTriggered = false;\r\n\r\n        window.addEventListener(\r\n          \"pagehide\",\r\n          () => {\r\n            controller.abort();\r\n            modal.__binaeryReloadListenerAttached = false;\r\n          },\r\n          { once: true }\r\n        );\r\n\r\n        modal.addEventListener(\r\n          \"click\",\r\n          function (e) {\r\n            try {\r\n              if (reloadTriggered) return;\r\n\r\n              const btn = e.target.closest(\r\n                \"button, [role='button'], input[type='submit'], .MuiButton-root\"\r\n              );\r\n              if (!btn) return;\r\n\r\n              if (btn.closest(\".binaery-reactivate-wrapper\") || btn.closest(\".rdp\")) return;\r\n              if (btn.disabled || btn.getAttribute(\"aria-disabled\") === \"true\") return;\r\n\r\n              const btnText = (btn.textContent || \"\").trim().toLowerCase();\r\n              const ariaLabel = (btn.getAttribute(\"aria-label\") || \"\").toLowerCase();\r\n\r\n              const isConfirmBtn =\r\n                btnText.includes(\"confirm\") ||\r\n                btnText.includes(\"reactivate\") ||\r\n                ariaLabel.includes(\"confirm\") ||\r\n                ariaLabel.includes(\"reactivate\");\r\n\r\n              if (isConfirmBtn) {\r\n                // Always read host from the live DOM because React re-renders can replace the wrapper\r\n                const liveHost = modal.querySelector(\r\n                  \".binaery-reactivate-wrapper [data-binaery-role='calendar-host']\"\r\n                );\r\n                const datePicked = Boolean(liveHost && liveHost.dataset.selectedIso);\r\n\r\n                if (datePicked) {\r\n                  reloadTriggered = true;\r\n                  showReactivateLoading();\r\n\r\n                  let obs;\r\n                  const reloadTimer = setTimeout(function () {\r\n                    if (obs) obs.disconnect();\r\n                    if (\"scrollRestoration\" in history) {\r\n                      history.scrollRestoration = \"manual\";\r\n                    }\r\n                    window.scrollTo(0, 0);\r\n                    window.location.reload();\r\n                  }, 10000);\r\n\r\n                  obs = new MutationObserver(() => {\r\n                    if (modal.querySelector(\".Mui-error, [role='alert']\")) {\r\n                      clearTimeout(reloadTimer);\r\n                      obs.disconnect();\r\n                      reloadTriggered = false;\r\n                      const overlay = document.getElementById(\"binaery-portal-loading-overlay\");\r\n                      if (overlay) overlay.style.display = \"none\";\r\n                    }\r\n                  });\r\n\r\n                  obs.observe(modal, { childList: true, subtree: true });\r\n                }\r\n              }\r\n            } catch (err) {\r\n              console.error(\"[Binaery]: reactivate click handler error\", err);\r\n            }\r\n          },\r\n          { capture: true, signal: controller.signal }\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  function syncIsoToRdp(iso, modal) {\r\n    const parts = String(iso).slice(0, 10).split(\"-\").map(Number);\r\n    const tY = parts[0];\r\n    const tM = parts[1] - 1;\r\n    const tD = parts[2];\r\n\r\n    function tryClick(attempts = 0) {\r\n        if (attempts > 10) return; // Prevent infinite loops\r\n        \r\n        // ALWAYS dynamically query the rdp container as React frequently re-renders and destroys old DOM nodes\r\n        const rdpContainer = modal.querySelector(\".rdp\");\r\n        if (!rdpContainer) {\r\n            setTimeout(() => tryClick(attempts + 1), 50);\r\n            return;\r\n        }\r\n\r\n        const caption = rdpContainer.querySelector(\".rdp-caption_label\");\r\n        if (!caption) return;\r\n        \r\n        // Extract month and year from caption (e.g. \"October 2026\")\r\n        const captionText = caption.textContent.replace(/[^a-zA-Z0-9\\s]/g, \"\").trim();\r\n        const rdpDate = new Date(captionText);\r\n        if (isNaN(rdpDate.getTime())) return;\r\n        \r\n        const rM = rdpDate.getMonth();\r\n        const rY = rdpDate.getFullYear();\r\n\r\n        if (rY === tY && rM === tM) {\r\n            // We are in the right month, click the matching day\r\n            const days = rdpContainer.querySelectorAll(\".rdp-day:not(.rdp-day_outside)\");\r\n            for (let i = 0; i < days.length; i++) {\r\n                if (parseInt(days[i].textContent, 10) === tD) {\r\n                    const btn = days[i];\r\n                    \r\n                    // Prevent deselecting: if Skio's calendar already has this date selected, do not click it again.\r\n                    // (react-day-picker toggles selection off if you click an already-selected date).\r\n                    if (btn.getAttribute(\"aria-selected\") === \"true\" || btn.classList.contains(\"rdp-day_selected\")) {\r\n                        return;\r\n                    }\r\n\r\n                    // Dispatch both a native click and React-compatible pointer events\r\n                    btn.click();\r\n                    btn.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window }));\r\n                    btn.dispatchEvent(new MouseEvent('mouseup', { bubbles: true, cancelable: true, view: window }));\r\n                    return;\r\n                }\r\n            }\r\n        } else {\r\n            // Navigate the hidden .rdp calendar to the target month\r\n            const isFuture = (tY > rY) || (tY === rY && tM > rM);\r\n            const navBtn = isFuture ? rdpContainer.querySelector(\".rdp-nav_button_next\") : rdpContainer.querySelector(\".rdp-nav_button_previous\");\r\n            if (navBtn && !navBtn.disabled) {\r\n                navBtn.click();\r\n                // Wait for React to re-render the calendar before trying again\r\n                setTimeout(() => tryClick(attempts + 1), 50);\r\n            }\r\n        }\r\n    }\r\n    tryClick();\r\n  }\r\n\r\n  // \uD83D\uDEAB Automatically hide \"8 week\" / \"8 weeks\" options in Skio Portal dropdowns & modals\r\n  function hide8WeekOptions() {\r\n    const options = document.querySelectorAll(\"option\");\r\n    options.forEach((opt) => {\r\n      // Don't remove options inside Reactivate modals\r\n      if (opt.closest(\".skio-modal-reactivate, [data-modal-type='reactivate']\")) return;\r\n\r\n      const val = (opt.value || \"\").toLowerCase();\r\n      const txt = (opt.textContent || \"\").toLowerCase();\r\n      // Skip removal if option is currently selected to preserve existing 8-week subscriber state\r\n      if ((val.includes(\"8 week\") || txt.includes(\"8 week\")) && !opt.selected) {\r\n        opt.remove();\r\n      }\r\n    });\r\n  }\r\n\r\n  const selector = \".SubscriptionGroup-Active\";\r\n  let bannerInjectedOrPending = false;                                                                                                              \r\n\r\n  // Initial execution\r\n  classifySkioModals();\r\n  hide8WeekOptions();\r\n\r\n  const existing = document.querySelector(selector);\r\n  if (existing && !document.querySelector(\".custom-subscription-info\") && !bannerInjectedOrPending) {\r\n    runLogic(existing);\r\n  }\r\n\r\n  const observer = new MutationObserver(() => {\r\n    try {\r\n      classifySkioModals();\r\n      hide8WeekOptions();\r\n\r\n      const el = document.querySelector(selector);\r\n      if (el && !document.querySelector(\".custom-subscription-info\") && !bannerInjectedOrPending) {\r\n        runLogic(el);\r\n      }\r\n    } catch (err) {\r\n      console.error(\"[EQ Debug]: Subscription observer error\", err);\r\n    }\r\n  });\r\n\r\n  observer.observe(document.body, {\r\n    childList: true,\r\n    subtree: true,\r\n  });\r\n\r\n  // Safety net: disconnect observer on page unload/teardown\r\n  window.addEventListener(\"pagehide\", () => observer.disconnect());\r\n\r\n  function runLogic(element) {\r\n    if (document.querySelector(\".custom-subscription-info\") || bannerInjectedOrPending) {\r\n      return; // \uD83D\uDEAB Banner already present or fetch in-flight\r\n    }\r\n    bannerInjectedOrPending = true;\r\n\r\n    //debugger;\r\n    let customerInformation = getLatestSkioUserEmail({ clean: true });\r\n    let customerEmailID = null;\r\n    if (customerInformation != null) {\r\n      customerEmailID = customerInformation.value.split(\"-skioSiteId-\")[0];\r\n    }\r\n    /*\r\n    console.log(`[EQ Debug]: Customer Email ID found`, customerEmailID);\r\n    console.log(`[EQ Debug]: Customer Information found`, customerInformation);\r\n    */\r\n    function attachBanner(targetElement, infoDiv) {\r\n      if (!targetElement) {\r\n        console.log(\"[EQ Debug]: targetElement not found\");\r\n        return;\r\n      }\r\n\r\n      if (targetElement.parentNode) {\r\n        targetElement.parentNode.insertBefore(infoDiv, targetElement);\r\n      } else {\r\n        targetElement.prepend(infoDiv);\r\n      }\r\n    }\r\n\r\n    if (customerEmailID == null) {\r\n      let textContentToAdd = `\u26A0\uFE0F Warning: Anything you change below won't affect orders that have already been paid for. If you're looking to make changes, reach out to us on <a href=\"mailto:team@stockedfood.com\">email</a> or <a href=\"https://wa.me/447942333689\">WhatsApp</a>!`;\r\n      const infoDiv = document.createElement(\"div\");\r\n      infoDiv.className = \"custom-subscription-info\";\r\n      infoDiv.innerHTML = `\r\n\r\n        <div style=\"\">\r\n          ${textContentToAdd}\r\n        </div>\r\n      `;\r\n      attachBanner(element, infoDiv);\r\n      console.log(\r\n        `[EQ Debug]: Found element for subscriptions page`,\r\n        element\r\n      );\r\n    } else {\r\n      const requestOptions = {\r\n        method: \"GET\",\r\n        redirect: \"follow\",\r\n      };\r\n      fetch(\r\n        `https://stockedfood.eqserver.net/order/graphql/customer/last5/by-email/${customerEmailID}`,\r\n        requestOptions\r\n      )\r\n        .then((response) => response.text())\r\n        .then((result) => {\r\n          const latestOrder = JSON.parse(result)?.orders?.[0];\r\n          console.log(latestOrder?.processedAt);\r\n          console.log(latestOrder?.tags);\r\n          let tags = null;\r\n          let orderPaymentDate = latestOrder?.processedAt;\r\n          tags = latestOrder?.tags;\r\n          let dateOfDelivery = extractDateFromTags(tags);\r\n          let dateOfDeliveryFormatted = null;\r\n          if (dateOfDelivery != null) {\r\n            dateOfDeliveryFormatted = formatDDMMYYYYToReadable(dateOfDelivery);\r\n            console.log(\r\n              `[EQ Debug]: Date of delivery extracted from tags: ${dateOfDeliveryFormatted}`\r\n            );\r\n          }\r\n          let formattedDate = new Date(orderPaymentDate).toLocaleDateString(\r\n            \"en-GB\",\r\n            {\r\n              day: \"2-digit\",\r\n              month: \"long\",\r\n              year: \"numeric\",\r\n            }\r\n          );\r\n\r\n          let deliveryTextContentToAdd = ``;\r\n          let textContentToAdd = ``;\r\n          if (dateOfDelivery != null) {\r\n            deliveryTextContentToAdd = ` for <b>delivery on ${dateOfDeliveryFormatted}</b>`;\r\n            let todayDate = new Date();\r\n            let deliveryDateObj = new Date(dateOfDeliveryFormatted);\r\n            if (deliveryDateObj > todayDate) {\r\n              textContentToAdd = `\u26A0\uFE0F Warning: you have an order that has been paid for on <b>${formattedDate}</b>${deliveryTextContentToAdd}. Anything you change below won't affect this order so if you're looking to make changes, reach out to us on <a href=\"mailto:team@stockedfood.com\">email</a> or <a href=\"https://wa.me/447942333689\">WhatsApp</a>!`;\r\n            } else {\r\n              textContentToAdd = `\u26A0\uFE0F Warning: Anything you change below won't affect orders that have already been paid for. If you're looking to make changes, reach out to us on <a href=\"mailto:team@stockedfood.com\">email</a> or <a href=\"https://wa.me/447942333689\">WhatsApp</a>!`;\r\n            }\r\n          } else {\r\n            textContentToAdd = `\u26A0\uFE0F Warning: Anything you change below won't affect orders that have already been paid for. If you're looking to make changes, reach out to us on <a href=\"mailto:team@stockedfood.com\">email</a> or <a href=\"https://wa.me/447942333689\">WhatsApp</a>!`;\r\n          }\r\n\r\n          const infoDiv = document.createElement(\"div\");\r\n          infoDiv.className = \"custom-subscription-info\";\r\n          infoDiv.innerHTML = `\r\n            <div style=\"\">\r\n              ${textContentToAdd}\r\n            </div>\r\n          `;\r\n          attachBanner(element, infoDiv);\r\n        })\r\n        .catch((error) => {\r\n          // Don't reset bannerInjectedOrPending here: the observer would call runLogic again\r\n          // on the next DOM mutation and re-fetch endlessly. Fall back to the default banner instead.\r\n          console.error(\"[EQ Debug]: Last order fetch failed, showing default banner\", error);\r\n          if (document.querySelector(\".custom-subscription-info\")) return;\r\n          const infoDiv = document.createElement(\"div\");\r\n          infoDiv.className = \"custom-subscription-info\";\r\n          infoDiv.innerHTML = `\r\n            <div style=\"\">\r\n              \u26A0\uFE0F Warning: Anything you change below won't affect orders that have already been paid for. If you're looking to make changes, reach out to us on <a href=\"mailto:team@stockedfood.com\">email</a> or <a href=\"https://wa.me/447942333689\">WhatsApp</a>!\r\n            </div>\r\n          `;\r\n          attachBanner(element, infoDiv);\r\n        });\r\n    }\r\n    // \uD83D\uDD25 your actual logic here\r\n  }\r\n})();\r\n\r\nconst extractDateFromTags = (tags) => {\r\n  if (!Array.isArray(tags)) return null;\r\n\r\n  // Matches DD.MM.YYYY where year is between 2026\u20132030\r\n  const dateRegex = /\\b\\d{1,2}\\.\\d{1,2}\\.(2026|2027|2028|2029|2030)\\b/;\r\n\r\n  for (const tag of tags) {\r\n    const match = tag.match(dateRegex);\r\n    if (match) {\r\n      return match[0];\r\n    }\r\n  }\r\n\r\n  return null;\r\n};\r\n\r\n/**\r\n * Returns the latest email found inside UserAttributes in localStorage\r\n * @param {Object} options\r\n * @param {boolean} options.clean - remove \"-skioSiteId-...\" from email\r\n * @returns {{ key: string, value: string } | null}\r\n */\r\nconst getLatestSkioUserEmail = (options = { clean: false }) => {\r\n  let lastEmail = null;\r\n\r\n  for (let i = 0; i < localStorage.length; i++) {\r\n    const storageKey = localStorage.key(i);\r\n    const rawValue = localStorage.getItem(storageKey);\r\n\r\n    if (typeof rawValue !== \"string\" || !rawValue.includes(\"UserAttributes\")) {\r\n      continue;\r\n    }\r\n\r\n    try {\r\n      const parsed = JSON.parse(rawValue);\r\n      const userAttributes = parsed?.UserAttributes;\r\n\r\n      if (!Array.isArray(userAttributes)) continue;\r\n\r\n      const emailObj = userAttributes.find(\r\n        (attr) => attr?.Name === \"email\" && typeof attr.Value === \"string\"\r\n      );\r\n\r\n      if (emailObj) {\r\n        lastEmail = {\r\n          key: \"email\",\r\n          value: options.clean\r\n            ? emailObj.Value.split(\"-skioSiteId-\")[0]\r\n            : emailObj.Value,\r\n        };\r\n      }\r\n    } catch (e) {\r\n      // Ignore invalid JSON safely\r\n    }\r\n  }\r\n\r\n  return lastEmail;\r\n};\r\n\r\nconst formatDDMMYYYYToReadable = (dateStr) => {\r\n  if (!dateStr) return null;\r\n\r\n  const [day, month, year] = dateStr.split(\".\");\r\n  if (!day || !month || !year) return null;\r\n\r\n  const date = new Date(Date.UTC(year, month - 1, day));\r\n\r\n  return date.toLocaleDateString(\"en-GB\", {\r\n    day: \"2-digit\",\r\n    month: \"long\",\r\n    year: \"numeric\",\r\n    timeZone: \"UTC\",\r\n  });\r\n};\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n  document.querySelectorAll(\"video\").forEach((video) => {\r\n    if (video.paused && !video.ended) {\r\n      video.muted = true;\r\n      video.play().catch(() => {});\r\n    }\r\n  });\r\n});\r\n\r\nconst babCache = {};\r\nfunction getBabDocument(babUrl) {\r\n  if (!babCache[babUrl]) {\r\n    babCache[babUrl] = fetch(babUrl)\r\n      .then((res) => {\r\n        if (!res.ok) throw new Error(\"Failed to fetch Bundle page\");\r\n        return res.text();\r\n      })\r\n      .then((html) => {\r\n        const parser = new DOMParser();\r\n        return parser.parseFromString(html, \"text/html\");\r\n      })\r\n      .catch((err) => {\r\n        delete babCache[babUrl];\r\n        throw err;\r\n      });\r\n  }\r\n  return babCache[babUrl];\r\n}\r\n\r\nfunction findDishPickerContainers(root) {\r\n  const itemsLabels = Array.from(root.querySelectorAll(\"span\")).filter((s) =>\r\n    /^Items\\s*\\(\\d+\\)$/.test(s.textContent.trim())\r\n  );\r\n\r\n  const containers = new Set();\r\n\r\n  itemsLabels.forEach((label) => {\r\n    let el = label;\r\n    for (let i = 0; i < 8 && el; i++) {\r\n      el = el.parentElement;\r\n      if (!el) break;\r\n      if (el.querySelectorAll(\"img\").length >= 3) {\r\n        containers.add(el);\r\n        break;\r\n      }\r\n    }\r\n  });\r\n\r\n  return Array.from(containers);\r\n}\r\n\r\nfunction setupSkioModalInfoIcons(root) {\r\n  const containers = findDishPickerContainers(root);\r\n\r\n  containers.forEach((container) => {\r\n    try {\r\n      container.querySelectorAll(\"img\").forEach((img) => {\r\n        if (img.classList.contains(\"custom-info-added\")) return;\r\n\r\n        img.classList.add(\"custom-info-added\");\r\n\r\n        const imgContainer = img.parentElement;\r\n        if (!imgContainer) return;\r\n\r\n        imgContainer.classList.add(\"custom-skio-img-container\");\r\n\r\n        const infoBtn = document.createElement(\"button\");\r\n        infoBtn.type = \"button\";\r\n        infoBtn.className = \"info-icon-button custom-skio-info-btn\";\r\n        infoBtn.innerHTML = `\r\n          <div class=\"button-bg\"></div>\r\n          <span>i</span>\r\n        `;\r\n        imgContainer.appendChild(infoBtn);\r\n\r\n        const card =\r\n          img.closest(\r\n            \"[class*='DishCard'], [class*='dish-card'], [class*='ProductCard'], [class*='product-card']\"\r\n          ) || img.parentElement?.parentElement?.parentElement;\r\n        if (card) card.classList.add(\"custom-skio-dish-card\");\r\n      });\r\n    } catch (err) {\r\n      console.error(\"setupSkioModalInfoIcons error:\", err);\r\n    }\r\n  });\r\n}\r\n\r\nfunction setupAddonInfoIcons(root) {\r\n  root.querySelectorAll(\".cart-template__addon-item\").forEach((item) => {\r\n    const trigger = item.querySelector(\".cart-addon-image-trigger\");\r\n    if (!trigger || trigger.dataset.infoAdded) return;\r\n\r\n    trigger.dataset.infoAdded = \"true\";\r\n    trigger.classList.add(\"custom-skio-img-container\");\r\n\r\n    const infoBtn = document.createElement(\"button\");\r\n    infoBtn.type = \"button\";\r\n    infoBtn.className = \"info-icon-button custom-skio-info-btn\";\r\n    infoBtn.innerHTML = `\r\n      <div class=\"button-bg\"></div>\r\n      <span>i</span>\r\n    `;\r\n\r\n    trigger.appendChild(infoBtn);\r\n    item.classList.add(\"custom-skio-dish-card\");\r\n  });\r\n}\r\n\r\n// Debounced setup to avoid running too frequently\r\nlet skioSetupTimer = null;\r\nfunction debouncedSetup() {\r\n  clearTimeout(skioSetupTimer);\r\n  skioSetupTimer = setTimeout(() => {\r\n    setupSkioModalInfoIcons(document.body);\r\n    setupAddonInfoIcons(document.body);\r\n  }, 100);\r\n}\r\n\r\n// Persistent observer watches whole body for Skio portal injections\r\nconst skioModalObserver = new MutationObserver(debouncedSetup);\r\nskioModalObserver.observe(document.body, {\r\n  childList: true,\r\n  subtree: true,\r\n});\r\n\r\n// Run once immediately\r\nsetupSkioModalInfoIcons(document.body);\r\nsetupAddonInfoIcons(document.body);\r\nfunction handleDocumentClick(e) {\r\n  try {\r\n    const addonTrigger = e.target.closest(\".cart-addon-image-trigger\");\r\n    if (addonTrigger && addonTrigger.dataset.handle) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      if (window.openStockedProductModal) {\r\n        window.openStockedProductModal(\r\n          addonTrigger.dataset.handle,\r\n          true,\r\n          addonTrigger\r\n        );\r\n      }\r\n      return;\r\n    }\r\n\r\n    const infoBtn = e.target.closest(\".custom-skio-info-btn\");\r\n    if (!infoBtn) return;\r\n\r\n    e.preventDefault();\r\n    e.stopPropagation();\r\n\r\n    const imgContainer = infoBtn.parentElement;\r\n    const image = imgContainer?.querySelector(\"img\");\r\n    if (!image) return;\r\n\r\n    // Addon products\r\n    const trigger = infoBtn.closest(\".cart-addon-image-trigger\");\r\n    if (trigger?.dataset.handle) {\r\n      window.openStockedProductModal(trigger.dataset.handle, true, trigger);\r\n      return;\r\n    }\r\n    const title = image.alt?.trim();\r\n    const handle = window.stockedActiveProductsMap?.[title];\r\n\r\n    if (!handle) return;\r\n\r\n    if (window.openStockedProductModal) {\r\n      window.openStockedProductModal(handle, false, infoBtn);\r\n    }\r\n  } catch (err) {\r\n    console.error(\"[DocumentClick] Error handling click:\", err);\r\n  }\r\n}\r\n\r\n// Remove previous listener if registered before adding a new one\r\nif (typeof window._cleanupDocumentClick === \"function\") {\r\n  window._cleanupDocumentClick();\r\n}\r\n\r\ndocument.addEventListener(\"click\", handleDocumentClick);\r\n\r\n// expose cleanup for callers\r\nwindow._cleanupDocumentClick = function () {\r\n  document.removeEventListener(\"click\", handleDocumentClick);\r\n};\r\n\r\nwindow.openStockedProductModal = function (\r\n  handle,\r\n  isAddon = false,\r\n  triggerElement = null\r\n) {\r\n  const url = `/products/${handle}`;\r\n\r\n  // Create modal if it doesn't exist\r\n  let modal = document.getElementById(\"custom-product-modal\");\r\n  if (!modal) {\r\n    modal = document.createElement(\"div\");\r\n    modal.id = \"custom-product-modal\";\r\n\r\n    const modalContent = document.createElement(\"div\");\r\n    modalContent.className = \"custom-product-modal-content\";\r\n\r\n    const closeBtn = document.createElement(\"button\");\r\n    closeBtn.className = \"custom-product-modal-close\";\r\n    closeBtn.innerHTML = \"&times;\";\r\n\r\n    closeBtn.onclick = function () {\r\n      modal.style.display = \"none\";\r\n      const container = document.getElementById(\"custom-product-content\");\r\n      if (container) container.innerHTML = \"\"; // clear content to stop videos/scripts\r\n      document.body.style.overflow = \"\"; // restore body scroll\r\n    };\r\n\r\n    const contentContainer = document.createElement(\"div\");\r\n    contentContainer.id = \"custom-product-content\";\r\n\r\n    modalContent.appendChild(closeBtn);\r\n    modalContent.appendChild(contentContainer);\r\n    modal.appendChild(modalContent);\r\n    document.body.appendChild(modal);\r\n\r\n    // Close on click outside\r\n    modal.addEventListener(\"click\", function (event) {\r\n      if (event.target === modal) {\r\n        modal.style.display = \"none\";\r\n        const container = document.getElementById(\"custom-product-content\");\r\n        if (container) container.innerHTML = \"\";\r\n        document.body.style.overflow = \"\";\r\n      }\r\n    });\r\n  }\r\n\r\n  const contentContainer = document.getElementById(\"custom-product-content\");\r\n  modal.style.display = \"flex\";\r\n  document.body.style.overflow = \"hidden\"; // Prevent background scrolling\r\n\r\n  // Fetch HTML directly to bypass iframe CSP blocks\r\n  fetch(url)\r\n    .then((res) => {\r\n      if (!res.ok) throw new Error(\"Product page not found\");\r\n      return res.text();\r\n    })\r\n    .then((html) => {\r\n      const parser = new DOMParser();\r\n      const doc = parser.parseFromString(html, \"text/html\");\r\n      const template = doc.querySelector(\".product-template\");\r\n\r\n      // 1. First, see if the popup contents are directly on the fetched product page\r\n      // (We recently added a hidden build-a-bundle-product-card to the main product template to support this)\r\n      let directPopup = doc.querySelector(\".product-popup-contents\");\r\n\r\n      if (directPopup) {\r\n        return injectPopupContent(directPopup);\r\n      }\r\n\r\n      // 2. If not found directly, check if it's a bundle product and fetch from the bundle page\r\n      if (template) {\r\n        const babUrl = template.dataset.babUrl;\r\n        const productId = template.dataset.productId;\r\n\r\n        if (babUrl && productId) {\r\n          return getBabDocument(babUrl).then((babDoc) => {\r\n            const popupContent = babDoc.querySelector(\r\n              `.product-popup-contents[data-product-id=\"${productId}\"]`\r\n            );\r\n            if (popupContent) {\r\n              injectPopupContent(popupContent);\r\n            } else {\r\n              throw new Error(\r\n                \"Product details snippet not found in Bundle page\"\r\n              );\r\n            }\r\n          });\r\n        }\r\n      }\r\n\r\n      // 3. Fallback: render the whole product page content without header/footer if no popup available\r\n      const mainContent =\r\n        doc.querySelector(\"main\") ||\r\n        doc.querySelector(\"#smooth-content\") ||\r\n        doc.body;\r\n      contentContainer.innerHTML = mainContent.innerHTML;\r\n\r\n      function injectPopupContent(popupElement) {\r\n        // Clone the popup content to avoid mutating cache\r\n        const clone = popupElement.cloneNode(true);\r\n\r\n        // Hide the Add to Bundle (ATB) container since we are on subscriptions page\r\n        if (isAddon) {\r\n          const defaultMobileBtn = clone.querySelector(\r\n            \".bab-product-popup-contents__atb-container > .button.desktop\\\\:hidden\"\r\n          );\r\n          if (defaultMobileBtn) defaultMobileBtn.style.display = \"none\";\r\n\r\n          const subBtn = clone.querySelector(\r\n            \".bab-product-popup-contents__atb-container .sub-btn\"\r\n          );\r\n          if (subBtn) subBtn.style.display = \"none\";\r\n\r\n          const otpBtn = clone.querySelector(\r\n            \".bab-product-popup-contents__atb-container .otp-btn\"\r\n          );\r\n          if (otpBtn) {\r\n            otpBtn.classList.remove(\"hidden\", \"desktop:hidden\");\r\n            otpBtn.style.display = \"flex\"; // or block\r\n          }\r\n        }\r\n\r\n        if (!isAddon) {\r\n          const atbContainer = clone.querySelector(\r\n            \".bab-product-popup-contents__atb-container\"\r\n          );\r\n          if (atbContainer && atbContainer.parentElement) {\r\n            atbContainer.parentElement.style.display = \"none\";\r\n          }\r\n        }\r\n\r\n        // Inject the popup content\r\n        contentContainer.innerHTML = clone.innerHTML;\r\n\r\n        // Wire up functionality\r\n        setupModalSwiper();\r\n        setupModalVideos();\r\n        setupModalAccordions();\r\n        setupModalNutritionInfo();\r\n        setupModalATB();\r\n        setupModalReviewClick();\r\n\r\n        // Trigger Judge.me render\r\n\r\n        if (\r\n          window.jdgmCacheServer &&\r\n          typeof window.jdgmCacheServer.reloadAll === \"function\"\r\n        ) {\r\n          window.jdgmCacheServer.reloadAll();\r\n        } else if (\r\n          window.jdgmCacheServer &&\r\n          typeof window.jdgmCacheServer.reload === \"function\"\r\n        ) {\r\n          window.jdgmCacheServer.reload();\r\n        } else if (\r\n          window.jdgm &&\r\n          typeof window.jdgm.initializeWidgets === \"function\"\r\n        ) {\r\n          window.jdgm.initializeWidgets();\r\n        }\r\n      }\r\n    })\r\n    .catch((err) => {\r\n      contentContainer.innerHTML =\r\n        '<div class=\"custom-product-modal-error\">Failed to load product details.</div>';\r\n      console.error(\"Error fetching product popup:\", err);\r\n    });\r\n\r\n  // Helper to initialize Swiper inside the modal if Swiper is available\r\n  function setupModalSwiper() {\r\n    const mainSwiperEl = contentContainer.querySelector(\r\n      \".product-template__media-container__main-swiper .swiper\"\r\n    );\r\n    const thumbsSwiperEl = contentContainer.querySelector(\r\n      \".product-template__media-container__thumbs-swiper .swiper\"\r\n    );\r\n\r\n    if (mainSwiperEl && thumbsSwiperEl && typeof Swiper !== \"undefined\") {\r\n      const thumbSwiper = new Swiper(thumbsSwiperEl, {\r\n        spaceBetween: 12,\r\n        slidesPerView: 4,\r\n        watchSlidesProgress: true,\r\n        slideToClickedSlide: true,\r\n      });\r\n\r\n      const mainSwiper = new Swiper(mainSwiperEl, {\r\n        spaceBetween: 12,\r\n        slidesPerView: 1,\r\n        thumbs: {\r\n          swiper: thumbSwiper,\r\n        },\r\n      });\r\n\r\n      mainSwiper.controller.control = thumbSwiper;\r\n      mainSwiper.on(\"slideChange\", () => {\r\n        thumbSwiper.slideTo(mainSwiper.realIndex);\r\n      });\r\n    } else {\r\n      // Fallback for when Swiper is not loaded (or fails to initialize)\r\n      const mainSlides = contentContainer.querySelectorAll(\r\n        \".product-template__media-container__main-swiper .swiper-slide\"\r\n      );\r\n      const thumbSlides = contentContainer.querySelectorAll(\r\n        \".product-template__media-container__thumbs-swiper .swiper-slide\"\r\n      );\r\n      const thumbsWrapper = contentContainer.querySelector(\r\n        \".product-template__media-container__thumbs-swiper .swiper-wrapper\"\r\n      );\r\n\r\n      if (mainSlides.length > 0 && thumbSlides.length > 0) {\r\n        // Style the swiper wrapper to lay out thumbnails horizontally\r\n        if (thumbsWrapper) {\r\n          thumbsWrapper.style.display = \"flex\";\r\n          thumbsWrapper.style.gap = \"12px\";\r\n          thumbsWrapper.style.flexWrap = \"wrap\";\r\n          thumbsWrapper.style.width = \"100%\";\r\n        }\r\n\r\n        // Initialize display state for main slides\r\n        mainSlides.forEach((slide, index) => {\r\n          if (index === 0) {\r\n            slide.style.display = \"block\";\r\n            slide.style.position = \"relative\";\r\n            slide.style.opacity = \"1\";\r\n            slide.style.pointerEvents = \"auto\";\r\n          } else {\r\n            slide.style.display = \"none\";\r\n            slide.style.position = \"absolute\";\r\n            slide.style.opacity = \"0\";\r\n            slide.style.pointerEvents = \"none\";\r\n          }\r\n        });\r\n\r\n        // Initialize display state and click handlers for thumbnails\r\n        thumbSlides.forEach((thumb, index) => {\r\n          thumb.style.width = \"72px\";\r\n          thumb.style.height = \"72px\";\r\n          thumb.style.flexShrink = \"0\";\r\n          thumb.style.position = \"relative\";\r\n          thumb.style.cursor = \"pointer\";\r\n          thumb.style.borderWidth = \"2px\";\r\n          thumb.style.borderStyle = \"solid\";\r\n\r\n          if (index === 0) {\r\n            thumb.classList.add(\"swiper-slide-thumb-active\");\r\n            thumb.style.borderColor = \"rgba(239, 125, 0, 0.60)\"; // selected-orange-border\r\n          } else {\r\n            thumb.classList.remove(\"swiper-slide-thumb-active\");\r\n            thumb.style.borderColor = \"rgba(35, 35, 35, 0.10)\"; // primary-border\r\n          }\r\n\r\n          thumb.addEventListener(\"click\", (event) => {\r\n            event.preventDefault();\r\n\r\n            // Switch active main slide\r\n            mainSlides.forEach((slide, slideIndex) => {\r\n              if (slideIndex === index) {\r\n                slide.style.display = \"block\";\r\n                slide.style.position = \"relative\";\r\n                slide.style.opacity = \"1\";\r\n                slide.style.pointerEvents = \"auto\";\r\n              } else {\r\n                slide.style.display = \"none\";\r\n                slide.style.position = \"absolute\";\r\n                slide.style.opacity = \"0\";\r\n                slide.style.pointerEvents = \"none\";\r\n\r\n                // Pause video on inactive slides if playing\r\n                const video = slide.querySelector(\"video\");\r\n                if (video) {\r\n                  video.pause();\r\n                  video.classList.add(\"hidden\");\r\n                  const img = slide.querySelector(\".media__image\");\r\n                  const icon = slide.querySelector(\".media__icon\");\r\n                  if (img) img.classList.remove(\"hidden\");\r\n                  if (icon) icon.classList.remove(\"hidden\");\r\n                }\r\n              }\r\n            });\r\n\r\n            // Update active thumbnail border\r\n            thumbSlides.forEach((t, tIndex) => {\r\n              if (tIndex === index) {\r\n                t.classList.add(\"swiper-slide-thumb-active\");\r\n                t.style.borderColor = \"rgba(239, 125, 0, 0.60)\";\r\n              } else {\r\n                t.classList.remove(\"swiper-slide-thumb-active\");\r\n                t.style.borderColor = \"rgba(35, 35, 35, 0.10)\";\r\n              }\r\n            });\r\n          });\r\n        });\r\n      } else {\r\n        // Fallback: show only the first image and hide thumbs/rest if not enough slides\r\n        const slides = contentContainer.querySelectorAll(\r\n          \".product-template__media-container__main-swiper .swiper-slide\"\r\n        );\r\n        slides.forEach((slide, index) => {\r\n          if (index > 0) slide.style.display = \"none\";\r\n        });\r\n        const thumbs = contentContainer.querySelector(\r\n          \".product-template__media-links\"\r\n        );\r\n        if (thumbs) thumbs.style.display = \"none\";\r\n      }\r\n    }\r\n  }\r\n\r\n  // Helper to setup video clicks\r\n  function setupModalVideos() {\r\n    const mediaItems = contentContainer.querySelectorAll(\r\n      \".product-template__media--video\"\r\n    );\r\n    mediaItems.forEach((item) => {\r\n      const img = item.querySelector(\".media__image\");\r\n      const icon = item.querySelector(\".media__icon\");\r\n      const video = item.querySelector(\".media__video\");\r\n      if (img && icon && video) {\r\n        img.addEventListener(\"click\", (event) => {\r\n          event.preventDefault();\r\n          img.classList.add(\"hidden\");\r\n          icon.classList.add(\"hidden\");\r\n          video.classList.remove(\"hidden\");\r\n          video.play();\r\n        });\r\n        video.addEventListener(\"click\", (event) => {\r\n          event.preventDefault();\r\n          video.pause();\r\n          video.classList.add(\"hidden\");\r\n          img.classList.remove(\"hidden\");\r\n          icon.classList.remove(\"hidden\");\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  // Helper to setup accordion toggles\r\n  function setupModalAccordions() {\r\n    const containers = contentContainer.querySelectorAll(\r\n      \".product-accordion-container\"\r\n    );\r\n    containers.forEach((container) => {\r\n      const accordions = container.querySelectorAll(\".product-accordion\");\r\n      accordions.forEach((accordion) => {\r\n        const trigger = accordion.querySelector(\".product-accordion__trigger\");\r\n        const content = accordion.querySelector(\".product-accordion__contents\");\r\n        if (trigger && content) {\r\n          trigger.addEventListener(\"click\", () => {\r\n            if (accordion.classList.contains(\"active\")) {\r\n              accordion.classList.remove(\"active\");\r\n            } else {\r\n              accordion.classList.add(\"active\");\r\n            }\r\n          });\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  // Helper to setup nutrition multiplier and toggle table\r\n  function setupModalNutritionInfo() {\r\n    const displays = contentContainer.querySelectorAll(\r\n      \".product-nutrition-info-content\"\r\n    );\r\n    displays.forEach((display) => {\r\n      const optionsContainer = display.querySelector(\r\n        \".product-nutrition-info-content__multiplier-container\"\r\n      );\r\n      const nutritionValueContainers = display.querySelectorAll(\r\n        \".product-nutrition-metric\"\r\n      );\r\n\r\n      if (optionsContainer && nutritionValueContainers) {\r\n        const multiplierOptions = optionsContainer.querySelectorAll(\r\n          \".product-nutrition-info-content__multiplier-value\"\r\n        );\r\n        multiplierOptions.forEach((multiplierOption) => {\r\n          multiplierOption.addEventListener(\"click\", (e) => {\r\n            if (!multiplierOption.classList.contains(\"active\")) {\r\n              multiplierOptions.forEach((option) => {\r\n                option.classList.remove(\"active\");\r\n              });\r\n              multiplierOption.classList.add(\"active\");\r\n\r\n              const multiplier = parseInt(multiplierOption.textContent);\r\n              if (multiplier) {\r\n                nutritionValueContainers.forEach((valueContainer) => {\r\n                  const originalValue = parseFloat(\r\n                    valueContainer.dataset.originalValue\r\n                  );\r\n                  if (!isNaN(originalValue)) {\r\n                    const metricSpan = valueContainer.querySelector(\r\n                      \".product-nutrition-metric-value\"\r\n                    );\r\n                    if (metricSpan) {\r\n                      metricSpan.textContent =\r\n                        Math.round(originalValue * multiplier * 100) / 100;\r\n                    }\r\n                  }\r\n                });\r\n              }\r\n            }\r\n          });\r\n        });\r\n      }\r\n\r\n      // bind show/hide of nutrition table\r\n      const nutritionTableCont = display.querySelector(\r\n        \".nutrition-table-container\"\r\n      );\r\n      if (nutritionTableCont) {\r\n        const tableTrigger = nutritionTableCont.querySelector(\r\n          \".nutrition-table-toggle\"\r\n        );\r\n        const tableDropdown = nutritionTableCont.querySelector(\r\n          \".nutrition-table-dropdown\"\r\n        );\r\n        if (tableTrigger && tableDropdown) {\r\n          const triggerChevron = tableTrigger.querySelector(\"svg\");\r\n          tableTrigger.addEventListener(\"click\", (e) => {\r\n            if (tableDropdown.classList.contains(\"hidden\")) {\r\n              tableDropdown.classList.remove(\"hidden\");\r\n              if (triggerChevron) {\r\n                triggerChevron.classList.add(\"-rotate-180\");\r\n              }\r\n            } else {\r\n              tableDropdown.classList.add(\"hidden\");\r\n              if (triggerChevron) {\r\n                triggerChevron.classList.remove(\"-rotate-180\");\r\n              }\r\n            }\r\n          });\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  // Helper to handle clicking on the review badge in the modal\r\n  function setupModalReviewClick() {\r\n    const badge = contentContainer.querySelector(\".pop-up-judgeme-badge\");\r\n    if (!badge) return;\r\n\r\n    badge.style.cursor = \"pointer\";\r\n    badge.addEventListener(\"click\", (e) => {\r\n      e.preventDefault();\r\n      const reviewAccordion =\r\n        contentContainer.querySelector(\".review-accordion\");\r\n      if (reviewAccordion) {\r\n        if (!reviewAccordion.classList.contains(\"active\")) {\r\n          reviewAccordion.classList.add(\"active\");\r\n        }\r\n        reviewAccordion.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\r\n      }\r\n    });\r\n  }\r\n\r\n  function setupModalATB() {\r\n    const atbContainer = contentContainer.querySelector(\r\n      \".bab-product-popup-contents__atb-container\"\r\n    );\r\n    if (!atbContainer) return;\r\n\r\n    const infoText = atbContainer.parentElement?.querySelector(\r\n      \"span.text-grey-600.text-extra-small.font-brandon-text.justify-start\"\r\n    );\r\n\r\n    if (infoText) {\r\n      infoText.style.display = \"none\";\r\n    }\r\n\r\n    const increaseBtns = atbContainer.querySelectorAll(\r\n      \".product-quantity__increase\"\r\n    );\r\n    const decreaseBtns = atbContainer.querySelectorAll(\r\n      \".product-quantity__decrease\"\r\n    );\r\n    const qtyDisplays = atbContainer.querySelectorAll(\".product-quantity\");\r\n    const atbButtons = atbContainer.querySelectorAll(\r\n      \".bab-product-add-to-bundle\"\r\n    );\r\n\r\n    const otpPriceDisplay = atbContainer.querySelector(\r\n      \".otp-btn .product-price\"\r\n    );\r\n    const subPriceDisplay = atbContainer.querySelector(\r\n      \".sub-btn .product-price\"\r\n    );\r\n    const subCompPriceDisplay = atbContainer.querySelector(\r\n      \".sub-btn .product-comparison-price\"\r\n    );\r\n\r\n    const singlePrice = parseFloat(atbContainer.dataset.singlePrice) || 0;\r\n    const singleSubPrice =\r\n      parseFloat(atbContainer.dataset.singleSubscriptionPrice) || 0;\r\n\r\n    let currentQty = 1;\r\n\r\n    function formatMoney(cents) {\r\n      if (!cents) return \"\";\r\n      let str = \"\u00A3\" + (cents / 100).toFixed(2);\r\n      return str.replace(\".00\", \"\");\r\n    }\r\n\r\n    function updateDisplay() {\r\n      qtyDisplays.forEach((d) => (d.textContent = currentQty));\r\n      if (otpPriceDisplay)\r\n        otpPriceDisplay.textContent = formatMoney(singlePrice * currentQty);\r\n      if (subPriceDisplay)\r\n        subPriceDisplay.textContent = formatMoney(singleSubPrice * currentQty);\r\n      if (subCompPriceDisplay)\r\n        subCompPriceDisplay.textContent = formatMoney(singlePrice * currentQty);\r\n    }\r\n\r\n    updateDisplay();\r\n\r\n    increaseBtns.forEach((btn) => {\r\n      btn.addEventListener(\"click\", (e) => {\r\n        e.preventDefault();\r\n        currentQty++;\r\n        updateDisplay();\r\n      });\r\n    });\r\n\r\n    decreaseBtns.forEach((btn) => {\r\n      btn.addEventListener(\"click\", (e) => {\r\n        e.preventDefault();\r\n        if (currentQty > 1) {\r\n          currentQty--;\r\n          updateDisplay();\r\n        }\r\n      });\r\n    });\r\n\r\n    atbButtons.forEach((btn) => {\r\n      btn.addEventListener(\"click\", async (e) => {\r\n        e.preventDefault();\r\n\r\n        if (triggerElement) {\r\n          if (isAddon) {\r\n            // Calculate existing addons quantity in the cart\r\n            let existingAddonQty = 0;\r\n            document\r\n              .querySelectorAll(\".cart-template__addon-item\")\r\n              .forEach((addon) => {\r\n                const qtyDisplay = addon.querySelector(\r\n                  \".product-quantity, input[type='number']\"\r\n                );\r\n                if (qtyDisplay) {\r\n                  const val = parseInt(\r\n                    qtyDisplay.textContent || qtyDisplay.value,\r\n                    10\r\n                  );\r\n                  if (!isNaN(val)) existingAddonQty += val;\r\n                }\r\n              });\r\n\r\n            if (existingAddonQty + currentQty > 4) {\r\n              alert(\"You can only add a maximum of 4 one-off extras.\");\r\n              return;\r\n            }\r\n\r\n            const addonItem = triggerElement.closest(\r\n              \".cart-template__addon-item\"\r\n            );\r\n            if (addonItem) {\r\n              const variantId = addonItem.dataset.variantId;\r\n              if (variantId) {\r\n                try {\r\n                  const requestJson = {\r\n                    items: [\r\n                      {\r\n                        id: parseInt(variantId, 10),\r\n                        quantity: currentQty,\r\n                      },\r\n                    ],\r\n                  };\r\n                  await fetch(\"/cart/add.js\", {\r\n                    method: \"POST\",\r\n                    headers: { \"Content-Type\": \"application/json\" },\r\n                    body: JSON.stringify(requestJson),\r\n                  });\r\n                  window.location.reload();\r\n                } catch (error) {\r\n                  console.error(\"Error adding to cart:\", error);\r\n                }\r\n              }\r\n            }\r\n          } else {\r\n            const card = triggerElement.closest(\".custom-skio-dish-card\");\r\n            if (card) {\r\n              const pageAddBtn =\r\n                card.querySelector(\r\n                  \"button[aria-label*='Add'], button[aria-label*='add'], .product-quantity__increase\"\r\n                ) ||\r\n                Array.from(card.querySelectorAll(\"button\")).find(\r\n                  (b) =>\r\n                    b.textContent &&\r\n                    (b.textContent.includes(\"Add\") ||\r\n                      b.textContent.includes(\"+\"))\r\n                );\r\n              if (pageAddBtn) {\r\n                for (let i = 0; i < currentQty; i++) {\r\n                  pageAddBtn.click();\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        let modal = document.getElementById(\"custom-product-modal\");\r\n        if (modal) {\r\n          modal.style.display = \"none\";\r\n          document.body.style.overflow = \"\";\r\n        }\r\n      });\r\n    });\r\n  }\r\n};\r\n\r\n// \u2500\u2500\u2500 Cart Addon Product Detail Popup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n(function () {\r\n  var currentImages = [];\r\n  var currentIndex = 0;\r\n\r\n  // \u2500\u2500 DOM helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function el(id) {\r\n    return document.getElementById(id);\r\n  }\r\n\r\n  // \u2500\u2500 Navigate to a specific image index \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function goTo(index) {\r\n    if (!currentImages.length) return;\r\n    currentIndex = (index + currentImages.length) % currentImages.length;\r\n\r\n    var imgEl = el(\"cart-addon-popup-image\");\r\n    if (imgEl) {\r\n      imgEl.src = currentImages[currentIndex];\r\n    }\r\n\r\n    // Update thumbnail active state\r\n    var thumbs = el(\"cart-addon-popup-thumbs\");\r\n    if (thumbs) {\r\n      Array.prototype.forEach.call(\r\n        thumbs.querySelectorAll(\".addon-popup-thumb\"),\r\n        function (t, i) {\r\n          t.style.borderColor =\r\n            i === currentIndex\r\n              ? \"rgba(239,125,0,0.7)\" // active \u2013 amber\r\n              : \"rgba(35,35,35,0.10)\"; // inactive \u2013 primary-border\r\n        }\r\n      );\r\n    }\r\n  }\r\n\r\n  // \u2500\u2500 Close popup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  function closeAddonPopup() {\r\n    var popup = el(\"cart-addon-detail-popup\");\r\n    if (!popup) return;\r\n    popup.style.display = \"none\";\r\n    document.body.style.overflow = \"\";\r\n    currentImages = [];\r\n    currentIndex = 0;\r\n  }\r\n\r\n  // \u2500\u2500 Click delegation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  document.addEventListener(\"click\", function (e) {\r\n    // Open on image-button click\r\n    var trigger = e.target.closest(\".cart-addon-image-trigger\");\r\n    if (trigger) {\r\n      return;\r\n    }\r\n\r\n    // Prev arrow\r\n    if (e.target.closest(\"#cart-addon-popup-prev\")) {\r\n      goTo(currentIndex - 1);\r\n      return;\r\n    }\r\n\r\n    // Next arrow\r\n    if (e.target.closest(\"#cart-addon-popup-next\")) {\r\n      goTo(currentIndex + 1);\r\n      return;\r\n    }\r\n\r\n    // Close button\r\n    if (e.target.closest(\"#cart-addon-popup-close\")) {\r\n      closeAddonPopup();\r\n      return;\r\n    }\r\n\r\n    // Backdrop\r\n    var popup = el(\"cart-addon-detail-popup\");\r\n    if (\r\n      popup &&\r\n      (e.target === popup || e.target.id === \"cart-addon-popup-bg\")\r\n    ) {\r\n      closeAddonPopup();\r\n    }\r\n  });\r\n\r\n  // \u2500\u2500 Keyboard: Escape closes, \u2190 / \u2192 navigates \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  document.addEventListener(\"keydown\", function (e) {\r\n    var popup = el(\"cart-addon-detail-popup\");\r\n    if (!popup || popup.style.display === \"none\") return;\r\n\r\n    if (e.key === \"Escape\") {\r\n      closeAddonPopup();\r\n    }\r\n    if (e.key === \"ArrowLeft\") {\r\n      goTo(currentIndex - 1);\r\n    }\r\n    if (e.key === \"ArrowRight\") {\r\n      goTo(currentIndex + 1);\r\n    }\r\n  });\r\n})();\r\n/* ---- Delivery Countdown Banner ---- */\r\n(function () {\r\n  function initDeliveryCountdownBanner() {\r\n    try {\r\n      var bannerEl = document.getElementById(\"eq-delivery-countdown-banner\");\r\n      if (!bannerEl) return;\r\n\r\n      var enabled = bannerEl.getAttribute(\"data-enabled\") === \"true\";\r\n      if (!enabled) return;\r\n\r\n      var ukTodayStr = bannerEl.getAttribute(\"data-uk-today\");\r\n      var ukHour = parseInt(bannerEl.getAttribute(\"data-uk-hour\"), 10) || 0;\r\n      var ukMinute = parseInt(bannerEl.getAttribute(\"data-uk-minute\"), 10) || 0;\r\n      var ukSecond = parseInt(bannerEl.getAttribute(\"data-uk-second\"), 10) || 0;\r\n\r\n      if (!ukTodayStr) return;\r\n\r\n      var parts = ukTodayStr.split(\"-\").map(Number);\r\n      if (parts.length !== 3) return;\r\n\r\n      var serverNowDate = new Date(\r\n        parts[0],\r\n        parts[1] - 1,\r\n        parts[2],\r\n        ukHour,\r\n        ukMinute,\r\n        ukSecond\r\n      );\r\n      var timeOffset = serverNowDate.getTime() - Date.now();\r\n\r\n      var testMode = bannerEl.getAttribute(\"data-test-mode\") === \"true\";\r\n      var hideAfterCutoff =\r\n        bannerEl.getAttribute(\"data-hide-after-cutoff\") === \"true\";\r\n\r\n      var textBeforeCutoff =\r\n        bannerEl.getAttribute(\"data-text-before-cutoff\") ||\r\n        \"Order within {countdown} for same-week delivery on {delivery_day}\";\r\n      var textAfterCutoff =\r\n        bannerEl.getAttribute(\"data-text-after-cutoff\") ||\r\n        \"Same-week delivery window closed. Next available delivery is {delivery_day}\";\r\n\r\n      var rules = window.BinaeryRulesData || {\r\n        disabledWeekdays: [0, 1, 2, 6],\r\n        disabledDates: [],\r\n        disabledRanges: [],\r\n        cutoffMode: \"days\",\r\n        cutoffDays: 2,\r\n        cutoffTime: \"12:00\",\r\n      };\r\n\r\n      var isSameWeekDeliveryAllowed = rules.cutoffMode === \"days\";\r\n\r\n      function parseYMD(str) {\r\n        if (!str) return null;\r\n        var p = String(str).slice(0, 10).split(\"-\");\r\n        if (p.length !== 3) return null;\r\n        var y = parseInt(p[0], 10);\r\n        var m = parseInt(p[1], 10) - 1;\r\n        var d = parseInt(p[2], 10);\r\n        if (isNaN(y) || isNaN(m) || isNaN(d)) return null;\r\n        return new Date(y, m, d);\r\n      }\r\n\r\n      function toISO(date) {\r\n        var y = date.getFullYear();\r\n        var m = String(date.getMonth() + 1).padStart(2, \"0\");\r\n        var d = String(date.getDate()).padStart(2, \"0\");\r\n        return y + \"-\" + m + \"-\" + d;\r\n      }\r\n\r\n      function isDeliveryDayValid(date, rules) {\r\n        var y = date.getFullYear();\r\n        var m = String(date.getMonth() + 1).padStart(2, \"0\");\r\n        var d = String(date.getDate()).padStart(2, \"0\");\r\n        var iso = y + \"-\" + m + \"-\" + d;\r\n\r\n        if (iso < ukTodayStr) return false;\r\n\r\n        // If same-week delivery is not allowed, block any dates in the current week\r\n        if (rules.cutoffMode !== \"days\") {\r\n          var todayD = parseYMD(ukTodayStr);\r\n          if (todayD) {\r\n            var dow = todayD.getDay();\r\n            var daysUntilSunday = (7 - dow) % 7;\r\n            var cutoffSunday = new Date(\r\n              todayD.getFullYear(),\r\n              todayD.getMonth(),\r\n              todayD.getDate() + daysUntilSunday\r\n            );\r\n            var mondayAfterSunday = new Date(\r\n              cutoffSunday.getFullYear(),\r\n              cutoffSunday.getMonth(),\r\n              cutoffSunday.getDate() + 1\r\n            );\r\n            var minSelectableISO = toISO(mondayAfterSunday);\r\n            if (iso < minSelectableISO) {\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (\r\n          Array.isArray(rules.specialEnabledDates) &&\r\n          rules.specialEnabledDates.indexOf(iso) !== -1\r\n        ) {\r\n          return true;\r\n        }\r\n\r\n        var dow = date.getDay();\r\n        var disabledWeekdays = Array.isArray(rules.disabledWeekdays)\r\n          ? rules.disabledWeekdays\r\n          : [0, 1, 2, 6];\r\n        if (disabledWeekdays.indexOf(dow) !== -1) {\r\n          return false;\r\n        }\r\n\r\n        if (\r\n          Array.isArray(rules.disabledDates) &&\r\n          rules.disabledDates.indexOf(iso) !== -1\r\n        ) {\r\n          return false;\r\n        }\r\n\r\n        if (Array.isArray(rules.disabledRanges)) {\r\n          for (var i = 0; i < rules.disabledRanges.length; i++) {\r\n            var r = rules.disabledRanges[i];\r\n            if (r && r.start && r.end) {\r\n              if (iso >= r.start && iso <= r.end) {\r\n                return false;\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        return true;\r\n      }\r\n\r\n      var todayDate = new Date(serverNowDate);\r\n      var dayOfWeek = todayDate.getDay();\r\n      var diffToMonday =\r\n        todayDate.getDate() - dayOfWeek + (dayOfWeek === 0 ? -6 : 1);\r\n      var monday = new Date(\r\n        todayDate.getFullYear(),\r\n        todayDate.getMonth(),\r\n        diffToMonday\r\n      );\r\n\r\n      var validDeliveryDaysInCurrentWeek = [];\r\n      if (isSameWeekDeliveryAllowed) {\r\n        for (var i = 0; i < 7; i++) {\r\n          var d = new Date(\r\n            monday.getFullYear(),\r\n            monday.getMonth(),\r\n            monday.getDate() + i\r\n          );\r\n          if (isDeliveryDayValid(d, rules)) {\r\n            validDeliveryDaysInCurrentWeek.push(d);\r\n          }\r\n        }\r\n      }\r\n\r\n      var cutoffDays = parseInt(rules.cutoffDays, 10);\r\n      if (isNaN(cutoffDays)) cutoffDays = 2;\r\n\r\n      var cutoffTimeParts = String(rules.cutoffTime || \"12:00\").split(\":\");\r\n      var cutoffHour = parseInt(cutoffTimeParts[0], 10) || 0;\r\n      var cutoffMinute = parseInt(cutoffTimeParts[1], 10) || 0;\r\n\r\n      var targetCutoffDate = null;\r\n      var targetDeliveryDay = null;\r\n\r\n      var currentUKDate = new Date(Date.now() + timeOffset);\r\n\r\n      for (var i = 0; i < validDeliveryDaysInCurrentWeek.length; i++) {\r\n        var deliveryDay = validDeliveryDaysInCurrentWeek[i];\r\n        var cutoffDate = new Date(\r\n          deliveryDay.getFullYear(),\r\n          deliveryDay.getMonth(),\r\n          deliveryDay.getDate() - cutoffDays,\r\n          cutoffHour,\r\n          cutoffMinute,\r\n          0\r\n        );\r\n\r\n        if (currentUKDate < cutoffDate) {\r\n          targetCutoffDate = cutoffDate;\r\n          targetDeliveryDay = deliveryDay;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (testMode) {\r\n        var testCutoffDate = new Date(currentUKDate);\r\n        testCutoffDate.setDate(testCutoffDate.getDate() + 2);\r\n        testCutoffDate.setHours(15, 0, 0, 0);\r\n\r\n        targetCutoffDate = testCutoffDate;\r\n        targetDeliveryDay = new Date(testCutoffDate);\r\n        targetDeliveryDay.setDate(targetDeliveryDay.getDate() + cutoffDays);\r\n      }\r\n\r\n      var daysOfWeekNames = [\r\n        \"Sunday\",\r\n        \"Monday\",\r\n        \"Tuesday\",\r\n        \"Wednesday\",\r\n        \"Thursday\",\r\n        \"Friday\",\r\n        \"Saturday\",\r\n      ];\r\n      var monthsNames = [\r\n        \"January\",\r\n        \"February\",\r\n        \"March\",\r\n        \"April\",\r\n        \"May\",\r\n        \"June\",\r\n        \"July\",\r\n        \"August\",\r\n        \"September\",\r\n        \"October\",\r\n        \"November\",\r\n        \"December\",\r\n      ];\r\n\r\n      function getOrdinalSuffix(day) {\r\n        if (day > 3 && day < 21) return \"th\";\r\n        switch (day % 10) {\r\n          case 1:\r\n            return \"st\";\r\n          case 2:\r\n            return \"nd\";\r\n          case 3:\r\n            return \"rd\";\r\n          default:\r\n            return \"th\";\r\n        }\r\n      }\r\n\r\n      function formatDeliveryDate(date) {\r\n        var dayName = daysOfWeekNames[date.getDay()];\r\n        var monthName = monthsNames[date.getMonth()];\r\n        var dayNum = date.getDate();\r\n        return (\r\n          dayName + \", \" + monthName + \" \" + dayNum + getOrdinalSuffix(dayNum)\r\n        );\r\n      }\r\n\r\n      var nextAvailableDeliveryDay = null;\r\n\r\n      // Computed lazily (not just once at page load) so that if the cutoff time\r\n      // passes while the tab is left open without a refresh, the \"after cutoff\"\r\n      // message can still resolve a real date instead of falling back to the\r\n      // generic \"the next available slot\" text.\r\n      function computeNextAvailableDeliveryDay(fromDate) {\r\n        var searchStart = new Date(fromDate);\r\n        searchStart.setDate(searchStart.getDate() + 1);\r\n        for (var i = 0; i < 30; i++) {\r\n          var testDate = new Date(\r\n            searchStart.getFullYear(),\r\n            searchStart.getMonth(),\r\n            searchStart.getDate() + i\r\n          );\r\n          if (isDeliveryDayValid(testDate, rules)) {\r\n            var testCutoffDate = new Date(\r\n              testDate.getFullYear(),\r\n              testDate.getMonth(),\r\n              testDate.getDate() - cutoffDays,\r\n              cutoffHour,\r\n              cutoffMinute,\r\n              0\r\n            );\r\n            if (fromDate < testCutoffDate) {\r\n              return testDate;\r\n            }\r\n          }\r\n        }\r\n        return null;\r\n      }\r\n\r\n      function updateTimer() {\r\n        try {\r\n          var nowUK = new Date(Date.now() + timeOffset);\r\n\r\n          if (targetCutoffDate && nowUK < targetCutoffDate) {\r\n            var diffMs = targetCutoffDate.getTime() - nowUK.getTime();\r\n\r\n            var totalSec = Math.floor(diffMs / 1000);\r\n            var days = Math.floor(totalSec / 86400);\r\n            var hrs = Math.floor((totalSec % 86400) / 3600);\r\n            var mins = Math.floor((totalSec % 3600) / 60);\r\n            var secs = totalSec % 60;\r\n\r\n            var daysStr = String(days).padStart(2, \"0\");\r\n            var hrsStr = String(hrs).padStart(2, \"0\");\r\n            var minsStr = String(mins).padStart(2, \"0\");\r\n            var secsStr = String(secs).padStart(2, \"0\");\r\n\r\n            var countdownHTML =\r\n              '<span class=\"eq-delivery-countdown-timer-pill\" style=\"background-color: ' +\r\n              (bannerEl.getAttribute(\"data-timer-bg\") || \"#212121\") +\r\n              \"; color: \" +\r\n              (bannerEl.getAttribute(\"data-timer-text\") || \"#ffffff\") +\r\n              ';\">' +\r\n              daysStr +\r\n              '<span class=\"eq-delivery-countdown-timer-sep\">:</span>' +\r\n              hrsStr +\r\n              '<span class=\"eq-delivery-countdown-timer-sep\">:</span>' +\r\n              minsStr +\r\n              '<span class=\"eq-delivery-countdown-timer-sep\">:</span>' +\r\n              secsStr +\r\n              \"</span>\";\r\n\r\n            var formattedDelDay = formatDeliveryDate(targetDeliveryDay);\r\n\r\n            var fullText = textBeforeCutoff\r\n              .replace(\"{countdown}\", countdownHTML)\r\n              .replace(\r\n                \"{delivery_day}\",\r\n                \"<strong>\" + formattedDelDay + \"</strong>\"\r\n              );\r\n\r\n            bannerEl.innerHTML = \"<div><span>\" + fullText + \"</span></div>\";\r\n            bannerEl.style.display = \"flex\";\r\n          } else {\r\n            if (hideAfterCutoff) {\r\n              bannerEl.style.display = \"none\";\r\n            } else {\r\n              if (!nextAvailableDeliveryDay) {\r\n                nextAvailableDeliveryDay =\r\n                  computeNextAvailableDeliveryDay(nowUK);\r\n              }\r\n              var formattedNextDelDay = nextAvailableDeliveryDay\r\n                ? formatDeliveryDate(nextAvailableDeliveryDay)\r\n                : \"the next available slot\";\r\n              var fullText = textAfterCutoff.replace(\r\n                \"{delivery_day}\",\r\n                \"<strong>\" + formattedNextDelDay + \"</strong>\"\r\n              );\r\n\r\n              bannerEl.innerHTML = \"<div><span>\" + fullText + \"</span></div>\";\r\n              bannerEl.style.display = \"flex\";\r\n            }\r\n          }\r\n        } catch (timerErr) {\r\n          console.error(\"[DeliveryCountdown] Timer update error:\", timerErr);\r\n        }\r\n      }\r\n\r\n      updateTimer();\r\n      setInterval(updateTimer, 1000);\r\n    } catch (err) {\r\n      console.error(\"[DeliveryCountdown] Initialization error:\", err);\r\n    }\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initDeliveryCountdownBanner);\r\n  } else {\r\n    initDeliveryCountdownBanner();\r\n  }\r\n})();\r\n\r\n// \u2500\u2500 Skio Portal: Remove \"Order again\" button from DOM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n(function () {\r\n  function removeOrderAgainButtons() {\r\n    try {\r\n      // Re-evaluate current path per DOM mutation callback\r\n      if (window.location.pathname !== \"/a/account/orders\") return;\r\n\r\n      document\r\n        .querySelectorAll('button[aria-label=\"Order again\"]')\r\n        .forEach(function (btn) {\r\n          const wrapper = btn.parentElement;\r\n          if (wrapper && wrapper.children.length === 1) {\r\n            wrapper.remove();\r\n          } else {\r\n            btn.remove();\r\n          }\r\n        });\r\n    } catch (err) {\r\n      console.error('[OrderAgainCleanup] Error removing buttons:', err);\r\n    }\r\n  }\r\n\r\n  // Initial execution check\r\n  removeOrderAgainButtons();\r\n\r\n  // Attach observer to catch dynamically rendered buttons\r\n  const orderAgainObserver = new MutationObserver(removeOrderAgainButtons);\r\n  orderAgainObserver.observe(document.body, { childList: true, subtree: true });\r\n\r\n  // Deterministic cleanup handle\r\n  window._cleanupOrderAgainObserver = function () {\r\n    if (orderAgainObserver) orderAgainObserver.disconnect();\r\n  };\r\n})();\r\n"],
  "mappings": "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",
  "names": ["showReactivateLoading", "contentContainer", "modal", "parseYMD", "d", "toISO", "isDeliveryDayValid", "rules", "i", "getOrdinalSuffix", "formatDeliveryDate", "computeNextAvailableDeliveryDay", "testCutoffDate", "updateTimer"]
}
