{
  "version": 3,
  "sources": ["/cdn/shop/t/71/assets/global.js?abi_w10_popup=t_fb832223_20260820"],
  "sourcesContent": ["function getFocusableElements(container) {\n  return Array.from(\n    container.querySelectorAll(\n      \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\n    )\n  );\n}\n\nclass SectionId {\n  static #separator = '__';\n\n  // for a qualified section id (e.g. 'template--22224696705326__main'), return just the section id (e.g. 'template--22224696705326')\n  static parseId(qualifiedSectionId) {\n    return qualifiedSectionId.split(SectionId.#separator)[0];\n  }\n\n  // for a qualified section id (e.g. 'template--22224696705326__main'), return just the section name (e.g. 'main')\n  static parseSectionName(qualifiedSectionId) {\n    return qualifiedSectionId.split(SectionId.#separator)[1];\n  }\n\n  // for a section id (e.g. 'template--22224696705326') and a section name (e.g. 'recommended-products'), return a qualified section id (e.g. 'template--22224696705326__recommended-products')\n  static getIdForSection(sectionId, sectionName) {\n    return `${sectionId}${SectionId.#separator}${sectionName}`;\n  }\n}\n\nclass HTMLUpdateUtility {\n  /**\n   * Used to swap an HTML node with a new node.\n   * The new node is inserted as a previous sibling to the old node, the old node is hidden, and then the old node is removed.\n   *\n   * The function currently uses a double buffer approach, but this should be replaced by a view transition once it is more widely supported https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n   */\n  static viewTransition(oldNode, newContent, preProcessCallbacks = [], postProcessCallbacks = []) {\n    preProcessCallbacks?.forEach((callback) => callback(newContent));\n\n    const newNodeWrapper = document.createElement('div');\n    HTMLUpdateUtility.setInnerHTML(newNodeWrapper, newContent.outerHTML);\n    const newNode = newNodeWrapper.firstChild;\n\n    // dedupe IDs\n    const uniqueKey = Date.now();\n    oldNode.querySelectorAll('[id], [form]').forEach((element) => {\n      element.id && (element.id = `${element.id}-${uniqueKey}`);\n      element.form && element.setAttribute('form', `${element.form.getAttribute('id')}-${uniqueKey}`);\n    });\n\n    oldNode.parentNode.insertBefore(newNode, oldNode);\n    oldNode.style.display = 'none';\n\n    postProcessCallbacks?.forEach((callback) => callback(newNode));\n\n    setTimeout(() => oldNode.remove(), 500);\n  }\n\n  // Sets inner HTML and reinjects the script tags to allow execution. By default, scripts are disabled when using element.innerHTML.\n  static setInnerHTML(element, html) {\n    element.innerHTML = html;\n    element.querySelectorAll('script').forEach((oldScriptTag) => {\n      const newScriptTag = document.createElement('script');\n      Array.from(oldScriptTag.attributes).forEach((attribute) => {\n        newScriptTag.setAttribute(attribute.name, attribute.value);\n      });\n      newScriptTag.appendChild(document.createTextNode(oldScriptTag.innerHTML));\n      oldScriptTag.parentNode.replaceChild(newScriptTag, oldScriptTag);\n    });\n  }\n}\n\ndocument.querySelectorAll('[id^=\"Details-\"] summary').forEach((summary) => {\n  summary.setAttribute('role', 'button');\n  summary.setAttribute('aria-expanded', summary.parentNode.hasAttribute('open'));\n\n  if (summary.nextElementSibling.getAttribute('id')) {\n    summary.setAttribute('aria-controls', summary.nextElementSibling.id);\n  }\n\n  summary.addEventListener('click', (event) => {\n    event.currentTarget.setAttribute('aria-expanded', !event.currentTarget.closest('details').hasAttribute('open'));\n  });\n\n  if (summary.closest('header-drawer, menu-drawer')) return;\n  summary.parentElement.addEventListener('keyup', onKeyUpEscape);\n});\n\nconst trapFocusHandlers = {};\n\nfunction trapFocus(container, elementToFocus = container) {\n  var elements = getFocusableElements(container);\n  var first = elements[0];\n  var last = elements[elements.length - 1];\n\n  removeTrapFocus();\n\n  trapFocusHandlers.focusin = (event) => {\n    if (event.target !== container && event.target !== last && event.target !== first) return;\n\n    document.addEventListener('keydown', trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.focusout = function () {\n    document.removeEventListener('keydown', trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.keydown = function (event) {\n    if (event.code.toUpperCase() !== 'TAB') return; // If not TAB key\n    // On the last focusable element and tab forward, focus the first element.\n    if (event.target === last && !event.shiftKey) {\n      event.preventDefault();\n      first.focus();\n    }\n\n    //  On the first focusable element and tab backward, focus the last element.\n    if ((event.target === container || event.target === first) && event.shiftKey) {\n      event.preventDefault();\n      last.focus();\n    }\n  };\n\n  document.addEventListener('focusout', trapFocusHandlers.focusout);\n  document.addEventListener('focusin', trapFocusHandlers.focusin);\n\n  elementToFocus.focus();\n\n  if (\n    elementToFocus.tagName === 'INPUT' &&\n    ['search', 'text', 'email', 'url'].includes(elementToFocus.type) &&\n    elementToFocus.value\n  ) {\n    elementToFocus.setSelectionRange(0, elementToFocus.value.length);\n  }\n}\n\n// Here run the querySelector to figure out if the browser supports :focus-visible or not and run code based on it.\ntry {\n  document.querySelector(':focus-visible');\n} catch (e) {\n  focusVisiblePolyfill();\n}\n\nfunction focusVisiblePolyfill() {\n  const navKeys = [\n    'ARROWUP',\n    'ARROWDOWN',\n    'ARROWLEFT',\n    'ARROWRIGHT',\n    'TAB',\n    'ENTER',\n    'SPACE',\n    'ESCAPE',\n    'HOME',\n    'END',\n    'PAGEUP',\n    'PAGEDOWN',\n  ];\n  let currentFocusedElement = null;\n  let mouseClick = null;\n\n  window.addEventListener('keydown', (event) => {\n    if (navKeys.includes(event.code.toUpperCase())) {\n      mouseClick = false;\n    }\n  });\n\n  window.addEventListener('mousedown', (event) => {\n    mouseClick = true;\n  });\n\n  window.addEventListener(\n    'focus',\n    () => {\n      if (currentFocusedElement) currentFocusedElement.classList.remove('focused');\n\n      if (mouseClick) return;\n\n      currentFocusedElement = document.activeElement;\n      currentFocusedElement.classList.add('focused');\n    },\n    true\n  );\n}\n\nfunction pauseAllMedia() {\n  document.querySelectorAll('.js-youtube').forEach((video) => {\n    video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'pauseVideo' + '\",\"args\":\"\"}', '*');\n  });\n  document.querySelectorAll('.js-vimeo').forEach((video) => {\n    video.contentWindow.postMessage('{\"method\":\"pause\"}', '*');\n  });\n  document.querySelectorAll('video').forEach((video) => video.pause());\n  document.querySelectorAll('product-model').forEach((model) => {\n    if (model.modelViewerUI) model.modelViewerUI.pause();\n  });\n}\n\nfunction removeTrapFocus(elementToFocus = null) {\n  document.removeEventListener('focusin', trapFocusHandlers.focusin);\n  document.removeEventListener('focusout', trapFocusHandlers.focusout);\n  document.removeEventListener('keydown', trapFocusHandlers.keydown);\n\n  if (elementToFocus) elementToFocus.focus();\n}\n\nfunction onKeyUpEscape(event) {\n  if (event.code.toUpperCase() !== 'ESCAPE') return;\n\n  const openDetailsElement = event.target.closest('details[open]');\n  if (!openDetailsElement) return;\n\n  const summaryElement = openDetailsElement.querySelector('summary');\n  openDetailsElement.removeAttribute('open');\n  summaryElement.setAttribute('aria-expanded', false);\n  summaryElement.focus();\n}\n\nclass QuantityInput extends HTMLElement {\n  constructor() {\n    super();\n    this.input = this.querySelector('input');\n    this.changeEvent = new Event('change', { bubbles: true });\n    this.input.addEventListener('change', this.onInputChange.bind(this));\n    this.querySelectorAll('button').forEach((button) =>\n      button.addEventListener('click', this.onButtonClick.bind(this))\n    );\n  }\n\n  quantityUpdateUnsubscriber = undefined;\n\n  connectedCallback() {\n    this.validateQtyRules();\n    this.quantityUpdateUnsubscriber = subscribe(PUB_SUB_EVENTS.quantityUpdate, this.validateQtyRules.bind(this));\n  }\n\n  disconnectedCallback() {\n    if (this.quantityUpdateUnsubscriber) {\n      this.quantityUpdateUnsubscriber();\n    }\n  }\n\n  onInputChange(event) {\n    this.validateQtyRules();\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const previousValue = this.input.value;\n\n    if (event.target.name === 'plus') {\n      if (parseInt(this.input.dataset.min) > parseInt(this.input.step) && this.input.value == 0) {\n        this.input.value = this.input.dataset.min;\n      } else {\n        this.input.stepUp();\n      }\n    } else {\n      this.input.stepDown();\n    }\n\n    if (previousValue !== this.input.value) this.input.dispatchEvent(this.changeEvent);\n\n    if (this.input.dataset.min === previousValue && event.target.name === 'minus') {\n      this.input.value = parseInt(this.input.min);\n    }\n  }\n\n  validateQtyRules() {\n    const value = parseInt(this.input.value);\n    if (this.input.min) {\n      const buttonMinus = this.querySelector(\".quantity__button[name='minus']\");\n      buttonMinus.classList.toggle('disabled', parseInt(value) <= parseInt(this.input.min));\n    }\n    if (this.input.max) {\n      const max = parseInt(this.input.max);\n      const buttonPlus = this.querySelector(\".quantity__button[name='plus']\");\n      buttonPlus.classList.toggle('disabled', value >= max);\n    }\n  }\n}\n\ncustomElements.define('quantity-input', QuantityInput);\n\nfunction debounce(fn, wait) {\n  let t;\n  return (...args) => {\n    clearTimeout(t);\n    t = setTimeout(() => fn.apply(this, args), wait);\n  };\n}\n\n\nfunction throttle(fn, delay) {\n  let lastCall = 0;\n  return function (...args) {\n    const now = new Date().getTime();\n    if (now - lastCall < delay) {\n      return;\n    }\n    lastCall = now;\n    return fn(...args);\n  };\n}\n\nfunction fetchConfig(type = 'json') {\n  return {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n  };\n}\n\n/*\n * Shopify Common JS\n *\n */\nif (typeof window.Shopify == 'undefined') {\n  window.Shopify = {};\n}\n\nShopify.bind = function (fn, scope) {\n  return function () {\n    return fn.apply(scope, arguments);\n  };\n};\n\nShopify.setSelectorByValue = function (selector, value) {\n  for (var i = 0, count = selector.options.length; i < count; i++) {\n    var option = selector.options[i];\n    if (value == option.value || value == option.innerHTML) {\n      selector.selectedIndex = i;\n      return i;\n    }\n  }\n};\n\nShopify.addListener = function (target, eventName, callback) {\n  target.addEventListener\n    ? target.addEventListener(eventName, callback, false)\n    : target.attachEvent('on' + eventName, callback);\n};\n\nShopify.postLink = function (path, options) {\n  options = options || {};\n  var method = options['method'] || 'post';\n  var params = options['parameters'] || {};\n\n  var form = document.createElement('form');\n  form.setAttribute('method', method);\n  form.setAttribute('action', path);\n\n  for (var key in params) {\n    var hiddenField = document.createElement('input');\n    hiddenField.setAttribute('type', 'hidden');\n    hiddenField.setAttribute('name', key);\n    hiddenField.setAttribute('value', params[key]);\n    form.appendChild(hiddenField);\n  }\n  document.body.appendChild(form);\n  form.submit();\n  document.body.removeChild(form);\n};\n\nShopify.CountryProvinceSelector = function (country_domid, province_domid, options) {\n  this.countryEl = document.getElementById(country_domid);\n  this.provinceEl = document.getElementById(province_domid);\n  this.provinceContainer = document.getElementById(options['hideElement'] || province_domid);\n\n  Shopify.addListener(this.countryEl, 'change', Shopify.bind(this.countryHandler, this));\n\n  this.initCountry();\n  this.initProvince();\n};\n\nShopify.CountryProvinceSelector.prototype = {\n  initCountry: function () {\n    var value = this.countryEl.getAttribute('data-default');\n    Shopify.setSelectorByValue(this.countryEl, value);\n    this.countryHandler();\n  },\n\n  initProvince: function () {\n    var value = this.provinceEl.getAttribute('data-default');\n    if (value && this.provinceEl.options.length > 0) {\n      Shopify.setSelectorByValue(this.provinceEl, value);\n    }\n  },\n\n  countryHandler: function (e) {\n    var opt = this.countryEl.options[this.countryEl.selectedIndex];\n    var raw = opt.getAttribute('data-provinces');\n    var provinces = JSON.parse(raw);\n\n    this.clearOptions(this.provinceEl);\n    if (provinces && provinces.length == 0) {\n      this.provinceContainer.style.display = 'none';\n    } else {\n      for (var i = 0; i < provinces.length; i++) {\n        var opt = document.createElement('option');\n        opt.value = provinces[i][0];\n        opt.innerHTML = provinces[i][1];\n        this.provinceEl.appendChild(opt);\n      }\n\n      this.provinceContainer.style.display = '';\n    }\n  },\n\n  clearOptions: function (selector) {\n    while (selector.firstChild) {\n      selector.removeChild(selector.firstChild);\n    }\n  },\n\n  setOptions: function (selector, values) {\n    for (var i = 0, count = values.length; i < values.length; i++) {\n      var opt = document.createElement('option');\n      opt.value = values[i];\n      opt.innerHTML = values[i];\n      selector.appendChild(opt);\n    }\n  },\n};\n\nclass MenuDrawer extends HTMLElement {\n  constructor() {\n    super();\n\n    this.mainDetailsToggle = this.querySelector('details');\n\n    this.addEventListener('keyup', this.onKeyUp.bind(this));\n    this.addEventListener('focusout', this.onFocusOut.bind(this));\n    this.bindEvents();\n  }\n\n  bindEvents() {\n    this.querySelectorAll('summary').forEach((summary) =>\n      summary.addEventListener('click', this.onSummaryClick.bind(this))\n    );\n    this.querySelectorAll(\n      'button:not(.localization-selector):not(.country-selector__close-button):not(.country-filter__reset-button)'\n    ).forEach((button) => button.addEventListener('click', this.onCloseButtonClick.bind(this)));\n  }\n\n  onKeyUp(event) {\n    if (event.code.toUpperCase() !== 'ESCAPE') return;\n\n    const openDetailsElement = event.target.closest('details[open]');\n    if (!openDetailsElement) return;\n\n    openDetailsElement === this.mainDetailsToggle\n      ? this.closeMenuDrawer(event, this.mainDetailsToggle.querySelector('summary'))\n      : this.closeSubmenu(openDetailsElement);\n  }\n\n  onSummaryClick(event) {\n    const summaryElement = event.currentTarget;\n    const detailsElement = summaryElement.parentNode;\n    const parentMenuElement = detailsElement.closest('.has-submenu');\n    const isOpen = detailsElement.hasAttribute('open');\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n    function addTrapFocus() {\n      trapFocus(summaryElement.nextElementSibling, detailsElement.querySelector('button'));\n      summaryElement.nextElementSibling.removeEventListener('transitionend', addTrapFocus);\n    }\n\n    if (detailsElement === this.mainDetailsToggle) {\n      if (isOpen) event.preventDefault();\n      isOpen ? this.closeMenuDrawer(event, summaryElement) : this.openMenuDrawer(summaryElement);\n\n      if (window.matchMedia('(max-width: 990px)')) {\n        document.documentElement.style.setProperty('--viewport-height', `${window.innerHeight}px`);\n      }\n    } else {\n      setTimeout(() => {\n        detailsElement.classList.add('menu-opening');\n        summaryElement.setAttribute('aria-expanded', true);\n        parentMenuElement && parentMenuElement.classList.add('submenu-open');\n        !reducedMotion || reducedMotion.matches\n          ? addTrapFocus()\n          : summaryElement.nextElementSibling.addEventListener('transitionend', addTrapFocus);\n      }, 100);\n    }\n  }\n\n  openMenuDrawer(summaryElement) {\n    setTimeout(() => {\n      this.mainDetailsToggle.classList.add('menu-opening');\n    });\n    summaryElement.setAttribute('aria-expanded', true);\n    trapFocus(this.mainDetailsToggle, summaryElement);\n    document.body.classList.add(`overflow-hidden-${this.dataset.breakpoint}`);\n  }\n\n  closeMenuDrawer(event, elementToFocus = false) {\n    if (event === undefined) return;\n\n    this.mainDetailsToggle.classList.remove('menu-opening');\n    this.mainDetailsToggle.querySelectorAll('details').forEach((details) => {\n      details.removeAttribute('open');\n      details.classList.remove('menu-opening');\n    });\n    this.mainDetailsToggle.querySelectorAll('.submenu-open').forEach((submenu) => {\n      submenu.classList.remove('submenu-open');\n    });\n    document.body.classList.remove(`overflow-hidden-${this.dataset.breakpoint}`);\n    removeTrapFocus(elementToFocus);\n    this.closeAnimation(this.mainDetailsToggle);\n\n    if (event instanceof KeyboardEvent) elementToFocus?.setAttribute('aria-expanded', false);\n  }\n\n  onFocusOut() {\n    setTimeout(() => {\n      if (this.mainDetailsToggle.hasAttribute('open') && !this.mainDetailsToggle.contains(document.activeElement))\n        this.closeMenuDrawer();\n    });\n  }\n\n  onCloseButtonClick(event) {\n    const detailsElement = event.currentTarget.closest('details');\n    this.closeSubmenu(detailsElement);\n  }\n\n  closeSubmenu(detailsElement) {\n    const parentMenuElement = detailsElement.closest('.submenu-open');\n    parentMenuElement && parentMenuElement.classList.remove('submenu-open');\n    detailsElement.classList.remove('menu-opening');\n    detailsElement.querySelector('summary').setAttribute('aria-expanded', false);\n    removeTrapFocus(detailsElement.querySelector('summary'));\n    this.closeAnimation(detailsElement);\n  }\n\n  closeAnimation(detailsElement) {\n    let animationStart;\n\n    const handleAnimation = (time) => {\n      if (animationStart === undefined) {\n        animationStart = time;\n      }\n\n      const elapsedTime = time - animationStart;\n\n      if (elapsedTime < 400) {\n        window.requestAnimationFrame(handleAnimation);\n      } else {\n        detailsElement.removeAttribute('open');\n        if (detailsElement.closest('details[open]')) {\n          trapFocus(detailsElement.closest('details[open]'), detailsElement.querySelector('summary'));\n        }\n      }\n    };\n\n    window.requestAnimationFrame(handleAnimation);\n  }\n}\n\ncustomElements.define('menu-drawer', MenuDrawer);\n\nclass HeaderDrawer extends MenuDrawer {\n  constructor() {\n    super();\n  }\n\n  openMenuDrawer(summaryElement) {\n    this.header = this.header || document.querySelector('.section-header');\n    this.borderOffset =\n      this.borderOffset || this.closest('.header-wrapper').classList.contains('header-wrapper--border-bottom') ? 1 : 0;\n    document.documentElement.style.setProperty(\n      '--header-bottom-position',\n      `${parseInt(this.header.getBoundingClientRect().bottom - this.borderOffset)}px`\n    );\n    this.header.classList.add('menu-open');\n\n    setTimeout(() => {\n      this.mainDetailsToggle.classList.add('menu-opening');\n    });\n\n    summaryElement.setAttribute('aria-expanded', true);\n    window.addEventListener('resize', this.onResize);\n    trapFocus(this.mainDetailsToggle, summaryElement);\n    document.body.classList.add(`overflow-hidden-${this.dataset.breakpoint}`);\n  }\n\n  closeMenuDrawer(event, elementToFocus) {\n    if (!elementToFocus) return;\n    super.closeMenuDrawer(event, elementToFocus);\n    this.header.classList.remove('menu-open');\n    window.removeEventListener('resize', this.onResize);\n  }\n\n  onResize = () => {\n    this.header &&\n      document.documentElement.style.setProperty(\n        '--header-bottom-position',\n        `${parseInt(this.header.getBoundingClientRect().bottom - this.borderOffset)}px`\n      );\n    document.documentElement.style.setProperty('--viewport-height', `${window.innerHeight}px`);\n  };\n}\n\ncustomElements.define('header-drawer', HeaderDrawer);\n\nclass ModalDialog extends HTMLElement {\n  constructor() {\n    super();\n    this.querySelector('[id^=\"ModalClose-\"]').addEventListener('click', this.hide.bind(this, false));\n    this.addEventListener('keyup', (event) => {\n      if (event.code.toUpperCase() === 'ESCAPE') this.hide();\n    });\n    if (this.classList.contains('media-modal')) {\n      this.addEventListener('pointerup', (event) => {\n        // ABI t_4d83f291: allow touch users to exit product image zoom by tapping outside the media.\n        const tappedMedia = event.target.closest('deferred-media, product-model, .product__media, .product-media-modal__toggle');\n        if (!tappedMedia) this.hide();\n      });\n    } else {\n      this.addEventListener('click', (event) => {\n        if (event.target === this) this.hide();\n      });\n    }\n  }\n\n  connectedCallback() {\n    if (this.moved) return;\n    this.moved = true;\n    this.dataset.section = this.closest('.shopify-section').id.replace('shopify-section-', '');\n    document.body.appendChild(this);\n  }\n\n  show(opener) {\n    this.openedBy = opener;\n    const popup = this.querySelector('.template-popup');\n    document.body.classList.add('overflow-hidden');\n    this.setAttribute('open', '');\n    if (popup) popup.loadContent();\n    trapFocus(this, this.querySelector('[role=\"dialog\"]'));\n    window.pauseAllMedia();\n  }\n\n  hide() {\n    document.body.classList.remove('overflow-hidden');\n    document.body.dispatchEvent(new CustomEvent('modalClosed'));\n    this.removeAttribute('open');\n    removeTrapFocus(this.openedBy);\n    window.pauseAllMedia();\n  }\n}\ncustomElements.define('modal-dialog', ModalDialog);\n\nclass BulkModal extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      if (this.innerHTML.trim() === '') {\n        const productUrl = this.dataset.url.split('?')[0];\n        fetch(`${productUrl}?section_id=bulk-quick-order-list`)\n          .then((response) => response.text())\n          .then((responseText) => {\n            const html = new DOMParser().parseFromString(responseText, 'text/html');\n            const sourceQty = html.querySelector('.quick-order-list-container').parentNode;\n            this.innerHTML = sourceQty.innerHTML;\n          })\n          .catch((e) => {\n            console.error(e);\n          });\n      }\n    };\n\n    new IntersectionObserver(handleIntersection.bind(this)).observe(\n      document.querySelector(`#QuickBulk-${this.dataset.productId}-${this.dataset.sectionId}`)\n    );\n  }\n}\n\ncustomElements.define('bulk-modal', BulkModal);\n\nclass ModalOpener extends HTMLElement {\n  constructor() {\n    super();\n\n    const button = this.querySelector('button');\n\n    if (!button) return;\n    button.addEventListener('click', () => {\n      const modal = document.querySelector(this.getAttribute('data-modal'));\n      if (modal) modal.show(button);\n    });\n  }\n}\ncustomElements.define('modal-opener', ModalOpener);\n\nclass DeferredMedia extends HTMLElement {\n  constructor() {\n    super();\n    const poster = this.querySelector('[id^=\"Deferred-Poster-\"]');\n    if (!poster) return;\n    poster.addEventListener('click', this.loadContent.bind(this));\n  }\n\n  loadContent(focus = true) {\n    window.pauseAllMedia();\n    if (!this.getAttribute('loaded')) {\n      const content = document.createElement('div');\n      content.appendChild(this.querySelector('template').content.firstElementChild.cloneNode(true));\n\n      this.setAttribute('loaded', true);\n      const deferredElement = this.appendChild(content.querySelector('video, model-viewer, iframe'));\n      if (focus) deferredElement.focus();\n      if (deferredElement.nodeName == 'VIDEO' && deferredElement.getAttribute('autoplay')) {\n        // force autoplay for safari\n        deferredElement.play();\n      }\n\n      // Workaround for safari iframe bug\n      const formerStyle = deferredElement.getAttribute('style');\n      deferredElement.setAttribute('style', 'display: block;');\n      window.setTimeout(() => {\n        deferredElement.setAttribute('style', formerStyle);\n      }, 0);\n    }\n  }\n}\n\ncustomElements.define('deferred-media', DeferredMedia);\n\nclass SliderComponent extends HTMLElement {\n  constructor() {\n    super();\n    this.slider = this.querySelector('[id^=\"Slider-\"]');\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.enableSliderLooping = false;\n    this.currentPageElement = this.querySelector('.slider-counter--current');\n    this.pageTotalElement = this.querySelector('.slider-counter--total');\n    this.prevButton = this.querySelector('button[name=\"previous\"]');\n    this.nextButton = this.querySelector('button[name=\"next\"]');\n\n    if (!this.slider || !this.nextButton) return;\n\n    this.initPages();\n    const resizeObserver = new ResizeObserver((entries) => this.initPages());\n    resizeObserver.observe(this.slider);\n\n    this.slider.addEventListener('scroll', this.update.bind(this));\n    this.prevButton.addEventListener('click', this.onButtonClick.bind(this));\n    this.nextButton.addEventListener('click', this.onButtonClick.bind(this));\n  }\n\n  initPages() {\n    this.sliderItemsToShow = Array.from(this.sliderItems).filter((element) => element.clientWidth > 0);\n    if (this.sliderItemsToShow.length < 2) return;\n    this.sliderItemOffset = this.sliderItemsToShow[1].offsetLeft - this.sliderItemsToShow[0].offsetLeft;\n    this.slidesPerPage = Math.floor(\n      (this.slider.clientWidth - this.sliderItemsToShow[0].offsetLeft) / this.sliderItemOffset\n    );\n    this.totalPages = this.sliderItemsToShow.length - this.slidesPerPage + 1;\n    this.update();\n  }\n\n  resetPages() {\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.initPages();\n  }\n\n  update() {\n    // Temporarily prevents unneeded updates resulting from variant changes\n    // This should be refactored as part of https://github.com/Shopify/dawn/issues/2057\n    if (!this.slider || !this.nextButton) return;\n\n    const previousPage = this.currentPage;\n    this.currentPage = Math.round(this.slider.scrollLeft / this.sliderItemOffset) + 1;\n\n    if (this.currentPageElement && this.pageTotalElement) {\n      this.currentPageElement.textContent = this.currentPage;\n      this.pageTotalElement.textContent = this.totalPages;\n    }\n\n    if (this.currentPage != previousPage) {\n      this.dispatchEvent(\n        new CustomEvent('slideChanged', {\n          detail: {\n            currentPage: this.currentPage,\n            currentElement: this.sliderItemsToShow[this.currentPage - 1],\n          },\n        })\n      );\n    }\n\n    if (this.enableSliderLooping) return;\n\n    if (this.isSlideVisible(this.sliderItemsToShow[0]) && this.slider.scrollLeft === 0) {\n      this.prevButton.setAttribute('disabled', 'disabled');\n    } else {\n      this.prevButton.removeAttribute('disabled');\n    }\n\n    if (this.isSlideVisible(this.sliderItemsToShow[this.sliderItemsToShow.length - 1])) {\n      this.nextButton.setAttribute('disabled', 'disabled');\n    } else {\n      this.nextButton.removeAttribute('disabled');\n    }\n  }\n\n  isSlideVisible(element, offset = 0) {\n    const lastVisibleSlide = this.slider.clientWidth + this.slider.scrollLeft - offset;\n    return element.offsetLeft + element.clientWidth <= lastVisibleSlide && element.offsetLeft >= this.slider.scrollLeft;\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const step = event.currentTarget.dataset.step || 1;\n    this.slideScrollPosition =\n      event.currentTarget.name === 'next'\n        ? this.slider.scrollLeft + step * this.sliderItemOffset\n        : this.slider.scrollLeft - step * this.sliderItemOffset;\n    this.setSlidePosition(this.slideScrollPosition);\n  }\n\n  setSlidePosition(position) {\n    this.slider.scrollTo({\n      left: position,\n    });\n  }\n}\n\ncustomElements.define('slider-component', SliderComponent);\n\nclass SlideshowComponent extends SliderComponent {\n  constructor() {\n    super();\n    this.sliderControlWrapper = this.querySelector('.slider-buttons');\n    this.enableSliderLooping = true;\n\n    if (!this.sliderControlWrapper) return;\n\n    this.sliderFirstItemNode = this.slider.querySelector('.slideshow__slide');\n    if (this.sliderItemsToShow.length > 0) this.currentPage = 1;\n\n    this.announcementBarSlider = this.querySelector('.announcement-bar-slider');\n    // Value below should match --duration-announcement-bar CSS value\n    this.announcerBarAnimationDelay = this.announcementBarSlider ? 250 : 0;\n\n    this.sliderControlLinksArray = Array.from(this.sliderControlWrapper.querySelectorAll('.slider-counter__link'));\n    this.sliderControlLinksArray.forEach((link) => link.addEventListener('click', this.linkToSlide.bind(this)));\n    this.slider.addEventListener('scroll', this.setSlideVisibility.bind(this));\n    this.setSlideVisibility();\n\n    if (this.announcementBarSlider) {\n      this.announcementBarArrowButtonWasClicked = false;\n\n      this.reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n      this.reducedMotion.addEventListener('change', () => {\n        if (this.slider.getAttribute('data-autoplay') === 'true') this.setAutoPlay();\n      });\n\n      [this.prevButton, this.nextButton].forEach((button) => {\n        button.addEventListener(\n          'click',\n          () => {\n            this.announcementBarArrowButtonWasClicked = true;\n          },\n          { once: true }\n        );\n      });\n    }\n\n    if (this.slider.getAttribute('data-autoplay') === 'true') this.setAutoPlay();\n  }\n\n  setAutoPlay() {\n    this.autoplaySpeed = this.slider.dataset.speed * 1000;\n    this.addEventListener('mouseover', this.focusInHandling.bind(this));\n    this.addEventListener('mouseleave', this.focusOutHandling.bind(this));\n    this.addEventListener('focusin', this.focusInHandling.bind(this));\n    this.addEventListener('focusout', this.focusOutHandling.bind(this));\n\n    if (this.querySelector('.slideshow__autoplay')) {\n      this.sliderAutoplayButton = this.querySelector('.slideshow__autoplay');\n      this.sliderAutoplayButton.addEventListener('click', this.autoPlayToggle.bind(this));\n      this.autoplayButtonIsSetToPlay = true;\n      this.play();\n    } else {\n      this.reducedMotion.matches || this.announcementBarArrowButtonWasClicked ? this.pause() : this.play();\n    }\n  }\n\n  onButtonClick(event) {\n    super.onButtonClick(event);\n    this.wasClicked = true;\n\n    const isFirstSlide = this.currentPage === 1;\n    const isLastSlide = this.currentPage === this.sliderItemsToShow.length;\n\n    if (!isFirstSlide && !isLastSlide) {\n      this.applyAnimationToAnnouncementBar(event.currentTarget.name);\n      return;\n    }\n\n    if (isFirstSlide && event.currentTarget.name === 'previous') {\n      this.slideScrollPosition =\n        this.slider.scrollLeft + this.sliderFirstItemNode.clientWidth * this.sliderItemsToShow.length;\n    } else if (isLastSlide && event.currentTarget.name === 'next') {\n      this.slideScrollPosition = 0;\n    }\n\n    this.setSlidePosition(this.slideScrollPosition);\n\n    this.applyAnimationToAnnouncementBar(event.currentTarget.name);\n  }\n\n  setSlidePosition(position) {\n    if (this.setPositionTimeout) clearTimeout(this.setPositionTimeout);\n    this.setPositionTimeout = setTimeout(() => {\n      this.slider.scrollTo({\n        left: position,\n      });\n    }, this.announcerBarAnimationDelay);\n  }\n\n  update() {\n    super.update();\n    this.sliderControlButtons = this.querySelectorAll('.slider-counter__link');\n    this.prevButton.removeAttribute('disabled');\n\n    if (!this.sliderControlButtons.length) return;\n\n    this.sliderControlButtons.forEach((link) => {\n      link.classList.remove('slider-counter__link--active');\n      link.removeAttribute('aria-current');\n    });\n    this.sliderControlButtons[this.currentPage - 1].classList.add('slider-counter__link--active');\n    this.sliderControlButtons[this.currentPage - 1].setAttribute('aria-current', true);\n  }\n\n  autoPlayToggle() {\n    this.togglePlayButtonState(this.autoplayButtonIsSetToPlay);\n    this.autoplayButtonIsSetToPlay ? this.pause() : this.play();\n    this.autoplayButtonIsSetToPlay = !this.autoplayButtonIsSetToPlay;\n  }\n\n  focusOutHandling(event) {\n    if (this.sliderAutoplayButton) {\n      const focusedOnAutoplayButton =\n        event.target === this.sliderAutoplayButton || this.sliderAutoplayButton.contains(event.target);\n      if (!this.autoplayButtonIsSetToPlay || focusedOnAutoplayButton) return;\n      this.play();\n    } else if (!this.reducedMotion.matches && !this.announcementBarArrowButtonWasClicked) {\n      this.play();\n    }\n  }\n\n  focusInHandling(event) {\n    if (this.sliderAutoplayButton) {\n      const focusedOnAutoplayButton =\n        event.target === this.sliderAutoplayButton || this.sliderAutoplayButton.contains(event.target);\n      if (focusedOnAutoplayButton && this.autoplayButtonIsSetToPlay) {\n        this.play();\n      } else if (this.autoplayButtonIsSetToPlay) {\n        this.pause();\n      }\n    } else if (this.announcementBarSlider.contains(event.target)) {\n      this.pause();\n    }\n  }\n\n  play() {\n    this.slider.setAttribute('aria-live', 'off');\n    clearInterval(this.autoplay);\n    this.autoplay = setInterval(this.autoRotateSlides.bind(this), this.autoplaySpeed);\n  }\n\n  pause() {\n    this.slider.setAttribute('aria-live', 'polite');\n    clearInterval(this.autoplay);\n  }\n\n  togglePlayButtonState(pauseAutoplay) {\n    if (pauseAutoplay) {\n      this.sliderAutoplayButton.classList.add('slideshow__autoplay--paused');\n      this.sliderAutoplayButton.setAttribute('aria-label', window.accessibilityStrings.playSlideshow);\n    } else {\n      this.sliderAutoplayButton.classList.remove('slideshow__autoplay--paused');\n      this.sliderAutoplayButton.setAttribute('aria-label', window.accessibilityStrings.pauseSlideshow);\n    }\n  }\n\n  autoRotateSlides() {\n    const slideScrollPosition =\n      this.currentPage === this.sliderItems.length ? 0 : this.slider.scrollLeft + this.sliderItemOffset;\n\n    this.setSlidePosition(slideScrollPosition);\n    this.applyAnimationToAnnouncementBar();\n  }\n\n  setSlideVisibility(event) {\n    this.sliderItemsToShow.forEach((item, index) => {\n      const linkElements = item.querySelectorAll('a');\n      if (index === this.currentPage - 1) {\n        if (linkElements.length)\n          linkElements.forEach((button) => {\n            button.removeAttribute('tabindex');\n          });\n        item.setAttribute('aria-hidden', 'false');\n        item.removeAttribute('tabindex');\n      } else {\n        if (linkElements.length)\n          linkElements.forEach((button) => {\n            button.setAttribute('tabindex', '-1');\n          });\n        item.setAttribute('aria-hidden', 'true');\n        item.setAttribute('tabindex', '-1');\n      }\n    });\n    this.wasClicked = false;\n  }\n\n  applyAnimationToAnnouncementBar(button = 'next') {\n    if (!this.announcementBarSlider) return;\n\n    const itemsCount = this.sliderItems.length;\n    const increment = button === 'next' ? 1 : -1;\n\n    const currentIndex = this.currentPage - 1;\n    let nextIndex = (currentIndex + increment) % itemsCount;\n    nextIndex = nextIndex === -1 ? itemsCount - 1 : nextIndex;\n\n    const nextSlide = this.sliderItems[nextIndex];\n    const currentSlide = this.sliderItems[currentIndex];\n\n    const animationClassIn = 'announcement-bar-slider--fade-in';\n    const animationClassOut = 'announcement-bar-slider--fade-out';\n\n    const isFirstSlide = currentIndex === 0;\n    const isLastSlide = currentIndex === itemsCount - 1;\n\n    const shouldMoveNext = (button === 'next' && !isLastSlide) || (button === 'previous' && isFirstSlide);\n    const direction = shouldMoveNext ? 'next' : 'previous';\n\n    currentSlide.classList.add(`${animationClassOut}-${direction}`);\n    nextSlide.classList.add(`${animationClassIn}-${direction}`);\n\n    setTimeout(() => {\n      currentSlide.classList.remove(`${animationClassOut}-${direction}`);\n      nextSlide.classList.remove(`${animationClassIn}-${direction}`);\n    }, this.announcerBarAnimationDelay * 2);\n  }\n\n  linkToSlide(event) {\n    event.preventDefault();\n    const slideScrollPosition =\n      this.slider.scrollLeft +\n      this.sliderFirstItemNode.clientWidth *\n        (this.sliderControlLinksArray.indexOf(event.currentTarget) + 1 - this.currentPage);\n    this.slider.scrollTo({\n      left: slideScrollPosition,\n    });\n  }\n}\n\ncustomElements.define('slideshow-component', SlideshowComponent);\n\nclass VariantSelects extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    this.addEventListener('change', (event) => {\n      const target = this.getInputForEventTarget(event.target);\n      this.updateSelectionMetadata(event);\n\n      publish(PUB_SUB_EVENTS.optionValueSelectionChange, {\n        data: {\n          event,\n          target,\n          selectedOptionValues: this.selectedOptionValues,\n        },\n      });\n    });\n  }\n\n  updateSelectionMetadata({ target }) {\n    const { value, tagName } = target;\n\n    if (tagName === 'SELECT' && target.selectedOptions.length) {\n      Array.from(target.options)\n        .find((option) => option.getAttribute('selected'))\n        .removeAttribute('selected');\n      target.selectedOptions[0].setAttribute('selected', 'selected');\n\n      const swatchValue = target.selectedOptions[0].dataset.optionSwatchValue;\n      const selectedDropdownSwatchValue = target\n        .closest('.product-form__input')\n        .querySelector('[data-selected-value] > .swatch');\n      if (!selectedDropdownSwatchValue) return;\n      if (swatchValue) {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', swatchValue);\n        selectedDropdownSwatchValue.classList.remove('swatch--unavailable');\n      } else {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', 'unset');\n        selectedDropdownSwatchValue.classList.add('swatch--unavailable');\n      }\n\n      selectedDropdownSwatchValue.style.setProperty(\n        '--swatch-focal-point',\n        target.selectedOptions[0].dataset.optionSwatchFocalPoint || 'unset'\n      );\n    } else if (tagName === 'INPUT' && target.type === 'radio') {\n      const selectedSwatchValue = target.closest(`.product-form__input`).querySelector('[data-selected-value]');\n      if (selectedSwatchValue) selectedSwatchValue.innerHTML = value;\n    }\n  }\n\n  getInputForEventTarget(target) {\n    return target.tagName === 'SELECT' ? target.selectedOptions[0] : target;\n  }\n\n  get selectedOptionValues() {\n    return Array.from(this.querySelectorAll('select option[selected], fieldset input:checked')).map(\n      ({ dataset }) => dataset.optionValueId\n    );\n  }\n}\n\ncustomElements.define('variant-selects', VariantSelects);\n\nclass ProductRecommendations extends HTMLElement {\n  observer = undefined;\n\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    this.initializeRecommendations(this.dataset.productId);\n  }\n\n  initializeRecommendations(productId) {\n    this.observer?.unobserve(this);\n    this.observer = new IntersectionObserver(\n      (entries, observer) => {\n        if (!entries[0].isIntersecting) return;\n        observer.unobserve(this);\n        this.loadRecommendations(productId);\n      },\n      { rootMargin: '0px 0px 400px 0px' }\n    );\n    this.observer.observe(this);\n  }\n\n  loadRecommendations(productId) {\n    fetch(`${this.dataset.url}&product_id=${productId}&section_id=${this.dataset.sectionId}`)\n      .then((response) => response.text())\n      .then((text) => {\n        const html = document.createElement('div');\n        html.innerHTML = text;\n        const recommendations = html.querySelector('product-recommendations');\n\n        if (recommendations?.innerHTML.trim().length) {\n          this.innerHTML = recommendations.innerHTML;\n        }\n\n        if (!this.querySelector('slideshow-component') && this.classList.contains('complementary-products')) {\n          this.remove();\n        }\n\n        if (html.querySelector('.grid__item')) {\n          this.classList.add('product-recommendations--loaded');\n        }\n      })\n      .catch((e) => {\n        console.error(e);\n      });\n  }\n}\n\ncustomElements.define('product-recommendations', ProductRecommendations);\n\nclass AccountIcon extends HTMLElement {\n  constructor() {\n    super();\n\n    this.icon = this.querySelector('.icon');\n  }\n\n  connectedCallback() {\n    document.addEventListener('storefront:signincompleted', this.handleStorefrontSignInCompleted.bind(this));\n  }\n\n  handleStorefrontSignInCompleted(event) {\n    if (event?.detail?.avatar) {\n      this.icon?.replaceWith(event.detail.avatar.cloneNode());\n    }\n  }\n}\n\ncustomElements.define('account-icon', AccountIcon);\n\nclass BulkAdd extends HTMLElement {\n  static ASYNC_REQUEST_DELAY = 250;\n\n  constructor() {\n    super();\n    this.queue = [];\n    this.setRequestStarted(false);\n    this.ids = [];\n  }\n\n  startQueue(id, quantity) {\n    this.queue.push({ id, quantity });\n\n    const interval = setInterval(() => {\n      if (this.queue.length > 0) {\n        if (!this.requestStarted) {\n          this.sendRequest(this.queue);\n        }\n      } else {\n        clearInterval(interval);\n      }\n    }, BulkAdd.ASYNC_REQUEST_DELAY);\n  }\n\n  sendRequest(queue) {\n    this.setRequestStarted(true);\n    const items = {};\n\n    queue.forEach((queueItem) => {\n      items[parseInt(queueItem.id)] = queueItem.quantity;\n    });\n    this.queue = this.queue.filter((queueElement) => !queue.includes(queueElement));\n\n    this.updateMultipleQty(items);\n  }\n\n  setRequestStarted(requestStarted) {\n    this._requestStarted = requestStarted;\n  }\n\n  get requestStarted() {\n    return this._requestStarted;\n  }\n\n  resetQuantityInput(id) {\n    const input = this.querySelector(`#Quantity-${id}`);\n    input.value = input.getAttribute('value');\n    this.isEnterPressed = false;\n  }\n\n  setValidity(event, index, message) {\n    event.target.setCustomValidity(message);\n    event.target.reportValidity();\n    this.resetQuantityInput(index);\n    event.target.select();\n  }\n\n  validateQuantity(event) {\n    const inputValue = parseInt(event.target.value);\n    const index = event.target.dataset.index;\n\n    if (inputValue < event.target.dataset.min) {\n      this.setValidity(event, index, window.quickOrderListStrings.min_error.replace('[min]', event.target.dataset.min));\n    } else if (inputValue > parseInt(event.target.max)) {\n      this.setValidity(event, index, window.quickOrderListStrings.max_error.replace('[max]', event.target.max));\n    } else if (inputValue % parseInt(event.target.step) != 0) {\n      this.setValidity(event, index, window.quickOrderListStrings.step_error.replace('[step]', event.target.step));\n    } else {\n      event.target.setCustomValidity('');\n      event.target.reportValidity();\n      event.target.setAttribute('value', inputValue);\n      this.startQueue(index, inputValue);\n    }\n  }\n\n  getSectionInnerHTML(html, selector) {\n    return new DOMParser().parseFromString(html, 'text/html').querySelector(selector).innerHTML;\n  }\n}\n\nif (!customElements.get('bulk-add')) {\n  customElements.define('bulk-add', BulkAdd);\n}\n\nclass CartPerformance {\n  static #metric_prefix = \"cart-performance\"\n\n  static createStartingMarker(benchmarkName) {\n    const metricName = `${CartPerformance.#metric_prefix}:${benchmarkName}`\n    return performance.mark(`${metricName}:start`);\n  }\n\n  static measureFromEvent(benchmarkName, event) {\n    const metricName = `${CartPerformance.#metric_prefix}:${benchmarkName}`\n    const startMarker = performance.mark(`${metricName}:start`, {\n      startTime: event.timeStamp\n    });\n\n    const endMarker = performance.mark(`${metricName}:end`);\n\n    performance.measure(\n      metricName,\n      `${metricName}:start`,\n      `${metricName}:end`\n    );\n  }\n\n  static measureFromMarker(benchmarkName, startMarker) {\n    const metricName = `${CartPerformance.#metric_prefix}:${benchmarkName}`\n    const endMarker = performance.mark(`${metricName}:end`);\n\n    performance.measure(\n      metricName,\n      startMarker.name,\n      `${metricName}:end`\n    );\n  }\n\n  static measure(benchmarkName, callback) {\n    const metricName = `${CartPerformance.#metric_prefix}:${benchmarkName}`\n    const startMarker = performance.mark(`${metricName}:start`);\n\n    callback();\n\n    const endMarker = performance.mark(`${metricName}:end`);\n\n    performance.measure(\n      metricName,\n      `${metricName}:start`,\n      `${metricName}:end`\n    );\n  }\n}\n\n\n/* ABI homepage customer photo reviews patch t_b19df5f2: move below featured products and show 20 random legitimate photo reviews from full pool. */\n(function(){\n  var REVIEWS=[{\"id\": \"83c4d318-36b4-4093-8dc1-638fcb3dae66\", \"rating\": 5, \"author\": \"Ronaele\", \"product\": \"Art Bluei\", \"body\": \"Color Options: Option 5 Product Type: Skinny Tumbler 20oz Ginger was quick & very pleasant when she responded to my request for a spelling error to be corrected in my order!! I ordered 4 tumblers for our trip with our friends, we are all new grandparents! They turned out perfectly!!! Can\u2019t wait to use them on the pool deck & the beach in mid July!!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995974__dz_i_tlcyhg__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995974__dz_i_tlcyhg__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:34 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"31069903-5b79-4ccf-b0c9-587d1251e7b4\", \"rating\": 5, \"author\": \"Amanda\", \"product\": \"Art Bluei\", \"body\": \"Color Options: Option 17 Product Type: Skinny Tumbler 20oz Cups turned out perfect for girls trip!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995973__6h3vi6awava__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995973__6h3vi6awava__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:33 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"1b17ed24-ac31-40ed-a0b7-1685e03bb088\", \"rating\": 5, \"author\": \"Cass\", \"product\": \"Art Bluei\", \"body\": \"Tumbler Style: 40oz. Handle Tumbler Beautifully made! My daughter is going to love it!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995973__f989raj9-hu__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995973__f989raj9-hu__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:32 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"b689e453-fecc-48e3-a6b1-1fa2a1355894\", \"rating\": 5, \"author\": \"Kassi\", \"product\": \"Art Bluei\", \"body\": \"Tumbler Style: 40oz. Handle Tumbler Well made cups & would deff buy again!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995971__9nq21uqs2vg__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995971__9nq21uqs2vg__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:31 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"b91b9c8a-e0bf-49b4-be15-8e1aec343c57\", \"rating\": 4, \"author\": \"Jennifer\", \"product\": \"Art Bluei\", \"body\": \"Size: 40 oz Background Color: #5- Green This cup is absolutely beautiful! The only downside is I felt like the straw holder piece was looser on all of them (I bought 5) than most cups but otherwise perfect. My kids teachers loved them and now I am thinking about ordering one for myself!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995971__dvf4idqrp1o__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995971__dvf4idqrp1o__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:30 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"f982fbee-8162-4daf-b1ab-4fa34ba00e36\", \"rating\": 5, \"author\": \"Elizabeth\", \"product\": \"Art Bluei\", \"body\": \"Tumbler Size Options: 40oz with handle the cups were exactly what I wanted. the shipping was very fast. And the communications were fantastic. five stars for sure\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995970__f72u9nd9a2i__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995970__f72u9nd9a2i__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:29 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"91b9289e-b083-4a44-82ef-90b0cded5624\", \"rating\": 5, \"author\": \"lucy\", \"product\": \"Art Bluei\", \"body\": \"Tumbler Size Options: 40oz with handle This item was great!! customer service was great as well. They even customized it for me\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995969__8wijdywwzfo__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995969__8wijdywwzfo__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:29 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"d6f5f601-d553-438f-9a21-b44ac158d651\", \"rating\": 5, \"author\": \"Chelsea\", \"product\": \"Art Bluei\", \"body\": \"Tumbler Size: 40oz The sellers worked with me on my design. It came out absolutely beautiful. Got here fast! I\u2019m so happy with this, I might order more!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995968__pedao6lu0j4__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995968__pedao6lu0j4__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:28 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"4b815928-7ff3-4f50-8664-af7256219caa\", \"rating\": 5, \"author\": \"Amanda\", \"product\": \"Art Bluei\", \"body\": \"Tumbler Size: 40oz This was the best gift for my grandpa! The seller was AMAZING and designed the cup PERFECTLY!!! Shipping was also super quick. Will definitely recommend this seller to everyone I know :)\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995968__vxvrtrfq6xw__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995968__vxvrtrfq6xw__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:59:27 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"9a10c2dd-fa9d-4e19-a96b-9e6d5be16a4d\", \"rating\": 4, \"author\": \"Karlethia\", \"product\": \"Art Bluei\", \"body\": \"Cups exactly as described, but the straw was not included with one of the cups purchased.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995058__jwbb55rjccu__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995058__jwbb55rjccu__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:44:17 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"a280b4ef-6d0b-4957-b7d4-71e79c617efe\", \"rating\": 5, \"author\": \"Celest\", \"product\": \"Art Bluei\", \"body\": \"So cute!! Great for a back to school teacher gift\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785995057__trsjw_kentw__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785995057__trsjw_kentw__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:44:16 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"94f97878-3ee8-4b6b-a8f3-2a6560dab790\", \"rating\": 5, \"author\": \"Delisha\", \"product\": \"Art Bluei\", \"body\": \"Had a misprint and resolved immediately with no hassle! Got jersey customized for my school house (House of Valor)\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785993805__6qrpoeajgwy__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785993805__6qrpoeajgwy__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 05:23:25 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"f39d73ae-ef4d-4313-8793-2f529ec1c043\", \"rating\": 5, \"author\": \"Shavonnaca\", \"product\": \"Art Bluei\", \"body\": \"I ordered XS and I'm typically very petite. It fit perfect.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988077__bnim-dtlzec__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988077__bnim-dtlzec__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:56 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"4b58a26d-76ba-436f-abc2-05f5ba25ded4\", \"rating\": 5, \"author\": \"Brittany\", \"product\": \"Art Bluei\", \"body\": \"This one was also for a friend! Great timing on the jerseys! All of the numbers we wanted matched up with our names! Super happy!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988075___oxt5lqcz3e__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988075___oxt5lqcz3e__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:54 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"477a9f52-cf72-42c5-b769-d898c12ce7e2\", \"rating\": 5, \"author\": \"Christine\", \"product\": \"Art Bluei\", \"body\": \"These were awesome! So happy with the order.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988073__4weqrc0enf0__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988073__4weqrc0enf0__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:52 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"4af2d794-3d3a-4ae8-a8c5-b8708c39ede4\", \"rating\": 5, \"author\": \"Marissa\", \"product\": \"Art Bluei\", \"body\": \"Love! Lightweight material, it will be perfect!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988070__krnkfsbacxi__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988070__krnkfsbacxi__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:50 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"3b083eea-1474-4329-9e18-4ec84e11b456\", \"rating\": 5, \"author\": \"Jennifer\", \"product\": \"Art Bluei\", \"body\": \"So helpful in creating a custom jersey for my daughter to wear to her first concert. I would 100 % recommend and order from this seller again.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988066__3k3ldzmairu__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988066__3k3ldzmairu__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:46 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"c0694224-0eab-4a82-a234-988c8f65b35c\", \"rating\": 5, \"author\": \"Jennifer\", \"product\": \"Art Bluei\", \"body\": \"My son absolutely loves it! Great quality and great birthday gift.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988064__th3_n1dfhlo__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988064__th3_n1dfhlo__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:44 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"ac27c761-6e74-4b66-a24f-e05c213670bf\", \"rating\": 5, \"author\": \"Camille\", \"product\": \"Art Bluei\", \"body\": \"Loved the jerseys! My BIL and his wife surprised us with these for our flower girls and ring bearer. It was a hit at our wedding. Highly recommend.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988062__2haqd5u4w_o__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988062__2haqd5u4w_o__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:42 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"d2e25d91-9eeb-4541-9433-c9925a56cd12\", \"rating\": 5, \"author\": \"KJ\", \"product\": \"Art Bluei\", \"body\": \"Son wanted to get a cool gift for him and his dad for Christmas. So we did matching baseball shirts and they couldn't have been cuter! The seller was amazing and helpful and the quality of this product is beautiful and it looked so good and both of the guys were psyched! 12 out of 10 experience! Totally awesome! We absolutely love these shirts!!!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988060__pypt9cytxa__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988060__pypt9cytxa__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:40 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"42e91cdc-0fc7-4894-9522-4e7a3a41ad6c\", \"rating\": 5, \"author\": \"Marissa\", \"product\": \"Art Bluei\", \"body\": \"Perfect! Great item to wear to a baseball game!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988058__2dsviwqg3ak__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988058__2dsviwqg3ak__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:38 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"2c991013-7d7a-4083-8a9f-1013d4a3fb9e\", \"rating\": 5, \"author\": \"Heather\", \"product\": \"Art Bluei\", \"body\": \"We had a great experience. I ordered 34 baseball jerseys for team parents for our varsity high school team. FanaticEra was able to design a very similar jersey to the boys. Quality is amazing for the price. Jerseys are not so thin you can see through them and durable enough to last multiple seasons. Sizing was accurate to the measurements they provided. Customer services was great with me - I emailed several questions over a couple of weeks and they were helpful. Items ship from Vietnam, so when I got the shipping alert that was a little confusing for me, but overall I would recommend and purchase again from them.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988056__pvigpy7p3io__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988056__pvigpy7p3io__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:36 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"6a7a9ad2-356d-4e0d-95f4-68fc28ea7570\", \"rating\": 5, \"author\": \"Marilyn\", \"product\": \"Art Bluei\", \"body\": \"The owner will alway Get back with you the next day or the same day.If there's a issue I talked to my couple of times just to make sure things were right but they're amazing. The items met all my expectations.The quality was excellent, and the description that I gave it was very accurate. Thank you, fanaticera\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988054__7sk_niaadk0__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988054__7sk_niaadk0__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:34 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"e3ccbd07-c77d-46a4-8d9d-9bab36860a4e\", \"rating\": 5, \"author\": \"Rhonda\", \"product\": \"Art Bluei\", \"body\": \"Such a cute jersey! So many Mom\u2019s also ordered after I received mine!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988053__3h821cwjpw0__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988053__3h821cwjpw0__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:32 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"ff06f4b9-7e50-4953-8033-eb2565d5a38e\", \"rating\": 5, \"author\": \"Anjali\", \"product\": \"Art Bluei\", \"body\": \"Absolutely loved the quality and printing of it.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988048__jsjjh7tcaem__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988048__jsjjh7tcaem__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:28 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"2b6b3131-7f37-4a9c-b3fc-85d071eb4a1a\", \"rating\": 5, \"author\": \"Tessia\", \"product\": \"Art Bluei\", \"body\": \"The jersey are a must have . They were perfect for my great nephew 1st baseball theme party . The seller was great when it came to communication , delivery was fast and on time . Great service for my family !!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988046__khlnaj6mau4__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988046__khlnaj6mau4__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:25 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"3c88f788-0706-4e71-a282-47c2168f3598\", \"rating\": 5, \"author\": \"Tiffany\", \"product\": \"Art Bluei\", \"body\": \"This is exactly what I was looking for to wear to a work group baseball outing. Thank you!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988044__vrgvqi_chqy__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988044__vrgvqi_chqy__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:23 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"497113f3-0904-48ea-b6a3-7eacae83a053\", \"rating\": 5, \"author\": \"Joanne\", \"product\": \"Art Bluei\", \"body\": \"Item matched description, my brother loved it\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988184__gzsgd6nqdn4__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988184__gzsgd6nqdn4__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:21 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"053929b6-a0af-4aaf-9d1d-f76f4de921e5\", \"rating\": 5, \"author\": \"Stacey\", \"product\": \"Art Bluei\", \"body\": \"Bought this for my daughters 12th birthday, who is in love with *NSYNC, seller even took the care to put the star before their name, she LOvES it!\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988040__yo3xmrd5540__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988040__yo3xmrd5540__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:19 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"d4eea274-5efc-4c95-b676-4f8ec1f528d4\", \"rating\": 5, \"author\": \"India\", \"product\": \"Art Bluei\", \"body\": \"The jerseys were really good quality, I\u2019d highly recommend the brand.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785988038__2wfq8krhac0__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785988038__2wfq8krhac0__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-06 03:47:17 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"fe8df9af-bdd2-4b5d-8d37-227c978ebde5\", \"rating\": 5, \"author\": \"Joni\", \"product\": \"Art Bluei\", \"body\": \"Excellent breathable material and doesnt bleed in wash.\", \"image\": \"https://review-images.judgeme.com/art-bluei/1785946993__0__SxD6-GjV__iap_fullxfull.8328434942_soux1omt__original.jpg?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/art-bluei/1785946993__0__SxD6-GjV__iap_fullxfull.8328434942_soux1omt__original.jpg?quality=80&width=1024\"], \"date\": \"2026-08-01 17:00:00 UTC\", \"source\": \"shop-reviews\"}, {\"id\": \"2e07d23b-ab11-4042-a1e4-a18d7c5526ca\", \"rating\": 4, \"author\": \"David\", \"product\": \"Art Bluei\", \"body\": \"Beautiful except colors do not seem as dark as it looked on Etsy, but will be hanging outside\", \"image\": \"https://review-images.judgeme.com/artblue/1782118412__rv4__original.avif?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/artblue/1782118412__rv4__original.avif?quality=80&width=1024\"], \"date\": \"2026-06-22 08:53:32 UTC\", \"source\": \"product-reviews\"}, {\"id\": \"3ed21c75-d5c8-483d-a17f-223685e1f87f\", \"rating\": 5, \"author\": \"Andy Britton\", \"product\": \"Art Bluei\", \"body\": \"These look great on the porch railings. They are a little thinner than normal bunting material so I may add a gromet to the bottom to keep them from flapping too much in the wind.\", \"image\": \"https://review-images.judgeme.com/artblue/1782118179__rv3__original.png?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/artblue/1782118179__rv3__original.png?quality=80&width=1024\"], \"date\": \"2026-06-22 08:49:39 UTC\", \"source\": \"product-reviews\"}, {\"id\": \"e04b0d96-70ef-4220-95d5-a09055c6616c\", \"rating\": 5, \"author\": \"Jess Miller\", \"product\": \"Art Bluei\", \"body\": \"Looks exactly like the picture. High-quality print, breathable fabric, and great fit. Such a cool and unique way to celebrate America\u2019s 250th. Definitely worth the buy!\", \"image\": \"https://review-images.judgeme.com/artblue/1782094934__rv1__original.png?quality=80&width=1024\", \"images\": [\"https://review-images.judgeme.com/artblue/1782094934__rv1__original.png?quality=80&width=1024\"], \"date\": \"2026-06-22 02:22:13 UTC\", \"source\": \"product-reviews\"}];\n  function onHome(){ return location.pathname==='/' || location.pathname==='/vi' || location.pathname==='/vi/'; }\n  function esc(s){return String(s||'').replace(/[&<>\"']/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c];});}\n  function stars(n){n=parseInt(n||5,10); return n>=5?'\u2605\u2605\u2605\u2605\u2605':(n===4?'\u2605\u2605\u2605\u2605\u2606':'\u2605'.repeat(n)+'\u2606'.repeat(Math.max(0,5-n)));}\n  function shuffle(a){for(var i=a.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1)),t=a[i];a[i]=a[j];a[j]=t;}return a;}\n  function buildCards(rows){return rows.map(function(r){var href=r.url||'/pages/reviews';return '<article class=\"artblue-photo-review-card\"><a href=\"'+esc(href)+'\" class=\"artblue-photo-review-card__image-link\" aria-label=\"View reviewed product\"><img src=\"'+esc(r.image)+'\" alt=\"Customer photo review from '+esc(r.author||'Customer')+'\" loading=\"lazy\"></a><div class=\"artblue-photo-review-card__body\"><div class=\"artblue-photo-review-card__stars\" aria-label=\"'+esc(r.rating||5)+' out of 5 stars\">'+stars(r.rating)+'</div><h3>'+esc(r.author||'Customer')+'</h3><p>'+esc(r.body||'Customer photo review.')+'</p></div></article>';}).join('');}\n  function apply(){\n    if(!onHome()) return;\n    var reviewSection=document.getElementById('shopify-section-template--20887230513350__artblue_photo_reviews_only') || document.querySelector('[id$=\"__artblue_photo_reviews_only\"]');\n    var featured=document.getElementById('shopify-section-template--20887230513350__featured_collection') || document.querySelector('[id$=\"__featured_collection\"]');\n    if(!reviewSection) return;\n    if(featured && featured.nextElementSibling!==reviewSection) featured.insertAdjacentElement('afterend', reviewSection);\n    var wrapper=reviewSection.querySelector('.artblue-photo-reviews');\n    var grid=reviewSection.querySelector('.artblue-photo-reviews__grid');\n    if(!wrapper || !grid) return;\n    wrapper.setAttribute('data-abi-random-photo-reviews','20');\n    var chosen=shuffle(REVIEWS.slice()).slice(0, REVIEWS.length);\n    grid.innerHTML=buildCards(chosen);\n    var style=document.getElementById('abi-home-photo-review-grid-style');\n    if(!style){style=document.createElement('style');style.id='abi-home-photo-review-grid-style';style.textContent='.artblue-photo-reviews__grid{grid-template-columns:repeat(4,minmax(0,1fr));}.artblue-photo-review-card__body p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;font-size:14px;line-height:1.45;}.artblue-photo-review-card h3{font-size:16px;}@media(max-width:989px){.artblue-photo-reviews__grid{grid-template-columns:repeat(2,minmax(0,1fr));}}@media(max-width:749px){.artblue-photo-reviews__grid{grid-template-columns:1fr;}}';document.head.appendChild(style);}\n  }\n  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', apply); else apply();\n  setTimeout(apply,500); setTimeout(apply,1800);\n})();\n/* END ABI homepage customer photo reviews patch t_b19df5f2 */\n\n\n/* ABI 20260919: product photo reviews are owned by their section, not global.js. */\n\n\n/* ABI t_a79fd5a7: runtime sync product helper UI to cart orange. */\n(function(){\n  var orange = '#0b1f3a';\n  function paint(){return;} function abiLegacyPaintDisabled(){\n    var selectors = [\n      '.product__info-wrapper .artblue-sale-price__activity',\n      '.product__info-wrapper .artblue-sale-price__activity *',\n      '.product__info-wrapper .artblue-sale-price__countdown-text',\n      '.product__info-wrapper .artblue-sale-price__countdown-text *',\n      '.product__info-wrapper .artblue-countdown',\n      '.product__info-wrapper .artblue-delivery-estimator__processing-time',\n      '.product__info-wrapper [data-artblue-delivery-date]',\n      '.product__info-wrapper .artblue-size-guide__button',\n      '.product__info-wrapper .artblue-size-guide__button *',\n      '.product__info-wrapper .artblue-personalization__summary',\n      '.product__info-wrapper .artblue-personalization__summary *'\n    ];\n    selectors.forEach(function(sel){\n      document.querySelectorAll(sel).forEach(function(el){\n        el.style.setProperty('color', orange, 'important');\n        el.style.setProperty('-webkit-text-fill-color', orange, 'important');\n      });\n    });\n    document.querySelectorAll('.product__info-wrapper .artblue-personalization__summary-icon').forEach(function(el){\n      el.style.setProperty('--abi-personalization-orange', orange);\n    });\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', paint); else paint();\n  window.addEventListener('load', paint);\n  setTimeout(paint, 300); setTimeout(paint, 1200); setInterval(paint, 5000);\n})();\n\n\n/* ARTBLUE: removed old Klaviyo loader + Halloween icon observer 20260816. */\n\n\n\n\n/* ARTBLUE compact Klaviyo popup marker 1786794552: heavy raw GitHub popup icons removed in theme/header; compact behavior lives in theme.liquid/header-group. */\n/* ABI t_fb832223 20260820: removed global W10 submit suppression; theme.liquid now uses scoped close-only overlay suppression so product Add to cart remains tappable. */\n/* ABI t_fb832223 20260820: removed old global W10 close suppression; safe scoped version lives in layout/theme.liquid. */\n\n\n/* ABI t_259f10e1 cache-bust 20260819184319: W10 close reopen fix verified admin */\n\n/* ABI t_fb832223 popup ATC mobile fix 20260820: removed stale global W10 popup suppressors. */\n\n\n"],
  "mappings": "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",
  "names": []
}
