{
  "version": 3,
  "sources": ["/cdn/shop/t/11/assets/bb-price-first.js?b=1794152931873"],
  "sourcesContent": ["/* bb-price-first.js \u2014 set the order of the PDP buy column.\n *\n * Owner 2026-11-07 supplied a reference layout (EZ-Lynk product card): title, then stars, then a\n * quiet meta row, then the price immediately above the call to action. The price sits LOW there,\n * next to the decision, not at the top of the column. This reproduces that order:\n *\n *     1  title            <h1>\n *     2  rating           \u2605 85 reviews\n *     3  price            .product__price\n *     4  meta             the delivery chip (#bb-dline)\n *     5  options + ATC    left where the theme puts them\n *\n * The reference puts an inert meta row (brand, part number) above the price. Ours is not inert \u2014\n * it carries $49 \u2014 so above the price it stacked two numbers and the delivery read as the\n * headline. Price leads; the chip qualifies it underneath. Owner 2026-11-07.\n *\n * \u26A0\uFE0F STILL AN EXPERIMENT, AND STILL DOM-ORDER. If it stays it belongs in the Liquid: reordering\n *    after first paint is a visible jump on a slow connection. Delete this one file and the\n *    theme's own order returns exactly.\n * \u26D4 MOVES ONLY. Nothing is created, cloned or removed.\n * \u26D4 NEVER append into .product__price's flex row \u2014 doing that re-centred the price once and\n *    `justify-content: flex-start !important` would not pin it back.\n */\n(function () {\n  'use strict';\n\n  function run() {\n    try {\n      var price = document.querySelector('.product__price');\n      if (!price) return;\n      var scope = price.closest('form[action*=\"cart\"]') || price.parentElement;\n      if (!scope) return;\n\n      var h1 = scope.querySelector('h1');\n      if (!h1) return;\n\n      /* The rating block that sits in the buy column, not the header trust strip.\n         \u26D4\u26D4 USA WRAPS IT AND CA DOES NOT. On CA the Judge.me badge is a direct sibling of the\n         H1; on USA it lives inside a <div class=\"shopify-block\"> app wrapper, so a\n         `parentNode === h1.parentNode` test skipped it and the reviews stayed below the price.\n         Climb to whichever ANCESTOR is a sibling of the H1 and move that. */\n      /* \u26D4\u26D4 2026-11-08: THIS SELECTOR USED TO EAT THE ENTIRE JUDGE.ME REVIEW WIDGET.\n         '[class*=review]' matches .jdgm-rev-widg just as happily as the compact star badge, and\n         the climb below then moved the WHOLE widget above the H1 \u2014 owner: \"the judge me reviews\n         jump up and everything gets moved under them\". It needed three things at once to show:\n         a USA product, ZERO product reviews (so the real badge is absent), and a variant click\n         (so the function re-runs after the widget has rendered).\n         \u2B50 A SUBSTRING MATCH ON \"review\" CANNOT TELL A 30px BADGE FROM A 4,000px WIDGET. Ask what\n            the element IS \u2014 compact, short, and not itself a review widget. */\n      var WIDGETISH = /jdgm-rev-widg|jdgm-widget|jdgm-all-reviews|judgeme_product_reviews|jdgm-carousel|jdgm-revs-tab/;\n      var MAX_BADGE_H = 120;      /* a star badge is one line; a widget is a page */\n      var MAX_BADGE_TXT = 80;     /* \"4.8 \u2605\u2605\u2605\u2605\u2605 187 reviews\" is well under this */\n\n      function badgeOk(el, maxH, maxTxt) {\n        if (!el) return false;\n        var cn = '';\n        try { cn = typeof el.className === 'string' ? el.className : ''; } catch (_) {}\n        if (WIDGETISH.test(cn)) return false;\n        if (el.querySelector && el.querySelector('.jdgm-rev-widg, .jdgm-widget, #judgeme_product_reviews, .jdgm-all-reviews-page')) return false;\n        if (el.getBoundingClientRect().height > maxH) return false;\n        if ((el.textContent || '').trim().length > maxTxt) return false;\n        return true;\n      }\n\n      var rating = null;\n      /* \u2B50 the compact Judge.me badge BY NAME first \u2014 when it exists it is always the right\n         answer, and naming it means the fuzzy scan below is only ever a fallback */\n      var cands = [];\n      var pref = scope.querySelectorAll('.jdgm-prev-badge, .jdgm-preview-badge, .jdgm-widget-prev-badge');\n      for (var p = 0; p < pref.length; p++) cands.push(pref[p]);\n      var fuzzy = scope.querySelectorAll('[class*=rating], [class*=review], [class*=stars]');\n      for (var q = 0; q < fuzzy.length; q++) cands.push(fuzzy[q]);\n\n      for (var i = 0; i < cands.length; i++) {\n        var c = cands[i];\n        if (c.offsetParent === null) continue;\n        if (c.getBoundingClientRect().height === 0) continue;\n        if (c.contains(h1) || c.contains(price)) continue;\n        if (!/\\d/.test(c.textContent || '')) continue;      /* \"Reviews\" accordion header is not it */\n        if (!badgeOk(c, MAX_BADGE_H, MAX_BADGE_TXT)) continue;\n        var node = c;\n        while (node && node.parentNode !== h1.parentNode) node = node.parentNode;\n        if (!node || node === h1 || node.contains(price)) continue;\n        /* \u26D4 THE CLIMB IS THE DANGEROUS STEP \u2014 it can land on a container far larger than the\n           badge that matched. Re-test the thing actually about to MOVE, not the thing matched.\n           A little more headroom here: the wrapper legitimately adds padding around the badge. */\n        if (!badgeOk(node, MAX_BADGE_H + 60, MAX_BADGE_TXT + 60)) continue;\n        rating = node;\n        break;\n      }\n\n      var chip = document.getElementById('bb-dline');\n\n      /* \u2B50 owner 2026-11-07: reviews UNDER the product title (\"PUT REVIEWS UNDER Black Hog Wire\n         Fence Panels / under the product title\"). Earlier in the same session they were moved\n         ABOVE it; this supersedes that.\n         \u26D4 Insert before h1.nextSibling, NOT appendChild \u2014 the parent also holds the price row\n            and the chip, so appending would drop the stars to the bottom of the whole block. */\n      /* \u26D4 LAST LINE OF DEFENCE. If anything above ever resolves a big block again, do not move\n         it \u2014 a wrong rating position is a cosmetic miss, a relocated review widget buries the\n         entire buy box. Fail by doing NOTHING, never by rearranging the page. */\n      if (rating && rating.parentNode === h1.parentNode &&\n          rating.getBoundingClientRect().height <= 180 &&\n          !rating.querySelector('.jdgm-rev-widg, .jdgm-widget, #judgeme_product_reviews')) {\n        h1.parentNode.insertBefore(rating, h1);\n      }\n\n      /* USA carries a SKU line above the title that CA does not. Owner 2026-11-07, on the\n         reference layout's part-number row: \"these we don't need\". It is moved below the buy\n         block rather than deleted \u2014 the text stays on the page and in the DOM for anything\n         that reads it, it just stops being the first thing above the product name. */\n      var sku = null;\n      for (var s = 0; s < h1.parentNode.children.length; s++) {\n        var k = h1.parentNode.children[s];\n        if (/\\bproduct_sku\\b/.test(k.className || '') || /^\\s*SKU[:\\s]/i.test(k.textContent || '')) { sku = k; break; }\n      }\n\n      /* then price, then the delivery chip, each after the one before it */\n      /* \u26D4 THE ANCHOR FOLLOWS THE RATING'S POSITION. With reviews UNDER the title the chain\n         must start at the RATING, or the price is inserted directly after the h1 and lands\n         between the heading and the stars. (When reviews sat above the title this was h1 \u2014\n         changing one without the other is what breaks the order.) */\n      /* stars sit ABOVE the title again, so the chain starts at the H1 \u2014 anchoring to the\n         rating would drop the price between the stars and the heading. */\n      var anchor = h1;\n      /* \u26D4 THE SKU IS NOT HIDDEN GLOBALLY. Owner 2026-11-07: it lives lower on the page on\n         purpose, so a class-wide rule would have taken that copy too. Only this one \u2014 the\n         duplicate sitting beside the title \u2014 is hidden, and only on the element itself. */\n      if (sku) { try { sku.style.display = 'none'; } catch (_) {} }\n\n      [price, chip].forEach(function (el) {\n        if (!el || el === anchor) return;\n        if (anchor.parentNode !== el.parentNode) {\n          /* different parents \u2014 move it alongside the anchor so the order is real, not visual */\n          anchor.parentNode.insertBefore(el, anchor.nextSibling);\n        } else {\n          anchor.parentNode.insertBefore(el, anchor.nextSibling);\n        }\n        anchor = el;\n      });\n\n      /* \u2B50 PRICE + CHIP IN THEIR OWN FLEX ROW.\n         `vertical-align: middle` on two inline boxes of very different heights does NOT centre\n         them against each other \u2014 it aligns each to the line box, so the small chip floated\n         above the big price. A dedicated flex row with `align-items: center` does centre them,\n         and because it is OUR wrapper rather than the theme's price row, adding a child cannot\n         re-centre the price the way appending into `.price` did. It also owns the gap down to\n         the option selectors in one place. */\n      if (chip && price.parentNode) {\n        var row = document.getElementById('bb-priceline');\n        if (!row) {\n          row = document.createElement('div');\n          row.id = 'bb-priceline';\n          price.parentNode.insertBefore(row, price);\n        } else if (row.parentNode !== price.parentNode) {\n          price.parentNode.insertBefore(row, price);\n        }\n        /* a bracketed aside follows what it qualifies: price first, then the chip. */\n        if (price.parentNode !== row) row.appendChild(price);\n        if (chip.parentNode !== row) row.appendChild(chip);\n\n        /* \u2B50 owner 2026-11-07: \"put the review stars under the [delivery] line\". The stars have\n           to join this flex row, because the chip lives INSIDE it \u2014 left outside, the stars\n           could only ever sit above the whole row or below it, never between the chip and the\n           price. Visual order is then set by `order` in CSS: chip, stars, price.\n           \u26D4 Moving the rating here is a DOM move, so it must be idempotent \u2014 re-running on a\n              variant change would otherwise keep re-appending and walk it down the row. */\n        /* \u26D4 the stars no longer join this row \u2014 owner moved them back above the title. */\n      }\n\n      /* owner 2026-11-07: no \"Price\" label and no currency code on the figure. The attribute\n         is cleared rather than left behind so nothing can style off a stale value. */\n      try { price.removeAttribute('data-cur'); } catch (_) {}\n\n      /* \u26D4\u26D4 USA AND CA RENDER THE UNIT DIFFERENTLY. Both themes compute the same value and both\n         put it on the element as `data-unit` (\"/per Panel\"), but only USA prints it, as\n         <span class=\"price-unit-label\">. CA carries the attribute and renders nothing \u2014 no span,\n         no pseudo-element \u2014 so the descriptor was simply missing there.\n         A CSS ::after would DOUBLE it on USA, so instead create the same span CA is missing.\n         Both stores then have identical markup and one rule styles both. */\n      try {\n        /* owner 2026-11-07: the per-unit descriptor is OFF. The span is no longer created on\n           CA, and the native USA one is hidden inline so no stylesheet can bring it back. */\n        /* owner 2026-11-07: the unit descriptor is replaced by the CURRENCY CODE.\n           \u26D4 Set as an ATTRIBUTE rendered by CSS attr(), never by rewriting the price text \u2014\n           the text-rewriting version double-applied on a re-render and put '112.9912.99 CAD'\n           on the live store. An attribute cannot accumulate. */\n        try {\n          var cur = (window.Shopify && window.Shopify.currency && window.Shopify.currency.active) || '';\n          if (cur) price.setAttribute('data-cur', cur); else price.removeAttribute('data-cur');\n      /* \u26D4\u26D4 ON SALE THE CONTAINER'S ::after LANDS AFTER THE \"SALE\" BADGE. Owner 2026-11-08:\n         \"USD should sit by price\". A pseudo-element is generated as the LAST child, so this\n         cannot be solved with `order` or any other CSS \u2014 the code has to ride an element that\n         already sits beside the figure. Mirror it onto the sale figure; the stylesheet renders\n         that copy and suppresses the container's while a sale is on.\n         \u26D4 Clear stale copies first: a variant coming OFF sale must not leave a second code. */\n      try {\n        var _stale = price.querySelectorAll('[data-cur-at]');\n        for (var _z = 0; _z < _stale.length; _z++) _stale[_z].removeAttribute('data-cur-at');\n        var _saleFig = price.querySelector('.price--on-sale .price__sale .price-item--sale');\n        if (cur && _saleFig) _saleFig.setAttribute('data-cur-at', cur);\n      } catch (_) {}\n          price.style.setProperty('gap', '0', 'important');\n          price.style.setProperty('column-gap', '0', 'important');\n          /* \u26D4 currentColor on .product__price resolves to the CONTAINER colour (dark grey),\n             not the orange, which is painted deeper on .price-item--regular. Read the real\n             colour off that element and hand it to the ::after through a custom property, so\n             the currency always matches the figure even if the brand colour changes. */\n          var pi = price.querySelector('.price-item--regular') || price.querySelector('.price-item');\n          if (pi) {\n            var pc = getComputedStyle(pi);\n            var paint = pc.webkitTextFillColor && pc.webkitTextFillColor !== 'rgba(0, 0, 0, 0)' ? pc.webkitTextFillColor : pc.color;\n            if (paint) price.style.setProperty('--bb-price-colour', paint);\n          }\n        } catch (_) {}\n\n        var existingUnit = price.querySelectorAll('.price-unit-label');\n        for (var q = 0; q < existingUnit.length; q++) {\n          existingUnit[q].style.setProperty('display', 'none', 'important');\n        }\n      } catch (_) {}\n\n      /* owner 2026-11-07: '$ 39.49' -> '$39.49'. The space is a literal character in the money\n         text (the shop money format), not CSS, so it has to be edited in the text node.\n         \u26D4 IDEMPOTENT BY CONSTRUCTION: it only ever deletes whitespace that sits between a $\n         and a digit, so a second pass finds nothing to do. The earlier currency-suffix bug\n         appended on every run and produced \"112.9912.99 CAD\" on live \u2014 this cannot. */\n      try {\n        var tw = document.createTreeWalker(price, NodeFilter.SHOW_TEXT, null, false);\n        var tn, edits = [];\n        while ((tn = tw.nextNode())) {\n          var v = tn.nodeValue || '';\n          /* \u26D4\u26D4 THIS LINE WAS WRITTEN THROUGH `node -e` AND THE SHELL ATE EVERY BACKSLASH:\n             `\\$ \\s \\d` arrived as `$ <nbsp> s d`, a pattern that can never match, so the space\n             removal silently did nothing. Edit this file directly, never through a shell\n             one-liner. */\n          if (/\\$[\\s\\u00A0]+\\d/.test(v)) {\n            edits.push([tn, v.replace(/(\\$)[\\s\\u00A0]+(?=\\d)/g, '$1')]);\n          }\n        }\n        for (var e2 = 0; e2 < edits.length; e2++) edits[e2][0].nodeValue = edits[e2][1];\n      } catch (_) {}\n\n      /* \u26D4\u26D4 STOP FIGHTING THE CASCADE. The unit label stayed orange through TWO !important\n         colour rules because the theme paints with -webkit-text-fill-color, and the zip box\n         stayed 44px because min-height beat height. Inline styles with priority beat every\n         stylesheet rule, so set them on the elements and stop guessing at specificity. */\n      try {\n        var BLACK = '#15161a';\n\n        var dl = document.getElementById('bb-dline');\n        if (dl) {\n          var kids = [dl].concat(Array.prototype.slice.call(dl.querySelectorAll('*')));\n          for (var k = 0; k < kids.length; k++) {\n            /* \u26D4 owner 2026-11-07 tried the figure and day numbers in orange and reverted it\n               the same hour \u2014 \"go back to black it conflicts with price\". The price already\n               carries the brand orange, so a second one on the same row splits the focus and\n               neither figure wins. .bb-dline__amt and\n               .bb-dline__d are therefore NOT skipped: they fall through and get painted black\n               with everything else. */\n            if (kids[k].classList && (kids[k].classList.contains('bb-dline__ico') ||\n                kids[k].classList.contains('bb-dline__go'))) continue;   /* white on black \u2014 never repaint */\n            kids[k].style.setProperty('color', BLACK, 'important');\n            kids[k].style.setProperty('-webkit-text-fill-color', BLACK, 'important');\n            kids[k].style.setProperty('opacity', '1', 'important');\n          }\n          dl.style.setProperty('height', 'auto', 'important');\n          dl.style.setProperty('min-height', '24px', 'important');\n          dl.style.setProperty('align-self', 'baseline', 'important');\n          if (row) {\n            row.style.setProperty('align-items', 'baseline', 'important');\n            row.style.setProperty('min-height', '34px', 'important');\n            row.style.setProperty('column-gap', '8px', 'important');\n          }\n          /* \u26D4 THE BRACKETS ARE GONE \u2014 there is ONE em dash, so brks[0] IS brks[last] and it\n             took BOTH negative margins, clamping it against the truck. An inline !important\n             also silently beat the 7px stylesheet fix. The CSS owns the dash now. */\n          var zp = document.getElementById('bb-dline-zip');\n          if (zp) {\n            /* \u2B50\u2B50 owner 2026-11-07: \"When I click the postal entry it zooms in and throws\n               things off\". iOS Safari zooms the viewport whenever a focused input computes\n               UNDER 16px and never zooms back \u2014 the box was 12.5px, so it fired on every tap.\n               \u26D4 A stylesheet rule cannot fix this: the line below used to pin 12.5px inline\n                  with !important, which beats any media query. That is why the CSS attempt\n                  earlier today changed nothing.\n               \u26D4 Narrow viewports only. Desktop does not zoom, and 16px there would tower over\n                  the 13.5px lead beside it. */\n            var _narrow = !!(window.matchMedia && window.matchMedia('(max-width: 749px)').matches);\n            zp.style.setProperty('height', _narrow ? '26px' : '24px', 'important');\n            zp.style.setProperty('min-height', _narrow ? '26px' : '24px', 'important');\n            zp.style.setProperty('font-size', _narrow ? '16px' : '12.5px', 'important');\n            if (_narrow) zp.style.setProperty('width', '96px', 'important');\n          }\n          var gb = dl.querySelector('.bb-dline__go');\n          if (gb) {\n            /* the Go button matches whatever height the ZIP box just took, or the two sit\n               on different baselines the moment the box grows for the zoom fix */\n            var _gn = !!(window.matchMedia && window.matchMedia('(max-width: 749px)').matches);\n            gb.style.setProperty('height', _gn ? '26px' : '24px', 'important');\n            gb.style.setProperty('min-height', _gn ? '26px' : '24px', 'important');\n            gb.style.setProperty('color', '#fff', 'important');\n            gb.style.setProperty('-webkit-text-fill-color', '#fff', 'important');\n          }\n        }\n      } catch (_) {}\n\n      /* \u2B50 CENTRE THE CHIP ON THE PRICE GLYPHS, MEASURED. Box-centring rode high on mobile\n         and baseline sat low, because the two text sizes differ a lot. Measuring the actual\n         ink and translating the difference is exact at any font size. */\n      /* mark an empty video block so CSS can collapse it; :has() support is not universal and\n         a class is unambiguous. Only when there is genuinely no iframe or video inside. */\n      try {\n        var cvs = document.querySelectorAll('.product-single__meta .custom_video');\n        for (var cv = 0; cv < cvs.length; cv++) {\n          var hasMedia = !!cvs[cv].querySelector('iframe, video');\n          cvs[cv].classList.toggle('bb-empty', !hasMedia);\n        }\n      } catch (_) {}\n\n      /* \u2B50 owner 2026-11-07: \"needs to move down ... sit on the same level as USD ... so its\n         not center but down on the same level\".\n         The row is ALREADY align-items:baseline, which is exactly the alignment asked for \u2014\n         USD sits on the price baseline, so a baseline-aligned chip sits level with it. What\n         made the chip look centred was centreChipOnPrice() LIFTING it to the money glyph's\n         vertical centre afterwards. So the fix is to stop lifting it, not to add an offset.\n         \u26D4 Clear any transform a previous build left on the element, or the old lift survives\n            in a cached page and this looks like it did nothing. */\n      /* \u2B50 CENTRED ON THE PRICE GLYPHS. Owner 2026-11-07, in order: centred -> \"sit on the same\n         level as USD\" (centring removed, baseline) -> \"center this back\" (restored).\n         \u26D4 Clear the inline transform:none the baseline version left behind, or the chip stays\n            pinned flat in a cached page and this looks like it did nothing. */\n      try {\n        var _chip = document.getElementById('bb-dline');\n        if (_chip) _chip.style.removeProperty('transform');\n      } catch (_) {}\n      /* \u2B50 BASELINE EVERYWHERE NOW (owner 2026-11-07: desktop first, then \"on mobile do the same\n         desktop thing where it sits on the same line as the currency\").\n         The row is align-items:baseline, so the chip lands level with USD by doing NOTHING.\n         centreChipOnPrice() is left DEFINED but UNCALLED \u2014 it measured the money glyph centre\n         on every render, variant change and resize to produce a lift that is no longer wanted.\n         \u26D4 The inline transform is cleared just above, so a cached page cannot keep an old\n            offset and make this look like it did nothing. */\n\n      price.dataset.bbFirst = '1';\n    } catch (e) {\n      if (window.console) console.warn('[bb-price-first] stood down:', e && e.message);\n    }\n  }\n\n  function centreChipOnPrice(price) {\n    var chip = document.getElementById('bb-dline');\n    if (!chip || !price) return;\n    /* clear any previous offset before measuring, or the correction compounds */\n    chip.style.transform = '';\n\n    /* \u2B50 DESKTOP SITS ON THE BASELINE, MOBILE STAYS CENTRED (owner 2026-11-07: \"on desktop this\n       has to sit down ... on the same line as USD\").\n       The row is align-items:baseline, so doing NOTHING puts the chip level with USD \u2014 which is\n       what desktop wants. The glyph-centre lift below exists because at phone sizes the price\n       is proportionally much larger than the chip and a baseline chip reads as if it has\n       slipped. So: lift on mobile, leave alone on desktop.\n       \u26D4 The transform is cleared above before this returns, so switching widths cannot leave a\n          stale offset behind. */\n    if ((window.innerWidth || 0) > 600) return;\n    var walker = document.createTreeWalker(price, NodeFilter.SHOW_TEXT, null, false);\n    var node, moneyNode = null;\n    while ((node = walker.nextNode())) {\n      if (/\\$\\s?\\d/.test(node.nodeValue || '')) { moneyNode = node; break; }\n    }\n    if (!moneyNode) return;\n    var range = document.createRange();\n    range.selectNodeContents(moneyNode);\n    var g = range.getBoundingClientRect();\n    var c = chip.getBoundingClientRect();\n    if (!g.height || !c.height) return;\n    var delta = ((g.top + g.bottom) / 2) - ((c.top + c.bottom) / 2);\n    /* a sane bound: this is a nudge, never a layout move */\n    if (Math.abs(delta) > 24) return;\n    chip.style.transform = 'translateY(' + delta.toFixed(2) + 'px)';\n  }\n\n  /* re-centre when the viewport changes, since the price font size changes with it */\n  var __bbRz;\n  window.addEventListener('resize', function () {\n    clearTimeout(__bbRz);\n    __bbRz = setTimeout(run, 180);\n  });\n\n  function boot() {\n    run();\n    /* the delivery chip is built by bb-delivery-line.js, which may finish after this runs \u2014\n       re-apply once it appears, then stop watching. */\n    var tries = 0;\n    var t = setInterval(function () {\n      if (document.getElementById('bb-dline') || ++tries > 20) { run(); clearInterval(t); }\n    }, 250);\n  }\n\n  /* \u26D4\u26D4 THE THEME REPAINTS THE PRICE ON EVERY VARIANT CHANGE, writing the money format\n     back in with its space (\"$ 609.99\"). A one-shot cleanup at load is not enough, so re-run\n     the whole pass after each change. Delays cover the theme updating asynchronously. */\n  if (!document.__bbPolishHooked) {\n    document.__bbPolishHooked = true;\n    document.addEventListener('change', function (e) {\n      if (!e.target || e.target.tagName !== 'SELECT') return;\n      [60, 250, 600].forEach(function (ms) { setTimeout(run, ms); });\n    });\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n  document.addEventListener('shopify:section:load', run);\n})();\n"],
  "mappings": "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",
  "names": []
}
