shopic 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var st=new Map,T=(t,e)=>{if(st.has(t))throw new Error(`[shopic] Animation "${t}" is registered twice.`);st.set(t,e)},it=(t,e=document)=>{let o=e.querySelectorAll("[data-anim]");for(let r of o){let n=r.dataset.anim;if(!n||r.dataset.animState==="ready")continue;let a=st.get(n);if(!a){console.warn(`[shopic] No animation registered for data-anim="${n}".`,r);continue}r.dataset.animState="ready",a(r,t)}};var Wt=2,Ut=150,Yt=4,zt=1,jt=5e3,Kt=.75,Zt="power3.out",Jt=[0,.25,.5,.6,.7,.8,.9,1],at="shopic:slide-enter";T("carousel",(t,{gsap:e,reducedMotion:o})=>{let r=Array.from(t.querySelectorAll(":scope > [data-slide]"));if(r.length<2)return;let n=t.closest("section")??t.parentElement??document.body,a=Array.from(n.querySelectorAll("[data-tab]")),l=o?0:Kt,s=r.length,i=new Map(r.map((c,E)=>[c,E])),u=new Map;r.forEach((c,E)=>{let A=c.dataset.slide;A&&!u.has(A)&&u.set(A,E)});let d=[],y=()=>{let c=t.getBoundingClientRect().left,E=t.scrollLeft,A=parseFloat(getComputedStyle(t).paddingLeft)||0,I=t.scrollWidth-t.clientWidth;d=r.map(G=>Math.min(G.getBoundingClientRect().left-c+E-A,I))},m=c=>{for(let E of a){let A=E.dataset.tab===c;E.classList.toggle("is-active",A),A?E.setAttribute("aria-current","true"):E.removeAttribute("aria-current")}},h=-1,b=null,L=!1,p=!1,v,M,S=null,R=0,O=0,C=0,_=0,w=!1,N=()=>S!==null,q=()=>b!==null,P=()=>{clearTimeout(v),v=void 0},Y=()=>!o&&!document.hidden&&p&&!N()&&!L&&!n.contains(document.activeElement),F=()=>{P(),Y()&&(v=setTimeout(()=>{v=void 0,Y()&&k((h+1)%s)},jt))},z=c=>{let E=r[c],A=E.dataset.slide;if(A&&m(A),c!==h){h=c;for(let I of r)I.classList.toggle("is-current",I===E);E.dispatchEvent(new CustomEvent(at))}},D=c=>{b=null,z(c),F()},j=()=>{clearTimeout(M),e.killTweensOf(t),b=null};function k(c){if(j(),b=c,l===0){t.scrollLeft=d[c],D(c);return}e.to(t,{scrollLeft:d[c],duration:l,ease:Zt,overwrite:"auto",onComplete:()=>D(c),onInterrupt:()=>{b=null}})}let K=()=>{let c=t.scrollLeft,E=0;return d.forEach((A,I)=>{Math.abs(A-c)<Math.abs(d[E]-c)&&(E=I)}),E},$=()=>{let c=K();Math.abs(d[c]-t.scrollLeft)<zt?D(c):k(c)},ot=()=>{let c=R>0?d[R]-d[R-1]:1/0,E=R<s-1?d[R+1]-d[R]:1/0,A=Math.min(Math.abs(c),Math.abs(E));if(Math.abs(_)<A*.25){$();return}k((R+Math.sign(_)+s)%s)};for(let c of a)c.addEventListener("click",E=>{E.preventDefault();let A=c.dataset.tab??"",I=u.get(A);I!==void 0&&(P(),m(A),k(I))});let Z=new Array(s).fill(0),rt=new IntersectionObserver(c=>{for(let I of c){let G=i.get(I.target);G!==void 0&&(Z[G]=I.isIntersecting?I.intersectionRatio:0)}let E=-1,A=0;Z.forEach((I,G)=>{I<=A||(A=I,E=G)}),E!==-1&&(b!==null&&E!==b||z(E))},{root:t,threshold:Jt});for(let c of r)rt.observe(c);y(),t.style.scrollSnapType="none",t.style.touchAction="pan-y",t.addEventListener("dragstart",c=>c.preventDefault());let[f]=d;t.scrollLeft=f;let g=new ResizeObserver(y);g.observe(t);for(let c of r)g.observe(c);"onscrollend"in window?t.addEventListener("scrollend",()=>{!q()&&!N()&&$()}):t.addEventListener("scroll",()=>{q()||N()||(clearTimeout(M),M=setTimeout($,Ut))}),t.addEventListener("pointerdown",c=>{P(),j(),S=c.pointerId,w=!1,O=c.clientX,C=t.scrollLeft,_=0,R=K()}),t.addEventListener("pointermove",c=>{if(c.pointerId!==S)return;let E=c.clientX-O;if(!w){if(Math.abs(E)<Yt)return;w=!0,t.classList.add("is-dragging"),t.setPointerCapture(c.pointerId)}_=-E*Wt,t.scrollLeft=C+_,c.pointerType==="mouse"&&c.preventDefault()});let x=c=>{c.pointerId===S&&(S=null,t.hasPointerCapture(c.pointerId)&&t.releasePointerCapture(c.pointerId),w?(t.classList.remove("is-dragging"),ot()):$())};window.addEventListener("pointerup",x),window.addEventListener("pointercancel",x),t.addEventListener("click",c=>{w&&(w=!1,c.preventDefault(),c.stopPropagation())},!0),n.addEventListener("pointerenter",c=>{c.pointerType==="mouse"&&(L=!0,P())}),n.addEventListener("pointerleave",c=>{c.pointerType==="mouse"&&(L=!1,F())}),n.addEventListener("focusin",P),n.addEventListener("focusout",()=>queueMicrotask(F)),document.addEventListener("visibilitychange",()=>{document.hidden?P():F()}),new IntersectionObserver(c=>{p=c.some(E=>E.isIntersecting),p?F():P()},{threshold:.2}).observe(t)});var Et="!<>-_\\/[]{}=+*^?#$%01",J=new WeakMap,V=(t,{duration:e=1050,stagger:o=.75,text:r,reducedMotion:n=!1,relaunchOnHover:a=!1}={})=>{if(n){r!==void 0&&(t.textContent=r);return}if(r!==void 0)t.dataset.scrambleText=r;else if(!t.dataset.scrambleText){let L=t.textContent;if(!L||!L.trim())return;t.dataset.scrambleText=L}let l=t.dataset.scrambleText;if(!l||!l.trim())return;let s=Array.from(l),i=s.length,u=Array.from(t.children),d;u.length===i&&u.every(L=>L.tagName==="SPAN")?d=u:(d=s.map(L=>{let p=document.createElement("span");return p.textContent=L,p}),t.textContent="",t.append(...d));let y=Symbol("scramble");J.set(t,y);let m=s.map((L,p)=>i<=1?0:p/(i-1)*e*o),h=performance.now(),b=L=>{if(J.get(t)!==y)return;let p=L-h,v=!0;s.forEach((M,S)=>{if(M===" "){d[S].textContent=" ";return}p>=m[S]?d[S].textContent=M:(v=!1,d[S].textContent=Et[Math.random()*Et.length|0])}),v?J.delete(t):requestAnimationFrame(b)};requestAnimationFrame(b),a&&Qt(t,{duration:e,stagger:o})},Qt=(t,e)=>{t.dataset.scrambleHoverBound||(t.dataset.scrambleHoverBound="true",t.addEventListener("pointerenter",()=>{J.has(t)||V(t,e)}))};var te=.5,ee="power2.out",ne=".status-pill, .evidence_label, .evidence_sku",oe={duration:630,stagger:.6,relaunchOnHover:!0};T("evidence",(t,{gsap:e,reducedMotion:o})=>{let r=Array.from(t.children);if(!r.length)return;if(o){for(let i of r)i.style.height="auto",i.style.opacity="1";return}let n=()=>{e.killTweensOf(r),e.set(r,{height:0,opacity:0,overflow:"hidden"});let i=e.timeline();for(let u of r)i.call(()=>{for(let d of u.querySelectorAll(ne))V(d,oe)}),i.to(u,{height:"auto",opacity:1,duration:te,ease:ee,onComplete:()=>e.set(u,{height:"auto"})})},a=!1,l=!1,s=()=>{if(!a||l)return;let i=t.closest("[data-slide]");i&&!i.classList.contains("is-current")||(l=!0,n())};if("IntersectionObserver"in window){let i=new IntersectionObserver(u=>{for(let d of u)d.isIntersecting&&(a=!0,s(),l&&i.disconnect())},{threshold:.2});i.observe(t)}else a=!0,s();t.closest("[data-slide]")?.addEventListener(at,()=>{l=!1,s()})});var lt="is-open",re=".faq_answer",se=".faq_answer-text",ct=".faq_row",dt=".faq_toggle",ie=t=>{let e=Array.from(t.querySelectorAll(`${ct}, ${dt}, ${re}, ${se}`)),o=e.map(r=>r.style.transition);for(let r of e)r.style.transition="none";return()=>{e.forEach((r,n)=>{r.style.transition=o[n]})}};T("faq",t=>{let e=t.querySelectorAll(ct);if(e.length===0){console.warn(`[shopic] faq found no ${ct} to open.`,t);return}let o=[];for(let d of e){let y=d.querySelector(dt);if(!y){console.warn(`[shopic] faq row has no ${dt} to click.`,d);continue}o.push({row:d,toggle:y})}if(o.length===0)return;let r=d=>{for(let{row:y,toggle:m}of o){let h=y===d;y.classList.toggle(lt,h),m.setAttribute("aria-expanded",String(h))}};for(let{row:d,toggle:y}of o)y.addEventListener("click",()=>{r(d.classList.contains(lt)?null:d)}),y.addEventListener("keydown",m=>{m.key!=="Enter"&&m.key!==" "||(m.preventDefault(),y.click())}),y.hasAttribute("tabindex")||(y.tabIndex=0);let n=o.find(({toggle:d})=>d.getAttribute("aria-expanded")==="true");r((n??o[0]).row);let a=()=>{let d=o.find(({row:h})=>h.classList.contains(lt))?.row??o[0].row,y=ie(t);t.style.height="";let m=0;for(let{row:h}of o)r(h),m=Math.max(m,t.getBoundingClientRect().height);r(d),t.offsetHeight,Number.isFinite(m)&&m>0&&(t.style.height=`${Math.ceil(m)}px`),y()},l=0,s=t.getBoundingClientRect().width,i=()=>{cancelAnimationFrame(l),l=requestAnimationFrame(()=>{l=0,a()})};a(),new ResizeObserver(([d])=>{let y=d?.contentRect.width??t.getBoundingClientRect().width;Math.abs(y-s)<.5||(s=y,i())}).observe(t),document.fonts.ready.then(i)});var vt=8;T("focus-drift",(t,{reducedMotion:e})=>{let o=t.querySelector(":scope > .camera_focus");!o||e||(t.addEventListener("pointermove",r=>{if(r.pointerType!=="mouse")return;let n=t.getBoundingClientRect(),a=(r.clientX-n.left)/n.width-.5,l=(r.clientY-n.top)/n.height-.5,s=(a*vt*2).toFixed(1),i=(l*vt*2).toFixed(1);o.style.transform=`translate(${s}px, ${i}px)`}),t.addEventListener("pointerleave",()=>{o.style.transform=""}))});var Tt=42,bt=96,ae=2600,le="is-scanned",ce="is-fresh";T("foundation-rail",(t,{gsap:e,reducedMotion:o})=>{let r=t.closest(".camera_photo"),n=Array.from(t.querySelectorAll(":scope > .foundation_slot"),p=>({element:p,parts:Array.from(p.querySelectorAll(".foundation_photo, .foundation_card")),tile:p.querySelector(".foundation_scan"),setX:e.quickSetter(p,"x","px"),home:0,turn:0,state:null}));if(!r||n.length===0){console.warn("[shopic] foundation-rail expects a .camera_photo tile around a track of .foundation_slot items.",t);return}let a=e.quickSetter(t,"x","px"),l=0,s=0,i=p=>p,u=()=>{let[p]=n,v=p.element.offsetWidth,M=v+(parseFloat(getComputedStyle(t).columnGap)||0);l=M*n.length,s=l/Tt*(ae/1e3),i=e.utils.wrap(-l/2,l/2),l<r.offsetWidth+v&&console.warn(`[shopic] foundation-rail: ${n.length} slots span ${l}px but the tile needs ${r.offsetWidth+v}px to loop without a gap.`,t);let S=r.getBoundingClientRect(),R=S.width/r.offsetWidth||1,O=(p.element.getBoundingClientRect().left-S.left)/R+v/2-r.offsetWidth/2-(Number(e.getProperty(t,"x"))||0)-(Number(e.getProperty(p.element,"x"))||0);n.forEach((C,_)=>{C.home=O+_*M,C.setX(C.turn*l)})},d=p=>p>bt?"unseen":p>bt-s?"fresh":"seen",y=(p,v)=>{if(p.state!==v){p.state=v;for(let M of p.parts)M.classList.toggle(le,v!=="unseen");p.tile?.classList.toggle(ce,v==="fresh")}},m=p=>{if(l){a(-p);for(let v of n){let M=i(v.home-p),S=Math.round((M-(v.home-p))/l);S!==v.turn&&(v.turn=S,v.setX(S*l)),y(v,d(M))}}},h={t:0},b=()=>h.t*l,L=o?null:e.to(h,{t:1,duration:Tt,ease:"none",repeat:-1,paused:!0,onUpdate:()=>m(b())});new ResizeObserver(()=>{u(),m(b())}).observe(t),L&&new IntersectionObserver(p=>{L.paused(!p.some(v=>v.isIntersecting))}).observe(t)});var Lt="split_line",de="split_word",wt="split_word-inner",ue=t=>{let e=document.createDocumentFragment(),o=[],r=[],n=document.createElement("span");n.className=Lt,e.appendChild(n);let a=(s,i)=>{if(!s)return;let u=document.createElement("span");u.className=de;let d=document.createElement("span");d.className=i?`${wt} ${i}`:wt,d.textContent=s,u.appendChild(d),n.appendChild(u),o.push(u),r.push(d)},l=(s,i)=>{for(let u of s.split(/(\s+)/))u&&(/^\s+$/.test(u)?n.appendChild(document.createTextNode(" ")):a(u,i))};for(let s of Array.from(t.childNodes))s.nodeType===Node.TEXT_NODE?l(s.textContent??""):s instanceof HTMLBRElement?(n=document.createElement("span"),n.className=Lt,e.appendChild(n)):s instanceof HTMLElement&&l(s.textContent??"",s.className||void 0);return t.textContent="",t.appendChild(e),{masks:o,words:r}},St={yPercent:0,duration:.9,ease:"power4.out",stagger:.035};T("headline",(t,{gsap:e,ScrollTrigger:o,reducedMotion:r})=>{if(r){t.style.visibility="visible";return}let{masks:n,words:a}=ue(t),l=()=>{for(let s of n)s.style.overflow="visible"};if(e.set(a,{yPercent:110}),t.style.visibility="visible",t.dataset.animTrigger==="load"||!o){e.to(a,{...St,delay:.3,onComplete:l});return}e.to(a,{...St,onComplete:l,scrollTrigger:{trigger:t,start:"top 85%"}})});var fe=26;T("marquee",(t,{gsap:e,reducedMotion:o})=>{if(o)return;let r=Number(t.dataset.animSets??4),n=Number(t.dataset.animDuration??fe);if(!Number.isFinite(r)||r<2)return;let a=()=>t.scrollWidth/r,l=e.to(t,{x:()=>-a(),duration:n,ease:"none",repeat:-1,modifiers:{x:i=>`${Number.parseFloat(i)%a()}px`}}),s=t.parentElement;s&&(s.addEventListener("pointerenter",()=>l.pause()),s.addEventListener("pointerleave",()=>l.resume()))});var me=28,pe="(min-width: 992px)";T("parallax",(t,{gsap:e,ScrollTrigger:o,reducedMotion:r})=>{if(r||!o)return;let n=Array.from(t.querySelectorAll("[data-parallax]"));if(!n.length){console.warn("[shopic] parallax section has no [data-parallax] layers",t);return}e.matchMedia().add(pe,()=>{let a=e.timeline({scrollTrigger:{trigger:t,start:"top bottom",end:"bottom top",scrub:!0}});for(let l of n){let s=Number(l.dataset.parallax||1);if(!Number.isFinite(s)||s===0)continue;let i=s*me;a.fromTo(l,{y:-i},{y:i,ease:"none"},0)}})});var ge=1.15,At=.18,Mt=10,Q=8,X=.55,xt="is-visible",Ht="opacity, width, height",ye=["name","price","packaging","sku"];T("photo-hover",(t,{reducedMotion:e})=>{let o=t.querySelector(":scope > img"),r=t.querySelector(":scope > .detect_layer"),n=t.querySelector(":scope > .camera_focus");if(!o&&!n)return;let a=n?.querySelector(".is-ring")??null,l=n?.querySelector(".is-corners")??null;n&&(!a||!l)&&console.warn("[shopic] photo-hover expects is-ring and is-corners layers inside the reticle.",n);let s=t.querySelector(":scope > .camera_readout"),i=Number(t.dataset.animZoom)||ge,u=Array.from(t.querySelectorAll(".detect_box")),d=t.querySelector('[data-match="card"]'),y=d?.querySelector('[data-match="thumb"]')??d?.querySelector("img.evidence_thumb-small")??null,m=0,h=0,b=0,L=0,p=0,v=0,M=0,S=null,R=f=>f.width/t.offsetWidth||1,O=(f,g)=>{let x=t.getBoundingClientRect(),H=R(x);return{x:(f-x.left)/H,y:(g-x.top)/H,width:t.offsetWidth,height:t.offsetHeight}},C=f=>{let g=t.getBoundingClientRect(),x=f.getBoundingClientRect(),H=R(g);return{x:(x.left-g.left)/H-Q,y:(x.top-g.top)/H-Q,w:x.width/H+Q*2,h:x.height/H+Q*2}},_=()=>{let{x:f,y:g,width:x,height:H}=O(v,M),c=(f/x-.5)*x*(i-1),E=(g/H-.5)*H*(i-1),A=`translate(${c.toFixed(2)}px, ${E.toFixed(2)}px) scale(${i})`;o&&(o.style.transform=A),r&&(r.style.transform=A)},w=()=>{if(!s)return;let f=t.getBoundingClientRect();if(!f.width||!f.height)return;let g=(v-f.left)/f.width-.5,x=(M-f.top)/f.height-.5,H=(g*Mt*2).toFixed(1),c=(x*Mt*2).toFixed(1);s.style.setProperty("translate",`${H}px ${c}px`)},N=()=>{let{x:f,y:g}=O(v,M);return{x:f-(n?.offsetWidth??0)/2,y:g-(n?.offsetHeight??0)/2}},q=(f,g)=>{n&&(n.style.left=`${f.toFixed(2)}px`,n.style.top=`${g.toFixed(2)}px`)},P=()=>{let f=N();q(f.x,f.y),L=f.x,p=f.y,h=0,b=0,l&&(l.style.transform="")},Y=()=>{let f=N();q(f.x,f.y),e||(h-=f.x-L,b-=f.y-p),L=f.x,p=f.y},F=f=>{if(!n)return;let g=C(f);q(g.x,g.y),n.style.width=`${g.w.toFixed(2)}px`,n.style.height=`${g.h.toFixed(2)}px`},z=()=>{if(l){if(h-=h*At,b-=b*At,Math.abs(h)>.1||Math.abs(b)>.1){l.style.transform=`translate(${h.toFixed(2)}px, ${b.toFixed(2)}px)`;return}h=0,b=0,l.style.transform=""}},D=()=>{S?F(S):Y(),z(),m=requestAnimationFrame(D)},j=f=>{if(d){for(let g of ye){let x=f.dataset[g],H=d.querySelector(`[data-match="${g}"]`);H&&x!==void 0&&(H.textContent=x)}if(y){let g=f.dataset.thumb;g&&(y.removeAttribute("srcset"),y.removeAttribute("sizes"),y.src=g),y.style.display=g?"":"none"}d.classList.add(xt)}},k=f=>{if(S=f,j(f),!!n&&(n.style.transitionProperty="",F(f),l&&(l.style.opacity="0"),a)){let g=(1-X)/2*100;a.style.width=`${X*100}%`,a.style.height=`${X*100}%`,a.style.left=`${g}%`,a.style.top=`${g}%`,a.style.right="auto",a.style.bottom="auto"}},K=f=>{if(!a)return;let g=C(f),{x,y:H}=O(v,M),c=(x-g.x)/g.w-.5,E=(H-g.y)/g.h-.5,A=c*g.w*(1-X),I=E*g.h*(1-X);a.style.setProperty("translate",`${A.toFixed(2)}px ${I.toFixed(2)}px`)},$=()=>{S=null,d?.classList.remove(xt),n&&(n.style.width="",n.style.height="",n.style.transitionProperty=Ht,l&&(l.style.opacity=""),a&&(a.style.width="",a.style.height="",a.style.left="",a.style.top="",a.style.right="",a.style.bottom="",a.style.removeProperty("translate")))},ot=f=>{f.pointerType==="mouse"&&(v=f.clientX,M=f.clientY,_(),w(),n&&(n.style.transitionProperty=Ht,P(),cancelAnimationFrame(m),m=requestAnimationFrame(D)))},Z=f=>{f.pointerType==="mouse"&&(v=f.clientX,M=f.clientY,_(),w())},rt=()=>{cancelAnimationFrame(m),m=0,o&&(o.style.transform=""),r&&(r.style.transform=""),s?.style.setProperty("translate","0px 0px"),$(),n&&(n.style.left="",n.style.top="",n.style.transitionProperty="",l&&(l.style.transform=""),h=0,b=0)};t.addEventListener("pointerenter",ot),t.addEventListener("pointermove",Z),t.addEventListener("pointerleave",rt);for(let f of u)f.addEventListener("pointerenter",g=>{g.pointerType==="mouse"&&k(f)}),f.addEventListener("pointermove",()=>{S===f&&K(f)}),f.addEventListener("pointerleave",()=>{S===f&&($(),P())})});var he="display_none",ut=0,Ee=".platform-layers_card",ve=(t,{gsap:e,ScrollTrigger:o,reducedMotion:r})=>{if(r||!o)return;for(let m of t.querySelectorAll(Ee))e.set(m,{autoAlpha:0,y:"1.5rem"}),o.create({trigger:m,start:"top 85%",once:!0,onEnter:()=>{e.to(m,{autoAlpha:1,y:0,duration:.9,ease:"power4.out"})}});let n=t.querySelector(".platform-layers_layout"),a=t.querySelector(".is-layer-top"),l=t.querySelector(".is-layer-middle"),s=t.querySelector(".is-layer-bottom");if(!n||!a||!l||!s)return;let i=()=>(l.offsetTop-a.offsetTop)/2,u=()=>(s.offsetTop-a.offsetTop)/2,d=!1;e.matchMedia().add("(min-width: 992px)",()=>{let m=document.querySelector('[data-anim="scroll-topbar"]'),h=()=>Math.max(m?.offsetHeight??0,(innerHeight-n.offsetHeight)/2);if(n.offsetHeight+(m?.offsetHeight??0)>innerHeight)return;if(d){e.set([l,s],{y:0});return}let b=e.timeline({paused:!0});b.fromTo(l,{y:i},{y:0,duration:1,ease:"none"},0),b.fromTo(s,{y:u},{y:0,duration:1,ease:"none"},0),o.create({trigger:n,start:()=>`top ${h()}px`,end:()=>`+=${innerHeight}`,pin:n,invalidateOnRefresh:!0,onRefresh:()=>{b.invalidate(),d&&b.progress(1)},onUpdate:L=>{L.progress>=1&&(d=!0),b.progress(d?1:L.progress)}})});for(let m of[a,l,s])m instanceof HTMLImageElement&&!m.complete&&m.addEventListener("load",()=>o.refresh(),{once:!0})};T("platform-hotspots",(t,e)=>{ve(t,e);let o=0,r=Array.from(t.querySelectorAll("[data-platform-hotspot-wrap]")).flatMap(s=>{let i=s.querySelector("[data-platform-hotspot]"),u=s.querySelector("[data-platform-tooltip]");return!i||!u?(o+=1,[]):[{wrap:s,trigger:i,tooltip:u}]});if(o>0&&console.warn(`[shopic] platform-hotspots skipped ${o} malformed ${o===1?"group":"groups"} (a trigger and tooltip are required).`,t),r.length===0)return;r.forEach(({trigger:s,tooltip:i})=>{if(!i.id){do ut+=1;while(t.ownerDocument.getElementById(`platform-tooltip-${ut}`));i.id=`platform-tooltip-${ut}`}let u=new Set((s.getAttribute("aria-describedby")??"").split(/\s+/).filter(Boolean));u.add(i.id),s.setAttribute("aria-describedby",[...u].join(" "))});let n=(s,i)=>{s.tooltip.classList.toggle(he,!i),s.tooltip.style.visibility=i?"visible":"hidden",s.tooltip.style.pointerEvents=i?"auto":"none",s.trigger.setAttribute("aria-expanded",String(i))},a=()=>r.forEach(s=>n(s,!1)),l=s=>{r.forEach(i=>n(i,i===s))};a(),r.forEach(s=>{let i=null;s.wrap.addEventListener("pointerenter",u=>{u.pointerType==="mouse"&&l(s)}),s.wrap.addEventListener("pointerleave",u=>{u.pointerType==="mouse"&&!s.wrap.contains(t.ownerDocument.activeElement)&&n(s,!1)}),s.wrap.addEventListener("focusout",u=>{(!(u.relatedTarget instanceof Node)||!s.wrap.contains(u.relatedTarget))&&n(s,!1)}),s.trigger.addEventListener("pointerdown",u=>{i=u.pointerType}),s.trigger.addEventListener("focus",()=>{i!=="touch"&&i!=="pen"&&l(s)}),s.trigger.addEventListener("click",u=>{i==="touch"||i==="pen"?s.trigger.getAttribute("aria-expanded")==="true"?n(s,!1):l(s):i===null&&u.detail===0&&l(s),i=null})}),t.ownerDocument.addEventListener("pointerdown",s=>{(!(s.target instanceof Node)||r.every(i=>!i.wrap.contains(s.target)))&&a()}),t.ownerDocument.addEventListener("keydown",s=>{s.key==="Escape"&&a()})});var It="is-visible";T("reveal",(t,{reducedMotion:e})=>{let o=Number(t.dataset.animDelay??0);if(o&&(t.style.transitionDelay=`${o}ms`),e||!("IntersectionObserver"in window)){t.classList.add(It);return}let r=new IntersectionObserver(n=>{for(let a of n)a.isIntersecting&&(a.target.classList.add(It),r.unobserve(a.target))},{threshold:.15});r.observe(t)});var ft=.5,tt="power2.out",Te=.7,mt=.08,be=".scene_box",Le=".scene_chip",we=".scene_node",Se=".camera_hotspot",Ae=".scene_card",Me=".scene_links path",xe=t=>({boxes:Array.from(t.querySelectorAll(be)),chips:Array.from(t.querySelectorAll(Le)),nodes:Array.from(t.querySelectorAll(we)),reticles:Array.from(t.querySelectorAll(Se)),cards:Array.from(t.querySelectorAll(Ae)),curves:Array.from(t.querySelectorAll(Me))}),He=t=>[...t.boxes,...t.chips,...t.nodes,...t.reticles,...t.cards,...t.curves],Ie=t=>{let e=typeof t.getTotalLength=="function"?t.getTotalLength():0;return e?(t.style.strokeDasharray=`${e}`,t.style.strokeDashoffset=`${e}`,e):0};T("scene",(t,{gsap:e,ScrollTrigger:o,reducedMotion:r})=>{let n=xe(t),a=He(n);if(!a.length||r||!o)return;let l=n.curves.map(Ie);e.set(a,{opacity:0});let s=()=>{let i=e.timeline(),u=(d,y,m,h)=>{d.length&&i.fromTo(d,y,m,h)};u(n.boxes,{opacity:0,scale:.94},{opacity:1,scale:1,duration:ft,ease:tt,stagger:mt}),u([...n.chips,...n.reticles],{opacity:0,y:4},{opacity:1,y:0,duration:ft,ease:tt,stagger:mt},"-=0.25");for(let[d,y]of n.curves.entries()){if(!l[d]){i.set(y,{opacity:1},"<");continue}i.set(y,{opacity:1},d===0?"-=0.15":"<"),i.to(y,{strokeDashoffset:0,duration:Te,ease:tt},"<")}u(n.nodes,{opacity:0,scale:0},{opacity:1,scale:1,duration:.4,ease:"back.out(1.7)",stagger:mt},"-=0.4"),u(n.cards,{opacity:0,y:8},{opacity:1,y:0,duration:ft,ease:tt},"-=0.2")};o.create({trigger:t,start:"top 80%",once:!0,onEnter:s})});T("scramble",(t,{reducedMotion:e})=>{let o={duration:Number(t.dataset.animDuration??1050),stagger:Number(t.dataset.animStagger??.75),reducedMotion:e};if(e||!("IntersectionObserver"in window)){V(t,o);return}let r=new IntersectionObserver(n=>{for(let a of n)a.isIntersecting&&(V(t,{...o,relaunchOnHover:!0}),r.unobserve(a.target))},{threshold:.2});r.observe(t)});T("scroll-topbar",t=>{let e=document.querySelector("[data-topbar-trigger]");if(!e){console.warn("[shopic] Scroll topbar is missing its trigger.");return}let o=0,r=()=>{o=0;let a=e.getBoundingClientRect().top<=t.offsetHeight;t.dataset.topbarVisible=String(a),t.style.visibility=a?"visible":"hidden",t.inert=!a,t.setAttribute("aria-hidden",String(!a))},n=()=>{o||(o=window.requestAnimationFrame(r))};window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n),window.addEventListener("pageshow",n),new ResizeObserver(n).observe(document.body),r()});var et=({grouped:t=!1,prefix:e="",suffix:o="",value:r})=>{let n=Math.round(r),a=t?n.toLocaleString("en-US"):String(n);return`${e}${a}${o}`};var Re=.5,Rt="power4.out",_e=.18,Ce="power2.in",Oe=.35,Ne=1400,qe=.15,Pe=420,Fe=10,B=null,$e=t=>{let e=t.querySelector("[data-stat-value]");return e||console.warn("[shopic] stats row is missing [data-stat-value]",t),e},pt=t=>({grouped:(t.dataset.statGrouped??t.closest('[data-anim="stats"]')?.dataset.statGrouped)==="true",prefix:t.dataset.statPrefix??t.closest('[data-anim="stats"]')?.dataset.statPrefix??"",suffix:t.dataset.statSuffix??t.closest('[data-anim="stats"]')?.dataset.statSuffix??""}),Ct=(t,e)=>{t.textContent=et({...pt(t),value:e})},nt=(t,e)=>{t.classList.toggle("is-hovered",e);for(let o of t.querySelectorAll("[data-stat-label], [data-stat-hover]"))o.classList.toggle("is-hovered",e)},_t=(t,e,o,r)=>{if(o){Ct(t,e);return}let n=performance.now(),a=l=>{if(r!==Number(t.dataset.statsGeneration))return;let s=Math.min((l-n)/Ne,1),i=1-(1-s)**3;t.textContent=et({...pt(t),value:e*i}),s<1&&requestAnimationFrame(a)};requestAnimationFrame(a)},De=(t,{gsap:e,reducedMotion:o})=>{let r=t,n=$e(r);if(!n)return;let a=r.dataset.statCount??n.dataset.statCount,l=a===void 0?null:Number(a),s=r.dataset.statTicker??n.dataset.statTicker,i=s===void 0?null:Number(s),u=r.dataset.statTickerInterval??n.dataset.statTickerInterval,d=u===void 0?Number.NaN:Number(u),y=d>0?d:Pe,m=null,h=0,b=!1,L=()=>{i!==null&&(n.textContent=et({...pt(n),value:i}))},p=()=>{o||i===null||m!==null||(m=setInterval(()=>{i!==null&&(i+=1+Math.floor(Math.random()*3),L())},y))},v=()=>{m!==null&&(clearInterval(m),m=null)},M=()=>{h+=1,n.dataset.statsGeneration=String(h),l!==null?Ct(n,l):L(),e.set(n,{clearProps:"transform"})},S=w=>{h+=1,n.dataset.statsGeneration=String(h),e.killTweensOf(n),e.set(n,{yPercent:110}),e.to(n,{duration:Re,ease:Rt,yPercent:0}),w&&l!==null&&_t(n,l,o,h)};if(o){M();return}L(),e.set(n,{yPercent:110});let R=()=>{b||(b=!0,S(!0))};if("IntersectionObserver"in window){let w=new IntersectionObserver(N=>{N.some(q=>q.isIntersecting)&&(R(),w.disconnect())},{threshold:qe});w.observe(r)}else R();i!==null&&("IntersectionObserver"in window?new IntersectionObserver(N=>{N.some(q=>q.isIntersecting)?p():v()}).observe(r):p());let O=()=>{nt(r,!0),h+=1,n.dataset.statsGeneration=String(h),e.killTweensOf(n),e.timeline().to(n,{duration:_e,ease:Ce,yPercent:-110}).set(n,{yPercent:110}).to(n,{duration:Oe,ease:Rt,onStart:()=>{l!==null&&_t(n,l,o,h)},yPercent:0})};r.addEventListener("pointerenter",w=>{w.pointerType==="mouse"&&O()}),r.addEventListener("pointerleave",w=>{w.pointerType==="mouse"&&nt(r,!1)});let C=0,_=0;r.addEventListener("pointerdown",w=>{w.pointerType!=="mouse"&&(C=w.clientX,_=w.clientY)}),r.addEventListener("pointerup",w=>{if(w.pointerType!=="mouse"&&!(Math.hypot(w.clientX-C,w.clientY-_)>Fe)){if(B&&B!==r&&nt(B,!1),B===r){nt(r,!1),B=null;return}B=r,O()}})};T("stats",De);var gt=t=>String(t).padStart(2,"0");T("timer",t=>{let e=()=>{let o=new Date;t.textContent=`${gt(o.getHours())}:${gt(o.getMinutes())}:${gt(o.getSeconds())}`};e(),setInterval(e,1e3)});var Ot="is-active",ke="(max-width: 991px)";T("versus-tabs",t=>{let e=Array.from(t.querySelectorAll('[role="tab"]')),o=t.nextElementSibling,r=o?Array.from(o.querySelectorAll(":scope > *")):[];if(e.length===0||e.length!==r.length){console.warn(`[shopic] versus-tabs expects one tab per panel; found ${e.length} tabs and ${r.length} panels.`,t);return}let n=window.matchMedia(ke),a=s=>{e.forEach((i,u)=>{i.classList.toggle(Ot,u===s),i.setAttribute("aria-selected",String(u===s))}),r.forEach((i,u)=>{i.hidden=n.matches&&u!==s})},l=()=>Math.max(0,e.indexOf(t.querySelector(`.${Ot}`)));e.forEach((s,i)=>{s.addEventListener("click",()=>a(i)),s.addEventListener("keydown",u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),a(i))}),s.hasAttribute("tabindex")||(s.tabIndex=0)}),n.addEventListener("change",()=>a(l())),a(l())});var Pt='form[action*="/proc.php"]',Ft="input, select, textarea",Ge='button[type="submit"], input[type="submit"]',Ve=".g-recaptcha",Be="https://www.google.com/recaptcha/api.js?onload=recaptcha_callback&render=explicit",Xe='[data-form="done"], .w-form-done',We='[data-form="fail"], .w-form-fail',yt="form_field-error",U="is-invalid",$t="is-processing",W=new Map,Nt=t=>t.querySelector('input[name="f"]')?.value??"",Dt=t=>t.querySelector(Ge),Ue=(t,e)=>{let o=t;for(;o;){let r=o.querySelector(e);if(r)return r;o=o.parentElement}return null},Ye=t=>{t&&(t.classList.remove($t),(t instanceof HTMLButtonElement||t instanceof HTMLInputElement)&&(t.disabled=!1))},ht=(t,e)=>{let o=document.createElement("script");o.charset="utf-8",o.src=t,o.addEventListener("error",e),document.head.appendChild(o)},ze=t=>t.dataset.ac??t.name,je=t=>{let e=new URLSearchParams;for(let o of t.querySelectorAll(Ft)){let r=ze(o);if(!(!r||o.disabled)){if(o instanceof HTMLInputElement&&(o.type==="checkbox"||o.type==="radio")){o.checked&&e.append(r,o.value);continue}if(o instanceof HTMLSelectElement&&o.multiple){for(let n of o.selectedOptions)e.append(r,n.value);continue}e.append(r,o.value)}}return e.toString().replace(/%0A/g,"\\n")},Ke=t=>{for(let e of t.querySelectorAll(`.${yt}`))e.remove();for(let e of t.querySelectorAll(`.${U}`))e.classList.remove(U),e.removeAttribute("aria-invalid")},Ze=t=>{t.classList.add(U),t.setAttribute("aria-invalid","true");let e=document.createElement("div");e.className=yt,e.setAttribute("role","alert"),e.textContent=t.validationMessage,t.parentElement?.appendChild(e)},Je=t=>{let e=null;for(let o of t.querySelectorAll(Ft))!o.willValidate||o.name==="g-recaptcha-response"||o.checkValidity()||(Ze(o),e??(e=o));return e?(e.focus(),!1):!0},Qe=(t,e)=>{let o=window.visitorGlobalObjectAlias??"vgo",r=window[o];if(e&&typeof r=="function"){r("setEmail",e),r("update");return}t&&ht(t,()=>{})},kt=(t,e)=>{let o=Ue(t,e);o&&(o.style.display="block",o.setAttribute("tabindex","-1"),o.focus())},qt=(t,e,o,r)=>{let n=W.get(t);n&&(n.style.display="none",kt(n,Xe),Qe(o,r))},Gt=(t,e)=>{let o=W.get(t);o&&(console.warn("[shopic] ActiveCampaign rejected the submission.",e),kt(o,We),Ye(Dt(o)))},tn=()=>{let t=Array.from(document.querySelectorAll(`${Pt} ${Ve}`));t.length!==0&&(window.recaptcha_callback=()=>{t.forEach((e,o)=>{e.id||(e.id=`recaptcha_${o}`),window.grecaptcha?.render(e.id,{sitekey:e.dataset.sitekey,stoken:e.dataset.stoken})})},ht(Be,()=>{console.warn("[shopic] reCAPTCHA failed to load; the form cannot be submitted.")}))},en=(t,e)=>{if(Ke(t),!Je(t))return;let o=Dt(t);o&&(o.classList.add($t),(o instanceof HTMLButtonElement||o instanceof HTMLInputElement)&&(o.disabled=!0)),ht(`${t.action}?${je(t)}&jsonp=true`,()=>{Gt(e,"The request never reached proc.php.")})},Vt=()=>{let t=document.querySelectorAll(Pt);if(t.length!==0){window._show_thank_you=qt,window._show_error=Gt,window._show_unsubscribe=qt;for(let e of t){let o=Nt(e);if(!o){console.warn('[shopic] ActiveCampaign form has no hidden "f" field to answer on.',e);continue}W.set(o,e),e.setAttribute("novalidate","true"),e.addEventListener("input",r=>{let n=r.target;!(n instanceof HTMLElement)||!n.classList.contains(U)||(n.classList.remove(U),n.removeAttribute("aria-invalid"),n.parentElement?.querySelector(`.${yt}`)?.remove())})}document.addEventListener("submit",e=>{let o=e.target;if(!(o instanceof HTMLFormElement))return;let r=Nt(o);!W.has(r)||W.get(r)!==o||(e.preventDefault(),e.stopPropagation(),en(o,r))},!0),tn()}};var Bt=()=>{let{gsap:t,ScrollTrigger:e}=window;if(!t)throw new Error("[shopic] GSAP is not on the page. Enable it in Webflow \u2192 Site Settings \u2192 Custom Code \u2192 GSAP.");return e&&t.registerPlugin(e),{gsap:t,ScrollTrigger:e}},Xt=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches;window.Webflow||(window.Webflow=[]);window.Webflow.push(()=>{Vt();let{gsap:t,ScrollTrigger:e}=Bt();it({gsap:t,ScrollTrigger:e,reducedMotion:Xt()})});})();
|
|
1
|
+
"use strict";(()=>{var st=new Map,T=(t,e)=>{if(st.has(t))throw new Error(`[shopic] Animation "${t}" is registered twice.`);st.set(t,e)},it=(t,e=document)=>{let n=e.querySelectorAll("[data-anim]");for(let r of n){let o=r.dataset.anim;if(!o||r.dataset.animState==="ready")continue;let c=st.get(o);if(!c){console.warn(`[shopic] No animation registered for data-anim="${o}".`,r);continue}r.dataset.animState="ready",c(r,t)}};var Kt=2,jt=150,Zt=4,Jt=1,Qt=5e3,te=.75,ee="power3.out",ne=[0,.25,.5,.6,.7,.8,.9,1],at="shopic:slide-enter";T("carousel",(t,{gsap:e,reducedMotion:n})=>{let r=Array.from(t.querySelectorAll(":scope > [data-slide]"));if(r.length<2)return;let o=t.closest("section")??t.parentElement??document.body,c=Array.from(o.querySelectorAll("[data-tab]")),i=n?0:te,s=r.length,a=new Map(r.map((u,h)=>[u,h])),d=new Map;r.forEach((u,h)=>{let A=u.dataset.slide;A&&!d.has(A)&&d.set(A,h)});let l=[],m=()=>{let u=t.getBoundingClientRect().left,h=t.scrollLeft,A=parseFloat(getComputedStyle(t).paddingLeft)||0,I=t.scrollWidth-t.clientWidth;l=r.map(G=>Math.min(G.getBoundingClientRect().left-u+h-A,I))},p=u=>{for(let h of c){let A=h.dataset.tab===u;h.classList.toggle("is-active",A),A?h.setAttribute("aria-current","true"):h.removeAttribute("aria-current")}},E=-1,b=null,L=!1,g=!1,v,M,S=null,R=0,_=0,C=0,O=0,w=!1,q=()=>S!==null,N=()=>b!==null,P=()=>{clearTimeout(v),v=void 0},Y=()=>!n&&!document.hidden&&g&&!q()&&!L&&!o.contains(document.activeElement),D=()=>{P(),Y()&&(v=setTimeout(()=>{v=void 0,Y()&&$((E+1)%s)},Qt))},z=u=>{let h=r[u],A=h.dataset.slide;if(A&&p(A),u!==E){E=u;for(let I of r)I.classList.toggle("is-current",I===h);h.dispatchEvent(new CustomEvent(at))}},k=u=>{b=null,z(u),D()},K=()=>{clearTimeout(M),e.killTweensOf(t),b=null};function $(u){if(K(),b=u,i===0){t.scrollLeft=l[u],k(u);return}e.to(t,{scrollLeft:l[u],duration:i,ease:ee,overwrite:"auto",onComplete:()=>k(u),onInterrupt:()=>{b=null}})}let j=()=>{let u=t.scrollLeft,h=0;return l.forEach((A,I)=>{Math.abs(A-u)<Math.abs(l[h]-u)&&(h=I)}),h},F=()=>{let u=j();Math.abs(l[u]-t.scrollLeft)<Jt?k(u):$(u)},ot=()=>{let u=R>0?l[R]-l[R-1]:1/0,h=R<s-1?l[R+1]-l[R]:1/0,A=Math.min(Math.abs(u),Math.abs(h));if(Math.abs(O)<A*.25){F();return}$((R+Math.sign(O)+s)%s)};for(let u of c)u.addEventListener("click",h=>{h.preventDefault();let A=u.dataset.tab??"",I=d.get(A);I!==void 0&&(P(),p(A),$(I))});let Z=new Array(s).fill(0),rt=new IntersectionObserver(u=>{for(let I of u){let G=a.get(I.target);G!==void 0&&(Z[G]=I.isIntersecting?I.intersectionRatio:0)}let h=-1,A=0;Z.forEach((I,G)=>{I<=A||(A=I,h=G)}),h!==-1&&(b!==null&&h!==b||z(h))},{root:t,threshold:ne});for(let u of r)rt.observe(u);m(),t.style.scrollSnapType="none",t.style.touchAction="pan-y",t.addEventListener("dragstart",u=>u.preventDefault());let[f]=l;t.scrollLeft=f;let y=new ResizeObserver(m);y.observe(t);for(let u of r)y.observe(u);"onscrollend"in window?t.addEventListener("scrollend",()=>{!N()&&!q()&&F()}):t.addEventListener("scroll",()=>{N()||q()||(clearTimeout(M),M=setTimeout(F,jt))}),t.addEventListener("pointerdown",u=>{P(),K(),S=u.pointerId,w=!1,_=u.clientX,C=t.scrollLeft,O=0,R=j()}),t.addEventListener("pointermove",u=>{if(u.pointerId!==S)return;let h=u.clientX-_;if(!w){if(Math.abs(h)<Zt)return;w=!0,t.classList.add("is-dragging"),t.setPointerCapture(u.pointerId)}O=-h*Kt,t.scrollLeft=C+O,u.pointerType==="mouse"&&u.preventDefault()});let x=u=>{u.pointerId===S&&(S=null,t.hasPointerCapture(u.pointerId)&&t.releasePointerCapture(u.pointerId),w?(t.classList.remove("is-dragging"),ot()):F())};window.addEventListener("pointerup",x),window.addEventListener("pointercancel",x),t.addEventListener("click",u=>{w&&(w=!1,u.preventDefault(),u.stopPropagation())},!0),o.addEventListener("pointerenter",u=>{u.pointerType==="mouse"&&(L=!0,P())}),o.addEventListener("pointerleave",u=>{u.pointerType==="mouse"&&(L=!1,D())}),o.addEventListener("focusin",P),o.addEventListener("focusout",()=>queueMicrotask(D)),document.addEventListener("visibilitychange",()=>{document.hidden?P():D()}),new IntersectionObserver(u=>{g=u.some(h=>h.isIntersecting),g?D():P()},{threshold:.2}).observe(t)});var vt="!<>-_\\/[]{}=+*^?#$%01",J=new WeakMap,V=(t,{duration:e=1050,stagger:n=.75,text:r,reducedMotion:o=!1,relaunchOnHover:c=!1}={})=>{if(o){r!==void 0&&(t.textContent=r);return}if(r!==void 0)t.dataset.scrambleText=r;else if(!t.dataset.scrambleText){let L=t.textContent;if(!L||!L.trim())return;t.dataset.scrambleText=L}let i=t.dataset.scrambleText;if(!i||!i.trim())return;let s=Array.from(i),a=s.length,d=Array.from(t.children),l;d.length===a&&d.every(L=>L.tagName==="SPAN")?l=d:(l=s.map(L=>{let g=document.createElement("span");return g.textContent=L,g}),t.textContent="",t.append(...l));let m=Symbol("scramble");J.set(t,m);let p=s.map((L,g)=>a<=1?0:g/(a-1)*e*n),E=performance.now(),b=L=>{if(J.get(t)!==m)return;let g=L-E,v=!0;s.forEach((M,S)=>{if(M===" "){l[S].textContent=" ";return}g>=p[S]?l[S].textContent=M:(v=!1,l[S].textContent=vt[Math.random()*vt.length|0])}),v?J.delete(t):requestAnimationFrame(b)};requestAnimationFrame(b),c&&oe(t,{duration:e,stagger:n})},oe=(t,e)=>{t.dataset.scrambleHoverBound||(t.dataset.scrambleHoverBound="true",t.addEventListener("pointerenter",()=>{J.has(t)||V(t,e)}))};var re=.5,se="power2.out",ie=".status-pill, .evidence_label, .evidence_sku",ae={duration:630,stagger:.6,relaunchOnHover:!0};T("evidence",(t,{gsap:e,reducedMotion:n})=>{let r=Array.from(t.children);if(!r.length)return;if(n){for(let a of r)a.style.height="auto",a.style.opacity="1";return}let o=()=>{e.killTweensOf(r),e.set(r,{height:0,opacity:0,overflow:"hidden"});let a=e.timeline();for(let d of r)a.call(()=>{for(let l of d.querySelectorAll(ie))V(l,ae)}),a.to(d,{height:"auto",opacity:1,duration:re,ease:se,onComplete:()=>e.set(d,{height:"auto"})})},c=!1,i=!1,s=()=>{if(!c||i)return;let a=t.closest("[data-slide]");a&&!a.classList.contains("is-current")||(i=!0,o())};if("IntersectionObserver"in window){let a=new IntersectionObserver(d=>{for(let l of d)l.isIntersecting&&(c=!0,s(),i&&a.disconnect())},{threshold:.2});a.observe(t)}else c=!0,s();t.closest("[data-slide]")?.addEventListener(at,()=>{i=!1,s()})});var lt="is-open",le=".faq_answer",ce=".faq_answer-text",ct=".faq_row",dt=".faq_toggle",de=t=>{let e=Array.from(t.querySelectorAll(`${ct}, ${dt}, ${le}, ${ce}`)),n=e.map(r=>r.style.transition);for(let r of e)r.style.transition="none";return()=>{e.forEach((r,o)=>{r.style.transition=n[o]})}};T("faq",t=>{let e=t.querySelectorAll(ct);if(e.length===0){console.warn(`[shopic] faq found no ${ct} to open.`,t);return}let n=[];for(let l of e){let m=l.querySelector(dt);if(!m){console.warn(`[shopic] faq row has no ${dt} to click.`,l);continue}n.push({row:l,toggle:m})}if(n.length===0)return;let r=l=>{for(let{row:m,toggle:p}of n){let E=m===l;m.classList.toggle(lt,E),p.setAttribute("aria-expanded",String(E))}};for(let{row:l,toggle:m}of n)m.addEventListener("click",()=>{r(l.classList.contains(lt)?null:l)}),m.addEventListener("keydown",p=>{p.key!=="Enter"&&p.key!==" "||(p.preventDefault(),m.click())}),m.hasAttribute("tabindex")||(m.tabIndex=0);let o=n.find(({toggle:l})=>l.getAttribute("aria-expanded")==="true");r((o??n[0]).row);let c=()=>{let l=n.find(({row:E})=>E.classList.contains(lt))?.row??n[0].row,m=de(t);t.style.height="";let p=0;for(let{row:E}of n)r(E),p=Math.max(p,t.getBoundingClientRect().height);r(l),t.offsetHeight,Number.isFinite(p)&&p>0&&(t.style.height=`${Math.ceil(p)}px`),m()},i=0,s=t.getBoundingClientRect().width,a=()=>{cancelAnimationFrame(i),i=requestAnimationFrame(()=>{i=0,c()})};c(),new ResizeObserver(([l])=>{let m=l?.contentRect.width??t.getBoundingClientRect().width;Math.abs(m-s)<.5||(s=m,a())}).observe(t),document.fonts.ready.then(a)});var Tt=8;T("focus-drift",(t,{reducedMotion:e})=>{let n=t.querySelector(":scope > .camera_focus");!n||e||(t.addEventListener("pointermove",r=>{if(r.pointerType!=="mouse")return;let o=t.getBoundingClientRect(),c=(r.clientX-o.left)/o.width-.5,i=(r.clientY-o.top)/o.height-.5,s=(c*Tt*2).toFixed(1),a=(i*Tt*2).toFixed(1);n.style.transform=`translate(${s}px, ${a}px)`}),t.addEventListener("pointerleave",()=>{n.style.transform=""}))});var bt=42,Lt=96,ue=2600,fe="is-scanned",me="is-fresh";T("foundation-rail",(t,{gsap:e,reducedMotion:n})=>{let r=t.closest(".camera_photo"),o=Array.from(t.querySelectorAll(":scope > .foundation_slot"),g=>({element:g,parts:Array.from(g.querySelectorAll(".foundation_photo, .foundation_card")),tile:g.querySelector(".foundation_scan"),setX:e.quickSetter(g,"x","px"),home:0,turn:0,state:null}));if(!r||o.length===0){console.warn("[shopic] foundation-rail expects a .camera_photo tile around a track of .foundation_slot items.",t);return}let c=e.quickSetter(t,"x","px"),i=0,s=0,a=g=>g,d=()=>{let[g]=o,v=g.element.offsetWidth,M=v+(parseFloat(getComputedStyle(t).columnGap)||0);i=M*o.length,s=i/bt*(ue/1e3),a=e.utils.wrap(-i/2,i/2),i<r.offsetWidth+v&&console.warn(`[shopic] foundation-rail: ${o.length} slots span ${i}px but the tile needs ${r.offsetWidth+v}px to loop without a gap.`,t);let S=r.getBoundingClientRect(),R=S.width/r.offsetWidth||1,_=(g.element.getBoundingClientRect().left-S.left)/R+v/2-r.offsetWidth/2-(Number(e.getProperty(t,"x"))||0)-(Number(e.getProperty(g.element,"x"))||0);o.forEach((C,O)=>{C.home=_+O*M,C.setX(C.turn*i)})},l=g=>g>Lt?"unseen":g>Lt-s?"fresh":"seen",m=(g,v)=>{if(g.state!==v){g.state=v;for(let M of g.parts)M.classList.toggle(fe,v!=="unseen");g.tile?.classList.toggle(me,v==="fresh")}},p=g=>{if(i){c(-g);for(let v of o){let M=a(v.home-g),S=Math.round((M-(v.home-g))/i);S!==v.turn&&(v.turn=S,v.setX(S*i)),m(v,l(M))}}},E={t:0},b=()=>E.t*i,L=n?null:e.to(E,{t:1,duration:bt,ease:"none",repeat:-1,paused:!0,onUpdate:()=>p(b())});new ResizeObserver(()=>{d(),p(b())}).observe(t),L&&new IntersectionObserver(g=>{L.paused(!g.some(v=>v.isIntersecting))}).observe(t)});var wt="split_line",pe="split_word",St="split_word-inner",ge=t=>{let e=document.createDocumentFragment(),n=[],r=[],o=document.createElement("span");o.className=wt,e.appendChild(o);let c=(s,a)=>{if(!s)return;let d=document.createElement("span");d.className=pe;let l=document.createElement("span");l.className=a?`${St} ${a}`:St,l.textContent=s,d.appendChild(l),o.appendChild(d),n.push(d),r.push(l)},i=(s,a)=>{for(let d of s.split(/(\s+)/))d&&(/^\s+$/.test(d)?o.appendChild(document.createTextNode(" ")):c(d,a))};for(let s of Array.from(t.childNodes))s.nodeType===Node.TEXT_NODE?i(s.textContent??""):s instanceof HTMLBRElement?(o=document.createElement("span"),o.className=wt,e.appendChild(o)):s instanceof HTMLElement&&i(s.textContent??"",s.className||void 0);return t.textContent="",t.appendChild(e),{masks:n,words:r}},At={yPercent:0,duration:.9,ease:"power4.out",stagger:.035};T("headline",(t,{gsap:e,ScrollTrigger:n,reducedMotion:r})=>{if(r){t.style.visibility="visible";return}let{masks:o,words:c}=ge(t),i=()=>{for(let s of o)s.style.overflow="visible"};if(e.set(c,{yPercent:110}),t.style.visibility="visible",t.dataset.animTrigger==="load"||!n){e.to(c,{...At,delay:.3,onComplete:i});return}e.to(c,{...At,onComplete:i,scrollTrigger:{trigger:t,start:"top 85%"}})});var ye=26;T("marquee",(t,{gsap:e,reducedMotion:n})=>{if(n)return;let r=Number(t.dataset.animSets??4),o=Number(t.dataset.animDuration??ye);if(!Number.isFinite(r)||r<2)return;let c=()=>t.scrollWidth/r,i=e.to(t,{x:()=>-c(),duration:o,ease:"none",repeat:-1,modifiers:{x:a=>`${Number.parseFloat(a)%c()}px`}}),s=t.parentElement;s&&(s.addEventListener("pointerenter",()=>i.pause()),s.addEventListener("pointerleave",()=>i.resume()))});var Ee=28,he="(min-width: 992px)";T("parallax",(t,{gsap:e,ScrollTrigger:n,reducedMotion:r})=>{if(r||!n)return;let o=Array.from(t.querySelectorAll("[data-parallax]"));if(!o.length){console.warn("[shopic] parallax section has no [data-parallax] layers",t);return}e.matchMedia().add(he,()=>{let c=e.timeline({scrollTrigger:{trigger:t,start:"top bottom",end:"bottom top",scrub:!0}});for(let i of o){let s=Number(i.dataset.parallax||1);if(!Number.isFinite(s)||s===0)continue;let a=s*Ee;c.fromTo(i,{y:-a},{y:a,ease:"none"},0)}})});var ve=1.15,Mt=.18,xt=10,Q=8,X=.55,Ht="is-visible",It="opacity, width, height",Te=["name","price","packaging","sku"];T("photo-hover",(t,{reducedMotion:e})=>{let n=t.querySelector(":scope > img"),r=t.querySelector(":scope > .detect_layer"),o=t.querySelector(":scope > .camera_focus");if(!n&&!o)return;let c=o?.querySelector(".is-ring")??null,i=o?.querySelector(".is-corners")??null;o&&(!c||!i)&&console.warn("[shopic] photo-hover expects is-ring and is-corners layers inside the reticle.",o);let s=t.querySelector(":scope > .camera_readout"),a=Number(t.dataset.animZoom)||ve,d=Array.from(t.querySelectorAll(".detect_box")),l=t.querySelector('[data-match="card"]'),m=l?.querySelector('[data-match="thumb"]')??l?.querySelector("img.evidence_thumb-small")??null,p=0,E=0,b=0,L=0,g=0,v=0,M=0,S=null,R=f=>f.width/t.offsetWidth||1,_=(f,y)=>{let x=t.getBoundingClientRect(),H=R(x);return{x:(f-x.left)/H,y:(y-x.top)/H,width:t.offsetWidth,height:t.offsetHeight}},C=f=>{let y=t.getBoundingClientRect(),x=f.getBoundingClientRect(),H=R(y);return{x:(x.left-y.left)/H-Q,y:(x.top-y.top)/H-Q,w:x.width/H+Q*2,h:x.height/H+Q*2}},O=()=>{let{x:f,y,width:x,height:H}=_(v,M),u=(f/x-.5)*x*(a-1),h=(y/H-.5)*H*(a-1),A=`translate(${u.toFixed(2)}px, ${h.toFixed(2)}px) scale(${a})`;n&&(n.style.transform=A),r&&(r.style.transform=A)},w=()=>{if(!s)return;let f=t.getBoundingClientRect();if(!f.width||!f.height)return;let y=(v-f.left)/f.width-.5,x=(M-f.top)/f.height-.5,H=(y*xt*2).toFixed(1),u=(x*xt*2).toFixed(1);s.style.setProperty("translate",`${H}px ${u}px`)},q=()=>{let{x:f,y}=_(v,M);return{x:f-(o?.offsetWidth??0)/2,y:y-(o?.offsetHeight??0)/2}},N=(f,y)=>{o&&(o.style.left=`${f.toFixed(2)}px`,o.style.top=`${y.toFixed(2)}px`)},P=()=>{let f=q();N(f.x,f.y),L=f.x,g=f.y,E=0,b=0,i&&(i.style.transform="")},Y=()=>{let f=q();N(f.x,f.y),e||(E-=f.x-L,b-=f.y-g),L=f.x,g=f.y},D=f=>{if(!o)return;let y=C(f);N(y.x,y.y),o.style.width=`${y.w.toFixed(2)}px`,o.style.height=`${y.h.toFixed(2)}px`},z=()=>{if(i){if(E-=E*Mt,b-=b*Mt,Math.abs(E)>.1||Math.abs(b)>.1){i.style.transform=`translate(${E.toFixed(2)}px, ${b.toFixed(2)}px)`;return}E=0,b=0,i.style.transform=""}},k=()=>{S?D(S):Y(),z(),p=requestAnimationFrame(k)},K=f=>{if(l){for(let y of Te){let x=f.dataset[y],H=l.querySelector(`[data-match="${y}"]`);H&&x!==void 0&&(H.textContent=x)}if(m){let y=f.dataset.thumb;y&&(m.removeAttribute("srcset"),m.removeAttribute("sizes"),m.src=y),m.style.display=y?"":"none"}l.classList.add(Ht)}},$=f=>{if(S=f,K(f),!!o&&(o.style.transitionProperty="",D(f),i&&(i.style.opacity="0"),c)){let y=(1-X)/2*100;c.style.width=`${X*100}%`,c.style.height=`${X*100}%`,c.style.left=`${y}%`,c.style.top=`${y}%`,c.style.right="auto",c.style.bottom="auto"}},j=f=>{if(!c)return;let y=C(f),{x,y:H}=_(v,M),u=(x-y.x)/y.w-.5,h=(H-y.y)/y.h-.5,A=u*y.w*(1-X),I=h*y.h*(1-X);c.style.setProperty("translate",`${A.toFixed(2)}px ${I.toFixed(2)}px`)},F=()=>{S=null,l?.classList.remove(Ht),o&&(o.style.width="",o.style.height="",o.style.transitionProperty=It,i&&(i.style.opacity=""),c&&(c.style.width="",c.style.height="",c.style.left="",c.style.top="",c.style.right="",c.style.bottom="",c.style.removeProperty("translate")))},ot=f=>{f.pointerType==="mouse"&&(v=f.clientX,M=f.clientY,O(),w(),o&&(o.style.transitionProperty=It,P(),cancelAnimationFrame(p),p=requestAnimationFrame(k)))},Z=f=>{f.pointerType==="mouse"&&(v=f.clientX,M=f.clientY,O(),w())},rt=()=>{cancelAnimationFrame(p),p=0,n&&(n.style.transform=""),r&&(r.style.transform=""),s?.style.setProperty("translate","0px 0px"),F(),o&&(o.style.left="",o.style.top="",o.style.transitionProperty="",i&&(i.style.transform=""),E=0,b=0)};t.addEventListener("pointerenter",ot),t.addEventListener("pointermove",Z),t.addEventListener("pointerleave",rt);for(let f of d)f.addEventListener("pointerenter",y=>{y.pointerType==="mouse"&&$(f)}),f.addEventListener("pointermove",()=>{S===f&&j(f)}),f.addEventListener("pointerleave",()=>{S===f&&(F(),P())})});var be="display_none",ut=0,Le=".platform-layers_card",we=(t,{gsap:e,ScrollTrigger:n,reducedMotion:r})=>{if(r||!n)return;for(let p of t.querySelectorAll(Le))e.set(p,{autoAlpha:0,y:"1.5rem"}),n.create({trigger:p,start:"top 85%",once:!0,onEnter:()=>{e.to(p,{autoAlpha:1,y:0,duration:.9,ease:"power4.out"})}});let o=t.querySelector(".platform-layers_layout"),c=t.querySelector(".is-layer-top"),i=t.querySelector(".is-layer-middle"),s=t.querySelector(".is-layer-bottom");if(!o||!c||!i||!s)return;let a=()=>(i.offsetTop-c.offsetTop)/2,d=()=>(s.offsetTop-c.offsetTop)/2,l=!1;e.matchMedia().add("(min-width: 992px)",()=>{let p=document.querySelector('[data-anim="scroll-topbar"]'),E=()=>Math.max(p?.offsetHeight??0,(innerHeight-o.offsetHeight)/2);if(o.offsetHeight+(p?.offsetHeight??0)>innerHeight)return;if(l){e.set([i,s],{y:0});return}let b=e.timeline({paused:!0});b.fromTo(i,{y:a},{y:0,duration:1,ease:"none"},0),b.fromTo(s,{y:d},{y:0,duration:1,ease:"none"},0),n.create({trigger:o,start:()=>`top ${E()}px`,end:()=>`+=${innerHeight}`,pin:o,invalidateOnRefresh:!0,onRefresh:()=>{b.invalidate(),l&&b.progress(1)},onUpdate:L=>{L.progress>=1&&(l=!0),b.progress(l?1:L.progress)}})});for(let p of[c,i,s])p instanceof HTMLImageElement&&!p.complete&&p.addEventListener("load",()=>n.refresh(),{once:!0})};T("platform-hotspots",(t,e)=>{we(t,e);let n=0,r=Array.from(t.querySelectorAll("[data-platform-hotspot-wrap]")).flatMap(s=>{let a=s.querySelector("[data-platform-hotspot]"),d=s.querySelector("[data-platform-tooltip]");return!a||!d?(n+=1,[]):[{wrap:s,trigger:a,tooltip:d}]});if(n>0&&console.warn(`[shopic] platform-hotspots skipped ${n} malformed ${n===1?"group":"groups"} (a trigger and tooltip are required).`,t),r.length===0)return;r.forEach(({trigger:s,tooltip:a})=>{if(!a.id){do ut+=1;while(t.ownerDocument.getElementById(`platform-tooltip-${ut}`));a.id=`platform-tooltip-${ut}`}let d=new Set((s.getAttribute("aria-describedby")??"").split(/\s+/).filter(Boolean));d.add(a.id),s.setAttribute("aria-describedby",[...d].join(" "))});let o=(s,a)=>{s.tooltip.classList.toggle(be,!a),s.tooltip.style.visibility=a?"visible":"hidden",s.tooltip.style.pointerEvents=a?"auto":"none",s.trigger.setAttribute("aria-expanded",String(a))},c=()=>r.forEach(s=>o(s,!1)),i=s=>{r.forEach(a=>o(a,a===s))};c(),r.forEach(s=>{let a=null;s.wrap.addEventListener("pointerenter",d=>{d.pointerType==="mouse"&&i(s)}),s.wrap.addEventListener("pointerleave",d=>{d.pointerType==="mouse"&&!s.wrap.contains(t.ownerDocument.activeElement)&&o(s,!1)}),s.wrap.addEventListener("focusout",d=>{(!(d.relatedTarget instanceof Node)||!s.wrap.contains(d.relatedTarget))&&o(s,!1)}),s.trigger.addEventListener("pointerdown",d=>{a=d.pointerType}),s.trigger.addEventListener("focus",()=>{a!=="touch"&&a!=="pen"&&i(s)}),s.trigger.addEventListener("click",d=>{a==="touch"||a==="pen"?s.trigger.getAttribute("aria-expanded")==="true"?o(s,!1):i(s):a===null&&d.detail===0&&i(s),a=null})}),t.ownerDocument.addEventListener("pointerdown",s=>{(!(s.target instanceof Node)||r.every(a=>!a.wrap.contains(s.target)))&&c()}),t.ownerDocument.addEventListener("keydown",s=>{s.key==="Escape"&&c()})});var Rt="is-visible";T("reveal",(t,{reducedMotion:e})=>{let n=Number(t.dataset.animDelay??0);if(n&&(t.style.transitionDelay=`${n}ms`),e||!("IntersectionObserver"in window)){t.classList.add(Rt);return}let r=new IntersectionObserver(o=>{for(let c of o)c.isIntersecting&&(c.target.classList.add(Rt),r.unobserve(c.target))},{threshold:.15});r.observe(t)});var ft=.5,tt="power2.out",Se=.7,mt=.08,Ae=".scene_box",Me=".scene_chip",xe=".scene_node",He=".camera_hotspot",Ie=".scene_card",Re=".scene_links path",Oe=t=>({boxes:Array.from(t.querySelectorAll(Ae)),chips:Array.from(t.querySelectorAll(Me)),nodes:Array.from(t.querySelectorAll(xe)),reticles:Array.from(t.querySelectorAll(He)),cards:Array.from(t.querySelectorAll(Ie)),curves:Array.from(t.querySelectorAll(Re))}),Ce=t=>[...t.boxes,...t.chips,...t.nodes,...t.reticles,...t.cards,...t.curves],_e=t=>{let e=typeof t.getTotalLength=="function"?t.getTotalLength():0;return e?(t.style.strokeDasharray=`${e}`,t.style.strokeDashoffset=`${e}`,e):0};T("scene",(t,{gsap:e,ScrollTrigger:n,reducedMotion:r})=>{let o=Oe(t),c=Ce(o);if(!c.length||r||!n)return;let i=o.curves.map(_e);e.set(c,{opacity:0});let s=()=>{let a=e.timeline(),d=(l,m,p,E)=>{l.length&&a.fromTo(l,m,p,E)};d(o.boxes,{opacity:0,scale:.94},{opacity:1,scale:1,duration:ft,ease:tt,stagger:mt}),d([...o.chips,...o.reticles],{opacity:0,y:4},{opacity:1,y:0,duration:ft,ease:tt,stagger:mt},"-=0.25");for(let[l,m]of o.curves.entries()){if(!i[l]){a.set(m,{opacity:1},"<");continue}a.set(m,{opacity:1},l===0?"-=0.15":"<"),a.to(m,{strokeDashoffset:0,duration:Se,ease:tt},"<")}d(o.nodes,{opacity:0,scale:0},{opacity:1,scale:1,duration:.4,ease:"back.out(1.7)",stagger:mt},"-=0.4"),d(o.cards,{opacity:0,y:8},{opacity:1,y:0,duration:ft,ease:tt},"-=0.2")};n.create({trigger:t,start:"top 80%",once:!0,onEnter:s})});T("scramble",(t,{reducedMotion:e})=>{let n={duration:Number(t.dataset.animDuration??1050),stagger:Number(t.dataset.animStagger??.75),reducedMotion:e};if(e||!("IntersectionObserver"in window)){V(t,n);return}let r=new IntersectionObserver(o=>{for(let c of o)c.isIntersecting&&(V(t,{...n,relaunchOnHover:!0}),r.unobserve(c.target))},{threshold:.2});r.observe(t)});T("scroll-topbar",t=>{let e=document.querySelector("[data-topbar-trigger]");if(!e){console.warn("[shopic] Scroll topbar is missing its trigger.");return}let n=[...document.querySelectorAll('[data-nav-toggle="topbar"]')];t.id||(t.id="site-topbar");for(let l of n)l.setAttribute("aria-controls",t.id),l.setAttribute("aria-expanded","false");let r=!1,o=null,c=0,i=()=>{c=0;let l=r||e.getBoundingClientRect().top<=t.offsetHeight;t.dataset.topbarVisible=String(l),t.style.visibility=l?"visible":"hidden",t.inert=!l,t.setAttribute("aria-hidden",String(!l));for(let m of n)m.setAttribute("aria-expanded",String(r))},s=()=>{c||(c=window.requestAnimationFrame(i))},a=(l,m=180)=>{if(r){if(getComputedStyle(l).visibility==="visible"){l.focus();return}m>0&&window.requestAnimationFrame(()=>a(l,m-1))}},d=l=>{r&&(r=!1,i(),l&&o?.focus(),o=null)};for(let l of n)l.addEventListener("click",m=>{if(m.preventDefault(),r){d(!0);return}r=!0,o=l,i();let p=t.querySelector(".w-dropdown-toggle")??t.querySelector("a[href], button");p&&a(p)});document.addEventListener("keydown",l=>{r&&l.key==="Escape"&&!t.querySelector(".w-dropdown-list.w--open")&&d(!0)}),t.addEventListener("focusout",l=>{let m=l.relatedTarget;m&&!t.contains(m)&&!n.some(p=>p.contains(m))&&d(!1)}),document.addEventListener("pointerdown",l=>{let m=l.target;!t.contains(m)&&!n.some(p=>p.contains(m))&&d(!1)}),window.addEventListener("scroll",s,{passive:!0}),window.addEventListener("resize",s),window.addEventListener("pageshow",s),new ResizeObserver(s).observe(document.body),i()});var et=({grouped:t=!1,prefix:e="",suffix:n="",value:r})=>{let o=Math.round(r),c=t?o.toLocaleString("en-US"):String(o);return`${e}${c}${n}`};var qe=.5,Ot="power4.out",Ne=.18,Pe="power2.in",De=.35,Fe=1400,ke=.15,$e=420,Ge=10,B=null,Ve=t=>{let e=t.querySelector("[data-stat-value]");return e||console.warn("[shopic] stats row is missing [data-stat-value]",t),e},pt=t=>({grouped:(t.dataset.statGrouped??t.closest('[data-anim="stats"]')?.dataset.statGrouped)==="true",prefix:t.dataset.statPrefix??t.closest('[data-anim="stats"]')?.dataset.statPrefix??"",suffix:t.dataset.statSuffix??t.closest('[data-anim="stats"]')?.dataset.statSuffix??""}),_t=(t,e)=>{t.textContent=et({...pt(t),value:e})},nt=(t,e)=>{t.classList.toggle("is-hovered",e);for(let n of t.querySelectorAll("[data-stat-label], [data-stat-hover]"))n.classList.toggle("is-hovered",e)},Ct=(t,e,n,r)=>{if(n){_t(t,e);return}let o=performance.now(),c=i=>{if(r!==Number(t.dataset.statsGeneration))return;let s=Math.min((i-o)/Fe,1),a=1-(1-s)**3;t.textContent=et({...pt(t),value:e*a}),s<1&&requestAnimationFrame(c)};requestAnimationFrame(c)},Be=(t,{gsap:e,reducedMotion:n})=>{let r=t,o=Ve(r);if(!o)return;let c=r.dataset.statCount??o.dataset.statCount,i=c===void 0?null:Number(c),s=r.dataset.statTicker??o.dataset.statTicker,a=s===void 0?null:Number(s),d=r.dataset.statTickerInterval??o.dataset.statTickerInterval,l=d===void 0?Number.NaN:Number(d),m=l>0?l:$e,p=null,E=0,b=!1,L=()=>{a!==null&&(o.textContent=et({...pt(o),value:a}))},g=()=>{n||a===null||p!==null||(p=setInterval(()=>{a!==null&&(a+=1+Math.floor(Math.random()*3),L())},m))},v=()=>{p!==null&&(clearInterval(p),p=null)},M=()=>{E+=1,o.dataset.statsGeneration=String(E),i!==null?_t(o,i):L(),e.set(o,{clearProps:"transform"})},S=w=>{E+=1,o.dataset.statsGeneration=String(E),e.killTweensOf(o),e.set(o,{yPercent:110}),e.to(o,{duration:qe,ease:Ot,yPercent:0}),w&&i!==null&&Ct(o,i,n,E)};if(n){M();return}L(),e.set(o,{yPercent:110});let R=()=>{b||(b=!0,S(!0))};if("IntersectionObserver"in window){let w=new IntersectionObserver(q=>{q.some(N=>N.isIntersecting)&&(R(),w.disconnect())},{threshold:ke});w.observe(r)}else R();a!==null&&("IntersectionObserver"in window?new IntersectionObserver(q=>{q.some(N=>N.isIntersecting)?g():v()}).observe(r):g());let _=()=>{nt(r,!0),E+=1,o.dataset.statsGeneration=String(E),e.killTweensOf(o),e.timeline().to(o,{duration:Ne,ease:Pe,yPercent:-110}).set(o,{yPercent:110}).to(o,{duration:De,ease:Ot,onStart:()=>{i!==null&&Ct(o,i,n,E)},yPercent:0})};r.addEventListener("pointerenter",w=>{w.pointerType==="mouse"&&_()}),r.addEventListener("pointerleave",w=>{w.pointerType==="mouse"&&nt(r,!1)});let C=0,O=0;r.addEventListener("pointerdown",w=>{w.pointerType!=="mouse"&&(C=w.clientX,O=w.clientY)}),r.addEventListener("pointerup",w=>{if(w.pointerType!=="mouse"&&!(Math.hypot(w.clientX-C,w.clientY-O)>Ge)){if(B&&B!==r&&nt(B,!1),B===r){nt(r,!1),B=null;return}B=r,_()}})};T("stats",Be);var gt=t=>String(t).padStart(2,"0");T("timer",t=>{let e=()=>{let n=new Date;t.textContent=`${gt(n.getHours())}:${gt(n.getMinutes())}:${gt(n.getSeconds())}`};e(),setInterval(e,1e3)});var qt="is-active",Xe="(max-width: 991px)";T("versus-tabs",t=>{let e=Array.from(t.querySelectorAll('[role="tab"]')),n=t.nextElementSibling,r=n?Array.from(n.querySelectorAll(":scope > *")):[];if(e.length===0||e.length!==r.length){console.warn(`[shopic] versus-tabs expects one tab per panel; found ${e.length} tabs and ${r.length} panels.`,t);return}let o=window.matchMedia(Xe),c=s=>{e.forEach((a,d)=>{a.classList.toggle(qt,d===s),a.setAttribute("aria-selected",String(d===s))}),r.forEach((a,d)=>{a.hidden=o.matches&&d!==s})},i=()=>Math.max(0,e.indexOf(t.querySelector(`.${qt}`)));e.forEach((s,a)=>{s.addEventListener("click",()=>c(a)),s.addEventListener("keydown",d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),c(a))}),s.hasAttribute("tabindex")||(s.tabIndex=0)}),o.addEventListener("change",()=>c(i())),c(i())});var Dt='form[action*="/proc.php"]',Ft="input, select, textarea",We='button[type="submit"], input[type="submit"]',Ue="[data-sitekey]",Ye="https://www.google.com/recaptcha/api.js?onload=recaptcha_callback&render=explicit",ze='[data-form="done"], .w-form-done',Ke='[data-form="fail"], .w-form-fail',yt="form_field-error",U="is-invalid",kt="is-processing",W=new Map,Nt=t=>t.querySelector('input[name="f"]')?.value??"",$t=t=>t.querySelector(We),je=(t,e)=>{let n=t;for(;n;){let r=n.querySelector(e);if(r)return r;n=n.parentElement}return null},Ze=t=>{t&&(t.classList.remove(kt),(t instanceof HTMLButtonElement||t instanceof HTMLInputElement)&&(t.disabled=!1))},Et=(t,e)=>{let n=document.createElement("script");n.charset="utf-8",n.src=t,n.addEventListener("error",e),document.head.appendChild(n)},Je=t=>t.dataset.ac??t.name,Qe=t=>{let e=new URLSearchParams;for(let n of t.querySelectorAll(Ft)){let r=Je(n);if(!(!r||n.disabled)){if(n instanceof HTMLInputElement&&(n.type==="checkbox"||n.type==="radio")){n.checked&&e.append(r,n.value);continue}if(n instanceof HTMLSelectElement&&n.multiple){for(let o of n.selectedOptions)e.append(r,o.value);continue}e.append(r,n.value)}}return e.toString().replace(/%0A/g,"\\n")},tn=t=>{for(let e of t.querySelectorAll(`.${yt}`))e.remove();for(let e of t.querySelectorAll(`.${U}`))e.classList.remove(U),e.removeAttribute("aria-invalid")},en=t=>{t.classList.add(U),t.setAttribute("aria-invalid","true");let e=document.createElement("div");e.className=yt,e.setAttribute("role","alert"),e.textContent=t.validationMessage,t.parentElement?.appendChild(e)},nn=t=>{let e=null;for(let n of t.querySelectorAll(Ft))!n.willValidate||n.name==="g-recaptcha-response"||n.checkValidity()||(en(n),e??(e=n));return e?(e.focus(),!1):!0},on=(t,e)=>{let n=window.visitorGlobalObjectAlias??"vgo",r=window[n];if(e&&typeof r=="function"){r("setEmail",e),r("update");return}t&&Et(t,()=>{})},Gt=(t,e)=>{let n=je(t,e);n&&(n.style.display="block",n.setAttribute("tabindex","-1"),n.focus())},Pt=(t,e,n,r)=>{let o=W.get(t);o&&(o.style.display="none",Gt(o,ze),on(n,r))},Vt=(t,e)=>{let n=W.get(t);n&&(console.warn("[shopic] ActiveCampaign rejected the submission.",e),Gt(n,Ke),Ze($t(n)))},rn=()=>{let t=Array.from(document.querySelectorAll(`${Dt} ${Ue}`));t.length!==0&&(window.recaptcha_callback=()=>{t.forEach((e,n)=>{e.id||(e.id=`recaptcha_${n}`),window.grecaptcha?.render(e.id,{sitekey:e.dataset.sitekey,stoken:e.dataset.stoken})})},Et(Ye,()=>{console.warn("[shopic] reCAPTCHA failed to load; the form cannot be submitted.")}))},sn=(t,e)=>{if(tn(t),!nn(t))return;let n=$t(t);n&&(n.classList.add(kt),(n instanceof HTMLButtonElement||n instanceof HTMLInputElement)&&(n.disabled=!0)),Et(`${t.action}?${Qe(t)}&jsonp=true`,()=>{Vt(e,"The request never reached proc.php.")})},Bt=()=>{let t=document.querySelectorAll(Dt);if(t.length!==0){window._show_thank_you=Pt,window._show_error=Vt,window._show_unsubscribe=Pt;for(let e of t){let n=Nt(e);if(!n){console.warn('[shopic] ActiveCampaign form has no hidden "f" field to answer on.',e);continue}W.set(n,e),e.setAttribute("novalidate","true"),e.addEventListener("input",r=>{let o=r.target;!(o instanceof HTMLElement)||!o.classList.contains(U)||(o.classList.remove(U),o.removeAttribute("aria-invalid"),o.parentElement?.querySelector(`.${yt}`)?.remove())})}document.addEventListener("submit",e=>{let n=e.target;if(!(n instanceof HTMLFormElement))return;let r=Nt(n);!W.has(r)||W.get(r)!==n||(e.preventDefault(),e.stopPropagation(),sn(n,r))},!0),rn()}};var Xt=()=>{let{gsap:t,ScrollTrigger:e}=window;if(!t)throw new Error("[shopic] GSAP is not on the page. Enable it in Webflow \u2192 Site Settings \u2192 Custom Code \u2192 GSAP.");return e&&t.registerPlugin(e),{gsap:t,ScrollTrigger:e}},Wt=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches;var Ut=()=>{for(let t of document.querySelectorAll("nav .w-dropdown"))t.addEventListener("focusout",e=>{let n=e.relatedTarget;n&&t.contains(n)||t.querySelector(".w-dropdown-list.w--open")&&t.dispatchEvent(new Event("w-close"))})};var an="[data-nav-menu]",ln='[data-nav-toggle="menu"]',cn="[data-nav-close]",ht="is-open",dn='a[href], button:not([disabled]), input:not([disabled]), select, textarea, [tabindex]:not([tabindex="-1"])',un="(min-width: 992px)",Yt=t=>[...t.querySelectorAll(dn)].filter(e=>e.getClientRects().length>0),zt=()=>{let t=document.querySelector(an),e=[...document.querySelectorAll(ln)];if(!t||!e.length)return;t.id||(t.id="nav-menu"),t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-label",t.getAttribute("aria-label")||"Menu");for(let i of e)i.setAttribute("aria-controls",t.id),i.setAttribute("aria-expanded","false");let n=null,r=()=>t.classList.contains(ht),o=(i=!0)=>{if(r()){t.classList.remove(ht),document.documentElement.style.removeProperty("overflow");for(let s of e)s.setAttribute("aria-expanded","false");i&&n?.focus(),n=null}},c=i=>{n=i,t.classList.add(ht),document.documentElement.style.overflow="hidden";for(let s of e)s.setAttribute("aria-expanded","true");Yt(t)[0]?.focus()};for(let i of e)i.addEventListener("click",s=>{s.preventDefault(),r()?o():c(i)});t.addEventListener("click",i=>{let s=i.target;s.closest(cn)?(i.preventDefault(),o()):s.closest("a[href]")&&o(!1)}),document.addEventListener("keydown",i=>{if(!r())return;if(i.key==="Escape"){i.preventDefault(),o();return}if(i.key!=="Tab")return;let s=Yt(t);if(!s.length)return;let a=s[0],d=s[s.length-1],l=document.activeElement;i.shiftKey&&(l===a||!t.contains(l))?(i.preventDefault(),d.focus()):!i.shiftKey&&(l===d||!t.contains(l))&&(i.preventDefault(),a.focus())}),window.matchMedia(un).addEventListener("change",i=>{i.matches&&o(!1)})};window.Webflow||(window.Webflow=[]);window.Webflow.push(()=>{zt(),Ut(),Bt();let{gsap:t,ScrollTrigger:e}=Xt();it({gsap:t,ScrollTrigger:e,reducedMotion:Wt()})});})();
|