{"version":3,"file":"InfiniteLoop.Bk8B7FJd.mjs","names":["React.useState","React.useCallback","React.useRef","reducedMotion","useIso","React.useLayoutEffect","React.useEffect","React.useId","React.useRef","React.useState","React.useCallback","React.useLayoutEffect","React.useEffect"],"sources":["https:/framerusercontent.com/modules/GSipi83JJxV2mguTVlmC/D7sNwNHxevXO5pqytbFc/Counter.js","https:/framerusercontent.com/modules/GVamDSYXwSNbK3aKFZNr/YO8HogGY1fiXo573y4v2/InfiniteLoop.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{RenderTarget}from\"framer\";const idle=()=>({state:{current:1,total:0,show:false,open:false},listeners:new Set,openItem:()=>{},go:()=>{},placeOf:()=>-1});// each pill's store, found by the layers inside it (no names: they look for the nearest pill above them)\nconst stores=new WeakMap;function storeAbove(el){for(let n=el;n;n=n.parentElement){const s=stores.get(n);if(s)return s;}return null;}const pad=n=>n<10?\"0\"+n:String(n);const canvasNow=()=>RenderTarget.current()===RenderTarget.canvas;function forward(ref,node){if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;}// the element itself, passed on to Framer's own ref as well (no wrapper element, so layouts stay untouched)\nfunction useElement(forwarded){const[el,setEl]=React.useState(null);const setRef=React.useCallback(node=>{// a transition: while the page is still hydrating, an ordinary update could make React redraw parts that are\n// not hydrated yet on the client (Framer's \"Caught a recoverable error\", React #421)\nReact.startTransition(()=>setEl(node));forward(forwarded,node);},[forwarded]);return[el,setRef];}// the numbers of the pill around this layer, kept up to date\nfunction useCounter(el){const[state,setState]=React.useState(null);const[store,setStore]=React.useState(null);React.useEffect(()=>{if(!el)return;const s=storeAbove(el.parentElement);if(!s)return;// the first read as a transition (see useElement); later changes are ordinary updates\nReact.startTransition(()=>{setStore(s);setState(s.state);});const on=()=>setState(s.state);s.listeners.add(on);return()=>{s.listeners.delete(on);};},[el]);return[state,store];}// the items the counter counts, in page order: the column's outermost clickable things (a card that links, an image\n// that opens full size; nothing nested inside another one, nothing of the counter itself), and of those only the most\n// common kind (a list's items share their tag, role and classes, a stray \"see all\" link does not); without clickable\n// things, its images. Only the side of the counter its list is on: a list ends with its counter, so the things before\n// it (a footer's links after it are the page's, not the list's); a counter above its list takes what follows.\n// Nothing here depends on sizes, names or a number of items.\nfunction items(column,self){const shown=e=>!self.contains(e)&&e.getClientRects().length>0;const side=list=>{const before=list.filter(e=>!!(self.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)&&!e.contains(self));return before.length?before:list;};const clicks=side(Array.from(column.querySelectorAll(\"a[href], button, [role=button]\")).filter(shown));const outer=clicks.filter(e=>!clicks.some(o=>o!==e&&o.contains(e)));if(outer.length){// Framer marks the element under the mouse with a state class (\"hover\", \"pressed\") and may switch its variant\n// class: those never count, or the hovered card would drop out of the list and the numbers would shift\nconst kind=e=>e.tagName+\"|\"+(e.getAttribute(\"role\")||\"\")+\"|\"+Array.from(e.classList).filter(c=>!/^(hover|pressed|focus|framer-v-.+)$/.test(c)).sort().join(\" \");const groups=new Map;for(const e of outer){const k=kind(e);const g=groups.get(k);if(g)g.push(e);else groups.set(k,[e]);}let best=[];groups.forEach(g=>{if(g.length>best.length)best=g;});return best;}return side(Array.from(column.querySelectorAll(\"img\")).filter(shown));}// the column: the nearest element around the counter that holds items\nfunction columnOf(el){let node=el.parentElement;for(let i=0;node&&i<8;i++,node=node.parentElement){if(items(node,el).length)return node;}return null;}// a label with {n} and {total} filled in\nconst fill=(t,n,total)=>t.replace(/\\{n\\}/g,String(n)).replace(/\\{total\\}/g,String(total)).trim();// the native text's own characters: its longest text node (a text layer renders one per line)\nfunction textNodeIn(root){const walker=document.createTreeWalker(root,NodeFilter.SHOW_TEXT);let best=null;for(let n=walker.nextNode();n;n=walker.nextNode()){const t=n;const tag=t.parentElement?t.parentElement.tagName:\"\";if(tag===\"STYLE\"||tag===\"SCRIPT\")continue;if(t.nodeValue&&t.nodeValue.trim()&&(!best||t.nodeValue.length>(best.nodeValue||\"\").length))best=t;}return best;}// what scrolls the items: the nearest scrolling frame around them (an endless list), else the page\nfunction scrollerOf(item){for(let n=item.parentElement;n&&n!==document.body&&n!==document.documentElement;n=n.parentElement){const oy=getComputedStyle(n).overflowY;if((oy===\"auto\"||oy===\"scroll\")&&n.scrollHeight>n.clientHeight+1)return n;}return null;}// an image's file (its address without the size Framer asks for), to pair a thumbnail with its item: both show the\n// same CMS image, at different sizes\nfunction imageKey(el){const img=el.tagName===\"IMG\"?el:el.querySelector(\"img\");const src=img?img.getAttribute(\"src\")||img.currentSrc||\"\":\"\";if(!src)return\"\";try{const u=new URL(src,window.location.href);return u.origin+u.pathname;}catch(e){return src.split(\"?\")[0];}}// A thumbnail is drawn 40 px wide, but the smallest file Framer lists for an image is 512 px (≈ 32 KB). Framer's image\n// host scales on request, so a 160 px file (≈ 5 KB, sharp up to 4× screens) is added to the image's own list and the\n// browser picks it. Only for Framer's image host; other images are left as they are.\nconst SMALL=160;function smallFiles(root){root.querySelectorAll(\"img\").forEach(img=>{const set=img.getAttribute(\"srcset\")||\"\";const first=(set.split(\",\")[0]||\"\").trim().split(/\\s+/)[0]||img.getAttribute(\"src\")||\"\";if(!first||set.indexOf(\" \"+SMALL+\"w\")>=0)return;let u;try{u=new URL(first,window.location.href);}catch(e){return;}if(!/(^|\\.)framerusercontent\\.com$/.test(u.hostname))return;u.searchParams.set(\"scale-down-to\",String(SMALL));img.setAttribute(\"srcset\",u.toString()+\" \"+SMALL+\"w\"+(set?\", \"+set:\", \"+first+\" 512w\"));// without a size hint the browser would assume the full screen width: give it the thumbnail's own width\nif(!img.getAttribute(\"sizes\"))img.setAttribute(\"sizes\",Math.max(1,Math.round(root.offsetWidth||40))+\"px\");});}const EASE=\"cubic-bezier(0.22, 1, 0.36, 1)\";const useIso=typeof window!==\"undefined\"?React.useLayoutEffect:React.useEffect;const reducedMotion=()=>typeof window!==\"undefined\"&&!!window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;// the transitions are always the same in the markup (the server cannot know the visitor's setting, and React does not\n// fix a style that differs after hydration); this rule turns them off for visitors who ask for less motion, at once\n// and also when they change the setting while the page is open\nconst STYLE_ID=\"tf-counter-motion\";function ensureStyle(){if(typeof document===\"undefined\"||document.getElementById(STYLE_ID))return;const s=document.createElement(\"style\");s.id=STYLE_ID;s.textContent=\"@media (prefers-reduced-motion: reduce){[data-tf-counter],[data-tf-counter] *{transition:none!important}}\";document.head.appendChild(s);}export function withCounter(Component){return /*#__PURE__*/React.forwardRef(function Counter(props,forwarded){const store=React.useRef(null);if(!store.current)store.current=idle();const[el,setEl]=React.useState(null);const setRef=React.useCallback(node=>{if(node&&store.current){stores.set(node,store.current);node.setAttribute(\"data-tf-counter\",\"\");}// a transition: while the page is still hydrating, an ordinary update could make React redraw parts that are\n// not hydrated yet on the client (Framer's \"Caught a recoverable error\", React #421)\nReact.startTransition(()=>setEl(node));forward(forwarded,node);},[forwarded]);const[show,setShow]=React.useState(false);const canvas=canvasNow();React.useEffect(()=>{const s=store.current;if(canvas||!el||!s)return;ensureStyle();el.setAttribute(\"role\",\"group\");let raf=0;let anim=0;let column=null;let real=[];let all=[];// the thumbnails open on a mouse over the pill or keyboard focus in it; never on touch screens\nconst canHover=!!window.matchMedia&&window.matchMedia(\"(hover: hover)\").matches;let hover=false;let keys=false;const publish=n=>{const o=s.state;if(o.current===n.current&&o.total===n.total&&o.show===n.show&&o.open===n.open)return;s.state=n;s.listeners.forEach(f=>f());setShow(n.show);};const openNow=show=>show&&canHover&&(hover||keys);// the items are collected again only when the page changed (CMS items, repeats, a full-size view, another\n// breakpoint); a scroll only moves them, so then only their positions are measured\nlet dirty=true;const collect=()=>{if(!column||!column.isConnected||!items(column,el).length)column=columnOf(el);if(!column){real=[];all=[];return;}const found=items(column,el);// an endless list repeats the items around the real ones: count the real ones; a repeat takes the\n// number of its original (its place inside its own repeat)\nconst reals=found.filter(e=>!e.closest(\"[data-tf-copy]\"));const list=reals.length?reals:found;real=list;all=found.map(e=>{const group=e.closest(\"[data-tf-copy]\");return{el:e,place:group?found.filter(x=>group.contains(x)).indexOf(e):list.indexOf(e)};});};const update=()=>{raf=0;if(dirty||!column||!column.isConnected||all.some(x=>!x.el.isConnected)){dirty=false;collect();}if(!column)return publish({...s.state,show:false,open:false});const list=real;const mid=window.innerHeight/2;let current=0;let best=Infinity;let onScreen=false;all.forEach(({el:e,place})=>{const r=e.getBoundingClientRect();if(r.bottom>0&&r.top<window.innerHeight)onScreen=true;const d=r.top<=mid&&r.bottom>=mid?0:Math.min(Math.abs(r.top-mid),Math.abs(r.bottom-mid));if(d<best){best=d;current=Math.max(0,place);}});const viewerOpen=!!document.querySelector(\"[aria-modal=true]\");const show=onScreen&&list.length>1&&!viewerOpen;publish({current:current+1,total:list.length,show,open:openNow(show)});};const schedule=()=>{if(!raf)raf=window.requestAnimationFrame(update);};const recount=()=>{dirty=true;schedule();};// the button opens the current item: Framer opens its links on the press (phones), so the press is sent too\ns.openItem=()=>{const item=real[s.state.current-1];const target=item&&(item.matches(\"a[href], button, [role=button]\")?item:item.closest(\"button, a[href], [role=button]\"));if(!target)return;const opts={bubbles:true,cancelable:true,pointerType:\"mouse\",isPrimary:true,button:0};try{target.dispatchEvent(new PointerEvent(\"pointerdown\",opts));target.dispatchEvent(new PointerEvent(\"pointerup\",opts));}catch(e){}target.click();};// a thumbnail stands for the item that shows the same image, when exactly one item shows it; without an\n// image, with no match or with two items showing the same image, the item in its own place in the row —\n// both lists read the same CMS items in the same order\ns.placeOf=thumb=>{const row=Array.from(el.querySelectorAll(\"[data-tf-thumb]\"));const index=row.indexOf(thumb);const key=imageKey(thumb);if(key){const matches=[];real.forEach((r,i)=>{if(imageKey(r)===key)matches.push(i);});if(matches.length===1)return matches[0];}return index<real.length?index:-1;};// bring an item to the top of its column, on whichever repeat is nearest (an endless list wraps around while\n// it moves, so every frame measures again); a wheel, touch or key stops it\ns.go=place=>{const first=real[place];if(!first)return;const sc=scrollerOf(first);const inset=sc?parseFloat(getComputedStyle(sc).paddingTop)||0:8;const still=reducedMotion();if(anim)window.cancelAnimationFrame(anim);let frames=0;let turns=0;let lastSign=0;const step=()=>{anim=0;const top0=sc?sc.getBoundingClientRect().top:0;const tops=all.filter(x=>x.place===place&&x.el.isConnected).map(x=>x.el.getBoundingClientRect().top-top0-inset);if(!tops.length)return;const d=tops.reduce((a,b)=>Math.abs(b)<Math.abs(a)?b:a);// a safety stop: a move that keeps turning back (the list changed under it) ends at once\nconst sign=Math.sign(d);if(lastSign&&sign&&sign!==lastSign)turns++;if(sign)lastSign=sign;if(Math.abs(d)<1||frames++>150||turns>2)return;const move=still?d:Math.sign(d)*Math.max(1,Math.abs(d)*.16);if(sc)sc.scrollTop+=move;else window.scrollBy(0,move);if(!still)anim=window.requestAnimationFrame(step);};step();};const stop=()=>{if(anim)window.cancelAnimationFrame(anim);anim=0;};const enter=e=>{if(e.pointerType!==\"mouse\")return;hover=true;publish({...s.state,open:openNow(s.state.show)});};const leave=e=>{if(e.pointerType!==\"mouse\")return;hover=false;publish({...s.state,open:openNow(s.state.show)});};const focus=()=>{// after the focus has moved: keyboard focus anywhere inside keeps it open\nwindow.requestAnimationFrame(()=>{keys=!!el.querySelector(\":focus-visible\");publish({...s.state,open:openNow(s.state.show)});});};el.addEventListener(\"pointerenter\",enter);el.addEventListener(\"pointerleave\",leave);el.addEventListener(\"focusin\",focus);el.addEventListener(\"focusout\",focus);schedule();// capture: also hears a column that scrolls by itself (an endless list), not only the page\ndocument.addEventListener(\"scroll\",schedule,{capture:true,passive:true});window.addEventListener(\"resize\",recount);window.addEventListener(\"wheel\",stop,{passive:true});window.addEventListener(\"touchstart\",stop,{passive:true});window.addEventListener(\"keydown\",stop);// CMS items, images and the full-size view come and go: recount on every change of the page\nconst mo=typeof MutationObserver!==\"undefined\"?new MutationObserver(recount):null;if(mo)mo.observe(document.body,{childList:true,subtree:true});const loads=e=>{if(e.target instanceof HTMLImageElement)recount();};document.addEventListener(\"load\",loads,true);return()=>{if(raf)window.cancelAnimationFrame(raf);stop();el.removeEventListener(\"pointerenter\",enter);el.removeEventListener(\"pointerleave\",leave);el.removeEventListener(\"focusin\",focus);el.removeEventListener(\"focusout\",focus);document.removeEventListener(\"scroll\",schedule,{capture:true});window.removeEventListener(\"resize\",recount);window.removeEventListener(\"wheel\",stop);window.removeEventListener(\"touchstart\",stop);window.removeEventListener(\"keydown\",stop);if(mo)mo.disconnect();document.removeEventListener(\"load\",loads,true);s.openItem=()=>{};s.go=()=>{};s.placeOf=()=>-1;};},[el,canvas]);// hidden from screen readers while it is hidden on screen\nReact.useEffect(()=>{if(!el||canvas)return;if(show)el.removeAttribute(\"aria-hidden\");else el.setAttribute(\"aria-hidden\",\"true\");},[el,show,canvas]);if(canvas)return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});const style={...props.style,opacity:show?1:0,scale:show?1:.94,// hidden: no clicks; shown: the pill's own setting stays (its frame has Pointer Events \"auto\" inside a\n// wrapper set to \"none\", so the cards under the wrapper stay clickable)\n...show?{}:{pointerEvents:\"none\"},transition:\"opacity .25s ease, transform .35s \"+EASE+\", scale .35s \"+EASE};return /*#__PURE__*/_jsx(Component,{...props,ref:setRef,style:style});});}export function withCounterOpen(Component){return /*#__PURE__*/React.forwardRef(function CounterOpen(props,forwarded){const[el,setRef]=useElement(forwarded);const[state,store]=useCounter(el);// the label as typed in Framer is kept, then filled in with the numbers; out of the Tab order while hidden\nReact.useEffect(()=>{if(!el||!state)return;if(!el.hasAttribute(\"data-tf-label\"))el.setAttribute(\"data-tf-label\",el.getAttribute(\"aria-label\")||\"\");const t=el.getAttribute(\"data-tf-label\")||\"\";if(t&&state.total)el.setAttribute(\"aria-label\",fill(t,state.current,state.total));if(state.show)el.removeAttribute(\"tabindex\");else el.setAttribute(\"tabindex\",\"-1\");});const onClick=e=>{if(props.onClick)props.onClick(e);if(store)store.openItem();};return /*#__PURE__*/_jsx(Component,{...props,ref:setRef,onClick:onClick});});}function numberOverride(Component,pick){return /*#__PURE__*/React.forwardRef(function CounterNumber(props,forwarded){const[el,setRef]=useElement(forwarded);const[state]=useCounter(el);const value=state&&state.total>0?pad(pick(state)):null;// after every render (Framer may draw the text again): only the characters of the native text change\nuseIso(()=>{if(!el||value===null)return;const node=textNodeIn(el);if(node&&node.nodeValue!==value)node.nodeValue=value;});return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});});}export function withCurrentNumber(Component){return numberOverride(Component,s=>s.current);}export function withTotalNumber(Component){return numberOverride(Component,s=>s.total);}export function withCounterHint(Component){return /*#__PURE__*/React.forwardRef(function CounterHint(props,forwarded){const[el,setRef]=useElement(forwarded);const[state]=useCounter(el);// touch screens: nothing opens on hover, so no hint\nconst[touch,setTouch]=React.useState(false);React.useEffect(()=>{if(!canvasNow()&&window.matchMedia&&window.matchMedia(\"(hover: none)\").matches)setTouch(true);},[]);const ready=!!state&&state.show&&!touch;const openNow=React.useRef(false);openNow.current=!!state&&state.open;// the one-time light: the squares one by one, clockwise from the top left, once per visit (any counter)\nReact.useEffect(()=>{if(!ready||!el||canvasNow()||typeof el.animate!==\"function\")return;if(window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches)return;let seen=false;try{seen=sessionStorage.getItem(\"tf-counter-hint\")===\"1\";}catch(e){}if(seen)return;const t=window.setTimeout(()=>{// already opened: the hint has done its job\nif(openNow.current)return;try{sessionStorage.setItem(\"tf-counter-hint\",\"1\");}catch(e){}// the squares group shows at full strength while each square goes from the group's resting strength up\n// and back; everything ends together and returns to the native values\nconst rest=Number(getComputedStyle(el).opacity)||1;const D=1100;el.animate([{opacity:1},{opacity:1}],{duration:D});const order=[0,1,3,2];Array.from(el.children).forEach((c,i)=>{const d=(order[i]||0)*90;c.animate([{opacity:rest,offset:0},{opacity:rest,offset:d/D,easing:\"ease\"},{opacity:1,offset:(d+315)/D,easing:\"ease\"},{opacity:rest,offset:(d+700)/D},{opacity:rest,offset:1}],{duration:D});});},900);return()=>window.clearTimeout(t);},[ready,el]);// while the thumbnails are open the hint steps aside (a light still running stops)\nconst open=!!state&&state.open;React.useEffect(()=>{if(!open||!el||typeof el.getAnimations!==\"function\")return;el.getAnimations({subtree:true}).forEach(a=>a.cancel());},[open,el]);if(touch)return null;const style=state?{...props.style,...open?{opacity:0,maxWidth:0,overflow:\"hidden\"}:{},transition:\"opacity .2s ease, max-width .35s \"+EASE}:props.style;return /*#__PURE__*/_jsx(Component,{...props,ref:setRef,style:style});});}export function withCounterStrip(Component){return /*#__PURE__*/React.forwardRef(function CounterStrip(props,forwarded){const[el,setRef]=useElement(forwarded);const[state]=useCounter(el);const canvas=canvasNow();const open=!!state&&state.open;// the thumbnails (and their images) arrive with the first opening: no image is loaded before anyone asks\nconst[armed,setArmed]=React.useState(false);React.useEffect(()=>{if(open)setArmed(true);},[open]);// the size it opens to: all of its content, at most the column's width less some room around the pill;\n// longer rows scroll sideways\nconst[size,setSize]=React.useState(null);React.useEffect(()=>{if(!el||!armed||canvas)return;const measure=()=>{const pill=el.closest(\"[data-tf-counter]\");const wrap=pill&&pill.parentElement;const room=Math.max(132,(wrap?wrap.clientWidth:window.innerWidth)-160);// measured on what is inside (a closed, centred row would show only half its height as overflow)\nconst kids=Array.from(el.children);const cs=getComputedStyle(el);const padH=(parseFloat(cs.paddingLeft)||0)+(parseFloat(cs.paddingRight)||0);const padV=(parseFloat(cs.paddingTop)||0)+(parseFloat(cs.paddingBottom)||0);const w=Math.min(Math.max(el.scrollWidth,kids.reduce((a,k)=>a+k.offsetWidth,0)+padH),room);const h=kids.reduce((a,k)=>Math.max(a,k.offsetHeight),0)+padV;setSize(s=>s&&s.w===w&&s.h===h?s:w&&h?{w,h}:s);};const ro=typeof ResizeObserver!==\"undefined\"?new ResizeObserver(measure):null;const watch=()=>{if(!ro)return;ro.disconnect();Array.from(el.children).forEach(c=>ro.observe(c));measure();};const mo=typeof MutationObserver!==\"undefined\"?new MutationObserver(watch):null;if(mo)mo.observe(el,{childList:true,subtree:true});watch();window.addEventListener(\"resize\",measure);return()=>{if(ro)ro.disconnect();if(mo)mo.disconnect();window.removeEventListener(\"resize\",measure);};},[el,armed,canvas]);// keep the ringed thumbnail in view when there are more than fit\nReact.useEffect(()=>{if(!el||!open)return;const t=el.querySelector(\"[aria-current=true]\");if(!t)return;const a=t.getBoundingClientRect();const b=el.getBoundingClientRect();if(a.left<b.left||a.right>b.right)el.scrollLeft+=a.left-b.left-(b.width-a.width)/2;},[el,open,state&&state.current]);// the canvas shows the row as designed; on the site it starts closed and empty (also on the server)\nif(canvas)return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});const shown=open&&!!size;const E=EASE;const t=shown?\"max-width .45s \"+E+\", max-height .35s \"+E+\", opacity .3s ease .08s, visibility 0s\":\"max-width .45s \"+E+\", max-height .35s \"+E+\", opacity .2s ease, visibility 0s .45s\";const style={...props.style,maxWidth:shown&&size?size.w:0,maxHeight:shown&&size?size.h:0,opacity:shown?1:0,visibility:shown?\"visible\":\"hidden\",transition:t};return /*#__PURE__*/_jsx(Component,{...props,ref:setRef,style:style,children:armed?props.children:null});});}export function withCounterThumb(Component){return /*#__PURE__*/React.forwardRef(function CounterThumb(props,forwarded){const[el,setEl]=React.useState(null);const setRef=React.useCallback(node=>{if(node){node.setAttribute(\"data-tf-thumb\",\"\");// before the browser picks a file (the images are in the page from this moment)\nif(!canvasNow())smallFiles(node);}// a transition: while the page is still hydrating, an ordinary update could make React redraw parts that are\n// not hydrated yet on the client (Framer's \"Caught a recoverable error\", React #421)\nReact.startTransition(()=>setEl(node));forward(forwarded,node);},[forwarded]);// a new image in this thumbnail (CMS change): small file again\nuseIso(()=>{if(el&&!canvasNow())smallFiles(el);});const[state,store]=useCounter(el);const place=el&&store&&state?store.placeOf(el):-1;const current=!!state&&place>=0&&place===state.current-1;React.useEffect(()=>{if(!el)return;if(current)el.setAttribute(\"aria-current\",\"true\");else el.removeAttribute(\"aria-current\");},[el,current]);// a label with {n} (and {total}) gets this thumbnail's number: \"Go to image {n}\" → \"Go to image 2\"; a label\n// without them (for example bound to the project's title) is left as Framer renders it\nReact.useEffect(()=>{if(!el||!state||place<0)return;if(!el.hasAttribute(\"data-tf-label\"))el.setAttribute(\"data-tf-label\",el.getAttribute(\"aria-label\")||\"\");const t=el.getAttribute(\"data-tf-label\")||\"\";if(/\\{n\\}|\\{total\\}/.test(t))el.setAttribute(\"aria-label\",fill(t,place+1,state.total));});const onClick=e=>{if(props.onClick)props.onClick(e);if(!store||!el)return;const p=store.placeOf(el);if(p>=0)store.go(p);};// the current thumbnail keeps its ring (the frame's own shadow) at full strength; the others drop the ring and\n// keep the frame's own opacity and hover\nconst style=state?{...props.style,...current?{opacity:1}:{boxShadow:\"none\"},transition:\"opacity .2s ease, box-shadow .2s ease\"}:props.style;return /*#__PURE__*/_jsx(Component,{...props,ref:setRef,onClick:onClick,style:style});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withCounterHint\":{\"type\":\"reactHoc\",\"name\":\"withCounterHint\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCounterStrip\":{\"type\":\"reactHoc\",\"name\":\"withCounterStrip\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCurrentNumber\":{\"type\":\"reactHoc\",\"name\":\"withCurrentNumber\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCounterThumb\":{\"type\":\"reactHoc\",\"name\":\"withCounterThumb\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCounterOpen\":{\"type\":\"reactHoc\",\"name\":\"withCounterOpen\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCounter\":{\"type\":\"reactHoc\",\"name\":\"withCounter\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withTotalNumber\":{\"type\":\"reactHoc\",\"name\":\"withTotalNumber\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Counter.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{RenderTarget}from\"framer\";/**\n * Tilefolio Infinite Loop — put it on the frame that holds a list: withInfiniteLoop (Home's project cards: comes\n * back to where you left it) or withInfiniteLoopFromTop (a project's images: always starts at the first one).\n * When that frame has a fixed height and its list is taller (Home on desktop: the column is one screen high), the\n * frame scrolls on its own, without a scrollbar, and never ends: the list is repeated above and below and the\n * position wraps around unnoticed. Where the frame grows with its content (tablet, phone) nothing changes.\n * Set the frame's Overflow to Clip: the code itself turns scrolling on while it loops (so the canvas, where code does\n * not run, shows a clean column without a scrollbar).\n * While it loops, the mouse wheel anywhere on the page (e.g. over the side panel) and Page Up / Page Down / Space /\n * the arrow keys move the list too (not while a full-size image view is open). The repeats are marked\n * data-tf-copy: Fit Image and Image Counter leave them out of the full-size set and the count.\n * The repeats are hidden from screen readers and from Tab; only the real list is read and tabbed through, and the\n * item that has keyboard focus stays on screen (the loop does not wrap away from it).\n * Nothing depends on layer names or on how many projects there are; more, fewer or other cards keep working.\n */const SAVE=\"tf-loop:\";const useIso=typeof window!==\"undefined\"?React.useLayoutEffect:React.useEffect;function reducedMotion(){return typeof window!==\"undefined\"&&!!window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;}// a group (the real list or a repeat) takes no box of its own (display: contents), so the frame's own layout and\n// gap space every item, inside a group and between repeats; a group is measured from its first to its last item\nfunction topOf(el,node){return node.offsetParent===el?node.offsetTop:node.offsetTop-el.offsetTop;}// the group's items that take space (not a <style>, not a hidden item); a box-less wrapper (display: contents, e.g.\n// the Cover Morph override around the project cover) is looked through to the items inside it\nfunction boxes(group){const out=[];for(const c of Array.from(group.children)){if(c.offsetParent!==null)out.push(c);else if(getComputedStyle(c).display===\"contents\")out.push(...boxes(c));}return out;}function topIn(el,group){const b=boxes(group);return b.length?topOf(el,b[0]):0;}function heightOf(el,group){const b=boxes(group);if(!b.length)return 0;const last=b[b.length-1];return topOf(el,last)+last.offsetHeight-topOf(el,b[0]);}// can this element (or one between it and the page) still scroll in that direction by itself?\nfunction scrollsItself(start,stop,dy){for(let n=start;n&&n!==document.body&&n!==stop;n=n.parentElement){const oy=getComputedStyle(n).overflowY;if((oy===\"auto\"||oy===\"scroll\")&&n.scrollHeight>n.clientHeight+1){if(dy>0&&n.scrollTop+n.clientHeight<n.scrollHeight-1)return true;if(dy<0&&n.scrollTop>0)return true;}}return false;}// an item's top in the frame's scroll space (items sit inside cards, so offsetTop alone is not enough)\nfunction posIn(el,node){return node.getBoundingClientRect().top-el.getBoundingClientRect().top+el.scrollTop;}// the innermost item of the real list at that line (the first one whose bottom is below it), a few levels deep\nfunction itemAt(el,group,line){let list=boxes(group);let found=null;for(let depth=0;depth<4&&list.length;depth++){const hit=list.find(c=>posIn(el,c)+c.offsetHeight>line)||null;if(!hit)break;found=hit;list=boxes(hit);}return found;}// an offset from the real list's top, folded into one turn of the loop (-H/2 … H/2)\nfunction fold(off,H){return off-Math.floor((off+H/2)/H)*H;}export function withInfiniteLoop(Component){return makeLoop(Component,true);}export function withInfiniteLoopFromTop(Component){return makeLoop(Component,false);}function makeLoop(Component,remember){return /*#__PURE__*/React.forwardRef(function InfiniteLoop(props,forwarded){const uid=\"tfloop\"+React.useId().replace(/[^a-zA-Z0-9]/g,\"\");const canvas=RenderTarget.current()===RenderTarget.canvas;const box=React.useRef(null);const orig=React.useRef(null);const step=React.useRef(0);const[copies,setCopies]=React.useState(0);const copiesRef=React.useRef(0);copiesRef.current=copies;// where the view is, measured from the real list's top: kept while images load and sizes change\nconst anchor=React.useRef(null);const ro=React.useRef(null);// Framer reuses a page for the next CMS item (→ on a project, a card from Home): the content is swapped in place,\n// collapses for a moment and the browser moves the scroll. So on every new address the loop starts again and\n// holds its start (through any resize while images load) until the visitor moves it (wheel, touch, click, key).\nconst pinned=React.useRef(true);const lastPath=React.useRef(\"\");const startOffset=el=>{// first visit: one gap above the first card, so it lines up with the other column's top\nlet off=-(parseFloat(getComputedStyle(el).rowGap)||0);if(remember){try{const s=sessionStorage.getItem(SAVE+location.pathname);if(s!==null&&s!==\"\")off=Number(s)||0;}catch(e){}}return off;};const toStart=(el,o)=>{const H=step.current;if(!H)return;const want=topIn(el,o)+fold(startOffset(el),H);if(Math.abs(want-el.scrollTop)>.5)el.scrollTop=want;};// a new address (also when Framer keeps this page and only swaps the CMS item): start again, pinned\nconst newPage=()=>{if(typeof window===\"undefined\")return false;const path=window.location.pathname;if(path===lastPath.current)return false;lastPath.current=path;pinned.current=true;anchor.current=null;return true;};const capture=(el,o)=>{const H=step.current;if(!H)return;const base=topIn(el,o);// the view's top, moved into the real list (a repeat shows the same thing one turn away)\nlet line=base+((el.scrollTop-base)%H+H)%H;let node=itemAt(el,o,line);// in the gap after the last item: hold on to the first item of the next turn instead\nif(!node){line-=H;node=itemAt(el,o,line);}anchor.current=node?{node,px:line-posIn(el,node)}:null;};const setRef=React.useCallback(node=>{box.current=node;if(typeof forwarded===\"function\")forwarded(node);else if(forwarded)forwarded.current=node;},[forwarded]);// loop only when the frame is shorter than its list; count the repeats needed on each side\nuseIso(()=>{if(canvas)return;const el=box.current;const o=orig.current;if(!el||!o)return;const measure=()=>{const gap=parseFloat(getComputedStyle(el).rowGap)||0;const h=heightOf(el,o);const view=el.clientHeight;const loops=h>0&&view>0&&h>view+1;const before=step.current;step.current=loops?h+gap:0;const need=loops?Math.ceil(view/(h+gap))+1:0;newPage();// sizes changed while it loops (images arriving, an item swapped): still at the start until the visitor\n// moves it; after that, stay on the same place of the real list\nconst a=anchor.current;if(loops&&need===copiesRef.current){if(pinned.current)toStart(el,o);else if(a&&a.node.isConnected&&o.contains(a.node)){const base=topIn(el,o);const want=base+fold(posIn(el,a.node)+a.px-base,step.current);if(Math.abs(want-el.scrollTop)>.5)el.scrollTop=want;}}setCopies(c=>c===need?c:need);};measure();const obs=typeof ResizeObserver!==\"undefined\"?new ResizeObserver(measure):null;ro.current=obs;if(obs){obs.observe(el);boxes(o).forEach(c=>obs.observe(c));}return()=>{if(obs)obs.disconnect();ro.current=null;};},[canvas]);// the repeats: out of the Tab order; then place the view on the real list (where it was left)\nuseIso(()=>{const el=box.current;const o=orig.current;if(!el||!o||!copies||!step.current)return;el.querySelectorAll(\"[data-tf-copy] a, [data-tf-copy] button, [data-tf-copy] input, [data-tf-copy] [tabindex]\").forEach(n=>n.setAttribute(\"tabindex\",\"-1\"));// a box-less group can drop out of the accessibility tree in some browsers with its aria-hidden: mark its items too\nel.querySelectorAll(\"[data-tf-copy] > *\").forEach(n=>n.setAttribute(\"aria-hidden\",\"true\"));// their items change size too (images arriving): watch the boxes, not box-less wrappers\nel.querySelectorAll(\":scope > [data-tf-copy]\").forEach(g=>boxes(g).forEach(n=>ro.current&&ro.current.observe(n)));const H=step.current;newPage();const a=anchor.current;if(!pinned.current&&a&&a.node.isConnected&&o.contains(a.node))el.scrollTop=topIn(el,o)+fold(posIn(el,a.node)+a.px-topIn(el,o),H);else toStart(el,o);capture(el,o);},[copies]);// after every render: a new address means a new page (Framer may keep this one and swap the CMS item)\nuseIso(()=>{if(canvas||!newPage())return;const el=box.current;const o=orig.current;if(el&&o&&copiesRef.current&&step.current)toStart(el,o);});// the visitor takes over: any wheel, touch, click or key releases the start\nReact.useEffect(()=>{if(canvas)return;const release=()=>{pinned.current=false;};window.addEventListener(\"wheel\",release,{passive:true});window.addEventListener(\"touchstart\",release,{passive:true});window.addEventListener(\"pointerdown\",release,{passive:true});window.addEventListener(\"keydown\",release);return()=>{window.removeEventListener(\"wheel\",release);window.removeEventListener(\"touchstart\",release);window.removeEventListener(\"pointerdown\",release);window.removeEventListener(\"keydown\",release);};},[canvas]);// wrap around, remember the place; wheel and keys from the rest of the page\nReact.useEffect(()=>{const el=box.current;const o=orig.current;if(!el||!o||!copies)return;let timer=0;let frame=0;// keyboard focus on an item of the real list: the browser scrolls it into view, and a wrap right after\n// would show its repeat instead and leave the focused item off screen. So no wrap for a moment after focus\n// arrives; the next wheel or key scroll wraps as usual.\nlet focusUntil=0;const onFocusIn=e=>{const t=e.target;if(t&&o.contains(t))focusUntil=Date.now()+500;};const onScroll=()=>{const H=step.current;if(!H)return;// not moved by the visitor (the browser after a content swap): back to the start\nif(pinned.current)return toStart(el,o);const base=topIn(el,o);const st=el.scrollTop;const wraps=st<base-H/2||st>=base+H/2;// wrap only once the repeats are as long as the real list (their images loaded too)\nconst rep=el.querySelector(\":scope > [data-tf-copy]\");const ready=!rep||Math.abs(heightOf(el,rep)+(parseFloat(getComputedStyle(el).rowGap)||0)-H)<2;if(wraps&&ready&&Date.now()>focusUntil)el.scrollTop=st<base-H/2?st+H:st-H;if(!frame)frame=window.requestAnimationFrame(()=>{frame=0;capture(el,o);});window.clearTimeout(timer);if(remember)timer=window.setTimeout(()=>{try{sessionStorage.setItem(SAVE+location.pathname,String(Math.round(el.scrollTop-topIn(el,o))));}catch(e){}},150);};const onWheel=e=>{if(e.defaultPrevented||e.ctrlKey||!e.deltaY)return;if(document.querySelector(\"[aria-modal=true]\"))return;// a full-size view is open over the page\nconst t=e.target;if(!t||el.contains(t)||scrollsItself(t,el,e.deltaY))return;const k=e.deltaMode===1?16:e.deltaMode===2?el.clientHeight:1;el.scrollTop+=e.deltaY*k;};const onKey=e=>{const a=document.activeElement;if(e.defaultPrevented||e.altKey||e.ctrlKey||e.metaKey)return;if(a&&a!==document.body&&a!==document.documentElement)return;// a focused element scrolls its own way\nconst page=el.clientHeight*.85;const map={PageDown:page,PageUp:-page,\" \":e.shiftKey?-page:page,ArrowDown:60,ArrowUp:-60};const dy=map[e.key];if(!dy)return;e.preventDefault();el.scrollBy({top:dy,behavior:reducedMotion()?\"auto\":\"smooth\"});};el.addEventListener(\"scroll\",onScroll,{passive:true});el.addEventListener(\"focusin\",onFocusIn);window.addEventListener(\"wheel\",onWheel,{passive:true});window.addEventListener(\"keydown\",onKey);return()=>{window.clearTimeout(timer);if(frame)window.cancelAnimationFrame(frame);el.removeEventListener(\"scroll\",onScroll);el.removeEventListener(\"focusin\",onFocusIn);window.removeEventListener(\"wheel\",onWheel);window.removeEventListener(\"keydown\",onKey);};},[copies]);const kids=props.children;const repeat=key=>/*#__PURE__*/_jsx(\"div\",{\"data-tf-copy\":\"\",\"aria-hidden\":\"true\",style:{display:\"contents\"},children:kids},key);const before=[];const after=[];for(let i=copies;i>=1;i--)before.push(repeat(\"b\"+i));for(let i=1;i<=copies;i++)after.push(repeat(\"a\"+i));// no quotes in this text (it is rendered on the server too)\nconst css=\".\"+uid+\"{scrollbar-width:none;-ms-overflow-style:none}.\"+uid+\"::-webkit-scrollbar{display:none}\";return /*#__PURE__*/_jsxs(Component,{...props,ref:setRef,className:(props.className?props.className+\" \":\"\")+uid,style:{...props.style,overflowAnchor:\"none\",...copies?{overflowY:\"auto\",overflowX:\"hidden\"}:null},children:[/*#__PURE__*/_jsx(\"style\",{children:css}),before,/*#__PURE__*/_jsx(\"div\",{ref:orig,style:{display:\"contents\"},children:kids},\"list\"),after]});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withInfiniteLoopFromTop\":{\"type\":\"reactHoc\",\"name\":\"withInfiniteLoopFromTop\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withInfiniteLoop\":{\"type\":\"reactHoc\",\"name\":\"withInfiniteLoop\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InfiniteLoop.map"],"mappings":"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"}