{
  "version": 3,
  "sources": ["/cdn/shop/t/23/assets/abt-theme.js?rev=20260730restore"],
  "sourcesContent": ["    (function(){\n      'use strict';\n\n      var commerceConfig = window.ABT_COMMERCE || {};\n      var rootUrl = window.Shopify && window.Shopify.routes && window.Shopify.routes.root || '/';\n      var activeCurrency = commerceConfig.currency || window.Shopify && window.Shopify.currency && window.Shopify.currency.active || 'USD';\n      function label(key, fallback){ return commerceConfig.labels && commerceConfig.labels[key] || fallback; }\n      function route(path){ return rootUrl + path.replace(/^\\//, ''); }\n      function money(cents){\n        try { return new Intl.NumberFormat(document.documentElement.lang || 'en', {style:'currency',currency:activeCurrency}).format(Number(cents) / 100); }\n        catch(error){ return (Number(cents) / 100).toFixed(2) + ' ' + activeCurrency; }\n      }\n      function cleanHandles(value){\n        return Array.isArray(value) ? Array.from(new Set(value.filter(function(h){ return typeof h === 'string' && /^[a-z0-9][a-z0-9-]{0,254}$/.test(h); }))) : [];\n      }\n      function readWishlist(){\n        try { return cleanHandles(JSON.parse(localStorage.getItem('abt_wishlist') || '[]')); } catch(error){ return []; }\n      }\n      function safeUrl(value, image){\n        if(typeof value !== 'string' || !value.trim()) return '';\n        try {\n          var url = new URL(value, location.origin);\n          if(image ? url.protocol === 'https:' : url.origin === location.origin) return url.href;\n        } catch(error){}\n        return '';\n      }\n\n      // Escape untrusted strings (product titles/vendors from JSON APIs, recent\n      // searches from localStorage) before inserting into innerHTML.\n      function escapeHtml(s){\n        return String(s == null ? '' : s).replace(/[&<>\"']/g, function(c){\n          return { '&':'&amp;', '<':'&lt;', '>':'&gt;', '\"':'&quot;', \"'\":'&#39;' }[c];\n        });\n      }\n\n      // Shopify returns JSON error bodies for rejected cart operations too.\n      function readJsonResponse(response){\n        return response.json().then(function(data){\n          if(!response.ok || (data && Number(data.status) >= 400)){\n            var error = new Error(data && (data.description || data.message) || 'Could not update your bag. Please try again.');\n            var httpStatus = Number(response.status);\n            var apiStatus = Number(data && data.status);\n            error.cartRejected = (httpStatus >= 400 && httpStatus < 500 || apiStatus >= 400 && apiStatus < 500) && !(httpStatus >= 500 || apiStatus >= 500 || httpStatus === 408 || apiStatus === 408);\n            throw error;\n          }\n          return data;\n        });\n      }\n      function syncCartCounts(cart, expectedRevision){\n        if(expectedRevision !== undefined && expectedRevision !== cartRevision) return cart;\n        if(!cart || !Array.isArray(cart.items) || typeof cart.item_count !== 'number'){\n          throw new Error('Could not load your bag. Please try again.');\n        }\n        if(cart.currency) activeCurrency = cart.currency;\n        document.querySelectorAll('[data-cart-count], .abt-cart-count, .abt-header__cart-count').forEach(function(el){\n          el.textContent = cart.item_count;\n          el.dataset.count = cart.item_count;\n        });\n        document.querySelectorAll('.abt-mobile-bar__count').forEach(function(el){ el.dataset.count = cart.item_count; });\n        return cart;\n      }\n      function requestDeadline(action, milliseconds, timeoutError){\n        return new Promise(function(resolve, reject){\n          var finished = false;\n          var timer = setTimeout(function(){\n            if(finished) return;\n            finished = true;\n            reject(timeoutError());\n          }, milliseconds);\n          Promise.resolve().then(action).then(function(result){\n            if(finished) return;\n            finished = true; clearTimeout(timer); resolve(result);\n          }, function(error){\n            if(finished) return;\n            finished = true; clearTimeout(timer); reject(error);\n          });\n        });\n      }\n      var cartQueue = Promise.resolve();\n      var cartRevision = 0;\n      var cartPending = 0;\n      var latestCartRequest = null;\n      var cartUpdateUncertain = false;\n      function uncertainCartError(){\n        return new Error(label('cart_update_unknown', 'We could not confirm the bag update. Refresh this page to check your bag before trying again.'));\n      }\n      function announceCartChange(revision, options, succeeded){\n        document.dispatchEvent(new CustomEvent('abt:cartChanged', {detail:{revision:revision, source:options && options.source || 'cart', succeeded:succeeded}}));\n      }\n      function mutateCart(path, payload, options){\n        var revision = ++cartRevision;\n        cartPending++;\n        var request = cartQueue.then(function(){\n          if(cartUpdateUncertain) throw uncertainCartError();\n          var multipart = typeof FormData !== 'undefined' && payload instanceof FormData;\n          return requestDeadline(function(){\n            return fetch(route(path), {\n              method: 'POST',\n              headers: multipart ? {'Accept':'application/json'} : {'Content-Type':'application/json','Accept':'application/json'},\n              body: multipart ? payload : JSON.stringify(payload)\n            }).then(readJsonResponse).catch(function(error){\n              if(error && error.cartRejected) throw error;\n              cartUpdateUncertain = true;\n              throw uncertainCartError();\n            });\n          }, 15000, function(){\n            cartUpdateUncertain = true;\n            return uncertainCartError();\n          });\n        }).then(function(result){\n          announceCartChange(revision, options, true);\n          return result;\n        }, function(error){\n          announceCartChange(revision, options, false);\n          throw error;\n        }).finally(function(){ cartPending--; });\n        latestCartRequest = request;\n        cartQueue = request.catch(function(){});\n        return request;\n      }\n      function settleCartQueue(){\n        var request = latestCartRequest;\n        if(!request) return Promise.resolve();\n        return request.then(function(result){\n          return latestCartRequest !== request ? settleCartQueue() : result;\n        }, function(error){\n          if(latestCartRequest !== request) return settleCartQueue();\n          throw error;\n        });\n      }\n      function settleCartNavigation(){\n        return settleCartNote().then(settleCartQueue).then(function(){\n          if(cartPending || cartNoteDirty()) return settleCartNavigation();\n        });\n      }\n      function waitForCartNavigation(){\n        return new Promise(function(resolve, reject){\n          var timer = setTimeout(function(){\n            reject(new Error(label('cart_wait_error', 'Your bag is still updating. Please wait a moment and try again.')));\n          }, 10000);\n          settleCartNavigation().then(function(result){\n            clearTimeout(timer);\n            resolve(result);\n          }, function(error){\n            clearTimeout(timer);\n            reject(error);\n          });\n        });\n      }\n      function validCartQuantity(value){\n        if(value === null || value === undefined || String(value).trim() === '') return null;\n        var quantity = Number(value);\n        return Number.isInteger(quantity) && quantity >= 0 && quantity <= 99 ? quantity : null;\n      }\n      function fetchCartState(){\n        return cartQueue.then(function(){\n          var controller = window.AbortController ? new AbortController() : null;\n          return requestDeadline(function(){\n            return fetch(route('cart.js'), { headers: { 'Accept': 'application/json' }, cache: 'no-store', signal:controller ? controller.signal : undefined }).then(readJsonResponse);\n          }, 10000, function(){\n            if(controller) controller.abort();\n            return new Error(label('cart_load_timeout', 'Your bag is taking too long to load. Close it and try again.'));\n          });\n        });\n      }\n      function reportCartError(error){\n        var message = error && error.message || 'Could not update your bag. Please try again.';\n        if(window.ABT_toast) window.ABT_toast(message);\n        else window.alert(message);\n      }\n\n      var cartNote = {value:null, version:0, savedVersion:0, timer:null, operation:null, operationVersion:0};\n      var noteSelector = '#abt-cart-drawer-note, [data-full-cart] textarea[name=\"note\"]';\n      function cartNoteDirty(){ return cartNote.version > cartNote.savedVersion; }\n      function cartNoteValue(serverValue, readVersion){\n        if(cartNoteDirty() || readVersion !== undefined && readVersion !== cartNote.version) return cartNote.value;\n        return typeof serverValue === 'string' ? serverValue : cartNote.value || '';\n      }\n      function flushCartNote(){\n        clearTimeout(cartNote.timer);\n        cartNote.timer = null;\n        if(!cartNoteDirty()) return cartNote.operation || Promise.resolve();\n        if(cartNote.operation && cartNote.operationVersion === cartNote.version) return cartNote.operation;\n        var version = cartNote.version;\n        var value = cartNote.value;\n        var operation = mutateCart('cart/update.js', {note:value}, {source:'order-note'}).then(function(cart){\n          cartNote.savedVersion = Math.max(cartNote.savedVersion, version);\n          return cart;\n        }).finally(function(){\n          if(cartNote.operation === operation) cartNote.operation = null;\n        });\n        cartNote.operation = operation;\n        cartNote.operationVersion = version;\n        return operation;\n      }\n      function settleCartNote(){\n        return flushCartNote().then(function(result){ return cartNoteDirty() ? settleCartNote() : result; });\n      }\n      function editCartNote(value){\n        cartNote.value = String(value);\n        cartNote.version++;\n        document.querySelectorAll(noteSelector).forEach(function(field){\n          if(field !== document.activeElement) field.value = cartNote.value;\n        });\n        clearTimeout(cartNote.timer);\n        cartNote.timer = setTimeout(function(){ flushCartNote().catch(reportCartError); }, 600);\n      }\n      document.addEventListener('input', function(event){\n        if(event.target.matches && event.target.matches(noteSelector)) editCartNote(event.target.value);\n      });\n      document.addEventListener('change', function(event){\n        if(event.target.matches && event.target.matches(noteSelector)) flushCartNote().catch(reportCartError);\n      });\n      var cartNavigationPending = false;\n      document.addEventListener('click', function(event){\n        if(event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || (!cartPending && !cartNoteDirty() && !cartNote.operation && !cartUpdateUncertain)) return;\n        var link = event.target.closest && event.target.closest('a[href]');\n        if(!link || !link.closest('#abt-cart-drawer, [data-full-cart]') || link.hasAttribute('download') || link.target && link.target !== '_self') return;\n        var destination = new URL(link.href, location.href);\n        if(destination.origin !== location.origin || destination.pathname === location.pathname && destination.search === location.search && destination.hash) return;\n        if(cartUpdateUncertain){\n          if(destination.searchParams.get('inquiry') === 'bag'){\n            event.preventDefault();\n            reportCartError(uncertainCartError());\n          }\n          return;\n        }\n        event.preventDefault();\n        if(cartNavigationPending) return;\n        cartNavigationPending = true;\n        waitForCartNavigation().then(function(){ location.assign(destination.href); }).catch(reportCartError).finally(function(){ cartNavigationPending = false; });\n      });\n      var noteSubmitPass = new WeakSet();\n      document.addEventListener('submit', function(event){\n        var form = event.target;\n        if(!form.matches || !form.matches('[data-full-cart] form') || event.defaultPrevented || noteSubmitPass.has(form) || (!cartPending && !cartNoteDirty() && !cartNote.operation && !cartUpdateUncertain)) return;\n        event.preventDefault();\n        if(cartUpdateUncertain){ reportCartError(uncertainCartError()); return; }\n        var submitter = event.submitter;\n        waitForCartNavigation().then(function(){\n          if(!form.isConnected) return;\n          noteSubmitPass.add(form);\n          try {\n            if(form.requestSubmit) form.requestSubmit(submitter && submitter.isConnected ? submitter : undefined);\n            else if(submitter && submitter.isConnected) submitter.click();\n            else form.submit();\n          } finally { noteSubmitPass.delete(form); }\n        }).catch(reportCartError);\n      });\n      window.ABT_cart = {\n        mutate:mutateCart, fetch:fetchCartState, sync:syncCartCounts,\n        idle:function(){ return cartQueue; }, settle:settleCartQueue, pending:function(){ return cartPending > 0; }, revision:function(){ return cartRevision; },\n        quantity:validCartQuantity, uncertain:function(){ return cartUpdateUncertain; },\n        note:{edit:editCartNote, flush:flushCartNote, value:cartNoteValue, dirty:cartNoteDirty, revision:function(){ return cartNote.version; }}\n      };\n\n      var dialogManager = (function(){\n        var active = null;\n        var background = new Map();\n        var scrollState = null;\n        var redirectingFocus = false;\n        var focusableSelector = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n        var dialogIds = ['abt-mobile-drawer', 'abt-cart-drawer', 'abt-wishlist-drawer', 'abt-search-overlay', 'abt-quiz-modal'];\n        function setInert(element, value){\n          if(element) element.toggleAttribute('inert', value);\n        }\n        function usable(element){\n          if(!element || !element.isConnected || typeof element.focus !== 'function') return false;\n          if(element.disabled || element.closest('[inert], [hidden], [aria-hidden=\"true\"]')) return false;\n          var style = window.getComputedStyle(element);\n          return style.display !== 'none' && style.visibility !== 'hidden' && element.getClientRects().length > 0;\n        }\n        function focusables(container){\n          return Array.from(container.querySelectorAll(focusableSelector)).filter(usable);\n        }\n        function focusInside(){\n          if(!active) return;\n          var target = usable(active.initialFocus) ? active.initialFocus : focusables(active.container)[0];\n          if(!target){\n            target = active.container;\n            target.setAttribute('tabindex', '-1');\n          }\n          target.focus({preventScroll:true});\n        }\n        function restoreBackground(){\n          background.forEach(function(wasInert, element){ setInert(element, wasInert); });\n          background.clear();\n        }\n        function excludeBackground(){\n          if(!active) return;\n          var keep = [active.container, active.backdrop, document.getElementById('abt-sr-live')].filter(Boolean);\n          function walk(parent){\n            Array.from(parent.children).forEach(function(element){\n              if(/^(SCRIPT|STYLE|LINK|TEMPLATE)$/.test(element.tagName) || keep.indexOf(element) >= 0) return;\n              if(keep.some(function(node){ return element.contains(node); })){ walk(element); return; }\n              if(!background.has(element)) background.set(element, element.hasAttribute('inert'));\n              setInert(element, true);\n            });\n          }\n          walk(document.body);\n        }\n        function close(container, options){\n          if(!container) return;\n          setInert(container, true);\n          container.setAttribute('aria-hidden', 'true');\n          if(!active || active.container !== container) return;\n          var closed = active;\n          active = null;\n          restoreBackground();\n          if(scrollState){\n            document.body.style.overflow = scrollState.body;\n            document.documentElement.style.overflow = scrollState.html;\n            scrollState = null;\n          }\n          document.body.classList.remove('abt-dialog-open');\n          delete document.body.dataset.abtActiveDialog;\n          if(!options || options.restoreFocus !== false){\n            var target = usable(closed.returnFocus) ? closed.returnFocus : document.querySelector('.abt-burger');\n            if(!usable(target)) target = document.querySelector('[data-open-cart], [data-open-search], .abt-logo');\n            if(usable(target)) target.focus({preventScroll:true});\n          }\n        }\n        function open(container, options){\n          if(!container || active && active.container === container) return;\n          var previous = active;\n          var opener = options.opener || document.activeElement;\n          var returnFocus = previous && previous.container.contains(opener) ? previous.returnFocus : opener;\n          if(previous){\n            active = null;\n            previous.onClose({restoreFocus:false});\n            restoreBackground();\n          }\n          active = {container:container, backdrop:options.backdrop, initialFocus:options.initialFocus, onClose:options.onClose, returnFocus:returnFocus};\n          setInert(container, false);\n          container.setAttribute('aria-hidden', 'false');\n          if(options.backdrop) setInert(options.backdrop, false);\n          if(!scrollState) scrollState = {body:document.body.style.overflow,html:document.documentElement.style.overflow};\n          document.body.style.overflow = 'hidden';\n          document.documentElement.style.overflow = 'hidden';\n          document.body.classList.add('abt-dialog-open');\n          document.body.dataset.abtActiveDialog = container.id;\n          excludeBackground();\n          focusInside();\n        }\n        dialogIds.forEach(function(id){\n          var container = document.getElementById(id);\n          if(container && container.getAttribute('aria-hidden') !== 'false') setInert(container, true);\n        });\n        document.addEventListener('keydown', function(event){\n          if(!active) return;\n          if(event.key === 'Escape'){\n            event.preventDefault();\n            event.stopImmediatePropagation();\n            active.onClose();\n            return;\n          }\n          if(event.key !== 'Tab') return;\n          var items = focusables(active.container);\n          if(!items.length){ event.preventDefault(); focusInside(); return; }\n          var index = items.indexOf(document.activeElement);\n          if(event.shiftKey && index <= 0){ event.preventDefault(); items[items.length - 1].focus(); }\n          else if(!event.shiftKey && (index < 0 || index === items.length - 1)){ event.preventDefault(); items[0].focus(); }\n        }, true);\n        document.addEventListener('focusin', function(event){\n          if(active && !active.container.contains(event.target) && !redirectingFocus){\n            redirectingFocus = true;\n            focusInside();\n            redirectingFocus = false;\n          }\n        }, true);\n        new MutationObserver(function(){ if(active) excludeBackground(); }).observe(document.body, {childList:true});\n        return {\n          open:open,\n          close:close,\n          closeCurrent:function(options){ if(active) active.onClose(options); },\n          contains:function(element){ return !!(active && active.container.contains(element)); }\n        };\n      })();\n      function isDialogTrigger(element){\n        return !!element.closest('[data-open-cart], [data-open-wishlist], [data-open-search], [data-open-quiz], [data-quiz-trigger]');\n      }\n      function scrollBehavior(){\n        return window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth';\n      }\n\n      // ---- 1. Sticky header scrolled state ----\n      var header = document.getElementById('abt-header');\n      if(header){\n        var onScroll = function(){\n          if(window.scrollY > 8) header.classList.add('is-scrolled');\n          else header.classList.remove('is-scrolled');\n          var bounds = header.getBoundingClientRect();\n          document.documentElement.style.setProperty('--abt-header-height', Math.max(0, bounds.height) + 'px');\n          document.documentElement.style.setProperty('--abt-header-bottom', Math.max(0, bounds.bottom) + 'px');\n        };\n        window.addEventListener('scroll', onScroll, { passive: true });\n        window.addEventListener('resize', onScroll, { passive:true });\n        if('ResizeObserver' in window) new ResizeObserver(onScroll).observe(header);\n        onScroll();\n      }\n\n      // ---- 2. Mobile drawer ----\n      var burger = document.querySelector('.abt-burger');\n      var drawer = document.getElementById('abt-mobile-drawer');\n      var overlay = document.getElementById('abt-mobile-overlay');\n      var closeBtn = document.querySelector('.abt-mobile-drawer__close');\n      function openDrawer(){\n        if(!drawer || !overlay || !burger) return;\n        drawer.classList.add('is-open');\n        overlay.classList.add('is-open');\n        burger.classList.add('is-open');\n        burger.setAttribute('aria-expanded', 'true');\n        dialogManager.open(drawer, {backdrop:overlay, initialFocus:closeBtn, onClose:closeDrawer, opener:burger});\n      }\n      function closeDrawer(options){\n        if(!drawer || !overlay || !burger) return;\n        drawer.classList.remove('is-open');\n        overlay.classList.remove('is-open');\n        burger.classList.remove('is-open');\n        burger.setAttribute('aria-expanded', 'false');\n        dialogManager.close(drawer, options);\n      }\n      if(burger && drawer && overlay){\n        burger.addEventListener('click', function(){\n          if(drawer.classList.contains('is-open')) closeDrawer();\n          else openDrawer();\n        });\n      }\n      if(overlay) overlay.addEventListener('click', closeDrawer);\n      if(closeBtn) closeBtn.addEventListener('click', closeDrawer);\n      if(drawer){\n        drawer.querySelectorAll('a').forEach(function(a){\n          a.addEventListener('click', function(){ if(!isDialogTrigger(a)) closeDrawer(); });\n        });\n      }\n\n      document.addEventListener('click', function(event){\n        var link = event.target.closest('a[href*=\"#\"]');\n        if(!link || event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || link.hasAttribute('download') || link.target === '_blank' || isDialogTrigger(link)) return;\n        var destination;\n        try { destination = new URL(link.getAttribute('href'), location.href); } catch(error){ return; }\n        if(destination.origin !== location.origin || destination.pathname !== location.pathname || !destination.hash || destination.hash.length < 2 || destination.search && destination.search !== location.search) return;\n        var target;\n        try { target = document.getElementById(decodeURIComponent(destination.hash.slice(1))); } catch(error){ return; }\n        if(!target || target.closest('[role=\"dialog\"], [aria-modal=\"true\"]')) return;\n        event.preventDefault();\n        if(dialogManager.contains(link)) dialogManager.closeCurrent({restoreFocus:false});\n        var headerHeight = header ? Math.max(0, header.getBoundingClientRect().height) : 0;\n        var top = Math.max(0, target.getBoundingClientRect().top + window.scrollY - headerHeight - 12);\n        if(!target.hasAttribute('tabindex')){\n          target.setAttribute('tabindex', '-1');\n          target.addEventListener('blur', function(){ target.removeAttribute('tabindex'); }, {once:true});\n        }\n        target.focus({preventScroll:true});\n        window.scrollTo({top:top, behavior:scrollBehavior()});\n        if(history.pushState) history.pushState(null, '', location.pathname + location.search + destination.hash);\n      });\n\n      // ---- 4. Scroll reveal ----\n      if('IntersectionObserver' in window){\n        var io = new IntersectionObserver(function(entries){\n          entries.forEach(function(e){\n            if(e.isIntersecting){\n              e.target.classList.add('is-revealed');\n              io.unobserve(e.target);\n            }\n          });\n        }, { rootMargin: '0px 0px 100px 0px', threshold: 0.01 });\n        function bind(){\n          document.querySelectorAll('[data-reveal]:not(.is-revealed)').forEach(function(el){ io.observe(el); });\n        }\n        bind();\n        window.__abtReveal = 1; // signal the head failsafe that reveals are handled\n        // re-bind when new sections appear (lazy templates)\n        var mo = new MutationObserver(function(){ bind(); });\n        mo.observe(document.body, { childList: true, subtree: true });\n        // Failsafe: nothing already on screen may rest half-faded (IO races, bfcache, print)\n        function revealInView(){\n          var vh = window.innerHeight || 800;\n          document.querySelectorAll('[data-reveal]:not(.is-revealed)').forEach(function(el){\n            var r = el.getBoundingClientRect();\n            if(r.top < vh + 200 && r.bottom > -200) el.classList.add('is-revealed');\n          });\n        }\n        setTimeout(revealInView, 1500);\n        window.addEventListener('load', function(){ setTimeout(revealInView, 300); });\n      } else {\n        window.__abtReveal = 1;\n        document.querySelectorAll('[data-reveal]').forEach(function(el){ el.classList.add('is-revealed'); });\n      }\n\n      // ---- 4-pre-2. Wishlist (localStorage-based, persistent) ----\n      (function wishlist(){\n        var STORAGE_KEY = 'abt_wishlist';\n        function get(){\n          try { return cleanHandles(JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]')); }\n          catch(e){ return []; }\n        }\n        function set(arr){\n          try {\n            var list = cleanHandles(arr);\n            localStorage.setItem(STORAGE_KEY, JSON.stringify(list));\n            document.dispatchEvent(new CustomEvent('abt:wishlistChange', {detail:{list:list}}));\n          } catch(e){}\n        }\n        function isSaved(handle){ return get().indexOf(handle) >= 0; }\n        function toggle(handle){\n          if(!cleanHandles([handle]).length) return false;\n          var arr = get();\n          var i = arr.indexOf(handle);\n          if(i >= 0) arr.splice(i, 1);\n          else arr.unshift(handle);\n          set(arr);\n          return arr.indexOf(handle) >= 0;\n        }\n        function svgHtml(){\n          return '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"/></svg>';\n        }\n        function updateHeaderCount(){\n          var arr = get();\n          var el = document.getElementById('abt-wishlist-count');\n          if(el){ el.textContent = arr.length; el.dataset.count = arr.length; }\n        }\n        updateHeaderCount();\n\n        // Render the saved list independently in the page and drawer.\n        var wlContainers = document.querySelectorAll('[data-wishlist-page]');\n        if(wlContainers.length){\n          // Brand-CDN fallback map for product images when /products/X.js doesn't have featured_image\n          var WISHLIST_FALLBACK = {}; // hardcoded URLs removed (brief)\n\n          var wishlistRequests = new Map();\n          var clearConfirmations = [];\n          function fetchProduct(handle){\n            if(wishlistRequests.has(handle)) return wishlistRequests.get(handle);\n            var controller = window.AbortController ? new AbortController() : null;\n            var request = requestDeadline(function(){\n              return fetch(route('products/' + encodeURIComponent(handle) + '.js'), {headers:{Accept:'application/json'}, signal:controller ? controller.signal : undefined})\n                .then(function(response){\n                  if(response.status === 404 || response.status === 410) return {state:'missing'};\n                  if(!response.ok) throw new Error();\n                  return response.json().then(function(product){\n                    if(!product || typeof product.title !== 'string' || typeof product.available !== 'boolean') throw new Error();\n                    return {state:'ready', product:product};\n                  });\n                });\n            }, 10000, function(){ if(controller) controller.abort(); return new Error('Product request timed out'); })\n              .catch(function(){ return {state:'error'}; })\n              .finally(function(){ wishlistRequests.delete(handle); });\n            wishlistRequests.set(handle, request);\n            return request;\n          }\n          function announceWishlist(scope, text){\n            var status = scope.querySelector('[data-wishlist-status]');\n            if(!status){\n              status = document.createElement('p');\n              status.className = 'abt-wishlist-status abt-sr-only';\n              status.dataset.wishlistStatus = '';\n              status.setAttribute('role', 'status');\n              status.setAttribute('aria-live', 'polite');\n              scope.appendChild(status);\n            }\n            status.textContent = text;\n          }\n          function syncWishlistBusy(scope){\n            var grid = scope.querySelector('.abt-wishlist-page__grid, .abt-wishlist-drawer__grid');\n            if(grid) grid.setAttribute('aria-busy', String(!!grid.querySelector('[data-loading=\"1\"]')));\n          }\n          function removeWishlistItem(handle, node, scope){\n            var grid = node.parentElement;\n            var index = Array.from(grid.children).indexOf(node);\n            var restoreFocus = node.contains(document.activeElement);\n            set(get().filter(function(saved){ return saved !== handle; }));\n            renderPage();\n            updateHeaderCount();\n            announceWishlist(scope, label('wishlist_removed', 'Product removed from your wishlist.'));\n            if(restoreFocus){\n              var next = grid.children[index] || grid.children[index - 1];\n              var target = next ? next.querySelector('[data-wishlist-remove]') : scope.querySelector('.abt-wishlist-page__empty a, .abt-wishlist-drawer__empty a');\n              if(target) target.focus({preventScroll:true});\n            }\n          }\n          function paintWishlistItem(node, handle, scope, result){\n            var product = result.product;\n            var state = result.state;\n            var oldFocus = document.activeElement;\n            var hadFocus = node.contains(oldFocus);\n            var focusRemove = hadFocus && oldFocus.matches('[data-wishlist-remove]');\n            var url = route('products/' + encodeURIComponent(handle));\n            var title = product ? product.title : handle.replace(/-/g, ' ');\n            var imageUrl = product && safeUrl(product.featured_image, true);\n            var image = imageUrl ? '<img src=\"' + escapeHtml(imageUrl) + '\" alt=\"' + escapeHtml(title) + '\" width=\"400\" height=\"500\" loading=\"lazy\">' : '<span class=\"abt-wishlist-item__image-label\">' + escapeHtml(label(state === 'loading' ? 'wishlist_loading' : 'wishlist_photo', state === 'loading' ? 'Loading product\u2026' : 'Product photo unavailable')) + '</span>';\n            var media = '<div class=\"abt-prod-card__img\">' + image + '</div>';\n            var message = state === 'loading' ? label('wishlist_loading', 'Loading product\u2026') : state === 'error' ? label('wishlist_error', 'Could not load this product.') : state === 'missing' ? label('wishlist_missing', 'This product is no longer available.') : product.available ? label('wishlist_in_stock', 'In stock') : label('wishlist_sold_out', 'Sold out');\n            var action = '';\n            if(product){\n              var choose = product.variants && product.variants.length > 1 || product.requires_selling_plan;\n              action = '<a href=\"' + escapeHtml(url) + '\" class=\"btn btn--gold\" data-wishlist-view>' + escapeHtml(choose ? label('wishlist_choose', 'Choose options') : label('view_product', 'View product')) + '</a>';\n            } else if(state === 'error'){\n              action = '<button type=\"button\" class=\"btn btn--ghost\" data-wishlist-retry>' + escapeHtml(label('wishlist_retry', 'Try again')) + '</button>';\n            }\n            node.dataset.state = state;\n            node.dataset.loading = state === 'loading' ? '1' : '';\n            node.innerHTML = (product ? '<a class=\"abt-wishlist-item__img-wrap\" href=\"' + escapeHtml(url) + '\">' + media + '</a>' : '<div class=\"abt-wishlist-item__img-wrap\">' + media + '</div>') +\n              '<div class=\"abt-wishlist-item__body\">' +\n              (product && product.vendor ? '<p class=\"abt-wishlist-item__brand\">' + escapeHtml(product.vendor) + '</p>' : '') +\n              '<h3 class=\"abt-wishlist-item__name\">' + (product ? '<a href=\"' + escapeHtml(url) + '\">' + escapeHtml(title) + '</a>' : escapeHtml(title)) + '</h3>' +\n              (product && product.price !== undefined ? '<p class=\"abt-wishlist-item__price\">' + escapeHtml(money(product.price)) + '</p>' : '') +\n              '<p class=\"abt-wishlist-item__status\" data-wishlist-message tabindex=\"-1\"' + (state === 'error' ? ' role=\"alert\"' : '') + '>' + escapeHtml(message) + '</p>' +\n              '<div class=\"abt-wishlist-item__actions\">' + action + '<button type=\"button\" class=\"abt-wishlist-item__remove\" data-wishlist-remove>' + escapeHtml(label('remove', 'Remove')) + '</button></div></div>';\n            node.querySelector('[data-wishlist-remove]').addEventListener('click', function(){ removeWishlistItem(handle, node, scope); });\n            var retry = node.querySelector('[data-wishlist-retry]');\n            if(retry) retry.addEventListener('click', function(){ loadWishlistItem(node, handle, scope); });\n            syncWishlistBusy(scope);\n            if(hadFocus){\n              var target = focusRemove ? node.querySelector('[data-wishlist-remove]') : state === 'loading' ? node.querySelector('[data-wishlist-message]') : node.querySelector('[data-wishlist-retry], [data-wishlist-view], [data-wishlist-remove]');\n              if(target) target.focus({preventScroll:true});\n            }\n          }\n          var wishlistRequestId = 0;\n          function loadWishlistItem(node, handle, scope){\n            var requestId = String(++wishlistRequestId);\n            node.dataset.requestId = requestId;\n            paintWishlistItem(node, handle, scope, {state:'loading'});\n            return fetchProduct(handle).then(function(result){\n              if(!node.isConnected || node.dataset.requestId !== requestId || get().indexOf(handle) < 0) return;\n              paintWishlistItem(node, handle, scope, result);\n            });\n          }\n          function renderInto(scope){\n            var emptyEl = scope.querySelector('.abt-wishlist-page__empty, .abt-wishlist-drawer__empty');\n            var gridEl = scope.querySelector('.abt-wishlist-page__grid, .abt-wishlist-drawer__grid');\n            var footerEl = scope.querySelector('.abt-wishlist-page__footer, .abt-wishlist-drawer__foot');\n            if(!gridEl) return;\n            var handles = get();\n            var loadItems = scope.getAttribute('role') !== 'dialog' || scope.getAttribute('aria-hidden') === 'false';\n            if(emptyEl) emptyEl.hidden = handles.length > 0;\n            gridEl.hidden = handles.length === 0;\n            if(footerEl) footerEl.hidden = handles.length === 0;\n            if(handles.length === 0) clearConfirmations.forEach(function(reset){ reset(false); });\n            Array.from(gridEl.children).forEach(function(node){ if(handles.indexOf(node.dataset.handle) < 0) node.remove(); });\n            handles.forEach(function(handle, index){\n              var node = Array.from(gridEl.children).find(function(item){ return item.dataset.handle === handle; });\n              if(node || !loadItems) return;\n              node = document.createElement('article');\n              node.className = 'abt-wishlist-item';\n              node.dataset.handle = handle;\n              gridEl.insertBefore(node, gridEl.children[index] || null);\n              loadWishlistItem(node, handle, scope);\n            });\n            syncWishlistBusy(scope);\n          }\n          function renderPage(){ wlContainers.forEach(renderInto); }\n          renderPage();\n          document.querySelectorAll('[data-wishlist-clear], #abt-wishlist-clear').forEach(function(clearBtn, index){\n            var scope = clearBtn.closest('[data-wishlist-page]');\n            if(!scope) return;\n            var originalLabel = clearBtn.textContent;\n            var originalDescription = clearBtn.getAttribute('aria-describedby');\n            var confirming = false;\n            var region = document.createElement('div');\n            region.className = 'abt-wishlist-confirm';\n            region.id = 'abt-wishlist-confirm-' + index;\n            region.hidden = true;\n            var prompt = document.createElement('p');\n            prompt.id = region.id + '-message';\n            prompt.setAttribute('role', 'status');\n            prompt.setAttribute('aria-live', 'polite');\n            var cancel = document.createElement('button');\n            cancel.type = 'button';\n            cancel.className = 'abt-wishlist-confirm__cancel';\n            cancel.textContent = label('wishlist_cancel_clear', 'Cancel');\n            region.appendChild(prompt);\n            region.appendChild(cancel);\n            clearBtn.parentElement.appendChild(region);\n            clearBtn.setAttribute('aria-controls', region.id);\n            clearBtn.setAttribute('aria-expanded', 'false');\n            function reset(moveFocus){\n              confirming = false;\n              region.hidden = true;\n              prompt.textContent = '';\n              clearBtn.textContent = originalLabel;\n              clearBtn.setAttribute('aria-expanded', 'false');\n              if(originalDescription) clearBtn.setAttribute('aria-describedby', originalDescription);\n              else clearBtn.removeAttribute('aria-describedby');\n              if(moveFocus && clearBtn.isConnected) clearBtn.focus({preventScroll:true});\n            }\n            clearConfirmations.push(reset);\n            cancel.addEventListener('click', function(){ reset(true); });\n            window.addEventListener('keydown', function(event){\n              if(event.key !== 'Escape' || !confirming || !scope.contains(document.activeElement)) return;\n              event.preventDefault();\n              event.stopPropagation();\n              reset(true);\n            }, true);\n            clearBtn.addEventListener('click', function(){\n              if(!get().length) return;\n              if(!confirming){\n                confirming = true;\n                region.hidden = false;\n                clearBtn.textContent = label('wishlist_confirm_clear', 'Confirm clear all');\n                clearBtn.setAttribute('aria-expanded', 'true');\n                clearBtn.setAttribute('aria-describedby', prompt.id);\n                prompt.textContent = label('wishlist_clear_prompt', 'Remove all saved products from this browser?');\n                return;\n              }\n              clearConfirmations.forEach(function(cancelConfirmation){ cancelConfirmation(false); });\n              set([]);\n              renderPage();\n              updateHeaderCount();\n              announceWishlist(scope, label('wishlist_cleared', 'Wishlist cleared.'));\n              var target = scope.querySelector('.abt-wishlist-page__empty a, .abt-wishlist-drawer__empty a');\n              if(target) target.focus({preventScroll:true});\n            });\n          });\n\n          // Add-all-to-cart\n          document.querySelectorAll('[data-wishlist-add-all], #abt-wishlist-add-all').forEach(function(addAllBtn){\n            addAllBtn.addEventListener('click', function(){\n              var handles = get();\n              if(handles.length === 0) return;\n              if(addAllBtn.disabled) return;\n              var originalLabel = addAllBtn.textContent;\n              addAllBtn.disabled = true;\n              addAllBtn.textContent = label('adding', 'Adding\u2026');\n              // Fetch each product to get variant ID, then bulk add\n              Promise.all(handles.map(function(h){\n                return fetchProduct(h).then(function(result){ return result.state === 'ready' ? result.product : null; });\n              })).then(function(products){\n                var items = products\n                  .filter(function(p){ return p && p.type !== 'Service' && !p.gift_card && !/gift-card/.test(p.handle || '') && !p.requires_selling_plan && !(p.selling_plan_groups && p.selling_plan_groups.length) && Array.isArray(p.variants) && p.variants.length === 1; })\n                  .map(function(p){ return p.variants[0].available ? p.variants[0] : null; })\n                  .filter(function(variant){ return !!variant; })\n                  .map(function(variant){ return { id: variant.id, quantity: 1 }; });\n                if(items.length === 0){\n                  addAllBtn.textContent = label('wishlist_no_items', 'No saved items can be added right now.');\n                  setTimeout(function(){ addAllBtn.disabled = false; addAllBtn.textContent = originalLabel; }, 2000);\n                  return;\n                }\n                mutateCart('/cart/add.js', { items: items }).then(function(){\n                  addAllBtn.disabled = false;\n                  addAllBtn.textContent = originalLabel;\n                  if(window.ABT_toast) window.ABT_toast(items.length < handles.length ? label('added', 'Items added to your bag.') + ' ' + label('wishlist_check_products', 'Review the remaining products for options or availability.') : label('added', 'Items added to your bag.'));\n                  setTimeout(function(){ if(window.ABT_openCart) window.ABT_openCart(); }, 300);\n                  if(!window.ABT_openCart) fetchCartState().then(syncCartCounts).catch(reportCartError);\n                }).catch(function(error){\n                  reportCartError(error);\n                  if(window.ABT_refreshCart) window.ABT_refreshCart();\n                  addAllBtn.textContent = 'Failed \u2014 retry';\n                  setTimeout(function(){ addAllBtn.disabled = false; addAllBtn.textContent = originalLabel; }, 2000);\n                });\n              });\n            });\n          });\n\n          var shareBtn = document.getElementById('abt-wishlist-share');\n          if(shareBtn){\n            var sharePanel = document.createElement('div');\n            sharePanel.id = 'abt-wishlist-share-panel';\n            sharePanel.className = 'abt-wishlist-share-panel';\n            sharePanel.hidden = true;\n            sharePanel.setAttribute('role', 'region');\n            sharePanel.setAttribute('aria-labelledby', 'abt-wishlist-share-label');\n            var shareLabel = document.createElement('label');\n            shareLabel.id = 'abt-wishlist-share-label';\n            shareLabel.htmlFor = 'abt-wishlist-share-url';\n            shareLabel.className = 'abt-wishlist-share-panel__label';\n            shareLabel.textContent = label('wishlist_share_link', 'Your wishlist link');\n            var shareInput = document.createElement('input');\n            shareInput.id = 'abt-wishlist-share-url';\n            shareInput.className = 'abt-wishlist-share-panel__input';\n            shareInput.type = 'url';\n            shareInput.readOnly = true;\n            shareInput.autocomplete = 'off';\n            shareInput.spellcheck = false;\n            shareInput.setAttribute('aria-describedby', 'abt-wishlist-share-help abt-wishlist-share-status');\n            var shareHelp = document.createElement('p');\n            shareHelp.id = 'abt-wishlist-share-help';\n            shareHelp.className = 'abt-wishlist-share-panel__help';\n            shareHelp.textContent = label('wishlist_share_help', 'Copy this link to share your saved products.');\n            var shareCopy = document.createElement('button');\n            shareCopy.type = 'button';\n            shareCopy.className = 'btn btn--ghost abt-wishlist-share-panel__copy';\n            shareCopy.textContent = label('wishlist_share_copy', 'Copy link');\n            var shareStatus = document.createElement('p');\n            shareStatus.id = 'abt-wishlist-share-status';\n            shareStatus.className = 'abt-wishlist-share-panel__status';\n            shareStatus.setAttribute('role', 'status');\n            shareStatus.setAttribute('aria-live', 'polite');\n            shareStatus.setAttribute('aria-atomic', 'true');\n            [shareLabel, shareInput, shareCopy, shareHelp, shareStatus].forEach(function(node){ sharePanel.appendChild(node); });\n            shareBtn.parentElement.appendChild(sharePanel);\n            shareBtn.setAttribute('aria-controls', sharePanel.id);\n            shareBtn.setAttribute('aria-expanded', 'false');\n            function syncShareLink(){\n              var handles = get();\n              if(!handles.length){\n                sharePanel.hidden = true;\n                shareBtn.setAttribute('aria-expanded', 'false');\n                return '';\n              }\n              var url = new URL(route('pages/wishlist'), window.location.origin);\n              url.searchParams.set('items', handles.join(','));\n              shareInput.value = url.href;\n              return url.href;\n            }\n            function selectShareLink(){ shareInput.focus(); shareInput.select(); }\n            shareBtn.addEventListener('click', function(){\n              if(!syncShareLink()) return;\n              shareStatus.textContent = '';\n              sharePanel.hidden = false;\n              shareBtn.setAttribute('aria-expanded', 'true');\n              selectShareLink();\n            });\n            document.addEventListener('abt:wishlistChange', function(){\n              if(sharePanel.hidden) return;\n              syncShareLink();\n              shareStatus.textContent = '';\n            });\n            shareCopy.addEventListener('click', function(){\n              if(shareCopy.disabled) return;\n              var link = syncShareLink();\n              if(!link) return;\n              function manualCopy(){\n                if(sharePanel.hidden) return;\n                shareStatus.textContent = label('wishlist_share_manual', 'Select and copy the link above.');\n                selectShareLink();\n              }\n              if(!navigator.clipboard || typeof navigator.clipboard.writeText !== 'function'){\n                manualCopy();\n                return;\n              }\n              shareCopy.disabled = true;\n              shareStatus.textContent = label('wishlist_share_copying', 'Copying link\u2026');\n              var timer;\n              var deadline = new Promise(function(resolve, reject){ timer = setTimeout(function(){ reject(new Error('Clipboard timeout')); }, 5000); });\n              var copying = Promise.resolve().then(function(){ return navigator.clipboard.writeText(link); });\n              Promise.race([copying, deadline]).then(function(){\n                shareStatus.textContent = shareInput.value === link\n                  ? label('wishlist_share_copied', 'Wishlist link copied.')\n                  : label('wishlist_share_changed', 'Your wishlist changed. Copy the updated link.');\n              }).catch(manualCopy).finally(function(){\n                clearTimeout(timer);\n                shareCopy.disabled = false;\n              });\n            });\n          }\n\n          // Auto-import shared wishlist from URL ?items=handle1,handle2\n          var params = new URLSearchParams(window.location.search);\n          var sharedItems = params.get('items');\n          var incoming = sharedItems && sharedItems.length <= 16000 ? cleanHandles(sharedItems.split(',').map(function(h){ return h.trim(); })) : [];\n          if(sharedItems && (sharedItems.length > 16000 || incoming.length > 100)){\n            wlContainers.forEach(function(scope){\n              var notice = document.createElement('p');\n              notice.className = 'abt-wishlist-page__notice';\n              notice.setAttribute('role', 'alert');\n              notice.textContent = label('wishlist_import_too_long', 'This shared list is too large to import. Your saved products are unchanged. Try a smaller shared list.');\n              var target = scope.querySelector('.abt-wishlist-page__inner') || scope;\n              target.insertBefore(notice, target.firstChild);\n            });\n          } else if(sharedItems){\n            var existing = get();\n            incoming.forEach(function(h){\n              if(h && existing.indexOf(h) < 0) existing.unshift(h);\n            });\n            set(existing);\n            // Strip query param\n            params.delete('items');\n            window.history.replaceState({}, '', window.location.pathname + (params.toString() ? '?' + params.toString() : '') + window.location.hash);\n            renderPage();\n            updateHeaderCount();\n            if(window.ABT_toast) window.ABT_toast('Wishlist imported');\n          }\n\n          // ---- Wishlist slide-out overlay (works with no merchant-created page) ----\n          var wlDrawer = document.getElementById('abt-wishlist-drawer');\n          var wlOverlay = document.getElementById('abt-wishlist-overlay');\n          if(wlDrawer && wlOverlay){\n            var openWishlist = function(){\n              wlDrawer.classList.add('is-open');\n              wlOverlay.classList.add('is-open');\n              dialogManager.open(wlDrawer, {backdrop:wlOverlay, initialFocus:wlDrawer.querySelector('[data-close-wishlist]'), onClose:closeWishlist});\n              renderPage();\n              updateHeaderCount();\n            };\n            var closeWishlist = function(options){\n              clearConfirmations.forEach(function(reset){ reset(false); });\n              wlDrawer.classList.remove('is-open');\n              wlOverlay.classList.remove('is-open');\n              dialogManager.close(wlDrawer, options);\n            };\n            window.ABT_openWishlist = openWishlist;\n            window.ABT_closeWishlist = closeWishlist;\n            document.addEventListener('click', function(e){\n              var opener = e.target.closest('[data-open-wishlist]');\n              if(opener){ e.preventDefault(); openWishlist(); return; }\n              var closer = e.target.closest('[data-close-wishlist]');\n              if(!closer) return;\n              if(closer.tagName === 'A'){\n                if(e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;\n              } else e.preventDefault();\n              closeWishlist();\n            });\n          }\n        }\n      })();\n\n      // ---- 4-pre. Page load fade-in + image .is-loaded class ----\n      document.documentElement.classList.remove('abt-loading');\n      (function imageLoadHandler(){\n        function markLoaded(img){ if(img.complete && img.naturalWidth > 0) img.classList.add('is-loaded'); }\n        function bind(){\n          document.querySelectorAll('.abt-prod-card__img img, .abt-shop-studio-card__img img, .abt-recently__img img, .abt-pick__img img, .abt-routine-step__img img').forEach(function(img){\n            if(img.dataset.abtImgBound) return;\n            img.dataset.abtImgBound = '1';\n            if(img.complete) markLoaded(img);\n            else img.addEventListener('load', function(){ markLoaded(img); }, { once: true });\n          });\n        }\n        bind();\n        var mo = new MutationObserver(bind);\n        mo.observe(document.body, { childList: true, subtree: true });\n      })();\n\n      // ---- 4a. Custom gold cursor follower \u2014 REMOVED (was distracting) ----\n      // Previously rendered a 24px gold circle that followed the cursor and\n      // scaled on hover. Users found it weird. Disabled. Native cursor only.\n\n      // ---- 4a1. Welcome offer ribbon dismiss + persist ----\n      (function welcomeRibbon(){\n        var ribbon = document.getElementById('abt-welcome-ribbon');\n        var closeBtn = document.getElementById('abt-welcome-ribbon-close');\n        if(!ribbon || !closeBtn) return;\n        var KEY = 'abt_welcome_dismissed';\n        try {\n          if(localStorage.getItem(KEY)){ ribbon.classList.add('is-hidden'); return; }\n        } catch(e){}\n        closeBtn.addEventListener('click', function(e){\n          e.preventDefault();\n          e.stopPropagation();\n          ribbon.classList.add('is-hidden');\n          try { localStorage.setItem(KEY, '1'); } catch(e){}\n        });\n      })();\n\n      // ---- 4a1b. Cart free-shipping progress bar \u2014 REMOVED (no free-shipping promo) ----\n\n      // ---- 4a2. Shop filter chips (legacy V42/V43) + Add-to-bag (all card grids, incl. bestsellers rail) ----\n      (function shopStudioFilters(){\n        var sec = document.querySelector('.abt-shop-studio--v42, .abt-shop-studio--v43, .abt-shop-studio--v44');\n        var chips = sec ? sec.querySelectorAll('.abt-shop-chip') : [];\n        var cards = sec ? sec.querySelectorAll('.abt-shop-studio-card, .abt-shop-v44__card') : [];\n        chips.forEach(function(chip){\n          chip.addEventListener('click', function(){\n            var filter = chip.getAttribute('data-filter');\n            chips.forEach(function(c){\n              c.classList.toggle('is-active', c === chip);\n              c.setAttribute('aria-selected', c === chip ? 'true' : 'false');\n            });\n            cards.forEach(function(card){\n              var cat = card.getAttribute('data-cat');\n              var match = filter === 'all' || cat === filter;\n              card.classList.toggle('is-hidden', !match);\n            });\n            // Update count chip\n            var allChip = document.querySelector('.abt-shop-studio--v42 .abt-shop-chip[data-filter=\"all\"] .abt-shop-chip__count');\n            if(allChip && filter === 'all'){\n              allChip.textContent = cards.length;\n            }\n          });\n        });\n        // Wire wishlist hearts on shop cards to existing wishlist system\n        var hearts = sec ? sec.querySelectorAll('.abt-shop-studio-card__wishlist') : [];\n        hearts.forEach(function(heart){\n          var handle = heart.getAttribute('data-product-handle');\n          if(!handle) return;\n          try {\n            var list = readWishlist();\n            if(list.indexOf(handle) !== -1) heart.classList.add('is-active');\n          } catch(e){}\n          heart.addEventListener('click', function(e){\n            e.preventDefault();\n            e.stopPropagation();\n            try {\n              var l = readWishlist();\n              var i = l.indexOf(handle);\n              if(i === -1){ l.push(handle); heart.classList.add('is-active'); }\n              else { l.splice(i, 1); heart.classList.remove('is-active'); }\n              localStorage.setItem('abt_wishlist', JSON.stringify(cleanHandles(l)));\n              var countEl = document.querySelector('[data-wishlist-count]');\n              if(countEl) countEl.textContent = l.length;\n              document.dispatchEvent(new CustomEvent('abt:wishlistChange', { detail: { list: l } }));\n            } catch(err){}\n          });\n        });\n\n        // Wire Add-to-bag buttons \u2014 delegated document-wide so cards added later (drawer upsells, load-more) always work\n        document.addEventListener('click', function(e){\n          var btn = e.target.closest('[data-add-to-cart]');\n          if(!btn || btn.disabled) return;\n            e.preventDefault();\n            e.stopPropagation();\n            var variantId = btn.getAttribute('data-variant-id');\n            var handle = btn.getAttribute('data-product-handle');\n            var title = btn.getAttribute('data-product-title') || 'Product';\n            // If no real variant id (draft product, fallback data), send shopper to PDP instead\n            if(!variantId || variantId === ''){\n              window.location.href = route('products/' + encodeURIComponent(handle));\n              return;\n            }\n            btn.setAttribute('disabled', '');\n            mutateCart('/cart/add.js', { items: [{ id: parseInt(variantId, 10), quantity: 1 }] }).then(function(){\n              btn.classList.add('is-added');\n              btn.removeAttribute('disabled');\n              if(window.ABT_openCart) window.ABT_openCart();\n              else fetchCartState().then(syncCartCounts).catch(reportCartError);\n              showAddToast(title);\n              // Reset button after 2.5s\n              setTimeout(function(){ btn.classList.remove('is-added'); }, 2500);\n            }).catch(function(err){\n              btn.removeAttribute('disabled');\n              reportCartError(err);\n              if(window.ABT_refreshCart) window.ABT_refreshCart();\n            });\n        });\n\n        // Toast helper\n        function showAddToast(title){\n          if(window.ABT_toast) window.ABT_toast(label('added', 'Items added to your bag.') + ' ' + title);\n        }\n      })();\n\n      // ---- 4b. Sticky desktop \"Book Treatment\" pill ----\n      var stickyBook = document.getElementById('abt-sticky-book');\n      if(stickyBook){\n        var heroEl = document.querySelector('.abt-hero');\n        var threshold = heroEl ? heroEl.offsetHeight * 0.65 : 600;\n        var ticking = false;\n        function updateStickyBook(){\n          var y = window.scrollY || window.pageYOffset;\n          // Hide near footer to avoid overlap with footer CTA\n          var nearBottom = (window.innerHeight + y) > (document.documentElement.scrollHeight - 400);\n          if(y > threshold && !nearBottom){\n            stickyBook.classList.add('is-visible');\n          } else {\n            stickyBook.classList.remove('is-visible');\n          }\n          ticking = false;\n        }\n        window.addEventListener('scroll', function(){\n          if(!ticking){ requestAnimationFrame(updateStickyBook); ticking = true; }\n        }, { passive: true });\n        updateStickyBook();\n      }\n\n      // ---- 5. Testimonials carousel (driven by data attribute on track) ----\n      var quoteTracks = document.querySelectorAll('[data-quote-carousel]');\n      quoteTracks.forEach(function(track){\n        var slides = track.querySelectorAll('.abt-quote');\n        var dotsWrap = track.parentElement.querySelector('.abt-quotes__dots');\n        if(!slides.length) return;\n        var idx = 0;\n        var dots = [];\n        if(dotsWrap){\n          slides.forEach(function(_, i){\n            var d = document.createElement('button');\n            d.className = 'abt-quote-dot';\n            d.setAttribute('aria-label', 'Testimonial ' + (i+1));\n            d.addEventListener('click', function(){ show(i); reset(); });\n            dotsWrap.appendChild(d);\n            dots.push(d);\n          });\n        }\n        function show(i){\n          idx = (i + slides.length) % slides.length;\n          slides.forEach(function(s, j){ s.classList.toggle('is-active', j === idx); });\n          dots.forEach(function(d, j){ d.classList.toggle('is-active', j === idx); });\n        }\n        show(0);\n        var timer = setInterval(function(){ show(idx + 1); }, 6500);\n        function reset(){ clearInterval(timer); timer = setInterval(function(){ show(idx + 1); }, 6500); }\n      });\n\n      // ---- 6. Hero loaded class for ken burns ----\n      document.querySelectorAll('.abt-hero').forEach(function(h){\n        requestAnimationFrame(function(){ requestAnimationFrame(function(){ h.classList.add('is-loaded'); }); });\n      });\n\n\n      // ---- 9. Page intro animation cleanup ----\n      var intro = document.getElementById('abt-intro');\n      if(intro){\n        // Only show on home page first load\n        var alreadyShown = sessionStorage.getItem('abt-intro-shown');\n        if(alreadyShown || document.body.dataset.template !== 'index'){\n          intro.classList.add('abt-intro--done');\n        } else {\n          sessionStorage.setItem('abt-intro-shown', '1');\n          setTimeout(function(){ intro.classList.add('abt-intro--done'); }, 2200);\n        }\n      }\n\n      // ---- 10. Counter animation for stats ----\n      var counters = document.querySelectorAll('[data-counter]');\n      if(counters.length && 'IntersectionObserver' in window){\n        var countObs = new IntersectionObserver(function(entries){\n          entries.forEach(function(e){\n            if(!e.isIntersecting) return;\n            var el = e.target;\n            if(el.dataset.counted) return;\n            el.dataset.counted = '1';\n            var target = parseInt(el.dataset.counter, 10);\n            var suffix = el.dataset.suffix || '';\n            var dur = 1800;\n            var start = performance.now();\n            var ease = function(t){ return 1 - Math.pow(1 - t, 3); };\n            var step = function(now){\n              var t = Math.min(1, (now - start) / dur);\n              var val = Math.round(target * ease(t));\n              el.textContent = val + suffix;\n              if(t < 1) requestAnimationFrame(step);\n            };\n            requestAnimationFrame(step);\n            countObs.unobserve(el);\n          });\n        }, { threshold: 0.4 });\n        counters.forEach(function(c){ countObs.observe(c); });\n      }\n\n      // ---- 11a. Brand-CDN product image fallback (universal) ----\n      var PRODUCT_IMG_MAP = {}; // hardcoded URLs removed (brief) \u2014 see PRODUCT-IMAGE-URLS.md\n      window.ABT_PRODUCT_IMG_MAP = PRODUCT_IMG_MAP;\n\n\n      // ---- 11b. Skin Quiz (interactive multi-step modal) ----\n      (function initQuiz(){\n        var modal = document.getElementById('abt-quiz-modal');\n        if(!modal) return;\n        var closeBtn = document.getElementById('abt-quiz-close');\n        var progressSteps = modal.querySelectorAll('.abt-quiz-prog__step');\n        var questions = Array.from(modal.querySelectorAll('.abt-quiz-q'));\n        var resultPane = document.getElementById('abt-quiz-result');\n        var backBtn = document.getElementById('abt-quiz-back');\n        var countLabel = document.getElementById('abt-quiz-count');\n        var navBar = document.getElementById('abt-quiz-nav');\n        var emailInput = document.getElementById('abt-quiz-email');\n        var nameInput = document.getElementById('abt-quiz-name');\n        var submitBtn = document.getElementById('abt-quiz-submit');\n        var skipEmailBtn = document.getElementById('abt-quiz-skip-email');\n\n        var current = 0;\n        var answers = {};\n\n        function showStep(i){\n          current = Math.max(0, Math.min(questions.length - 1, i));\n          questions.forEach(function(q, idx){ q.classList.toggle('is-active', idx === current); });\n          progressSteps.forEach(function(s, idx){\n            s.classList.toggle('is-done', idx < current);\n            s.classList.toggle('is-active', idx === current);\n          });\n          countLabel.textContent = 'Step ' + (current + 1) + ' of ' + questions.length;\n          backBtn.disabled = current === 0;\n          navBar.style.display = '';\n          resultPane.classList.remove('is-active');\n          if(current === questions.length - 1) {\n            navBar.style.display = 'none'; // email step has own submit button\n          }\n        }\n\n        function openModal(){\n          modal.classList.add('is-open');\n          dialogManager.open(modal, {initialFocus:closeBtn, onClose:closeModal});\n          // Reset to step 1\n          current = 0; answers = {};\n          questions.forEach(function(q){\n            q.querySelectorAll('.abt-quiz-option').forEach(function(o){ o.classList.remove('is-selected'); });\n          });\n          if(emailInput) emailInput.value = '';\n          if(nameInput) nameInput.value = '';\n          showStep(0);\n        }\n        function closeModal(options){\n          modal.classList.remove('is-open');\n          dialogManager.close(modal, options);\n        }\n\n        // Wire up all triggers (any link/button to #routine-finder or #start-quiz)\n        document.querySelectorAll('a[href=\"#start-quiz\"], button[data-open-quiz], [data-quiz-trigger]').forEach(function(t){\n          t.addEventListener('click', function(e){ e.preventDefault(); openModal(); });\n        });\n\n        // Also wire up the existing \"Start the Quiz\" button on home page\n        var quizSection = document.getElementById('routine-finder');\n        if(quizSection){\n          var startBtns = quizSection.querySelectorAll('a.btn--gold, a.btn--lg');\n          startBtns.forEach(function(b){\n            if(b.textContent && /start the quiz|find your routine|take the quiz/i.test(b.textContent)){\n              b.addEventListener('click', function(e){ e.preventDefault(); openModal(); });\n            }\n          });\n        }\n\n        closeBtn.addEventListener('click', closeModal);\n        modal.addEventListener('click', function(e){\n          if(e.target === modal) closeModal();\n        });\n\n        backBtn.addEventListener('click', function(){ showStep(current - 1); });\n\n        // Wire up each option button\n        modal.querySelectorAll('.abt-quiz-option').forEach(function(opt){\n          opt.addEventListener('click', function(){\n            var qEl = opt.closest('.abt-quiz-q');\n            var qKey = qEl.dataset.q;\n            // Mark selected\n            qEl.querySelectorAll('.abt-quiz-option').forEach(function(o){ o.classList.remove('is-selected'); });\n            opt.classList.add('is-selected');\n            answers[qKey] = opt.dataset.value;\n            // Small delay then advance\n            setTimeout(function(){ showStep(current + 1); }, 250);\n          });\n        });\n\n        submitBtn.addEventListener('click', function(){\n          var email = (emailInput.value || '').trim();\n          // Allow submission without email\n          if(email && !/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(email)){\n            emailInput.style.borderColor = '#c0392b';\n            emailInput.focus();\n            return;\n          }\n          answers.email = email;\n          answers.name = (nameInput.value || '').trim();\n          submitQuiz();\n        });\n\n        skipEmailBtn.addEventListener('click', function(){\n          answers.email = '';\n          answers.name = '';\n          submitQuiz();\n        });\n\n        var retakeBtn = document.getElementById('abt-quiz-retake');\n        if(retakeBtn) retakeBtn.addEventListener('click', function(){\n          // Reset\n          current = 0; answers = {};\n          questions.forEach(function(q){\n            q.querySelectorAll('.abt-quiz-option').forEach(function(o){ o.classList.remove('is-selected'); });\n          });\n          if(emailInput) emailInput.value = '';\n          if(nameInput) nameInput.value = '';\n          showStep(0);\n        });\n\n        function submitQuiz(){\n          // Results are displayed here; no unverified follow-up email is promised.\n          renderResult();\n        }\n\n        function renderResult(){\n          // Hide questions, show result\n          questions.forEach(function(q){ q.classList.remove('is-active'); });\n          navBar.style.display = 'none';\n          progressSteps.forEach(function(s){ s.classList.add('is-done'); });\n          resultPane.classList.add('is-active');\n\n          // Build the personalized routine\n          var c = answers.concern || 'maintain';\n          var t = answers.type || 'normal';\n          var commit = answers.commit || 'moderate';\n          var treatment = answers.treatment || 'yes-local';\n          var nameGreeting = answers.name ? answers.name : 'you';\n\n          var routineLib = {\n            // AM essentials\n            cleanser_basic: { name: 'Ultra Gentle Gel Cleanser', desc: 'Face Reality \u00B7 daily cleanser that respects the barrier.', handle: 'ultra-gentle-gel-cleanser' },\n            cleanser_mandelic: { name: 'Mandelic Face & Body Wash', desc: 'Face Reality \u00B7 gentle resurfacing cleanser, ideal for acne-prone skin.', handle: 'mandelic-face-and-body-wash' },\n            cleanser_acne: { name: 'Acne Face & Body Wash', desc: 'Face Reality \u00B7 benzoyl peroxide cleanser for active breakouts.', handle: 'acne-face-and-body-wash' },\n            cleanser_barrier: { name: 'Barrier Balance Creamy Cleanser', desc: 'Face Reality \u00B7 for sensitive, compromised barrier skin.', handle: 'barrier-balance-creamy-cleanser' },\n            cleanser_calming: { name: 'Calming Facial Toner', desc: 'Face Reality \u00B7 soothes and balances after cleansing.', handle: 'calming-facial-toner' },\n\n            // Treatment serums\n            serum_glycolic: { name: '10% Glycolic Serum', desc: 'Face Reality \u00B7 resurfacing serum for texture & tone.', handle: '10-glycolic-serum' },\n            serum_glycolic_low: { name: '5% Glycolic Serum', desc: 'Face Reality \u00B7 gentler resurfacing, perfect for beginners.', handle: '5-glycolic-serum' },\n            serum_mandelic: { name: '8% L-Mandelic Acid Serum', desc: 'Face Reality \u00B7 clears breakouts without aggression.', handle: '8-l-mandelic-acid' },\n            serum_mandelic_strong: { name: '15% L-Mandelic Acid Serum', desc: 'Face Reality \u00B7 advanced serum for stubborn acne & PIH.', handle: '15-l-mandelic-acid' },\n            serum_retinol: { name: 'Retinol B3 Serum', desc: 'Face Reality \u00B7 retinaldehyde for fine lines & texture.', handle: 'retinol-b3-serum' },\n            serum_peptide: { name: 'Retinol Peptide Serum', desc: 'Face Reality \u00B7 advanced anti-aging corrective serum.', handle: 'retinol-peptide-serum' },\n            serum_aox: { name: 'Antioxidant Peptide Serum', desc: 'Face Reality \u00B7 brightens, protects, smooths.', handle: 'antioxidant-peptide-serum' },\n            serum_glowtone: { name: 'GlowTone Corrective Serum', desc: 'Face Reality \u00B7 targets hyperpigmentation & uneven tone.', handle: 'glowtone-corrective' },\n            serum_biome: { name: 'Biome Balancing Serum', desc: 'SIV \u00B7 pre/probiotic serum that restores the skin microbiome.', handle: 'biome-balancing-serum' },\n            serum_ha: { name: 'Restorative HA Serum', desc: 'Hydrinity \u00B7 luxe hydration for plump, dewy skin.', handle: 'restorative-ha-serum' },\n            serum_hyacyn: { name: 'Hyacyn Active Spray', desc: 'Hydrinity \u00B7 calming antimicrobial spray.', handle: 'hyacyn-active-spray' },\n\n            // Moisturizers\n            moist_clearderma: { name: 'ClearDerma Moisturizer', desc: 'Face Reality \u00B7 oil-free moisturizer for acne-prone skin.', handle: 'clearderma-moisturizer' },\n            moist_cran: { name: 'Cran-Peptide Cream', desc: 'Face Reality \u00B7 rich, nourishing cream for dry skin.', handle: 'cran-peptide-cream' },\n            moist_comfort: { name: 'Comfort Cream', desc: 'Glymed \u00B7 soothing barrier-repair moisturizer.', handle: 'comfort-cream' },\n            moist_barrier: { name: 'Barrier Care Gel Cream', desc: 'Face Reality \u00B7 lightweight barrier-strengthening hydrator.', handle: 'barrier-care-gel-cream' },\n            moist_hb: { name: 'HydraBalance Gel', desc: 'Face Reality \u00B7 oil-free hydrator, gel finish.', handle: 'hydrabalance-gel' },\n            moist_hr: { name: 'HydraRemedy Gel Serum', desc: 'Face Reality \u00B7 ultra-hydrating gel for thirsty skin.', handle: 'hydraremedy-gel-serum' },\n\n            // SPF\n            spf30: { name: 'Daily SPF 30+ Lotion', desc: 'Face Reality \u00B7 broad-spectrum, every-day SPF.', handle: 'daily-spf30-lotion' },\n            spf_mineral: { name: 'Mineral Matte SPF 28', desc: 'Face Reality \u00B7 zinc-based mineral SPF, matte finish.', handle: 'mineral-matte-spf28' },\n            spf_power: { name: 'Power Mineral SPF 50', desc: 'Face Reality \u00B7 high-protection mineral SPF.', handle: 'power-mineral-spf-50' },\n\n            // Add-ons\n            mask_clay: { name: 'Soothing Clay Mask', desc: 'Face Reality \u00B7 weekly clarifying mask, especially for acne.', handle: 'soothing-clay-mask' },\n            mask_brighten: { name: 'Brighten C Mask', desc: 'Face Reality \u00B7 vitamin C brightening mask.', handle: 'brighten-c-mask' },\n            mask_hydra: { name: 'HydraCalm Mask', desc: 'Face Reality \u00B7 soothing weekly hydration mask.', handle: 'hydracalm-mask' },\n            mask_restorative: { name: 'Restorative HA Mask', desc: 'Hydrinity \u00B7 luxe overnight HA mask.', handle: 'restorative-ha-mask' },\n            lip: { name: 'LUXE Lip Hydrator', desc: 'Hydrinity \u00B7 plumping, hydrating lip treatment.', handle: 'luxe-lip-hydrator' }\n          };\n\n          var picks = [];\n\n          // Cleanser\n          if(c === 'acne') picks.push(routineLib.cleanser_mandelic);\n          else if(t === 'sensitive' || c === 'sensitive') picks.push(routineLib.cleanser_barrier);\n          else if(t === 'dry') picks.push(routineLib.cleanser_basic);\n          else picks.push(routineLib.cleanser_basic);\n\n          // Treatment serum (AM or PM depending on routine)\n          if(c === 'acne'){\n            picks.push(commit === 'quick' ? routineLib.serum_mandelic : routineLib.serum_mandelic_strong);\n          } else if(c === 'pigment'){\n            picks.push(routineLib.serum_glowtone);\n            if(commit !== 'quick') picks.push(routineLib.serum_glycolic_low);\n          } else if(c === 'aging'){\n            picks.push(commit === 'full' ? routineLib.serum_peptide : routineLib.serum_retinol);\n            if(commit !== 'quick') picks.push(routineLib.serum_aox);\n          } else if(c === 'texture'){\n            picks.push(routineLib.serum_glycolic);\n            if(commit !== 'quick') picks.push(routineLib.serum_aox);\n          } else if(c === 'sensitive'){\n            picks.push(routineLib.serum_biome);\n            picks.push(routineLib.serum_hyacyn);\n          } else {\n            picks.push(routineLib.serum_aox);\n          }\n\n          // Hydration\n          if(t === 'dry') picks.push(routineLib.serum_ha);\n          else if(commit === 'full') picks.push(routineLib.serum_ha);\n\n          // Moisturizer\n          if(c === 'acne' || t === 'oily') picks.push(routineLib.moist_clearderma);\n          else if(t === 'sensitive' || c === 'sensitive') picks.push(routineLib.moist_comfort);\n          else if(t === 'dry') picks.push(routineLib.moist_cran);\n          else picks.push(routineLib.moist_hb);\n\n          // SPF\n          if(t === 'oily' || c === 'acne') picks.push(routineLib.spf_mineral);\n          else if(c === 'pigment' || c === 'aging') picks.push(routineLib.spf_power);\n          else picks.push(routineLib.spf30);\n\n          // Optional weekly mask if user has time\n          if(commit !== 'quick'){\n            if(c === 'acne') picks.push(routineLib.mask_clay);\n            else if(c === 'pigment') picks.push(routineLib.mask_brighten);\n            else if(t === 'dry' || c === 'aging') picks.push(routineLib.mask_restorative);\n            else picks.push(routineLib.mask_hydra);\n          }\n\n          // Cap at 6 picks for readability\n          picks = picks.slice(0, 6);\n\n          var listEl = document.getElementById('abt-quiz-products');\n          listEl.innerHTML = picks.map(function(p, i){\n            return '<div class=\"abt-quiz-rx\">' +\n              '<span class=\"abt-quiz-rx__num\">' + (i + 1).toString().padStart(2, '0') + '</span>' +\n              '<div class=\"abt-quiz-rx__body\">' +\n                '<p class=\"abt-quiz-rx__name\">' + p.name + '</p>' +\n                '<p class=\"abt-quiz-rx__desc\">' + p.desc + '</p>' +\n              '</div>' +\n              '<a href=\"/products/' + p.handle + '\" class=\"abt-quiz-rx__link\">View \u2192</a>' +\n            '</div>';\n          }).join('');\n\n          // Treatment recommendation\n          var treatments = {\n            acne: { name: 'Acne Boot Camp + Consult', desc: '75 min \u00B7 $140 \u2014 Personalized plan and first treatment for clearing skin.', book: 'https://aestheticsbytalli.glossgenius.com/services' },\n            texture: { name: 'Advanced Glow Treatment', desc: '80 min \u00B7 $240 \u2014 Dermaplaning + LED + enzyme + lymphatic massage. Transformative.', book: 'https://aestheticsbytalli.glossgenius.com/services' },\n            pigment: { name: 'BiorepeelC13 Chemical Peel', desc: '30 min \u00B7 $250 \u2014 Targets hyperpigmentation and evens skin tone.', book: 'https://aestheticsbytalli.glossgenius.com/services' },\n            aging: { name: 'Advanced Glow Treatment', desc: '80 min \u00B7 $240 \u2014 Stimulates collagen, smooths, brightens.', book: 'https://aestheticsbytalli.glossgenius.com/services' },\n            sensitive: { name: 'Custom Facial', desc: '75 min \u00B7 $165 \u2014 Gentle, customized for sensitive skin, calms and restores.', book: 'https://aestheticsbytalli.glossgenius.com/services' },\n            maintain: { name: 'Custom Facial', desc: '75 min \u00B7 $165 \u2014 Monthly maintenance for healthy, radiant skin.', book: 'https://aestheticsbytalli.glossgenius.com/services' }\n          };\n          var tEl = document.getElementById('abt-quiz-treatment');\n          var section = document.getElementById('abt-quiz-treatment-section');\n          if(treatment === 'products'){\n            section.style.display = 'none';\n          } else {\n            section.style.display = '';\n            var rec = treatments[c] || treatments.maintain;\n            tEl.innerHTML = '<div class=\"abt-quiz-rx\">' +\n              '<span class=\"abt-quiz-rx__num\">\u2605</span>' +\n              '<div class=\"abt-quiz-rx__body\">' +\n                '<p class=\"abt-quiz-rx__name\">' + rec.name + '</p>' +\n                '<p class=\"abt-quiz-rx__desc\">' + rec.desc + '</p>' +\n              '</div>' +\n              '<a href=\"' + rec.book + '\" target=\"_blank\" rel=\"noopener\" class=\"abt-quiz-rx__link\">Book \u2192</a>' +\n            '</div>';\n          }\n\n          // Personalize title\n          var concernCopy = {\n            acne: 'A plan to clear your skin.',\n            texture: 'A routine to bring back your glow.',\n            pigment: 'A plan to even your skin tone.',\n            aging: 'A clinical routine for firm, glowing skin.',\n            sensitive: 'A barrier-first routine for calm skin.',\n            maintain: 'A maintenance routine for healthy skin.'\n          };\n          document.getElementById('abt-quiz-result-title').textContent = concernCopy[c] || 'Your skin\\'s plan is ready.';\n          if(answers.name){\n            document.getElementById('abt-quiz-result-sub').textContent = 'Built around your skin, ' + answers.name + '. Final fine-tuning happens in your consultation.';\n          } else {\n            document.getElementById('abt-quiz-result-sub').textContent = 'Built around your answers. Final fine-tuning happens in your consultation.';\n          }\n        }\n\n      })();\n\n      // ---- 11a-quickadd. RETIRED \u2014 cards now carry a real Add-to-bag pill in markup (variant-accurate, always visible) ----\n\n      // ---- 11a-services. Homepage treatments: expand the full menu ----\n      document.addEventListener('click', function(e){\n        var t = e.target.closest('[data-expand-services]');\n        if(!t) return;\n        var list = document.getElementById('abt-services-list');\n        if(list){ list.classList.remove('is-collapsed'); }\n        t.remove();\n      });\n\n      // ---- 11a-cart. Cart drawer ----\n      (function initCartDrawer(){\n        var overlay = document.getElementById('abt-cart-overlay');\n        var drawer = document.getElementById('abt-cart-drawer');\n        var closeBtn = document.getElementById('abt-cart-drawer-close');\n        var body = document.getElementById('abt-cart-drawer-body');\n        var itemsEl = document.getElementById('abt-cart-drawer-items');\n        var emptyEl = drawer ? drawer.querySelector('.abt-cart-drawer__empty') : null;\n        var foot = document.getElementById('abt-cart-drawer-foot');\n        var subtotalEl = document.getElementById('abt-cart-drawer-subtotal');\n        if(!drawer || !overlay) return;\n        var lastCart = null;\n        var refreshSequence = 0;\n        var updating = false;\n        var errorEl = document.createElement('p');\n        errorEl.setAttribute('role', 'alert');\n        errorEl.hidden = true;\n        (body || drawer).insertBefore(errorEl, (body || drawer).firstChild);\n        function showError(error){\n          errorEl.textContent = error && error.message || 'Could not load your bag. Please try again.';\n          errorEl.hidden = false;\n          reportCartError(error);\n        }\n        function setUpdating(value){\n          updating = value;\n          drawer.setAttribute('aria-busy', value ? 'true' : 'false');\n          if(itemsEl) itemsEl.querySelectorAll('button, input').forEach(function(el){ el.disabled = value; });\n        }\n        function fmt(cents){ return money(cents); }\n        function brandCdnFallback(handle){\n          if(window.ABT_PRODUCT_IMG_MAP && window.ABT_PRODUCT_IMG_MAP[handle]) return window.ABT_PRODUCT_IMG_MAP[handle];\n          return null;\n        }\n        function render(cart){\n          syncCartCounts(cart);\n          lastCart = cart;\n          errorEl.hidden = true;\n          if(cart.item_count === 0){\n            if(emptyEl) emptyEl.style.display = '';\n            if(itemsEl){ itemsEl.hidden = true; itemsEl.innerHTML = ''; }\n            if(foot) foot.hidden = true;\n            return;\n          }\n          if(emptyEl) emptyEl.style.display = 'none';\n          if(itemsEl) itemsEl.hidden = false;\n          if(foot) foot.hidden = false;\n          if(subtotalEl) subtotalEl.textContent = fmt(cart.items_subtotal_price == null ? cart.total_price : cart.items_subtotal_price);\n          // Sync cart note from cart data\n          var noteEl = document.getElementById('abt-cart-drawer-note');\n          if(noteEl && cart.note !== undefined && document.activeElement !== noteEl){\n            noteEl.value = cartNoteValue(cart.note || '');\n          }\n          var html = cart.items.map(function(it, idx){\n            var imgSrc = it.image ? it.image : '';\n            if(!imgSrc){ var fb = brandCdnFallback(it.handle); if(fb) imgSrc = fb; }\n            var brand = it.vendor ? '<p class=\"abt-cart-drawer-item__brand\">' + escapeHtml(it.vendor) + '</p>' : '';\n            return ''\n              + '<li class=\"abt-cart-drawer-item\" data-line=\"' + (idx + 1) + '\" data-key=\"' + escapeHtml(it.key) + '\" data-handle=\"' + escapeHtml(it.handle) + '\">'\n              +   '<a href=\"' + escapeHtml(it.url) + '\" class=\"abt-cart-drawer-item__img\">'\n              +     (imgSrc ? '<img src=\"' + escapeHtml(imgSrc) + '\" alt=\"' + escapeHtml(it.title) + '\" loading=\"lazy\">' : '<div class=\"abt-img-ph\"><span class=\"abt-img-ph__mark\">Aesthetics<br><em>by&nbsp;Talli</em></span></div>')\n              +   '</a>'\n              +   '<div class=\"abt-cart-drawer-item__info\">'\n              +     brand\n              +     '<a href=\"' + escapeHtml(it.url) + '\" class=\"abt-cart-drawer-item__name\">' + escapeHtml(it.product_title) + '</a>'\n              +     (it.variant_title && it.variant_title !== 'Default Title' ? '<p class=\"abt-cart-drawer-item__variant\">' + escapeHtml(it.variant_title) + '</p>' : '')\n              +     '<p class=\"abt-cart-drawer-item__price\">' + fmt(it.final_price == null ? it.original_price : it.final_price) + '</p>'\n              +     '<div class=\"abt-cart-drawer-item__controls\">'\n              +       '<div class=\"abt-cart-drawer-item__qty\">'\n              +         '<button type=\"button\" data-qty=\"-1\" aria-label=\"' + escapeHtml(label('decrease_quantity', 'Decrease quantity') + ' \u2014 ' + it.product_title) + '\">\u2212</button>'\n              +         '<input type=\"number\" value=\"' + it.quantity + '\" min=\"0\" max=\"99\" data-qty-input aria-label=\"' + escapeHtml(label('quantity', 'Quantity') + ' \u2014 ' + it.product_title) + '\">'\n              +         '<button type=\"button\" data-qty=\"1\" aria-label=\"' + escapeHtml(label('increase_quantity', 'Increase quantity') + ' \u2014 ' + it.product_title) + '\">+</button>'\n              +       '</div>'\n              +       '<button type=\"button\" class=\"abt-cart-drawer-item__remove\" data-remove aria-label=\"' + escapeHtml(label('remove', 'Remove') + ' \u2014 ' + it.product_title) + '\">' + escapeHtml(label('remove', 'Remove')) + '</button>'\n              +     '</div>'\n              +   '</div>'\n              +   '<p class=\"abt-cart-drawer-item__line\">' + fmt(it.final_line_price) + '</p>'\n              + '</li>';\n          }).join('');\n          if(itemsEl) itemsEl.innerHTML = html;\n        }\n        function refreshCart(){\n          var sequence = ++refreshSequence;\n          var revision = cartRevision;\n          return fetchCartState().then(function(cart){\n            if(sequence === refreshSequence && revision === cartRevision) render(cart);\n            return cart;\n          }).catch(function(error){\n            if(sequence === refreshSequence && revision === cartRevision) showError(error);\n          });\n        }\n        function updateLine(key, quantity, control){\n          if(updating || !key) return;\n          quantity = validCartQuantity(quantity);\n          if(quantity === null){\n            if(lastCart) render(lastCart);\n            showError(new Error('Enter a whole-number quantity from 0 to 99.'));\n            return;\n          }\n          var focusSelector = control && control.matches('[data-qty-input]') ? '[data-qty-input]' :\n            control && control.matches('[data-remove]') ? '[data-remove]' :\n            control && control.dataset.qty === '-1' ? '[data-qty=\"-1\"]' : '[data-qty=\"1\"]';\n          ++refreshSequence;\n          setUpdating(true);\n          var request = mutateCart('/cart/change.js', { id: key, quantity: quantity });\n          var revision = cartRevision;\n          return request.then(function(cart){\n            if(revision === cartRevision) render(cart);\n            else return refreshCart();\n          }).catch(function(error){\n            if(lastCart) render(lastCart);\n            // A rejected request may have applied an inventory-limited change.\n            return refreshCart().then(function(){ showError(error); });\n          }).then(function(){\n            setUpdating(false);\n            if(!drawer.classList.contains('is-open') || !itemsEl) return;\n            var row = Array.from(itemsEl.querySelectorAll('.abt-cart-drawer-item')).find(function(el){ return el.dataset.key === key; });\n            var nextFocus = row ? row.querySelector(focusSelector) : closeBtn;\n            if(nextFocus) nextFocus.focus();\n          });\n        }\n        function open(){\n          drawer.classList.add('is-open'); overlay.classList.add('is-open');\n          dialogManager.open(drawer, {backdrop:overlay, initialFocus:closeBtn, onClose:close});\n          refreshCart();\n        }\n        function close(options){\n          drawer.classList.remove('is-open'); overlay.classList.remove('is-open');\n          dialogManager.close(drawer, options);\n        }\n        window.ABT_openCart = open;\n        window.ABT_closeCart = close;\n        window.ABT_refreshCart = refreshCart;\n        // Toast helper\n        var toast = document.getElementById('abt-toast');\n        var toastMsg = document.getElementById('abt-toast-msg');\n        var toastTimer;\n        window.ABT_toast = function(text){\n          // Also announce to screen readers via live region\n          var live = document.getElementById('abt-sr-live');\n          if(live && text){ live.textContent = ''; setTimeout(function(){ live.textContent = text; }, 50); }\n          if(!toast) return;\n          if(toastMsg && text) toastMsg.textContent = text;\n          toast.classList.add('is-visible');\n          toast.setAttribute('aria-hidden', 'false');\n          clearTimeout(toastTimer);\n          toastTimer = setTimeout(function(){\n            toast.classList.remove('is-visible');\n            toast.setAttribute('aria-hidden', 'true');\n          }, 2400);\n        };\n        document.querySelectorAll('[data-open-cart]').forEach(function(t){ t.addEventListener('click', function(e){ e.preventDefault(); open(); }); });\n        document.querySelectorAll('[data-close-cart]').forEach(function(t){ t.addEventListener('click', function(e){ if(t.tagName !== 'A') e.preventDefault(); close(); }); });\n        if(closeBtn) closeBtn.addEventListener('click', close);\n        overlay.addEventListener('click', close);\n        // Cart item qty + remove handlers (delegated)\n        if(body){\n          body.addEventListener('click', function(e){\n            if(updating) return;\n            var item = e.target.closest('.abt-cart-drawer-item');\n            if(!item) return;\n            var key = item.dataset.key;\n            if(e.target.matches('[data-remove]')){\n              updateLine(key, 0, e.target);\n              return;\n            }\n            if(e.target.matches('[data-qty]')){\n              var input = item.querySelector('[data-qty-input]');\n              var step = parseInt(e.target.dataset.qty, 10);\n              var current = validCartQuantity(input.value);\n              if(current === null){ updateLine(key, input.value, e.target); return; }\n              var v = Math.max(0, Math.min(99, current + step));\n              updateLine(key, v, e.target);\n            }\n          });\n          body.addEventListener('change', function(e){\n            if(updating) return;\n            if(e.target.matches('[data-qty-input]')){\n              var item = e.target.closest('.abt-cart-drawer-item');\n              if(!item) return;\n              updateLine(item.dataset.key, e.target.value, e.target);\n            }\n          });\n        }\n        // Initial render with current state\n        refreshCart();\n        // Hook into add-to-cart events to auto-open\n        window.ABT_cartAdded = function(){ open(); };\n      })();\n\n      // ---- 11b. Announce bar rotator ----\n      (function initAnnounceRotator(){\n        var msgs = document.querySelectorAll('#abt-announce .abt-announce__msg');\n        if(msgs.length < 2) return;\n        var i = 0;\n        setInterval(function(){\n          msgs[i].classList.remove('is-active');\n          i = (i + 1) % msgs.length;\n          msgs[i].classList.add('is-active');\n        }, 4500);\n      })();\n\n      // ---- 11c. Optional email popup: manual dismissal only ----\n      // Newsletter signup stays in the embedded native Shopify customer form.\n      // Do not interrupt shopping with timed or scroll-triggered signup prompts.\n      (function initPopup(){\n        var popup = document.getElementById('abt-popup');\n        if(!popup) return;\n        function dismiss(){\n          popup.classList.remove('is-open');\n          popup.setAttribute('aria-hidden', 'true');\n        }\n        ['abt-popup-close', 'abt-popup-dismiss'].forEach(function(id){\n          var button = document.getElementById(id);\n          if(button) button.addEventListener('click', dismiss);\n        });\n        document.addEventListener('keydown', function(e){\n          if(e.key === 'Escape' && popup.classList.contains('is-open')) dismiss();\n        });\n        // Any retained popup form uses Shopify's native submit/validation flow.\n      })();\n\n      // ---- 11. Subtle parallax for hero bg ----\n      var parallaxEls = document.querySelectorAll('[data-parallax]');\n      if(parallaxEls.length && !matchMedia('(prefers-reduced-motion: reduce)').matches){\n        var ticking = false;\n        var doParallax = function(){\n          parallaxEls.forEach(function(el){\n            var rect = el.getBoundingClientRect();\n            var speed = parseFloat(el.dataset.parallax) || 0.3;\n            if(rect.bottom < 0 || rect.top > window.innerHeight) return;\n            // Center the parallax around how far the hero has scrolled past the\n            // top of the viewport, so at rest (hero at top) the offset is ~0\n            // and the bg never shifts DOWN to expose the dark hero background\n            // as a band under the header. Negative = image moves up (safe,\n            // covered by the over-extended .abt-hero__bg box).\n            var offset = -rect.top * speed * 0.5;\n            el.style.transform = 'translate3d(0, ' + offset + 'px, 0) scale(' + (1.06 + Math.abs(offset) * 0.0002) + ')';\n          });\n          ticking = false;\n        };\n        window.addEventListener('scroll', function(){\n          if(!ticking){ requestAnimationFrame(doParallax); ticking = true; }\n        }, { passive: true });\n        doParallax();\n      }\n\n      // ---- 11pre4. Collection filter toggle ----\n      (function nativeFilters(){\n        function bindPanel(toggleId, panelId){\n          var toggle = document.getElementById(toggleId);\n          var panel = document.getElementById(panelId);\n          if(!toggle || !panel) return;\n          function setOpen(open, moveFocus){\n            panel.hidden = !open;\n            panel.classList.toggle('is-open', open);\n            toggle.setAttribute('aria-expanded', String(open));\n            if(open && moveFocus){\n              var field = panel.querySelector('input:not([type=\"hidden\"]):not([disabled]), select:not([disabled]), button:not([disabled]), a[href]');\n              if(field) field.focus({preventScroll:true});\n            }\n          }\n          toggle.addEventListener('click', function(event){ setOpen(panel.hidden, event.detail === 0); });\n          function escapePanel(event){\n            if(event.key !== 'Escape' || panel.hidden) return;\n            event.preventDefault();\n            event.stopPropagation();\n            setOpen(false, false);\n            toggle.focus({preventScroll:true});\n          }\n          toggle.addEventListener('keydown', escapePanel);\n          panel.addEventListener('keydown', escapePanel);\n        }\n        bindPanel('abt-coll-filter-toggle', 'abt-coll-filter');\n        bindPanel('abt-search-filter-toggle', 'abt-search-filter');\n        document.querySelectorAll('[data-abt-filter-form]').forEach(function(form){\n          var ranges = Array.from(form.querySelectorAll('[data-abt-price-range]'));\n          function validateRange(group){\n            var minimum = group.querySelector('[data-abt-price-min]');\n            var maximum = group.querySelector('[data-abt-price-max]');\n            var error = group.querySelector('[data-abt-filter-error]');\n            if(!minimum || !maximum) return true;\n            minimum.setCustomValidity('');\n            maximum.setCustomValidity('');\n            var reversed = minimum.value !== '' && maximum.value !== '' && minimum.valueAsNumber > maximum.valueAsNumber;\n            if(reversed) minimum.setCustomValidity(group.dataset.rangeError);\n            var valid = minimum.validity.valid && maximum.validity.valid;\n            minimum.setAttribute('aria-invalid', String(!minimum.validity.valid));\n            maximum.setAttribute('aria-invalid', String(!maximum.validity.valid));\n            if(error){\n              error.hidden = valid;\n              error.textContent = valid ? '' : group.dataset.rangeError;\n            }\n            return valid;\n          }\n          ranges.forEach(function(group){ group.addEventListener('input', function(){ validateRange(group); }); });\n          form.addEventListener('submit', function(event){\n            var valid = true;\n            ranges.forEach(function(group){ if(!validateRange(group)) valid = false; });\n            if(!valid){ event.preventDefault(); form.reportValidity(); }\n          });\n        });\n      })();\n\n      // ---- 11pre3. Search Overlay with as-you-type predictive results ----\n      (function searchOverlay(){\n        var overlay = document.getElementById('abt-search-overlay');\n        var input = document.getElementById('abt-search-input');\n        var results = document.getElementById('abt-search-results');\n        var suggestions = document.getElementById('abt-search-suggestions');\n        var closeBtn = document.getElementById('abt-search-close');\n        if(!overlay || !input || !results) return;\n\n        var searchSequence = 0;\n        var searchController;\n        function open(){\n          overlay.classList.add('is-open');\n          dialogManager.open(overlay, {initialFocus:input, onClose:close});\n        }\n        function close(options){\n          searchSequence++;\n          clearTimeout(debounceTimer);\n          if(searchController) searchController.abort();\n          results.removeAttribute('aria-busy');\n          overlay.classList.remove('is-open');\n          dialogManager.close(overlay, options);\n          results.innerHTML = '';\n          input.value = '';\n          if(suggestions) suggestions.style.display = '';\n        }\n\n        document.querySelectorAll('[data-open-search]').forEach(function(btn){\n          btn.addEventListener('click', open);\n        });\n        if(closeBtn) closeBtn.addEventListener('click', close);\n        overlay.addEventListener('click', function(e){ if(e.target === overlay) close(); });\n\n        // Recent searches via localStorage\n        var RECENT_KEY = 'abt_recent_searches';\n        function getRecent(){\n          try { var stored = JSON.parse(localStorage.getItem(RECENT_KEY) || '[]'); return Array.isArray(stored) ? stored.filter(function(q){ return typeof q === 'string' && q.length <= 200; }).slice(0,5) : []; } catch(e){ return []; }\n        }\n        function pushRecent(q){\n          if(!q || q.length < 2) return;\n          q = q.slice(0, 200);\n          var arr = getRecent().filter(function(x){ return x !== q; });\n          arr.unshift(q);\n          arr = arr.slice(0, 5);\n          try { localStorage.setItem(RECENT_KEY, JSON.stringify(arr)); } catch(e){}\n        }\n        function renderRecent(){\n          var arr = getRecent();\n          if(arr.length === 0 || !suggestions) return;\n          var recentHtml = '<p class=\"abt-search-overlay__label\" style=\"margin-top:1.5rem\">Recent searches</p><div class=\"abt-search-overlay__tags\">' +\n            arr.map(function(q){\n              return '<a href=\"' + route('search') + '?q=' + encodeURIComponent(q) + '\">' + escapeHtml(q) + '</a>';\n            }).join('') + '</div>';\n          // Append only if not already there\n          if(!suggestions.querySelector('.abt-search-overlay__recent')){\n            var div = document.createElement('div');\n            div.className = 'abt-search-overlay__recent';\n            div.innerHTML = recentHtml;\n            suggestions.appendChild(div);\n          }\n        }\n        renderRecent();\n\n        function resultLinks(){\n          return Array.from(results.querySelectorAll('.abt-search-overlay__result, .abt-search-overlay__viewall'));\n        }\n        input.addEventListener('keydown', function(event){\n          if(event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n          var items = resultLinks();\n          if(!items.length) return;\n          event.preventDefault();\n          items[event.key === 'ArrowDown' ? 0 : items.length - 1].focus();\n        });\n        results.addEventListener('keydown', function(event){\n          if(event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\n          var items = resultLinks();\n          var index = items.indexOf(document.activeElement);\n          if(index < 0) return;\n          event.preventDefault();\n          if(event.key === 'ArrowUp' && index === 0){ input.focus(); return; }\n          var next = event.key === 'ArrowDown' ? Math.min(items.length - 1, index + 1) : index - 1;\n          items[next].focus();\n        });\n        results.addEventListener('focusin', function(event){\n          resultLinks().forEach(function(item){ item.classList.toggle('is-keyboard-focus', item === event.target); });\n        });\n        results.addEventListener('focusout', function(){\n          resultLinks().forEach(function(item){ item.classList.remove('is-keyboard-focus'); });\n        });\n\n        // Save search on submit\n        var searchForm = overlay.querySelector('form');\n        if(searchForm){\n          searchForm.addEventListener('submit', function(){\n            pushRecent(input.value.trim());\n          });\n        }\n\n        // Debounced predictive search via Shopify's /search/suggest.json endpoint\n        var debounceTimer;\n        input.addEventListener('input', function(){\n          var q = input.value.trim();\n          clearTimeout(debounceTimer);\n          searchSequence++;\n          if(searchController) searchController.abort();\n          results.removeAttribute('aria-busy');\n          results.innerHTML = '';\n          if(!q || q.length < 2){\n            results.innerHTML = '';\n            if(suggestions) suggestions.style.display = '';\n            return;\n          }\n          debounceTimer = setTimeout(function(){ doSearch(q); }, 220);\n        });\n\n        function doSearch(q){\n          var sequence = searchSequence;\n          searchController = new AbortController();\n          results.setAttribute('aria-busy', 'true');\n          if(suggestions) suggestions.style.display = 'none';\n          var controller = searchController;\n          requestDeadline(function(){\n            return fetch(route('search/suggest.json') + '?q=' + encodeURIComponent(q) + '&resources[type]=product&resources[limit]=8&resources[options][unavailable_products]=last', {signal:controller.signal})\n              .then(function(r){ return r.ok ? r.json() : null; });\n          }, 8000, function(){ controller.abort(); return new Error('Search request timed out'); })\n            .catch(function(){ return null; })\n            .then(function(data){\n              if(sequence !== searchSequence || input.value.trim() !== q || !overlay.classList.contains('is-open')) return;\n              results.removeAttribute('aria-busy');\n              if(!data || !data.resources || !data.resources.results || !Array.isArray(data.resources.results.products)){\n                results.innerHTML = '<div class=\"abt-search-overlay__empty\">' + escapeHtml(label('search_error', 'Suggestions are unavailable. Search the full site below.')) + '</div><a href=\"' + route('search') + '?q=' + encodeURIComponent(q) + '\" class=\"abt-search-overlay__viewall\">' + escapeHtml(label('full_search', 'Search the full site')) + '</a>';\n                return;\n              }\n              var products = data.resources.results.products;\n              if(products.length === 0){\n                results.innerHTML = '<div class=\"abt-search-overlay__empty\">No products match \"' + escapeHtml(q) + '\". Try a different term.</div>' +\n                  '<a href=\"' + route('search') + '?q=' + encodeURIComponent(q) + '\" class=\"abt-search-overlay__viewall\">Search the full site \u2192</a>';\n                return;\n              }\n              var fb = window.ABT_FALLBACK || {};\n              results.innerHTML = products.map(function(p){\n                var img = (p.featured_image && p.featured_image.url) ? p.featured_image.url : (fb[p.handle] || '');\n                var imgHtml = img ? '<img src=\"' + escapeHtml(safeUrl(img, true)) + '\" alt=\"\" loading=\"lazy\">' : '<div class=\"abt-img-ph\"><span class=\"abt-img-ph__mark\">Aesthetics<br><em>by&nbsp;Talli</em></span></div>';\n                var price = p.price !== undefined ? money(Math.round(Number(p.price) * 100)) : '';\n                return '<a href=\"' + escapeHtml(safeUrl(p.url, false)) + '\" class=\"abt-search-overlay__result\">' +\n                  '<div class=\"abt-search-overlay__result-img\">' + imgHtml + '</div>' +\n                  '<div class=\"abt-search-overlay__result-body\">' +\n                    (p.vendor ? '<p class=\"abt-search-overlay__result-brand\">' + escapeHtml(p.vendor) + '</p>' : '') +\n                    '<p class=\"abt-search-overlay__result-name\">' + escapeHtml(p.title) + '</p>' +\n                  '</div>' +\n                  (price ? '<span class=\"abt-search-overlay__result-price\">' + escapeHtml(price) + '</span>' : '') +\n                '</a>';\n              }).join('');\n              results.innerHTML += '<a href=\"' + route('search') + '?q=' + encodeURIComponent(q) + '\" class=\"abt-search-overlay__viewall\">View all results \u2192</a>';\n            });\n        }\n      })();\n\n      // ---- 11pre2. Account dropdown ----\n      (function accountMenu(){\n        var toggle = document.querySelector('.abt-account-toggle');\n        var menu = document.getElementById('abt-account-menu');\n        if(!toggle || !menu) return;\n        toggle.addEventListener('click', function(e){\n          e.stopPropagation();\n          var open = menu.classList.contains('is-open');\n          if(open){\n            menu.classList.remove('is-open');\n            menu.hidden = true;\n            toggle.setAttribute('aria-expanded', 'false');\n          } else {\n            menu.hidden = false;\n            requestAnimationFrame(function(){ menu.classList.add('is-open'); });\n            toggle.setAttribute('aria-expanded', 'true');\n          }\n        });\n        document.addEventListener('click', function(e){\n          if(!menu.contains(e.target) && !toggle.contains(e.target) && menu.classList.contains('is-open')){\n            menu.classList.remove('is-open');\n            toggle.setAttribute('aria-expanded', 'false');\n            setTimeout(function(){ menu.hidden = true; }, 300);\n          }\n        });\n        document.addEventListener('keydown', function(e){\n          if(e.key === 'Escape' && menu.classList.contains('is-open')){\n            menu.classList.remove('is-open');\n            toggle.setAttribute('aria-expanded', 'false');\n            toggle.focus();\n            setTimeout(function(){ menu.hidden = true; }, 300);\n          }\n        });\n      })();\n\n      // ---- 11pre. Global ABT_FALLBACK map (brand-CDN product images) ----\n      window.ABT_FALLBACK = window.ABT_FALLBACK || {}; // hardcoded URLs removed (brief)\n\n      // ---- 11e. Cookie banner (V38 fix \u2014 robust dismiss) ----\n      (function cookieBanner(){\n        var banner = document.getElementById('abt-cookie');\n        if(!banner) return;\n        var KEY = 'abt_cookie_dismissed';\n        // If already dismissed, remove the element entirely\n        try {\n          if(localStorage.getItem(KEY)){\n            banner.remove();\n            return;\n          }\n        } catch(e){}\n        banner.hidden = false;\n        setTimeout(function(){ banner.classList.add('is-visible'); }, 1500);\n        function dismiss(e){\n          if(e){ e.preventDefault(); e.stopPropagation(); }\n          banner.classList.remove('is-visible');\n          try { localStorage.setItem(KEY, '1'); } catch(e){}\n          // Immediately hide visually + remove from DOM after transition\n          banner.style.opacity = '0';\n          banner.style.pointerEvents = 'none';\n          setTimeout(function(){\n            banner.hidden = true;\n            banner.style.display = 'none';\n            if(banner.parentNode) banner.parentNode.removeChild(banner);\n          }, 400);\n        }\n        var accept = document.getElementById('abt-cookie-accept');\n        var close = document.getElementById('abt-cookie-close');\n        if(accept) accept.addEventListener('click', dismiss);\n        if(close) close.addEventListener('click', dismiss);\n        // Also dismiss on Escape key when banner is focused\n        banner.addEventListener('keydown', function(e){\n          if(e.key === 'Escape') dismiss(e);\n        });\n      })();\n\n      // ---- 11d. aria-current on nav links matching current page ----\n      (function ariaCurrentNav(){\n        var path = window.location.pathname;\n        document.querySelectorAll('.abt-nav a[href], #abt-mobile-drawer > a[href], #abt-mobile-drawer .abt-mobile-shop-links a[href]').forEach(function(a){\n          var href = a.getAttribute('href');\n          if(!href) return;\n          if(href.indexOf('#') !== -1) return; // anchor links jump to sections \u2014 never \"the current page\"\n          var clean = href.split('?')[0];\n          if(clean === path || (clean === '/' && path === '/')){\n            a.setAttribute('aria-current', 'page');\n          }\n        });\n      })();\n\n      // ---- 12. Quick View Modal \u2014 RETIRED (V2 dropped its CSS; unstyled markup leaked \"Loading\u2026\" into the page) ----\n\n      // ---- 14b. PDP actions: share, copy, save ----\n      (function pdpActions(){\n        var shareBtn = document.querySelector('[data-prod-share]');\n        var saveBtn = document.querySelector('[data-prod-save]');\n        var sharePanel = document.querySelector('[data-product-share-panel]');\n        var shareInput = sharePanel && sharePanel.querySelector('[data-product-share-url]');\n        var copyBtn = sharePanel && sharePanel.querySelector('[data-product-copy-link]');\n        var shareStatus = sharePanel && sharePanel.querySelector('[data-product-share-status]');\n        if(shareBtn && sharePanel && shareInput && copyBtn && shareStatus){\n          function selectedLink(){\n            var url = new URL(sharePanel.dataset.productUrl || window.location.href, window.location.origin);\n            var variantId = new URL(window.location.href).searchParams.get('variant');\n            url.search = '';\n            url.hash = '';\n            if(variantId && /^[1-9][0-9]*$/.test(variantId)) url.searchParams.set('variant', variantId);\n            return url.href;\n          }\n          function selectLink(){ shareInput.focus(); shareInput.select(); }\n          shareBtn.addEventListener('click', function(){\n            shareInput.value = selectedLink();\n            sharePanel.hidden = false;\n            shareBtn.setAttribute('aria-expanded', 'true');\n            shareStatus.textContent = '';\n            selectLink();\n          });\n          var variant = document.getElementById('abt-prod-variant-select');\n          if(variant) variant.addEventListener('change', function(){\n            if(sharePanel.hidden) return;\n            shareInput.value = selectedLink();\n            shareStatus.textContent = sharePanel.dataset.changed;\n          });\n          copyBtn.addEventListener('click', function(){\n            if(copyBtn.disabled) return;\n            var url = selectedLink();\n            shareInput.value = url;\n            function manual(){ shareStatus.textContent = sharePanel.dataset.manual; selectLink(); }\n            if(!navigator.clipboard || typeof navigator.clipboard.writeText !== 'function'){ manual(); return; }\n            copyBtn.disabled = true;\n            shareStatus.textContent = sharePanel.dataset.copying;\n            requestDeadline(function(){ return navigator.clipboard.writeText(url); }, 5000, function(){ return new Error('Clipboard timeout'); })\n              .then(function(){\n                shareStatus.textContent = selectedLink() === url ? sharePanel.dataset.copied : sharePanel.dataset.changed;\n                shareInput.value = selectedLink();\n              }).catch(manual).finally(function(){ copyBtn.disabled = false; });\n          });\n        }\n        if(saveBtn){\n          var handle = saveBtn.dataset.prodSave;\n          function syncSaveButton(){\n            var saved = readWishlist();\n            var isSaved = saved.indexOf(handle) >= 0;\n            saveBtn.classList.toggle('is-saved', isSaved);\n            saveBtn.setAttribute('aria-pressed', String(isSaved));\n            var text = saveBtn.querySelector('[data-save-text]');\n            if(text) text.textContent = isSaved ? saveBtn.dataset.savedLabel || 'Saved' : saveBtn.dataset.saveLabel || 'Save';\n            var headerCount = document.getElementById('abt-wishlist-count');\n            if(headerCount){ headerCount.textContent = saved.length; headerCount.dataset.count = saved.length; }\n          }\n          syncSaveButton();\n          document.addEventListener('abt:wishlistChange', syncSaveButton);\n          saveBtn.addEventListener('click', function(){\n            if(!cleanHandles([handle]).length) return;\n            try {\n              var arr = readWishlist();\n              var i = arr.indexOf(handle);\n              var nowSaved;\n              if(i >= 0){ arr.splice(i, 1); nowSaved = false; }\n              else { arr.unshift(handle); nowSaved = true; }\n              arr = cleanHandles(arr);\n              localStorage.setItem('abt_wishlist', JSON.stringify(arr));\n              document.dispatchEvent(new CustomEvent('abt:wishlistChange', {detail:{list:arr}}));\n              if(window.ABT_toast) window.ABT_toast(nowSaved ? 'Saved to wishlist' : 'Removed from wishlist');\n            } catch(e){}\n          });\n        }\n      })();\n\n      // ---- 15. Back-to-top button (appears after long scroll) ----\n      (function backToTop(){\n        var btn = document.createElement('button');\n        btn.type = 'button';\n        btn.className = 'abt-back-to-top';\n        btn.setAttribute('aria-label', 'Back to top');\n        btn.innerHTML = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\"><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"/><polyline points=\"5 12 12 5 19 12\"/></svg>';\n        btn.addEventListener('click', function(){ window.scrollTo({ top:0, behavior:scrollBehavior() }); });\n        document.body.appendChild(btn);\n        var ticking = false;\n        function update(){\n          var show = (window.scrollY || window.pageYOffset) > 800;\n          btn.classList.toggle('is-visible', show);\n          ticking = false;\n        }\n        window.addEventListener('scroll', function(){\n          if(!ticking){ requestAnimationFrame(update); ticking = true; }\n        }, { passive: true });\n      })();\n\n    })();\n/* ABT fallback-image graceful degradation -----------------------------------\n   Hotlinked manufacturer-CDN product photos (data-abt-fallback) can fail if a\n   brand changes/blocks its CDN. On error, swap the <img> for the branded\n   placeholder so customers never see a broken-image icon. Centralized \u2014 no\n   per-template markup needed. Real Shopify uploads (featured_image) are exempt. */\n(function(){\n  if (window.__abtImgFallbackBound) return; window.__abtImgFallbackBound = true;\n  function toPlaceholder(img){\n    if (!img || img.dataset.abtFailed) return;\n    img.dataset.abtFailed = '1';\n    var ph = document.createElement('div');\n    ph.className = ('abt-img-ph ' + (img.getAttribute('class') || '')).trim();\n    ph.setAttribute('role', 'img');\n    ph.setAttribute('aria-label', (img.getAttribute('alt') || 'Aesthetics by Talli product') + ' \u2014 photo coming soon');\n    ph.innerHTML = '<span class=\"abt-img-ph__mark\" aria-hidden=\"true\">Aesthetics<br><em>by&nbsp;Talli</em></span>';\n    if (img.parentNode) img.parentNode.replaceChild(ph, img);\n  }\n  // <img> error events do not bubble \u2014 listen in the capture phase.\n  document.addEventListener('error', function(e){\n    var t = e.target;\n    if (t && t.tagName === 'IMG' && t.hasAttribute('data-abt-fallback')) toPlaceholder(t);\n  }, true);\n  // Catch images that already errored before this script ran. A still-loading\n  // (lazy) image has complete=false, so it is correctly left alone.\n  function sweep(){\n    var imgs = document.querySelectorAll('img[data-abt-fallback]');\n    for (var i = 0; i < imgs.length; i++){\n      if (imgs[i].complete && imgs[i].naturalWidth === 0) toPlaceholder(imgs[i]);\n    }\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', sweep);\n  else sweep();\n})();\n// abt-cache-bust-20260603a\n"],
  "mappings": "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",
  "names": ["mo", "closeBtn", "e", "overlay", "drawer", "ticking"]
}
