{
  "version": 3,
  "sources": ["/cdn/shop/t/11/assets/bb-mesh-swap.js?variant=%27+v.id+%27"],
  "sourcesContent": ["/**\n * BB Mesh Swap \u2014 PDP intelligence for Special Order variants.\n * Detects when a 1\"\u00D71\" or 2\"\u00D76\" mesh variant is selected; surfaces a callout\n * pointing to in-stock alternatives (2\"\u00D72\" or 4\"\u00D74\") that ship in days.\n * Bootstraps off the existing <script type=\"application/json\" data-product-json>.\n */\n(function () {\n  'use strict';\n\n  // Cross-product fallback: when the WHOLE product is SO (Corten, Green, Brown ZM, etc.),\n  // suggest the equivalent in-stock colour of the same product line.\n  // Map: SO product handle \u2192 array of { handle, label } alternatives.\n  var PRODUCT_ALTERNATIVES = {\n    'rust-patina-hog-wire-fence-panels-hog-panels-premade-or-unframed-the-red-rock': [\n      { handle: 'hog-wire-fence-panels', label: 'Black Hog Wire Fence Panels' },\n      { handle: 'the-tough-panel-silver-hog-wire-fence-panel-gauge-6-silver-hog-wire-fence-framed-or-unframe', label: 'Silver Hog Wire Fence Panels' },\n      { handle: 'brown-hog-wire-fence-panel-gauge-6-coffee-brown-hog-panels-premade-or-unframed-the-tough-panel', label: 'Brown Hog Wire Fence Panels' },\n    ],\n    'rust-patina-hog-wire-deck-railing-panels-premade-or-unframed-the-copperhead': [\n      { handle: 'hog-wire-deck-railing', label: 'Black Hog Wire Deck Railing' },\n      { handle: 'silver-hog-wire-deck-railing-hog-wire-railing-deck-panels', label: 'Silver Hog Wire Deck Railing' },\n      { handle: 'brown-hog-wire-deck-railing-panels-premade-or-unframed-the-acadia-copy', label: 'Brown Hog Wire Deck Railing' },\n    ],\n    'rust-cattle-panel-fence-cattle-panels-premade-or-unframed-the-aberdeen': [\n      { handle: 'black-cattle-panel-fence-cattle-panels-premade-or-unframed-the-angus', label: 'Black Cattle Panel Fence' },\n      { handle: 'silver-cattle-panel-fence-cattle-panels-premade-or-unframed-the-holstein', label: 'Silver Cattle Panel Fence' },\n      { handle: 'brown-cattle-panel-fence-cattle-panels-premade-or-unframed-the-highland', label: 'Brown Cattle Panel Fence' },\n    ],\n    'dark-green-hog-wire-deck-railing-panels-premade-or-unframed-the-cypress': [\n      { handle: 'hog-wire-deck-railing', label: 'Black Hog Wire Deck Railing' },\n      { handle: 'silver-hog-wire-deck-railing-hog-wire-railing-deck-panels', label: 'Silver Hog Wire Deck Railing' },\n      { handle: 'brown-hog-wire-deck-railing-panels-premade-or-unframed-the-acadia-copy', label: 'Brown Hog Wire Deck Railing' },\n    ],\n    'green-hog-wire-fence-panels-hog-panels-premade-or-unframed-the-amazon': [\n      { handle: 'hog-wire-fence-panels', label: 'Black Hog Wire Fence Panels' },\n      { handle: 'the-tough-panel-silver-hog-wire-fence-panel-gauge-6-silver-hog-wire-fence-framed-or-unframe', label: 'Silver Hog Wire Fence Panels' },\n      { handle: 'brown-hog-wire-fence-panel-gauge-6-coffee-brown-hog-panels-premade-or-unframed-the-tough-panel', label: 'Brown Hog Wire Fence Panels' },\n    ],\n    'green-cattle-panel-fence-cattle-panels-premade-or-unframed-the-galloway': [\n      { handle: 'black-cattle-panel-fence-cattle-panels-premade-or-unframed-the-angus', label: 'Black Cattle Panel Fence' },\n      { handle: 'silver-cattle-panel-fence-cattle-panels-premade-or-unframed-the-holstein', label: 'Silver Cattle Panel Fence' },\n      { handle: 'brown-cattle-panel-fence-cattle-panels-premade-or-unframed-the-highland', label: 'Brown Cattle Panel Fence' },\n    ],\n    'brown-frame-metal-privacy-fence-kit': [\n      { handle: 'black-frame-metal-privacy-fence-kit', label: 'Zero-Maintenance Privacy Fence Kit (Black Frame)' },\n    ],\n    // Aluminum privacy \u2192 ZM privacy kit (matched use case)\n    'black-aluminum-privacy-fence-panels-96-wide-x-96-high': [\n      { handle: 'black-frame-metal-privacy-fence-kit', label: 'Zero-Maintenance Privacy Fence Kit (Black Frame)' },\n      { handle: 'corrugated-metal-fence', label: 'Corrugated Metal Privacy Fence Panels' },\n    ],\n    'black-aluminum-privacy-fence-panels-69-high': [\n      { handle: 'black-frame-metal-privacy-fence-kit', label: 'Zero-Maintenance Privacy Fence Kit (Black Frame)' },\n      { handle: 'corrugated-metal-fence', label: 'Corrugated Metal Privacy Fence Panels' },\n    ],\n    'black-aluminum-privacy-fence-panels-46-high': [\n      { handle: 'black-frame-metal-privacy-fence-kit', label: 'Zero-Maintenance Privacy Fence Kit (Black Frame)' },\n      { handle: 'corrugated-metal-fence', label: 'Corrugated Metal Privacy Fence Panels' },\n    ],\n    // Aluminum screen \u2192 Black Hog Wire (the semi-private look in stock)\n    'black-aluminum-screen-fence-panels-46-high': [\n      { handle: 'hog-wire-fence-panels', label: 'Black Hog Wire Fence Panels' },\n      { handle: 'black-frame-hog-wire-fence-kit', label: 'Zero-Maintenance Hog Wire Fence Kit (Black Frame)' },\n    ],\n    'black-aluminum-screen-fence-panels-72-wide-x-69-high': [\n      { handle: 'hog-wire-fence-panels', label: 'Black Hog Wire Fence Panels' },\n      { handle: 'black-frame-hog-wire-fence-kit', label: 'Zero-Maintenance Hog Wire Fence Kit (Black Frame)' },\n    ],\n    // Aluminum gates \u2192 ZM gates\n    'black-aluminum-privacy-gate-40-wide-x-44-5-high': [\n      { handle: 'gates-for-full-metal-fence-kit', label: 'Zero-Maintenance Metal Fence Gate (Black)' },\n    ],\n    'black-aluminum-privacy-gate-40-wide-x-67-5-high': [\n      { handle: 'gates-for-full-metal-fence-kit', label: 'Zero-Maintenance Metal Fence Gate (Black)' },\n    ],\n    'black-aluminum-screen-gates-40-wide-x-44-5-high': [\n      { handle: 'gates-for-full-metal-fence-kit', label: 'Zero-Maintenance Metal Fence Gate (Black)' },\n    ],\n    // Steel board \u2192 Corrugated Metal (the in-stock metal fencing options)\n    'steel-board-fencing': [\n      { handle: 'hog-wire-fence-panels', label: 'Black Hog Wire Fence Panels' },\n      { handle: 'black-cattle-panel-fence-cattle-panels-premade-or-unframed-the-angus', label: 'Black Cattle Panel Fence' },\n    ],\n    // 316 Stainless Steel \u2014 suggest Silver / Black / Brown standard hog wire\n    '316-stainless-steel-wire-fence-panels': [\n      { handle: 'the-tough-panel-silver-hog-wire-fence-panel-gauge-6-silver-hog-wire-fence-framed-or-unframe', label: 'Silver Hog Wire Fence Panels' },\n      { handle: 'hog-wire-fence-panels', label: 'Black Hog Wire Fence Panels' },\n      { handle: 'brown-hog-wire-fence-panel-gauge-6-coffee-brown-hog-panels-premade-or-unframed-the-tough-panel', label: 'Brown Hog Wire Fence Panels' },\n    ],\n    '316-stainless-steel-deck-railings': [\n      { handle: 'silver-hog-wire-deck-railing-hog-wire-railing-deck-panels', label: 'Silver Hog Wire Deck Railing' },\n      { handle: 'hog-wire-deck-railing', label: 'Black Hog Wire Deck Railing' },\n      { handle: 'brown-hog-wire-deck-railing-panels-premade-or-unframed-the-acadia-copy', label: 'Brown Hog Wire Deck Railing' },\n    ],\n    '316-stainless-steel-wire-deck-railing': [\n      { handle: 'silver-hog-wire-deck-railing-hog-wire-railing-deck-panels', label: 'Silver Hog Wire Deck Railing' },\n      { handle: 'hog-wire-deck-railing', label: 'Black Hog Wire Deck Railing' },\n      { handle: 'brown-hog-wire-deck-railing-panels-premade-or-unframed-the-acadia-copy', label: 'Brown Hog Wire Deck Railing' },\n    ],\n  };\n\n  function isSoMesh(val) {\n    // 2026-06-10 SO RETIRED (owner: West-only volume covers stock) \u2014 original\n    // 1x1/2x6 rules preserved in docs/special-order-retirement-2026-06-10.md\n    return false;\n  }\n\n  // Per-product variant SO rules (in addition to universal mesh check).\n  // Each entry: array of { optionRegex, valueRegex }.\n  var VARIANT_SO_RULES = {}; // 2026-06-10 SO RETIRED \u2014 originals in docs/special-order-retirement-2026-06-10.md\n\n  // Returns { triggered: bool, optionName: string|null } \u2014 variant SO state.\n  // selectedOpts is a plain object: { \"Color\": \"Brown\", \"Width\": \"5\\\" x 5\\\"\", ... }\n  // Canonical in-stock (non-SO) spec per rule-only SO product \u2014 the exact\n  // option values to recommend so the customer can skip the 4-6 week wait.\n  var VARIANT_SO_CANONICAL = {\n    'metal-fence-posts-for-wood-fence': { 'Color': 'Black', 'Width': 'True 4\" x 4\"' },\n  };\n\n  function isVariantSO(productHandle, selectedOpts) {\n    // Universal mesh check\n    for (var k in selectedOpts) {\n      if (Object.prototype.hasOwnProperty.call(selectedOpts, k) && /wire.?opening|mesh/i.test(k) && isSoMesh(selectedOpts[k])) {\n        return { triggered: true, optionName: k };\n      }\n    }\n    // Per-product rules\n    var rules = VARIANT_SO_RULES[productHandle] || [];\n    for (var i = 0; i < rules.length; i++) {\n      var r = rules[i];\n      for (var key in selectedOpts) {\n        if (!Object.prototype.hasOwnProperty.call(selectedOpts, key)) continue;\n        if (r.optionRegex.test(key) && r.valueRegex.test(String(selectedOpts[key] || ''))) {\n          return { triggered: true, optionName: key };\n        }\n      }\n    }\n    return { triggered: false, optionName: null };\n  }\n\n  // Build a plain { name: value } map for a product variant from /products/{handle}.js\n  function variantOptsMap(product, variant) {\n    var optsArr = product.options || [];\n    var out = {};\n    for (var i = 0; i < optsArr.length; i++) {\n      var name = typeof optsArr[i] === 'string' ? optsArr[i] : (optsArr[i].name || '');\n      if (name) out[name] = variant['option' + (i + 1)];\n    }\n    return out;\n  }\n\n  // Find non-SO sibling variants on the same product. Match all dimensions\n  // EXCEPT the trigger option (which is the one we want to switch).\n  function findNonSoSiblings(product, currentOptsMap, triggerOptionName) {\n    return (product.variants || []).filter(function (v) {\n      if (!v.available && (v.inventory_quantity || 0) <= 0) return false;\n      var vMap = variantOptsMap(product, v);\n      if (isVariantSO(product.handle, vMap).triggered) return false;\n      for (var k in currentOptsMap) {\n        if (k === triggerOptionName) continue;\n        if (vMap[k] !== currentOptsMap[k]) return false;\n      }\n      return true;\n    });\n  }\n\n  // Canonical NON-SO variant for a rule-only SO product: current selection\n  // with the VARIANT_SO_CANONICAL option(s) overridden (e.g. Color->Black\n  // Black, Width->4\" x 4\"), every other option (e.g. Length) preserved.\n  // Returns the matching variant only if it exists, is available, and is\n  // genuinely non-SO.\n  function findCanonicalNonSo(product, currentOptsMap) {\n    var spec = (typeof VARIANT_SO_CANONICAL !== 'undefined' && VARIANT_SO_CANONICAL) ? VARIANT_SO_CANONICAL[product.handle] : null;\n    if (!spec) return null;\n    var target = {};\n    for (var k in currentOptsMap) { if (Object.prototype.hasOwnProperty.call(currentOptsMap, k)) target[k] = currentOptsMap[k]; }\n    for (var sk in spec) { if (Object.prototype.hasOwnProperty.call(spec, sk)) target[sk] = spec[sk]; }\n    var match = (product.variants || []).filter(function (v) {\n      if (!v.available && (v.inventory_quantity || 0) <= 0) return false;\n      var vMap = variantOptsMap(product, v);\n      for (var t in target) { if (Object.prototype.hasOwnProperty.call(target, t) && vMap[t] !== target[t]) return false; }\n      return true;\n    })[0];\n    if (!match) return null;\n    if (isVariantSO(product.handle, variantOptsMap(product, match)).triggered) return null;\n    return match;\n  }\n\n  function findWireOpeningSelector() {\n    // Theme renders `<select data-option-name=\"wire opening\">` per the live template\n    return document.querySelector('select[data-option-name=\"wire opening\"], select[data-option-name=\"mesh opening\"]')\n        || Array.prototype.find.call(document.querySelectorAll('select.single-option-selector'), function (s) {\n          var label = (s.dataset.optionName || s.className || '').toLowerCase();\n          return /wire.?opening|mesh/.test(label);\n        });\n  }\n\n  function findPanelSizeSelector() {\n    return document.querySelector('select[data-option-name=\"panel size\"]')\n        || Array.prototype.find.call(document.querySelectorAll('select.single-option-selector'), function (s) {\n          var label = (s.dataset.optionName || s.className || '').toLowerCase();\n          return /panel\\s*size|size/.test(label);\n        });\n  }\n\n  function findFrameSelector() {\n    return document.querySelector('select[data-option-name=\"frame type\"]')\n        || Array.prototype.find.call(document.querySelectorAll('select.single-option-selector'), function (s) {\n          var label = (s.dataset.optionName || s.className || '').toLowerCase();\n          return /frame/.test(label);\n        });\n  }\n\n  function init() {\n    var jsonEl = document.querySelector('script[data-product-json]') || document.querySelector('script[type=\"application/json\"][data-product]');\n    if (!jsonEl) return;\n    var data; try { data = JSON.parse(jsonEl.textContent); } catch (e) { return; }\n    var product = data.product || data;\n    if (!product || !product.variants) return;\n\n    var hasMeshOption = (product.options || []).some(function (o) {\n      var n = typeof o === 'string' ? o : (o.name || '');\n      return /wire.?opening|mesh/i.test(n);\n    });\n    var productIsSo = (product.tags || []).some(function (t) {\n      return String(t).toLowerCase() === 'special-order';\n    });\n    // Render if EITHER the product has mesh option (variant-level SO possible)\n    // OR the whole product is SO-tagged (aluminum/ZM/steel board/rust panels).\n    // Rule-only SO products (e.g. metal fence posts: SO by colour/width, no mesh\n    // option, no special-order tag) must NOT bail here or their VARIANT_SO_RULES\n    // never run (callout never shows; bb:so-state never fires for the estimator).\n    var hasVariantRules = !!(typeof VARIANT_SO_RULES !== 'undefined' && VARIANT_SO_RULES && VARIANT_SO_RULES[product.handle]);\n    if (!hasMeshOption && !productIsSo && !hasVariantRules) return;\n\n    // Build a lookup of variants by their full option signature\n    var variants = product.variants;\n\n    function variantMesh(v) {\n      // variant.options is an ordered array matching product.options\n      var optsArr = product.options || [];\n      for (var i = 0; i < optsArr.length; i++) {\n        var n = typeof optsArr[i] === 'string' ? optsArr[i] : (optsArr[i].name || '');\n        if (/wire.?opening|mesh/i.test(n)) return (v.options || [])[i];\n      }\n      return null;\n    }\n    function variantSize(v) {\n      var optsArr = product.options || [];\n      for (var i = 0; i < optsArr.length; i++) {\n        var n = typeof optsArr[i] === 'string' ? optsArr[i] : (optsArr[i].name || '');\n        if (/panel\\s*size|^size$/i.test(n)) return (v.options || [])[i];\n      }\n      return null;\n    }\n    function variantFrame(v) {\n      var optsArr = product.options || [];\n      for (var i = 0; i < optsArr.length; i++) {\n        var n = typeof optsArr[i] === 'string' ? optsArr[i] : (optsArr[i].name || '');\n        if (/frame/i.test(n)) return (v.options || [])[i];\n      }\n      return null;\n    }\n\n    // Build callout element\n    var callout = document.createElement('div');\n    callout.id = 'bb-mesh-swap';\n    callout.style.cssText = 'display:none;margin:14px 0;padding:14px 16px;background:#fff3cd;border-left:3px solid #f0ad4e;border-radius:3px;color:#5a3700;font-size:14px;line-height:1.45;';\n\n    // Position: prefer inserting before a wrapper that CONTAINS the ATC button (CA pattern).\n    // If no such wrapper, fall back to inserting before .quantity_block (USA pattern).\n    var atc = document.querySelector('button[data-add-to-cart], button[name=\"add\"], [data-add-to-cart]');\n    var anchor = null;\n    var submitWrap = document.querySelector('.product-form__controls-group--submit');\n    if (submitWrap && atc && submitWrap.contains(atc)) {\n      anchor = submitWrap;\n    } else {\n      var qty = document.querySelector('.quantity_block, .product-form__controls-group--quantity');\n      if (qty && atc && (qty.compareDocumentPosition(atc) & 4)) {\n        anchor = qty;\n      } else if (atc) {\n        anchor = atc;\n      }\n    }\n    if (anchor && anchor.parentNode) {\n      anchor.parentNode.insertBefore(callout, anchor);\n    } else {\n      var form = document.querySelector('form[action*=\"/cart/add\"]');\n      if (form) form.parentNode.insertBefore(callout, form);\n    }\n\n    function render() {\n      var meshSel = findWireOpeningSelector();\n      var sizeSel = findPanelSizeSelector();\n      var frameSel = findFrameSelector();\n      var curMesh = meshSel ? meshSel.value : null;\n      var curSize = sizeSel ? sizeSel.value : null;\n      var curFrame = frameSel ? frameSel.value : null;\n\n      // Build a Capitalized-keyed map of currently-selected options for the rules check.\n      var selectedOptsMap = {};\n      var allSelectors = document.querySelectorAll('select.single-option-selector');\n      for (var si = 0; si < allSelectors.length; si++) {\n        var rawName = allSelectors[si].dataset.optionName || '';\n        if (rawName) {\n          var capName = rawName.split(' ').map(function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }).join(' ');\n          selectedOptsMap[capName] = allSelectors[si].value;\n        }\n      }\n      var variantSO = isVariantSO(product.handle, selectedOptsMap);\n      var curIsSo = isSoMesh(curMesh) || variantSO.triggered;\n      var showCallout = productIsSo || curIsSo;\n      try { document.dispatchEvent(new CustomEvent('bb:so-state', { detail: { isSO: showCallout } })); } catch(_){}\n      if (!showCallout) { callout.style.display = 'none'; return; }\n\n      // Pull the date range from the BB Shipping Estimator (already on the page).\n      // The estimator stores the date range inside the header element. When an SO item\n      // is in cart, that date is already shifted out 4\u20136 weeks; otherwise we estimate\n      // by reading the rendered date and noting our 4\u20136 week offset is on top.\n      function getEstimatorDateRange() {\n        var headerEl = document.getElementById('bb-ship-header-product')\n                    || document.getElementById('bb-ship-header-cart');\n        if (!headerEl) return null;\n        var strong = headerEl.querySelector('strong');\n        return strong ? strong.textContent.trim() : null;\n      }\n\n      // Compute SO-adjusted range (production + zone transit) directly \u2014 we KNOW\n      // this is an SO context because the callout only renders when SO is triggered.\n      function computeSODateRange() {\n        /* \u26D4\u26D4 ONE OWNER FOR THE DELIVERY WINDOW \u2014 ONE LANE 2026-11-01. This held a FIFTH copy of the zone\n           ETA card: two hardcoded calendar-day tables keyed on a 47-state zone map that also\n           listed Alabama, Florida, New York, Pennsylvania, Ontario, Quebec and Newfoundland \u2014\n           regions we do not deliver to. Both the figures and the map were retired; the arithmetic\n           kept its shape, so nothing flagged it. It now reads the tables the estimator publishes,\n           which the PDP accordion also dates from.\n           \u26D4 The published window is in BUSINESS days (10-30 = 2-6 wks) and this file does\n              CALENDAR arithmetic, so convert x7/5 \u2014 the same conversion the accordion's Liquid\n              does. Re-basing transit to calendar days without converting shortens every window.\n           \u2B50 The 4-6 week SPECIAL-ORDER production offset is unchanged: that is a production\n              claim, not a freight one. */\n        var state = null;\n        try { var _g = window.BBGeo && window.BBGeo.get && window.BBGeo.get(); state = _g && (_g.state || _g.region); } catch (e) {}\n        if (!state) { try { state = sessionStorage.getItem('bb_geo_state'); } catch (e) {} }\n        if (!state) return null;\n        state = String(state).trim().toUpperCase();\n        /* a paused or never-served region gets NO date, the same rule the accordion and the\n           freight bar follow. A blank is honest; an arrival date for an address checkout\n           refuses is not. */\n        if ((window.BB_PAUSED_STATES || {})[state] || (window.BB_PAUSED_PROVINCES || {})[state]\n         || (window.BB_UNSERVED_STATES || {})[state] || (window.BB_UNSERVED_PROVINCES || {})[state]) return null;\n        var _z = (window.BB_ZONES || {})[state];\n        if (!_z) return null;\n        var _bd = (window.BB_ZONE_ETA || {})[_z] || (window.BB_ZONE_QS_ETA || {})[_z] || [10, 30];\n        if (!_bd || _bd.length < 2) return null;\n        var lo = Math.round(_bd[0] * 7 / 5) + 28, hi = Math.round(_bd[1] * 7 / 5) + 42;\n        if (!isFinite(lo) || !isFinite(hi) || hi < lo) return null;\n        var earliest = new Date(Date.now() + lo * 86400000);\n        var latest = new Date(Date.now() + hi * 86400000);\n        var M = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];\n        return M[earliest.getMonth()] + ' ' + earliest.getDate() + ' \\u2013 ' + M[latest.getMonth()] + ' ' + latest.getDate();\n      }\n\n      // If product is whole-SO (rust panels, aluminum, ZM, steel board, etc.),\n      // suggest cross-product alternatives (different colour / different fence type\n      // that's in stock).\n      if (productIsSo && !curIsSo) {\n        callout.style.display = 'block';\n        var dateRange = computeSODateRange() || getEstimatorDateRange();\n        var dateValueHtml = dateRange\n          ? '<strong style=\"color:#5a3700;\">' + dateRange + '</strong>'\n          : '<span style=\"opacity:0.6;\">calculating\u2026</span>';\n        var dateLine = '<div style=\"margin-top:6px;font-size:13px;\"><span style=\"font-weight:600;\">Estimated delivery to your zone:</span> ' + dateValueHtml + ' &middot; <a href=\"/pages/new-facilities\" style=\"color:#7a4a00;text-decoration:underline;font-size:12px;\">Why so long? &rsaquo;</a></div>';\n\n        var crossAlts = PRODUCT_ALTERNATIVES[product.handle] || [];\n        var crossAltsHtml = '';\n        if (crossAlts.length) {\n          crossAltsHtml = '<div style=\"margin-top:10px;\">' +\n            '<div style=\"font-size:12px;font-weight:600;color:#7a4a00;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.4px;\">\u26A1 Want it faster? Standard in-stock options:</div>' +\n            crossAlts.slice(0, 3).map(function (alt) {\n              return '<a href=\"/products/' + alt.handle + '\" style=\"display:inline-block;margin:4px 6px 0 0;padding:7px 13px;background:#fff;border:1.5px solid #f0ad4e;border-radius:3px;color:#7a4a00;text-decoration:none;font-weight:600;font-size:13px;\">' + alt.label + ' &rsaquo;</a>';\n            }).join('') + '</div>';\n        }\n\n        callout.innerHTML =\n          '<div><strong>\u26A0 Special Order</strong> &mdash; this product adds <strong>4&ndash;6 weeks</strong> production.</div>' +\n          dateLine +\n          crossAltsHtml +\n          '<div style=\"margin-top:10px;font-size:12px;\"><a href=\"/pages/special-order\" style=\"color:#7a4a00;text-decoration:underline;font-weight:600;\">Why this is Special Order &raquo;</a></div>';\n        return;\n      }\n\n      // Find alternative non-SO variants. If SO triggered by color/width (non-mesh rule),\n      // use findNonSoSiblings \u2014 matches all dimensions EXCEPT the trigger option.\n      var alts;\n      var canonicalAlt = findCanonicalNonSo(product, selectedOptsMap);\n      var canonicalLabel = '';\n      if (canonicalAlt) {\n        var _spec = VARIANT_SO_CANONICAL[product.handle] || {};\n        var _parts = [];\n        for (var _sk in _spec) { if (Object.prototype.hasOwnProperty.call(_spec, _sk)) _parts.push(_spec[_sk]); }\n        canonicalLabel = _parts.join(' ');\n      }\n      if (variantSO.triggered && variantSO.optionName) {\n        alts = findNonSoSiblings(product, selectedOptsMap, variantSO.optionName);\n        // Always lead with the canonical in-stock spec \u2014 covers the case where\n        // multiple options are SO so a single-option switch can't escape it.\n        if (canonicalAlt) {\n          alts = [canonicalAlt].concat(alts.filter(function (v) { return v.id !== canonicalAlt.id; }));\n        }\n      } else {\n        // Mesh-level SO \u2014 original logic\n        alts = variants.filter(function (v) {\n          if (!v.available && v.inventory_quantity <= 0 && v.inventory_policy !== 'continue') return false;\n          var m = variantMesh(v);\n          if (isSoMesh(m)) return false;\n          if (curSize && variantSize(v) !== curSize) return false;\n          if (curFrame && variantFrame(v) !== curFrame) return false;\n          return true;\n        });\n      }\n\n      // Sort: closest-pattern first.\n      // If current is 1\"\u00D71\" (tightest mesh): prefer 2\u00D72 first, then 4\u00D74.\n      // If current is 2\"\u00D76\" (rectangular): prefer 4\u00D74 first (most-similar visually), then 2\u00D72.\n      function meshPriority(meshVal) {\n        if (/2\\s*[\"'\u2033\u201D]?\\s*[x\u00D7]\\s*2/i.test(meshVal)) return 1;\n        if (/4\\s*[\"'\u2033\u201D]?\\s*[x\u00D7]\\s*4/i.test(meshVal)) return 2;\n        return 9;\n      }\n      var preferFineFirst = /\\b1\\s*[\"'\u2033\u201D]?\\s*[x\u00D7]\\s*1\\b/i.test(curMesh || '');\n      alts.sort(function (a, b) {\n        var pa = meshPriority(variantMesh(a));\n        var pb = meshPriority(variantMesh(b));\n        if (preferFineFirst) return pa - pb;          // 1\u00D71 \u2192 2\u00D72 first\n        return pb - pa;                                // 2\u00D76 \u2192 4\u00D74 first\n      });\n\n      callout.style.display = 'block';\n      var altsHtml = '';\n      if (alts.length) {\n        // For non-mesh SO triggers (color/width), label the alt by its value on the trigger option.\n        var triggerName = variantSO.triggered && variantSO.optionName ? variantSO.optionName : null;\n        altsHtml = '<div style=\"margin-top:10px;\">' +\n          '<div style=\"font-size:12px;font-weight:600;color:#7a4a00;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.4px;\">\u26A1 Want it faster? Switch to:</div>' +\n          alts.slice(0, 3).map(function (v) {\n            var altLabel;\n            if (canonicalAlt && v.id === canonicalAlt.id) {\n              altLabel = canonicalLabel + ' \\u2014 in stock, skip the 4\\u20136 week wait';\n            } else if (triggerName) {\n              var vMap = variantOptsMap(product, v);\n              altLabel = vMap[triggerName] + ' ' + triggerName.toLowerCase() + ' \u2192 skip the 6\u20138 week wait';\n            } else {\n              altLabel = variantMesh(v) + ' mesh \u2192 skip the 6\u20138 week wait';\n            }\n            return '<a href=\"?variant=' + v.id + '\" style=\"display:inline-block;margin:4px 6px 0 0;padding:7px 13px;background:#fff;border:1.5px solid #f0ad4e;border-radius:3px;color:#7a4a00;text-decoration:none;font-weight:600;font-size:13px;\">' + altLabel + '</a>';\n          }).join('') + '</div>';\n      }\n\n      var dateRange = computeSODateRange() || getEstimatorDateRange();\n      var dateValueHtml = dateRange\n        ? '<strong style=\"color:#5a3700;\">' + dateRange + '</strong>'\n        : '<span style=\"opacity:0.6;\">calculating\u2026</span>';\n      var dateLine = '<div style=\"margin-top:6px;font-size:13px;\"><span style=\"font-weight:600;\">Estimated delivery to your zone:</span> ' + dateValueHtml + ' &middot; <a href=\"/pages/new-facilities\" style=\"color:#7a4a00;text-decoration:underline;font-size:12px;\">Why so long? &rsaquo;</a></div>';\n\n      callout.innerHTML =\n        '<div><strong>\u26A0 Special Order</strong> &mdash; ' + (curMesh || 'this') + ' mesh adds <strong>4&ndash;6 weeks</strong> production.</div>' +\n        dateLine +\n        altsHtml +\n        '<div style=\"margin-top:10px;font-size:12px;\"><a href=\"/pages/special-order\" style=\"color:#7a4a00;text-decoration:underline;\">Why some products are Special Order &raquo;</a></div>';\n    }\n\n    // Initial render\n    render();\n\n    // Listen for native select changes on every option selector\n    var watched = [findWireOpeningSelector(), findPanelSizeSelector(), findFrameSelector()].filter(Boolean);\n    watched.forEach(function (sel) { sel.addEventListener('change', render); });\n\n    // Also listen for theme-dispatched variant change event\n    var section = document.querySelector('.js-product') || document.querySelector('.product-template');\n    if (section) section.addEventListener('on:variant:change', render);\n\n    // Re-render whenever the estimator's date range mutates (cart change, zone change, etc.)\n    var estContainer = document.getElementById('bb-ship-est-product');\n    if (estContainer && typeof MutationObserver !== 'undefined') {\n      var mo = new MutationObserver(function () { render(); });\n      mo.observe(estContainer, { childList: true, subtree: true, characterData: true });\n    } else if (typeof MutationObserver !== 'undefined') {\n      // Estimator not yet on page \u2014 observe body for it to appear, then attach\n      var bodyMo = new MutationObserver(function () {\n        var est = document.getElementById('bb-ship-est-product');\n        if (est) {\n          new MutationObserver(function () { render(); }).observe(est, { childList: true, subtree: true, characterData: true });\n          bodyMo.disconnect();\n        }\n      });\n      bodyMo.observe(document.body, { childList: true, subtree: true });\n    }\n    // Safety net: retry render every 700ms for first 5 seconds to pick up late estimator updates\n    var retries = 0;\n    var retryTimer = setInterval(function () {\n      retries++;\n      render();\n      if (retries >= 7) clearInterval(retryTimer);\n    }, 700);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
