1document.addEventListener('DOMContentLoaded',function(){const s2HomeSwiperEl=document.querySelector('.sc__s2-prd-list-wrapper .sc__s2-prd-list');if(s2HomeSwiperEl){const s2HomeSwiper=new Swiper(s2HomeSwiperEl,{loop:!1,spaceBetween:10,slidesPerView:1,centeredSlides:!1,autoHeight:!1,navigation:{nextEl:'.sc__s2-prd-next',prevEl:'.sc__s2-prd-prev',},breakpoints:{600:{slidesPerView:2,spaceBetween:20,},1024:{slidesPerView:3,spaceBetween:30,},1200:{slidesPerView:4.5,spaceBetween:30,},},})} 2if(window.innerWidth<1200){const s7HomeSwiperEl=document.querySelector('.sc__s7-list-outer .sc__s7-list');if(s7HomeSwiperEl){const s7HomeSwiper=new Swiper(s7HomeSwiperEl,{loop:!0,spaceBetween:30,slidesPerView:1,centeredSlides:!1,navigation:{nextEl:'.sc__s7-list-next',prevEl:'.sc__s7-list-prev',},breakpoints:{600:{slidesPerView:2,spaceBetween:30,},1024:{slidesPerView:3,spaceBetween:30,},},})} 3const s8HomeSwiperEl=document.querySelector('.list-outer .sc__s8-swipper');if(s8HomeSwiperEl){const s8HomeSwiper=new Swiper(s8HomeSwiperEl,{loop:!0,spaceBetween:60,slidesPerView:1,centeredSlides:!1,navigation:{nextEl:'.sc__s8-list-next',prevEl:'.sc__s8-list-prev',},breakpoints:{600:{slidesPerView:2,spaceBetween:60,},1024:{slidesPerView:3,spaceBetween:60,},},})}} 4const homes2Container=document.querySelector('.sc__home-prd .sc__s2-container-wrapper');if(homes2Container){animateOnScroll(homes2Container,{percentage:30,className:'is-on-viewport-anim',once:!0})} 5const briocheIcons2=document.querySelector('.sc__home-prd .sc_brioche-ic');if(briocheIcons2){parallaxOnScroll(briocheIcons2,{intensity:550,ease:0.08})} 6const homes3CUpWrapper=document.querySelector('.sc__s3 .sc__up-wrapper');if(homes3CUpWrapper){animateOnScroll(homes3CUpWrapper,{percentage:70,className:'is-on-viewport-anim',once:!0})} 7const homes4Inner=document.querySelector('.sc__s4 .sc__s4-home-inner');if(homes4Inner){animateOnScroll(homes4Inner,{percentage:50,className:'is-on-viewport-anim',once:!0})} 8const homes6Inner=document.querySelector('.sc__s6 .sc__s6-wrapper');if(homes6Inner){animateOnScroll(homes6Inner,{percentage:55,className:'is-on-viewport-anim',once:!0})} 9const briocheIcons6=document.querySelector('.sc__s6-home .sc_brioche-ic');if(briocheIcons6){parallaxOnScroll(briocheIcons6,{intensity:550,ease:0.08})} 10const homes7Inner=document.querySelector('.sc__s7 .sc__s7-wrapper');if(homes7Inner){animateOnScroll(homes7Inner,{percentage:70,className:'is-on-viewport-anim',once:!0})} 11const homes8titleOuter=document.querySelector('.sc__s8 .title-wrapper');if(homes8titleOuter){animateOnScroll(homes8titleOuter,{percentage:90,className:'is-on-viewport-anim',once:!0})}});function animateOnScroll(element,{percentage=20,className='is-visible',once=!0}={}){if(!element)return;const observer=new IntersectionObserver((entries)=>{entries.forEach((entry)=>{if(entry.isIntersecting){entry.target.classList.add(className);if(once)observer.unobserve(entry.target)}else if(!once){entry.target.classList.remove(className)}})},{threshold:percentage/100});observer.observe(element)} 12function parallaxOnScroll(element,{intensity=60,ease=0.2}={}){if(!element)return;let targetY=0;let currentY=0;let rafId=null;let isVisible=!1;function updateTarget(){const rect=element.getBoundingClientRect();const viewportHeight=window.innerHeight;const progress=(viewportHeight-rect.top)/(viewportHeight+rect.height);targetY=(progress-0.5)*intensity} 13function animate(){currentY+=(targetY-currentY)*ease;element.style.transform=`translate3d(0, ${currentY.toFixed(2)}px, 0)`;if(isVisible){rafId=requestAnimationFrame(animate)}} 14function onScroll(){updateTarget()} 15const observer=new IntersectionObserver((entries)=>{entries.forEach((entry)=>{if(entry.isIntersecting){if(!isVisible){isVisible=!0;element.style.willChange='transform';updateTarget();window.addEventListener('scroll',onScroll,{passive:!0});animate()}}else{isVisible=!1;window.removeEventListener('scroll',onScroll);if(rafId)cancelAnimationFrame(rafId);element.style.willChange='auto'}})},{threshold:0});observer.observe(element)} 16function svgProgressiveColorOnScroll(container,{start=0.85,end=0.15,lerpAmount=0.
1615}={}){const wrapper=document.querySelector(container);if(!wrapper)return;const colorSvg=wrapper.querySelector('.dotted-arrow__color');const paths=Array.from(colorSvg.querySelectorAll('path'));const circles=Array.from(colorSvg.querySelectorAll('circle'));const pathData=paths.map(path=>{const length=path.getTotalLength();path.style.strokeDasharray=length;path.style.strokeDashoffset=length;return{path,length}});const totalLength=pathData.reduce((sum,p)=>sum+p.length,0);const circleThresholds=circles.map((circle,i)=>(i+1)/(circles.length+1));let current=0;let target=0;let active=!1;const observer=new IntersectionObserver(([entry])=>{active=entry.isIntersecting});observer.observe(wrapper);function computeProgress(){const rect=wrapper.getBoundingClientRect();const vh=window.innerHeight;const startY=vh*start;const endY=vh*end;const raw=(startY-rect.top)/(startY-endY);return Math.min(1,Math.max(0,raw))} 17function applyReveal(progress){const revealLength=progress*totalLength;let cumulative=0;pathData.forEach(({path,length})=>{const localReveal=Math.min(Math.max(revealLength-cumulative,0),length);path.style.strokeDashoffset=length-localReveal;cumulative+=length});circles.forEach((circle,i)=>{circle.style.opacity=progress>=circleThresholds[i]?'1':'0'})} 18function tick(){if(active)target=computeProgress();current+=(target-current)*lerpAmount;applyReveal(current);requestAnimationFrame(tick)} 19requestAnimationFrame(tick)} 20svgProgressiveColorOnScroll('.sc__s7 .dotted-arrow')
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.