{"version":3,"file":"CardStack.BpxWraZb.mjs","names":["useRef","useState","_Fragment","__esmMin","init_ssg_sandbox_shims","init_npm_react_18_3_1","_e","de","init_jsx_runtime","J","p","ce","window","useMotionValue","init_framer_motion_DhsWWWsN","withCardPhotoReveal","elementRef","y","frame","update","card","vh","top","t","onScroll","Component","ref","node","props","withScrollTextReveal","mask","setMask","el","start","end","a","b","withShowAfterScroll","on","setOn","check","body","r","foot","fTop","withCardPhotoRevealDesktop","x","last","tick","vw","left","v","withScrollCue","opacity","t0","host","moved","phase","now","withStickyCaptionDesktop","pinBlocked","n","cs","makePinnedCaptionMobile","pin","setPin","show","setShow","alive","first","o","prev","next","key","poll","raf","withPinnedCaptionMobile","withPinnedCaptionMobileFirst","withFadeAwayOnScroll","setO","withRevealWipe","setP","inset","withScrambleIn","root","timer","started","slots","prepare","walker","texts","frag","ch","box","ghost","face","run","settled","i","s","pool","SCR_UPPER","SCR_LOWER","io","entries","withFooterMarker","setRef","withEditorialPlate","wrap","h","withScreenHeight","setH","ok","withFrameWipe","state","setState","tries","ix","iy","area","cls","l","withQuoteGlow","withQuoteMarkGlow","init_CardStack"],"sources":["https:/framerusercontent.com/modules/EBKiCrnCHcOe5h7Kebmh/EV2vXatmmBcjt3SFsK61/CardStack.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{forwardRef,useRef,useState,useEffect}from\"react\";import{useMotionValue,useTransform}from\"framer-motion\";function useIsPhone(){const[isPhone,setIsPhone]=useState(false);useEffect(()=>{const check=()=>setIsPhone(window.innerWidth<1200);check();window.addEventListener(\"resize\",check);return()=>window.removeEventListener(\"resize\",check);},[]);return isPhone;}// Phone & tablet. As the next card slides over, the covered card gently recedes:\n// it scales down slightly and dims, giving the stack a sense of depth.\n// Progress is measured from where the card would sit if it weren't pinned,\n// because a pinned (sticky) card doesn't move on screen.\nexport function withStackDepth(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const isPhone=useIsPhone();const progress=useMotionValue(0);useEffect(()=>{if(!isPhone)return;let frame=0;const update=()=>{frame=0;const el=elementRef.current;const parent=el?.parentElement;if(!el||!parent)return;const parentRect=parent.getBoundingClientRect();const parentStyle=window.getComputedStyle(parent);let naturalTop=parentRect.top+parseFloat(parentStyle.paddingTop||\"0\");for(const sib of Array.from(parent.children)){if(sib===el)break;const s=window.getComputedStyle(sib);if(s.display===\"none\"||s.position===\"absolute\"||s.position===\"fixed\")continue;naturalTop+=sib.offsetHeight;}const h=el.offsetHeight||1;const p=Math.min(Math.max(-naturalTop/h,0),1);progress.set(p);};const onScroll=()=>{if(!frame)frame=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);if(frame)cancelAnimationFrame(frame);};},[isPhone]);const scale=useTransform(progress,[0,1],[1,.9]);const filter=useTransform(progress,v=>`brightness(${1-.3*v})`);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,...isPhone?{scale,filter,transformOrigin:\"50% 0%\"}:{}}});});}// The photo lags behind its card as the card slides up, so the card's edge\n// appears to uncover a photo that's almost standing still. Once the card\n// reaches the top, the photo settles into place.\nexport function withCardPhotoReveal(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const y=useMotionValue(0);useEffect(()=>{let frame=0;const update=()=>{frame=0;const el=elementRef.current;const card=el?.parentElement;if(!card)return;const vh=window.innerHeight||1;const top=card.getBoundingClientRect().top;const t=Math.min(Math.max(top,0),vh);y.set(-.55*t);};const onScroll=()=>{if(!frame)frame=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);if(frame)cancelAnimationFrame(frame);};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,y}});});}// Phone & tablet only. As the text scrolls into view, it fills in from faint to\n// full colour, line by line, tied to the scroll position. Keeps the text's own colours.\nexport function withScrollTextReveal(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[mask,setMask]=useState(undefined);useEffect(()=>{let frame=0;const update=()=>{frame=0;const el=elementRef.current;if(!el)return;if(window.innerWidth>=1200){setMask(undefined);return;}const vh=window.innerHeight||1;const r=el.getBoundingClientRect();const start=vh*.95;const end=Math.max(vh*.4,300);const p=Math.min(Math.max((start-r.top)/(start-end),0),1);const a=(p*110-5).toFixed(1);const b=(p*110+5).toFixed(1);setMask(`linear-gradient(to bottom, #000 ${a}%, rgba(0,0,0,0.15) ${b}%)`);};const onScroll=()=>{if(!frame)frame=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);if(frame)cancelAnimationFrame(frame);};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,...mask?{WebkitMaskImage:mask,maskImage:mask}:{}}});});}// Fades in once the page has been scrolled a little; hidden at the very top.\nexport function withShowAfterScroll(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const[on,setOn]=useState(false);useEffect(()=>{const check=()=>{const body=document.querySelector('[data-framer-name=\"Article Body\"]');if(!body){setOn(false);return;}const r=body.getBoundingClientRect();// Step aside once the footer reaches the top so it never veils it.\nconst foot=document.querySelector('[data-alma-footer], [data-framer-name=\"Site Footer Area\"]');const fTop=foot?foot.getBoundingClientRect().top:Infinity;setOn(r.top<170&&r.left<window.innerWidth*.5&&fTop>170);};check();window.addEventListener(\"scroll\",check,{passive:true});window.addEventListener(\"wheel\",check,{passive:true});const t=setInterval(check,250);return()=>{window.removeEventListener(\"scroll\",check);window.removeEventListener(\"wheel\",check);clearInterval(t);};},[]);return /*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,opacity:on?1:0,transition:\"opacity 0.4s ease\",pointerEvents:\"none\"}});});}// Card stacks: the caption holds still on screen while its card slides up,\n// so the incoming card's edge wipes the old title away and reveals the new one\n// in exactly the same spot. Requires the card to clip its contents.\nexport function withPinnedCaption(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const y=useMotionValue(0);useEffect(()=>{let frame=0;const update=()=>{frame=0;const el=elementRef.current;const card=el?.parentElement;if(!card)return;if(window.innerWidth>=1200){y.set(0);return;}const top=card.getBoundingClientRect().top;const first=!card.previousElementSibling;y.set(top>0&&!first?-top:0);};const onScroll=()=>{if(!frame)frame=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);if(frame)cancelAnimationFrame(frame);};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,y}});});}// Desktop only (1200px and up). The horizontal version of withCardPhotoReveal:\n// as a card slides in from the right, its photo lags behind the card's edge,\n// so the edge appears to uncover a photo that's almost standing still.\n// Uses an animation-frame loop so it works however the horizontal scroll is driven.\nexport function withCardPhotoRevealDesktop(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const x=useMotionValue(0);useEffect(()=>{let frame=0;let last=NaN;const tick=()=>{const el=elementRef.current;const card=el?.parentElement;if(card){if(window.innerWidth<1200){if(last!==0){x.set(0);last=0;}}else{const vw=window.innerWidth||1;const left=card.getBoundingClientRect().left;const t=Math.min(Math.max(left,0),vw);const v=-.4*t;if(v!==last){x.set(v);last=v;}}}frame=requestAnimationFrame(tick);};frame=requestAnimationFrame(tick);return()=>cancelAnimationFrame(frame);},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,x}});});}// Desktop card stack. The caption holds still on screen while its card slides in\n// from the right, so the incoming card's edge wipes the previous title away and\n// reveals the new one in exactly the same spot. Measured against the card before\n// it (where the stack is pinned). Requires the card to clip its contents.\nexport function withPinnedCaptionDesktop(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const x=useMotionValue(0);useEffect(()=>{let frame=0;let last=NaN;const tick=()=>{const el=elementRef.current;const card=el?.parentElement;let prev=card?.previousElementSibling;while(prev&&window.getComputedStyle(prev).display===\"none\")prev=prev.previousElementSibling;let v=0;if(card&&prev&&window.innerWidth>=1200){const d=card.getBoundingClientRect().left-prev.getBoundingClientRect().left;v=d>0?-d:0;}if(v!==last){x.set(v);last=v;}frame=requestAnimationFrame(tick);};frame=requestAnimationFrame(tick);return()=>cancelAnimationFrame(frame);},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,x}});});}// Desktop scroll cue. Nudges gently to the right every few seconds, and fades\n// away once the page has been scrolled sideways a little.\nexport function withScrollCue(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const x=useMotionValue(0);const opacity=useMotionValue(1);useEffect(()=>{let frame=0;let start=null;const t0=performance.now();const tick=now=>{const host=elementRef.current?.parentElement;if(host){const left=host.getBoundingClientRect().left;if(start===null)start=left;const moved=Math.abs(left-start)+window.scrollY;opacity.set(Math.max(0,1-moved/120));}const phase=(now-t0)/1e3%2.8/2.8;x.set(phase<.3?8*Math.sin(phase/.3*Math.PI):0);frame=requestAnimationFrame(tick);};frame=requestAnimationFrame(tick);return()=>cancelAnimationFrame(frame);},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,x,opacity}});});}// Desktop card stack title wipe, pure CSS. The caption is sticky against the\n// right side of the screen, so while its card slides in it can't move further\n// right than where a resting card's title sits. The card clips it, so the\n// card's edge wipes the new title in over the old one. No script, no lag.\nexport function withStickyCaptionDesktop(Component){return /*#__PURE__*/forwardRef((props,ref)=>/*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,position:\"sticky\",right:\"calc(100vw - 1200px)\"}}));}// The orange asterisk: every few seconds it twirls once with a soft overshoot,\n// then rests. Spins around the glyph itself (not its text box), so it doesn't wobble.\nexport function withAsteriskSpin(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[origin,setOrigin]=useState(\"50% 50%\");useEffect(()=>{const el=elementRef.current;if(!el)return;const measure=()=>{const t=el.querySelector(\"p, span, h1, h2, h3, h4, h5, h6\")||el;const fs=parseFloat(window.getComputedStyle(t).fontSize)||72;const top=t.getBoundingClientRect().top-el.getBoundingClientRect().top;setOrigin(`50% ${top+fs*.33}px`);};measure();window.addEventListener(\"resize\",measure);return()=>window.removeEventListener(\"resize\",measure);},[]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                    @keyframes almaAsteriskSpin {\n                        0%   { transform: rotate(0deg); }\n                        28%  { transform: rotate(380deg); }\n                        36%  { transform: rotate(360deg); }\n                        100% { transform: rotate(360deg); }\n                    }\n                    @media (prefers-reduced-motion: reduce) { .alma-asterisk { animation: none !important; } }\n                `}),/*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,className:((props.className||\"\")+\" alma-asterisk\").trim(),style:{...props.style,transformOrigin:origin,animation:\"almaAsteriskSpin 5.5s cubic-bezier(.65,0,.35,1) 1s infinite\"}})]});});}// Phone & tablet card stacks: the title wipe, built for iPhone Safari.\n// The caption is pinned to the screen exactly where a resting card's title sits,\n// and its card clips it (clip-path), so as the next card slides up its edge reveals\n// the new title over the old one. Pure CSS while scrolling, so no lag or wobble.\n// A pinned layer can only pin to the screen when nothing above it is transformed\n// (e.g. during the page-transition slide-in). While anything is, the caption simply\n// rides with its card, and it pins again as soon as the way is clear.\nfunction pinBlocked(card){let n=card.parentElement;while(n&&n!==document.body&&n!==document.documentElement){const cs=window.getComputedStyle(n);if(cs.transform&&cs.transform!==\"none\"||cs.filter&&cs.filter!==\"none\"||cs.perspective&&cs.perspective!==\"none\"||/transform|filter|perspective/.test(cs.willChange||\"\")||/paint|layout|strict|content/.test(cs.contain||\"\"))return true;n=n.parentElement;}return false;}function makePinnedCaptionMobile(Component,first){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[pin,setPin]=useState(null);const[show,setShow]=useState(first?0:1);useEffect(()=>{const el=elementRef.current;const card=el?.parentElement;if(!el||!card)return;let alive=true;let last=\"\";const update=()=>{if(!alive)return;if(window.innerWidth>=1200||pinBlocked(card)){if(first)setShow(1);if(last!==\"off\"){setPin(null);card.style.clipPath=\"\";card.style.webkitClipPath=\"\";last=\"off\";}return;}card.style.clipPath=\"inset(0)\";card.style.webkitClipPath=\"inset(0)\";const r=card.getBoundingClientRect();if(first){// first story waits until its photo has risen into view, then eases in\nconst vh=window.innerHeight||1;const o=Math.min(Math.max((vh*.6-r.top)/(vh*.22),0),1);setShow(prev=>Math.abs(prev-o)>.01||o===0||o===1?o:prev);}const top=parseFloat(window.getComputedStyle(card).top)||0;const next={top,left:r.left,width:card.offsetWidth,height:card.offsetHeight};const key=JSON.stringify(next);if(key!==last){setPin(next);last=key;}};update();// keep checking gently: catches the end of a page transition, rotation, resize\nconst poll=setInterval(update,250);let raf=0;const onScroll=()=>{if(!raf)raf=requestAnimationFrame(()=>{raf=0;update();});};window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",update);window.addEventListener(\"orientationchange\",update);return()=>{alive=false;clearInterval(poll);if(raf)cancelAnimationFrame(raf);window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",update);window.removeEventListener(\"orientationchange\",update);};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,...first?{opacity:show,transform:`translateY(${(1-show)*28}px)`}:{},...pin?{position:\"fixed\",top:pin.top,left:pin.left,width:pin.width,height:pin.height,justifyContent:\"flex-end\",boxSizing:\"border-box\",zIndex:1}:{}}});});}export function withPinnedCaptionMobile(Component){return makePinnedCaptionMobile(Component,false);}// Same as above, for the first story only: its title stays hidden while the photo\n// is still low on the screen, then rises in as you begin to scroll.\nexport function withPinnedCaptionMobileFirst(Component){return makePinnedCaptionMobile(Component,true);}// Phone & tablet: a small label on the first story that is there when the photo\n// first peeks up, and melts away as soon as you start scrolling into it.\nexport function withFadeAwayOnScroll(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[o,setO]=useState(1);useEffect(()=>{let raf=0;const update=()=>{raf=0;const el=elementRef.current;const card=el?.parentElement;if(!el||!card)return;const vh=window.innerHeight||1;const top=card.getBoundingClientRect().top;setO(Math.min(Math.max((top-vh*.38)/(vh*.2),0),1));};const onScroll=()=>{if(!raf)raf=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);const poll=setInterval(update,400);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);clearInterval(poll);if(raf)cancelAnimationFrame(raf);};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,opacity:o,transform:`translateY(${(1-o)*-12}px)`,pointerEvents:\"none\"}});});}// Phone & tablet: a photo opens like a curtain as it rises into view — the frame\n// wipes open from the bottom while the picture inside settles from a gentle zoom.\nexport function withRevealWipe(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[p,setP]=useState(1);useEffect(()=>{let raf=0;const update=()=>{raf=0;const el=elementRef.current;if(!el)return;if(window.innerWidth>=1200){setP(1);return;}const vh=window.innerHeight||1;const r=el.getBoundingClientRect();const v=Math.min(Math.max((vh*.98-r.top)/(vh*.55),0),1);setP(v);};const onScroll=()=>{if(!raf)raf=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);const poll=setInterval(update,500);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);clearInterval(poll);if(raf)cancelAnimationFrame(raf);};},[]);const e=1-Math.pow(1-p,3);const inset=((1-e)*100).toFixed(2);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,clipPath:`inset(${inset}% 0 0 0)`,WebkitClipPath:`inset(${inset}% 0 0 0)`}});});}// Phone & tablet: oversized ghost lettering that drifts sideways as you scroll past.\nexport function withDriftX(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[x,setX]=useState(0);useEffect(()=>{let raf=0;const update=()=>{raf=0;const el=elementRef.current;if(!el)return;if(window.innerWidth>=1200){setX(0);return;}const vh=window.innerHeight||1;const r=el.getBoundingClientRect();const t=Math.min(Math.max((vh-r.top)/(vh+r.height),0),1);setX(12-t*42);};const onScroll=()=>{if(!raf)raf=requestAnimationFrame(update);};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);if(raf)cancelAnimationFrame(raf);};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,style:{...props.style,transform:`translateX(${x}%)`,whiteSpace:\"nowrap\",willChange:\"transform\"}});});}// Phone & tablet: the section before this one lifts away like a sheet while this\n// section waits, pinned, underneath it. Pure CSS (sticky) once set up.\n//   block = this section's own slot in the page's Main Container\n//   sheet = the visible section directly above it (it slides away)\n//   pane  = the layer inside the block that stays pinned\nfunction isShown(el){if(!el)return false;const cs=window.getComputedStyle(el);return cs.display!==\"none\"&&cs.visibility!==\"hidden\"&&el.offsetHeight>0;}export function withRevealUnder(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);useEffect(()=>{const el=elementRef.current;if(!el)return;let block=null,sheet=null,pane=null;const unlocked=[];const SCREEN=typeof CSS!==\"undefined\"&&CSS.supports&&CSS.supports(\"height\",\"100lvh\")?\"100lvh\":\"100vh\";const find=()=>{// climb to the direct child of the Main Container\nlet b=el;while(b&&b.parentElement&&b.parentElement.getAttribute(\"data-framer-name\")!==\"Main Container\")b=b.parentElement;if(!b||!b.parentElement)return false;// nearest visible section above it\nlet p=b.previousElementSibling;while(p&&!isShown(p))p=p.previousElementSibling;if(!p)return false;let pn=el;while(pn.parentElement&&pn.parentElement!==b)pn=pn.parentElement;block=b;sheet=p;pane=pn===b?el:pn;return true;};const unlock=()=>{let a=block.parentElement;while(a&&a!==document.body&&a!==document.documentElement){const cs=window.getComputedStyle(a);if(cs.overflowY!==\"visible\"||cs.overflowX!==\"visible\"&&cs.overflowX!==\"clip\"){if(!unlocked.some(u=>u[0]===a))unlocked.push([a,a.style.overflow,a.style.overflowX,a.style.overflowY]);a.style.overflow=\"visible\";a.style.overflowY=\"visible\";a.style.overflowX=CSS.supports&&CSS.supports(\"overflow-x\",\"clip\")?\"clip\":\"visible\";}a=a.parentElement;}};const reset=()=>{if(block){block.style.marginTop=\"\";block.style.paddingBottom=\"\";block.style.zIndex=\"\";}if(pane&&pane!==block){pane.style.position=\"\";pane.style.top=\"\";}unlocked.forEach(([a,o,ox,oy])=>{a.style.overflow=o;a.style.overflowX=ox;a.style.overflowY=oy;});unlocked.length=0;};const apply=()=>{if(!block&&!find())return;if(window.innerWidth>=1200){reset();return;}unlock();const h=pane.offsetHeight||0;const vh=window.innerHeight||1;block.style.position=\"relative\";block.style.zIndex=\"0\";block.style.marginTop=`calc(-1 * ${SCREEN})`;block.style.paddingBottom=SCREEN;pane.style.position=\"sticky\";pane.style.top=h>=vh?\"0px\":`calc(${SCREEN} - ${h}px)`;if(!sheet.style.position)sheet.style.position=\"relative\";sheet.style.zIndex=\"2\";};// wait a beat so Framer has finished laying out the page\nconst t=setTimeout(apply,60);const ro=new ResizeObserver(()=>apply());ro.observe(el);window.addEventListener(\"resize\",apply);return()=>{clearTimeout(t);ro.disconnect();window.removeEventListener(\"resize\",apply);reset();};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props});});}// The Playfair asterisk turning slowly and constantly, like a seal.\nexport function withAsteriskSpinSlow(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[origin,setOrigin]=useState(\"50% 50%\");useEffect(()=>{const el=elementRef.current;if(!el)return;const measure=()=>{const t=el.querySelector(\"p, span, h1, h2, h3, h4, h5, h6\")||el;const fs=parseFloat(window.getComputedStyle(t).fontSize)||72;const top=t.getBoundingClientRect().top-el.getBoundingClientRect().top;setOrigin(`50% ${top+fs*.33}px`);};measure();window.addEventListener(\"resize\",measure);return()=>window.removeEventListener(\"resize\",measure);},[]);return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                    @keyframes almaAsteriskSpinSlow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n                    @media (prefers-reduced-motion: reduce) { .alma-asterisk-slow { animation: none !important; } }\n                `}),/*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,className:((props.className||\"\")+\" alma-asterisk-slow\").trim(),style:{...props.style,transformOrigin:origin,animation:\"almaAsteriskSpinSlow 14s linear infinite\"}})]});});}// Headline that slowly \"decodes\" itself when it comes into view, like the\n// Stay in the Story button. Works on any text layer and keeps its own styling.\n// Each letter gets a fixed slot (sized by the real letter) so nothing shifts while it decodes.\nconst SCR_UPPER=\"ABCDEFGHIKLMNOPRSTUVXYZ\";const SCR_LOWER=\"abcdefghiklmnoprstuvxyz\";export function withScrambleIn(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);useEffect(()=>{const root=elementRef.current;if(!root||typeof IntersectionObserver===\"undefined\")return;const reduce=window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;if(reduce)return;let timer=0;let started=false;const slots=[];const prepare=()=>{const walker=document.createTreeWalker(root,NodeFilter.SHOW_TEXT);const texts=[];while(walker.nextNode())texts.push(walker.currentNode);texts.forEach(t=>{const frag=document.createDocumentFragment();for(const ch of t.data){if(ch===\" \"||ch===\"\\n\"){frag.appendChild(document.createTextNode(ch));continue;}const box=document.createElement(\"span\");box.style.position=\"relative\";box.style.display=\"inline-block\";const ghost=document.createElement(\"span\");ghost.textContent=ch;ghost.style.visibility=\"hidden\";const face=document.createElement(\"span\");face.textContent=ch;face.style.position=\"absolute\";face.style.left=\"0\";face.style.right=\"0\";face.style.top=\"0\";face.style.textAlign=\"center\";face.style.transition=\"opacity .25s ease\";box.appendChild(ghost);box.appendChild(face);frag.appendChild(box);slots.push({face,ch});}t.parentNode&&t.parentNode.replaceChild(frag,t);});};const run=()=>{if(started)return;started=true;prepare();const start=performance.now();const total=2800;timer=setInterval(()=>{const p=Math.min((performance.now()-start)/total,1);const settled=Math.floor((1-Math.pow(1-p,2))*slots.length);slots.forEach((s,i)=>{if(i<settled||!/[A-Za-z]/.test(s.ch)){s.face.textContent=s.ch;s.face.style.opacity=\"1\";return;}const pool=s.ch===s.ch.toUpperCase()?SCR_UPPER:SCR_LOWER;s.face.textContent=pool[Math.random()*pool.length|0];s.face.style.opacity=\"0.5\";});if(p>=1)clearInterval(timer);},110);};const io=new IntersectionObserver(entries=>{if(entries.some(e=>e.isIntersecting)){setTimeout(run,350);io.disconnect();}},{threshold:.5});io.observe(root);return()=>{io.disconnect();clearInterval(timer);};},[]);return /*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props});});}// Tags the footer's root element so fixed bands can step aside when it arrives.\nexport function withFooterMarker(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const setRef=el=>{if(el&&el.setAttribute)el.setAttribute(\"data-alma-footer\",\"1\");if(typeof ref===\"function\")ref(el);else if(ref)ref.current=el;};return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});});}// Article images as editorial plates: the photograph breaks out of the text column,\n// sits in a fine red matte, and the bold line that follows becomes a centred serif question.\nexport function withEditorialPlate(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const wrap=useRef(null);useEffect(()=>{const el=wrap.current;if(!el)return;const h=el.querySelector(\"h1, h2, h3, h4\");if(h)el.style.setProperty(\"--plate-serif\",getComputedStyle(h).fontFamily);});const css=`\n[data-alma-plate] img {\n    display: block !important;\n    width: calc(100% + 160px) !important;\n    max-width: none !important;\n    height: auto !important;\n    margin: 72px 0 0 -80px !important;\n    outline: 1px solid rgba(196, 41, 41, 0.55);\n    outline-offset: 16px;\n    box-shadow: 0 40px 80px -48px rgba(0, 0, 0, 0.45);\n}\n[data-alma-plate] p:has(> strong:only-child) {\n    text-align: center !important;\n    margin: 88px auto 48px !important;\n    max-width: 640px;\n    text-wrap: balance;\n}\n[data-alma-plate] p:has(> strong:only-child) strong {\n    font-family: var(--plate-serif, \"Nigelina\"), serif !important;\n    font-weight: 400 !important;\n    font-size: 40px !important;\n    line-height: 1.05 !important;\n    letter-spacing: -0.02em !important;\n    color: rgb(196, 41, 41) !important;\n}\n@media (max-width: 1199.98px) {\n    [data-alma-plate] img { width: calc(100% + 96px) !important; margin: 56px 0 0 -48px !important; outline-offset: 12px; }\n}\n@media (max-width: 809.98px) {\n    [data-alma-plate] img { width: 100% !important; margin: 48px 0 0 0 !important; outline-offset: 8px; }\n    [data-alma-plate] p:has(> strong:only-child) { margin: 64px auto 32px !important; }\n    [data-alma-plate] p:has(> strong:only-child) strong { font-size: 30px !important; }\n}\n`;return /*#__PURE__*/_jsxs(\"div\",{ref:wrap,\"data-alma-plate\":\"\",style:{display:\"contents\"},children:[/*#__PURE__*/_jsx(\"style\",{children:css}),/*#__PURE__*/_jsx(Component,{ref:ref,...props})]});});}// Phone & tablet card stacks: the card is exactly the visible screen tall\n// (the screen minus Safari's toolbars), so its photo never sits behind them.\nexport function withScreenHeight(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const[h,setH]=useState(undefined);useEffect(()=>{const check=()=>{if(window.innerWidth>=1200){setH(undefined);return;}const ok=typeof CSS!==\"undefined\"&&CSS.supports&&CSS.supports(\"height\",\"100svh\");setH(ok?\"100svh\":window.innerHeight+\"px\");};check();window.addEventListener(\"resize\",check);window.addEventListener(\"orientationchange\",check);return()=>{window.removeEventListener(\"resize\",check);window.removeEventListener(\"orientationchange\",check);};},[]);return /*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,...h?{height:h}:{}}});});}// Desktop (1200px and up): the whole photo frame — photo, corners and glow — wipes\n// up from the bottom as one piece when it comes into view, so there is never an\n// empty frame waiting for its photo. Phone and tablet are left untouched.\nexport function withFrameWipe(Component){return /*#__PURE__*/forwardRef((props,ref)=>{const elementRef=useRef(null);const[state,setState]=useState(\"\");useEffect(()=>{let frame=0;let timer=0;let tries=0;const tick=()=>{const el=elementRef.current;if(!el){if(++tries>120){setState(\"done\");return;}frame=requestAnimationFrame(tick);return;}if(window.innerWidth<1200){setState(\"done\");return;}const r=el.getBoundingClientRect();const vw=window.innerWidth,vh=window.innerHeight;const ix=Math.min(r.right,vw)-Math.max(r.left,0);const iy=Math.min(r.bottom,vh)-Math.max(r.top,0);const area=Math.max(r.width*r.height,1);if(ix>0&&iy>0&&ix*iy/area>=.35){setState(\"in\");timer=setTimeout(()=>setState(\"done\"),1300);return;}frame=requestAnimationFrame(tick);};frame=requestAnimationFrame(tick);return()=>{cancelAnimationFrame(frame);clearTimeout(timer);};},[]);const cls=\"alma-frame-wipe\"+(state?\" alma-frame-wipe--\"+state:\"\");return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                    @media (min-width: 1200px) {\n                        .alma-frame-wipe { clip-path: inset(100% -80px -80px -80px); -webkit-clip-path: inset(100% -80px -80px -80px);\n                            transition: clip-path 1.2s cubic-bezier(.6,0,.4,1), -webkit-clip-path 1.2s cubic-bezier(.6,0,.4,1); }\n                        .alma-frame-wipe--in { clip-path: inset(0% -80px -80px -80px); -webkit-clip-path: inset(0% -80px -80px -80px); }\n                        .alma-frame-wipe--done { clip-path: none; -webkit-clip-path: none; transition: none; }\n                    }\n                    @media (prefers-reduced-motion: reduce) { .alma-frame-wipe { clip-path: none !important; -webkit-clip-path: none !important; } }\n                `}),/*#__PURE__*/_jsx(Component,{ref:node=>{if(typeof ref===\"function\")ref(node);else if(ref)ref.current=node;elementRef.current=node;},...props,className:((props.className||\"\")+\" \"+cls).trim()})]});});}// Article pull quote: a soft glow around the words themselves (no card behind them).\nexport function withQuoteGlow(Component){return /*#__PURE__*/forwardRef((props,ref)=>/*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,textShadow:\"0px 10px 40px rgba(0, 0, 0, 0.28)\"}}));}// The red quote mark: a warm red glow to match.\nexport function withQuoteMarkGlow(Component){return /*#__PURE__*/forwardRef((props,ref)=>/*#__PURE__*/_jsx(Component,{ref:ref,...props,style:{...props.style,textShadow:\"0px 0px 28px rgba(196, 41, 41, 0.55)\"}}));}\nexport const __FramerMetadata__ = {\"exports\":{\"withRevealUnder\":{\"type\":\"reactHoc\",\"name\":\"withRevealUnder\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withFooterMarker\":{\"type\":\"reactHoc\",\"name\":\"withFooterMarker\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withEditorialPlate\":{\"type\":\"reactHoc\",\"name\":\"withEditorialPlate\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withFrameWipe\":{\"type\":\"reactHoc\",\"name\":\"withFrameWipe\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollTextReveal\":{\"type\":\"reactHoc\",\"name\":\"withScrollTextReveal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPinnedCaptionMobile\":{\"type\":\"reactHoc\",\"name\":\"withPinnedCaptionMobile\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withRevealWipe\":{\"type\":\"reactHoc\",\"name\":\"withRevealWipe\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withShowAfterScroll\":{\"type\":\"reactHoc\",\"name\":\"withShowAfterScroll\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withFadeAwayOnScroll\":{\"type\":\"reactHoc\",\"name\":\"withFadeAwayOnScroll\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withStackDepth\":{\"type\":\"reactHoc\",\"name\":\"withStackDepth\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withStickyCaptionDesktop\":{\"type\":\"reactHoc\",\"name\":\"withStickyCaptionDesktop\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withAsteriskSpinSlow\":{\"type\":\"reactHoc\",\"name\":\"withAsteriskSpinSlow\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withQuoteMarkGlow\":{\"type\":\"reactHoc\",\"name\":\"withQuoteMarkGlow\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrollCue\":{\"type\":\"reactHoc\",\"name\":\"withScrollCue\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withDriftX\":{\"type\":\"reactHoc\",\"name\":\"withDriftX\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withAsteriskSpin\":{\"type\":\"reactHoc\",\"name\":\"withAsteriskSpin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCardPhotoReveal\":{\"type\":\"reactHoc\",\"name\":\"withCardPhotoReveal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScreenHeight\":{\"type\":\"reactHoc\",\"name\":\"withScreenHeight\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withScrambleIn\":{\"type\":\"reactHoc\",\"name\":\"withScrambleIn\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withQuoteGlow\":{\"type\":\"reactHoc\",\"name\":\"withQuoteGlow\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPinnedCaption\":{\"type\":\"reactHoc\",\"name\":\"withPinnedCaption\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCardPhotoRevealDesktop\":{\"type\":\"reactHoc\",\"name\":\"withCardPhotoRevealDesktop\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPinnedCaptionMobileFirst\":{\"type\":\"reactHoc\",\"name\":\"withPinnedCaptionMobileFirst\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPinnedCaptionDesktop\":{\"type\":\"reactHoc\",\"name\":\"withPinnedCaptionDesktop\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CardStack.map"],"mappings":"A,oNAOA,SAAgBe,EAAoB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMC,EAAWhB,EAAO,IAAI,EAAQiB,EAAEJ,EAAe,CAAC,EAAqkB,OAAnkBF,MAAc,CAAC,IAAIO,EAAM,EAAQC,MAAW,CAAC,EAAM,EAA8B,IAAMC,EAAzBJ,EAAW,SAAuB,cAAc,GAAG,CAACI,EAAK,OAAO,IAAMC,EAAGT,EAAO,aAAa,EAAQU,EAAIF,EAAK,sBAAsB,CAAC,CAAC,IAAUG,EAAE,KAAK,IAAI,KAAK,IAAID,EAAI,CAAC,EAAED,CAAE,EAAEJ,EAAE,IAAI,KAAKM,CAAC,CAAE,EAAQC,MAAa,CAAC,AAAUN,IAAM,sBAAsBC,CAAM,CAAE,EAAgH,OAA9GA,EAAO,EAAEP,EAAO,iBAAiB,SAASY,EAAS,CAAC,QAAQ,EAAI,CAAC,EAAEZ,EAAO,iBAAiB,SAASY,CAAQ,MAAY,CAACZ,EAAO,oBAAoB,SAASY,CAAQ,EAAEZ,EAAO,oBAAoB,SAASY,CAAQ,EAAKN,GAAM,qBAAqBA,CAAK,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKO,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,GAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAEz4B,SAAgBC,EAAqB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMb,EAAWhB,EAAO,IAAI,EAAO,CAAC8B,EAAKC,GAAS9B,EAAS,IAAA,EAAS,EAAixB,OAA/wBU,MAAc,CAAC,IAAIO,EAAM,EAAQC,MAAW,CAAC,EAAM,EAAE,IAAMa,EAAGhB,EAAW,QAAQ,GAAG,CAACgB,EAAG,OAAO,GAAGpB,EAAO,YAAY,KAAK,CAACmB,EAAQ,IAAA,EAAS,EAAE,MAAO,CAAC,IAAMV,EAAGT,EAAO,aAAa,EAAQ,EAAEoB,EAAG,sBAAsB,EAAQC,EAAMZ,EAAG,IAAUa,EAAI,KAAK,IAAIb,EAAG,GAAG,GAAG,EAAQX,EAAE,KAAK,IAAI,KAAK,KAAKuB,EAAM,EAAE,MAAMA,EAAMC,GAAK,CAAC,EAAE,CAAC,EAAQC,GAAGzB,EAAE,IAAI,EAAA,CAAG,QAAQ,CAAC,EAAQ0B,GAAG1B,EAAE,IAAI,EAAA,CAAG,QAAQ,CAAC,EAAEqB,EAAQ,mCAAmCI,EAAE,sBAAsBC,EAAE,GAAG,CAAE,EAAQZ,MAAa,CAAC,AAAUN,IAAM,sBAAsBC,CAAM,CAAE,EAAgH,OAA9GA,EAAO,EAAEP,EAAO,iBAAiB,SAASY,EAAS,CAAC,QAAQ,EAAI,CAAC,EAAEZ,EAAO,iBAAiB,SAASY,CAAQ,MAAY,CAACZ,EAAO,oBAAoB,SAASY,CAAQ,EAAEZ,EAAO,oBAAoB,SAASY,CAAQ,EAAKN,GAAM,qBAAqBA,CAAK,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKO,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,GAAGE,EAAK,CAAC,gBAAgBA,EAAK,UAAUA,CAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CACnpC,SAAgBO,EAAoB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,GAAK,CAACC,EAAGC,GAAOtC,EAAS,EAAK,EACsW,OADpWU,MAAc,CAAC,IAAM6B,MAAU,CAAC,IAAMC,EAAK,SAAS,cAAc,mCAAmC,EAAE,GAAG,CAACA,EAAK,CAACF,EAAM,EAAK,EAAE,MAAO,CAAC,IAAMG,EAAED,EAAK,sBAAsB,EAC/RE,EAAK,SAAS,cAAc,2DAA2D,EAAQC,EAAKD,EAAKA,EAAK,sBAAsB,CAAC,CAAC,IAAI,IAASJ,EAAMG,EAAE,IAAI,KAAKA,EAAE,KAAK9B,EAAO,WAAW,IAAIgC,EAAK,GAAG,CAAE,EAAEJ,EAAM,EAAE5B,EAAO,iBAAiB,SAAS4B,EAAM,CAAC,QAAQ,EAAI,CAAC,EAAE5B,EAAO,iBAAiB,QAAQ4B,EAAM,CAAC,QAAQ,EAAI,CAAC,EAAE,IAAM,EAAE,YAAYA,EAAM,GAAG,EAAE,UAAU,CAAC5B,EAAO,oBAAoB,SAAS4B,CAAK,EAAE5B,EAAO,oBAAoB,QAAQ4B,CAAK,EAAE,cAAc,CAAC,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKf,EAAU,CAAK,MAAI,GAAGG,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,QAAQ,KAAO,WAAW,oBAAoB,cAAc,MAAM,CAAC,CAAC,CAAE,CAAC,CAAE,CAOpnB,SAAgBiB,EAA2B,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAM7B,EAAWhB,EAAO,IAAI,EAAQ8C,EAAEjC,EAAe,CAAC,EAA4c,OAA1cF,MAAc,CAAC,IAAIO,EAAM,EAAM6B,EAAK,IAAUC,MAAS,CAA6B,IAAM5B,EAAzBJ,EAAW,SAAuB,cAAc,GAAGI,EAAK,CAAC,GAAGR,EAAO,WAAW,KAASmC,IAAO,IAAGD,EAAE,IAAI,CAAC,EAAE,EAAK,OAAQ,CAAC,IAAMG,EAAGrC,EAAO,YAAY,EAAQsC,EAAK9B,EAAK,sBAAsB,CAAC,CAAC,KAAiD+B,EAAE,IAAtC,KAAK,IAAI,KAAK,IAAID,EAAK,CAAC,EAAED,CAAgB,EAAKE,IAAIJ,IAAMD,EAAE,IAAIK,CAAC,EAAE,EAAKA,EAAG,CAAC,CAAC,EAAM,sBAAsBH,CAAI,CAAE,EAAoC,MAAlC,GAAM,sBAAsBA,CAAI,MAAY,qBAAqB9B,CAAK,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKO,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,GAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAMvxB,SAAgBwB,EAAc,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMpC,EAAWhB,EAAO,IAAI,EAAQ8C,EAAEjC,EAAe,CAAC,EAAQwC,EAAQxC,EAAe,CAAC,EAA8e,OAA5eF,MAAc,CAAC,IAAIO,EAAM,EAAMe,EAAM,KAAWqB,EAAG,YAAY,IAAI,EAAQN,EAAK,GAAK,CAAC,IAAMO,EAAKvC,EAAW,SAAS,cAAc,GAAGuC,EAAK,CAAC,IAAML,EAAKK,EAAK,sBAAsB,CAAC,CAAC,KAAQtB,IAAQ,OAAK,EAAMiB,GAAK,IAAMM,EAAM,KAAK,IAAIN,EAAKjB,CAAK,EAAErB,EAAO,QAAQyC,EAAQ,IAAI,KAAK,IAAI,EAAE,EAAEG,EAAM,GAAG,CAAC,CAAE,CAAC,IAAMC,GAAOC,EAAIJ,GAAI,IAAI,IAAI,IAAIR,EAAE,IAAIW,EAAM,GAAG,EAAE,KAAK,IAAIA,EAAM,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE,EAAM,sBAAsBT,CAAI,CAAE,EAAoC,MAAlC,GAAM,sBAAsBA,CAAI,MAAY,qBAAqB9B,CAAK,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKO,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,IAAE,SAAO,CAAC,CAAC,CAAE,CAAC,CAAE,CAIp1B,SAAgB+B,EAAyB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAmB,gBAAKlC,EAAU,CAAK,MAAI,GAAGG,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,SAAS,SAAS,MAAM,sBAAsB,CAAC,CAAC,CAAC,CAAE,CAiBvN,SAASgC,EAAW,EAAK,CAAC,IAAIC,EAAEzC,EAAK,cAAc,KAAMyC,GAAGA,IAAI,SAAS,MAAMA,IAAI,SAAS,iBAAgB,CAAC,IAAMC,EAAGlD,EAAO,iBAAiBiD,CAAC,EAAE,GAAGC,EAAG,WAAWA,EAAG,YAAY,QAAQA,EAAG,QAAQA,EAAG,SAAS,QAAQA,EAAG,aAAaA,EAAG,cAAc,QAAQ,+BAA+B,KAAKA,EAAG,YAAY,EAAE,GAAG,8BAA8B,KAAKA,EAAG,SAAS,EAAE,EAAE,MAAO,GAAK,EAAED,EAAE,aAAc,CAAC,MAAO,EAAM,CAAC,SAASE,EAAwB,EAAU,EAAM,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAM/C,EAAWhB,EAAO,IAAI,EAAO,CAACgE,EAAIC,GAAQhE,EAAS,IAAI,EAAO,CAACiE,EAAKC,GAASlE,EAAS,GAAS,EAErG,OAFuGU,MAAc,CAAC,IAAMqB,EAAGhB,EAAW,QAAcI,EAAKY,GAAI,cAAc,GAAG,CAACA,GAAI,CAACZ,EAAK,OAAO,IAAIgD,EAAM,GAASrB,EAAK,GAAS5B,MAAW,CAAC,GAAG,CAACiD,EAAM,OAAO,GAAGxD,EAAO,YAAY,MAAMgD,EAAWxC,CAAI,EAAE,CAAIiD,GAAMF,EAAQ,CAAC,EAAKpB,IAAO,QAAOkB,EAAO,IAAI,EAAE,EAAK,MAAM,SAAS,GAAG,EAAK,MAAM,eAAe,GAAG,EAAK,OAAO,MAAO,CAAC,EAAK,MAAM,SAAS,WAAW,EAAK,MAAM,eAAe,WAAW,IAAMvB,EAAEtB,EAAK,sBAAsB,EAAE,GAAGiD,EAAM,CACphC,IAAMhD,EAAGT,EAAO,aAAa,EAAQ0D,EAAE,KAAK,IAAI,KAAK,KAAKjD,EAAG,GAAGqB,EAAE,MAAMrB,EAAG,KAAK,CAAC,EAAE,CAAC,EAAE8C,EAAQ,GAAM,KAAK,IAAII,EAAKD,CAAC,EAAE,KAAKA,IAAI,GAAGA,IAAI,EAAEA,EAAEC,CAAI,CAAE,CAA4D,IAAMC,EAAK,CAAC,IAA7D,WAAW5D,EAAO,iBAAiBQ,CAAI,CAAC,CAAC,GAAG,GAAG,EAAkB,KAAKsB,EAAE,KAAK,MAAMtB,EAAK,YAAY,OAAOA,EAAK,YAAY,EAAQqD,EAAI,KAAK,UAAUD,CAAI,EAAKC,IAAM1B,IAAMkB,EAAOO,CAAI,EAAE,EAAKC,EAAK,EAAEtD,EAAO,EACtW,IAAMuD,EAAK,YAAYvD,EAAO,GAAG,EAAMwD,EAAI,EAAQnD,MAAa,CAAC,AAAQmD,IAAI,0BAA0B,CAAC,EAAI,EAAExD,EAAO,CAAE,CAAC,CAAE,EAAyJ,OAAvJP,EAAO,iBAAiB,SAASY,EAAS,CAAC,QAAQ,EAAI,CAAC,EAAEZ,EAAO,iBAAiB,SAASO,CAAM,EAAEP,EAAO,iBAAiB,oBAAoBO,CAAM,MAAY,CAAC,EAAM,GAAM,cAAcuD,CAAI,EAAKC,GAAI,qBAAqBA,CAAG,EAAE/D,EAAO,oBAAoB,SAASY,CAAQ,EAAEZ,EAAO,oBAAoB,SAASO,CAAM,EAAEP,EAAO,oBAAoB,oBAAoBO,CAAM,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKM,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,GAAGyC,EAAM,CAAC,QAAQH,EAAK,UAAU,eAAe,EAAEA,GAAM,GAAG,IAAI,EAAE,CAAC,EAAE,GAAGF,EAAI,CAAC,SAAS,QAAQ,IAAIA,EAAI,IAAI,KAAKA,EAAI,KAAK,MAAMA,EAAI,MAAM,OAAOA,EAAI,OAAO,eAAe,WAAW,UAAU,aAAa,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,SAAgBY,EAAwB,EAAU,CAAC,OAAOb,EAAwBtC,EAAU,EAAK,CAAE,CAEn+B,SAAgBoD,EAA6B,EAAU,CAAC,OAAOd,EAAwBtC,EAAU,EAAI,CAAE,CAEvG,SAAgBqD,EAAqB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAM9D,EAAWhB,EAAO,IAAI,EAAO,CAAC,EAAE+E,GAAM9E,EAAS,CAAC,EAAqnB,OAAnnBU,MAAc,CAAC,IAAIgE,EAAI,EAAQxD,MAAW,CAAC,EAAI,EAAE,IAAMa,EAAGhB,EAAW,QAAcI,EAAKY,GAAI,cAAc,GAAG,CAACA,GAAI,CAACZ,EAAK,OAAO,IAAMC,EAAGT,EAAO,aAAa,EAAQU,EAAIF,EAAK,sBAAsB,CAAC,CAAC,IAAI2D,EAAK,KAAK,IAAI,KAAK,KAAKzD,EAAID,EAAG,MAAMA,EAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,EAAQG,MAAa,CAAC,AAAQmD,IAAI,sBAAsBxD,CAAM,CAAE,EAAEA,EAAO,EAAEP,EAAO,iBAAiB,SAASY,EAAS,CAAC,QAAQ,EAAI,CAAC,EAAEZ,EAAO,iBAAiB,SAASY,CAAQ,EAAE,IAAMkD,EAAK,YAAYvD,EAAO,GAAG,EAAE,UAAU,CAACP,EAAO,oBAAoB,SAASY,CAAQ,EAAEZ,EAAO,oBAAoB,SAASY,CAAQ,EAAE,cAAckD,CAAI,EAAKC,GAAI,qBAAqBA,CAAG,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKlD,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,QAAQ,EAAE,UAAU,eAAe,EAAE,GAAG,IAAI,KAAK,cAAc,MAAM,CAAC,CAAC,CAAE,CAAC,CAAE,CAE9/B,SAAgBoD,EAAe,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMhE,EAAWhB,EAAO,IAAI,EAAO,CAACU,EAAEuE,GAAMhF,EAAS,CAAC,EAAEU,MAAc,CAAC,IAAIgE,EAAI,EAAQxD,MAAW,CAAC,EAAI,EAAE,IAAMa,EAAGhB,EAAW,QAAQ,GAAG,CAACgB,EAAG,OAAO,GAAGpB,EAAO,YAAY,KAAK,CAACqE,EAAK,CAAC,EAAE,MAAO,CAAC,IAAM5D,EAAGT,EAAO,aAAa,EAAQ,EAAEoB,EAAG,sBAAsB,EAAQmB,EAAE,KAAK,IAAI,KAAK,KAAK9B,EAAG,IAAI,EAAE,MAAMA,EAAG,KAAK,CAAC,EAAE,CAAC,EAAE4D,EAAK9B,CAAC,CAAE,EAAQ3B,MAAa,CAAC,AAAQmD,IAAI,sBAAsBxD,CAAM,CAAE,EAAEA,EAAO,EAAEP,EAAO,iBAAiB,SAASY,EAAS,CAAC,QAAQ,EAAI,CAAC,EAAEZ,EAAO,iBAAiB,SAASY,CAAQ,EAAE,IAAMkD,EAAK,YAAYvD,EAAO,GAAG,EAAE,UAAU,CAACP,EAAO,oBAAoB,SAASY,CAAQ,EAAEZ,EAAO,oBAAoB,SAASY,CAAQ,EAAE,cAAckD,CAAI,EAAKC,GAAI,qBAAqBA,CAAG,CAAE,CAAE,EAAE,CAAC,CAAC,EAA4B,IAAMO,IAAQ,GAAhC,GAAW,EAAExE,IAAE,IAAsB,IAAA,CAAK,QAAQ,CAAC,EAAE,MAAoB,gBAAKe,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,SAAS,SAASsD,EAAM,UAAU,eAAe,SAASA,EAAM,SAAS,CAAC,CAAC,CAAE,CAAC,CAAE,CAgBl/B,SAAgBC,EAAe,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMnE,EAAWhB,EAAO,IAAI,EAAs2D,OAAp2DW,MAAc,CAAC,IAAMyE,EAAKpE,EAAW,QAAiK,GAAtJ,CAACoE,GAAM,OAAO,qBAAuB,KAAgCxE,EAAO,YAAYA,EAAO,WAAW,kCAAkC,CAAC,CAAC,QAAkB,OAAO,IAAIyE,EAAM,EAAMC,EAAQ,GAAYC,EAAM,CAAC,EAAQC,MAAY,CAAC,IAAMC,EAAO,SAAS,iBAAiBL,EAAK,WAAW,SAAS,EAAQM,EAAM,CAAC,EAAE,KAAMD,EAAO,SAAS,GAAEC,EAAM,KAAKD,EAAO,WAAW,EAAEC,EAAM,QAAQ,GAAG,CAAC,IAAMC,EAAK,SAAS,uBAAuB,EAAE,IAAI,IAAMC,KAAMrE,EAAE,KAAK,CAAC,GAAGqE,IAAK,KAAKA,IAAK;EAAK,CAACD,EAAK,YAAY,SAAS,eAAeC,CAAE,CAAC,EAAE,QAAS,CAAC,IAAMC,EAAI,SAAS,cAAc,MAAM,EAAE,EAAI,MAAM,SAAS,WAAW,EAAI,MAAM,QAAQ,eAAe,IAAMC,EAAM,SAAS,cAAc,MAAM,EAAE,EAAM,YAAYF,EAAG,EAAM,MAAM,WAAW,SAAS,IAAMG,EAAK,SAAS,cAAc,MAAM,EAAE,EAAK,YAAYH,EAAG,EAAK,MAAM,SAAS,WAAW,EAAK,MAAM,KAAK,IAAI,EAAK,MAAM,MAAM,IAAI,EAAK,MAAM,IAAI,IAAI,EAAK,MAAM,UAAU,SAAS,EAAK,MAAM,WAAW,oBAAoBC,EAAI,YAAYC,CAAK,EAAED,EAAI,YAAYE,CAAI,EAAEJ,EAAK,YAAYE,CAAG,EAAEN,EAAM,KAAK,CAAC,OAAK,IAAE,CAAC,CAAE,CAAChE,EAAE,YAAYA,EAAE,WAAW,aAAaoE,EAAKpE,CAAC,CAAE,CAAC,CAAE,EAAQyE,MAAQ,CAAC,GAAGV,EAAQ,OAAO,EAAQ,GAAKE,EAAQ,EAAE,IAAMvD,EAAM,YAAY,IAAI,EAAmB,EAAM,gBAAgB,CAAC,IAAMvB,EAAE,KAAK,KAAK,YAAY,IAAI,EAAEuB,GAAO,KAAM,CAAC,EAAQgE,EAAQ,KAAK,OAAO,GAAW,EAAEvF,IAAE,GAAI6E,EAAM,MAAM,EAAEA,EAAM,SAAS,EAAE,IAAI,CAAC,GAAGW,EAAED,GAAS,CAAC,WAAW,KAAKE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,YAAYA,EAAE,GAAG,EAAE,KAAK,MAAM,QAAQ,IAAI,MAAO,CAAC,IAAMC,EAAKD,EAAE,KAAKA,EAAE,GAAG,YAAY,EAAEE,EAAUC,EAAU,EAAE,KAAK,YAAYF,EAAK,KAAK,OAAO,EAAEA,EAAK,OAAO,GAAG,EAAE,KAAK,MAAM,QAAQ,KAAM,CAAC,EAAK1F,GAAG,GAAE,cAAc2E,CAAK,CAAE,EAAE,GAAG,CAAE,EAAQkB,EAAG,IAAI,qBAAqB,GAAS,CAAIC,EAAQ,KAAK,GAAG,EAAE,cAAc,IAAG,WAAWR,EAAI,GAAG,EAAEO,EAAG,WAAW,EAAG,EAAE,CAAC,UAAU,EAAE,CAAC,EAAmB,OAAjBA,EAAG,QAAQnB,CAAI,MAAY,CAACmB,EAAG,WAAW,EAAE,cAAclB,CAAK,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAK5D,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,CAAK,CAAC,CAAE,CAAC,CAAE,CACtsE,SAAgB6E,EAAiB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMC,EAAO,GAAI,CAAI1E,GAAIA,EAAG,cAAaA,EAAG,aAAa,mBAAmB,GAAG,EAAK,OAAON,GAAM,WAAWA,EAAIM,CAAE,EAAUN,IAAI,EAAI,QAAQM,EAAG,EAAE,MAAoB,gBAAKP,EAAU,CAAC,GAAGG,EAAM,IAAI8E,CAAM,CAAC,CAAE,CAAC,CAAE,CAEvS,SAAgBC,EAAmB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMC,EAAK5G,EAAO,IAAI,EAiC/G,OAjCiHW,MAAc,CAAC,IAAMqB,EAAG4E,EAAK,QAAQ,GAAG,CAAC5E,EAAG,OAAO,IAAM6E,EAAE7E,EAAG,cAAc,gBAAgB,EAAK6E,GAAE7E,EAAG,MAAM,YAAY,gBAAgB,iBAAiB6E,CAAC,CAAC,CAAC,UAAU,CAAE,CAAC,EAiCtQ,gBAAM,MAAM,CAAC,IAAID,EAAK,kBAAkB,GAAG,MAAM,CAAC,QAAQ,UAAU,EAAE,SAAS,CAAc,gBAAK,QAAQ,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAG,CAAC,EAAe,gBAAKnF,EAAU,CAAK,MAAI,GAAGG,CAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAEtM,SAAgBkF,EAAiB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,GAAK,CAACD,EAAEE,GAAM9G,EAAS,IAAA,EAAS,EAA0a,OAAxaU,MAAc,CAAC,IAAM6B,MAAU,CAAC,GAAG5B,EAAO,YAAY,KAAK,CAACmG,EAAK,IAAA,EAAS,EAAE,MAAO,CAAC,IAAMC,EAAG,OAAO,IAAM,KAAa,IAAI,UAAU,IAAI,SAAS,SAAS,QAAQ,EAAED,EAAKC,EAAG,SAASpG,EAAO,YAAY,IAAI,CAAE,EAAqG,OAAnG4B,EAAM,EAAE5B,EAAO,iBAAiB,SAAS4B,CAAK,EAAE5B,EAAO,iBAAiB,oBAAoB4B,CAAK,MAAY,CAAC5B,EAAO,oBAAoB,SAAS4B,CAAK,EAAE5B,EAAO,oBAAoB,oBAAoB4B,CAAK,CAAE,CAAE,EAAE,CAAC,CAAC,EAAsB,gBAAKf,EAAU,CAAK,MAAI,GAAGG,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,GAAGiF,EAAE,CAAC,OAAOA,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAGvoB,SAAgBI,EAAc,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAM,CAAC,IAAMjG,EAAWhB,EAAO,IAAI,EAAO,CAACkH,EAAMC,GAAUlH,EAAS,EAAE,EAAEU,MAAc,CAAC,IAAIO,EAAM,EAAMmE,EAAM,EAAM+B,EAAM,EAAQpE,MAAS,CAAC,IAAMhB,EAAGhB,EAAW,QAAQ,GAAG,CAACgB,EAAG,CAAC,GAAG,EAAEoF,EAAM,IAAI,CAACD,EAAS,MAAM,EAAE,MAAO,CAAC,EAAM,sBAAsBnE,CAAI,EAAE,MAAO,CAAC,GAAGpC,EAAO,WAAW,KAAK,CAACuG,EAAS,MAAM,EAAE,MAAO,CAAC,IAAMzE,EAAEV,EAAG,sBAAsB,EAAQiB,EAAGrC,EAAO,WAAWS,EAAGT,EAAO,YAAkByG,EAAG,KAAK,IAAI3E,EAAE,MAAMO,CAAE,EAAE,KAAK,IAAIP,EAAE,KAAK,CAAC,EAAQ4E,EAAG,KAAK,IAAI5E,EAAE,OAAOrB,CAAE,EAAE,KAAK,IAAIqB,EAAE,IAAI,CAAC,EAAQ6E,EAAK,KAAK,IAAI7E,EAAE,MAAMA,EAAE,OAAO,CAAC,EAAK2E,EAAG,GAAGC,EAAG,GAAGD,EAAGC,EAAGC,GAAM,KAAKJ,EAAS,IAAI,EAAE,EAAM,eAAeA,EAAS,MAAM,EAAE,IAAI,GAAU,EAAM,sBAAsBnE,CAAI,CAAE,EAAoC,MAAlC,GAAM,sBAAsBA,CAAI,MAAY,CAAC,qBAAqB9B,CAAK,EAAE,aAAamE,CAAK,CAAE,CAAE,EAAE,CAAC,CAAC,EAAE,IAAMmC,EAAI,mBAAmBN,EAAM,qBAAqBA,EAAM,IAAI,MAAoB,gBAAMhH,EAAU,CAAC,SAAS,CAAc,gBAAK,QAAQ,CAAC,SAAS;;;;;;;;iBAQn9B,CAAC,EAAe,gBAAKuB,EAAU,CAAC,IAAI,GAAM,CAAI,OAAOC,GAAM,WAAWA,EAAIC,CAAI,EAAUD,IAAI,EAAI,QAAQC,GAAK,EAAW,QAAQA,CAAK,EAAE,GAAGC,EAAM,YAAYA,EAAM,WAAW,IAAI,IAAI4F,EAAA,CAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAE,CAC1N,SAAgBE,EAAc,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAmB,gBAAKjG,EAAU,CAAK,MAAI,GAAGG,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,WAAW,mCAAmC,CAAC,CAAC,CAAC,CAAE,CAC5M,SAAgB+F,EAAkB,EAAU,CAAC,MAAoB,iBAAY,EAAM,IAAmB,gBAAKlG,EAAU,CAAK,MAAI,GAAGG,EAAM,MAAM,CAAC,GAAGA,EAAM,MAAM,WAAW,sCAAsC,CAAC,CAAC,CAAC,CAAE,C,sDAnD7M,EAAU,0BAAgC,EAAU,yB"}