1class ScrollAnimation{constructor(){this.elements=[],this.observer=null,this.init()}init(){if(this.elements=document.querySelectorAll(".scroll-animation"),this.elements.length===0)return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){this.elements.forEach(element=>{element.classList.add("animate-in")});return}this.setupIntersectionObserver()}setupIntersectionObserver(){const options={root:null,rootMargin:"0px 0px -100px 0px",threshold:.3};this.observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{entry.isIntersecting&&(entry.target.classList.add("animate-in"),this.observer.unobserve(entry.target))})},options),this.elements.forEach(element=>{this.observer.observe(element)})}animateElement(element){element&&element.classList.contains("scroll-animation")&&element.classList.add("animate-in")}resetElement(element){if(element&&element.classList.contains("scroll-animation")){const originalTransition=element.style.transition;element.style.transition="none",element.classList.remove("animate-in"),element.offsetHeight,requestAnimationFrame(()=>{element.style.transition=originalTransition})}}resetAllElements(){this.elements.forEach(element=>{this.resetElement(element)})}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null),this.elements=[]}}document.addEventListener("DOMContentLoaded",()=>{window.scrollAnimation=new ScrollAnimation}),document.addEventListener("shopify:section:load",()=>{window.scrollAnimation&&window.scrollAnimation.destroy(),window.scrollAnimation=new ScrollAnimation}); 2//# sourceMappingURL=/cdn/shop/t/30/assets/scroll-animation.js.map?v=33304486908549870461790542116
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.