{
  "version": 3,
  "sources": ["/cdn/shop/t/67/assets/eq-calendar-storefront.js"],
  "sourcesContent": ["/* ---- Binaery custom calendar core ---- */\r\n\r\n(function (global) {\r\n  if (global.BinaeryCalendar) return;\r\n\r\n  function pad(n) { return String(n).padStart(2, \"0\"); }\r\n\r\n  function toISO(d) {\r\n    return d.getFullYear() + \"-\" + pad(d.getMonth() + 1) + \"-\" + pad(d.getDate());\r\n  }\r\n\r\n  function isoToDDMMYYYY(iso) {\r\n    if (!iso) return \"\";\r\n    var p = String(iso).slice(0, 10).split(\"-\");\r\n    if (p.length !== 3) return \"\";\r\n    return pad(p[2]) + \".\" + pad(p[1]) + \".\" + p[0];\r\n  }\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 (!Number.isFinite(y) || !Number.isFinite(m) || !Number.isFinite(d)) return null;\r\n    return new Date(y, m, d);\r\n  }\r\n\r\n  function isCartPage() {\r\n    return global.location && global.location.pathname &&\r\n      global.location.pathname.indexOf(\"/cart\") === 0\r\n  }\r\n\r\n  function isCheckoutPage() {\r\n    return global.location && global.location.pathname &&\r\n      (global.location.pathname.indexOf(\"/checkouts/\") === 0 ||\r\n       global.location.pathname.indexOf(\"/checkout\") === 0)\r\n  }\r\n\r\n  function updateCartNote(value, retries) {\r\n    var noteValue = (value || \"\").trim();\r\n    retries = retries || 0;\r\n    var maxRetries = 3;\r\n    var retryDelay = 500; // Start with 500ms delay\r\n\r\n    return global.fetch(\"/cart/update.js\", {\r\n      method: \"POST\",\r\n      headers: {\r\n        \"Content-Type\": \"application/json\",\r\n        \"X-Requested-With\": \"XMLHttpRequest\"\r\n      },\r\n      credentials: \"same-origin\",\r\n      body: JSON.stringify({\r\n        note: noteValue,\r\n        attributes: {\r\n          delivery_date: noteValue,\r\n        }\r\n      })\r\n    })\r\n      .then(function (res) {\r\n        if (!res.ok) {\r\n          // Retry on 429 (rate limit) or 5xx errors\r\n          if (retries < maxRetries && (res.status === 429 || res.status >= 500)) {\r\n            var delay = retryDelay * Math.pow(2, retries); // Exponential backoff\r\n            console.warn(\"[BinaeryCalendar] Cart note update failed, retrying in \" + delay + \"ms (attempt \" + (retries + 1) + \"/\" + maxRetries + \")\");\r\n            return new Promise(function(resolve) {\r\n              setTimeout(function() {\r\n                resolve(updateCartNote(value, retries + 1));\r\n              }, delay);\r\n            });\r\n          }\r\n          throw new Error(\"Failed to update cart note: HTTP \" + res.status);\r\n        }\r\n        return res.json();\r\n      })\r\n      .then(function (data) {\r\n        // Verify the note was actually updated\r\n        if (data && data.note !== undefined) {\r\n          if (data.note !== noteValue) {\r\n            console.warn(\"[BinaeryCalendar] Cart note mismatch. Expected: '\" + noteValue + \"', Got: '\" + data.note + \"'\");\r\n            // Retry once more if note doesn't match\r\n            if (retries < maxRetries) {\r\n              var delay = retryDelay * Math.pow(2, retries);\r\n              return new Promise(function(resolve) {\r\n                setTimeout(function() {\r\n                  resolve(updateCartNote(value, retries + 1));\r\n                }, delay);\r\n              });\r\n            }\r\n          } else {\r\n            console.log(\"[BinaeryCalendar] Cart note updated successfully: \" + noteValue);\r\n          }\r\n        }\r\n        return data;\r\n      })\r\n      .catch(function (e) {\r\n        console.error(\"[BinaeryCalendar] Cart note update failed after \" + (retries + 1) + \" attempts:\", e);\r\n\r\n        // Show user-friendly error message\r\n        if (retries >= maxRetries) {\r\n          toast(\"Failed to save delivery date. Please try again or refresh the page.\");\r\n        }\r\n\r\n        // Re-throw to allow caller to handle\r\n        throw e;\r\n      });\r\n  }\r\n\r\n  function toast(msg) {\r\n    // TODO: replace with nice toast UI\r\n    alert(msg);\r\n  }\r\n\r\n  function validateSelectedDateOnServer(cfg, selectedISO) {\r\n    // Localized modification: validation is handled client side and rules come from Metafields.\r\n    return Promise.resolve(true);\r\n  }\r\n\r\n  function bindHiddenInputs(value) {\r\n    var propertyKey = \"Delivery date\";\r\n    var forms = Array.prototype.slice.call(\r\n      document.querySelectorAll(\"form[action*='/cart/add']\")\r\n    );\r\n\r\n    forms.forEach(function (form) {\r\n      var hidden = form.querySelector(\r\n        'input[name=\"properties[' + propertyKey + ']\"]'\r\n      );\r\n      if (!hidden) {\r\n        hidden = document.createElement(\"input\");\r\n        hidden.type = \"hidden\";\r\n        hidden.name = \"properties[\" + propertyKey + \"]\";\r\n        form.appendChild(hidden);\r\n      }\r\n      hidden.value = value || \"\";\r\n    });\r\n  }\r\n\r\n  function setSelectedDeliveryDate(iso) {\r\n    var cleanISO = (iso || \"\").trim();\r\n    var formatted = isoToDDMMYYYY(cleanISO);\r\n\r\n    //global.__BINAERY_DELIVERY_DATE_ISO__ = cleanISO;\r\n    //global.__BINAERY_DELIVERY_DATE__ = formatted;\r\n\r\n    if (isCartPage() || isCheckoutPage()) {\r\n      // Wait for cart to be ready before updating note\r\n      var updateNote = function() {\r\n        updateCartNote(formatted)\r\n          .then(() => {\r\n            //console.log(\"[BinaeryCalendar] Cart note updated successfully\");\r\n            global.__BINAERY_DELIVERY_DATE_ISO__ = cleanISO;\r\n            global.__BINAERY_DELIVERY_DATE__ = formatted;\r\n            bindHiddenInputs(global.__BINAERY_DELIVERY_DATE__);\r\n          })\r\n          .catch(function(e) {\r\n            // Error already logged and user notified in updateCartNote\r\n            // Store the date anyway so it can be added via line item properties\r\n            console.warn(\"[BinaeryCalendar] Note update failed, date will be added via line item properties\");\r\n          });\r\n      };\r\n\r\n      // Check if cart is loaded (some themes use cart.js or similar)\r\n      if (typeof global.cart !== \"undefined\" && global.cart && typeof global.cart.ready === \"function\") {\r\n        global.cart.ready(updateNote);\r\n      } else {\r\n        // Wait a bit for cart to initialize, then try\r\n        setTimeout(updateNote, 100);\r\n      }\r\n      return;\r\n    }\r\n  }\r\n\r\n  function ensureCartAddInterceptors() {\r\n    if (global.__BINAERY_CART_INTERCEPTORS__) return;\r\n    global.__BINAERY_CART_INTERCEPTORS__ = true;\r\n\r\n    function getDeliveryDate() {\r\n      return (global.__BINAERY_DELIVERY_DATE__ || \"\").trim();\r\n    }\r\n\r\n    function isCartAddUrl(url) {\r\n      try {\r\n        var u = new URL(url, global.location.origin);\r\n        return (\r\n          u.pathname === \"/cart/add\" ||\r\n          u.pathname === \"/cart/add.js\" ||\r\n          u.pathname.indexOf(\"/cart/add\") === 0\r\n        );\r\n      } catch (e) {\r\n        return typeof url === \"string\" && url.indexOf(\"/cart/add\") !== -1;\r\n      }\r\n    }\r\n\r\n    function ensurePropsInFormData(fd) {\r\n      var v = getDeliveryDate();\r\n      if (!v) return fd;\r\n\r\n      if (fd.has(\"properties[Delivery date]\")) return fd;\r\n\r\n      fd.append(\"properties[Delivery date]\", v);\r\n      return fd;\r\n    }\r\n\r\n    function ensurePropsInJsonBody(json) {\r\n      var v = getDeliveryDate();\r\n      if (!v) return json;\r\n\r\n      json = json || {};\r\n      json.properties = json.properties || {};\r\n\r\n      if (json.properties[\"Delivery date\"]) return json;\r\n\r\n      json.properties[\"Delivery date\"] = v;\r\n      return json;\r\n    }\r\n\r\n    var origFetch = global.fetch;\r\n    if (typeof origFetch === \"function\") {\r\n      global.fetch = function (input, init) {\r\n        try {\r\n          var url = typeof input === \"string\" ? input : (input && input.url) || \"\";\r\n          var method = (init && init.method) || \"GET\";\r\n          method = String(method || \"GET\").toUpperCase();\r\n\r\n          if (method === \"POST\" && isCartAddUrl(url) && init) {\r\n            var body = init.body;\r\n\r\n            if (body && typeof FormData !== \"undefined\" && body instanceof FormData) {\r\n              init.body = ensurePropsInFormData(body);\r\n            }\r\n            else if (body && typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams) {\r\n              var v = getDeliveryDate();\r\n              if (v && !body.has(\"properties[Delivery date]\")) {\r\n                body.append(\"properties[Delivery date]\", v);\r\n              }\r\n              init.body = body;\r\n            }\r\n\r\n            else if (typeof body === \"string\") {\r\n              var looksJson = body.trim().charAt(0) === \"{\";\r\n              if (looksJson) {\r\n                try {\r\n                  var parsed = JSON.parse(body);\r\n                  parsed = ensurePropsInJsonBody(parsed);\r\n                  init.body = JSON.stringify(parsed);\r\n\r\n                  init.headers = init.headers || {};\r\n                  if (!init.headers[\"Content-Type\"] && !init.headers[\"content-type\"]) {\r\n                    init.headers[\"Content-Type\"] = \"application/json\";\r\n                  }\r\n                } catch (e) {\r\n                  // ignore\r\n                }\r\n              }\r\n            }\r\n          }\r\n        } catch (e) {\r\n          // never break add-to-cart\r\n        }\r\n\r\n        return origFetch.call(this, input, init);\r\n      };\r\n    }\r\n\r\n    var OrigXHR = global.XMLHttpRequest;\r\n    if (OrigXHR) {\r\n\r\n      function PatchedXHR() {\r\n        var xhr = new OrigXHR();\r\n        var _open = xhr.open;\r\n        var _send = xhr.send;\r\n        var _url = \"\";\r\n        var _method = \"GET\";\r\n\r\n        xhr.open = function (method, url) {\r\n          _method = String(method || \"GET\").toUpperCase();\r\n          _url = url || \"\";\r\n          return _open.apply(xhr, arguments);\r\n        };\r\n\r\n        xhr.send = function (body) {\r\n          try {\r\n            if (_method === \"POST\" && isCartAddUrl(_url)) {\r\n              if (body && typeof FormData !== \"undefined\" && body instanceof FormData) {\r\n                body = ensurePropsInFormData(body);\r\n              } else if (typeof body === \"string\" && body.trim().charAt(0) === \"{\") {\r\n                try {\r\n                  var parsed = JSON.parse(body);\r\n                  parsed = ensurePropsInJsonBody(parsed);\r\n                  body = JSON.stringify(parsed);\r\n                } catch (e) {}\r\n              }\r\n            }\r\n          } catch (e) {}\r\n          return _send.call(xhr, body);\r\n        };\r\n\r\n        return xhr;\r\n      }\r\n\r\n      global.XMLHttpRequest = PatchedXHR;\r\n    }\r\n  }\r\n\r\n  ensureCartAddInterceptors();\r\n\r\n  function isDateDisabled(date, state) {\r\n    var iso = toISO(date);\r\n\r\n    // \u2500\u2500 Hard floor: past dates (and anything before minISO) are ALWAYS blocked.\r\n    // This check must come before specialEnabledDates so that no past date\r\n    // can ever be force-enabled, regardless of what is in specialEnabledDates.\r\n    if (state.minISO && iso < state.minISO) return true;\r\n    if (state.maxISO && iso > state.maxISO) return true;\r\n\r\n    // Special Enabled Dates bypass the weekday / specific-date / range rules below.\r\n    // They do NOT bypass the minISO/maxISO floor above.\r\n    if (state.specialEnabledDates && state.specialEnabledDates.indexOf(iso) !== -1) {\r\n      return false;\r\n    }\r\n\r\n    if (state.disabledWeekdays && state.disabledWeekdays.indexOf(date.getDay()) !== -1) {\r\n      return true;\r\n    }\r\n\r\n    if (state.disabledDates && state.disabledDates.indexOf(iso) !== -1) {\r\n      return true;\r\n    }\r\n\r\n    if (state.disabledRanges && state.disabledRanges.length) {\r\n      for (var i = 0; i < state.disabledRanges.length; i++) {\r\n        var r = state.disabledRanges[i];\r\n        if (!r || !r.start || !r.end) continue;\r\n        if (iso >= r.start && iso <= r.end) return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  function clampMonthToRange(date, state) {\r\n    var d = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n    if (state.minDate) {\r\n      var minMonth = new Date(state.minDate.getFullYear(), state.minDate.getMonth(), 1);\r\n      if (d < minMonth) return minMonth;\r\n    }\r\n\r\n    if (state.maxDate) {\r\n      var maxMonth = new Date(state.maxDate.getFullYear(), state.maxDate.getMonth(), 1);\r\n      if (d > maxMonth) return maxMonth;\r\n    }\r\n\r\n    return d;\r\n  }\r\n\r\n  function buildState(cfg, rules) {\r\n    var disabledWeekdays = Array.isArray(rules.disabledWeekdays)\r\n      ? rules.disabledWeekdays.slice()\r\n      : [];\r\n\r\n    var disabledDates = Array.isArray(rules.disabledDates)\r\n      ? rules.disabledDates.map(function (d) { return String(d).slice(0, 10); })\r\n      : [];\r\n\r\n    var specialEnabledDates = Array.isArray(rules.specialEnabledDates)\r\n      ? rules.specialEnabledDates.map(function (d) { return String(d).slice(0, 10); })\r\n      : [];\r\n\r\n    var disabledRanges = Array.isArray(rules.disabledRanges)\r\n      ? rules.disabledRanges\r\n          .map(function (r) {\r\n            if (!r) return null;\r\n            return {\r\n              start: String(r.start || \"\").slice(0, 10),\r\n              end: String(r.end || \"\").slice(0, 10),\r\n            };\r\n          })\r\n          .filter(function (r) { return r && r.start && r.end; })\r\n      : [];\r\n\r\n    var minISO = rules.minDate ? String(rules.minDate).slice(0, 10) : null;\r\n    var maxISO = rules.maxDate ? String(rules.maxDate).slice(0, 10) : null;\r\n\r\n    // \u2500\u2500 Cutoff / advance-days calculation \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    // All time values come from Liquid (UK / Europe/London timezone) so they\r\n    // are always correct regardless of the customer's device clock or locale.\r\n    //\r\n    // cutoffMode === \"days\":\r\n    //   minDate = today + cutoffDays.\r\n    //   If the current UK time has reached or passed cutoffTime, add one extra\r\n    //   day (the merchant's \"same-day cutoff\" rule).\r\n    //\r\n    // cutoffMode === \"none\":\r\n    //   Sunday is always the hard weekly cutoff boundary.\r\n    //   The minimum selectable date is always pushed to the Monday of the\r\n    //   following week (the day after the coming Sunday), ensuring customers\r\n    //   can never pick dates within the current week.\r\n    //   ukToday is enforced as an absolute floor so past dates are never selectable.\r\n\r\n    var ukToday  = window.ukToday  || null;  // \"YYYY-MM-DD\"\r\n    var ukHour   = window.ukHour   != null ? window.ukHour   : -1; // integer\r\n    var ukMinute = window.ukMinute != null ? window.ukMinute : -1; // integer\r\n\r\n    if (rules.cutoffMode === \"days\" && ukToday) {\r\n      var cutoffDays = parseInt(rules.cutoffDays, 10) || 0;\r\n\r\n      // Parse cutoffTime \u2014 expected format \"HH:MM\"\r\n      var cutoffTimeParts = String(rules.cutoffTime || \"00:00\").split(\":\");\r\n      var cutoffHour   = parseInt(cutoffTimeParts[0], 10) || 0;\r\n      var cutoffMinute = parseInt(cutoffTimeParts[1], 10) || 0;\r\n\r\n      // Has the daily cutoff time already passed right now in UK time?\r\n      var cutoffPassed = (ukHour > cutoffHour) ||\r\n                         (ukHour === cutoffHour && ukMinute >= cutoffMinute);\r\n\r\n      // If cutoff has passed, one extra day is required\r\n      var daysToAdd = cutoffPassed ? cutoffDays + 1 : cutoffDays;\r\n\r\n      // Calculate the effective minimum date: today + daysToAdd\r\n      var effectiveMinDate = parseYMD(ukToday);\r\n      effectiveMinDate.setDate(effectiveMinDate.getDate() + daysToAdd);\r\n      var effectiveMinISO = toISO(effectiveMinDate);\r\n\r\n      // Use the later of: the metafield's static minDate vs the computed cutoff\r\n      if (!minISO || minISO < effectiveMinISO) {\r\n        minISO = effectiveMinISO;\r\n      }\r\n    } else {\r\n      // cutoffMode === \"none\":\r\n      // The coming Sunday is always the hard cutoff boundary.\r\n      // If the customer is picking dates before that Sunday, the minimum\r\n      // selectable date is moved to the Monday after that Sunday (next week).\r\n      if (ukToday) {\r\n        // Always enforce today (or tomorrow for Skio Portal) as an absolute floor first.\r\n        var floorISO = ukToday;\r\n        if (rules.isSkioPortal) {\r\n          var todayDate = parseYMD(ukToday);\r\n          var tomorrowDate = new Date(todayDate.getFullYear(), todayDate.getMonth(), todayDate.getDate() + 1);\r\n          floorISO = toISO(tomorrowDate);\r\n        }\r\n\r\n        if (!minISO || minISO < floorISO) {\r\n          minISO = floorISO;\r\n        }\r\n\r\n        // In the Skio Portal, the customer is allowed to pick delivery dates within\r\n        // the current week (triggering immediate payment capture). Thus, the Sunday weekly cutoff is bypassed.\r\n        if (!rules.isSkioPortal) {\r\n          // Find the number of days until the next Sunday (day 0).\r\n          // If today IS Sunday (daysUntilSunday === 0), the cutoff is THIS Sunday,\r\n          // so the next available week starts tomorrow (Monday).\r\n          var todayDate = parseYMD(ukToday);\r\n          var todayDow = todayDate.getDay(); // 0 = Sun, 1 = Mon, \u2026 6 = Sat\r\n          var daysUntilSunday = (7 - todayDow) % 7; // 0 if today is Sun, 1\u20136 otherwise\r\n\r\n          // The cutoff Sunday (could be today if today is Sunday)\r\n          var cutoffSunday = new Date(todayDate.getFullYear(), todayDate.getMonth(), todayDate.getDate() + daysUntilSunday);\r\n\r\n          // The first selectable day is the Monday right after that Sunday\r\n          var mondayAfterSunday = new Date(cutoffSunday.getFullYear(), cutoffSunday.getMonth(), cutoffSunday.getDate() + 1);\r\n          var sundayCutoffMinISO = toISO(mondayAfterSunday);\r\n\r\n          // Use whichever is later: the already-computed minISO or the Sunday-derived floor\r\n          if (!minISO || minISO < sundayCutoffMinISO) {\r\n            minISO = sundayCutoffMinISO;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    var minDate = minISO ? parseYMD(minISO) : null;\r\n    var maxDate = maxISO ? parseYMD(maxISO) : null;\r\n\r\n    var today = new Date();\r\n    var initialMonth = today;\r\n\r\n    if (minDate && today < minDate) initialMonth = minDate;\r\n    if (maxDate && today > maxDate) initialMonth = maxDate;\r\n\r\n    var initialSelected = rules.currentDeliveryDate ? String(rules.currentDeliveryDate).slice(0, 10) : \"\";\r\n\r\n    if (!initialSelected && global.__BINAERY_DELIVERY_DATE_ISO__) {\r\n      initialSelected = String(global.__BINAERY_DELIVERY_DATE_ISO__).slice(0, 10);\r\n    }\r\n\r\n    return {\r\n      cfg: cfg,\r\n      specialEnabledDates: specialEnabledDates,\r\n      disabledWeekdays: disabledWeekdays,\r\n      disabledDates: disabledDates,\r\n      disabledRanges: disabledRanges,\r\n      minISO: minISO,\r\n      maxISO: maxISO,\r\n      minDate: minDate,\r\n      maxDate: maxDate,\r\n      selectedISO: initialSelected,\r\n      currentMonth: clampMonthToRange(initialMonth, { minDate: minDate, maxDate: maxDate }),\r\n    };\r\n  }\r\n\r\n  function renderCalendar(overlay, state) {\r\n    var host = overlay.querySelector(\"[data-binaery-role='calendar-host']\");\r\n    var monthLabel = overlay.querySelector(\"[data-binaery-role='month-label']\");\r\n    var weekdayRow = overlay.querySelector(\"[data-binaery-role='weekday-row']\");\r\n    var dayGrid = overlay.querySelector(\"[data-binaery-role='day-grid']\");\r\n    if (!host || !monthLabel || !weekdayRow || !dayGrid) return;\r\n\r\n    var monthNames = [\r\n      \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\r\n      \"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\r\n    ];\r\n\r\n    var weekdayNames = [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\r\n    var firstDay = state.cfg.firstDay || 1;\r\n\r\n    monthLabel.textContent =\r\n      monthNames[state.currentMonth.getMonth()] + \" \" + state.currentMonth.getFullYear();\r\n\r\n    var weekdayEls = weekdayRow.querySelectorAll(\".binaery-calendar-weekday\");\r\n    for (var i = 0; i < weekdayEls.length; i++) {\r\n      var idx = (firstDay + i) % 7;\r\n      weekdayEls[i].textContent = weekdayNames[idx];\r\n    }\r\n\r\n    var year = state.currentMonth.getFullYear();\r\n    var month = state.currentMonth.getMonth();\r\n    var firstOfMonth = new Date(year, month, 1);\r\n    var lastOfMonth = new Date(year, month + 1, 0);\r\n    var daysInMonth = lastOfMonth.getDate();\r\n\r\n    var firstDow = firstOfMonth.getDay();\r\n    var offset = (firstDow - firstDay + 7) % 7;\r\n\r\n    var today = new Date();\r\n    var todayISO = toISO(new Date(today.getFullYear(), today.getMonth(), today.getDate()));\r\n\r\n    var cells = dayGrid.querySelectorAll(\".binaery-calendar-cell\");\r\n    for (var c = 0; c < cells.length; c++) {\r\n      var cell = cells[c];\r\n\r\n      cell.textContent = \"\";\r\n      cell.disabled = false;\r\n      cell.dataset.date = \"\";\r\n      cell.classList.remove(\r\n        \"binaery-calendar-cell--empty\",\r\n        \"binaery-calendar-cell--disabled\",\r\n        \"binaery-calendar-cell--selected\",\r\n        \"binaery-calendar-cell--today\"\r\n      );\r\n      cell.onclick = null;\r\n\r\n      var dayNumber = c - offset + 1;\r\n\r\n      if (dayNumber < 1 || dayNumber > daysInMonth) {\r\n        cell.classList.add(\"binaery-calendar-cell--empty\");\r\n        continue;\r\n      }\r\n\r\n      var dateObj = new Date(year, month, dayNumber);\r\n      var iso = toISO(dateObj);\r\n\r\n      var disabled = isDateDisabled(dateObj, state);\r\n      var isSelected = state.selectedISO === iso;\r\n\r\n      cell.textContent = String(dayNumber);\r\n      cell.dataset.date = iso;\r\n\r\n      if (disabled) {\r\n        cell.disabled = true;\r\n        cell.classList.add(\"binaery-calendar-cell--disabled\");\r\n      } else {\r\n        if (isSelected) cell.classList.add(\"binaery-calendar-cell--selected\");\r\n\r\n        cell.onclick = (function (isoCopy) {\r\n          return function () {\r\n            state.selectedISO = isoCopy;\r\n            host.dataset.selectedIso = isoCopy;\r\n            renderCalendar(overlay, state);\r\n          };\r\n        })(iso);\r\n      }\r\n\r\n      if (iso === todayISO) {\r\n        cell.classList.add(\"binaery-calendar-cell--today\");\r\n      }\r\n    }\r\n  }\r\n\r\n  function attachHandlers(overlay, state) {\r\n    var prevBtn   = overlay.querySelector(\"[data-binaery-role='prev']\");\r\n    var nextBtn   = overlay.querySelector(\"[data-binaery-role='next']\");\r\n    var closeBtn  = overlay.querySelector(\"[data-binaery-role='close']\");\r\n    var cancelBtn = overlay.querySelector(\"[data-binaery-role='cancel']\");\r\n    var saveBtn   = overlay.querySelector(\"[data-binaery-role='save']\");\r\n    var host      = overlay.querySelector(\"[data-binaery-role='calendar-host']\");\r\n\r\n    function close() {\r\n      overlay.style.display = \"none\";\r\n      if (document.body.contains(overlay)) document.body.removeChild(overlay);\r\n    }\r\n\r\n    if (prevBtn) prevBtn.onclick = function () {\r\n      var prev = new Date(state.currentMonth.getFullYear(), state.currentMonth.getMonth() - 1, 1);\r\n      state.currentMonth = clampMonthToRange(prev, state);\r\n      renderCalendar(overlay, state);\r\n    };\r\n\r\n    if (nextBtn) nextBtn.onclick = function () {\r\n      var next = new Date(state.currentMonth.getFullYear(), state.currentMonth.getMonth() + 1, 1);\r\n      state.currentMonth = clampMonthToRange(next, state);\r\n      renderCalendar(overlay, state);\r\n    };\r\n\r\n    if (closeBtn) closeBtn.onclick = close;\r\n    if (cancelBtn) cancelBtn.onclick = close;\r\n\r\n    if (saveBtn) {\r\n      saveBtn.onclick = function () {\r\n        var selectedISO = host.dataset.selectedIso || state.selectedISO || \"\";\r\n        if (!selectedISO) {\r\n          toast(\"Please select a date.\");\r\n          return;\r\n        }\r\n\r\n        saveBtn.disabled = true;\r\n        validateSelectedDateOnServer(state.cfg, selectedISO)\r\n          .then(function (isValid) {\r\n            if (!isValid) {\r\n              toast(\"Selected date is no longer available. Please choose another date.\");\r\n              return;\r\n            }\r\n\r\n            global.BinaeryCalendar.setSelectedDeliveryDate(selectedISO);\r\n            close();\r\n          })\r\n          .catch(function () {\r\n            toast(\"Unable to validate selected date. Please try again.\");\r\n          })\r\n          .finally(function () {\r\n            saveBtn.disabled = false;\r\n          });\r\n      };\r\n    }\r\n\r\n    overlay.addEventListener(\"click\", function (e) {\r\n      if (e.target === overlay) close();\r\n    });\r\n  }\r\n\r\n  function initOverlay(overlay, cfg, rules) {\r\n    var state = buildState(cfg, rules || {});\r\n    renderCalendar(overlay, state);\r\n    attachHandlers(overlay, state);\r\n  }\r\n\r\n  global.BinaeryCalendar = {\r\n    initOverlay: initOverlay,\r\n    setSelectedDeliveryDate: setSelectedDeliveryDate,\r\n  };\r\n})(window);\r\n\r\n\r\n/* ---- Binaery storefront bootstrap ---- */\r\n(function () {\r\n  if (window.__BINAERY_STOREFRONT_LOADED__) return;\r\n  window.__BINAERY_STOREFRONT_LOADED__ = true;\r\n\r\n  var CALENDAR_HTML = `\r\n<div class=\"binaery-overlay\" data-binaery-role=\"overlay\">\r\n  <div class=\"binaery-modal\">\r\n    <button\r\n      type=\"button\"\r\n      class=\"binaery-modal-close\"\r\n      data-binaery-role=\"close\"\r\n      aria-label=\"Close\"\r\n    >\r\n      &times;\r\n    </button>\r\n    <div class=\"binaery-modal-body\">\r\n      <div\r\n        class=\"binaery-modal-calendar\"\r\n        data-binaery-role=\"calendar-host\"\r\n      >\r\n        <div class=\"binaery-calendar\">\r\n          <div class=\"binaery-calendar-header\">\r\n            <button\r\n              type=\"button\"\r\n              class=\"binaery-calendar-nav\"\r\n              data-binaery-role=\"prev\"\r\n            >\r\n              \u2039\r\n            </button>\r\n            <div\r\n              class=\"binaery-calendar-month\"\r\n              data-binaery-role=\"month-label\"\r\n            ></div>\r\n            <button\r\n              type=\"button\"\r\n              class=\"binaery-calendar-nav\"\r\n              data-binaery-role=\"next\"\r\n            >\r\n              \u203A\r\n            </button>\r\n          </div>\r\n          <div\r\n            class=\"binaery-calendar-weekdays\"\r\n            data-binaery-role=\"weekday-row\"\r\n          >\r\n            <div class=\"binaery-calendar-weekday\"></div>\r\n            <div class=\"binaery-calendar-weekday\"></div>\r\n            <div class=\"binaery-calendar-weekday\"></div>\r\n            <div class=\"binaery-calendar-weekday\"></div>\r\n            <div class=\"binaery-calendar-weekday\"></div>\r\n            <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            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"0\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"1\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"2\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"3\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"4\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"5\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"6\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"7\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"8\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"9\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"10\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"11\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"12\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"13\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"14\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"15\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"16\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"17\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"18\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"19\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"20\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"21\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"22\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"23\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"24\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"25\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"26\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"27\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"28\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"29\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"30\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"31\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"32\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"33\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"34\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"35\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"36\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"37\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"38\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"39\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"40\"></button>\r\n            <button type=\"button\" class=\"binaery-calendar-cell\" data-day-index=\"41\"></button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"binaery-modal-actions\">\r\n        <button\r\n          type=\"button\"\r\n          class=\"binaery-ddp-btn\"\r\n          data-binaery-role=\"cancel\"\r\n        >\r\n          Cancel\r\n        </button>\r\n        <button\r\n          type=\"button\"\r\n          class=\"binaery-ddp-btn binaery-ddp-btn--primary\"\r\n          data-binaery-role=\"save\"\r\n        >\r\n          Save date\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n`;\r\n\r\n  function readConfig() {\r\n    var el = document.getElementById(\"binaery-portal-config\");\r\n    if (!el) return null;\r\n\r\n    return {\r\n      firstDay: parseInt(\r\n        el.dataset.firstDay || el.dataset.first_day || \"1\",\r\n        10\r\n      )\r\n    };\r\n  }\r\n\r\n  async function loadRules(cfg) {\r\n    // Localized modification: read rules from Shopify Metafield globally injected object\r\n    if (window.BinaeryRulesData) {\r\n      return window.BinaeryRulesData;\r\n    }\r\n    \r\n    // Fallback if the Metafields are not setup\r\n    return {\r\n      \"disabledWeekdays\": [0, 1, 2, 6],\r\n      \"disabledDates\": [],\r\n      \"disabledRanges\": []\r\n    };\r\n  }\r\n\r\n  var templatePromise = null;\r\n  function loadTemplate() {\r\n    if (templatePromise) return templatePromise;\r\n    templatePromise = Promise.resolve().then(function () {\r\n        var wrap = document.createElement(\"div\");\r\n        wrap.innerHTML = CALENDAR_HTML.trim();\r\n        var overlay = wrap.querySelector(\"[data-binaery-role='overlay']\");\r\n        if (!overlay) throw new Error(\"Calendar template missing overlay root\");\r\n        return overlay;\r\n      });\r\n    return templatePromise;\r\n  }\r\n\r\n  function toast(msg) {\r\n    alert(msg);\r\n  }\r\n\r\n  function openCalendar(cfg) {\r\n    if (\r\n      !window.BinaeryCalendar ||\r\n      typeof window.BinaeryCalendar.initOverlay !== \"function\"\r\n    ) {\r\n      console.error(\"BinaeryCalendar.initOverlay not available\");\r\n      toast(\"Calendar script not loaded\");\r\n      return;\r\n    }\r\n\r\n    var overlayRef = null;\r\n\r\n    loadTemplate()\r\n      .then(function (overlayTpl) {\r\n        overlayRef = overlayTpl.cloneNode(true);\r\n        document.body.appendChild(overlayRef);\r\n        overlayRef.style.display = \"flex\";\r\n\r\n        var host = overlayRef.querySelector(\"[data-binaery-role='calendar-host']\");\r\n        if (host) {\r\n          var skeleton = document.createElement(\"div\");\r\n          skeleton.className = \"binaery-calendar-skeleton\";\r\n          skeleton.innerHTML =\r\n            '<div class=\"binaery-calendar-skeleton-inner\">' +\r\n            '<div class=\"binaery-calendar-skel-header\"></div>' +\r\n            '<div class=\"binaery-calendar-skel-rows\"></div>' +\r\n            \"</div>\";\r\n          host.appendChild(skeleton);\r\n          overlayRef.__binaerySkeleton = skeleton;\r\n        }\r\n\r\n        return loadRules(cfg);\r\n      })\r\n      .then(function (rules) {\r\n        if (!overlayRef) return;\r\n\r\n        var skel = overlayRef.__binaerySkeleton;\r\n        if (skel && skel.parentNode) {\r\n          skel.parentNode.removeChild(skel);\r\n        }\r\n\r\n        window.BinaeryCalendar.initOverlay(overlayRef, cfg, rules || {});\r\n      })\r\n      .catch(function (err) {\r\n        console.error(\"Failed to open calendar\", err);\r\n\r\n        if (overlayRef) {\r\n          var host = overlayRef.querySelector(\"[data-binaery-role='calendar-host']\");\r\n          if (host) {\r\n            host.innerHTML =\r\n              '<div class=\"binaery-calendar-error\">Unable to load calendar. Please try again.</div>';\r\n          }\r\n        } else {\r\n          toast(\"Unable to open calendar. Please try again.\");\r\n        }\r\n      });\r\n  }\r\n\r\n  function ensureTriggerButton(host, cfg) {\r\n    var btn =\r\n      host.querySelector(\"[data-binaery-role='trigger']\") ||\r\n      host.querySelector(\"button\");\r\n\r\n    if (cfg.auto) {\r\n      var keep = btn;\r\n      host.innerHTML = \"\";\r\n      if (keep) host.appendChild(keep);\r\n      btn = keep;\r\n    }\r\n\r\n    if (!btn) {\r\n      btn = document.createElement(\"button\");\r\n      btn.setAttribute(\"data-binaery-role\", \"trigger\");\r\n      host.appendChild(btn);\r\n    }\r\n\r\n    if (btn.tagName.toLowerCase() !== \"button\") {\r\n      var newBtn = document.createElement(\"button\");\r\n      newBtn.innerHTML = btn.innerHTML;\r\n      newBtn.setAttribute(\"data-binaery-role\", \"trigger\");\r\n\r\n      btn.parentNode.replaceChild(newBtn, btn);\r\n      btn = newBtn;\r\n    }\r\n\r\n    btn.type = \"button\";\r\n\r\n    if (!btn.className || !btn.className.trim()) {\r\n      btn.className = \"binaery-ddp-btn binaery-ddp-btn--primary\";\r\n    }\r\n\r\n    if (!btn.__binaeryBound) {\r\n      btn.__binaeryBound = true;\r\n      btn.addEventListener(\"click\", function (e) {\r\n        e.preventDefault();\r\n        openCalendar(cfg);\r\n      });\r\n    }\r\n\r\n    return btn;\r\n  }\r\n\r\n  function boot() {\r\n    var cfg = readConfig();\r\n    if (!cfg) return;\r\n\r\n    var host = document.getElementById(\"binaery-portal-config\");\r\n    if (!host) return;\r\n\r\n    ensureTriggerButton(host, cfg);\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", boot);\r\n  } else {\r\n    boot();\r\n  }\r\n})();\r\n"],
  "mappings": "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",
  "names": ["PatchedXHR"]
}
