PageSourceSearch

https://gochirp.com/cdn/shop/t/308/assets/main.js?v=41984548584514851111790638054

js gochirp.com collected 2026-10-02 16:45:09 UTC 73,380 bytes, 8 lines download raw bytes

1function debounce(fn,wait){let t;return(...args)=>{clearTimeout(t),t=setTimeout(()=>fn.apply(this,args),wait)}}function throttle(fn,delay){let lastCall=0;return function(...args){const now=new Date().getTime();if(!(now-lastCall<delay))return lastCall=now,fn(...args)}}document.addEventListener("turbo:frame-load",event=>{const{id}=event.target;id==="main-product"&&window.yotpoWidgetsContainer&&window.yotpoWidgetsContainer.initWidgets(),id.startsWith("product-card-")&&window.yotpoWidgetsContainer&&yotpo.initWidgets()}),(function(){if(window.ChirpFade)return;const READY_CLASS="chirp-fade-ready",REVEAL_CLASS="chirp-fade-in",PROCESSED_FLAG="chirpFadeObserved",CONTAINER_SELECTOR="[data-chirp-fade-group], [data-chirp-fade-children]",NON_VISUAL_TAGS=["STYLE","SCRIPT","LINK","TEMPLATE"],isEnabled=()=>document.documentElement.classList.contains(READY_CLASS),globalStagger=()=>{const raw=getComputedStyle(document.documentElement).getPropertyValue("--chirp-fade-stagger"),parsed=parseInt(raw,10);return Number.isNaN(parsed)?150:parsed},revealGroup=container=>{const step=parseInt(container.dataset.chirpFadeStagger,10)||globalStagger();let items;container.hasAttribute("data-chirp-fade-children")?items=Array.from(container.children).filter(el=>!el.classList.contains(REVEAL_CLASS)&&!NON_VISUAL_TAGS.includes(el.tagName)):items=Array.from(container.querySelectorAll(`.chirp-fade:not(.${REVEAL_CLASS})`));let autoIndex=0;items.forEach(item=>{item.style.getPropertyValue("--chirp-fade-delay")||(item.style.setProperty("--chirp-fade-delay",`${autoIndex*step}ms`),autoIndex+=1),item.classList.add(REVEAL_CLASS)})},pending=new Set,revealTarget=target=>{pending.delete(target),observer.unobserve(target),target.matches(CONTAINER_SELECTOR)?revealGroup(target):target.classList.add(REVEAL_CLASS)},observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{entry.isIntersecting&&revealTarget(entry.target)})},{rootMargin:"0px 0px -20% 0px"}),checkNearBottom=()=>{if(pending.size===0)return;document.documentElement.scrollHeight-(window.scrollY+window.innerHeight)<=window.innerHeight*.1&&Array.from(pending).forEach(revealTarget)};let scrollScheduled=!1;window.addEventListener("scroll",()=>{pending.size===0||scrollScheduled||(scrollScheduled=!0,requestAnimationFrame(()=>{scrollScheduled=!1,checkNearBottom()}))},{passive:!0});const refresh=(root=document)=>{isEnabled()&&(root.querySelectorAll(CONTAINER_SELECTOR).forEach(container=>{container.dataset[PROCESSED_FLAG]||(container.dataset[PROCESSED_FLAG]="true",pending.add(container),observer.observe(container))}),root.querySelectorAll(".chirp-fade").forEach(el=>{el.dataset[PROCESSED_FLAG]||el.closest(CONTAINER_SELECTOR)||(el.dataset[PROCESSED_FLAG]="true",pending.add(el),observer.observe(el))}),checkNearBottom())};window.ChirpFade={refresh},document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>refresh()):refresh(),document.addEventListener("shopify:section:load",event=>refresh(event.target)),document.addEventListener("turbo:frame-load",event=>refresh(event.target))})(),(function(){if(window.__chirpCartMutationFetchPatched)return;window.__chirpCartMutationFetchPatched=!0;const originalFetch=window.fetch.bind(window);let chain=Promise.resolve(),seq=0;const debugEnabled=(()=>{try{return new URLSearchParams(window.location.search).get("debugCart")==="1"}catch{return!1}})(),pushDebug=entry=>{if(debugEnabled)try{window.__chirpCartDebug||(window.__chirpCartDebug=[]),window.__chirpCartDebug.push(entry),window.__chirpCartDebug.length>50&&(window.__chirpCartDebug=window.__chirpCartDebug.slice(-50))}catch{}},isCartMutation=(url,opts)=>{if(!opts||!opts.method||String(opts.method).toUpperCase()!=="POST")return!1;const u=typeof url=="string"?url:url&&url.url?url.url:"";return u?u.includes("/cart/add")||u.includes("/cart/update")||u.includes("/cart/change")||u.includes("/cart/clear"):!1};window.fetch=function(url,opts){if(!isCartMutation(url,opts))return originalFetch(url,opts);const id=++seq,startedQueuedAt=Date.now(),u=typeof url=="string"?url:url&&url.url?url.url:"";let stack="";if(debugEnabled)try{stack=(new Error().stack||"").split(`
2`).slice(0,8).join(`
3`)}catch{}const run=async()=>{const startedAt=Date.now(),queuedForMs=startedAt-startedQueuedAt;
3debugEnabled&&(console.groupCollapsed(`[cart-mutation #${id}] START ${u} (queued ${queuedForMs}ms)`),console.log("opts",opts),stack&&console.log("stack",stack),console.groupEnd()),pushDebug({id,phase:"start",url:u,method:opts&&opts.method||"POST",queuedForMs,at:startedAt,stack});try{const res=await originalFetch(url,opts),endedAt=Date.now();return debugEnabled&&console.info(`[cart-mutation #${id}] END ${u} -> ${res.status} (${endedAt-startedAt}ms)`),pushDebug({id,phase:"end",url:u,status:res.status,ok:res.ok,tookMs:endedAt-startedAt,at:endedAt}),res}catch(err){const endedAt=Date.now();throw debugEnabled&&console.warn(`[cart-mutation #${id}] ERROR ${u} (${endedAt-startedAt}ms)`,err),pushDebug({id,phase:"error",url:u,tookMs:endedAt-startedAt,at:endedAt,message:String(err&&err.message?err.message:err)}),err}},p=chain.then(run,run);return chain=p.catch(()=>{}),p}})();class CartManager{static async fetchCart({signal}={}){const res=await fetch("/cart.js",{method:"GET",headers:{Accept:"application/json"},signal});if(!res.ok)throw new Error(`Failed to fetch cart.js (${res.status})`);return await res.json()}static async waitForCartContains({variantId,minItemCount,timeoutMs=4e3}={}){const start=Date.now();let delay=150;const wantedVariantId=variantId!=null?Number(variantId):null;for(;Date.now()-start<timeoutMs;){try{const cart=await this.fetchCart(),hasVariant=wantedVariantId==null?!0:cart.items?.some(i=>Number(i.variant_id)===wantedVariantId),hasCount=minItemCount==null?!0:cart.item_count>=minItemCount;if(hasVariant&&hasCount)return cart}catch{}await new Promise(r=>setTimeout(r,delay)),delay=Math.min(700,Math.round(delay*1.6))}try{return await this.fetchCart()}catch{return null}}static reloadMainCart(){if(window.location.pathname=="/cart"){window.location.reload();return}const mainCart=document.getElementById("frame-main-cart");mainCart&&mainCart.reload()}static reloadCartCount(){const cartCount=document.getElementById("frame-cart-count");cartCount&&cartCount.reload()}static async refreshCartUI({variantId,minItemCount}={}){const cart=await this.waitForCartContains({variantId,minItemCount});return this.reloadCartCount(),this.reloadMainCart(),cart&&document.dispatchEvent(new CustomEvent("cart:updated",{detail:{cart}})),cart}static openCart(){const cartLink=document.getElementById("cart-link");cartLink&&cartLink.click()}static async update(updates){try{const cart=await fetch("/cart.js").then(res=>res.json()),mergedUpdates={...updates},updatedLineKey=Object.keys(updates)[0],newQty=updates[updatedLineKey],updatedItem=cart.items.find(item=>item.key===updatedLineKey);if(updatedItem&&updatedItem.properties&&updatedItem.properties._ApplyGift){const giftVariantId=updatedItem.properties._ApplyGift,giftItem=cart.items.find(item=>item.properties&&item.properties._Gift===giftVariantId);giftItem?mergedUpdates[giftItem.key]=newQty:mergedUpdates[giftVariantId]=newQty}await fetch(`${window.Shopify.routes.root}cart/update.js`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({updates:mergedUpdates})}),this.reloadCartCount(),this.reloadMainCart()}catch(error){console.error("Error updating cart:",error)}}}class BaseComponent extends HTMLElement{constructor(){super(),this._boundEvents=new Map,this.debug=!1}addSafeEventListener(element,event,handler){if(!element)return;const boundHandler=handler.bind(this);element.addEventListener(event,boundHandler),this._boundEvents.has(element)||this._boundEvents.set(element,[]),this._boundEvents.get(element).push({event,handler:boundHandler})}disconnectedCallback(){this._boundEvents.forEach((events,element)=>{events.forEach(({event,handler})=>{element.removeEventListener(event,handler)})}),this._boundEvents.clear()}findClosest(selector){return this.closest(selector)}toggleVisibility(element,show){element.classList.toggle("hidden",!show)}log(message,data=null,type="log"){this.debug&&console[type](message,data)}}customElements.define("video-component",class extends BaseComponent{constructor(){super(),this.video=this.querySelector("video"),this.toggle=this.querySelector("[data-video-toggle]"),this.playSVG=this.querySelector("[data-play-svg]"),this.pauseSVG=this.querySelector("[data-pause-svg]"),this.playSVG&&this.video.removeAttribute("controls")}connectedCallback(){this.video&&!this.video.autoplay&&(this.playSVG.classList.remove("hidden"),this.pauseSVG.classList.add("hidden")),this.addSafeEventListener(this.toggle,"click",this.toggleVideo)}toggleVideo(event){event.preventDefault(),this.video.paused?(this.video.play(),this.playSVG.classList.add("hidden"),this.pauseSVG.classList.remove("hidden")):(this.video.pause(),this.playSVG.classList.remove("hidden"),this.pauseSVG.classList.add("hidden"))}}
3),customElements.define("deferred-video",class extends BaseComponent{constructor(){super(),this.loaded=!1,this.video=null,this.toggle=this.querySelector("[data-video-toggle]"),this.playSVG=this.querySelector("[data-play-svg]"),this.pauseSVG=this.querySelector("[data-pause-svg]")}connectedCallback(){const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{entry.isIntersecting&&!this.loaded&&(this.loadVideo(),this.loaded=!0,observer.disconnect())})});observer.observe(this)}loadVideo(){const poster=this.querySelector(".lazy-poster"),video=document.createElement("video");video.className="cjs-media__video w-full h-full object-cover",video.setAttribute("playsinline",""),video.setAttribute("webkit-playsinline",""),this.dataset.poster&&(video.poster=this.dataset.poster);const shouldAutoplay=this.dataset.autoplay==="true";if(video.muted=shouldAutoplay,video.loop=!0,video.preload="metadata",video.controls=!1,this.dataset.srcMp4){const s=document.createElement("source");s.src=this.dataset.srcMp4,s.type="video/mp4",video.appendChild(s)}video.style.opacity="0",video.style.transition="opacity 220ms ease",video.style.position="absolute",video.style.inset="0",video.style.width="100%",video.style.height="100%",video.style.objectFit="cover",video.style.display="block",video.style.willChange="opacity, transform",poster&&poster.parentNode?poster.parentNode.insertBefore(video,poster.nextSibling):this.appendChild(video),this.video=video;const onLoaded=()=>{video.offsetHeight,requestAnimationFrame(()=>{video.style.transform="translateZ(0)",video.style.opacity="1",setTimeout(()=>{video.style.transform="",video.style.willChange=""},300),setTimeout(()=>{poster&&poster.parentNode&&poster.parentNode.removeChild(poster)},250)}),video.removeEventListener("loadeddata",onLoaded)};video.addEventListener("loadeddata",onLoaded),this.playSVG&&this.pauseSVG&&(video.addEventListener("play",()=>{this.playSVG.classList.add("hidden"),this.pauseSVG.classList.remove("hidden")}),video.addEventListener("pause",()=>{this.playSVG.classList.remove("hidden"),this.pauseSVG.classList.add("hidden")}));const videoControls=this.querySelector(".video-controls");if(videoControls){const showControls=()=>{videoControls.classList.remove("hidden","opacity-0","pointer-events-none"),clearTimeout(this.pauseTimeout),this.pauseTimeout=setTimeout(()=>{video.paused||videoControls.classList.add("opacity-0","pointer-events-none")},500)};video.addEventListener("play",showControls),video.addEventListener("pause",()=>{videoControls.classList.remove("opacity-0","pointer-events-none")}),["mousemove","touchstart"].forEach(evt=>video.addEventListener(evt,showControls))}this.video&&!this.video.autoplay&&(this.playSVG.classList.remove("hidden"),this.pauseSVG.classList.add("hidden")),this.toggle&&this.toggle.addEventListener("click",e=>this.toggleVideo(e)),this.dispatchEvent(new CustomEvent("video-loaded",{bubbles:!0}))}toggleVideo(event){event.preventDefault(),this.video&&(this.video.paused?this.video.play():this.video.pause())}}),customElements.define("product-form",class extends BaseComponent{constructor(){super(),this.form=this.querySelector("form"),this.button=this.querySelector('button[type="submit"]'),this._submitting=!1}connectedCallback(){this.addSafeEventListener(this.form,"submit",this.handleSubmit)}setButtonLoading(isLoading){if(!this.button)return;const isQuickAdd=this.button.classList.contains("quick-add__button");this.button.dataset.originalText||(this.button.dataset.originalText=this.button.innerHTML),isLoading?(this.button.disabled=!0,this.button.classList.add("opacity-50","cursor-not-allowed"),isQuickAdd?this.button.querySelector(".add-to-cart-text").innerHTML="Adding...":this.button.innerHTML="Adding..."):(this.button.disabled=!1,this.button.classList.remove("opacity-50","cursor-not-allowed"),this.button.innerHTML=this.button.dataset.originalText)}handleSubmit=async event=>{if(event?.preventDefault(),this._submitting)return;this._submitting=!0;const openCart=this.dataset.openCart||"true";this.setButtonLoading(!0);const mainVariantId=this.form.querySelector('input[name="id"]').value,quantityInput=this.form.querySelector('[name="quantity"]'),quantity=quantityInput&&parseInt(quantityInput.value,10)||1,promoGiftInput=this.form.querySelector("#promo_gift"),promoGiftId=promoGiftInput?promoGiftInput.value:null;try{let beforeCart=null;try{beforeCart=await CartManager.fetchCart()}catch{}let formData={items:[{id:mainVariantId,quantity,properties:{}}]};this.form.querySelectorAll('input[name^="properties["]').forEach(input=>{const propertyName=input.name.match(/properties\[(.*?)\]/)[1];formData.items[0].properties[propertyName]=input.value}),promoGiftId&&(formData.items[0].properties._ApplyGift=promoGiftId,formData.items.push({id:promoGiftId,quantity:1,properties:{_Gift:promoGiftId}}));const response=await(async({retries=2}={})=>{let attempt=0;for(;;){const response2=await fetch(window.Shopify.routes.root+"cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(formData)});if(response2.status===409&&attempt<retries){attempt+=1,await new Promise(r=>setTimeout(r,250*attempt));continue}return response2}})(),result=await response.json().catch(()=>({}));if(!response.ok){const msg=result?.description||result?.message||`Add to cart failed (${response.status})`;throw new Error(msg)}if(typeof MAI<"u"&&result.items&&result.items[0]){const item=result.items[0];MAI.emit("addToCart",item.price/100,item.price_currency||"USD",item.quantity,{productId:String(item.product_id),productName:item.product_title,productType:item.product_type,productVendor:item.vendor,variantId:String(item.variant_id),variantName:item.variant_title})}try{if(result.items&&result.items[0]){const item=result.items[0],value=item.price/100,currency=item.price_currency||"USD",ttdPixel=new Image(1,1);ttdPixel.src="https://insight.adsrvr.org/track/pxl/?adv=1ajs2pm&ct=0:3d8s1gv&fmt=3&v="+encodeURIComponent(value)+"&vf="+encodeURIComponent(currency),typeof gtag=="function"&&gtag("event","conversion",{send_to:"AW-18453784883/-zp5CMKTkPkcELPSud9E",value,currency}),typeof amzn=="function"&&amzn("trackEvent","AddToShoppingCart",{Value:value,Currency:currency,productID:String(item.product_id)}),typeof spdt=="function"&&spdt("addtocart")}}catch(pixelError){console.error("[marketing pixels] Add to cart tracking error:",pixelError)}const minItemCount=(beforeCart?.item_count??0)+quantity;await CartManager.refreshCartUI({variantId:mainVariantId,minItemCount}),openCart=="true"&&CartManager.openCart()}catch(error){console.error("Error:",error)}finally{this.setButtonLoading(!1),this._submitting=!1}}});class KeyboardManager{constructor(component){this.component=component,this.lastActiveElement=null,this.onKeyDown=this.onKeyDown.bind(this),this.onKeyUp=this.onKeyUp.bind(this)}engage(){this.lastActiveElement=document.activeElement,document.addEventListener("keydown",this.onKeyDown);const scrollbarWidth=window.innerWidth-document.documentElement.clientWidth;scrollbarWidth>0&&(document.body.style.paddingRight=`${scrollbarWidth}px`),document.querySelector("body").style.overflow="hidden",requestAnimationFrame(()=>this.focusFirstElement())}disengage(){document.removeEventListener("keydown",this.onKeyDown),document.body.style.paddingRight="",document.querySelector("body").style.overflow="",this.lastActiveElement&&(this.lastActiveElement.focus(),this.lastActiveElement=null)}onKeyUp(event){event.key==="Tab"&&console.log(document.activeElement)}onKeyDown(event){if(event.key==="Escape"&&typeof this.component.close=="function"){this.component.close();return}event.key==="Tab"&&this.handleTabKey(event)}handleTabKey(event){const focusableElements=this.getFocusableElements();if(!focusableElements.length)return;const firstElement=focusableElements[0],lastElement=focusableElements[focusableElements.length-1];event.shiftKey&&document.activeElement===firstElement?(event.preventDefault(),lastElement.focus()):!event.shiftKey&&document.activeElement===lastElement&&(event.preventDefault(),firstElement.focus())}getFocusableElements(){return Array.from(this.component.querySelectorAll("summary, a, button:enabled, [tabindex]:not
3([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe")).filter(el=>this.isElementFocusable(el))}focusFirstElement(){const focusableElements=this.getFocusableElements();focusableElements.length&&focusableElements[0].focus()}isElementFocusable(element){return!(!element||element.hasAttribute("disabled")||element.hasAttribute("hidden"))}destroy(){this.disengage()}}class ToggleComponent extends BaseComponent{constructor(){super(),this.trigger=this.querySelector("[data-trigger]"),this.content=this.querySelector("[data-content]"),this.overlay=this.querySelector("[data-overlay]"),this.closeBtns=this.querySelectorAll("[data-close]")}connectedCallback(){!this.trigger||!this.overlay||(this.keyboardManager=new KeyboardManager(this),this.addSafeEventListener(this.trigger,"click",this.toggle),this.closeBtns.forEach(btn=>this.addSafeEventListener(btn,"click",this.close)))}toggle(event){event?.preventDefault(),this.isOpen()?this.close(event):this.open(event)}open(event){event?.preventDefault(),this.trigger?.setAttribute("aria-expanded","true"),this.toggleVisibility(this.overlay,!0),this.hasAttribute("trap-focus")&&this.keyboardManager.engage(),this.hasAttribute("close-on-click")&&document.addEventListener("click",this.handleOutsideClick.bind(this))}handleOutsideClick(event){if(!this.isOpen())return;!this.content?.contains(event.target)&&!this.trigger?.contains(event.target)&&this.close()}close(event){event?.preventDefault(),event?.stopPropagation(),this.trigger?.setAttribute("aria-expanded","false"),this.toggleVisibility(this.overlay,!1),this.hasAttribute("trap-focus")&&this.keyboardManager.disengage(),this.hasAttribute("close-on-click")&&document.removeEventListener("click",this.handleOutsideClick.bind(this))}isOpen(){return this.trigger?.getAttribute("aria-expanded")==="true"}disconnectedCallback(){super.disconnectedCallback(),this.keyboardManager.destroy()}}customElements.define("toggle-component",ToggleComponent),customElements.define("modal-component",class extends ToggleComponent{constructor(){super()}}),customElements.define("video-modal",class extends ToggleComponent{constructor(){super(),this.video=this.querySelector("video")}open(){if(this.overlay){const originalParent=this.overlay.parentNode;document.body.appendChild(this.overlay),this._originalParent=originalParent}const videoListSlider=this.closest("video-list-slider");videoListSlider&&(videoListSlider.style.opacity="0"),super.open(),this.video&&this.video.play()}close(){super.close(),this.video&&this.video.pause(),this.overlay&&this._originalParent&&(this._originalParent.appendChild(this.overlay),this._originalParent=null);const videoListSlider=this.closest("video-list-slider");videoListSlider&&(videoListSlider.style.opacity="1")}}),customElements.define("drawer-component",class extends ToggleComponent{constructor(){super(),this.trigger=document.querySelector(this.getAttribute("trigger"))}open(){super.open(),setTimeout(()=>{this.content.classList.remove("translate-x-full")},100)}close(){this.content.classList.add("translate-x-full"),setTimeout(()=>{super.close()},700)}}),customElements.define("tab-component",class extends ToggleComponent{constructor(){super(),this.tabs=this.closest(".shopify-section").querySelectorAll("tab-component")}
3open(){this.tabs.forEach(tab=>{tab!==this&&tab.isOpen()&&tab.close()}),super.open()}}),customElements.define("accordion-component",class extends ToggleComponent{get reduceMotion(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}open(event){if(!this.overlay||this.reduceMotion){super.open(event);return}const fromHeight=this.overlay.classList.contains("hidden")?0:this.overlay.getBoundingClientRect().height;super.open(event),this._cancelAnimation();const cs=getComputedStyle(this.overlay);this._animate({height:`${fromHeight}px`,paddingTop:"0px",paddingBottom:"0px"},{height:`${this.overlay.scrollHeight}px`,paddingTop:cs.paddingTop,paddingBottom:cs.paddingBottom})}close(event){if(!this.overlay||this.reduceMotion||this.overlay.classList.contains("hidden")){super.close(event);return}event?.preventDefault(),event?.stopPropagation();const fromHeight=this.overlay.getBoundingClientRect().height,cs=getComputedStyle(this.overlay),fromPadTop=cs.paddingTop,fromPadBottom=cs.paddingBottom;this._cancelAnimation(),this.trigger?.setAttribute("aria-expanded","false"),this._animate({height:`${fromHeight}px`,paddingTop:fromPadTop,paddingBottom:fromPadBottom},{height:"0px",paddingTop:"0px",paddingBottom:"0px"},()=>this.toggleVisibility(this.overlay,!1))}_animate(from,to,onFinish){this.overlay.style.overflow="hidden",this._heightAnim=this.overlay.animate([from,to],{duration:350,easing:"cubic-bezier(0.22, 1, 0.36, 1)"}),this._heightAnim.onfinish=()=>{this._heightAnim=null,this.overlay.style.overflow="",onFinish&&onFinish()}}_cancelAnimation(){this._heightAnim&&(this._heightAnim.onfinish=null,this._heightAnim.cancel(),this._heightAnim=null,this.overlay.style.overflow="")}}),customElements.define("content-cycle",class extends BaseComponent{constructor(){super(),this.contents=this.querySelectorAll("[data-content]"),this.interval=null,this.activeIndex=0,this.speed=parseInt(this.getAttribute("data-speed"))||5e3}connectedCallback(){this.addSafeEventListener(this,"mouseover",this.focusInHandling),this.addSafeEventListener(this,"mouseleave",this.focusOutHandling),this.play()}disconnectedCallback(){this.stop(),super.disconnectedCallback()}play(){this.contents.length<2||(this.interval=setInterval(()=>{const nextIndex=this.activeIndex===this.contents.length-1?0:this.activeIndex+1;this.toggleVisibility(this.contents[this.activeIndex],!1),this.toggleVisibility(this.contents[nextIndex],!0),this.activeIndex=nextIndex},this.speed))}stop(){clearInterval(this.interval)}focusOutHandling(event){this.play()}focusInHandling(event){this.stop()}}),customElements.define("subscription-box",class extends BaseComponent{connectedCallback(){if(this.variantId=this.dataset.variantId,this.planDefault=this.dataset.planDefault,this.purchaseOptions=this.querySelectorAll(`[name="purchase-type-${this.variantId}"]`),this.planSelector=this.querySelector("[data-plan-selector]"),this.planWrapper=this.querySelector("[data-plan-wrapper]"),!this.purchaseOptions.length||!this.planSelector||!this.planWrapper){console.warn("Subscription box missing required elements");return}this.setupEventListeners(),this.initializeState()}setupEventListeners(){this.purchaseOptions.forEach(option=>{this.addSafeEventListener(option,"change",this.handlePurchaseTypeChange)})}initializeState(){const selectedOption=Array.from(this.purchaseOptions).find(option=>option.checked);selectedOption&&this.updatePlanVisibility(selectedOption.value)}handlePurchaseTypeChange=event=>{this.updatePlanVisibility(event.target.value)};updatePlanVisibility(purchaseType){purchaseType==="otp"?(this.planWrapper.style.display="none",this.planSelector.value=""):purchaseType==="subscription"&&(this.planWrapper.style.display="block",this.planSelector.value=this.planDefault)}}),customElements.define("cjs-layout",class extends BaseComponent{constructor(){super(),this._scrollAmount=0,this.resizeObserver=null,this.log("Constructor initialized")}connectedCallback(){this.log("Component connecting...");try{if(this.track=this.querySelector("[data-cjs-track]"),this.prev=this.querySelector("[data-cjs-prev]"),this.next=this.querySelector("[data-cjs-next]"),!this.track||!this.prev||!this.next){this.logError("Required elements missing",{track:!!this.track,prev:!!this.prev,next:!!this.next});return}this.scrollBy=this.getAttribute("data-scroll-by")||"item",this.scrollBehavior=this.getAttribute("data-scroll-behavior")||"smooth",this.log("Configuration",{scrollBy:this.scrollBy,scrollBehavior:this.scrollBehavior,trackWidth:this.track.scrollWidth,visibleWidth:this.track.clientWidth}
3),this.setupNavigation(),this.setupScrollListener(),this.setupResizeObserver(),this.updateButtonStates()}catch(error){this.log("Error in connectedCallback",error,"error")}}disconnectedCallback(){this.log("Component disconnecting...");try{super.disconnectedCallback(),this.resizeObserver&&this.resizeObserver.disconnect()}catch(error){this.log("Error in disconnectedCallback",error)}}setupResizeObserver(){this.log("Setting up ResizeObserver");try{this.resizeObserver=new ResizeObserver(entries=>{this.log("Resize detected",{contentRect:entries[0].contentRect}),this.updateButtonStates()}),this.resizeObserver.observe(this.track)}catch(error){this.log("Error setting up ResizeObserver",error)}}setupScrollListener(){this.log("Setting up scroll listener");let scrollTimeout;this.addSafeEventListener(this.track,"scroll",()=>{clearTimeout(scrollTimeout),scrollTimeout=setTimeout(()=>{const metrics=this.getScrollMetrics();this.log("Scroll event fired",metrics),requestAnimationFrame(()=>this.updateButtonStates())},150)})}setupNavigation(){this.log("Setting up navigation buttons"),this.addSafeEventListener(this.prev,"click",e=>{e.preventDefault();const canScroll=this.canScrollPrev();this.log("Previous button clicked",{canScroll}),canScroll&&this.scrollPrev()}),this.addSafeEventListener(this.next,"click",e=>{e.preventDefault();const canScroll=this.canScrollNext();this.log("Next button clicked",{canScroll}),canScroll&&this.scrollNext()})}getScrollMetrics(){const{scrollLeft,clientWidth,scrollWidth}=this.track;let itemWidth=0;if(this.scrollBy==="item"){const contentElements=Array.from(this.track.children).filter(child=>child.nodeType===1&&child.tagName!=="STYLE");contentElements.length>0&&(itemWidth=contentElements[0].offsetWidth)}return{scrollLeft,clientWidth,scrollWidth,itemWidth}}canScrollPrev(){const{scrollLeft}=this.getScrollMetrics(),canScroll=scrollLeft>0;return this.log("Can scroll previous?",{canScroll,scrollLeft}),canScroll}canScrollNext(){const{scrollLeft,clientWidth,scrollWidth}=this.getScrollMetrics(),canScroll=scrollLeft+clientWidth<scrollWidth;return this.log("Can scroll next?",{canScroll,scrollLeft,clientWidth,scrollWidth,remaining:scrollWidth-(scrollLeft+clientWidth)}),canScroll}calculateScrollAmount(){const{clientWidth,itemWidth}=this.getScrollMetrics();return this.scrollBy==="item"?itemWidth:clientWidth}scrollPrev(){if(!this.track){this.log("Track element missing",null,"error");return}const scrollAmount=this.calculateScrollAmount();if(scrollAmount===0){this.log("Scroll amount is 0, cannot scroll",null,"error");return}const currentScroll=this.track.scrollLeft,targetScroll=Math.max(0,currentScroll-scrollAmount);this.log("Scrolling previous",{from:currentScroll,by:-scrollAmount,to:targetScroll}),requestAnimationFrame(()=>{this.track.scrollTo({left:targetScroll,behavior:this.scrollBehavior})})}scrollNext(){if(!this.track){this.log("Track element missing",null,"error");return}const scrollAmount=this.calculateScrollAmount();if(scrollAmount===0){this.logError("Scroll amount is 0, cannot scroll");return}const{scrollLeft,clientWidth,scrollWidth}=this.getScrollMetrics(),maxScroll=scrollWidth-clientWidth,targetScroll=Math.min(maxScroll,scrollLeft+scrollAmount);this.log("Scrolling next",{from:scrollLeft,by:scrollAmount,to:targetScroll,maxScroll,scrollWidth,clientWidth}),requestAnimationFrame(()=>{this.track.scrollTo({left:targetScroll,behavior:this.scrollBehavior})})}updateButtonStates(){try{const canScrollPrev=this.canScrollPrev(),canScrollNext=this.canScrollNext();this.log("Updating button states",{canScrollPrev,canScrollNext,metrics:this.getScrollMetrics()}),this.updateButtonState(this.prev,canScrollPrev),this.updateButtonState(this.next,canScrollNext),this.dispatchEvent(new CustomEvent("scroll-state-change",{detail:{canScrollPrev,canScrollNext}}))}catch(error){this.log("Error updating button states",error,"error")}}updateButtonState(button,canScroll){try{const buttonType=button===this.prev?"prev":"next";this.log(`Updating ${buttonType} button state`,{canScroll}),button.classList.toggle("opacity-50",!canScroll),button.classList.toggle("cursor-not-allowed",!canScroll),button.setAttribute("aria-disabled",(!canScroll).toString()),button.disabled=!canScroll}catch(error){this.log("Error updating button state",error,"error")}}}),customElements.define("media-component",class extends BaseComponent{constructor(){super()}connectedCallback(){this.poster=this.querySelector("a"),this.poster&&(this.template=this.querySelector("template"),this.addSafeEventListener(this.poster,"click",this.loadContent.bind(this)))}loadContent(event){if(event.preventDefault(),!this.getAttribute("loaded")){const content=document.createElement("div"),newNode=this.template.content.firstElementChild.cloneNode(!0);content.appendChild(newNode),this.setAttribute("loaded",!0);const media=content.querySelector("video, model-viewer, iframe");this.poster.appendChild(media).focus()}}pauseAllMedia(){document.querySelectorAll("video").forEach(video=>video.pause())}}),customElements.define("cjs-media",class extends BaseComponent{constructor(){super(),this.observer=null,this.mediaElement=null}connectedCallback(){if(this.poster=this.querySelector("a"),this.template=this.querySelector("template"),!this.poster||!this.template){console.warn("CJS Media: Missing required elements (poster or template)");return}this.addSafeEventListener(this.poster,"click",this.loadContent),this.setupVisibilityObserver()}disconnectedCallback(){super.disconnectedCallback(),this.observer&&this.observer.disconnect(),this.stopMedia()}setupVisibilityObserver(){this.observer=new IntersectionObserver(entries=>
3{entries.forEach(entry=>{entry.isIntersecting||this.stopMedia()})},{threshold:0}),this.observer.observe(this)}loadContent=event=>{if(event.preventDefault(),!this.hasAttribute("loaded"))try{const content=document.createElement("div"),mediaContent=this.template.content.firstElementChild.cloneNode(!0);content.appendChild(mediaContent);const media=content.querySelector("video, model-viewer, iframe");if(!media){console.warn("CJS Media: No valid media element found in template");return}this.mediaElement=media;const insertedMedia=this.insertBefore(media,this.poster);this.poster.remove(),this.setAttribute("loaded",""),insertedMedia.focus(),this.isVideo()&&insertedMedia.play(),this.addSafeEventListener(this,"visibilitychange",()=>{document.hidden&&this.stopMedia()})}catch(error){console.error("CJS Media: Error loading content",error)}};isVideo(){return this.mediaElement instanceof HTMLVideoElement}stopMedia(){if(this.mediaElement&&this.isVideo())try{this.mediaElement.pause(),this.mediaElement.currentTime=0}catch(error){console.warn("CJS Media: Error stopping video",error)}}stop(){this.stopMedia()}}),customElements.define("content-toggle",class extends BaseComponent{connectedCallback(){this.section=this.findClosest("section"),this.section&&(this.toggles=Array.from(this.section.querySelectorAll("content-toggle")),this.links=this.querySelectorAll("[data-toggle]"),this.setupEventListeners())}setupEventListeners(){this.links.forEach(link=>{this.addSafeEventListener(link,"click",this.handleToggle)})}handleToggle=event=>{event.preventDefault();const toggleIndex=parseInt(event.currentTarget.getAttribute("data-toggle")),targetContent=this.toggles[toggleIndex];if(!targetContent){console.warn("Content Toggle: Target content not found");return}this.toggles.forEach(content=>{this.stopMediaInContent(content),this.toggleVisibility(content,!1)}),this.toggleVisibility(targetContent,!0),this.updateActiveStates(event.currentTarget)};stopMediaInContent(content){content.querySelectorAll("cjs-media").forEach(media=>{typeof media.stop=="function"&&media.stop()})}toggleVisibility(element,show){element.classList.toggle("hidden",!show)}updateActiveStates(activeLink){this.links.forEach(link=>{link.classList.remove("text-blue-600","border-blue-600","border-b-2")}),activeLink.classList.add("text-blue-600","border-blue-600","border-b-2")}}),customElements.define("cjs-text-animate",class extends BaseComponent{constructor(){super(),this.activeIndex=0,this.animationInterval=null}connectedCallback(){const wordsAttribute=this.getAttribute("data-words");if(!wordsAttribute){console.warn("CJS Text Animate: No words provided in data-words attribute");return}if(this.words=wordsAttribute.split(",").map(word=>word.trim()),this.words.length<2){console.warn("CJS Text Animate: At least 2 words are required for animation");return}this.startAnimation()}disconnectedCallback(){super.disconnectedCallback(),this.stopAnimation()}startAnimation(){this.render(),this.animationInterval=setInterval(()=>{this.updateAnimation()},1e3)}stopAnimation(){this.animationInterval&&(clearInterval(this.animationInterval),this.animationInterval=null)}updateAnimation(){const nextIndex=(this.activeIndex+1)%this.words.length,upcomingIndex=(nextIndex+1)%this.words.length;this.activeIndex=nextIndex,this.render(this.words[this.activeIndex],this.words[upcomingIndex])}render(){const current=this.words[this.activeIndex],next=this.words[(this.activeIndex+1)%this.words.length],upcoming=this.words[(this.activeIndex+2)%this.words.length],html=`
4        <span class="animate-word animate-out">${current}</span>
5        <span class="animate-word animate-in active">${next}</span>
6        <span class="animate-word">${upcoming}</span>
7      `;this.innerHTML=html}updateWords(newWords){this.stopAnimation(),this.words=newWords.split(",").map(word=>word.trim()),this.activeIndex=0,this.startAnimation()}}),customElements.get("turret-slider-snap")||customElements.define("turret-slider-snap",class extends HTMLElement{constructor(){super()}connectedCallback(){this.nextButton=this.querySelector("[data-next]"),this.prevButton=this.querySelector("[data-prev]"),this.track=this.querySelector("[data-track]"),this.activeSlide=0,this.slides=Array.from(this.querySelectorAll("[data-sli
7de]")),this.sliderDots=Array.from(this.querySelectorAll("[data-dot]")),this.maxSlides=0,this.calculateMaxSlides(),this.behavior=this.getAttribute("behavior")||"smooth",this.nextButton&&this.nextButton.addEventListener("click",this.next.bind(this)),this.prevButton&&this.prevButton.addEventListener("click",this.previous.bind(this)),this.speed=this.getAttribute("speed")||5e3,this.autoplaySpeed=this.getAttribute("autoplay")||0,this.autoplay=null,this.sliderDots.forEach((dot,index)=>dot.addEventListener("click",this.move.bind(this,index))),this.track.addEventListener("scroll",()=>this.updateUI.bind(this)),this.addEventListener("mouseover",this.focusInHandling.bind(this)),this.addEventListener("mouseleave",this.focusOutHandling.bind(this)),this.updateUI()}calculateMaxSlides(){this.sliderDots.forEach(dot=>{window.getComputedStyle(dot).display!="none"&&this.maxSlides++})}move(slide){if(!this.slides[slide]||slide>this.maxSlides-1)return;const pos=this.track.clientWidth*slide;this.activeSlide=slide,this.track.scrollTo({left:pos,behavior:this.behavior}),this.updateUI()}next(event){event.preventDefault(),this.move(this.activeSlide+1)}previous(event){event.preventDefault(),this.move(this.activeSlide-1)}canSlide(){const width=this.track.getBoundingClientRect().width;return width<1?1:width/this.track.clientWidth>this.activeSlide+1}updateUI(){const next=this.slides[this.activeSlide+1],prev=this.slides[this.activeSlide-1],activeDot=this.sliderDots[this.activeSlide],hasNext=next!==void 0&&this.activeSlide+1<=this.maxSlides-1;this.nextButton&&this.nextButton.classList.toggle("tt-opacity-100",hasNext),this.prevButton&&this.prevButton.classList.toggle("tt-opacity-100",prev!==void 0),this.sliderDots.forEach(dot=>{dot.classList.toggle("tt-opacity-100",dot===activeDot)})}disconnectedCallback(){this.removeEventListener("mouseover",this.focusInHandling.bind(this)),this.removeEventListener("mouseleave",this.focusOutHandling.bind(this)),this.pause()}shouldAutoplay(){return this.autoplaySpeed>0}play(){this.shouldAutoplay()&&(this.slides.length<2||(this.track.setAttribute("aria-live","off"),this.autoplay=setInterval(()=>{const slide=this.activeSlide===this.slides.length-1?0:this.activeSlide+1;this.move(slide)},this.autoplaySpeed)))}pause(){this.shouldAutoplay()&&(this.track.setAttribute("aria-live","polite"),clearInterval(this.autoplay))}focusOutHandling(event){this.play()}focusInHandling(event){this.pause()}}),customElements.define("collections-slider",class extends HTMLElement{constructor(){super()}connectedCallback(){this.sliders=this.querySelectorAll(".collectionsSlider"),this.indexes=this.querySelectorAll(".collectionsIndex"),this.indexSlider=this.querySelector(".indexSlider"),!(this.sliders.length<1||this.indexes.length<1)&&(this.loadSliders(this.sliders),this.loadIndexSlider(),this.indexes.forEach(index=>index.addEventListener("click",()=>this.toggleCollectionSlider(index))))}loadSliders(sliders){const infiniteScroll=this.dataset.infiniteScroll==="true";sliders.forEach((el,i)=>{if(!el.classList.contains("swiper-initialized")){const totalSlides=el.querySelectorAll(".swiper-slide").length;if(infiniteScroll&&totalSlides<=4){const fragment=document.createDocumentFragment();
7el.querySelectorAll(".swiper-slide").forEach(slide=>{fragment.appendChild(slide.cloneNode(!0))}),el.querySelector(".swiper-wrapper").appendChild(fragment)}const nextEl=this.querySelector(".swiper-button-next"),prevEl=this.querySelector(".swiper-button-prev");new Swiper(el,{loop:infiniteScroll,slidesPerView:1.7,spaceBetween:16,grabCursor:!0,navigation:{nextEl,prevEl},breakpoints:{1020:{slidesPerView:4.2,spaceBetween:22,centerInsufficientSlides:!0}},on:{init:()=>{i===sliders.length-1&&(this.style.opacity="1")}}})}})}loadIndexSlider(){this.indexSlider.classList.contains("swiper-initialized")||new Swiper(this.indexSlider,{slidesPerView:2.3,spaceBetween:22,grabCursor:!0,slideToClickedSlide:!0,breakpoints:{1020:{slidesPerView:4,spaceBetween:50,width:900,slideToClickedSlide:!1,loop:!1}}})}toggleCollectionSlider(index){this.indexes.forEach(i=>{i.classList.remove("text-chirp-blue"),i.classList.add("text-chirp-gray-lightest")}),index.classList.add("text-chirp-blue"),index.classList.remove("text-chirp-gray-lightest");const activeSlider=this.querySelector(".collectionsSlider[active]"),newSlider=this.querySelector(`.collectionsSlider[data-index="${index.dataset.index}"]`);activeSlider&&(activeSlider.removeAttribute("active"),activeSlider.setAttribute("hidden","")),newSlider.removeAttribute("hidden"),newSlider.setAttribute("active","")}}),customElements.define("video-list-slider",class extends HTMLElement{constructor(){super()}connectedCallback(){this.slider=this.querySelector(".videoListSlider"),this.slider&&this.loadSlider()}loadSlider(){if(this.slider.classList.contains("swiper-initialized"))return;const infiniteScroll=this.dataset.infiniteScroll==="true",nextEl=this.querySelector(".swiper-button-next"),prevEl=this.querySelector(".swiper-button-prev"),totalSlides=this.slider.querySelectorAll(".swiper-slide").length;new Swiper(this.slider,{loop:infiniteScroll&&totalSlides>1,slidesPerView:1.2,spaceBetween:16,grabCursor:!0,navigation:nextEl&&prevEl?{nextEl,prevEl}:void 0,breakpoints:{640:{slidesPerView:1.5,spaceBetween:16},768:{slidesPerView:2,spaceBetween:18},1020:{slidesPerView:4.2,spaceBetween:22,centerInsufficientSlides:!0}},on:{init:()=>{this.style.opacity="1"}}})}}),customElements.define("product-gallery",class extends HTMLElement{constructor(){super(),this.swiper=null}connectedCallback(){if(this.hasAttribute("data-variant-filter")){const pristine=this.querySelector(".swiper-wrapper");pristine&&(this.viMaster=pristine.cloneNode(!0))}this.loadSlider(this);const wrapper=this.querySelector(".swiper-wrapper");wrapper&&(this.mobileHTML=wrapper.cloneNode(!0)),this.checkAndLoadMedia();const isDesktop=window.matchMedia("(min-width: 1024px)").matches,desktopMediaJSON=document.querySelector("[data-desktop-media]");if(isDesktop&&desktopMediaJSON)try{const mediaData=JSON.parse(desktopMediaJSON.textContent);this.injectDesktopMedia(mediaData)}catch(error){console.warn("Desktop media JSON malformed",error)}this.addEventListeners(),this.updatePauseButtonVisibility(),this.hasAttribute("data-variant-filter")&&this.initVariantFilter(),window.addEventListener("resize",this.checkAndLoadMedia.bind(this))}disconnectedCallback(){window.removeEventListener("resize",this.checkAndLoadMedia.bind(this))}viRoot(){return this.closest("[data-vi-root]")||document.getElementById("main-product")}viTestActive(){return document.documentElement.classList.contains("chirp-vi-test")}initVariantFilter(){const self=this;if(this.initViController(),!this.viMaster){const wrapper=this.querySelector(".swiper-wrapper");wrapper&&(this.viMaster=wrapper.cloneNode(!0))}const isDesktopGallery=!!this.closest(".lg\\:col-span-8"),root=this.viRoot(),stripSel=isDesktopGallery?".chirp-variant-thumbs--desktop":".chirp-variant-thumbs--mobile";this.thumbStrip=root&&root.querySelector(stripSel)||this.parentElement&&this.parentElement.querySelector("[data-variant-thumbs]"),this.bindThumbnails(),this.viTestActive()&&this.viActivate(),this._viHtmlObserver=new MutationObserver(function(){self.viTestActive()&&self.viActivate()}),this._viHtmlObserver.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]})}viActivate(){if(this._viActive)return;this._viActive=!0;const self=this;this.syncToVisible();const root=this.viRoot();
7root&&(this._viRootObserver=new MutationObserver(function(){self.syncToVisible()}),this._viRootObserver.observe(root,{attributes:!0,attributeFilter:["data-selected-color"]}))}syncToVisible(){if(!this._viActive||!this.viMaster)return;const wrapper=this.querySelector(".swiper-wrapper");if(!wrapper)return;const full=this.viMaster.cloneNode(!0);full.querySelectorAll(".swiper-slide-duplicate").forEach(function(d){d.remove()}),full.removeAttribute("style"),wrapper.replaceWith(full),full.offsetHeight;const slides=Array.prototype.slice.call(full.querySelectorAll(".swiper-slide"));let kept=0;if(slides.forEach(function(slide){slide.removeAttribute("style"),slide.classList.remove("swiper-slide-active","swiper-slide-prev","swiper-slide-next","swiper-slide-visible","swiper-slide-duplicate"),window.getComputedStyle(slide).display==="none"?slide.remove():kept++}),kept===0){const fallback=this.viMaster.cloneNode(!0);fallback.querySelectorAll(".swiper-slide-duplicate").forEach(function(d){d.remove()}),full.replaceWith(fallback)}if(this.swiper){try{this.swiper.destroy(!0,!0)}catch{}this.swiper=null}this.loadSlider(this),this.updateActiveThumb(),this.playActiveVideo()}playActiveVideo(){const slide=this.getActiveSlide()||this.querySelector(".swiper-slide:not(.swiper-slide-duplicate)")||this.querySelector(".swiper-slide"),video=this.getVideoInSlide(slide);if(video)try{video.muted=!0,video.currentTime=0;const p=video.play();p&&typeof p.catch=="function"&&p.catch(function(){})}catch{}}initViController(){if(window.__chirpViController)return;window.__chirpViController=!0;function slug(v){return(v||"").trim().toLowerCase()}function setSelected(color){color&&document.querySelectorAll("[data-vi-root]").forEach(function(root){root.setAttribute("data-selected-color",color)})}function currentColor(){const sel=document.querySelector(".chirp-color-swatch.selected");if(sel&&sel.dataset.variantColor)return slug(sel.dataset.variantColor);const root=document.querySelector("[data-vi-root]");return root&&root.getAttribute("data-selected-color")?root.getAttribute("data-selected-color"):""}try{const p=new URL(window.location.href).searchParams.get("variant-images-test");(p==="show"||p==="1"||p==="true")&&document.documentElement.classList.add("chirp-vi-test")}catch{}document.addEventListener("click",function(e){const sw=e.target.closest&&e.target.closest(".chirp-color-swatch");if(!sw||!sw.dataset.variantColor)return;const color=slug(sw.dataset.variantColor);setTimeout(function(){setSelected(color)},0)},!0);const swObserver=new MutationObserver(function(){const c=currentColor();c&&setSelected(c)});document.querySelectorAll(".chirp-color-swatch").forEach(function(sw){swObserver.observe(sw,{attributes:!0,attributeFilter:["class"]})}),setSelected(currentColor())}bindThumbnails(){if(!this.thumbStrip)return;const self=this;this.thumbStrip.querySelectorAll(".chirp-variant-thumb").forEach(function(btn){btn.addEventListener("click",function(){const index=parseInt(btn.getAttribute("data-thumb-index"),10);self.goToOriginalIndex(index)})})}goToOriginalIndex(originalIndex){if(!this.swiper)return;const realSlides=this.querySelectorAll(".swiper-slide:not(.swiper-slide-duplicate)");for(let i=0;i<realSlides.length;i++)if(parseInt(realSlides[i].getAttribute("data-slide-index"),10)===originalIndex){typeof this.swiper.slideToLoop=="function"?this.swiper.slideToLoop(i):this.swiper.slideTo(i);return}}updateActiveThumb(){if(!this.thumbStrip)return;const active=this.getActiveSlide(),activeIndex=active?active.getAttribute("data-slide-index"):null;this.thumbStrip.querySelectorAll(".chirp-variant-thumb").forEach(function(btn){const on=activeIndex!==null&&btn.getAttribute("data-thumb-index")===activeIndex;btn.classList.toggle("chirp-variant-thumb--active",on)})}addEventListeners(){const pauseBtn=this.querySelector("[data-pause-chirp-video]");pauseBtn&&pauseBtn.addEventListener("click",()=>this.toggleActiveVideo()),this.addEventListener("swiper-ready",()=>{this.swiper.on("slideChangeTransitionEnd",()=>{this.updatePauseButtonVisibility(),this.updateActiveThumb()}),this.swiper.on("resize",()=>{this.updatePauseButtonVisibility()}),this.updateActiveThumb()})}restoreMobileMedia(){if(!this.mobileHTML)return;const wrapper=this.querySelector(".swiper-wrapper");if(wrapper&&wrapper.replaceWith(this.mobileHTML.cloneNode(!0)),this.swiper){try{this.swiper.destroy(!0,!0)}catch{}this.swiper=null}requestAnimationFrame(()=>this.loadSlider(this))}
7checkAndLoadMedia(){const isDesktop=window.matchMedia("(min-width: 1024px)").matches,desktopMediaJSON=document.querySelector("[data-desktop-media]");if(isDesktop&&desktopMediaJSON&&!this.classList.contains("desktop-loaded"))try{const mediaData=JSON.parse(desktopMediaJSON.textContent);this.injectDesktopMedia(mediaData),this.classList.add("desktop-loaded")}catch(error){console.warn("Desktop media JSON malformed",error)}if(!isDesktop&&this.classList.contains("desktop-loaded")&&(this.restoreMobileMedia(),this.classList.remove("desktop-loaded"),this.hasAttribute("data-variant-filter")&&this._viActive)){var self=this;requestAnimationFrame(function(){self.syncToVisible()})}}getActiveSlide(){return this.querySelector(".swiper-slide.swiper-slide-active")}getVideoInSlide(slide){if(!slide)return null;let video=slide.querySelector("video");if(video)return video;const vc=slide.querySelector("video-component");if(vc){const inner=vc.querySelector("video");if(inner)return inner}return null}updatePauseButtonVisibility(){const pauseBtn=this.querySelector("[data-pause-chirp-video]");if(!pauseBtn)return;const slide=this.getActiveSlide();this.getVideoInSlide(slide)?pauseBtn.classList.add("is-visible"):pauseBtn.classList.remove("is-visible")}toggleActiveVideo(){const slide=this.getActiveSlide(),video=this.getVideoInSlide(slide);if(!video)return;const playBtn=this.querySelector("[data-play-chirp]"),pauseBtn=this.querySelector("[data-pause-chirp]");if(!playBtn||!pauseBtn)return;video.paused?video.play().catch(()=>{}):video.pause();const isPlaying=!video.paused;pauseBtn.classList.toggle("hidden",!isPlaying),playBtn.classList.toggle("hidden",isPlaying)}injectDesktopMedia(mediaArray){const wrapper=this.querySelector(".swiper-wrapper");if(!wrapper||!mediaArray?.length)return;const frag=document.createDocumentFragment();if(mediaArray.forEach((media,i)=>{const fetchPriority=i===0?"high":"auto",slide=document.createElement("div");slide.className="swiper-slide";const mediaSrc=typeof media=="string"?media:media&&(media.src||media.url||media.preview_image&&media.preview_image.src)||"";if(media&&media.id!=null&&media.id!==""&&slide.setAttribute("data-media-id",String(media.id)),!(media&&media.media_type==="video")){const file=this.imageFileFromSrc(mediaSrc);file&&slide.setAttribute("data-image-file",file)}const mediaWrap=document.createElement("div");if(mediaWrap.className="media-wrap w-full h-full flex items-center justify-center",media&&media.media_type==="video"){const videoComponent=document.createElement("video-component");videoComponent.className="relative h-full w-full block";const videoEl=document.createElement("video");videoEl.className="cjs-media__video h-full w-auto max-h-full max-w-full object-cover object-center",videoEl.autoplay=!0,videoEl.muted=!0,videoEl.loop=!0,videoEl.controls=!1,videoEl.playsInline=!0,videoEl.setAttribute("fetchpriority",fetchPriority),media.preview_image?.src&&(videoEl.poster=media.preview_image.src.replace(/^\/\//,"https://")),Array.isArray(media.sources)&&media.sources.length&&media.sources.forEach(s=>{const src=document.createElement("source");src.src=(s.url||"").replace(/^\/\//,"https://"),s.mime_type&&(src.type=s.mime_type),videoEl.appendChild(src)}),videoComponent.appendChild(videoEl);const controls=document.createElement("div");controls.className="video-controls hidden";const btn=document.createElement("button");btn.type="button",btn.className="toggle-play size-6 lg:size-7 rounded-full items-center justify-center p-1",btn.setAttribute("aria-label","Toggle Play state of the video"),btn.setAttribute("data-video-toggle","");const tpl=document.getElementById("video-icons-template");tpl&&tpl.content&&btn.appendChild(tpl.content.cloneNode(!0)),controls.appendChild(btn),videoComponent.appendChild(controls),mediaWrap.appendChild(videoComponent)}else if(typeof media=="string"){const img=document.createElement("img");img.src=media.replace(/^\/\//,"https://"),img.alt="",img.className="h-full w-full max-w-screen max-h-full object-cover object-center",img.setAttribute("fetchpriority",fetchPriority),mediaWrap.appendChild(img)}slide.appendChild(mediaWrap),frag.appendChild(slide)}),wrapper.replaceChildren(frag),this.classList.remove("loading"),this.classList.add("loaded"),this.swiper){try{this.swiper.destroy(!0,!0)}catch(err){console.warn("Error destroying swiper",err)}this.swiper=null}requestAnimationFrame(()=>this.loadSlider(this))}imageFileFromSrc(src){if(!src||typeof src!="string")return"";const name=src.split("?")[0].split("#")[0].split("/").pop()||"";try{return decodeURIComponent(name).toLowerCase()}catch{return name.toLowerCase()}}getVariantSlideIndex(slider){const mediaId=slider.getAttribute("data-variant-media-id")||"",imageFile=this.imageFileFromSrc(slider.getAttribute("data-variant-image-file")||"");if(!mediaId&&!imageFile)return 0;const slides=Array.from(slider.querySelectorAll(".swiper-slide:not(.swiper-slide-duplicate)"));if(mediaId){const byId=slides.findIndex(slide=>slide.getAttribute("data-media-id")===mediaId);if(byId>=0)return byId}if(!imageFile)return 0;
7const byFile=slides.findIndex(slide=>{if(slide.querySelector("video, video-component"))return!1;const file=this.imageFileFromSrc(slide.getAttribute("data-image-file")||"");if(file&&file===imageFile)return!0;const img=slide.querySelector("img");return img?this.imageFileFromSrc(img.currentSrc||img.getAttribute("src")||"")===imageFile:!1});return byFile>=0?byFile:0}loadSlider(slider){if(slider.classList.contains("swiper-initialized"))return;const nextEl=slider.querySelector(".swiper-button-next"),prevEl=slider.querySelector(".swiper-button-prev"),paginationEl=slider.querySelector(".swiper-pagination"),variantSlideIndex=this.getVariantSlideIndex(slider),config={slidesPerView:1,grabCursor:!0,loop:!0,initialSlide:variantSlideIndex,on:{init:swiper=>{this.dispatchEvent(new CustomEvent("swiper-ready",{bubbles:!0})),!(variantSlideIndex<=0)&&requestAnimationFrame(()=>{if(!swiper||swiper.destroyed||swiper.realIndex===variantSlideIndex){this.updateActiveThumb();return}typeof swiper.slideToLoop=="function"?swiper.slideToLoop(variantSlideIndex,0):swiper.slideTo(variantSlideIndex,0),this.updateActiveThumb(),this.updatePauseButtonVisibility()})},slideChangeTransitionEnd:()=>this.updatePauseButtonVisibility()}};nextEl&&prevEl&&(config.navigation={nextEl,prevEl}),paginationEl&&(config.pagination={el:paginationEl,clickable:!0}),this.swiper=new Swiper(slider,config)}}),customElements.define("sticky-cta",class extends BaseComponent{constructor(){super(),this.section=null,this.form=null,this.originalButton=null,this.stickyButton=null,this.intersectionObserver=null,this.mutationObserver=null,this.mediaQuery=window.matchMedia("(max-width: 1023px)"),this.isVisible=!1,this.hasScrolled=!1,this.minScrollDistance=500}connectedCallback(){this.style.position="fixed",this.style.left="0",this.style.right="0",this.style.bottom="0",this.style.zIndex="30",this.style.display="none",this.style.pointerEvents="none",this.innerHTML="";const wrapper=document.createElement("div");wrapper.style.background="transparent",wrapper.style.padding="12px 16px",wrapper.style.paddingBottom="calc(12px + env(safe-area-inset-bottom))",wrapper.style.width="100%",wrapper.style.pointerEvents="auto";const btn=document.createElement("button");if(btn.type="button",btn.className="btn btn-primary w-full",btn.setAttribute("aria-label","Add to cart"),btn.textContent="Add to cart",wrapper.appendChild(btn),this.appendChild(wrapper),this.stickyButton=btn,this.addSafeEventListener(this.stickyButton,"click",this.onStickyClick),this.mediaQuery.addEventListener("change",()=>this.updateVisibility()),this.addSafeEventListener(window,"scroll",debounce(()=>{const scrollTop=window.pageYOffset||document.documentElement.scrollTop;this.hasScrolled=scrollTop>=this.minScrollDistance,this.updateVisibility()},50)),this.section=this.closest("section")||document,this.form=this.section.querySelector("product-form form"),this.originalButton=this.form?this.form.querySelector('button[type="submit"]'):null,!this.form||!this.originalButton){this.log("Sticky CTA: form or button not found in section",null,"warn");return}this.syncFromOriginal(),this.intersectionObserver=new IntersectionObserver(entries=>{const buttonInView=!!entries[0]?.isIntersecting;this.setActive(this.mediaQuery.matches&&!buttonInView&&this.hasScrolled)},{threshold:0,rootMargin:"0px 0px -100px 0px"}),this.intersectionObserver.observe(this.originalButton),this.mutationObserver=new MutationObserver(()=>this.syncFromOriginal()),this.mutationObserver.observe(this.originalButton,{attributes:!0,attributeFilter:["disabled","class"],childList:!0,subtree:!0}),this.addSafeEventListener(window,"resize",debounce(()=>this.syncFromOriginal(),150))}disconnectedCallback(){super.disconnectedCallback(),this.intersectionObserver&&this.intersectionObserver.disconnect(),this.mutationObserver&&this.mutationObserver.disconnect()}onStickyClick(){if(this.form)try{if(typeof this.form.requestSubmit=="function")this.form.requestSubmit();else{const evt=new Event("submit",{bubbles:!0,cancelable:!0});this.form.dispatchEvent(evt)}}catch(e){console.warn("Sticky CTA: submit fallback",e),this.form.submit()}}
7syncFromOriginal(){if(!this.originalButton||!this.stickyButton)return;this.stickyButton.innerHTML=this.originalButton.innerHTML;const classesToCopy=Array.from(this.originalButton.classList).filter(c=>c.startsWith("btn")).map(c=>c==="btn-secondary-outlined"?"btn-secondary":c),base=["w-full"];this.stickyButton.className=[...classesToCopy,...base].join(" ")||"btn btn-primary w-full",this.stickyButton.disabled=this.originalButton.disabled}setActive(active){if(this.isVisible===active)return;if(this.isVisible=active,this.style.display=active?"block":"none",document.body.dataset.template?.includes("contour-v2")){const footer=document.querySelector("footer");footer&&(active?footer.style.paddingBottom="80px":footer.style.paddingBottom="")}}updateVisibility(){if(!this.originalButton){this.setActive(!1);return}if(!this.mediaQuery.matches){this.setActive(!1);return}if(!this.hasScrolled){this.setActive(!1);return}const rect=this.originalButton.getBoundingClientRect(),vh=window.innerHeight||document.documentElement.clientHeight,inView=rect.top<vh&&rect.bottom>0;this.setActive(!inView)}}),customElements.define("cards-slider",class extends HTMLElement{constructor(){super(),this._onKeyDown=this._onKeyDown.bind(this),this._onResize=this._onResize.bind(this),this.cardsSwiper=null}connectedCallback(){this.cards=Array.from(this.querySelectorAll(".cardModal")),this.modal=this.querySelector("#cardsModal"),this.closeBtn=this.querySelectorAll(".closeCardsModal"),this.expandedSwiperEl=this.querySelector(".expandedSwiper"),this.cardsSlider=this.querySelector(".cardsSlider"),this._preloadFirstSlideImage(),typeof Swiper<"u"&&this.expandedSwiperEl&&this._initSwiper(),this.cards.forEach((card,idx)=>{card.addEventListener("click",()=>{if(window.innerWidth>=1024)this.toggleInline(idx);else{const i=parseInt(card.dataset.index,10)||0;this.openModal(i)}}),this.openCloseBtn(card,idx)}),this.closeBtn&&this.closeBtn.forEach(btn=>{btn.addEventListener("click",()=>this.closeModal())}),this.modal&&this.modal.addEventListener("click",e=>{e.target===this.modal&&this.closeModal()}),document.addEventListener("keydown",this._onKeyDown),window.addEventListener("resize",this._onResize)}disconnectedCallback(){document.removeEventListener("keydown",this._onKeyDown),window.removeEventListener("resize",this._onResize)}_onResize(){this.cards.forEach((card,idx)=>this.openCloseBtn(card,idx))}openCloseBtn(card,idx){const closeInline=card.querySelector(".closeInline");closeInline&&(closeInline._handler&&closeInline.removeEventListener("click",closeInline._handler),closeInline._handler=e=>{if(e.stopPropagation(),window.innerWidth<1024){const i=parseInt(card.dataset.index,10)||0;this.openModal(i)}else this.toggleInline(idx)},closeInline.addEventListener("click",closeInline._handler))}_initSwiper(){const pagination=this.modal.querySelector(".swiper-pagination"),nextEl=this.modal.querySelector(".swiper-button-next"),prevEl=this.modal.querySelector(".swiper-button-prev");this.swiper=new Swiper(this.expandedSwiperEl,{loop:!1,slidesPerView:1,centeredSlides:!0,pagination:{el:pagination,clickable:!0},navigation:{nextEl,prevEl},grabCursor:!0,keyboard:{enabled:!0}})}
7_initCardsSlider(){if(window.innerWidth<1024){if(!this.cardsSwiper){const pagination=this.cardsSlider.querySelector(".swiper-pagination"),nextEl=this.cardsSlider.querySelector(".swiper-button-next"),prevEl=this.cardsSlider.querySelector(".swiper-button-prev");this.cardsSwiper=new Swiper(this.cardsSlider,{slidesPerView:1.1,spaceBetween:22,pagination:{el:pagination,clickable:!0},navigation:{nextEl,prevEl},grabCursor:!0,keyboard:{enabled:!0}})}}else this.cardsSwiper&&(this.cardsSwiper.destroy(!0,!0),this.cardsSwiper=null)}_preloadFirstSlideImage(){const firstSlideImg=this.querySelector(".swiper-slide img");if(firstSlideImg&&!firstSlideImg.complete){const img=new Image;img.src=firstSlideImg.src||firstSlideImg.dataset.src}}toggleInline(index){const card=this.cards[index];if(!card)return;const container=this.cardsSlider?.querySelector(".cards-row"),wasExpanded=card.classList.contains("expanded"),noneExpanded=!this.cards.some(c=>c.classList.contains("expanded"));if(this.cards.forEach(c=>c.classList.remove("expanded")),wasExpanded)container&&(container.style.scrollSnapType="x mandatory",container.style.webkitScrollSnapType="x mandatory");else{container&&(container.style.scrollSnapType="none",container.style.webkitScrollSnapType="none"),card.classList.add("expanded");const styles=getComputedStyle(card),duration=parseFloat(styles.transitionDuration)||0,delay=parseFloat(styles.transitionDelay)||0,measureTime=(duration+delay)*1e3*.9;measureTime>0?setTimeout(()=>{this._scrollCardPrecisely(card,index,noneExpanded)},measureTime):requestAnimationFrame(()=>{this._scrollCardPrecisely(card,index,noneExpanded)});const onTransitionEnd=e=>{(e.propertyName==="width"||e.propertyName==="max-width")&&(card.removeEventListener("transitionend",onTransitionEnd),container&&(container.style.scrollSnapType="x mandatory",container.style.webkitScrollSnapType="x mandatory"))};card.addEventListener("transitionend",onTransitionEnd,{once:!0})}}_scrollCardPrecisely(card,index,noneExpanded){const container=this.cardsSlider?.querySelector(".cards-row");if(!container)return;const containerRect=container.getBoundingClientRect(),cardRect=card.getBoundingClientRect(),futureWidth=window.innerWidth*(window.innerWidth>=2048?.45:.55),cardLeftInContainer=cardRect.left-containerRect.left+container.scrollLeft,containerWidth=container.clientWidth,cs=getComputedStyle(container),padL=parseInt(cs.scrollPaddingLeft||"0",10),padR=parseInt(cs.scrollPaddingRight||"0",10);let targetScrollLeft;index===0?targetScrollLeft=cardLeftInContainer-padL:index===this.cards.length-1?targetScrollLeft=cardLeftInContainer+futureWidth-containerWidth+padR:targetScrollLeft=cardLeftInContainer+futureWidth/2-containerWidth/2;const maxScroll=container.scrollWidth-containerWidth;targetScrollLeft=Math.max(0,Math.min(targetScrollLeft,maxScroll)),console.log("cardLeftInContainer:",cardLeftInContainer,"futureWidth:",futureWidth,"target:",targetScrollLeft,"containerWidth:",containerWidth,"index",index,"noneExpanded",noneExpanded),container.scrollTo({left:targetScrollLeft,behavior:"smooth"})}openModal(index=0){this.modal.classList.remove("hidden"),setTimeout(()=>{this.swiper&&(this.swiper.update(),this.swiper.slideTo(index,0))},0),requestAnimationFrame(()=>{document.body.classList.add("modal-open"),requestAnimationFrame(()=>{this.swiper&&(this.swiper.update(),this.swiper.slideTo(index,0))})})}closeModal(){document.body.classList.remove("modal-open"),this.modal.classList.add("hidden")}_onKeyDown(e){e.key==="Escape"&&(window.innerWidth>=1024?this.cards.forEach(c=>c.classList.remove("expanded")):this.closeModal())}}),customElements.define("video-slider",class extends HTMLElement{constructor(){super(),this.swiper=null}connectedCallback(){this.applySlideState(),this.swiper||this.initSwiper()}initSwiper(){const nextEl=this.querySelector(".swiper-button-next"),prevEl=this.querySelector(".swiper-button-prev");this.swiper=new Swiper(this,{effect:"coverflow",grabCursor:!0,centeredSlides:!0,loop:!0,slidesPerView:"auto",spaceBetween:0,coverflowEffect:{rotate:0,stretch:"90%",depth:72,modifier:1,slideShadows:!1},navigation:{nextEl,prevEl},breakpoints:{1024:{coverflowEffect:{stretch:"86%",depth:75}},1440:{coverflowEffect:{stretch:"82%",depth:80}},1800:{coverflowEffect:{stretch:"80%",depth:82}}},on:{init:()=>this.applyInitialState(),slideChange:()=>this.applySlideState(),slideChangeTransitionEnd:()=>this.applySlideState()}})}applyInitialState(){this.querySelectorAll(".swiper-slide").forEach(sli
7de=>{slide.addEventListener("video-loaded",()=>{const isActive=slide.classList.contains("swiper-slide-active");slide.classList.toggle("scale-100",isActive),slide.classList.toggle("scale-95",!isActive);const overlay=slide.querySelector(".overlay"),video=slide.querySelector("video"),playSVG=slide.querySelector("[data-play-svg]"),pauseSVG=slide.querySelector("[data-pause-svg]");if(playSVG&&pauseSVG&&(playSVG.classList.remove("hidden"),pauseSVG.classList.add("hidden")),overlay){const shouldHideOverlay=isActive&&video;overlay.classList.toggle("opacity-0",shouldHideOverlay),overlay.classList.toggle("opacity-100",!shouldHideOverlay)}})})}applySlideState(){const slides=this.querySelectorAll(".swiper-slide"),activeIndex=this.swiper?.activeIndex;slides.forEach((slide,index)=>{const isActive=index===activeIndex;slide.classList.toggle("scale-100",isActive),slide.classList.toggle("scale-95",!isActive);const overlay=slide.querySelector(".overlay"),video=slide.querySelector("video"),playSVG=slide.querySelector("[data-play-svg]"),pauseSVG=slide.querySelector("[data-pause-svg]");if(video&&!video.paused&&(video.pause(),playSVG&&pauseSVG&&(playSVG.classList.remove("hidden"),pauseSVG.classList.add("hidden"))),overlay){const shouldHideOverlay=isActive&&video;overlay.classList.toggle("opacity-0",shouldHideOverlay),overlay.classList.toggle("opacity-100",!shouldHideOverlay)}})}}),customElements.define("closer-look-new",class extends HTMLElement{constructor(){super(),this.toggleInput=this.querySelector("#closer-look-toggle"),this.mobileImages=this.querySelectorAll(".mobile-image"),this.desktopImages=this.querySelectorAll(".desktop-image"),this.handleToggleChange=this.handleToggleChange.bind(this),this.tooltips=this.querySelectorAll(".pin"),this.containerPins=this.querySelectorAll(".tool--tip-container")}connectedCallback(){const isDesktop=window.matchMedia("(min-width: 1024px)").matches;this.toggleInput&&this.toggleInput.addEventListener("change",this.handleToggleChange),this.render(0),this.setRotation(),isDesktop&&this.setHover()}handleToggleChange(e){const idx=e.target.checked?1:0;this.render(idx)}setRotation(){this.tooltips.forEach(pin=>{const tooltip=pin.nextElementSibling;tooltip&&pin.addEventListener("click",e=>{if(e.stopPropagation(),!window.matchMedia("(min-width: 768px)").matches){const wasVisible=tooltip.classList.contains("visible");this.closeAllTooltips(),wasVisible||(tooltip.classList.add("visible"),pin.classList.add("rotated"));return}tooltip.classList.toggle("visible"),pin.classList.toggle("rotated",tooltip.classList.contains("visible"))})}),document.addEventListener("click",e=>{this.contains(e.target)||this.closeAllTooltips()})}setHover(){this.containerPins.forEach(container=>{const pin=container.querySelector(".pin"),tooltip=container.querySelector(".tooltip");if(!pin||!tooltip)return;const show=()=>{tooltip.offsetWidth,tooltip.classList.add("visible"),pin.classList.add("rotated")},hide=()=>{tooltip.classList.remove("visible"),pin.classList.remove("rotated")};pin.addEventListener("mouseenter",show),pin.addEventListener("mouseleave",hide),tooltip.addEventListener("mouseenter",show),tooltip.addEventListener("mouseleave",hide)})}render(activeIndex=0){const updateVisibility=elements=>{elements.forEach((el,i)=>{i===activeIndex?(el.hidden=!1,requestAnimationFrame(()=>el.classList.add("active"))):(el.classList.remove("active"),el.addEventListener("transitionend",()=>{el.classList.contains("active")||(el.hidden=!0)},{once:!0}))})};updateVisibility(this.mobileImages),updateVisibility(this.desktopImages)}closeAllTooltips(){this.querySelectorAll(".tooltip.visible").forEach(t=>t.classList.remove("visible")),this.tooltips.forEach(btn=>btn.classList.remove("rotated"))}});class ChirpHeader extends HTMLElement{constructor(){super(),this._onScroll=this._onScroll.bind(this),this.defaultLogo=null,this.altLogo=null,this.txtLogo=null,this.menuToggle=null,this.chatBtn=null,this.gladlyBtn=null,this.isLightHeader=this.classList.contains("header--light")}connectedCallback(){this.defaultLogo=this.querySelector(".site-logo--default"),this.altLogo=this.querySelector(".site-logo--alt"),this.txtLogo=this.querySelector(".site-logo--txt"),this.handleMenu(),this.isLightHeader&&(this.defaultLogo&&this.defaultLogo.classList.add("hidden"),this.altLogo&&this.altLogo.classList.remove("hidden"),this.txtLogo&&this.txtLogo.classList.add("hidden")),window.scrollY>0&&!this.classList.contains("header--scrolled")&&this.classList.add("header--scrolled"),window.addEventListener("scroll",this._onScroll,{passive:!0})}disconnectedCallback(){window.removeEventListener("scroll",this._onScroll)}handleMenu(){this.menuToggle=this.querySelector("#mobile-menu"),this.chatBtn=this.querySelector("#chat-trigger"),!(!this.menuToggle||!this.chatBtn)&&(this.menuToggle.addEventListener("click",e=>{document.querySelector(".minimizedChatButtonSelector.minimizedChatButton").classList.toggle("invisible")}),this.chatBtn.addEventListener("click",()=>{document.querySelector(".minimizedChatButtonSelector.minimizedChatButton").click()}))}_onScroll(){const scrolled=window.scrollY>0,currentScrollY=window.scrollY,hasMenuOpened=this.querySelector("#mobile-menu")?.getAttribute("aria-expanded");if(this.isLightHeader){this.classList.toggle("header--scrolled",scrolled),currentScrollY>this.lastScrollY&&currentScrollY>100&&hasMenuOpened==="false"?this.classList.add("header--hidden"):this.classList.remove("header--hidden"),this.lastScrollY=currentScrollY;return}if(this.classList.toggle("header--scrolled",scrolled),!(this.defaultLogo&&this.altLogo&&this.txtLogo)){this.lastScrollY=currentScrollY;return}this.defaultLogo.classList.add("hidden"),this.altLogo.classList.add("hidden"),this.txtLogo.classList.add("hidden"),scrolled?this.txtLogo.classList.remove("hidden"):this.defaultLogo.classList.remove("hidden"),currentScrollY>this.lastScrollY&&currentScrollY>100&&hasMenuOpened==="false"?this.classList.add("header--hidden"):this.classList.remove("header--hidden"),this.lastScrollY=currentScrollY}isDark(color,el){if(!color)return!1;const[r,g,b]=color.match(/\d+/g).map(Number);return(r*299+g*587+b*114)/1e3<200}
7getSolidBackgroundColor(el){for(;el&&el!==document.documentElement;){const bg=getComputedStyle(el).backgroundColor;if(bg!=="rgba(0, 0, 0, 0)"&&bg!=="transparent")return bg;el=el.parentElement}return"rgb(255,255,255)"}updateContrast(){const y=this.getBoundingClientRect().bottom+1,x=window.innerWidth/2,elBelow=document.elementFromPoint(x,y);if(!elBelow)return;const bgColor=this.getSolidBackgroundColor(elBelow);this.isDark(bgColor,elBelow)?this.classList.remove("inverted"):this.classList.add("inverted")}}customElements.define("chirp-header",ChirpHeader),(function(){let ticking=!1;function updateParallax(){document.querySelectorAll(".cjs-parallax-container").forEach(container=>{const images=container.querySelectorAll(".cjs-parallax-image");if(!images.length)return;const rect=container.getBoundingClientRect();let progress=(window.innerHeight-rect.top)/(window.innerHeight+rect.height);progress=Math.min(Math.max(progress,0),1),images.forEach(img=>{const overflow=img.offsetHeight-container.offsetHeight;let offset=(progress-.5)*overflow;img.style.setProperty("--parallax-offset",offset+"px")})}),ticking=!1}document.addEventListener("scroll",()=>{ticking||(window.requestAnimationFrame(updateParallax),ticking=!0)}),window.addEventListener("resize",updateParallax),window.addEventListener("load",updateParallax)})(),(function(){let checkoutTracked=!1,checkoutEventData=null,userInitiatedCheckout=!1;function trackCheckoutStart(){if(!checkoutTracked&&!(typeof MAI>"u")){if(checkoutEventData){MAI.emit("checkout",checkoutEventData.total,checkoutEventData.currency,checkoutEventData.details),checkoutTracked=!0;return}fetch("/cart.js").then(response=>response.json()).then(cart=>{const lineItems=cart.items.map(item=>({quantity:item.quantity,productId:String(item.product_id),productName:item.product_title,productType:item.product_type,productVendor:item.vendor,variantId:String(item.variant_id),variantName:item.variant_title}));MAI.emit("checkout",cart.total_price/100,cart.currency,{id:"cart_"+Date.now(),quantity:cart.item_count,lineItems}),checkoutTracked=!0}).catch(error=>console.error("MAI checkout tracking error:",error))}}function prefetchCartData(){checkoutEventData||fetch("/cart.js").then(response=>response.json()).then(cart=>{const lineItems=cart.items.map(item=>({quantity:item.quantity,productId:String(item.product_id),productName:item.product_title,productType:item.product_type,productVendor:item.vendor,variantId:String(item.variant_id),variantName:item.variant_title}));checkoutEventData={total:cart.total_price/100,currency:cart.currency,details:{id:"cart_"+Date.now(),quantity:cart.item_count,lineItems}}}).catch(error=>console.error("MAI cart prefetch error:",error))}window.trackCheckoutStart=trackCheckoutStart,new MutationObserver(function(mutations){mutations.forEach(function(mutation){mutation.addedNodes.forEach(function(node){node.nodeType===1&&node.querySelector&&(node.querySelector("drawer-component")||node.querySelector("redo-shopify-toggle"))&&prefetchCartData()})})}).observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("cart:updated",prefetchCartData),document.addEventListener("mousedown",function(event){event.target.closest("redo-shopify-toggle")&&(userInitiatedCheckout=!0,trackCheckoutStart())},!0),document.addEventListener("click",function(event){event.target.closest('[id="checkout"], [name="checkout"], .checkout-button')&&(userInitiatedCheckout=!0,trackCheckoutStart())},!0),window.addEventListener("pagehide",function(e){!checkoutTracked&&userInitiatedCheckout&&trackCheckoutStart()})})();
8//# sourceMappingURL=/cdn/shop/t/308/assets/main.js.map?v=41984548584514851111790638054

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.