{
  "version": 3,
  "sources": ["/cdn/shop/t/11/assets/abt-theme.js?rev=20260716sweep"],
  "sourcesContent": ["    (function(){\n      'use strict';\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      // ---- 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        };\n        window.addEventListener('scroll', onScroll, { passive: true });\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        drawer.classList.add('is-open');\n        overlay.classList.add('is-open');\n        burger.classList.add('is-open');\n        burger.setAttribute('aria-expanded', 'true');\n        drawer.setAttribute('aria-hidden', 'false');\n        document.body.style.overflow = 'hidden';\n      }\n      function closeDrawer(){\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        drawer.setAttribute('aria-hidden', 'true');\n        document.body.style.overflow = '';\n      }\n      if(burger){\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(){ setTimeout(closeDrawer, 100); });\n        });\n      }\n\n      // ---- 3. Smooth scroll for anchor links ----\n      document.querySelectorAll('a[href^=\"/#\"], a[href^=\"#\"]').forEach(function(a){\n        a.addEventListener('click', function(e){\n          var href = a.getAttribute('href');\n          var hash = href.indexOf('#') >= 0 ? href.slice(href.indexOf('#')) : '';\n          if(!hash || hash.length < 2) return;\n          // only intercept same-page anchors\n          if(href.startsWith('/#') && location.pathname !== '/') return; // let it navigate\n          var target = document.querySelector(hash);\n          if(!target) return;\n          e.preventDefault();\n          var rect = target.getBoundingClientRect();\n          var offset = rect.top + window.scrollY - 80;\n          window.scrollTo({ top: offset, behavior: 'smooth' });\n        });\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 JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]'); }\n          catch(e){ return []; }\n        }\n        function set(arr){ try { localStorage.setItem(STORAGE_KEY, JSON.stringify(arr)); } catch(e){} }\n        function isSaved(handle){ return get().indexOf(handle) >= 0; }\n        function toggle(handle){\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 insertButtons(){\n          // Retired: hearts on card images competed with the Add-to-bag pill. Wishlist lives in the header and the PDP Save button.\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        insertButtons();\n        updateHeaderCount();\n        var mo = new MutationObserver(insertButtons);\n        mo.observe(document.body, { childList: true, subtree: true });\n\n        // Wishlist: render saved items into EVERY container (page + drawer share ids, so scope per container)\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          function fetchProduct(handle){\n            return fetch('/products/' + handle + '.js')\n              .then(function(r){ return r.ok ? r.json() : null; })\n              .catch(function(){ return null; });\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            var arr = get();\n            if(arr.length === 0){\n              if(emptyEl) emptyEl.hidden = false;\n              if(gridEl) gridEl.hidden = true;\n              if(footerEl) footerEl.hidden = true;\n              return;\n            }\n            if(emptyEl) emptyEl.hidden = true;\n            if(gridEl) gridEl.hidden = false;\n            if(footerEl) footerEl.hidden = false;\n\n            // Pre-render skeletons\n            gridEl.innerHTML = arr.map(function(handle){\n              return '<div class=\"abt-wishlist-item\" data-handle=\"' + handle + '\" data-loading=\"1\">' +\n                '<div class=\"abt-wishlist-item__img-wrap\"><div class=\"abt-prod-card__img\"></div></div>' +\n                '<div class=\"abt-wishlist-item__body\"><span class=\"abt-wishlist-item__name\">Loading\u2026</span></div>' +\n              '</div>';\n            }).join('');\n\n            // Fetch each product and replace skeleton\n            Promise.all(arr.map(fetchProduct)).then(function(results){\n              results.forEach(function(product, i){\n                var handle = arr[i];\n                var node = gridEl.querySelector('[data-handle=\"' + handle + '\"]');\n                if(!node) return;\n                var imgUrl = WISHLIST_FALLBACK[handle] || '';\n                var name = handle.replace(/-/g, ' ').replace(/\\b\\w/g, function(c){ return c.toUpperCase(); });\n                var price = '';\n                var brand = '';\n                var url = '/products/' + handle;\n                if(product){\n                  name = product.title;\n                  if(product.featured_image) imgUrl = product.featured_image;\n                  if(product.price !== undefined){\n                    var p = product.price / 100;\n                    price = '$' + p.toFixed(2);\n                  }\n                  brand = product.vendor || '';\n                  url = product.url || url;\n                }\n                var imgHtml = imgUrl ? '<img src=\"' + imgUrl + '\" alt=\"' + name.replace(/\"/g,'&quot;') + '\" loading=\"lazy\">' : '<div class=\"abt-img-ph\"><span class=\"abt-img-ph__mark\">Aesthetics<br><em>by&nbsp;Talli</em></span></div>';\n                node.dataset.loading = '';\n                node.innerHTML =\n                  '<a href=\"' + url + '\" class=\"abt-wishlist-item__img-wrap\">' +\n                    '<div class=\"abt-prod-card__img\">' + imgHtml + '</div>' +\n                  '</a>' +\n                  '<div class=\"abt-wishlist-item__body\">' +\n                    (brand ? '<p class=\"abt-wishlist-item__brand\">' + escapeHtml(brand) + '</p>' : '') +\n                    '<a href=\"' + url + '\" class=\"abt-wishlist-item__name\">' + escapeHtml(name) + '</a>' +\n                    (price ? '<p class=\"abt-wishlist-item__price\">' + price + '</p>' : '') +\n                    '<div class=\"abt-wishlist-item__actions\">' +\n                      '<a href=\"' + url + '\" class=\"btn btn--gold\">View product</a>' +\n                      '<button type=\"button\" class=\"abt-wishlist-item__remove\" data-wishlist-remove=\"' + handle + '\" aria-label=\"Remove\">Remove</button>' +\n                    '</div>' +\n                  '</div>';\n              });\n              gridEl.querySelectorAll('[data-wishlist-remove]').forEach(function(btn){\n                btn.addEventListener('click', function(){\n                  toggle(btn.dataset.wishlistRemove);\n                  renderPage();\n                  updateHeaderCount();\n                  if(window.ABT_toast) window.ABT_toast('Removed from wishlist');\n                });\n              });\n            });\n          }\n          function renderPage(){ wlContainers.forEach(renderInto); }\n          renderPage();\n          document.querySelectorAll('[id=\"abt-wishlist-clear\"]').forEach(function(clearBtn){\n            clearBtn.addEventListener('click', function(){\n              if(!confirm('Clear all wishlist items?')) return;\n              set([]);\n              renderPage();\n              updateHeaderCount();\n              if(window.ABT_toast) window.ABT_toast('Wishlist cleared');\n            });\n          });\n\n          // Add-all-to-cart\n          document.querySelectorAll('[id=\"abt-wishlist-add-all\"]').forEach(function(addAllBtn){\n            addAllBtn.addEventListener('click', function(){\n              var handles = get();\n              if(handles.length === 0) return;\n              addAllBtn.disabled = true;\n              addAllBtn.textContent = 'Adding\u2026';\n              // Fetch each product to get variant ID, then bulk add\n              Promise.all(handles.map(function(h){\n                return fetch('/products/' + h + '.js').then(function(r){ return r.ok ? r.json() : null; }).catch(function(){ return null; });\n              })).then(function(products){\n                var items = products\n                  .filter(function(p){ return p && p.available !== false && p.variants && p.variants[0]; })\n                  .map(function(p){ return { id: p.variants[0].id, quantity: 1 }; });\n                if(items.length === 0){\n                  addAllBtn.textContent = 'Nothing available';\n                  setTimeout(function(){ addAllBtn.disabled = false; addAllBtn.textContent = 'Add all to cart'; }, 2000);\n                  return;\n                }\n                fetch('/cart/add.js', {\n                  method: 'POST',\n                  headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n                  body: JSON.stringify({ items: items })\n                }).then(function(r){ return r.json(); }).then(function(){\n                  addAllBtn.disabled = false;\n                  addAllBtn.textContent = 'Add all to cart';\n                  if(window.ABT_toast) window.ABT_toast('Added ' + items.length + ' items to cart');\n                  setTimeout(function(){ if(window.ABT_openCart) window.ABT_openCart(); }, 300);\n                  // Refresh cart count\n                  fetch('/cart.js').then(function(r){return r.json();}).then(function(cart){\n                    document.querySelectorAll('.abt-cart-count').forEach(function(el){\n                      el.textContent = cart.item_count; el.dataset.count = cart.item_count;\n                    });\n                  }).catch(function(){});\n                }).catch(function(){\n                  addAllBtn.textContent = 'Failed \u2014 retry';\n                  setTimeout(function(){ addAllBtn.disabled = false; addAllBtn.textContent = 'Add all to cart'; }, 2000);\n                });\n              });\n            });\n          });\n\n          // Share wishlist (encodes handles in URL)\n          var shareBtn = document.getElementById('abt-wishlist-share');\n          if(shareBtn){\n            shareBtn.addEventListener('click', function(){\n              var handles = get();\n              if(handles.length === 0) return;\n              var url = window.location.origin + '/?items=' + encodeURIComponent(handles.join(','));\n              if(navigator.share){\n                navigator.share({ title: 'My wishlist', url: url }).catch(function(){});\n              } else if(navigator.clipboard){\n                navigator.clipboard.writeText(url).then(function(){\n                  if(window.ABT_toast) window.ABT_toast('Wishlist link copied');\n                });\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          if(sharedItems){\n            var existing = get();\n            sharedItems.split(',').forEach(function(h){\n              h = h.trim();\n              if(h && existing.indexOf(h) < 0) existing.unshift(h);\n            });\n            set(existing.slice(0, 20));\n            // Strip query param\n            window.history.replaceState({}, '', window.location.pathname);\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              renderPage();\n              updateHeaderCount();\n              wlDrawer.classList.add('is-open');\n              wlOverlay.classList.add('is-open');\n              wlDrawer.setAttribute('aria-hidden', 'false');\n              document.body.classList.add('abt-no-scroll');\n            };\n            var closeWishlist = function(){\n              wlDrawer.classList.remove('is-open');\n              wlOverlay.classList.remove('is-open');\n              wlDrawer.setAttribute('aria-hidden', 'true');\n              document.body.classList.remove('abt-no-scroll');\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              if(e.target.closest('[data-close-wishlist]')){ e.preventDefault(); closeWishlist(); }\n            });\n            document.addEventListener('keydown', function(e){\n              if(e.key === 'Escape' && wlDrawer.classList.contains('is-open')) 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 = JSON.parse(localStorage.getItem('abt_wishlist') || '[]');\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 = JSON.parse(localStorage.getItem('abt_wishlist') || '[]');\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(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 = '/products/' + handle;\n              return;\n            }\n            btn.setAttribute('disabled', '');\n            fetch('/cart/add.js', {\n              method: 'POST',\n              headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n              body: JSON.stringify({ items: [{ id: parseInt(variantId, 10), quantity: 1 }] })\n            }).then(function(r){ return r.json(); }).then(function(data){\n              btn.classList.add('is-added');\n              btn.removeAttribute('disabled');\n              // Update cart count in header if present\n              fetch('/cart.js').then(function(r){ return r.json(); }).then(function(cart){\n                var countEls = document.querySelectorAll('[data-cart-count], .abt-cart-count, .abt-header__cart-count');\n                countEls.forEach(function(el){ el.textContent = cart.item_count; });\n                document.dispatchEvent(new CustomEvent('abt:cartUpdate', { detail: { cart: cart } }));\n                // Open cart drawer via its own opener \u2014 fetches + renders contents and overlay\n                if(window.ABT_openCart) window.ABT_openCart();\n                // Toast notification\n                showAddToast(title);\n              }).catch(function(){});\n              // Reset button after 2.5s\n              setTimeout(function(){ btn.classList.remove('is-added'); }, 2500);\n            }).catch(function(err){\n              btn.removeAttribute('disabled');\n              // Fallback to PDP on error\n              window.location.href = '/products/' + handle;\n            });\n        });\n\n        // Toast helper\n        function showAddToast(title){\n          var existing = document.querySelector('.abt-shop-toast');\n          if(existing) existing.remove();\n          var toast = document.createElement('div');\n          toast.className = 'abt-shop-toast';\n          toast.innerHTML = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\"><polyline points=\"20 6 9 17 4 12\"/></svg><span><strong>Added to bag</strong><br>' + title + '</span>';\n          document.body.appendChild(toast);\n          setTimeout(function(){ toast.classList.add('is-visible'); }, 10);\n          setTimeout(function(){ toast.classList.remove('is-visible'); }, 3500);\n          setTimeout(function(){ toast.remove(); }, 4000);\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      function injectProductImages(scope){\n        var root = scope || document;\n        // Pattern A: .abt-prod-card[data-handle] with inner .abt-prod-card__img\n        root.querySelectorAll('.abt-prod-card[data-handle]').forEach(function(card){\n          if(card.dataset.abtImgChecked) return;\n          var handle = card.dataset.handle;\n          var url = PRODUCT_IMG_MAP[handle];\n          if(!url) { card.dataset.abtImgChecked = '1'; return; }\n          var slot = card.querySelector('.abt-prod-card__img');\n          if(!slot) return;\n          var existing = slot.querySelector('img');\n          var setImage = function(){\n            slot.innerHTML = '';\n            var i = document.createElement('img');\n            i.src = url;\n            i.alt = card.querySelector('.abt-prod-card__name')?.textContent || handle;\n            i.loading = 'lazy';\n            i.onerror = function(){ this.style.display = 'none'; };\n            slot.appendChild(i);\n          };\n          if(!existing) { setImage(); card.dataset.abtImgChecked = '1'; return; }\n          if(existing.complete){\n            if(!existing.naturalWidth) setImage();\n            card.dataset.abtImgChecked = '1';\n          } else {\n            existing.addEventListener('load', function(){\n              if(!existing.naturalWidth) setImage();\n              card.dataset.abtImgChecked = '1';\n            });\n            existing.addEventListener('error', function(){\n              setImage();\n              card.dataset.abtImgChecked = '1';\n            });\n          }\n        });\n        // Pattern B: standalone .abt-prod-card__img[data-handle] (used in cart line items)\n        root.querySelectorAll('.abt-prod-card__img[data-handle]').forEach(function(slot){\n          if(slot.dataset.abtImgChecked) return;\n          if(slot.closest('.abt-prod-card[data-handle]')) return; // already handled above\n          var handle = slot.dataset.handle;\n          var url = PRODUCT_IMG_MAP[handle];\n          if(!url) { slot.dataset.abtImgChecked = '1'; return; }\n          var existing = slot.querySelector('img');\n          var setImage = function(){\n            slot.innerHTML = '';\n            var i = document.createElement('img');\n            i.src = url;\n            i.alt = handle;\n            i.loading = 'lazy';\n            i.onerror = function(){ this.style.display = 'none'; };\n            slot.appendChild(i);\n          };\n          if(!existing) { setImage(); slot.dataset.abtImgChecked = '1'; return; }\n          // If existing has empty src OR data-needs-fallback, replace immediately\n          if(!existing.getAttribute('src') || existing.dataset.needsFallback === '1'){\n            setImage(); slot.dataset.abtImgChecked = '1'; return;\n          }\n          if(existing.complete){\n            if(!existing.naturalWidth) setImage();\n            slot.dataset.abtImgChecked = '1';\n          } else {\n            existing.addEventListener('load', function(){\n              if(!existing.naturalWidth) setImage();\n              slot.dataset.abtImgChecked = '1';\n            });\n            existing.addEventListener('error', function(){\n              setImage();\n              slot.dataset.abtImgChecked = '1';\n            });\n          }\n        });\n      }\n      injectProductImages();\n      new MutationObserver(function(){ injectProductImages(); })\n        .observe(document.body, { childList: true, subtree: true });\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          modal.setAttribute('aria-hidden', 'false');\n          document.body.style.overflow = 'hidden';\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(){\n          modal.classList.remove('is-open');\n          modal.setAttribute('aria-hidden', 'true');\n          document.body.style.overflow = '';\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        document.addEventListener('keydown', function(e){\n          if(e.key === 'Escape' && modal.classList.contains('is-open')) 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          // Show results\n          renderResult();\n          // Fire off the form submission to Shopify Customer API (newsletter signup)\n          if(answers.email){\n            try {\n              var form = new FormData();\n              form.append('form_type', 'customer');\n              form.append('utf8', '\u2713');\n              form.append('contact[email]', answers.email);\n              if(answers.name) form.append('contact[first_name]', answers.name);\n              form.append('contact[tags]', 'quiz, ' + (answers.concern || ''));\n              form.append('contact[note]', JSON.stringify(answers));\n              fetch('/contact', { method: 'POST', body: form, credentials: 'same-origin' }).catch(function(){});\n            } catch(e) {}\n          }\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        function fmt(cents){ return '$' + (cents/100).toFixed(2).replace(/\\.00$/,''); }\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          // Update badges everywhere\n          document.querySelectorAll('.abt-cart-count').forEach(function(b){\n            b.textContent = cart.item_count;\n            b.dataset.count = cart.item_count;\n          });\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 || cart.total_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 = 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-handle=\"' + it.handle + '\">'\n              +   '<a href=\"' + it.url + '\" class=\"abt-cart-drawer-item__img\">'\n              +     (imgSrc ? '<img src=\"' + imgSrc + '\" alt=\"' + (it.title || '').replace(/\"/g, '&quot;') + '\" 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=\"' + it.url + '\" class=\"abt-cart-drawer-item__name\">' + escapeHtml(it.product_title) + '</a>'\n              +     '<p class=\"abt-cart-drawer-item__price\">' + fmt(it.original_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=\"Decrease\">\u2212</button>'\n              +         '<input type=\"number\" value=\"' + it.quantity + '\" min=\"0\" max=\"99\" data-qty-input aria-label=\"Quantity\">'\n              +         '<button type=\"button\" data-qty=\"1\" aria-label=\"Increase\">+</button>'\n              +       '</div>'\n              +       '<button type=\"button\" class=\"abt-cart-drawer-item__remove\" data-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 fetchCart(){ return fetch('/cart.js',{headers:{'Accept':'application/json'}}).then(function(r){return r.json();}).catch(function(){ return {item_count:0, items:[]}; }); }\n        function updateLine(line, quantity){\n          return fetch('/cart/change.js',{method:'POST',headers:{'Content-Type':'application/json','Accept':'application/json'},body:JSON.stringify({line:parseInt(line,10),quantity:parseInt(quantity,10)})}).then(function(r){return r.json();}).then(function(c){ render(c); return c; }).catch(function(){ if(window.ABT_toast) window.ABT_toast('Could not update cart \u2014 please try again'); });\n        }\n        function open(){\n          drawer.classList.add('is-open'); overlay.classList.add('is-open');\n          drawer.setAttribute('aria-hidden','false');\n          document.body.style.overflow = 'hidden';\n          fetchCart().then(render);\n        }\n        function close(){\n          drawer.classList.remove('is-open'); overlay.classList.remove('is-open');\n          drawer.setAttribute('aria-hidden','true');\n          document.body.style.overflow = '';\n        }\n        window.ABT_openCart = open;\n        window.ABT_closeCart = close;\n        // Cart note: debounced save to Shopify cart\n        var noteInput = document.getElementById('abt-cart-drawer-note');\n        if(noteInput){\n          var noteTimer;\n          noteInput.addEventListener('input', function(){\n            clearTimeout(noteTimer);\n            noteTimer = setTimeout(function(){\n              fetch('/cart/update.js', {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n                body: JSON.stringify({ note: noteInput.value })\n              }).catch(function(){});\n            }, 600);\n          });\n        }\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        document.addEventListener('keydown', function(e){ if(e.key === 'Escape' && drawer.classList.contains('is-open')) close(); });\n        // Cart item qty + remove handlers (delegated)\n        if(body){\n          body.addEventListener('click', function(e){\n            var item = e.target.closest('.abt-cart-drawer-item');\n            if(!item) return;\n            var line = item.dataset.line;\n            if(e.target.matches('[data-remove]')){\n              updateLine(line, 0);\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 v = Math.max(0, Math.min(99, parseInt(input.value || '1', 10) + step));\n              input.value = v;\n              updateLine(line, v);\n            }\n          });\n          body.addEventListener('change', function(e){\n            if(e.target.matches('[data-qty-input]')){\n              var item = e.target.closest('.abt-cart-drawer-item');\n              if(!item) return;\n              var v = Math.max(0, parseInt(e.target.value || '0', 10));\n              e.target.value = v;\n              updateLine(item.dataset.line, v);\n            }\n          });\n        }\n        // Initial render with current state\n        fetchCart().then(render);\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. Email signup popup (delayed, persistent dismiss) ----\n      (function initPopup(){\n        var popup = document.getElementById('abt-popup');\n        if(!popup) return;\n        var closeBtn = document.getElementById('abt-popup-close');\n        var dismissBtn = document.getElementById('abt-popup-dismiss');\n        var form = document.getElementById('abt-popup-form');\n        var dismissed = false;\n        try {\n          var stored = localStorage.getItem('abt-popup-dismissed');\n          if(stored){\n            var when = parseInt(stored, 10);\n            // Re-show after 30 days\n            if(Date.now() - when < 30 * 24 * 60 * 60 * 1000) dismissed = true;\n          }\n        } catch(e) {}\n        function dismiss(){\n          popup.classList.remove('is-open');\n          popup.setAttribute('aria-hidden', 'true');\n          try { localStorage.setItem('abt-popup-dismissed', Date.now().toString()); } catch(e) {}\n        }\n        if(closeBtn) closeBtn.addEventListener('click', dismiss);\n        if(dismissBtn) dismissBtn.addEventListener('click', dismiss);\n\n        // AJAX submit (no jarring reload) \u2014 mirrors the quiz newsletter capture,\n        // then swaps the card to an inline thank-you.\n        if(form){\n          form.addEventListener('submit', function(e){\n            e.preventDefault();\n            var emailInput = form.querySelector('input[type=email]');\n            var email = emailInput ? (emailInput.value || '').trim() : '';\n            if(!email){ if(emailInput) emailInput.focus(); return; }\n            var submitBtn = form.querySelector('.abt-popup__submit');\n            if(submitBtn){ submitBtn.disabled = true; submitBtn.textContent = 'Joining\u2026'; }\n            var fd = new FormData();\n            fd.append('form_type', 'customer'); fd.append('utf8', '\u2713');\n            fd.append('contact[email]', email);\n            fd.append('contact[tags]', 'newsletter, popup');\n            var finish = function(){\n              try { localStorage.setItem('abt-popup-subscribed', '1'); } catch(e){}\n              try { localStorage.setItem('abt-popup-dismissed', Date.now().toString()); } catch(e){}\n              popup.innerHTML = '<button class=\"abt-popup__close\" data-popup-close aria-label=\"Close\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg></button><p class=\"abt-popup__incentive\">From the studio</p><h3 class=\"abt-popup__title\">You\u2019re in. Welcome.</h3><p class=\"abt-popup__lead\">Check your inbox soon \u2014 Talli\u2019s first skin note is on the way. No spam, ever.</p>';\n              var c2 = popup.querySelector('[data-popup-close]');\n              if(c2) c2.addEventListener('click', function(){ popup.classList.remove('is-open'); popup.setAttribute('aria-hidden','true'); });\n              setTimeout(function(){ popup.classList.remove('is-open'); popup.setAttribute('aria-hidden','true'); }, 6500);\n            };\n            fetch('/contact', { method: 'POST', body: fd, credentials: 'same-origin' })\n              .then(finish).catch(finish);\n          });\n        }\n\n        // Scroll-triggered corner card. Skip if dismissed, already subscribed, or\n        // on cart/checkout/account pages where it would interrupt a task.\n        var subscribed = false;\n        try { subscribed = localStorage.getItem('abt-popup-subscribed') === '1'; } catch(e){}\n        var path = window.location.pathname || '';\n        var blocked = /^\\/(cart|checkout|account|challenge|password|tools)/.test(path);\n        if(dismissed || subscribed || blocked) return;\n\n        var shown = false;\n        function show(){\n          if(shown) return; shown = true;\n          popup.classList.add('is-open');\n          popup.setAttribute('aria-hidden', 'false');\n          window.removeEventListener('scroll', onScroll);\n        }\n        function onScroll(){\n          var sc = window.pageYOffset || document.documentElement.scrollTop || 0;\n          var h = document.documentElement.scrollHeight - window.innerHeight;\n          if(h > 0 && (sc / h) > 0.45) show();\n        }\n        window.addEventListener('scroll', onScroll, { passive: true });\n        // Fallback for short pages: show after 35s of engaged time.\n        setTimeout(function(){ if(!shown) show(); }, 35000);\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 collectionFilter(){\n        var toggle = document.getElementById('abt-coll-filter-toggle');\n        var panel = document.getElementById('abt-coll-filter');\n        if(!toggle || !panel) return;\n        toggle.addEventListener('click', function(){\n          var open = panel.classList.contains('is-open');\n          if(open){\n            panel.classList.remove('is-open');\n            toggle.setAttribute('aria-expanded', 'false');\n            setTimeout(function(){ panel.hidden = true; }, 500);\n          } else {\n            panel.hidden = false;\n            requestAnimationFrame(function(){ panel.classList.add('is-open'); });\n            toggle.setAttribute('aria-expanded', 'true');\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        function open(){\n          overlay.classList.add('is-open');\n          overlay.setAttribute('aria-hidden', 'false');\n          document.documentElement.style.overflow = 'hidden';\n          setTimeout(function(){ input.focus(); }, 300);\n        }\n        function close(){\n          overlay.classList.remove('is-open');\n          overlay.setAttribute('aria-hidden', 'true');\n          document.documentElement.style.overflow = '';\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        document.addEventListener('keydown', function(e){ if(e.key === 'Escape' && overlay.classList.contains('is-open')) close(); });\n\n        // Recent searches via localStorage\n        var RECENT_KEY = 'abt_recent_searches';\n        function getRecent(){\n          try { return JSON.parse(localStorage.getItem(RECENT_KEY) || '[]'); } catch(e){ return []; }\n        }\n        function pushRecent(q){\n          if(!q || q.length < 2) return;\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=\"/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        // Keyboard navigation through results (Down/Up arrows)\n        input.addEventListener('keydown', function(e){\n          if(e.key !== 'ArrowDown' && e.key !== 'ArrowUp' && e.key !== 'Enter') return;\n          var items = results.querySelectorAll('.abt-search-overlay__result');\n          if(items.length === 0) return;\n          var current = results.querySelector('.is-keyboard-focus');\n          var idx = current ? Array.prototype.indexOf.call(items, current) : -1;\n          if(e.key === 'Enter' && current){ e.preventDefault(); window.location.href = current.href; return; }\n          if(e.key === 'ArrowDown'){ e.preventDefault(); idx = Math.min(items.length - 1, idx + 1); }\n          else if(e.key === 'ArrowUp'){ e.preventDefault(); idx = Math.max(0, idx - 1); }\n          items.forEach(function(it){ it.classList.remove('is-keyboard-focus'); });\n          if(items[idx]){ items[idx].classList.add('is-keyboard-focus'); items[idx].scrollIntoView({block:'nearest'}); }\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          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          if(suggestions) suggestions.style.display = 'none';\n          fetch('/search/suggest.json?q=' + encodeURIComponent(q) + '&resources[type]=product&resources[limit]=8&resources[options][unavailable_products]=last')\n            .then(function(r){ return r.ok ? r.json() : null; })\n            .catch(function(){ return null; })\n            .then(function(data){\n              if(!data || !data.resources || !data.resources.results || !data.resources.results.products){\n                results.innerHTML = '<div class=\"abt-search-overlay__empty\">No results for \"' + escapeHtml(q) + '\"</div>';\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=\"/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=\"' + img + '\" 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 ? ('$' + (parseFloat(p.price)).toFixed(2)) : '';\n                return '<a href=\"' + p.url + '\" 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\">' + price + '</span>' : '') +\n                '</a>';\n              }).join('');\n              results.innerHTML += '<a href=\"/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('nav a, .abt-nav a, .abt-mobile-drawer a').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      // ---- 13. Focus trap utility for modals/drawers ----\n      window.ABT_focusTrap = (function focusTrap(){\n        var FOCUSABLE = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n        function trapIn(container){\n          if(!container) return null;\n          var focusables = Array.from(container.querySelectorAll(FOCUSABLE)).filter(function(el){\n            return el.offsetWidth > 0 || el.offsetHeight > 0 || el === document.activeElement;\n          });\n          if(focusables.length === 0) return null;\n          var first = focusables[0], last = focusables[focusables.length-1];\n          var prevFocus = document.activeElement;\n          function handler(e){\n            if(e.key !== 'Tab') return;\n            if(e.shiftKey){\n              if(document.activeElement === first){ e.preventDefault(); last.focus(); }\n            } else {\n              if(document.activeElement === last){ e.preventDefault(); first.focus(); }\n            }\n          }\n          container.addEventListener('keydown', handler);\n          setTimeout(function(){ first.focus(); }, 50);\n          return function release(){\n            container.removeEventListener('keydown', handler);\n            if(prevFocus && prevFocus.focus) try { prevFocus.focus(); } catch(e){}\n          };\n        }\n        return { trap: trapIn };\n      })();\n\n      // ---- 14. Wire focus trap to modals (cart drawer, mobile drawer, search overlay, quick view) ----\n      (function wireFocusTraps(){\n        function watch(containerId, openClassName){\n          var container = document.getElementById(containerId);\n          if(!container) return;\n          var release = null;\n          var observer = new MutationObserver(function(){\n            var isOpen = container.classList.contains(openClassName) || container.getAttribute('aria-hidden') === 'false';\n            if(isOpen && !release){\n              release = window.ABT_focusTrap.trap(container);\n            } else if(!isOpen && release){\n              release(); release = null;\n            }\n          });\n          observer.observe(container, { attributes: true, attributeFilter: ['class', 'aria-hidden', 'hidden'] });\n        }\n        watch('abt-cart-drawer', 'is-open');\n        watch('abt-mobile-drawer', 'is-open');\n        watch('abt-search-overlay', 'is-open');\n        watch('abt-quiz-modal', 'is-open');\n      })();\n\n      // ---- 14b. PDP actions: share, copy, save ----\n      (function pdpActions(){\n        var shareBtn = document.querySelector('[data-prod-share]');\n        var copyBtn = document.querySelector('[data-prod-copy]');\n        var saveBtn = document.querySelector('[data-prod-save]');\n\n        if(shareBtn){\n          shareBtn.addEventListener('click', function(){\n            var url = window.location.href;\n            var title = shareBtn.dataset.productTitle || document.title;\n            if(navigator.share){\n              navigator.share({ title: title, url: url }).catch(function(){});\n            } else if(navigator.clipboard){\n              navigator.clipboard.writeText(url).then(function(){\n                if(window.ABT_toast) window.ABT_toast('Link copied to clipboard');\n              });\n            }\n          });\n        }\n        if(copyBtn){\n          copyBtn.addEventListener('click', function(){\n            var url = window.location.href;\n            if(navigator.clipboard){\n              navigator.clipboard.writeText(url).then(function(){\n                if(window.ABT_toast) window.ABT_toast('Link copied');\n                copyBtn.classList.add('is-copied');\n                setTimeout(function(){ copyBtn.classList.remove('is-copied'); }, 1500);\n              });\n            } else {\n              // Fallback\n              var ta = document.createElement('textarea');\n              ta.value = url; document.body.appendChild(ta);\n              ta.select(); document.execCommand('copy');\n              document.body.removeChild(ta);\n              if(window.ABT_toast) window.ABT_toast('Link copied');\n            }\n          });\n        }\n        if(saveBtn){\n          var handle = saveBtn.dataset.prodSave;\n          // Sync initial state with localStorage\n          try {\n            var saved = JSON.parse(localStorage.getItem('abt_wishlist') || '[]');\n            if(saved.indexOf(handle) >= 0) saveBtn.classList.add('is-saved');\n          } catch(e){}\n          saveBtn.addEventListener('click', function(){\n            try {\n              var arr = JSON.parse(localStorage.getItem('abt_wishlist') || '[]');\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              localStorage.setItem('abt_wishlist', JSON.stringify(arr));\n              saveBtn.classList.toggle('is-saved', nowSaved);\n              if(window.ABT_toast) window.ABT_toast(nowSaved ? 'Saved to wishlist' : 'Removed from wishlist');\n              // Update header count\n              var headerCount = document.getElementById('abt-wishlist-count');\n              if(headerCount){ headerCount.textContent = arr.length; headerCount.dataset.count = arr.length; }\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: 'smooth' }); });\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", "onScroll", "ticking"]
}
