{
  "version": 3,
  "sources": ["/cdn/shop/t/35/assets/wf-ld-cart-init.js?wf_fee_slot_map_guard=20260521"],
  "sourcesContent": ["/**\n * Custom Local Delivery - Cart orchestrator.\n * Fetches config from planners.dand3.com, validates postal, populates timeslots.\n */\n(function () {\n  'use strict';\n\n  function isFieldAssociatedWithForm(field, form) {\n    if (!field || !form) return false;\n    if (field.form && field.form === form) return true;\n    var formId = typeof form.getAttribute === 'function' ? form.getAttribute('id') : form.id;\n    if (formId && typeof field.getAttribute === 'function' && field.getAttribute('form') === formId) return true;\n    return !!(typeof form.contains === 'function' && form.contains(field));\n  }\n\n  function isKeyboardSubmitProneField(field, form) {\n    if (!field || !form || !isFieldAssociatedWithForm(field, form)) return false;\n    var tagName = String(field.tagName || '').toLowerCase();\n    if (tagName !== 'input') return false;\n    var type = String(field.type || 'text').toLowerCase();\n    return !(\n      type === 'hidden' ||\n      type === 'button' ||\n      type === 'submit' ||\n      type === 'reset' ||\n      type === 'checkbox' ||\n      type === 'radio' ||\n      type === 'file' ||\n      type === 'image'\n    );\n  }\n\n  function applyNonSubmittingEnterKeyHints(scope) {\n    if (!scope || typeof scope.querySelectorAll !== 'function') return;\n    var fields = scope.querySelectorAll(\n      'input[type=\"text\"], input[type=\"email\"], input[type=\"tel\"], input[type=\"search\"], input[type=\"url\"], input[type=\"number\"], input[type=\"date\"]'\n    );\n    for (var i = 0; i < fields.length; i++) {\n      if (!fields[i] || typeof fields[i].setAttribute !== 'function') continue;\n      if (!fields[i].getAttribute || !fields[i].getAttribute('enterkeyhint')) {\n        fields[i].setAttribute('enterkeyhint', 'next');\n      }\n    }\n  }\n\n  function bindCartFormKeyboardSubmitGuard(form, scope) {\n    if (!form || form.__wfLdKeyboardSubmitGuardBound) return;\n    form.__wfLdKeyboardSubmitGuardBound = true;\n\n    var keydownScope = scope && typeof scope.addEventListener === 'function' ? scope : form;\n    applyNonSubmittingEnterKeyHints(keydownScope);\n\n    keydownScope.addEventListener('keydown', function (event) {\n      if (!event || event.key !== 'Enter') return;\n      if (!isKeyboardSubmitProneField(event.target, form)) return;\n      event.preventDefault();\n    });\n\n    form.addEventListener('submit', function (event) {\n      if (!event) return;\n      if (event.submitter) return;\n      if (!isKeyboardSubmitProneField(document.activeElement, form)) return;\n      event.preventDefault();\n    });\n  }\n\n  function normalizeDeliveryPostal(value) {\n    return String(value || '').trim();\n  }\n\n  function getDeliveryPostalInput() {\n    return document.getElementById('wf-ld-recipient-postal');\n  }\n\n  function getDeliveryPostalCodeFromInput(input) {\n    return input ? normalizeDeliveryPostal(input.value) : '';\n  }\n\n  function isDeliveryAddressGateReady(code, opts) {\n    opts = opts || {};\n    return String(code || '').trim().length === 6 && !!opts.streetFilled && !!opts.postalValid;\n  }\n\n  function normalizeSlotMinute(value) {\n    if (value == null || value === '') return 0;\n    var parsed = Number(value);\n    return isFinite(parsed) ? parsed : 0;\n  }\n\n  function slotsShareTimeWindow(a, b) {\n    if (!a || !b) return false;\n    return Number(a.startHour) === Number(b.startHour) &&\n      normalizeSlotMinute(a.startMinute) === normalizeSlotMinute(b.startMinute) &&\n      Number(a.endHour) === Number(b.endHour) &&\n      normalizeSlotMinute(a.endMinute) === normalizeSlotMinute(b.endMinute);\n  }\n\n  function slotsShareAvailableDay(a, b) {\n    var aDays = a && Array.isArray(a.availableDays) ? a.availableDays : [];\n    var bDays = b && Array.isArray(b.availableDays) ? b.availableDays : [];\n    if (!aDays.length || !bDays.length) return true;\n    return aDays.some(function (day) { return bDays.indexOf(day) >= 0; });\n  }\n\n  function addPricingCandidate(candidates, slotId) {\n    var normalized = String(slotId || '').trim();\n    if (!normalized || candidates.indexOf(normalized) >= 0) return;\n    candidates.push(normalized);\n  }\n\n  function resolveMappedPricingTierId(pricing, slotId, slot, defaultSlots) {\n    if (!pricing || !pricing.slotTierMap) return '';\n    var candidates = [];\n    addPricingCandidate(candidates, slotId);\n    addPricingCandidate(candidates, slot && slot.pricingSlotId);\n    addPricingCandidate(candidates, slot && slot.sourceSlotId);\n\n    var dayMatches = [];\n    var timeMatches = [];\n    (defaultSlots || []).forEach(function (defaultSlot) {\n      if (!slotsShareTimeWindow(slot, defaultSlot)) return;\n      if (slotsShareAvailableDay(slot, defaultSlot)) dayMatches.push(defaultSlot);\n      else timeMatches.push(defaultSlot);\n    });\n\n    dayMatches.concat(timeMatches).forEach(function (defaultSlot) {\n      addPricingCandidate(candidates, defaultSlot && defaultSlot.id);\n    });\n\n    for (var i = 0; i < candidates.length; i++) {\n      var mappedTierId = pricing.slotTierMap[candidates[i]];\n      if (mappedTierId) return mappedTierId;\n    }\n    return '';\n  }\n\n  function createInitController(ctx) {\n    ctx = ctx || {};\n    var deps = ctx.deps || {};\n\n    var API = deps.API || window.WF_LD_API;\n    var DATE = deps.DATE || window.WF_LD_DATE_UTILS;\n    var POSTAL = deps.POSTAL || window.WF_LD_POSTAL_UTILS;\n    var SLOT = deps.SLOT || window.WF_LD_SLOT_UTILS;\n    var STORAGE = deps.STORAGE || window.WF_LD_STORAGE;\n    var EXPRESS = deps.EXPRESS || window.WF_LD_EXPRESS_CART;\n    var PICKER = deps.PICKER || window.WF_LD_DATE_PICKER;\n    var ADDRESS_AC = deps.ADDRESS_AC || window.WF_LD_ADDRESS_AC;\n    var DOMAIN = deps.DOMAIN || window.WF_LD_CART_DOMAIN;\n    var TIMESLOTS = deps.TIMESLOTS || window.WF_LD_CART_TIMESLOTS;\n    var CHECKOUT = deps.CHECKOUT || window.WF_LD_CART_CHECKOUT;\n    var VALIDATION = deps.VALIDATION || window.WF_LD_CART_VALIDATION;\n    var CHECKOUT_FLOW = deps.CHECKOUT_FLOW || window.WF_LD_CART_CHECKOUT_FLOW;\n    var UI = deps.UI || window.WF_LD_CART_UI;\n    var SAVED = deps.SAVED || window.WF_LD_SAVED_ADDRESSES;\n\n    if (!API || !DATE || !POSTAL || !SLOT || !STORAGE || !EXPRESS || !DOMAIN || !TIMESLOTS || !CHECKOUT || !VALIDATION || !CHECKOUT_FLOW || !UI) {\n      console.warn('[wf-ld-init] Missing modules');\n      return {\n        init: function () {},\n        startMixedCartObservers: function () {},\n        disposeMixedCartObservers: function () {},\n      };\n    }\n\n  var config = null;\n  var activeTimeslotType = 'standard'; // 'standard' | 'express'\n  var seasonalData = null; // { variantWindows: Record<string, [{startDate,endDate,name?,productTitle?}]> }\n  var seasonalDataPromise = null;\n  var seasonalCheckPending = false;\n  var seasonalConflictMessages = [];\n  var datePicker = null;\n  var dateSelected = false;\n  var matchedOccasion = null; // set when cart has an occasion product\n  var cartProductIds = [];\n  var cartVariantIds = [];\n  var advanceBookingRulesResolved = [];\n  var activeAdvanceLeadDays = 0;\n  var mixedCartObserver = null;\n  var mixedCartVisibilityHandler = null;\n  var expressSelectionError = '';\n  var bootstrapInitGeneration = 0;\n  var formInitGeneration = 0;\n  var timeslotController = null;\n  var validationController = null;\n  var checkoutFlowController = null;\n  var uiController = null;\n  // Controller-scoped handle to the current form session's disposer. The\n  // per-node disposer stored on wrap.__wfLdV2Dispose is lost when a silent cart\n  // refresh replaces #wf-ld-custom with a freshly-rendered node, so we also keep\n  // it here to guarantee the prior session (and its now-detached UI controller)\n  // is torn down before re-init. See disposeFormSession use in initForm.\n  var activeFormDispose = null;\n  var savedAddressController = null;\n  var recipientAutocompleteApplying = false;\n  var addressConsistencyTimer = null;\n  var localPublicConfigResult = null;\n  var cartFormTrackingState = {\n    started: false,\n    identifiedEmail: '',\n  };\n\n  function getEl(id) { return document.getElementById(id); }\n\n  function getCurrentTrackingDeliveryMethod() {\n    var methodDelivery = getEl('wf-ld-method-delivery');\n    if (activeTimeslotType === 'express') return 'Express';\n    return (methodDelivery && methodDelivery.checked) ? 'Delivery' : 'Collection';\n  }\n\n  function buildCartFormTrackingMeta() {\n    return {\n      deliveryMethod: getCurrentTrackingDeliveryMethod(),\n      senderEmail: getFormVal('sender_email'),\n    };\n  }\n\n  function trackCartFormProgress() {\n    if (!API || typeof API.reportCartFormInteraction !== 'function') return;\n    var hasSignal = Boolean(\n      getFormVal('recipient_first_name') ||\n      getFormVal('recipient_last_name') ||\n      getFormVal('recipient_address1') ||\n      getFormVal('recipient_postal') ||\n      getFormVal('sender_first_name') ||\n      getFormVal('sender_last_name') ||\n      getFormVal('sender_email') ||\n      getFormVal('sender_phone') ||\n      getSelectedDateIso() ||\n      getActiveTimeslotValue()\n    );\n    if (hasSignal && !cartFormTrackingState.started) {\n      cartFormTrackingState.started = true;\n      API.reportCartFormInteraction('form_started', buildCartFormTrackingMeta());\n    }\n\n    var senderEmail = String(getFormVal('sender_email') || '').trim().toLowerCase();\n    if (senderEmail && cartFormTrackingState.identifiedEmail !== senderEmail) {\n      cartFormTrackingState.identifiedEmail = senderEmail;\n      API.reportCartFormInteraction('identified', buildCartFormTrackingMeta());\n    }\n  }\n\n  function normalizeShopifyNumericId(value) {\n    return DOMAIN.normalizeShopifyNumericId(value);\n  }\n\n  function uniqueCartProductIds(cart) {\n    return DOMAIN.uniqueCartProductIds(cart);\n  }\n\n  function uniqueCartVariantIds(cart) {\n    var items = (cart && cart.items) || [];\n    var seen = {};\n    var ids = [];\n    for (var i = 0; i < items.length; i++) {\n      var normalized = normalizeShopifyNumericId(items[i] && items[i].variant_id);\n      if (!normalized || seen[normalized]) continue;\n      seen[normalized] = true;\n      ids.push(normalized);\n    }\n    return ids;\n  }\n\n  function getSeasonalWindowsForVariantId(variantId) {\n    if (!seasonalData) return null;\n    var normalized = normalizeShopifyNumericId(variantId);\n    if (!normalized) return null;\n    if (seasonalData[normalized]) return seasonalData[normalized];\n\n    var prefixedNumeric = 'shopify-variant-' + normalized;\n    if (seasonalData[prefixedNumeric]) return seasonalData[prefixedNumeric];\n\n    var prefixedGid = 'shopify-variant-gid://shopify/ProductVariant/' + normalized;\n    if (seasonalData[prefixedGid]) return seasonalData[prefixedGid];\n\n    var gid = 'gid://shopify/ProductVariant/' + normalized;\n    if (seasonalData[gid]) return seasonalData[gid];\n\n    var keys = Object.keys(seasonalData);\n    for (var i = 0; i < keys.length; i++) {\n      if (normalizeShopifyNumericId(keys[i]) === normalized) return seasonalData[keys[i]];\n    }\n    return null;\n  }\n\n  function isDateAllowedForSeasonalCart(dateIso) {\n    if (!dateIso || !seasonalData || !cartVariantIds.length) return true;\n    for (var i = 0; i < cartVariantIds.length; i++) {\n      var windows = getSeasonalWindowsForVariantId(cartVariantIds[i]);\n      if (!windows || !windows.length) continue;\n      var withinAny = windows.some(function (window) {\n        return dateIso >= window.startDate && dateIso <= window.endDate;\n      });\n      if (!withinAny) return false;\n    }\n    return true;\n  }\n\n  function collectExpressTierVariantIdsFromConfig(cfg) {\n    if (!cfg || !cfg.express_pricing || typeof cfg.express_pricing !== 'object') return [];\n    var tiers = Array.isArray(cfg.express_pricing.tiers) ? cfg.express_pricing.tiers : [];\n    var seen = {};\n    var ids = [];\n    tiers.forEach(function (tier) {\n      if (!tier || tier.active === false) return;\n      var id = String(tier.variantId || '').trim();\n      if (!id || seen[id]) return;\n      seen[id] = true;\n      ids.push(id);\n    });\n    return ids;\n  }\n\n  function formatExpressAmount(amount) {\n    if (amount == null || !isFinite(amount)) return null;\n    var rounded = Math.round(Number(amount) * 100) / 100;\n    if (Math.abs(rounded - Math.round(rounded)) < 0.0001) return String(Math.round(rounded));\n    return rounded.toFixed(2).replace(/\\.00$/, '');\n  }\n\n  function getExpressPricingConfig() {\n    if (!config || !config.express_pricing || typeof config.express_pricing !== 'object') return null;\n    var tiers = Array.isArray(config.express_pricing.tiers) ? config.express_pricing.tiers : [];\n    var slotTierMap = config.express_pricing.slotTierMap && typeof config.express_pricing.slotTierMap === 'object'\n      ? config.express_pricing.slotTierMap\n      : {};\n    var defaultTierId = config.express_pricing.defaultTierId || '';\n    return { tiers: tiers, slotTierMap: slotTierMap, defaultTierId: defaultTierId };\n  }\n\n  function getDeliveryPricingConfig() {\n    if (!config || !config.delivery_pricing || typeof config.delivery_pricing !== 'object') return null;\n    var tiers = Array.isArray(config.delivery_pricing.tiers) ? config.delivery_pricing.tiers : [];\n    var slotTierMap = config.delivery_pricing.slotTierMap && typeof config.delivery_pricing.slotTierMap === 'object'\n      ? config.delivery_pricing.slotTierMap\n      : {};\n    var defaultTierId = config.delivery_pricing.defaultTierId || '';\n    return { tiers: tiers, slotTierMap: slotTierMap, defaultTierId: defaultTierId };\n  }\n\n  function getExpressSlotPricingMeta(slotId, slot) {\n    var pricing = getExpressPricingConfig();\n    if (!pricing) {\n      return {\n        tierId: '',\n        variantId: '',\n        amount: null,\n      };\n    }\n\n    var tierId = resolveMappedPricingTierId(\n      pricing,\n      slotId,\n      slot,\n      config && Array.isArray(config.express_timeslots) ? config.express_timeslots : []\n    );\n    var tier = null;\n    if (tierId) {\n      tier = pricing.tiers.find(function (t) {\n        return t && t.id === tierId && t.active !== false;\n      }) || null;\n    }\n    var variantId = tier && tier.variantId ? String(tier.variantId) : '';\n    var amount = tier && isFinite(Number(tier.amount)) ? Number(tier.amount) : null;\n    return {\n      tierId: tier ? tier.id : '',\n      variantId: variantId || '',\n      amount: amount,\n    };\n  }\n\n  function getSelectedExpressSlotMeta() {\n    var expSelect = getEl('wf-ld-express-timeslot');\n    if (!expSelect || expSelect.selectedIndex < 0) return null;\n    var opt = expSelect.options[expSelect.selectedIndex];\n    if (!opt || !opt.value) return null;\n    var amountAttr = opt.getAttribute('data-amount');\n    var parsedAmount = amountAttr != null && amountAttr !== '' ? Number(amountAttr) : null;\n    if (parsedAmount != null && !isFinite(parsedAmount)) parsedAmount = null;\n    return {\n      slotId: opt.getAttribute('data-slot-id') || '',\n      tierId: opt.getAttribute('data-tier-id') || '',\n      rawLabel: opt.getAttribute('data-raw-label') || opt.value || '',\n      amount: parsedAmount,\n      variantId: opt.getAttribute('data-variant-id') || '',\n    };\n  }\n\n  function getSelectedStandardSlotMeta() {\n    var stdSelect = getEl('wf-ld-timeslot');\n    if (!stdSelect || stdSelect.selectedIndex < 0) return null;\n    var opt = stdSelect.options[stdSelect.selectedIndex];\n    if (!opt || !opt.value) return null;\n    var amountAttr = opt.getAttribute('data-amount');\n    var parsedAmount = amountAttr != null && amountAttr !== '' ? Number(amountAttr) : null;\n    if (parsedAmount != null && !isFinite(parsedAmount)) parsedAmount = null;\n    return {\n      slotId: opt.getAttribute('data-slot-id') || '',\n      tierId: opt.getAttribute('data-tier-id') || '',\n      rawLabel: opt.getAttribute('data-raw-label') || opt.value || '',\n      amount: parsedAmount,\n      variantId: opt.getAttribute('data-variant-id') || '',\n      feeLabel: opt.getAttribute('data-fee-label') || 'Delivery Fee',\n    };\n  }\n\n  function getStandardSlotPricingMeta(slotId, slot) {\n    var pricing = getDeliveryPricingConfig();\n    if (!pricing) return { tierId: '', variantId: '', amount: null, hasTierRule: false };\n    var tierId = resolveMappedPricingTierId(\n      pricing,\n      slotId,\n      slot,\n      config && Array.isArray(config.timeslots) ? config.timeslots : []\n    );\n    if (!tierId) return { tierId: '', variantId: '', amount: null, hasTierRule: false };\n    var tier = pricing.tiers.find(function (t) {\n      return t && t.id === tierId && t.active !== false;\n    }) || null;\n    var variantId = tier && tier.variantId ? String(tier.variantId) : '';\n    var amount = tier && isFinite(Number(tier.amount)) ? Number(tier.amount) : null;\n    return {\n      tierId: tier ? tier.id : tierId,\n      variantId: variantId,\n      amount: amount,\n      hasTierRule: true,\n      feeLabel: tier && tier.label ? String(tier.label) : 'Delivery Fee',\n    };\n  }\n\n  function getActiveTimeslotMeta() {\n    if (activeTimeslotType === 'express') return getSelectedExpressSlotMeta();\n    return getSelectedStandardSlotMeta();\n  }\n\n  function setDeliveryFeeRow(label, amount) {\n    if (EXPRESS && typeof EXPRESS.setFeeCharge === 'function') {\n      EXPRESS.setFeeCharge(label || 'Delivery Fee', amount);\n      return;\n    }\n    var row = getEl('wf-express-charge-row');\n    if (!row) return;\n    var labelEl = getEl('wf-delivery-fee-label');\n    if (labelEl) labelEl.textContent = label || 'Delivery Fee';\n    var moneyEl = row.querySelector('.money');\n    if (!moneyEl) return;\n    if (amount == null || !isFinite(amount)) {\n      moneyEl.textContent = '$0.00';\n      return;\n    }\n    moneyEl.textContent = '$' + Number(amount).toFixed(2);\n  }\n\n  function updateExpressCardLabel() {\n    var labelEl = getEl('wf-ld-express-label');\n    if (!labelEl) return;\n    if (activeTimeslotType !== 'express') {\n      labelEl.textContent = 'Express';\n      return;\n    }\n    var meta = getSelectedExpressSlotMeta();\n    var amountLabel = meta && meta.amount != null ? formatExpressAmount(meta.amount) : null;\n    labelEl.textContent = amountLabel ? ('Express (+$' + amountLabel + ')') : 'Express';\n  }\n\n  function updateStandardCardLabel() {\n    var labelEl = getEl('wf-ld-standard-label');\n    if (!labelEl) return;\n    if (activeTimeslotType !== 'standard') {\n      labelEl.textContent = 'Standard';\n      return;\n    }\n    var meta = getSelectedStandardSlotMeta();\n    var amountLabel = meta && meta.amount != null ? formatExpressAmount(meta.amount) : null;\n    labelEl.textContent = amountLabel ? ('Standard (+$' + amountLabel + ')') : 'Standard';\n  }\n\n  function getCartAttributeField(attrName) {\n    var name = 'attributes[' + attrName + ']';\n    var form = document.getElementById('cart_form');\n    if (form) {\n      var hiddenInForm = form.querySelector('input[type=\"hidden\"][name=\"' + name + '\"]');\n      if (hiddenInForm) return hiddenInForm;\n      var inForm = form.querySelector('[name=\"' + name + '\"]');\n      if (inForm) return inForm;\n    }\n    if (typeof document.querySelector !== 'function') return null;\n    var hiddenDetached = document.querySelector('[form=\"cart_form\"][type=\"hidden\"][name=\"' + name + '\"]');\n    if (hiddenDetached) return hiddenDetached;\n    return document.querySelector('[form=\"cart_form\"][name=\"' + name + '\"]');\n  }\n\n  function getFormVal(attrName) {\n    var inp = getCartAttributeField(attrName);\n    return inp ? inp.value : '';\n  }\n\n  function getInputValById(id) {\n    var el = getEl(id);\n    return el && typeof el.value === 'string' ? el.value.trim() : '';\n  }\n\n  function applyCollectionRecipientFallback(recipient, sender) {\n    if (!recipient) recipient = {};\n    if (!sender) sender = {};\n\n    var collectionName = getInputValById('wf-ld-collection-name');\n    var collectionAddress1 = getInputValById('wf-ld-collection-address1');\n    var collectionAddress2 = getInputValById('wf-ld-collection-address2');\n    var collectionPostal = getInputValById('wf-ld-collection-postal');\n    var collectionPhone = getInputValById('wf-ld-collection-phone');\n\n    if (!recipient.firstName) recipient.firstName = collectionName || sender.firstName || 'Self';\n    if (!recipient.lastName) recipient.lastName = sender.lastName || 'Collection';\n    if (!recipient.phone) recipient.phone = collectionPhone || sender.phone || '';\n    if (!recipient.address1) recipient.address1 = collectionAddress1 || '';\n    if (!recipient.address2) recipient.address2 = collectionAddress2 || '';\n    if (!recipient.postal) recipient.postal = collectionPostal || '';\n\n    return recipient;\n  }\n\n  function getPhoneWithCode(inputId, codeId) {\n    var code = getEl(codeId);\n    var inp = getEl(inputId);\n    var prefix = code ? code.value : '+65';\n    var raw = inp ? inp.value.trim() : '';\n    var num = raw.replace(/\\D/g, '');\n    if (!num) return '';\n    if (raw.charAt(0) === '+') return '+' + num;\n    return prefix + num;\n  }\n\n  function setPhoneWithCode(inputId, codeId, fullVal) {\n    var code = getEl(codeId);\n    var inp = getEl(inputId);\n    if (fullVal == null) return;\n    var raw = String(fullVal).trim();\n    if (!raw) {\n      if (inp) inp.value = '';\n      return;\n    }\n    if (raw.charAt(0) === '+' && code) {\n      var prefix = '';\n      var num = '';\n      var opts = code.options;\n      for (var i = 0; i < opts.length; i++) {\n        var optionValue = opts[i].value || '';\n        if (optionValue && raw.indexOf(optionValue) === 0 && optionValue.length > prefix.length) {\n          prefix = optionValue;\n          code.selectedIndex = i;\n        }\n      }\n      if (prefix) {\n        num = raw.slice(prefix.length).replace(/\\D/g, '');\n        if (inp) inp.value = num;\n        return;\n      }\n    }\n    if (inp) inp.value = raw;\n  }\n\n  function syncPhoneHidden() {\n    var rFull = getEl('wf-ld-recipient-phone-full');\n    if (rFull) rFull.value = getPhoneWithCode('wf-ld-recipient-phone', 'wf-ld-recipient-phone-code');\n    var sFull = getEl('wf-ld-sender-phone-full');\n    if (sFull) sFull.value = getPhoneWithCode('wf-ld-sender-phone', 'wf-ld-sender-phone-code');\n  }\n\n  function getActiveTimeslotValue() {\n    var slotMeta = getActiveTimeslotMeta();\n    return slotMeta ? (slotMeta.rawLabel || '') : '';\n  }\n\n  function getActiveTimeslotId() {\n    var slotMeta = getActiveTimeslotMeta();\n    return slotMeta ? (slotMeta.slotId || '') : '';\n  }\n\n  function getSelectedDateIso() {\n    var dateEl = getEl('wf-ld-date');\n    if (!dateEl) return '';\n    var fromData = dateEl.getAttribute('data-value') || '';\n    if (/^\\d{4}-\\d{2}-\\d{2}$/.test(fromData)) return fromData;\n    var fromValue = dateEl.value || '';\n    if (/^\\d{4}-\\d{2}-\\d{2}$/.test(fromValue)) return fromValue;\n    if (/^\\d{2}\\/\\d{2}\\/\\d{4}$/.test(fromValue)) {\n      var dmy = fromValue.split('/');\n      return dmy[2] + '-' + dmy[1] + '-' + dmy[0];\n    }\n    return '';\n  }\n\n  function getDateBounds() {\n    return DOMAIN.getDateBounds({\n      matchedOccasion: matchedOccasion,\n      activeAdvanceLeadDays: activeAdvanceLeadDays,\n      config: config,\n      DATE: DATE,\n    });\n  }\n\n  function isDateWithinBounds(dateIso) {\n    return DOMAIN.isDateWithinBounds(dateIso, getDateBounds());\n  }\n\n  function isDateAllowed(dateIso) {\n    return DOMAIN.isDateAllowed(dateIso, getDateBounds(), isBlackoutDate) && isDateAllowedForSeasonalCart(dateIso);\n  }\n\n  function isSelectedTimeslotValid() {\n    var slotVal = getActiveTimeslotValue();\n    if (!slotVal) return false;\n    var selectEl = activeTimeslotType === 'express'\n      ? getEl('wf-ld-express-timeslot')\n      : getEl('wf-ld-timeslot');\n    if (!selectEl) return false;\n    for (var i = 0; i < selectEl.options.length; i++) {\n      var opt = selectEl.options[i];\n      if (opt.value === slotVal) return !opt.disabled;\n    }\n    return false;\n  }\n\n  function getResolvedSlotsForActiveMode(dateIso) {\n    if (!config || !dateIso) return [];\n    var isCollection = !!(getEl('wf-ld-method-collection') && getEl('wf-ld-method-collection').checked);\n    var mode = isCollection ? 'collection' : (activeTimeslotType === 'express' ? 'express' : 'delivery');\n    var baseSlots = mode === 'collection'\n      ? (config.collection_timeslots || [])\n      : (mode === 'express' ? (config.express_timeslots || []) : (config.timeslots || []));\n    return SLOT.resolveSlotsForDate(baseSlots, dateIso, config.override_days || [], mode);\n  }\n\n  function getActiveSlotConfig(dateIso) {\n    var iso = dateIso || getSelectedDateIso();\n    if (!iso) return null;\n    var slotId = getActiveTimeslotId();\n    var slotLabel = getActiveTimeslotValue();\n    var slots = getResolvedSlotsForActiveMode(iso);\n    if (!slots || slots.length === 0) return null;\n\n    if (slotId) {\n      for (var i = 0; i < slots.length; i++) {\n        if (String(slots[i].id || '') === String(slotId)) return slots[i];\n      }\n    }\n    if (slotLabel) {\n      var normalized = String(slotLabel).trim();\n      for (var j = 0; j < slots.length; j++) {\n        if (String(deriveSlotLabel(slots[j])).trim() === normalized) return slots[j];\n      }\n    }\n    return null;\n  }\n\n  function isActiveSlotPastCutoff(dateIso) {\n    var iso = dateIso || getSelectedDateIso();\n    var slot = getActiveSlotConfig(iso);\n    if (!iso || !slot) return false;\n    return !!DATE.isPastCutoff(slot, iso);\n  }\n\n  function updateAttributes() {\n    var form = document.getElementById('cart_form');\n    if (!form) return;\n    var method = (getEl('wf-ld-method-delivery') && getEl('wf-ld-method-delivery').checked) ? 'Delivery' : 'Collection';\n    var dateIso = getSelectedDateIso();\n    var slotMeta = getActiveTimeslotMeta();\n    var slotLabel = slotMeta ? (slotMeta.rawLabel || '') : '';\n    var slotId = slotMeta ? (slotMeta.slotId || '') : '';\n    var isExpress = activeTimeslotType === 'express';\n    var postal = getDeliveryPostalCodeFromInput(getDeliveryPostalInput());\n    var timeVal = dateIso && slotLabel ? dateIso + ' ' + slotLabel : '';\n\n    function setAttr(name, val) {\n      var inp = getCartAttributeField(name);\n      if (inp) inp.value = val;\n    }\n    function getAttr(name) {\n      return getFormVal(name);\n    }\n    setAttr('Delivery Method', isExpress ? 'Express' : method);\n    setAttr('Local Delivery Date and Time', timeVal); // always set for downstream (notifications, messageCard, email)\n    if (method === 'Collection') {\n      setAttr('Collection Date and Time', timeVal); // also set for display (avoids \"Delivery\" wording in Admin)\n    } else {\n      setAttr('Collection Date and Time', '');\n    }\n    setAttr('Delivery Area', method === 'Collection' ? '' : (postal || ''));\n    setAttr('delivery_date', method === 'Collection' ? '' : (dateIso || ''));\n    setAttr('delivery_timeslot', method === 'Collection' ? '' : (slotLabel || ''));\n    setAttr('collection_date', method === 'Collection' ? (dateIso || '') : '');\n    setAttr('collection_timeslot', method === 'Collection' ? (slotLabel || '') : '');\n    setAttr('delivery_slot_id', slotId || '');\n\n    // Anonymous sender\n    var anonCb = getEl('wf-ld-anonymous');\n    setAttr('sender_anonymous', (anonCb && anonCb.checked) ? 'Yes' : '');\n\n    syncPhoneHidden();\n  }\n\n  var postalServerValid = null; // null=pending, true/false=result\n\n  var postalIsHospital = false;\n\n  function isDeliveryStreetFilled() {\n    var streetInput = getEl('wf-ld-recipient-address1');\n    return !!(streetInput && String(streetInput.value || '').trim());\n  }\n\n  function resolveDeliveryPostalValid(code) {\n    if (code.length !== 6) return { valid: false, hospital: false };\n    if (POSTAL.isHospitalPostal(code)) return { valid: true, hospital: true };\n    if (postalServerValid !== null) return { valid: postalServerValid, hospital: false };\n    var excludedAreas = config && config.excluded_areas ? config.excluded_areas : [];\n    var excludedPrefixes = config && config.excluded_postal_prefixes ? config.excluded_postal_prefixes : [];\n    var r = POSTAL.validatePostalClient(code, excludedAreas, excludedPrefixes);\n    return { valid: !!(r.valid && !r.excluded), hospital: false };\n  }\n\n  function updateAfterPostalVisibility() {\n    var addressGate = getEl('wf-ld-address-gate');\n    var postalError = getEl('wf-ld-postal-error');\n    var hospitalHint = getEl('wf-ld-postal-hospital-hint');\n    var afterPostal = getEl('wf-ld-after-postal');\n    if (!afterPostal) return;\n    var methodDelivery = getEl('wf-ld-method-delivery');\n    var isDelivery = methodDelivery && methodDelivery.checked;\n    if (addressGate) addressGate.style.display = isDelivery ? 'block' : 'none';\n    var postalValid = false;\n    postalIsHospital = false;\n    var code = '';\n    if (isDelivery) {\n      var postalInput = getDeliveryPostalInput();\n      code = getDeliveryPostalCodeFromInput(postalInput);\n      var postalState = resolveDeliveryPostalValid(code);\n      postalValid = postalState.valid;\n      postalIsHospital = postalState.hospital;\n      if (postalError) postalError.style.display = (code.length === 6 && !postalValid && !postalIsHospital) ? 'block' : 'none';\n      if (hospitalHint) hospitalHint.style.display = (code.length === 6 && postalIsHospital) ? 'block' : 'none';\n    } else {\n      postalValid = true;\n      if (hospitalHint) hospitalHint.style.display = 'none';\n    }\n    var gateReady = !isDelivery || isDeliveryAddressGateReady(code, {\n      streetFilled: isDeliveryStreetFilled(),\n      postalValid: postalValid,\n    });\n    afterPostal.style.display = gateReady ? 'block' : 'none';\n  }\n\n  function validatePostalServer(code) {\n    postalServerValid = null;\n    updateAfterPostalVisibility();\n    if (POSTAL.isHospitalPostal(code)) {\n      postalServerValid = true;\n      updateAfterPostalVisibility();\n      validateAndBlockCheckout();\n      return;\n    }\n    API.fetchValidatePostal(code).then(function (res) {\n      if (!res) {\n        updateAfterPostalVisibility();\n        validateAndBlockCheckout();\n        return;\n      }\n      postalServerValid = res.valid && !res.excluded;\n      updateAfterPostalVisibility();\n      validateAndBlockCheckout();\n    });\n  }\n\n  var availabilityData = null;\n  function ensureTimeslotController() {\n    if (timeslotController) return timeslotController;\n    timeslotController = TIMESLOTS.createTimeslotController({\n      SLOT: SLOT,\n      isPastCutoff: DATE.isPastCutoff,\n      fetchAvailability: API.fetchAvailability,\n      getConfig: function () { return config; },\n      getDateValue: function () {\n        var dateEl = getEl('wf-ld-date');\n        return dateEl && (dateEl.value || dateEl.getAttribute('data-value'));\n      },\n      getStandardSelect: function () { return getEl('wf-ld-timeslot'); },\n      getExpressSelect: function () { return getEl('wf-ld-express-timeslot'); },\n      getMethodCollectionChecked: function () {\n        var methodCollection = getEl('wf-ld-method-collection');\n        return !!(methodCollection && methodCollection.checked);\n      },\n      getAvailabilityData: function () { return availabilityData; },\n      setAvailabilityData: function (next) { availabilityData = next; },\n      getStandardSlotPricingMeta: getStandardSlotPricingMeta,\n      getExpressSlotPricingMeta: getExpressSlotPricingMeta,\n      formatExpressAmount: formatExpressAmount,\n      updateExpressCardLabel: updateExpressCardLabel,\n      updateStandardCardLabel: updateStandardCardLabel,\n    });\n    return timeslotController;\n  }\n\n  function deriveSlotLabel(s) {\n    return TIMESLOTS.deriveSlotLabel(s);\n  }\n\n  function populateTimeslots(dateOverride) {\n    ensureTimeslotController().populateTimeslots(dateOverride);\n  }\n\n  function fetchAvailabilityAndPopulate(dateVal) {\n    return ensureTimeslotController().fetchAvailabilityAndPopulate(dateVal);\n  }\n\n  function ensureValidationController() {\n    if (validationController) return validationController;\n    validationController = VALIDATION.createValidationController({\n      deps: {\n        POSTAL: POSTAL,\n        fetch: fetch,\n      },\n      dom: {\n        getEl: getEl,\n        getForm: function () { return document.getElementById('cart_form'); },\n      },\n      getters: {\n        getConfig: function () { return config; },\n        getSelectedDateIso: getSelectedDateIso,\n        getActiveTimeslotValue: getActiveTimeslotValue,\n        isDateAllowed: isDateAllowed,\n        isSelectedTimeslotValid: isSelectedTimeslotValid,\n        isActiveSlotPastCutoff: isActiveSlotPastCutoff,\n        getFormVal: getFormVal,\n        getActiveTimeslotType: function () { return activeTimeslotType; },\n        getExpressSelectionError: function () { return expressSelectionError; },\n        isBlackoutDate: isBlackoutDate,\n        getSurchargeForDate: getSurchargeForDate,\n        getSeasonalData: function () { return seasonalData; },\n        getSeasonalDataPromise: function () { return seasonalDataPromise; },\n        getSeasonalCheckPending: function () { return seasonalCheckPending; },\n        getSeasonalConflictMessages: function () { return seasonalConflictMessages; },\n      },\n      setters: {\n        setSeasonalCheckPending: function (next) { seasonalCheckPending = !!next; },\n        setSeasonalConflictMessages: function (next) {\n          seasonalConflictMessages = Array.isArray(next) ? next : [];\n        },\n      },\n    });\n    return validationController;\n  }\n\n  function ensureCheckoutFlowController() {\n    if (checkoutFlowController) return checkoutFlowController;\n    checkoutFlowController = CHECKOUT_FLOW.createCheckoutFlowController({\n      deps: {\n        API: API,\n        EXPRESS: EXPRESS,\n        STORAGE: STORAGE,\n        CHECKOUT: CHECKOUT,\n      },\n      dom: {\n        getEl: getEl,\n      },\n      getters: {\n        getActiveTimeslotValue: getActiveTimeslotValue,\n        getActiveTimeslotId: getActiveTimeslotId,\n        getActiveTimeslotType: function () { return activeTimeslotType; },\n        getExpressSelectionError: function () { return expressSelectionError; },\n        getSelectedDateIso: getSelectedDateIso,\n        isActiveSlotPastCutoff: isActiveSlotPastCutoff,\n        getFormVal: getFormVal,\n      },\n      actions: {\n        runSeasonalConflictCheck: runSeasonalConflictCheck,\n        populateTimeslots: populateTimeslots,\n        isDateAllowed: isDateAllowed,\n        isSelectedTimeslotValid: isSelectedTimeslotValid,\n        validateAndBlockCheckout: validateAndBlockCheckout,\n        applyCollectionRecipientFallback: applyCollectionRecipientFallback,\n        setDeliveryFeeRow: setDeliveryFeeRow,\n      },\n    });\n    return checkoutFlowController;\n  }\n\n  function isBlackoutDate(dateStr) {\n    if (!config || !config.blackout_dates || !dateStr) return false;\n    return config.blackout_dates.some(function (b) { return b.date === dateStr; });\n  }\n\n  function getSurchargeForDate(dateStr) {\n    if (!config || !config.surcharges || !dateStr) return null;\n    for (var i = 0; i < config.surcharges.length; i++) {\n      if (config.surcharges[i].date === dateStr) return config.surcharges[i];\n    }\n    return null;\n  }\n\n  function checkSeasonalConflicts(dateStr) {\n    return ensureValidationController().checkSeasonalConflicts(dateStr);\n  }\n\n  function runSeasonalConflictCheck(dateStr, seasonalHint) {\n    return ensureValidationController().runSeasonalConflictCheck(dateStr, seasonalHint);\n  }\n\n  function updateDateHints(dateStr) {\n    return ensureValidationController().updateDateHints(dateStr);\n  }\n\n  function validateAndBlockCheckout() {\n    return ensureValidationController().validateAndBlockCheckout();\n  }\n\n  var FALLBACK_CONFIG = {\n    booking_window: 150,\n    timeslots: [\n      { id: 'sun-1', label: '11:00 to 15:00', startHour: 11, endHour: 15, cutoffHour: 8, cutoffMinute: 30, availableDays: [0] },\n      { id: 'wk-1', label: '10:00 to 14:00', startHour: 10, endHour: 14, cutoffHour: 8, cutoffMinute: 0, availableDays: [1, 2, 3, 4, 5, 6] },\n      { id: 'wk-2', label: '14:00 to 18:00', startHour: 14, endHour: 18, cutoffHour: 12, cutoffMinute: 30, availableDays: [1, 2, 3, 4, 5, 6] },\n      { id: 'wk-3', label: '18:00 to 22:00', startHour: 18, endHour: 22, cutoffHour: 15, cutoffMinute: 30, availableDays: [1, 2, 3, 4, 5], gated: true },\n    ],\n    collection_timeslots: [\n      { id: 'pickup-mon-sat-am', label: '10:00 to 13:00', startHour: 10, endHour: 13, cutoffHour: 8, cutoffMinute: 0, availableDays: [1, 2, 3, 4, 5, 6] },\n      { id: 'pickup-mon-sat-pm', label: '14:00 to 16:00', startHour: 14, endHour: 16, cutoffHour: 14, cutoffMinute: 0, availableDays: [1, 2, 3, 4, 5, 6] },\n      { id: 'pickup-sun', label: '11:00 to 16:00', startHour: 11, endHour: 16, cutoffHour: 8, cutoffMinute: 30, availableDays: [0] },\n    ],\n    blackout_dates: [\n      { date: '2027-01-01', reason: 'New Year 2027' },\n    ],\n    override_days: [\n      {\n        date: '2026-05-08',\n        name: 'MDAY 8 May',\n        delivery: {\n          slots: [\n            { id: 'override-2026-05-08-d-0-1775620625488', label: '10:00 to 14:00', startHour: 10, endHour: 14, cutoffHour: 8, cutoffMinute: 0, availableDays: [5] },\n            { id: 'override-2026-05-08-d-1-1775620625488', label: '14:00 to 18:00', startHour: 14, endHour: 18, cutoffHour: 12, cutoffMinute: 30, availableDays: [5] },\n          ],\n          slotLimits: {},\n        },\n        collection: {\n          slots: [\n            { id: 'override-2026-05-08-c-0-1775620625488', label: '10:00 to 16:00', startHour: 10, endHour: 13, endMinute: 0, cutoffHour: 8, cutoffMinute: 0, availableDays: [5] },\n            { id: 'override-2026-05-08-c-1-1775620625488', label: '', startHour: 14, endHour: 17, startMinute: 0, endMinute: 0, cutoffHour: 12, cutoffMinute: 30, availableDays: [5] },\n          ],\n          slotLimits: {},\n        },\n        express: {\n          slots: [\n            { id: 'override-2026-05-08-ex-5-1775620625488', label: '16:30 to 17:30', startHour: 16, endHour: 17, startMinute: 30, endMinute: 30, cutoffHour: 15, cutoffMinute: 30, availableDays: [5] },\n          ],\n          slotLimits: { 'override-2026-05-08-ex-5-1775620625488': 0 },\n        },\n      },\n      {\n        date: '2026-05-09',\n        name: 'MDAY 9 May',\n        delivery: {\n          slots: [\n            { id: 'override-2026-05-09-d-0-1775621006105', label: '10:00 to 14:00', startHour: 10, endHour: 14, cutoffHour: 8, cutoffMinute: 0, availableDays: [6] },\n            { id: 'override-2026-05-09-d-1-1775621006105', label: '14:00 to 18:00', startHour: 14, endHour: 18, cutoffHour: 12, cutoffMinute: 30, availableDays: [6] },\n          ],\n          slotLimits: {},\n        },\n        collection: {\n          slots: [\n            { id: 'override-2026-05-09-c-0-1775621006105', label: '10:00 to 16:00', startHour: 10, endHour: 13, endMinute: 0, cutoffHour: 8, cutoffMinute: 0, availableDays: [6] },\n            { id: 'override-2026-05-09-c-1-1775621006105', label: '', startHour: 14, endHour: 17, startMinute: 0, endMinute: 0, cutoffHour: 12, cutoffMinute: 30, availableDays: [6] },\n          ],\n          slotLimits: {},\n        },\n        express: {\n          slots: [\n            { id: 'override-2026-05-09-ex-5-1775621006105', label: '16:30 to 17:30', startHour: 16, endHour: 17, startMinute: 30, endMinute: 30, cutoffHour: 12, cutoffMinute: 30, availableDays: [6] },\n          ],\n          slotLimits: { 'override-2026-05-09-ex-5-1775621006105': 0 },\n        },\n      },\n      {\n        date: '2026-05-10',\n        name: 'MDAY 10 May (Sun)',\n        delivery: {\n          slots: [\n            { id: 'override-2026-05-10-d-0-1775620724537', label: '11:00 to 15:00', startHour: 10, endHour: 14, startMinute: 0, endMinute: 0, cutoffHour: 8, cutoffMinute: 0, availableDays: [0] },\n            { id: 'override-2026-05-10-d-1775620734480', label: '', startHour: 14, endHour: 18, startMinute: 0, endMinute: 0, cutoffHour: 12, cutoffMinute: 30, availableDays: [0] },\n          ],\n          slotLimits: {},\n        },\n        collection: {\n          slots: [\n            { id: 'override-2026-05-10-c-0-1775620724537', label: '10:00 to 16:00', startHour: 10, endHour: 13, startMinute: 0, endMinute: 0, cutoffHour: 8, cutoffMinute: 0, availableDays: [0] },\n            { id: 'override-2026-05-10-c-1775620761119', label: '', startHour: 14, endHour: 17, startMinute: 0, endMinute: 0, cutoffHour: 12, cutoffMinute: 30, availableDays: [0] },\n          ],\n          slotLimits: {},\n        },\n        express: {\n          slots: [\n            { id: 'override-2026-05-10-ex-3-1775620724538', label: '14:30 to 15:30', startHour: 14, endHour: 15, startMinute: 30, endMinute: 30, cutoffHour: 8, cutoffMinute: 30, availableDays: [0] },\n          ],\n          slotLimits: { 'override-2026-05-10-ex-3-1775620724538': 0 },\n        },\n      },\n      {\n        date: '2026-05-11',\n        name: 'MDAY 11 May',\n        delivery: {\n          slots: [\n            { id: 'override-2026-05-11-d-0-1775620958231', label: '10:00 to 14:00', startHour: 10, endHour: 14, cutoffHour: 8, cutoffMinute: 0, availableDays: [1] },\n            { id: 'override-2026-05-11-d-1-1775620958232', label: '14:00 to 18:00', startHour: 14, endHour: 18, cutoffHour: 12, cutoffMinute: 30, availableDays: [1] },\n          ],\n          slotLimits: {},\n        },\n        collection: {\n          slots: [\n            { id: 'override-2026-05-11-c-0-1775620958232', label: '10:00 to 16:00', startHour: 10, endHour: 13, endMinute: 0, cutoffHour: 8, cutoffMinute: 0, availableDays: [1] },\n          ],\n          slotLimits: {},\n        },\n        express: {\n          slots: [\n            { id: 'override-2026-05-11-ex-5-1775620958232', label: '16:30 to 17:30', startHour: 16, endHour: 17, startMinute: 30, endMinute: 30, cutoffHour: 15, cutoffMinute: 30, availableDays: [1] },\n          ],\n          slotLimits: { 'override-2026-05-11-ex-5-1775620958232': 0 },\n        },\n      },\n    ],\n    excluded_areas: [\n      '088762','129817',\n      '217562','307677',\n      '498746','498747','498781','498783','498784','498793','498801','507087',\n      '508487','518230','534236','539747','567754',\n      '596303','637900','688251','688255','688262','698930','708976','708977',\n      '718916','718923','729756','757619','757629','757754','757758','758534','759959',\n      '778895',\n    ],\n    excluded_postal_prefixes: ['63', '62', '81', '71', '7189'],\n    excluded_variants: [],\n    occasion_collections: [\n      {\n        id: 'mother-s-day-2026',\n        name: \"Mother's Day 2026\",\n        start_date: '2026-05-08',\n        end_date: '2026-05-11',\n        collection_url: '/collections/mothers-day',\n        disable_express: true,\n        active: true,\n        product_ids: [\n          '8023920869600','8872278720736','8872278950112','8872279179488',\n          '8872279671008','8872279834848','8872341897440','8872342651104',\n          '8170502095072','8170502848736','9652595556576','9652595589344',\n          '9652595622112','9652595654880','9652595687648','9652597752032',\n          '9652597850336','7961488425184','9654425878752','9654426534112',\n          '9654426829024','9652598079712','9652598046944','9652597981408',\n          '9652598014176','9652597883104','9652597817568','9652597915872',\n          '9652597948640','9656982012128','9656982569184','9656983584992',\n          '8023920279776',\n        ],\n      },\n    ],\n  };\n\n  function detectOccasion(cart, occasions) {\n    return DOMAIN.detectOccasion(cart, occasions);\n  }\n\n  function buildOccasionBlackouts(occasions) {\n    return DOMAIN.buildOccasionBlackouts(occasions);\n  }\n\n  function getNonOccasionItems(cart, matchedOccasion) {\n    return DOMAIN.getNonOccasionItems(cart, matchedOccasion);\n  }\n\n  function isMixedCart(cart, matchedOccasion) {\n    return DOMAIN.isMixedCart(cart, matchedOccasion);\n  }\n\n  function currentAdvanceMethodKey() {\n    var methodCollection = getEl('wf-ld-method-collection');\n    return DOMAIN.currentAdvanceMethodKey(!!(methodCollection && methodCollection.checked), activeTimeslotType);\n  }\n\n  function intersectsAnyProduct(productIds, targetIds) {\n    return DOMAIN.intersectsAnyProduct(productIds, targetIds);\n  }\n\n  function computeActiveAdvanceLeadDays() {\n    return DOMAIN.computeActiveAdvanceLeadDays({\n      matchedOccasion: matchedOccasion,\n      methodKey: currentAdvanceMethodKey(),\n      rules: advanceBookingRulesResolved,\n      cartVariantIds: cartVariantIds,\n      cartProductIds: cartProductIds,\n    });\n  }\n\n  function escapeHtml(s) {\n    if (!s) return '';\n    var div = document.createElement('div');\n    div.textContent = s;\n    return div.innerHTML;\n  }\n\n  function showMixedCartBlock(cart, occ, wrap) {\n    var nonOcc = getNonOccasionItems(cart, occ);\n    var productNames = nonOcc.map(function (item) { return item.title || 'Item'; });\n    var startFmt = DATE.formatDisplayDate(occ.start_date);\n    var endFmt = DATE.formatDisplayDate(occ.end_date);\n    var methodCollection = getEl('wf-ld-method-collection');\n    var fulfilmentWord = methodCollection && methodCollection.checked ? 'collection' : 'delivery';\n    var intro = 'Your cart contains both ' + occ.name + ' and regular day items.';\n    var proceed = 'To proceed with ' + occ.name + ' ' + fulfilmentWord + ' (' + startFmt + ' to ' + endFmt + '), please remove the regular day items from your cart.';\n    var alt = 'Or remove ' + occ.name + ' items to choose a different ' + fulfilmentWord + ' date.';\n    var block = getEl('wf-ld-mixed-cart-block');\n    if (!block) {\n      block = document.createElement('div');\n      block.id = 'wf-ld-mixed-cart-block';\n      block.className = 'wf-ld-mixed-cart-block';\n      var methodCards = wrap.querySelector('.wf-ld-method-cards');\n      if (methodCards && methodCards.parentNode) {\n        methodCards.parentNode.insertBefore(block, methodCards);\n      } else {\n        wrap.appendChild(block);\n      }\n    }\n    var removeHtml = '';\n    if (productNames.length > 0) {\n      removeHtml = '<ul style=\"margin:8px 0 8px 18px;padding:0;\">' +\n        productNames.map(function (name) { return '<li>' + escapeHtml(name) + '</li>'; }).join('') +\n        '</ul>';\n    }\n    block.innerHTML =\n      '<p style=\"margin:0 0 8px;\">' + escapeHtml(intro) + '</p>' +\n      '<p style=\"margin:0 0 8px;\">' + escapeHtml(proceed) + '</p>' +\n      (removeHtml ? '<p style=\"margin:0 0 4px;\">Remove:</p>' + removeHtml : '') +\n      '<p style=\"margin:8px 0 8px;\">' + escapeHtml(alt) + '</p>' +\n      '<a href=\"/cart\" style=\"font-weight:600;\">Edit cart</a>';\n    block.style.display = 'block';\n  }\n\n  function hideMixedCartBlock() {\n    var block = getEl('wf-ld-mixed-cart-block');\n    if (block) block.style.display = 'none';\n  }\n\n  function initFormDisabled(wrap) {\n    wrap.classList.add('wf-ld-form-disabled');\n    var form = document.getElementById('cart_form');\n    if (form) {\n      var btn = form.querySelector('#checkout') || form.querySelector('button[type=\"submit\"]');\n      if (btn) btn.disabled = true;\n    }\n  }\n\n  function clearFormDisabled(wrap) {\n    wrap.classList.remove('wf-ld-form-disabled');\n    var form = document.getElementById('cart_form');\n    if (form) {\n      var btn = form.querySelector('#checkout') || form.querySelector('button[type=\"submit\"]');\n      if (btn) btn.disabled = false;\n    }\n  }\n\n  function setBootstrapLoadingState(wrap, message) {\n    if (!wrap) return;\n    wrap.style.display = '';\n    wrap.classList.add('wf-ld-pending');\n    initFormDisabled(wrap);\n    var hint = getEl('wf-ld-init-hint');\n    if (hint) {\n      hint.style.display = 'block';\n      if (message) hint.textContent = message;\n    }\n  }\n\n  function clearBootstrapLoadingState(wrap) {\n    if (!wrap) return;\n    wrap.classList.remove('wf-ld-pending');\n    wrap.style.display = '';\n    var hint = getEl('wf-ld-init-hint');\n    if (hint) hint.style.display = 'none';\n  }\n\n  function fetchCartSnapshot() {\n    return fetch('/cart.js', { credentials: 'same-origin' })\n      .then(function (r) { return r.json(); })\n      .catch(function () { return null; });\n  }\n\n  function localNowMs() {\n    try {\n      if (window.performance && typeof window.performance.now === 'function') return window.performance.now();\n    } catch (_) {}\n    return Date.now();\n  }\n\n  function localElapsedSince(startedAt) {\n    return Math.max(0, Math.round(localNowMs() - startedAt));\n  }\n\n  function describeConfigFetchError(err) {\n    if (!err) return 'Unknown fetch error';\n    if (err && err.name && err.message) return String(err.name + ': ' + err.message).slice(0, 500);\n    if (err && err.message) return String(err.message).slice(0, 500);\n    return String(err).slice(0, 500);\n  }\n\n  function fetchPublicConfigWithDiagnostics() {\n    if (!API || typeof API.fetchPublic !== 'function') return Promise.resolve(null);\n    if (typeof API.getLastPublicConfigResult === 'function') return API.fetchPublic();\n    if (typeof API.buildDeliveryUrl !== 'function') return API.fetchPublic();\n\n    var url = API.buildDeliveryUrl('/public?_t=' + Date.now());\n    var startedAt = localNowMs();\n    localPublicConfigResult = { ok: false, reason: 'pending', url: url, elapsedMs: 0 };\n\n    return fetch(url, { credentials: 'omit', cache: 'no-store' })\n      .then(function (r) {\n        if (!r.ok) {\n          return r.text().then(function (text) {\n            localPublicConfigResult = {\n              ok: false,\n              reason: 'http_error',\n              statusCode: r.status,\n              detail: (text || r.statusText || '').slice(0, 500),\n              url: url,\n              elapsedMs: localElapsedSince(startedAt),\n            };\n            return null;\n          }).catch(function () {\n            localPublicConfigResult = {\n              ok: false,\n              reason: 'http_error',\n              statusCode: r.status,\n              detail: r.statusText || '',\n              url: url,\n              elapsedMs: localElapsedSince(startedAt),\n            };\n            return null;\n          });\n        }\n        return r.json().then(function (data) {\n          localPublicConfigResult = {\n            ok: true,\n            reason: 'ok',\n            statusCode: r.status,\n            url: url,\n            elapsedMs: localElapsedSince(startedAt),\n          };\n          return data;\n        }).catch(function (err) {\n          localPublicConfigResult = {\n            ok: false,\n            reason: 'json_parse_error',\n            statusCode: r.status,\n            detail: describeConfigFetchError(err),\n            url: url,\n            elapsedMs: localElapsedSince(startedAt),\n          };\n          return null;\n        });\n      })\n      .catch(function (err) {\n        localPublicConfigResult = {\n          ok: false,\n          reason: 'fetch_error',\n          detail: describeConfigFetchError(err),\n          url: url,\n          elapsedMs: localElapsedSince(startedAt),\n        };\n        return null;\n      });\n  }\n\n  function reportConfigLoadFailed(reason, err) {\n    if (!API || typeof API.reportEvent !== 'function') return;\n    var meta = { reason: reason || 'unknown' };\n    if (API && typeof API.getLastPublicConfigResult === 'function') {\n      var result = API.getLastPublicConfigResult();\n      if (result) {\n        meta.reason = result.reason || meta.reason;\n        if (typeof result.statusCode !== 'undefined') meta.statusCode = result.statusCode;\n        if (typeof result.elapsedMs !== 'undefined') meta.elapsedMs = result.elapsedMs;\n        if (result.url) meta.configUrl = result.url;\n        if (result.detail) meta.detail = result.detail;\n      }\n    }\n    if ((!API || typeof API.getLastPublicConfigResult !== 'function') && localPublicConfigResult) {\n      meta.reason = localPublicConfigResult.reason || meta.reason;\n      if (typeof localPublicConfigResult.statusCode !== 'undefined') meta.statusCode = localPublicConfigResult.statusCode;\n      if (typeof localPublicConfigResult.elapsedMs !== 'undefined') meta.elapsedMs = localPublicConfigResult.elapsedMs;\n      if (localPublicConfigResult.url) meta.configUrl = localPublicConfigResult.url;\n      if (localPublicConfigResult.detail) meta.detail = localPublicConfigResult.detail;\n    }\n    if (err && !meta.detail) {\n      meta.detail = err && err.message ? err.message : String(err);\n    }\n    API.reportEvent('config_load_failed', meta);\n  }\n\n  function submitCartFormToNativeCheckout() {\n    var form = document.getElementById('cart_form');\n    if (!form) {\n      window.location.href = '/checkout';\n      return;\n    }\n    var checkoutInput = form.querySelector('input[name=\"checkout\"]');\n    if (!checkoutInput) {\n      checkoutInput = document.createElement('input');\n      checkoutInput.type = 'hidden';\n      checkoutInput.name = 'checkout';\n      checkoutInput.value = 'Checkout';\n      form.appendChild(checkoutInput);\n    }\n    form.submit();\n  }\n\n  function clearBypassCheckoutHandler() {\n    var btn = getEl('wf-ld-checkout');\n    if (!btn || !btn.__wfLdBypassHandler) return;\n    btn.removeEventListener('click', btn.__wfLdBypassHandler);\n    btn.__wfLdBypassHandler = null;\n    btn.removeAttribute('data-wf-ld-checkout-mode');\n  }\n\n  function attachBypassCheckoutHandler(reason) {\n    var btn = getEl('wf-ld-checkout');\n    if (!btn) return;\n    clearBypassCheckoutHandler();\n    var hint = getEl('wf-ld-checkout-hint');\n    if (hint) hint.style.display = 'none';\n    btn.disabled = false;\n    btn.__wfLdBypassHandler = function (event) {\n      event.preventDefault();\n      btn.disabled = true;\n      btn.textContent = 'Processing...';\n      submitCartFormToNativeCheckout();\n    };\n    btn.addEventListener('click', btn.__wfLdBypassHandler);\n    btn.setAttribute('data-wf-ld-checkout-mode', reason || 'native-bypass');\n  }\n\n  function buildExcludedIdSets(excludedProducts, excludedVariants) {\n    var excSet = {};\n    var excVariantSet = {};\n    (excludedProducts || []).forEach(function (id) {\n      var normalized = normalizeShopifyNumericId(id);\n      if (normalized) excSet[normalized] = true;\n    });\n    (excludedVariants || []).forEach(function (id) {\n      var normalized = normalizeShopifyNumericId(id);\n      if (normalized) excVariantSet[normalized] = true;\n    });\n    return { productSet: excSet, variantSet: excVariantSet };\n  }\n\n  function isAutoBypassCartItem(item) {\n    var productType = String((item && (item.product_type || item.productType)) || '').trim().toLowerCase();\n    if (productType === 'mws_apo_generated') return true;\n    var handle = String((item && item.handle) || '').trim().toLowerCase();\n    if (handle.indexOf('mws_apo_') === 0) return true;\n    return false;\n  }\n\n  function isExcludedByConfig(item, excludedSets) {\n    if (!item || !excludedSets) return false;\n    var productCandidates = [\n      item.product_id,\n      item.productId,\n      item.product && item.product.id,\n    ];\n    var variantCandidates = [\n      item.variant_id,\n      item.id,\n      item.variantId,\n      item.variant && item.variant.id,\n    ];\n    var productExcluded = productCandidates.some(function (candidate) {\n      var normalized = normalizeShopifyNumericId(candidate);\n      return normalized && excludedSets.productSet[normalized];\n    });\n    var variantExcluded = variantCandidates.some(function (candidate) {\n      var normalized = normalizeShopifyNumericId(candidate);\n      return normalized && excludedSets.variantSet[normalized];\n    });\n    return productExcluded || variantExcluded;\n  }\n\n  function shouldBypassDeliveryForm(cart, excludedSets) {\n    var items = (cart && cart.items) || [];\n    if (items.length === 0) return false;\n    var bypassCount = 0;\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      if (isAutoBypassCartItem(item) || isExcludedByConfig(item, excludedSets)) {\n        bypassCount += 1;\n      }\n    }\n    return bypassCount === items.length;\n  }\n\n  function debounce(fn, ms) {\n    var t = null;\n    return function () {\n      if (t) clearTimeout(t);\n      t = setTimeout(function () { t = null; fn(); }, ms);\n    };\n  }\n\n  function disposeFormSession(wrap) {\n    if (!wrap || typeof wrap.__wfLdV2Dispose !== 'function') return;\n    try {\n      wrap.__wfLdV2Dispose();\n    } catch (err) {\n      console.warn('[wf-ld-v2] dispose failed', err);\n    }\n    wrap.__wfLdV2Dispose = null;\n  }\n\n  function checkMixedCartAndReenable(wrap) {\n    fetch('/cart.js', { credentials: 'same-origin' })\n      .then(function (r) { return r.json(); })\n      .then(function (cart) {\n        cartVariantIds = uniqueCartVariantIds(cart);\n        var occ = detectOccasion(cart, config.occasion_collections || []);\n        if (!occ || !isMixedCart(cart, occ)) {\n          if (mixedCartObserver) {\n            mixedCartObserver.disconnect();\n            mixedCartObserver = null;\n          }\n          if (mixedCartVisibilityHandler) {\n            document.removeEventListener('visibilitychange', mixedCartVisibilityHandler);\n            mixedCartVisibilityHandler = null;\n          }\n          hideMixedCartBlock();\n          clearFormDisabled(wrap);\n          matchedOccasion = occ;\n          disposeFormSession(wrap);\n          initForm(wrap);\n          console.log('[wf-ld] Mixed cart cleared \u2014 form enabled');\n        }\n      })\n      .catch(function () {});\n  }\n\n  function startMixedCartObservers(wrap) {\n    if (mixedCartObserver || mixedCartVisibilityHandler) return;\n    var debouncedCheck = debounce(function () { checkMixedCartAndReenable(wrap); }, 300);\n\n    var target = document.querySelector('.cart__item-list') || document.querySelector('.cart__form');\n    if (target) {\n      mixedCartObserver = new MutationObserver(function () { debouncedCheck(); });\n      mixedCartObserver.observe(target, { childList: true, subtree: true });\n    }\n\n    mixedCartVisibilityHandler = function () {\n      if (document.visibilityState === 'visible') debouncedCheck();\n    };\n    document.addEventListener('visibilitychange', mixedCartVisibilityHandler);\n  }\n\n  function isCurrentBootstrap(bootstrapRunId, wrap) {\n    return bootstrapRunId === bootstrapInitGeneration && document.getElementById('wf-ld-custom') === wrap;\n  }\n\n  function init() {\n    var wrap = document.getElementById('wf-ld-custom');\n    if (!wrap) return;\n    bootstrapInitGeneration += 1;\n    var bootstrapRunId = bootstrapInitGeneration;\n    setBootstrapLoadingState(wrap, 'Loading delivery options...');\n\n    function revealWrap() {\n      clearBootstrapLoadingState(wrap);\n    }\n\n    Promise.all([fetchPublicConfigWithDiagnostics(), fetchCartSnapshot()]).then(function (results) {\n      if (!isCurrentBootstrap(bootstrapRunId, wrap)) return;\n      var c = results[0];\n      var cart = results[1];\n      config = c;\n      if (!config) {\n        config = FALLBACK_CONFIG;\n        console.warn('[wf-ld] Using fallback config (API unavailable)');\n        reportConfigLoadFailed('public_config_unavailable');\n      }\n      try {\n        var storeKey = API && typeof API.getStoreKey === 'function'\n          ? API.getStoreKey()\n          : ((window.WF_LD_RUNTIME && window.WF_LD_RUNTIME.storeKey) || 'WF');\n        var tierVariantIds = collectExpressTierVariantIdsFromConfig(config);\n        window.WF_LD_DEBUG_STATE = window.WF_LD_DEBUG_STATE || {};\n        window.WF_LD_DEBUG_STATE.delivery = {\n          orchestrator: (window.WF_LD_RUNTIME && window.WF_LD_RUNTIME.cartOrchestrator) || 'v1',\n          storeKey: storeKey,\n          expressVariantFallback: String(config.express_product_variant_id || ''),\n          expressTierVariantIds: tierVariantIds,\n          loadedAtIso: new Date().toISOString(),\n        };\n        console.info('[wf-ld][linkage] loaded public config', window.WF_LD_DEBUG_STATE.delivery);\n      } catch (err) {}\n\n      var excludedProducts = config.excluded_products || [];\n      var excludedVariants = config.excluded_variants || [];\n      if (window.WF_CART_LINE_MESSAGES && typeof window.WF_CART_LINE_MESSAGES.initMessageCards === 'function') {\n        var messageCardConfig = config.message_card_config || {};\n        if (messageCardConfig && typeof messageCardConfig === 'object') {\n          var messageExcludedProducts = Array.isArray(messageCardConfig.excludedProductIds)\n            ? messageCardConfig.excludedProductIds.map(String)\n            : [];\n          var mergedExcludedProducts = {};\n          messageExcludedProducts.concat(excludedProducts || []).forEach(function (id) {\n            var key = String(id || '').trim();\n            if (key) mergedExcludedProducts[key] = true;\n          });\n          messageCardConfig = {\n            enabled: messageCardConfig.enabled,\n            propertyName: messageCardConfig.propertyName,\n            excludedProductIds: Object.keys(mergedExcludedProducts),\n            excludedVariantIds: Array.isArray(excludedVariants) ? excludedVariants.map(String) : [],\n          };\n        }\n        window.WF_CART_LINE_MESSAGES.initMessageCards(messageCardConfig);\n      }\n      var occasions = config.occasion_collections || [];\n      advanceBookingRulesResolved = Array.isArray(config.advance_booking_rules_resolved)\n        ? config.advance_booking_rules_resolved\n        : [];\n      if (!cart) {\n        cartProductIds = [];\n        cartVariantIds = [];\n        clearBypassCheckoutHandler();\n        revealWrap();\n        initForm(wrap);\n        return;\n      }\n\n      cartProductIds = uniqueCartProductIds(cart);\n      cartVariantIds = uniqueCartVariantIds(cart);\n      var excludedSets = buildExcludedIdSets(excludedProducts, excludedVariants);\n      if (shouldBypassDeliveryForm(cart, excludedSets)) {\n        clearBootstrapLoadingState(wrap);\n        wrap.style.display = 'none';\n        attachBypassCheckoutHandler('native-bypass-opt-out');\n        console.log('[wf-ld] Delivery form bypassed: cart fully opt-out/APO-generated');\n        return;\n      }\n      clearBypassCheckoutHandler();\n      matchedOccasion = detectOccasion(cart, occasions);\n      if (matchedOccasion && isMixedCart(cart, matchedOccasion)) {\n        revealWrap();\n        showMixedCartBlock(cart, matchedOccasion, wrap);\n        initFormDisabled(wrap);\n        startMixedCartObservers(wrap);\n        console.log('[wf-ld] Mixed cart \u2014 occasion + regular day items; form blocked');\n        return;\n      }\n      revealWrap();\n      initForm(wrap);\n    }).catch(function (err) {\n      if (!isCurrentBootstrap(bootstrapRunId, wrap)) return;\n      config = FALLBACK_CONFIG;\n      console.warn('[wf-ld] Using fallback config (bootstrap failed)');\n      reportConfigLoadFailed('bootstrap_exception', err);\n      cartProductIds = [];\n      cartVariantIds = [];\n      clearBypassCheckoutHandler();\n      revealWrap();\n      initForm(wrap);\n    });\n  }\n\n  function initForm(wrap) {\n    clearBootstrapLoadingState(wrap);\n    clearFormDisabled(wrap);\n    clearBypassCheckoutHandler();\n    disposeFormSession(wrap);\n    // A silent cart refresh (qty stepper, message save, discount apply, config\n    // reload) swaps the cart section's innerHTML, destroying and recreating the\n    // #wf-ld-custom node. The disposeFormSession(wrap) call above therefore\n    // no-ops \u2014 the fresh node carries no __wfLdV2Dispose \u2014 leaving the previous\n    // UI controller alive but bound to the now-detached wrap. ensureUiController\n    // would then return that stale controller and re-bind the Delivery|Express\n    // toggle (and method cards) to dead, detached nodes, so clicks do nothing.\n    // Dispose via the controller-scoped handle, which survives node replacement.\n    if (typeof activeFormDispose === 'function') {\n      try { activeFormDispose(); } catch (err) {}\n      activeFormDispose = null;\n    }\n    formInitGeneration += 1;\n    var currentGeneration = formInitGeneration;\n    var disposers = [];\n\n    function on(el, eventName, handler, options) {\n      if (!el || !eventName || !handler) return;\n      el.addEventListener(eventName, handler, options);\n      disposers.push(function () {\n        el.removeEventListener(eventName, handler, options);\n      });\n    }\n\n    function syncFeeStateAfterTimeslotRefresh(summary) {\n      var controller = ensureUiController();\n      if (!controller || typeof controller.syncFeeStateAfterTimeslotRefresh !== 'function') {\n        return Promise.resolve(false);\n      }\n      return controller.syncFeeStateAfterTimeslotRefresh(summary);\n    }\n\n    function disposeThisForm() {\n      if (currentGeneration !== formInitGeneration) return;\n      activeFormDispose = null;\n      if (uiController && typeof uiController.dispose === 'function') {\n        uiController.dispose();\n        uiController = null;\n      }\n      if (datePicker && typeof datePicker.destroy === 'function') {\n        datePicker.destroy();\n      }\n      datePicker = null;\n      while (disposers.length > 0) {\n        var dispose = disposers.pop();\n        try {\n          dispose();\n        } catch (err) {}\n      }\n    }\n\n    wrap.__wfLdV2Dispose = disposeThisForm;\n    activeFormDispose = disposeThisForm;\n\n    if (window.WF_LD_UPSELL && typeof window.WF_LD_UPSELL.init === 'function') {\n      window.WF_LD_UPSELL.init();\n    }\n\n    var today = DATE.todayStrSgt();\n    var defaultMax = DATE.maxDateStrSgt(config.booking_window || 120);\n    var dateInput = getEl('wf-ld-date');\n\n    activeAdvanceLeadDays = computeActiveAdvanceLeadDays();\n    var pickerMin = DATE.addDaysStrSgt(activeAdvanceLeadDays || 0);\n    var pickerMax = defaultMax;\n    var mergedBlackouts = (config.blackout_dates || []).slice();\n    var occasions = config.occasion_collections || [];\n\n    function showRestoreWarning(message) {\n      if (!message) return;\n      var warn = getEl('wf-ld-restore-warning');\n      if (!warn) {\n        warn = document.createElement('div');\n        warn.id = 'wf-ld-restore-warning';\n        warn.style.cssText = 'background:#fff3f3;border:1px solid #ffc7c7;border-radius:6px;padding:10px 14px;margin-bottom:12px;font-size:13px;color:#8a1f1f;line-height:1.5;';\n        var dateLabel = getEl('wf-ld-date-label');\n        if (dateLabel && dateLabel.parentNode) {\n          dateLabel.parentNode.insertBefore(warn, dateLabel);\n        } else {\n          wrap.insertBefore(warn, wrap.firstChild);\n        }\n      }\n      warn.textContent = message;\n      warn.style.display = 'block';\n    }\n\n    if (matchedOccasion) {\n      pickerMin = matchedOccasion.start_date;\n      pickerMax = matchedOccasion.end_date;\n      console.log('[wf-ld] Occasion mode:', matchedOccasion.name, pickerMin, '\u2192', pickerMax);\n    } else if (occasions.length > 0) {\n      var occBlackouts = buildOccasionBlackouts(occasions);\n      mergedBlackouts = mergedBlackouts.concat(occBlackouts);\n    }\n\n    function updateOccasionBannerCopy() {\n      if (!matchedOccasion) return;\n      var banner = getEl('wf-ld-occasion-banner');\n      if (!banner) return;\n      var startFmt = DATE.formatDisplayDate(matchedOccasion.start_date);\n      var endFmt = DATE.formatDisplayDate(matchedOccasion.end_date);\n      var methodCollection = getEl('wf-ld-method-collection');\n      var isCollection = methodCollection && methodCollection.checked;\n      var modePhrase = isCollection ? 'collection available' : 'delivery available';\n      banner.textContent =\n        matchedOccasion.name + ' order \u2014 ' + modePhrase + ' ' + startFmt + ' to ' + endFmt + ' only';\n    }\n\n    // occasion banner\n    var occasionBanner = getEl('wf-ld-occasion-banner');\n    var advanceBookingBanner = getEl('wf-ld-advance-booking-banner');\n    if (matchedOccasion) {\n      if (!occasionBanner) {\n        occasionBanner = document.createElement('div');\n        occasionBanner.id = 'wf-ld-occasion-banner';\n        occasionBanner.style.cssText = 'background:#fff8e1;border:1px solid #ffe082;border-radius:6px;padding:10px 14px;margin-bottom:14px;font-size:13px;color:#6d4c00;line-height:1.5;';\n        var dateLabel = getEl('wf-ld-date-label');\n        if (dateLabel && dateLabel.parentNode) {\n          dateLabel.parentNode.insertBefore(occasionBanner, dateLabel);\n        }\n      }\n      updateOccasionBannerCopy();\n      occasionBanner.style.display = 'block';\n    } else if (occasionBanner) {\n      occasionBanner.style.display = 'none';\n    }\n    if (!advanceBookingBanner) {\n      advanceBookingBanner = document.createElement('div');\n      advanceBookingBanner.id = 'wf-ld-advance-booking-banner';\n      advanceBookingBanner.style.cssText = 'background:#f3f8ff;border:1px solid #b8d7ff;border-radius:6px;padding:10px 14px;margin-bottom:14px;font-size:13px;color:#194a8d;line-height:1.5;display:none;';\n      var dateLabelForAdvance = getEl('wf-ld-date-label');\n      if (dateLabelForAdvance && dateLabelForAdvance.parentNode) {\n        dateLabelForAdvance.parentNode.insertBefore(advanceBookingBanner, dateLabelForAdvance);\n      }\n    }\n\n    function resetDateAndTimeslotSelection(showHintMessage) {\n      if (datePicker && datePicker.setValue) {\n        datePicker.setValue('');\n      } else if (dateInput) {\n        dateInput.value = '';\n        dateInput.setAttribute('data-value', '');\n      }\n      dateSelected = false;\n      var std = getEl('wf-ld-timeslot');\n      var exp = getEl('wf-ld-express-timeslot');\n      if (std) std.value = '';\n      if (exp) exp.value = '';\n      updateDateHints('');\n      populateTimeslots();\n      updateTimeslotLockState();\n      if (showHintMessage) {\n        var checkoutHint = getEl('wf-ld-checkout-hint');\n        if (checkoutHint) {\n          checkoutHint.textContent = showHintMessage;\n          checkoutHint.style.display = 'block';\n        }\n      }\n    }\n\n    function updateAdvanceBookingBanner() {\n      if (!advanceBookingBanner) return;\n      if (matchedOccasion || activeAdvanceLeadDays <= 0) {\n        advanceBookingBanner.style.display = 'none';\n        return;\n      }\n      var earliestIso = DATE.addDaysStrSgt(activeAdvanceLeadDays);\n      var earliestFmt = DATE.formatDisplayDate(earliestIso);\n      advanceBookingBanner.textContent =\n        'Earliest available date is ' + earliestFmt + ' due to advance booking requirements.';\n      advanceBookingBanner.style.display = 'block';\n    }\n\n    function isDateDisabledForPicker(iso) {\n      if (!isDateAllowed(iso)) return true;\n      var collEl = getEl('wf-ld-method-collection');\n      var isColl = collEl && collEl.checked;\n      var mode = isColl ? 'collection' : 'delivery';\n      var stdSlots = isColl ? (config.collection_timeslots || []) : config.timeslots;\n      var overrides = config.override_days || [];\n      var stdAvail = SLOT.filterAvailableSlots(stdSlots, iso, config.blackout_dates, DATE.isPastCutoff, overrides, mode);\n      if (stdAvail.length > 0) return false;\n      if (!isColl && config.express_timeslots && config.express_timeslots.length > 0) {\n        var expAvail = SLOT.filterAvailableSlots(\n          config.express_timeslots,\n          iso,\n          config.blackout_dates,\n          DATE.isPastCutoff,\n          overrides,\n          'express'\n        );\n        if (expAvail.length > 0) return false;\n      }\n      return true;\n    }\n\n    function applyDynamicDateBounds() {\n      var bounds = getDateBounds();\n      if (datePicker && datePicker.updateOpts) {\n        datePicker.updateOpts({ minDate: bounds.min, maxDate: bounds.max });\n      } else if (dateInput) {\n        dateInput.setAttribute('min', bounds.min);\n        dateInput.setAttribute('max', bounds.max);\n      }\n      updateAdvanceBookingBanner();\n      var selectedIso = getSelectedDateIso();\n      if (selectedIso && !isDateAllowed(selectedIso)) {\n        resetDateAndTimeslotSelection(\n          'Selected date is no longer valid due to advance booking requirements. Please choose another date.',\n        );\n      }\n    }\n\n    if (dateInput && PICKER) {\n      datePicker = PICKER.attach(dateInput, {\n        minDate: pickerMin,\n        maxDate: pickerMax,\n        blackoutDates: mergedBlackouts,\n        surcharges: config.surcharges || [],\n        overrideDays: config.override_days || [],\n        isDateDisabled: isDateDisabledForPicker,\n        onSelect: function (iso) {\n          dateInput.setAttribute('data-value', iso);\n          dateSelected = true;\n          updateDateHints(iso);\n          Promise.resolve(fetchAvailabilityAndPopulate(iso)).then(function (summary) {\n            return syncFeeStateAfterTimeslotRefresh(summary);\n          });\n          updateTimeslotLockState();\n          onChange();\n        },\n      });\n\n      if (matchedOccasion) {\n        var startParts = matchedOccasion.start_date.split('-');\n        datePicker.navigateToMonth(parseInt(startParts[0], 10), parseInt(startParts[1], 10) - 1);\n      }\n    } else if (dateInput) {\n      dateInput.setAttribute('min', pickerMin);\n      dateInput.setAttribute('max', pickerMax);\n    }\n    applyDynamicDateBounds();\n\n    seasonalDataPromise = API.fetchSeasonal()\n      .then(function (data) {\n        seasonalData = (data && data.variantWindows) ? data.variantWindows : null;\n      })\n      .catch(function () {\n        seasonalData = null;\n      });\n    seasonalDataPromise.then(function () {\n      if (datePicker && typeof datePicker.updateOpts === 'function') {\n        datePicker.updateOpts({ isDateDisabled: isDateDisabledForPicker });\n      }\n      var selectedDate = getSelectedDateIso();\n      if (selectedDate && !isDateAllowedForSeasonalCart(selectedDate)) {\n        resetDateAndTimeslotSelection(\n          'Selected date is outside the allowed seasonal delivery window. Please choose another date.',\n        );\n        return;\n      }\n      if (selectedDate) updateDateHints(selectedDate);\n    });\n\n    var methodDelivery = getEl('wf-ld-method-delivery');\n    var methodCollection = getEl('wf-ld-method-collection');\n    function updateRecipientAddressSummary() {\n      var summary = getEl('wf-ld-recipient-address-summary');\n      if (!summary) return;\n      var addr1 = String(getFormVal('recipient_address1') || '').trim();\n      var addr2 = String(getFormVal('recipient_address2') || '').trim();\n      var postal = getDeliveryPostalCodeFromInput(getDeliveryPostalInput());\n      var parts = [];\n      if (addr1) parts.push(addr1);\n      if (addr2) parts.push(addr2);\n      if (postal) parts.push(postal);\n      summary.textContent = parts.join(', ');\n      summary.style.display = parts.length ? 'block' : 'none';\n    }\n\n    function collectState() {\n      var anonCb = getEl('wf-ld-anonymous');\n      return {\n        method: (methodDelivery && methodDelivery.checked) ? 'delivery' : 'collection',\n        postal: getDeliveryPostalCodeFromInput(getDeliveryPostalInput()),\n        rFirstName: getFormVal('recipient_first_name'),\n        rLastName: getFormVal('recipient_last_name'),\n        rPhone: getPhoneWithCode('wf-ld-recipient-phone', 'wf-ld-recipient-phone-code'),\n        rAddr1: getFormVal('recipient_address1'),\n        rAddr2: getFormVal('recipient_address2'),\n        rPostal: getFormVal('recipient_postal'),\n        sFirstName: getFormVal('sender_first_name'),\n        sLastName: getFormVal('sender_last_name'),\n        sEmail: getFormVal('sender_email'),\n        sPhone: getPhoneWithCode('wf-ld-sender-phone', 'wf-ld-sender-phone-code'),\n        anonymous: anonCb ? anonCb.checked : false,\n        stateVersion: 2,\n      };\n    }\n\n    function onChange() {\n      updateAttributes();\n      updateAfterPostalVisibility();\n      updateRecipientAddressSummary();\n      populateTimeslots();\n      validateAndBlockCheckout();\n      STORAGE.save(collectState());\n      trackCartFormProgress();\n    }\n\n    function setFormVal(attrName, val) {\n      if (val == null) return;\n      var inp = getCartAttributeField(attrName);\n      if (inp) inp.value = val;\n    }\n\n    function clearAddressConsistencyHint() {\n      var hint = getEl('wf-ld-address-consistency-hint');\n      if (!hint) return;\n      hint.textContent = '';\n      hint.style.display = 'none';\n    }\n\n    function showAddressConsistencyHint(message) {\n      if (!message) return;\n      var hint = getEl('wf-ld-address-consistency-hint');\n      if (!hint) return;\n      hint.textContent = message;\n      hint.style.display = 'block';\n    }\n\n    function buildAddressConsistencyMismatchMessage(street, enteredPostal, suggestedPostal) {\n      return (\n        'Postal code ' +\n        enteredPostal +\n        ' does not match ' +\n        street +\n        '. Google Maps suggests ' +\n        suggestedPostal +\n        ' for this street. Update the street or pick a postal suggestion.'\n      );\n    }\n\n    function runAddressConsistencyCheck(done) {\n      done = typeof done === 'function' ? done : function () {};\n      if (recipientAutocompleteApplying) {\n        done(null);\n        return;\n      }\n      if (!ADDRESS_AC || typeof ADDRESS_AC.verifyStreetPostalConsistency !== 'function') {\n        done(null);\n        return;\n      }\n      var street = getFormVal('recipient_address1');\n      var postal = getFormVal('recipient_postal');\n      if (!String(street || '').trim() || String(postal || '').trim().length !== 6) {\n        clearAddressConsistencyHint();\n        done(null);\n        return;\n      }\n      ADDRESS_AC.verifyStreetPostalConsistency(street, postal, function (result) {\n        if (!result || result.status === 'match' || result.status === 'skipped' || result.status === 'unavailable') {\n          clearAddressConsistencyHint();\n          done(null);\n          return;\n        }\n        if (result.status === 'mismatch') {\n          showAddressConsistencyHint(\n            buildAddressConsistencyMismatchMessage(street, result.enteredPostal, result.suggestedPostal)\n          );\n          done(result);\n          return;\n        }\n        done(null);\n      });\n    }\n\n    function ensureAddressConsistencyBeforeCheckout(done) {\n      done = typeof done === 'function' ? done : function () {};\n      if (!methodDelivery || !methodDelivery.checked) {\n        done(true);\n        return;\n      }\n      var active = document.activeElement;\n      if (\n        active &&\n        typeof active.blur === 'function' &&\n        (active.name === 'attributes[recipient_address1]' || active.name === 'attributes[recipient_postal]')\n      ) {\n        active.blur();\n      }\n      runAddressConsistencyCheck(function (result) {\n        if (result && result.status === 'mismatch') {\n          validateAndBlockCheckout();\n          done(false);\n          return;\n        }\n        done(true);\n      });\n    }\n\n    function scheduleAddressConsistencyCheck() {\n      if (recipientAutocompleteApplying) return;\n      if (addressConsistencyTimer) clearTimeout(addressConsistencyTimer);\n      addressConsistencyTimer = setTimeout(function () {\n        addressConsistencyTimer = null;\n        runAddressConsistencyCheck();\n      }, 400);\n    }\n\n    function showSavedAddressMismatchHint(enteredPostal, suggestedPostal) {\n      showAddressConsistencyHint(\n        'This saved address may be outdated. Google Maps suggests postal code ' +\n        suggestedPostal +\n        ' for this street (your saved address has ' +\n        enteredPostal +\n        '). Please double-check before checkout.'\n      );\n    }\n\n    function verifySavedRecipientAddressPostal(savedAddress) {\n      if (!ADDRESS_AC || typeof ADDRESS_AC.verifySavedAddressPostalMatch !== 'function') return;\n      ADDRESS_AC.verifySavedAddressPostalMatch(savedAddress, function (result) {\n        if (!result || result.status !== 'mismatch') return;\n        showSavedAddressMismatchHint(result.enteredPostal, result.suggestedPostal);\n      });\n    }\n\n    function applySavedRecipientAddress(savedAddress) {\n      if (!savedAddress) return;\n      clearAddressConsistencyHint();\n      var postal = String(savedAddress.zip || '').trim();\n      setFormVal('recipient_first_name', savedAddress.firstName || '');\n      setFormVal('recipient_last_name', savedAddress.lastName || '');\n      setPhoneWithCode('wf-ld-recipient-phone', 'wf-ld-recipient-phone-code', savedAddress.phone || '');\n      setFormVal('recipient_address1', savedAddress.address1 || '');\n      setFormVal('recipient_address2', savedAddress.address2 || '');\n      setFormVal('recipient_postal', postal);\n      syncPhoneHidden();\n      if (postal.length === 6) {\n        validatePostalServer(postal);\n      }\n      verifySavedRecipientAddressPostal(savedAddress);\n      onChange();\n    }\n\n    function restoreState() {\n      var s = STORAGE.load();\n      if (!s) return;\n      var hadPersistedSensitiveValues = !!(s.dateIso || s.stdSlot || s.expSlot || s.dateDisplay || s.timeslotType);\n      // Delivery is the storefront default. Do not let stale localStorage from a\n      // prior cart/session make Self-collection the default on a fresh load.\n      if (methodDelivery) {\n        methodDelivery.checked = true;\n      }\n      if (methodCollection) methodCollection.checked = false;\n      setFormVal('recipient_first_name', s.rFirstName);\n      setFormVal('recipient_last_name', s.rLastName);\n      setPhoneWithCode('wf-ld-recipient-phone', 'wf-ld-recipient-phone-code', s.rPhone);\n      setFormVal('recipient_address1', s.rAddr1);\n      setFormVal('recipient_address2', s.rAddr2);\n      setFormVal('recipient_postal', s.rPostal || s.postal || '');\n      setFormVal('sender_first_name', s.sFirstName);\n      setFormVal('sender_last_name', s.sLastName);\n      setFormVal('sender_email', s.sEmail);\n      setPhoneWithCode('wf-ld-sender-phone', 'wf-ld-sender-phone-code', s.sPhone);\n      var anonCb = getEl('wf-ld-anonymous');\n      if (anonCb && s.anonymous) anonCb.checked = true;\n\n      var restoredPostal = String(s.rPostal || s.postal || '').trim();\n      if (restoredPostal.length === 6) validatePostalServer(restoredPostal);\n      if (hadPersistedSensitiveValues) {\n        showRestoreWarning('Your previously saved date/timeslot was cleared. Please reselect delivery date and timeslot to use latest availability.');\n      }\n\n      STORAGE.save(collectState());\n      trackCartFormProgress();\n\n      return s;\n    }\n\n    var recipientBlock = getEl('wf-ld-recipient-block');\n    var pickupAddressBlock = getEl('wf-ld-pickup-address');\n    var dateLabelEl = getEl('wf-ld-date-label');\n\n    function updateMethodDependentUI() {\n      var isDelivery = methodDelivery && methodDelivery.checked;\n      if (recipientBlock) recipientBlock.style.display = isDelivery ? 'block' : 'none';\n      if (pickupAddressBlock) pickupAddressBlock.style.display = isDelivery ? 'none' : 'block';\n      if (dateLabelEl) dateLabelEl.textContent = isDelivery ? 'Delivery date' : 'Collection date';\n      if (datePicker && datePicker.updateOpts) {\n        datePicker.updateOpts({\n          displayPlaceholder: isDelivery ? 'Select delivery date' : 'Select collection date',\n        });\n      }\n      updateOccasionBannerCopy();\n    }\n    function updateRecipientVisibility() { updateMethodDependentUI(); }\n\n    function ensureUiController() {\n      if (uiController) return uiController;\n      uiController = UI.createUiController({\n        deps: {\n          EXPRESS: EXPRESS,\n          STORAGE: STORAGE,\n        },\n        dom: {\n          getEl: getEl,\n          wrap: wrap,\n        },\n        getters: {\n          getConfig: function () { return config; },\n          getMatchedOccasion: function () { return matchedOccasion; },\n          getDatePicker: function () { return datePicker; },\n          getDateSelected: function () { return dateSelected; },\n          getActiveTimeslotType: function () { return activeTimeslotType; },\n          getActiveAdvanceLeadDays: function () { return activeAdvanceLeadDays; },\n          getExpressSelectionError: function () { return expressSelectionError; },\n        },\n        setters: {\n          setDateSelected: function (next) { dateSelected = !!next; },\n          setActiveTimeslotType: function (next) { activeTimeslotType = next; },\n          setActiveAdvanceLeadDays: function (next) { activeAdvanceLeadDays = next || 0; },\n          setExpressSelectionError: function (next) { expressSelectionError = next || ''; },\n        },\n        actions: {\n          updateExpressCardLabel: updateExpressCardLabel,\n          updateStandardCardLabel: updateStandardCardLabel,\n          validateAndBlockCheckout: validateAndBlockCheckout,\n          populateTimeslots: populateTimeslots,\n          fetchAvailabilityAndPopulate: fetchAvailabilityAndPopulate,\n          updateDateHints: updateDateHints,\n          onChange: onChange,\n          updateRecipientVisibility: updateRecipientVisibility,\n          collectState: collectState,\n          setDeliveryFeeRow: setDeliveryFeeRow,\n          computeActiveAdvanceLeadDays: computeActiveAdvanceLeadDays,\n          applyDynamicDateBounds: applyDynamicDateBounds,\n          getSelectedExpressSlotMeta: getSelectedExpressSlotMeta,\n          getSelectedStandardSlotMeta: getSelectedStandardSlotMeta,\n          setPostalServerValid: function (next) { postalServerValid = next; },\n          validatePostalServer: validatePostalServer,\n          syncPhoneHidden: syncPhoneHidden,\n          updateAttributes: updateAttributes,\n          clearAddressConsistencyHint: clearAddressConsistencyHint,\n          scheduleAddressConsistencyCheck: scheduleAddressConsistencyCheck,\n          isRecipientAutocompleteApplying: function () { return recipientAutocompleteApplying; },\n        },\n      });\n      return uiController;\n    }\n\n    function updateTimeslotTypeVisibility() {\n      ensureUiController().updateTimeslotTypeVisibility();\n    }\n\n    function refreshAdvanceBookingState() {\n      ensureUiController().refreshAdvanceBookingState();\n    }\n\n    function updateTimeslotLockState() {\n      ensureUiController().updateTimeslotLockState();\n    }\n\n    function ensureSavedAddressController() {\n      if (savedAddressController) return savedAddressController;\n      if (!SAVED || typeof SAVED.createSavedAddressController !== 'function') return null;\n      savedAddressController = SAVED.createSavedAddressController({\n        document: document,\n        actions: {\n          applySavedAddress: applySavedRecipientAddress,\n        },\n      });\n      return savedAddressController;\n    }\n\n    var cartUi = ensureUiController();\n    cartUi.bindMethodCards();\n    cartUi.bindTimeslotTypeCards();\n    cartUi.bindFormInputs();\n    on(document, 'wf:cart:message-saved', function () {\n      cartUi.syncMethodCards();\n      updateAfterPostalVisibility();\n      updateRecipientVisibility();\n      updateTimeslotTypeVisibility();\n      updateTimeslotLockState();\n      validateAndBlockCheckout();\n    });\n\n    var checkoutFlow = ensureCheckoutFlowController();\n    bindCartFormKeyboardSubmitGuard(document.getElementById('cart_form'), wrap);\n\n    var ldCheckoutBtn = document.getElementById('wf-ld-checkout');\n    if (ldCheckoutBtn) {\n      var cartForm = document.getElementById('cart_form');\n      if (cartForm && cartForm.contains(ldCheckoutBtn)) {\n        var checkoutWrap = ldCheckoutBtn.closest('.cart__price-breakdown') || ldCheckoutBtn.parentNode;\n        cartForm.parentNode.insertBefore(checkoutWrap, cartForm.nextSibling);\n      }\n\n      on(ldCheckoutBtn, 'click', function () {\n        if (!config) return;\n        ensureAddressConsistencyBeforeCheckout(function (ok) {\n          if (!ok) return;\n          proceedLdCheckout();\n        });\n      });\n\n      function proceedLdCheckout() {\n        updateAttributes();\n        var idleCheckoutLabel = ldCheckoutBtn.getAttribute('data-wf-ld-idle-label') || ldCheckoutBtn.textContent || 'Checkout';\n        if (!ldCheckoutBtn.getAttribute('data-wf-ld-idle-label')) {\n          ldCheckoutBtn.setAttribute('data-wf-ld-idle-label', idleCheckoutLabel);\n        }\n        ldCheckoutBtn.disabled = true;\n        ldCheckoutBtn.textContent = 'Processing...';\n\n        var MSG = window.WF_CART_LINE_MESSAGES;\n        var msgPromise = (MSG && typeof MSG.prepareMessagesForCheckout === 'function')\n          ? MSG.prepareMessagesForCheckout()\n          : ((MSG && typeof MSG.saveAllUnsavedMessages === 'function')\n              ? MSG.saveAllUnsavedMessages().then(function () { return { ok: true }; })\n              : Promise.resolve({ ok: true }));\n\n        msgPromise.then(function (messageState) {\n          if (messageState && messageState.ok === false) {\n            var messageHint = getEl('wf-ld-checkout-hint');\n            if (messageHint && messageState.message) {\n              messageHint.textContent = messageState.message;\n              messageHint.style.display = 'block';\n            }\n            ldCheckoutBtn.disabled = false;\n            ldCheckoutBtn.textContent = idleCheckoutLabel;\n            if (typeof ldCheckoutBtn.removeAttribute === 'function') ldCheckoutBtn.removeAttribute('aria-busy');\n            return;\n          }\n\n          var UPSELL = window.WF_LD_UPSELL;\n          console.log('[wf-ld] UPSELL exists?', !!UPSELL, 'isEnabled?', UPSELL && UPSELL.isEnabled());\n          if (UPSELL && UPSELL.isEnabled() && typeof UPSELL.shouldShowForCart === 'function') {\n            UPSELL.shouldShowForCart()\n              .then(function (shouldShow) {\n                if (shouldShow) {\n                  console.log('[wf-ld] showing upsell modal');\n                  UPSELL.show(function () { checkoutFlow.proceedToCheckout(ldCheckoutBtn); });\n                  return;\n                }\n                console.log('[wf-ld] upsell tag gate skipped modal');\n                checkoutFlow.proceedToCheckout(ldCheckoutBtn);\n              })\n              .catch(function (err) {\n                console.warn('[wf-ld] upsell tag gate check failed, proceeding', err);\n                checkoutFlow.proceedToCheckout(ldCheckoutBtn);\n              });\n          } else if (UPSELL && UPSELL.isEnabled()) {\n            console.log('[wf-ld] showing upsell modal');\n            UPSELL.show(function () { checkoutFlow.proceedToCheckout(ldCheckoutBtn); });\n          } else {\n            console.log('[wf-ld] skipping upsell, proceeding to checkout');\n            checkoutFlow.proceedToCheckout(ldCheckoutBtn);\n          }\n        }).catch(function (err) {\n          console.error('[wf-ld] message-card checkout preparation failed', err);\n          var messageHint = getEl('wf-ld-checkout-hint');\n          if (messageHint) {\n            messageHint.textContent = 'We could not prepare your message card updates. Please try again.';\n            messageHint.style.display = 'block';\n          }\n          ldCheckoutBtn.disabled = false;\n          ldCheckoutBtn.textContent = idleCheckoutLabel;\n          if (typeof ldCheckoutBtn.removeAttribute === 'function') ldCheckoutBtn.removeAttribute('aria-busy');\n        });\n      }\n    }\n\n    restoreState();\n    syncPhoneHidden();\n    cartUi.syncMethodCards();\n    updateAfterPostalVisibility();\n    updateRecipientAddressSummary();\n    updateRecipientVisibility();\n    updateTimeslotTypeVisibility();\n    refreshAdvanceBookingState();\n    updateTimeslotLockState();\n    updateExpressCardLabel();\n    updateStandardCardLabel();\n    ensureSavedAddressController();\n\n    if (ADDRESS_AC && config.google_maps_key) {\n      ADDRESS_AC.loadScript(config.google_maps_key);\n      var acStreet = wrap.querySelector('[name=\"attributes[recipient_address1]\"]');\n      var acUnit = wrap.querySelector('[name=\"attributes[recipient_address2]\"]');\n      var acPostal = wrap.querySelector('[name=\"attributes[recipient_postal]\"]');\n      ADDRESS_AC.init(acStreet, acPostal, acUnit, {\n        onPlaceApplyStart: function () {\n          recipientAutocompleteApplying = true;\n        },\n        onPlaceApplyEnd: function (filledCode) {\n          recipientAutocompleteApplying = false;\n          clearAddressConsistencyHint();\n          var code = String(filledCode || '').trim();\n          if (code.length === 6) {\n            validatePostalServer(code);\n          }\n          onChange();\n        },\n        onPostalPlaceApplyStart: function () {\n          recipientAutocompleteApplying = true;\n        },\n        onPostalPlaceApplyEnd: function (filledCode) {\n          recipientAutocompleteApplying = false;\n          clearAddressConsistencyHint();\n          var code = String(filledCode || '').trim();\n          if (code.length === 6) {\n            validatePostalServer(code);\n          }\n          updateRecipientAddressSummary();\n          onChange();\n        },\n      });\n    }\n\n    if (EXPRESS.removeAllFeeProducts || EXPRESS.removeAllExpressProducts) {\n      var resetPromise = EXPRESS.removeAllFeeProducts\n        ? EXPRESS.removeAllFeeProducts()\n        : EXPRESS.removeAllExpressProducts();\n      resetPromise.then(function () {\n        EXPRESS.refreshCartTotals();\n        if (EXPRESS.setFeeChargeVisible) EXPRESS.setFeeChargeVisible(false);\n        else if (EXPRESS.setExpressChargeVisible) EXPRESS.setExpressChargeVisible(false);\n        setDeliveryFeeRow('Delivery Fee', null);\n      });\n    }\n\n    validateAndBlockCheckout();\n  }\n\n    function disposeMixedCartObservers() {\n      if (mixedCartObserver) {\n        mixedCartObserver.disconnect();\n        mixedCartObserver = null;\n      }\n      if (mixedCartVisibilityHandler) {\n        document.removeEventListener('visibilitychange', mixedCartVisibilityHandler);\n        mixedCartVisibilityHandler = null;\n      }\n    }\n\n    return {\n      init: init,\n      startMixedCartObservers: startMixedCartObservers,\n      disposeMixedCartObservers: disposeMixedCartObservers,\n    };\n  }\n\n  window.WF_LD_CART_INIT = {\n    createInitController: createInitController,\n    _test: {\n      isKeyboardSubmitProneField: isKeyboardSubmitProneField,\n      getDeliveryPostalCodeFromInput: getDeliveryPostalCodeFromInput,\n      resolveMappedPricingTierId: resolveMappedPricingTierId,\n      isDeliveryAddressGateReady: isDeliveryAddressGateReady,\n    },\n  };\n})();\n"],
  "mappings": "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",
  "names": ["window", "matchedOccasion", "dateLabel", "methodCollection"]
}
