{"version":3,"file":"SectionMotion.BebozY6K.mjs","names":["React.useRef"],"sources":["https:/framerusercontent.com/modules/vS2pjKG2URWTikEK3vKe/2XFYE4zVlSDd8bBvMFMY/SectionMotion.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{RenderTarget}from\"framer\";// Shared motion language for the page. Values come from the measured\n// reference systems: long, flat easing and no bounce anywhere.\nconst EASE_OUT=\"cubic-bezier(0.22, 1, 0.36, 1)\";// The project's two curves: an expo-out settle for anything arriving, and the\n// shorter standard curve for anything responding to a pointer.\nconst EASE_ENTER=\"cubic-bezier(0.16, 1, 0.3, 1)\";const EASE_HOVER=\"cubic-bezier(0.4, 0, 0.2, 1)\";const ZOOM_DURATION=900;const BAND_DURATION=700;const COUNT_DURATION=1500;// How many frames an override waits for Framer to render its subtree before\n// it gives up. Ten frames is a comfortable two rerenders at 60Hz.\nconst WIRE_RETRIES=10;// Overrides run on the canvas too. There the design should read as its\n// finished state, so every behaviour below is skipped while editing.\nfunction isLive(){return typeof window!==\"undefined\"&&RenderTarget.current()!==RenderTarget.canvas&&RenderTarget.current()!==RenderTarget.thumbnail;}// A `display: contents` host lets the override hold a ref without assuming\n// the wrapped canvas node forwards one, and without adding a box that would\n// disturb the surrounding stack or grid.\nfunction hostStyle(){return{display:\"contents\"};}function firstBox(host){const child=host?.firstElementChild;return child instanceof HTMLElement?child:null;}function prefersReducedMotion(){if(typeof window===\"undefined\"||!window.matchMedia)return false;return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;}// `:focus-visible` is what decides whether a control should show a ring, but\n// the selector throws on engines that never shipped it, where showing the ring\n// is the safer answer.\nfunction keyboardFocus(element){try{return element.matches(\":focus-visible\");}catch{return true;}}/**\n * Runs `wire` against the single element Framer renders inside the host.\n *\n * Framer can mount a subtree a tick after the override itself: a CMS list, an\n * image that paints a placeholder frame first, so the lookup is retried for a\n * few frames instead of being abandoned on the first commit. `wire` hands back\n * its own teardown, exactly the way an effect would.\n */function useWiredBox(host,wire){// The effect runs once, but `wire` is a fresh closure on every render, so\n// it is read through a ref rather than re-wiring the DOM on each commit.\nconst latest=React.useRef(wire);latest.current=wire;React.useEffect(()=>{if(!isLive())return;let disposed=false;let frame=0;let attempts=0;let teardown;const attempt=()=>{frame=0;if(disposed)return;const box=firstBox(host.current);if(!box){if(attempts++<WIRE_RETRIES){frame=requestAnimationFrame(attempt);}return;}teardown=latest.current(box);};attempt();return()=>{disposed=true;if(frame)cancelAnimationFrame(frame);if(teardown)teardown();};},[]);}/**\n * Counts a stat up from zero the first time it scrolls into view.\n *\n * The number is read from whatever the layer already says, so the canvas\n * stays the single source of truth. Only the text node is rewritten, never\n * the markup around it, so the type style survives untouched.\n *\n * Attached to the Stat text inside both Stats cards (N8j4cfVzn in Stats/Card\n * Light Hp98qNvep, pV_rjgLNe in Stats/Card Dark nNxUZme00), which is why it\n * does not show up in the page trees: those name the component instance, not\n * what is inside it. Four instances per breakpoint, twelve in the document.\n */export function withCountUp(Component){return /*#__PURE__*/React.forwardRef(function WithCountUp(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{const walker=document.createTreeWalker(box,NodeFilter.SHOW_TEXT);const textNode=walker.nextNode();if(!textNode||!textNode.nodeValue)return;const original=textNode.nodeValue;// Anchored on digits at both ends so a trailing separator stays\n// with the suffix: \"1 200 kr\" splits into 1200 and \" kr\".\nconst match=original.match(/\\d(?:[\\d\\s.,]*\\d)?/);if(!match||match.index==null)return;// sv-SE groups thousands with a space and marks decimals with a\n// comma, so \"12,5\" is twelve and a half, not a hundred and\n// twenty-five. A card with no digits at all never reaches this\n// line, because the match above returns first.\nconst digits=match[0].replace(/[\\s\\u00a0\\u202f\\u2009]/g,\"\");const target=parseFloat(digits.replace(\",\",\".\"));if(!isFinite(target)||target<=0)return;const decimals=(digits.split(\",\")[1]||\"\").length;const grouped=/[\\s\\u00a0\\u202f\\u2009]/.test(match[0]);const prefix=original.slice(0,match.index);const suffix=original.slice(match.index+match[0].length);if(prefersReducedMotion())return;// Counting has to write the number back in the format it was read\n// in, or a grouped or decimal stat changes shape mid-animation.\nconst write=value=>{textNode.nodeValue=prefix+value.toLocaleString(documentNumberLocale(),{minimumFractionDigits:decimals,maximumFractionDigits:decimals,useGrouping:grouped})+suffix;};let frame=0;let started=false;write(0);const run=()=>{const start=performance.now();const step=now=>{const t=Math.min(1,(now-start)/COUNT_DURATION);// Quartic ease out: fast off the mark, long settle.\nwrite(target*(1-Math.pow(1-t,4)));if(t<1)frame=requestAnimationFrame(step);else textNode.nodeValue=original;};frame=requestAnimationFrame(step);};const observer=new IntersectionObserver(entries=>{for(const entry of entries){if(!entry.isIntersecting||started)continue;started=true;observer.disconnect();run();}},{threshold:.6});observer.observe(box);return()=>{observer.disconnect();cancelAnimationFrame(frame);textNode.nodeValue=original;};});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}/**\n * Slow zoom on the artwork inside its own frame, rather than on the frame.\n *\n * The layer is clipped and only the image Framer renders inside it moves,\n * so the surrounding layout never shifts.\n */export function withImageZoom(Component){return /*#__PURE__*/React.forwardRef(function WithImageZoom(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{if(prefersReducedMotion())return;const image=box.querySelector(\"img\")??(box.firstElementChild instanceof HTMLElement?box.firstElementChild:null);if(!(image instanceof HTMLElement))return;// Both properties are taken here and given back in the teardown;\n// the clip used to be applied before the image lookup, so a card\n// without an image kept an overflow it never asked for.\nconst previousTransition=image.style.transition;const previousOverflow=box.style.overflow;box.style.overflow=\"hidden\";image.style.transition=`transform ${ZOOM_DURATION}ms ${EASE_OUT}`;// The zoom sits on 21 images per breakpoint and all three replicas\n// are in the document, so the compositor hint is taken only for\n// the length of the gesture and released once it has settled.\nlet release=0;const enter=()=>{if(release)window.clearTimeout(release);release=0;image.style.willChange=\"transform\";image.style.transform=\"scale(1.06)\";};const leave=()=>{image.style.transform=\"scale(1)\";if(release)window.clearTimeout(release);release=window.setTimeout(()=>{release=0;image.style.willChange=\"\";},ZOOM_DURATION);};// Keyboard users get the same read of which artwork is targeted;\n// focus moving inside the card is not a departure.\nconst focusLeave=event=>{const next=event.relatedTarget;if(next instanceof Node&&box.contains(next))return;leave();};box.addEventListener(\"mouseenter\",enter);box.addEventListener(\"mouseleave\",leave);box.addEventListener(\"focusin\",enter);box.addEventListener(\"focusout\",focusLeave);return()=>{box.removeEventListener(\"mouseenter\",enter);box.removeEventListener(\"mouseleave\",leave);box.removeEventListener(\"focusin\",enter);box.removeEventListener(\"focusout\",focusLeave);if(release)window.clearTimeout(release);image.style.transition=previousTransition;image.style.transform=\"\";image.style.willChange=\"\";box.style.overflow=previousOverflow;};});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}/**\n * Turns a row of equal panels into a band that responds to the pointer:\n * the panel under the cursor takes more of the row and its neighbours give\n * space back. Applied once to the row, not to each panel.\n *\n * Absolutely positioned children (decorative marks) are left alone, and the\n * effect stands down on narrow screens where the panels are already stacked.\n */export function withPanelBand(Component){return /*#__PURE__*/React.forwardRef(function WithPanelBand(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{if(prefersReducedMotion())return;const panels=Array.from(box.children).filter(child=>child instanceof HTMLElement&&getComputedStyle(child).position!==\"absolute\");if(panels.length<2)return;const cleanups=[];let enabled=false;const rest=()=>{for(const panel of panels)panel.style.flexGrow=\"1\";};const focus=active=>{for(const panel of panels){panel.style.flexGrow=panel===active?\"2.4\":\"0.87\";}};const apply=()=>{// Only meaningful while the panels sit side by side.\nconst next=box.clientWidth>=900;if(next===enabled)return;enabled=next;for(const panel of panels){panel.style.transition=next?`flex-grow ${BAND_DURATION}ms ${EASE_OUT}`:\"\";panel.style.flexGrow=\"1\";}};for(const panel of panels){const enter=()=>enabled&&focus(panel);panel.addEventListener(\"mouseenter\",enter);// Tabbing into a panel reads as arriving at it.\npanel.addEventListener(\"focusin\",enter);cleanups.push(()=>{panel.removeEventListener(\"mouseenter\",enter);panel.removeEventListener(\"focusin\",enter);});}const leave=()=>enabled&&rest();// Focus crossing from one panel to the next is not a departure,\n// so the band only rests when focus leaves the row altogether.\nconst focusLeave=event=>{const next=event.relatedTarget;if(next instanceof Node&&box.contains(next))return;leave();};box.addEventListener(\"mouseleave\",leave);box.addEventListener(\"focusout\",focusLeave);cleanups.push(()=>{box.removeEventListener(\"mouseleave\",leave);box.removeEventListener(\"focusout\",focusLeave);});apply();const observer=new ResizeObserver(apply);observer.observe(box);cleanups.push(()=>observer.disconnect());return()=>{for(const cleanup of cleanups)cleanup();for(const panel of panels){panel.style.transition=\"\";panel.style.flexGrow=\"\";}};});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}// A hover affordance is only an affordance where hovering is possible. Coarse\n// pointers fake it with a long press, which reads as a stuck state.\nfunction canHover(){if(typeof window===\"undefined\"||!window.matchMedia)return false;return window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches;}// Entrance language, shared by every list this file reveals. Long, flat,\n// ease-out only, and a short offset: the movement should read as the content\n// settling rather than as an animation being performed.\nconst REVEAL_DURATION=620;const REVEAL_STAGGER=60;const REVEAL_TRAVEL=16;const REVEAL_FAILSAFE=500;const REVEAL_FAILSAFE_TRIES=20;/**\n * Reveals `items` one after another the first time `scope` scrolls into view.\n *\n * This exists because Framer's own Appear effect cannot be used here. An\n * effect and an override on the same layer fight over the same element, and\n * Framer's stagger only offsets items inside a Collection List, so a plain\n * stack of rows would fade in as one block regardless.\n *\n * The hard rule the implementation follows: content must never be unreadable\n * because an animation did not run. Everything below is written so that the\n * failure mode is \"no entrance\", never \"no content\" — the reveal is skipped\n * outright without an observer or under reduced motion, a failsafe shows\n * anything that is on screen but still hidden, and the inline styles are\n * dropped once the entrance is over so the layer goes back to being Framer's.\n */function stageReveal(items,scope,travel=REVEAL_TRAVEL){if(!items.length||prefersReducedMotion()||typeof IntersectionObserver===\"undefined\"){return()=>{};}let revealed=false;let settle=0;let ticks=0;const clear=()=>{for(const el of items){el.style.transition=\"\";el.style.opacity=\"\";el.style.translate=\"\";el.style.willChange=\"\";}};const show=()=>{if(revealed)return;revealed=true;items.forEach((el,index)=>{const delay=index*REVEAL_STAGGER;el.style.transition=`opacity ${REVEAL_DURATION}ms ${EASE_OUT} ${delay}ms, `+`translate ${REVEAL_DURATION}ms ${EASE_OUT} ${delay}ms`;el.style.opacity=\"1\";el.style.translate=\"0 0\";});// Hand the rows back once the last one has landed. Leaving a\n// will-change behind would pin a compositor layer per row for the\n// rest of the session.\nsettle=window.setTimeout(clear,REVEAL_DURATION+items.length*REVEAL_STAGGER+120);};for(const el of items){el.style.opacity=\"0\";el.style.translate=`0 ${travel}px`;el.style.willChange=\"opacity, translate\";}// Threshold zero, so a single visible pixel is enough. A ratio-based\n// threshold is what makes an entrance fail permanently when some ancestor\n// clips the box, and a row that never appears is a far worse outcome than\n// a row that appears a little early.\nconst observer=new IntersectionObserver(entries=>{for(const entry of entries){if(entry.isIntersecting)show();}},{threshold:0,rootMargin:\"0px 0px -8% 0px\"});observer.observe(scope);// Belt and braces for the case the observer cannot report: if the list is\n// measurably on screen and still hidden, show it. Geometry is checked\n// rather than time alone, so a list far below the fold keeps its entrance\n// instead of being flushed by a timer.\nconst failsafe=window.setInterval(()=>{if(revealed||ticks++>REVEAL_FAILSAFE_TRIES){window.clearInterval(failsafe);return;}const box=scope.getBoundingClientRect();if(box.top<window.innerHeight&&box.bottom>0)show();},REVEAL_FAILSAFE);return()=>{observer.disconnect();window.clearInterval(failsafe);if(settle)window.clearTimeout(settle);clear();};}/**\n * Gives a plain stack or grid the staggered entrance its layers cannot carry\n * themselves.\n *\n * Attached to Collection Lists whose Appear effect had to be removed: an\n * effect on a list that also holds an override is the exact combination that\n * left these sections invisible in preview. The choreography is the same one\n * the rest of the page uses, so nothing reads as a different system.\n */export function withReveal(Component){return /*#__PURE__*/React.forwardRef(function WithReveal(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{const items=Array.from(box.children).filter(child=>child instanceof HTMLElement);return stageReveal(items,box);});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}// Accordion motion. Opening is a reveal and earns the slower settle; closing\n// is a dismissal and runs about a quarter faster, which is what makes the\n// control feel crisp rather than reluctant. The panel is already growing\n// before its text arrives, so the row reads as revealed, not stretched.\nconst PANEL_OPEN=340;const PANEL_CLOSE=260;const PANEL_FADE_IN=260;const PANEL_FADE_OUT=140;const PANEL_FADE_DELAY=60;const BODY_RISE=6;const BODY_RISE_DELAY=50;const MARK_DURATION=240;const SPIN_DURATION=380;const HOVER_DURATION=300;const QUESTION_HOVER=\"0.64\";// The project's colours, read from the tokens Framer publishes as custom\n// properties so a palette change on the canvas carries into the override.\n// The literals are the current token values and only stand in if the lookup\n// ever comes back empty.\nfunction token(id,fallback){if(typeof document===\"undefined\")return fallback;const value=getComputedStyle(document.documentElement).getPropertyValue(`--token-${id}`);return value.trim()||fallback;}const YELLOW_TOKEN=\"28aa6308-7028-4ad3-b839-87c20e970fd0\";const INK_TOKEN=\"edc18fb2-8f04-4c99-8800-a88973d5ba14\";const AQUA_TOKEN=\"01d6eced-cbc9-4a34-bd86-3d85b23e0d19\";const ACCENT_GREY_TOKEN=\"351f30e9-3fbd-4305-89f3-de1626605a8e\";// Pages with their own colour identity. The FAQ toggle hover follows the\n// page accent: cyan on Köp konst, blue on Konstuthyrning, black on the black\n// and white Konstnärer pages, yellow everywhere else. An /en prefix is ignored.\nconst BLUE_TOKEN=\"ef20cc1a-9d4b-4412-8ca4-1ab89a7f48a8\";const WHITE_TOKEN=\"8f2fe2bb-372b-4304-8b7e-5d03bb72251b\";function currentPath(){return typeof window===\"undefined\"?\"\":window.location.pathname.replace(/^\\/en(?=\\/|$)/,\"\");}function pageAccent(){// Madeleine 20 Oct: Q&A and accordion hovers are black on every page.\nreturn token(INK_TOKEN,\"rgb(0, 0, 0)\");}// Plus and minus bars on the black hover fill turn white.\nfunction pageBars(){return token(WHITE_TOKEN,\"rgb(255, 255, 255)\");}function named(root,name){for(const child of Array.from(root.children)){if(child instanceof HTMLElement&&child.getAttribute(\"data-framer-name\")===name){return child;}}return null;}// Ids have to be unique across the three breakpoint replicas Framer keeps in\n// the document at once, so they are handed out per mounted row rather than\n// derived from the row's index.\nlet accordionSeq=0;/**\n * Turns a Collection List of question rows into a working accordion.\n *\n * Layer names carry the contract: each row holds a Content group with a Head\n * and a Body, plus a Toggle holding a Bar H and a Bar V. Rows are found by\n * name, so reordering or restyling them on the canvas changes nothing here.\n *\n * Why this is code at all. Framer's own accordion recipe is two variants and\n * a click interaction, and for a static list that is the right answer. It\n * cannot serve this one: the properties panel has no way to emit a button\n * role, aria-expanded or aria-controls, and a Collection List renders every\n * row as an independent instance with no shared parent, so nothing on the\n * canvas can know which sibling to close. Everything that can stay on the\n * canvas has: the CMS binding, the type, the spacing, the responsive layout.\n * Code adds only the four things variants physically cannot express — the\n * ARIA contract, the keyboard contract, the height animation, and the shared\n * open state.\n *\n * The Head is the control: focusable, operable with Enter and Space, and\n * carrying aria-expanded and aria-controls. A closed Body is concealed rather\n * than merely flattened, so it leaves both the accessibility tree and the tab\n * order instead of being read out as ordinary text behind a zero-height box.\n */export function withAccordion(Component){return /*#__PURE__*/React.forwardRef(function WithAccordion(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{const reduced=prefersReducedMotion();const hoverable=canHover();const yellow=pageAccent();const ink=token(INK_TOKEN,\"rgb(0, 0, 0)\");const rows=Array.from(box.children).filter(child=>child instanceof HTMLElement&&(child.getAttribute(\"data-framer-name\")||\"\").startsWith(\"Row\"));const items=[];for(const row of rows){const content=named(row,\"Content\")??row.children[0];const toggle=named(row,\"Toggle\");if(!(content instanceof HTMLElement))continue;const body=named(content,\"Body\");if(!body)continue;const head=named(content,\"Head\")??content;// The button has to be the only element inside the heading,\n// so it moves down onto the question itself whenever the Head\n// holds nothing else. Where it holds more, the Head stays the\n// button and the heading role is simply not claimed.\nconst only=head.children.length===1&&head.firstElementChild instanceof HTMLElement?head.firstElementChild:null;items.push({row,head,trigger:only??head,body,bodyKids:Array.from(body.children).filter(child=>child instanceof HTMLElement),toggle,barV:toggle?named(toggle,\"Bar V\"):null,legacyMinus:toggle?named(toggle,\"Minus\"):null,legacyPlus:toggle?named(toggle,\"Plus\"):null,gap:getComputedStyle(body).paddingTop||\"0px\",open:items.length===0,timer:0});}if(!items.length)return;// Concealing a collapsed body is what takes it out of the reader\n// and out of the tab order. `display: none` and the `hidden`\n// attribute would both do that, but they also zero the\n// scrollHeight the opening animation is measured from, and neither\n// can be transitioned. Visibility keeps the box measurable, hides\n// its subtree from assistive technology and makes every descendant\n// unfocusable; `inert` rides along where it exists, and where it\n// does not, visibility has already done the work.\nconst conceal=(item,hidden)=>{const{body}=item;if(hidden){body.style.visibility=\"hidden\";body.setAttribute(\"aria-hidden\",\"true\");body.setAttribute(\"inert\",\"\");}else{body.style.visibility=\"\";body.removeAttribute(\"aria-hidden\");body.removeAttribute(\"inert\");}};// The mark: a plus whose upright stroke collapses into the\n// crossbar as the row opens, while the whole toggle turns a half\n// circle underneath it. A half turn rather than a quarter, so the\n// crossbar it leaves behind is still level and still reads as a\n// minus. Both are compositor-only properties written through the\n// standalone `scale` and `rotate` properties, which compose with\n// whatever transform the canvas already gave the layer instead of\n// overwriting it — so the worst this can do is not move.\nconst paintMark=item=>{if(item.barV){item.barV.style.scale=item.open?\"1 0\":\"1 1\";item.barV.style.opacity=item.open?\"0\":\"1\";}if(item.toggle){item.toggle.style.rotate=item.open?\"180deg\":\"0deg\";}// Older canvases stack a Minus over a Plus instead of drawing\n// two bars. Nothing to morph there, so they cross-fade.\nif(!item.barV){if(item.legacyMinus){item.legacyMinus.style.opacity=item.open?\"1\":\"0\";}if(item.legacyPlus){item.legacyPlus.style.opacity=item.open?\"0\":\"1\";}}};// Every property that is not the panel height belongs to exactly\n// one transition declaration, written once, a frame after the\n// rows have been put into their starting state. Writing it once\n// is what stops the hover and the open state from overwriting\n// each other's timing on the shared Toggle; writing it late is\n// what stops the first paint from animating on arrival.\nconst installTransitions=()=>{if(reduced)return;for(const item of items){if(item.barV){item.barV.style.transition=`scale ${MARK_DURATION}ms ${EASE_ENTER}, `+`opacity ${MARK_DURATION}ms ${EASE_ENTER}`;}for(const mark of[item.legacyMinus,item.legacyPlus]){if(mark){mark.style.transition=`opacity ${MARK_DURATION}ms ${EASE_ENTER}`;}}if(item.toggle){item.toggle.style.transition=`rotate ${SPIN_DURATION}ms ${EASE_ENTER}, `+`background-color ${HOVER_DURATION}ms ${EASE_HOVER}, `+`border-color ${HOVER_DURATION}ms ${EASE_HOVER}`;}item.trigger.style.transition=`opacity ${HOVER_DURATION}ms ${EASE_HOVER}`;item.row.style.transition=`border-color ${HOVER_DURATION}ms ${EASE_HOVER}`;}};const paint=(item,animate)=>{const{body,open}=item;body.style.overflow=\"hidden\";// No will-change here: height is a layout property, so the\n// browser cannot pre-optimise it, and the hint only pins a\n// layer for the rest of the session.\npaintMark(item);// An open row takes the hairline above it from line grey to\n// ink, so the list shows where the reader is without adding\n// anything that was not already drawn.\nitem.row.style.borderTopColor=open?ink:\"\";// Whatever the previous state was, this paint now owns the\n// row's height; an older settle timer must not land on top of\n// it and cut the transition short.\nif(item.timer){window.clearTimeout(item.timer);item.timer=0;}// Opening gives the body back before anything is measured: a\n// concealed box still has layout, but it should reach the\n// reader as the animation starts, not once it ends.\nif(open)conceal(item,false);if(!animate||reduced){body.style.transition=\"\";body.style.paddingTop=open?item.gap:\"0px\";body.style.height=open?\"auto\":\"0px\";body.style.opacity=open?\"1\":\"0\";for(const child of item.bodyKids){child.style.transition=\"\";child.style.translate=\"\";}if(!open)conceal(item,true);return;}const duration=open?PANEL_OPEN:PANEL_CLOSE;const fade=open?PANEL_FADE_IN:PANEL_FADE_OUT;const fadeDelay=open?PANEL_FADE_DELAY:0;// Height has to leave and return to a number for the browser\n// to interpolate it, so `auto` is only restored once settled.\nconst from=body.getBoundingClientRect().height;body.style.transition=\"none\";body.style.height=`${from}px`;void body.offsetHeight;const target=open?body.scrollHeight+(parseFloat(item.gap)||0):0;body.style.transition=`height ${duration}ms ${EASE_ENTER}, `+`padding-top ${duration}ms ${EASE_ENTER}, `+`opacity ${fade}ms linear ${fadeDelay}ms`;body.style.paddingTop=open?item.gap:\"0px\";body.style.height=`${target}px`;body.style.opacity=open?\"1\":\"0\";// The answer rises the last few pixels into place instead of\n// the Body moving, which would drag its clipping edge along\n// with it. Six pixels, not twenty: this is a control opening,\n// not a section arriving.\nfor(const child of item.bodyKids){child.style.transition=open?`translate ${duration}ms ${EASE_ENTER} ${BODY_RISE_DELAY}ms`:`translate ${PANEL_FADE_OUT}ms ${EASE_HOVER}`;child.style.translate=open?\"0 0\":`0 ${BODY_RISE}px`;}// One settle timer per row, always the current one, always\n// cancellable. It hands an open row back to `auto` so it can\n// reflow, and only conceals a closed row once it has finished\n// shrinking, so the text never disappears mid-animation.\nitem.timer=window.setTimeout(()=>{item.timer=0;if(item.open)body.style.height=\"auto\";else conceal(item,true);},duration);};const cleanups=[];// One row open at a time. An FAQ is a reference list rather than\n// a comparison table, and single-open keeps the page height and\n// the reader's scroll position honest while they work down it.\nconst setOpen=(item,next)=>{if(item.open===next)return;// Focus cannot be left inside a box that is about to be\n// concealed, so it returns to the control that closed it.\nif(!next&&item.body.contains(document.activeElement)){item.trigger.focus();}if(next){for(const other of items){if(other===item||!other.open)continue;if(other.body.contains(document.activeElement)){other.trigger.focus();}other.open=false;other.trigger.setAttribute(\"aria-expanded\",\"false\");paint(other,true);}}item.open=next;item.trigger.setAttribute(\"aria-expanded\",String(next));paint(item,true);};for(const item of items){const{row,head,trigger,body,toggle}=item;const key=`aa-faq-${++accordionSeq}`;const ownsTriggerId=!trigger.id;const ownsBodyId=!body.id;if(ownsTriggerId)trigger.id=`${key}-trigger`;if(ownsBodyId)body.id=`${key}-panel`;// A native <button> cannot legally wrap the paragraphs Framer\n// renders inside a Head, so the semantics are put on the\n// frames instead: a heading that holds nothing but the\n// control, and a control that carries its state and the panel\n// it owns. The name comes from the question's own text, which\n// is exactly what a sighted reader sees: nothing invented,\n// nothing hidden.\nconst claimsHeading=trigger!==head;if(claimsHeading){head.setAttribute(\"role\",\"heading\");head.setAttribute(\"aria-level\",\"3\");}trigger.setAttribute(\"role\",\"button\");trigger.setAttribute(\"tabindex\",\"0\");trigger.setAttribute(\"aria-controls\",body.id);trigger.setAttribute(\"aria-expanded\",String(item.open));body.setAttribute(\"role\",\"region\");body.setAttribute(\"aria-labelledby\",trigger.id);// The Toggle is a decorative mark; aria-expanded on the\n// control already says open or closed.\nif(toggle)toggle.setAttribute(\"aria-hidden\",\"true\");const previousCursor=row.style.cursor;row.style.cursor=\"pointer\";// A row that is dragged over while being read should not turn\n// into a text selection, and a tap should not flash a grey\n// box over the whole hairline.\nrow.style.userSelect=\"none\";row.style.webkitTapHighlightColor=\"transparent\";paint(item,false);const onClick=event=>{// Let anything genuinely clickable inside the row win.\nconst target=event.target;if(target instanceof HTMLElement&&target.closest(\"a, button\")){return;}setOpen(item,!item.open);};const onKey=event=>{// Enter and Space, and nothing else. Arrow-key roving\n// focus was dropped from the accordion pattern years ago;\n// adding it back makes this behave unlike every other\n// accordion the reader has used.\nif(event.key!==\"Enter\"&&event.key!==\" \"&&event.key!==\"Spacebar\"){return;}// Space would otherwise page the document.\nevent.preventDefault();setOpen(item,!item.open);};// Nothing in the project authors a focus ring, so a control\n// this override creates has to bring its own. Keyboard only:\n// the pointer already has the cursor and the hover.\nconst onFocus=()=>{if(!keyboardFocus(trigger))return;trigger.style.outline=\"2px solid currentColor\";trigger.style.outlineOffset=\"6px\";trigger.style.borderRadius=\"12px\";};const onBlur=()=>{trigger.style.outline=\"\";trigger.style.outlineOffset=\"\";trigger.style.borderRadius=\"\";};// Hover is owned here rather than on the canvas so that the\n// whole row lights the mark, not just the forty-two pixels of\n// the toggle itself. Fine pointers only: a touch device fakes\n// hover with a long press and would leave the row stuck lit.\nconst onEnter=()=>{item.trigger.style.opacity=QUESTION_HOVER;if(!item.toggle)return;item.toggle.style.backgroundColor=yellow;item.toggle.style.borderColor=ink;const bars=pageBars();if(bars){for(const bar of[named(item.toggle,\"Bar H\"),item.barV])if(bar)bar.style.backgroundColor=bars;}};const onLeave=()=>{item.trigger.style.opacity=\"\";if(!item.toggle)return;item.toggle.style.backgroundColor=\"\";item.toggle.style.borderColor=\"\";for(const bar of[named(item.toggle,\"Bar H\"),item.barV])if(bar)bar.style.backgroundColor=\"\";};row.addEventListener(\"click\",onClick);trigger.addEventListener(\"keydown\",onKey);trigger.addEventListener(\"focus\",onFocus);trigger.addEventListener(\"blur\",onBlur);if(hoverable){row.addEventListener(\"pointerenter\",onEnter);row.addEventListener(\"pointerleave\",onLeave);}cleanups.push(()=>{row.removeEventListener(\"click\",onClick);trigger.removeEventListener(\"keydown\",onKey);trigger.removeEventListener(\"focus\",onFocus);trigger.removeEventListener(\"blur\",onBlur);row.removeEventListener(\"pointerenter\",onEnter);row.removeEventListener(\"pointerleave\",onLeave);for(const attribute of[\"role\",\"tabindex\",\"aria-controls\",\"aria-expanded\"]){trigger.removeAttribute(attribute);}if(claimsHeading){head.removeAttribute(\"role\");head.removeAttribute(\"aria-level\");}body.removeAttribute(\"role\");body.removeAttribute(\"aria-labelledby\");if(toggle){toggle.removeAttribute(\"aria-hidden\");toggle.style.rotate=\"\";toggle.style.backgroundColor=\"\";toggle.style.borderColor=\"\";toggle.style.transition=\"\";}if(item.barV){item.barV.style.scale=\"\";item.barV.style.opacity=\"\";item.barV.style.transition=\"\";}if(ownsTriggerId)trigger.removeAttribute(\"id\");if(ownsBodyId)body.removeAttribute(\"id\");onBlur();onLeave();row.style.cursor=previousCursor;row.style.userSelect=\"\";row.style.borderTopColor=\"\";row.style.transition=\"\";});}const install=requestAnimationFrame(installTransitions);cleanups.push(()=>cancelAnimationFrame(install));// An open row is left on `auto` so it follows its own content.\n// This only has to step in when a row is holding a pixel height,\n// and never while a transition is still running.\nlet syncFrame=0;const syncHeights=()=>{if(syncFrame)return;syncFrame=requestAnimationFrame(()=>{syncFrame=0;for(const item of items){if(!item.open||item.timer)continue;// No-op guard, as in withPanelBand: writing a value\n// that is already there would feed the observer below\n// straight back into itself.\nif(item.body.style.height===\"auto\")continue;item.body.style.height=\"auto\";}});};// Coalesced to one frame: dragging a window edge used to relayout\n// every open body on every mouse move.\nwindow.addEventListener(\"resize\",syncHeights,{passive:true});cleanups.push(()=>{window.removeEventListener(\"resize\",syncHeights);if(syncFrame)cancelAnimationFrame(syncFrame);});// Window resize misses the common case, a web font landing and\n// reflowing the body copy. The observer watches what is inside\n// each Body rather than the Body itself, whose height this effect\n// writes, so it cannot observe its own output.\nconst observer=new ResizeObserver(syncHeights);for(const item of items){for(const child of item.bodyKids)observer.observe(child);}cleanups.push(()=>observer.disconnect());// The list lost its Appear effect: an entrance and an override on\n// the same layer are the exact pair that left these sections\n// blank in preview. The entrance is owned here instead, so there\n// is one owner and one failure mode, and that failure mode is a\n// row without an entrance rather than a row without an answer.\ncleanups.push(stageReveal(rows,box));return()=>{for(const cleanup of cleanups)cleanup();for(const item of items){if(item.timer)window.clearTimeout(item.timer);item.timer=0;item.body.style.height=\"\";item.body.style.opacity=\"\";item.body.style.transition=\"\";item.body.style.paddingTop=\"\";item.body.style.overflow=\"\";for(const child of item.bodyKids){child.style.translate=\"\";child.style.transition=\"\";}conceal(item,false);}};});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}/* ------------------------------------------------------------ collection pin */// The pin itself is `position: sticky`, declared on the canvas. Nothing in here\n// drives it, which is exactly what keeps it as smooth as the browser's own\n// scrolling: the artworks stay in normal document flow, so the compositor, the\n// scrollbar and the focus ring all read one number instead of three.\n//\n// This override supplies only what the canvas cannot express: the viewport unit\n// the pinned frame has to be sized in, the progress affordance, the snapping and\n// keyboard contract the touch rail needs once its scrollbar is hidden, and a\n// slow background drift that gives the pinned frame some depth.\n// Small viewport height, deliberately not dynamic. `dvh` re-resolves while a\n// mobile toolbar collapses, which would resize the pinned frame mid gesture and\n// slide the release point out from under the reader.\nconst PIN_UNIT=\"100svh\";// The background overhangs its frame by 6%, so it can drift half of that either\n// way and still never expose an edge.\nconst DRIFT_TRAVEL=20;const ARROW_TRAVEL=6;const ARROW_DURATION=420;const RAIL_LABEL=\"Kollektionen\";function descendant(root,name){const found=root.querySelector('[data-framer-name=\"'+name+'\"]');return found instanceof HTMLElement?found:null;}function descendants(root,prefix){const out=[];const found=root.querySelectorAll('[data-framer-name^=\"'+prefix+'\"]');for(let i=0;i<found.length;i++){const el=found[i];if(el instanceof HTMLElement)out.push(el);}return out;}// Only the text node is rewritten, never the markup around it, so the type\n// style and every wrapper Framer put there survive untouched.\nfunction firstText(root){const walker=document.createTreeWalker(root,NodeFilter.SHOW_TEXT);const node=walker.nextNode();return node instanceof Text?node:null;}function pad(value){return value<10?\"0\"+value:String(value);}function supportsSmallViewport(){return typeof CSS!==\"undefined\"&&typeof CSS.supports===\"function\"&&CSS.supports(\"height\",\"100svh\");}/**\n * Wires the pinned Collection section.\n *\n * Attached to the section itself. The layer names below are the contract and\n * the override maps them one to one, so renaming any of them silently turns the\n * behaviour off rather than breaking the page: `Stage` (the sticky frame),\n * `Background`, `Rail` (the Collection List), `Artwork *` (its rows, each with\n * an `Arrow`), and `Progress` > `Count` + `Progress Fill`.\n *\n * Whether a breakpoint pins at all is a canvas decision, read back off `Stage`'s\n * computed position rather than restated here as a media query that could drift\n * away from it. Desktop pins; tablet and phone keep the native sideways swipe,\n * because hijacking a touch scroll fights the browser's own toolbar gesture.\n */export function withPinnedCollection(Component){return /*#__PURE__*/React.forwardRef(function WithPinnedCollection(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{const stage=descendant(box,\"Stage\");const rail=descendant(box,\"Rail\");if(!stage||!rail)return;const background=descendant(box,\"Background\");const fillBar=descendant(box,\"Progress Fill\");const progress=descendant(box,\"Progress\");const countBox=descendant(box,\"Count\");const count=countBox?firstText(countBox):null;const countOriginal=count?count.nodeValue:null;// Optional split counter: a large index numeral and a quiet total.\nconst indexBox=descendant(box,\"Count Index\");const totalBox=descendant(box,\"Count Total\");const indexText=indexBox?firstText(indexBox):null;const totalText=totalBox?firstText(totalBox):null;const indexOriginal=indexText?indexText.nodeValue:null;const totalOriginal=totalText?totalText.nodeValue:null;const reduced=prefersReducedMotion();const smallViewport=supportsSmallViewport();// The affordance restates the scroll position. The scrollbar, the\n// focus order and the artwork numbering already carry that for\n// assistive tech, so announcing it a fourth time is noise.\nif(progress)progress.setAttribute(\"aria-hidden\",\"true\");let items=[];let arrows=[];// A Collection List can mount a frame after the section around it,\n// so the rows are looked up again on any pass that has none rather\n// than being resolved once and given up on.\nconst collect=()=>{items=descendants(rail,\"Artwork\");arrows=items.map(item=>descendant(item,\"Arrow\"));if(!reduced){for(const arrow of arrows){if(!arrow)continue;arrow.style.transition=\"translate \"+ARROW_DURATION+\"ms \"+EASE_ENTER;}}return items.length>0;};const applyMode=pinning=>{if(pinning){if(smallViewport)stage.style.height=PIN_UNIT;rail.style.scrollSnapType=\"\";rail.style.overscrollBehaviorInline=\"\";rail.removeAttribute(\"tabindex\");rail.removeAttribute(\"role\");rail.removeAttribute(\"aria-label\");for(const item of items)item.style.scrollSnapAlign=\"\";return;}stage.style.height=\"\";// A hidden scrollbar is still a scroll container. Without a\n// tabindex and a name it is unreachable by keyboard in Safari\n// and unaddressable by voice control everywhere.\nrail.setAttribute(\"tabindex\",\"0\");rail.setAttribute(\"role\",\"region\");rail.setAttribute(\"aria-label\",RAIL_LABEL);// `proximity`, never `mandatory`: a CMS row whose credit line\n// wraps can outgrow the viewport, and mandatory snapping would\n// put that overflow out of reach.\nrail.style.scrollSnapType=\"x proximity\";rail.style.overscrollBehaviorInline=\"contain\";for(const item of items)item.style.scrollSnapAlign=\"start\";};let pinned=null;let active=-1;let frame=0;const paint=()=>{frame=0;if(!items.length&&!collect())return;// Every measurement is taken before anything is written, so a\n// scroll frame costs one layout pass rather than one per write.\nconst pinning=getComputedStyle(stage).position===\"sticky\";let ratio=0;if(pinning){const rect=box.getBoundingClientRect();const span=rect.height-window.innerHeight;ratio=span>0?-rect.top/span:0;}else{const span=rail.scrollWidth-rail.clientWidth;ratio=span>0?rail.scrollLeft/span:0;}ratio=Math.min(1,Math.max(0,ratio));// The counter reads off the same number as the rule, so the\n// two can never disagree, the count always opens on 01 and\n// always lands on the last row. Picking the row nearest the\n// middle of the frame instead looks equivalent and is not: at\n// rest, with two rows in view, it opens on 02, and at the end\n// of the travel the last row's leading edge never reaches the\n// middle, so 03 never arrives at all.\nconst nearest=items.length>1?Math.round(ratio*(items.length-1)):0;if(pinning!==pinned){pinned=pinning;applyMode(pinning);}if(fillBar)fillBar.style.scale=ratio.toFixed(4)+\" 1\";if(background&&!reduced){background.style.translate=\"0 \"+((.5-ratio)*DRIFT_TRAVEL).toFixed(2)+\"px\";}if(nearest===active)return;active=nearest;if(count){count.nodeValue=pad(active+1)+\" / \"+pad(items.length);}if(totalText)totalText.nodeValue=\"/ \"+pad(items.length);if(indexText&&indexBox){const next=pad(active+1);if(indexText.nodeValue!==next){indexText.nodeValue=next;if(!reduced&&typeof indexBox.animate===\"function\"){indexBox.animate([{opacity:0,transform:\"translateY(32%)\"},{opacity:1,transform:\"translateY(0)\"}],{duration:620,easing:EASE_ENTER});}}}if(reduced)return;for(let i=0;i<arrows.length;i++){const arrow=arrows[i];if(!arrow)continue;arrow.style.translate=i===active?ARROW_TRAVEL+\"px 0\":\"0px 0\";}};const schedule=()=>{if(!frame)frame=requestAnimationFrame(paint);};// The bar is emptied before the first measurement so a run that\n// never gets one leaves an empty track rather than a full one.\nif(fillBar)fillBar.style.scale=\"0 1\";collect();paint();window.addEventListener(\"scroll\",schedule,{passive:true});window.addEventListener(\"resize\",schedule);rail.addEventListener(\"scroll\",schedule,{passive:true});let observer=null;if(typeof ResizeObserver!==\"undefined\"){observer=new ResizeObserver(schedule);observer.observe(box);observer.observe(rail);}return()=>{if(frame)cancelAnimationFrame(frame);window.removeEventListener(\"scroll\",schedule);window.removeEventListener(\"resize\",schedule);rail.removeEventListener(\"scroll\",schedule);if(observer)observer.disconnect();stage.style.height=\"\";rail.style.scrollSnapType=\"\";rail.style.overscrollBehaviorInline=\"\";rail.removeAttribute(\"tabindex\");rail.removeAttribute(\"role\");rail.removeAttribute(\"aria-label\");if(progress)progress.removeAttribute(\"aria-hidden\");if(fillBar)fillBar.style.scale=\"\";if(background)background.style.translate=\"\";if(count&&countOriginal!=null)count.nodeValue=countOriginal;if(indexText&&indexOriginal!=null)indexText.nodeValue=indexOriginal;if(totalText&&totalOriginal!=null)totalText.nodeValue=totalOriginal;for(const item of items)item.style.scrollSnapAlign=\"\";for(const arrow of arrows){if(!arrow)continue;arrow.style.translate=\"\";arrow.style.transition=\"\";}};});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}/* ------------------------------------------------------------ why cards */// The line under each numeral is the section's only graphic device, so it is\n// the only thing that moves: it draws itself in behind the card's own\n// entrance and darkens to ink under the pointer. 720ms is long enough for a\n// 550px line to read as being drawn rather than as appearing.\nconst RULE_DURATION=720;const RULE_LEAD=240;/**\n * The number format has to follow the page, not the build. Framer stamps\n * the active locale on the document element, so a counted stat groups its\n * digits the same way the surrounding copy does.\n */function documentNumberLocale(){if(typeof document===\"undefined\")return\"sv-SE\";const lang=document.documentElement.getAttribute(\"lang\");return lang&&lang.trim()?lang.trim():\"sv-SE\";}const RULE_STEP=80;const LINE_TOKEN=\"351f30e9-3fbd-4305-89f3-de1626605a8e\";/**\n * Micro-interactions for the \"Varför Artaround\" grid, applied once to the\n * grid rather than to each card.\n *\n * The cards keep their own appear effects; this adds only what an appear\n * effect cannot express — a line that grows from its left edge, and a hover\n * state shared by the whole card rather than by the image alone.\n */export function withWhyCard(Component){return /*#__PURE__*/React.forwardRef(function WithWhyCard(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{const reduced=prefersReducedMotion();const hoverable=canHover();const line=token(LINE_TOKEN,\"rgb(214, 214, 214)\");const ink=token(INK_TOKEN,\"rgb(0, 0, 0)\");const cards=Array.from(box.children).filter(child=>child instanceof HTMLElement&&(child.getAttribute(\"data-framer-name\")||\"\").startsWith(\"Card\"));if(!cards.length)return;const cleanups=[];cards.forEach((card,index)=>{const row=named(card,\"Index\");const rule=row?named(row,\"Rule\"):null;if(!rule)return;// `scale` is the standalone property, not `transform`, so it\n// composes with whatever transform Framer already wrote on the\n// layer instead of replacing it.\nrule.style.transformOrigin=\"left center\";if(!reduced){rule.style.scale=\"0 1\";rule.style.willChange=\"scale\";}// The declaration is installed a frame after the initial paint\n// so the starting width is the element's first painted state\n// and cannot animate in from full width on mount.\nlet install=requestAnimationFrame(()=>{install=0;const delay=RULE_LEAD+index*RULE_STEP;rule.style.transition=reduced?`background-color ${HOVER_DURATION}ms ${EASE_HOVER}`:`scale ${RULE_DURATION}ms ${EASE_ENTER} ${delay}ms, `+`background-color ${HOVER_DURATION}ms ${EASE_HOVER}`;});let observer=null;let release=0;if(!reduced){observer=new IntersectionObserver(entries=>{if(!entries.some(entry=>entry.isIntersecting))return;rule.style.scale=\"1 1\";release=window.setTimeout(()=>{release=0;rule.style.willChange=\"\";},RULE_LEAD+index*RULE_STEP+RULE_DURATION);observer?.disconnect();observer=null;},{threshold:.15});observer.observe(card);}const enter=()=>{rule.style.backgroundColor=ink;};const leave=()=>{rule.style.backgroundColor=line;};const focusLeave=event=>{const next=event.relatedTarget;if(next instanceof Node&&card.contains(next))return;leave();};if(hoverable){card.addEventListener(\"mouseenter\",enter);card.addEventListener(\"mouseleave\",leave);}card.addEventListener(\"focusin\",enter);card.addEventListener(\"focusout\",focusLeave);cleanups.push(()=>{if(install)cancelAnimationFrame(install);if(release)window.clearTimeout(release);observer?.disconnect();if(hoverable){card.removeEventListener(\"mouseenter\",enter);card.removeEventListener(\"mouseleave\",leave);}card.removeEventListener(\"focusin\",enter);card.removeEventListener(\"focusout\",focusLeave);rule.style.transition=\"\";rule.style.transformOrigin=\"\";rule.style.scale=\"\";rule.style.willChange=\"\";rule.style.backgroundColor=\"\";});});return()=>{for(const dispose of cleanups)dispose();};});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}/* ----------------------------------------------------------- hero flip deck */// Entrance values. The stagger is a whisper, not a queue: two cards 90ms apart\n// read as one gesture arriving, where 120ms+ reads as two separate events.\nconst DECK_LEAD=140;const DECK_STEP=90;const DECK_RISE=20;const DECK_ENTER=700;// The flip. `EASE_FLIP` is the curve Apple uses for sheets and card surfaces:\n// it commits immediately and then spends most of its time settling, so the\n// card lands flat instead of arriving and stopping. It has no overshoot, which\n// matters here — a rotation that overshoots reads as a wobble, not as spring.\nconst EASE_FLIP=\"cubic-bezier(0.32, 0.72, 0, 1)\";const FLIP_DURATION=560;const FLIP_LIFT=6;// Perspective is derived from the card's own width rather than fixed, so the\n// depth of the turn looks identical at 216px on desktop and 165px on a phone.\n// A fixed value would make the small card look almost orthographic.\nconst PERSPECTIVE_RATIO=2.6;const PERSPECTIVE_MIN=520;const PERSPECTIVE_MAX=1e3;// The counter drift is deliberately tiny. It exists so the two cards do not\n// read as one rigid block while the page moves, not as a parallax effect: at\n// 10px it is felt rather than seen, and it can never separate the pair enough\n// to collide with the copy beside them.\nconst DRIFT_MAX=10;function canHoverPointer(){if(typeof window===\"undefined\"||!window.matchMedia)return true;return window.matchMedia(\"(hover: hover) and (pointer: fine)\").matches;}/**\n * Two portrait cards beside a hero headline: they arrive staggered, drift\n * against each other as the page scrolls, and flip in 3D to a back face.\n *\n * Framer can express a hover variant, but not a real two sided card, so the\n * turn has to come from code. What stays on the canvas is everything else: the\n * photographs, the type, the colours, the radius and the responsive layout.\n *\n * Layer-name contract, mapped 1:1 — renaming a layer disables its behaviour:\n *   Deck (this layer) -> `Card *` -> `Front` and `Back`\n *\n * Two structural decisions are load bearing, and both exist to stop the flip\n * from fighting itself:\n *\n * 1. **The faces rotate, not the card.** Each card owns its own `perspective`\n *    and the two faces turn inside it. Putting one perspective on the deck\n *    instead gives both cards a shared vanishing point, so a card away from\n *    that point slides sideways as it turns — the single biggest source of\n *    \"not smooth\" in a flip deck.\n *\n * 2. **Hover is hit tested against the deck, never bound to the card.** A card\n *    that is its own hover target and also the thing that moves will oscillate:\n *    the turn narrows its painted box, the pointer falls outside, `mouseleave`\n *    fires, it turns back, the pointer is inside again. That loop is what makes\n *    a flip card appear to flip repeatedly on a single hover. The deck never\n *    transforms, so tracking the pointer there and testing it against each\n *    card's untransformed box makes the oscillation structurally impossible.\n *\n * The card must not clip (clipping would flatten the turn); each face clips\n * itself instead. Neither face may carry an appear effect: the entrance below\n * owns opacity, and two owners on one property cancel each other.\n */export function withFlipDeck(Component){return /*#__PURE__*/React.forwardRef(function WithFlipDeck(props,ref){const host=React.useRef(null);useWiredBox(host,box=>{const reduced=prefersReducedMotion();const hoverable=canHoverPointer();const cards=Array.from(box.children).filter(child=>child instanceof HTMLElement&&(child.getAttribute(\"data-framer-name\")||\"\").startsWith(\"Card\"));if(!cards.length)return;const cleanups=[];// Drift is read once per frame for the whole deck rather than per\n// card, so the two cards can never sample different scroll offsets\n// and shear apart.\nconst drifters=[];// One record per card, for the deck level pointer hit test.\nconst units=[];const resizers=[];cards.forEach((card,index)=>{const front=named(card,\"Front\");const back=named(card,\"Back\");if(!front||!back)return;// A clipping card would flatten its own turn and paint the\n// reversed face; the faces carry the radius instead.\ncard.style.overflow=\"visible\";for(const face of[front,back]){face.style.backfaceVisibility=\"hidden\";face.style.webkitBackfaceVisibility=\"hidden\";face.style.transformOrigin=\"50% 50%\";}const applyPerspective=()=>{const width=card.offsetWidth||0;if(!width)return;const depth=Math.round(Math.max(PERSPECTIVE_MIN,Math.min(PERSPECTIVE_MAX,width*PERSPECTIVE_RATIO)));card.style.perspective=`${depth}px`;};applyPerspective();resizers.push(applyPerspective);let hovered=false;let focused=false;// `latched` is a click or a keypress: it survives the pointer\n// leaving. `suppressed` is what makes a second click read as\n// \"put it back\" rather than doing nothing — without it, closing\n// a latched card while still hovering would immediately reopen.\nlet latched=false;let suppressed=false;let armed=false;let drift=0;const direction=index%2===0?1:-1;const isFlipped=()=>latched||(hovered||focused)&&!suppressed;// The faces own the turn and the lift. The card owns only the\n// drift — which keeps the card's box exactly equal to its\n// layout box plus a number this code already knows, and that is\n// what lets the hit test below stay honest while a card moves.\nconst paintFaces=()=>{const on=isFlipped();if(reduced){front.style.opacity=on?\"0\":\"1\";back.style.opacity=on?\"1\":\"0\";return;}const lift=on?`0px -${FLIP_LIFT}px`:\"0px 0px\";front.style.rotate=`y ${on?180:0}deg`;back.style.rotate=`y ${on?360:180}deg`;front.style.translate=lift;back.style.translate=lift;};const paintDrift=()=>{card.style.translate=`0px ${drift.toFixed(2)}px`;};// Resting state, written before any transition exists so it\n// cannot animate on load.\nif(!reduced){front.style.rotate=\"y 0deg\";back.style.rotate=\"y 180deg\";}else{front.style.opacity=\"1\";back.style.opacity=\"0\";}// The entrance never writes a hidden resting state. It plays\n// through the Web Animations API with `fill: \"backwards\"`, so\n// the start frame exists only while the animation is scheduled\n// and the card's own style stays fully visible throughout. If\n// the observer never fires, if the page is being rasterised,\n// if `animate` is missing, the card is simply already there.\n// Nothing on this site may need JavaScript to become readable.\n//\n// It animates `transform` and `opacity` only. No entrance tilt:\n// an X rotation on the element that owns the perspective for a\n// Y rotation makes the card yaw as it settles.\nconst delay=DECK_LEAD+index*DECK_STEP;let observer=null;let guardTimer=0;const play=()=>{observer?.disconnect();observer=null;if(reduced||typeof card.animate!==\"function\")return;// A hidden tab cannot advance an animation, and a scheduled\n// one holds its `backwards` start frame — opacity 0 — for as\n// long as that lasts. Nobody is watching a hidden tab, so\n// there is nothing worth animating.\nif(typeof document!==\"undefined\"&&document.visibilityState===\"hidden\"){return;}try{const entrance=card.animate([{opacity:0,transform:`translateY(${DECK_RISE}px)`},{opacity:1,transform:\"translateY(0px)\"}],{duration:DECK_ENTER,delay,easing:EASE_ENTER,fill:\"backwards\"});// Whatever happens next — a throttled timeline, a\n// rasteriser that never advances one, an engine that\n// silently stalls — the card is not allowed to stay\n// invisible. Cancelling drops the effect entirely and\n// leaves the card at its own, visible, resting style.\nguardTimer=window.setTimeout(()=>{guardTimer=0;if(entrance.playState!==\"finished\")entrance.cancel();},delay+DECK_ENTER+400);entrance.finished.then(()=>{window.clearTimeout(guardTimer);guardTimer=0;}).catch(()=>{});}catch{// An engine without the Web Animations API just shows it.\n}};const arm=()=>{if(armed)return;armed=true;for(const face of[front,back]){face.style.transition=reduced?`opacity ${HOVER_DURATION}ms ${EASE_HOVER}`:`rotate ${FLIP_DURATION}ms ${EASE_FLIP}, translate ${FLIP_DURATION}ms ${EASE_FLIP}`;face.style.willChange=\"rotate, translate\";}paintFaces();};// Arming runs off a timer rather than off the entrance\n// finishing, so a card becomes interactive even if it never\n// scrolled into view and the entrance never played.\nconst armTimer=window.setTimeout(arm,delay+DECK_ENTER+60);observer=new IntersectionObserver(entries=>{if(!entries.some(entry=>entry.isIntersecting))return;play();},{threshold:.2});observer.observe(card);const apply=()=>{const on=isFlipped();card.setAttribute(\"aria-pressed\",String(on));// The face that is turned away must leave the reading and\n// tab order, not merely be invisible.\nfront.toggleAttribute(\"inert\",on);back.toggleAttribute(\"inert\",!on);front.setAttribute(\"aria-hidden\",String(on));back.setAttribute(\"aria-hidden\",String(!on));if(armed)paintFaces();};back.toggleAttribute(\"inert\",true);back.setAttribute(\"aria-hidden\",\"true\");card.setAttribute(\"role\",\"button\");card.setAttribute(\"tabindex\",\"0\");card.setAttribute(\"aria-pressed\",\"false\");card.style.cursor=\"pointer\";card.style.outlineOffset=\"4px\";const setHover=next=>{if(hovered===next)return;hovered=next;// Leaving clears the suppression, so coming back to a card\n// you had clicked shut turns it again.\nif(!next)suppressed=false;apply();};// A click toggles whatever you are currently looking at and\n// makes that stick — the same gesture whether the card was\n// already turned by hover or not.\nconst toggle=()=>{if(isFlipped()){latched=false;suppressed=true;}else{latched=true;suppressed=false;}apply();};const onClick=()=>toggle();const onKeyDown=event=>{if(event.key!==\"Enter\"&&event.key!==\" \")return;event.preventDefault();toggle();};const onFocus=()=>{if(!keyboardFocus(card))return;focused=true;apply();};const onBlur=event=>{const next=event.relatedTarget;if(next instanceof Node&&card.contains(next))return;focused=false;suppressed=false;apply();};card.addEventListener(\"click\",onClick);card.addEventListener(\"keydown\",onKeyDown);card.addEventListener(\"focus\",onFocus);card.addEventListener(\"blur\",onBlur);units.push({card,drift:()=>drift,hover:setHover,box:{left:0,right:-1,top:0,bottom:-1}});if(!reduced){drifters.push(progress=>{const next=progress*DRIFT_MAX*direction;if(Math.abs(next-drift)<.05)return;drift=next;paintDrift();});}cleanups.push(()=>{window.clearTimeout(armTimer);if(guardTimer)window.clearTimeout(guardTimer);observer?.disconnect();card.removeEventListener(\"click\",onClick);card.removeEventListener(\"keydown\",onKeyDown);card.removeEventListener(\"focus\",onFocus);card.removeEventListener(\"blur\",onBlur);card.removeAttribute(\"role\");card.removeAttribute(\"tabindex\");card.removeAttribute(\"aria-pressed\");for(const face of[front,back]){face.removeAttribute(\"inert\");face.removeAttribute(\"aria-hidden\");face.style.backfaceVisibility=\"\";face.style.transformOrigin=\"\";face.style.transition=\"\";face.style.willChange=\"\";face.style.opacity=\"\";face.style.rotate=\"\";face.style.translate=\"\";}card.style.cssText=\"\";});});// Hover lives on the deck. The deck never transforms, and a card's\n// only transform is the drift this code sets, so subtracting it\n// gives the card's true layout box — a hit region that does not\n// move while the card turns, which is the whole point.\n//\n// Those boxes are cached and refreshed with the drift, once per\n// scroll frame. A pointer handler that measured instead would force\n// a layout read on every mouse move, in the middle of a running\n// transition, which is the classic way to make a smooth animation\n// stutter under the cursor.\nconst refreshBoxes=()=>{for(const unit of units){const rect=unit.card.getBoundingClientRect();const offset=unit.drift();unit.box.left=rect.left;unit.box.right=rect.right;unit.box.top=rect.top-offset;unit.box.bottom=unit.box.top+rect.height;}};const onPointerMove=event=>{const x=event.clientX;const y=event.clientY;let hit=-1;for(let index=0;index<units.length;index++){const area=units[index].box;if(x>=area.left&&x<=area.right&&y>=area.top&&y<=area.bottom){hit=index;break;}}for(let index=0;index<units.length;index++){units[index].hover(index===hit);}};const onPointerLeave=()=>{for(const unit of units)unit.hover(false);};if(hoverable){box.addEventListener(\"pointermove\",onPointerMove);box.addEventListener(\"pointerleave\",onPointerLeave);}const onResize=()=>{for(const resize of resizers)resize();refreshBoxes();};window.addEventListener(\"resize\",onResize);const disposePointer=()=>{if(hoverable){box.removeEventListener(\"pointermove\",onPointerMove);box.removeEventListener(\"pointerleave\",onPointerLeave);}window.removeEventListener(\"resize\",onResize);};// Progress is measured against the deck's own position in the\n// viewport, never against page scroll, so it cannot accumulate the\n// way a page keyed scroll speed does. This loop also refreshes the\n// hover boxes, so the two can never disagree about where a card is.\nlet frame=0;let visible=false;const measure=()=>{frame=0;const rect=box.getBoundingClientRect();const viewport=window.innerHeight||1;const centre=rect.top+rect.height/2;const raw=(viewport/2-centre)/viewport;const progress=Math.max(-1,Math.min(1,raw*2));for(const move of drifters)move(progress);refreshBoxes();};const schedule=()=>{if(frame||!visible)return;frame=requestAnimationFrame(measure);};const gate=new IntersectionObserver(entries=>{visible=entries.some(entry=>entry.isIntersecting);if(visible)schedule();});gate.observe(box);window.addEventListener(\"scroll\",schedule,{passive:true});window.addEventListener(\"resize\",schedule);measure();return()=>{if(frame)cancelAnimationFrame(frame);gate.disconnect();window.removeEventListener(\"scroll\",schedule);window.removeEventListener(\"resize\",schedule);disposePointer();for(const dispose of cleanups)dispose();};});return /*#__PURE__*/_jsx(\"div\",{ref:host,style:hostStyle(),children:/*#__PURE__*/_jsx(Component,{ref:ref,...props})});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withFlipDeck\":{\"type\":\"reactHoc\",\"name\":\"withFlipDeck\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withAccordion\":{\"type\":\"reactHoc\",\"name\":\"withAccordion\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withWhyCard\":{\"type\":\"reactHoc\",\"name\":\"withWhyCard\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPanelBand\":{\"type\":\"reactHoc\",\"name\":\"withPanelBand\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withImageZoom\":{\"type\":\"reactHoc\",\"name\":\"withImageZoom\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withReveal\":{\"type\":\"reactHoc\",\"name\":\"withReveal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCountUp\":{\"type\":\"reactHoc\",\"name\":\"withCountUp\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withPinnedCollection\":{\"type\":\"reactHoc\",\"name\":\"withPinnedCollection\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SectionMotion.map"],"mappings":"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"}