{"version":3,"file":"Motion.C3c3e8Vm.mjs","names":["useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/bAZQGUM4E0kbmNc05g3U/2dvRYrZ12dp4FqkBGvLB/Motion.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,useCallback,useEffect,useRef}from\"react\";/*\n * Motion\n *\n * Small behaviours for native layers. The layers stay ordinary Framer frames\n * you can edit; these only add movement.\n *\n * withHoverDetails: on hover, a child layer named \"Arrow\" slides 8px right,\n * the way the next-project card behaves in the popups. The picture stays put,\n * so nothing in it is ever cropped. Rename or remove the layer and the effect\n * simply skips it.\n *\n * withLivePulse: a soft ring pulses out from the layer, for \"live\" dots.\n *\n * withTrueRatios: put it on a side-by-side row (the case study \"Pair\" frames).\n * Each picture or film in the row keeps its own shape, uncropped, and the\n * columns share the width in proportion to those shapes, so both sides end up\n * exactly the same height. An empty slot holds a 4:5 space. On phones the pair\n * stays side by side from 400px wide; narrower, it stacks, each at its own shape.\n *\n * withTrueRatio: put it on a frame holding one picture or film (the case study\n * \"Full\" rows). The frame takes the media's own shape, so nothing is cropped.\n *\n * withDuotoneLabel: for a black button in a section with its own colour. While\n * that colour is showing (a Dark Chrome section in Section Colors), the label\n * and icon take it instead of white; elsewhere the button is unchanged.\n *\n * withMaskTitle / withMaskHeading / withMaskText: put one on a text layer and\n * its words rise out of their own masks as it comes into view, the way the\n * popup titles do. Title is slower with a short pause first, Heading suits\n * headlines and quotes, Text suits a longer line or paragraph. A masked layer\n * straight after another one starts a beat later, so two-line headings\n * cascade. On phones the whole layer simply fades up.\n */const EASE=\"cubic-bezier(0.16, 1, 0.3, 1)\";const CSS=`\n@keyframes oooLivePulse { 0% { transform: scale(1); opacity: 0.6; } 80%, 100% { transform: scale(3); opacity: 0; } }\n.ooo-live-pulse { position: relative; overflow: visible !important; }\n.ooo-live-pulse::after {\n    content: \"\"; position: absolute; inset: 0; border-radius: 50%; background: inherit;\n    animation: oooLivePulse 2s ${EASE} infinite;\n}\n@media (prefers-reduced-motion: reduce) { .ooo-live-pulse::after { animation: none; } }\n.ooo-duotone, .ooo-duotone * { transition: color 0.7s ${EASE}; }\nhtml[data-ooo-chrome] .ooo-duotone, html[data-ooo-chrome] .ooo-duotone * { --framer-text-color: var(--ooo-chrome-accent) !important; color: var(--ooo-chrome-accent) !important; }\nhtml[data-ooo-chrome] .ooo-duotone svg [stroke]:not([stroke=\"none\"]) { stroke: currentColor !important; }\n.ooo-mask-w { display: inline-block; overflow: hidden; vertical-align: top; padding: 0.08em 0.04em 0.14em; margin: -0.08em -0.04em -0.14em; }\n.ooo-mask-i { display: inline-block; will-change: transform; }\n`;let styled=false;function ensureStyles(){if(styled||typeof document===\"undefined\")return;styled=true;const style=document.createElement(\"style\");style.textContent=CSS;document.head.appendChild(style);}function useAttached(forwardedRef,attach){const fwdRef=useRef(forwardedRef);fwdRef.current=forwardedRef;const current=useRef(null);const setRef=useCallback(node=>{const fwd=fwdRef.current;if(typeof fwd===\"function\")fwd(node);else if(fwd&&typeof fwd===\"object\")fwd.current=node;if(current.current?.el===node)return;current.current?.cleanup();current.current=node?{el:node,cleanup:attach(node)}:null;// eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);useEffect(()=>()=>current.current?.cleanup(),[]);return setRef;}function attachHoverDetails(el){const reduce=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;const find=()=>({arrow:el.querySelector('[data-framer-name=\"Arrow\"]')});function set(on){if(reduce)return;const{arrow}=find();if(arrow){arrow.style.transition=`transform 0.3s ${EASE}`;arrow.style.transform=on?\"translateX(8px)\":\"\";}}const enter=()=>set(true);const leave=()=>set(false);el.addEventListener(\"pointerenter\",enter);el.addEventListener(\"pointerleave\",leave);return()=>{el.removeEventListener(\"pointerenter\",enter);el.removeEventListener(\"pointerleave\",leave);set(false);};}function attachPulse(el){ensureStyles();el.classList.add(\"ooo-live-pulse\");return()=>el.classList.remove(\"ooo-live-pulse\");}// Wraps every word in a mask, leaving spaces, line breaks and coloured runs as they are.\nfunction splitWords(el){const walker=document.createTreeWalker(el,NodeFilter.SHOW_TEXT);const nodes=[];for(let n=walker.nextNode();n;n=walker.nextNode())if(n.data.trim())nodes.push(n);const words=[];for(const node of nodes){const frag=document.createDocumentFragment();for(const part of node.data.split(/(\\s+)/)){if(!part)continue;if(/^\\s+$/.test(part)){frag.appendChild(document.createTextNode(part));continue;}const mask=document.createElement(\"span\");mask.className=\"ooo-mask-w\";const inner=document.createElement(\"span\");inner.className=\"ooo-mask-i\";inner.textContent=part;mask.appendChild(inner);frag.appendChild(mask);words.push(inner);}node.parentNode?.replaceChild(frag,node);}return words;}function attachMask(el,timing){ensureStyles();el.setAttribute(\"data-ooo-mask\",\"\");const reduce=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;const touch=window.matchMedia(\"(hover: none) and (pointer: coarse)\").matches;// A second masked line right after another starts a beat later.\nconst delay=timing.delay+(el.previousElementSibling?.hasAttribute(\"data-ooo-mask\")?.1:0);if(reduce){el.style.visibility=\"visible\";return()=>{};}// Touch screens get the same masked rise, a little quicker and with the\n// stagger capped. It runs once, on the compositor, so scrolling stays free.\nconst dur=touch?.75:.9;const stagger=touch?Math.min(timing.stagger,.04):timing.stagger;const words=el.hasAttribute(\"data-ooo-split\")?[]:splitWords(el);el.setAttribute(\"data-ooo-split\",\"\");for(const w of words)w.style.transform=\"translateY(112%)\";el.style.visibility=\"visible\";void el.offsetHeight;const reveal=()=>words.forEach((w,i)=>{w.style.transition=`transform ${dur}s ${EASE} ${(delay+(touch?Math.min(i,14):i)*stagger).toFixed(3)}s`;w.style.transform=\"\";});const io=new IntersectionObserver(entries=>{if(!entries.some(e=>e.isIntersecting))return;io.disconnect();reveal();},{threshold:.2});io.observe(el);return()=>io.disconnect();}function masked(Component,timing){return /*#__PURE__*/forwardRef(function Masked(props,ref){const setRef=useAttached(ref,el=>attachMask(el,timing));// Hidden until the words are in their masks, so nothing flashes on load.\nreturn /*#__PURE__*/_jsx(Component,{...props,ref:setRef,style:{...props.style,visibility:\"hidden\"}});});}export function withMaskTitle(Component){return masked(Component,{delay:.2,stagger:.06});}export function withMaskHeading(Component){return masked(Component,{delay:0,stagger:.04});}export function withMaskText(Component){return masked(Component,{delay:.1,stagger:.014});}// ─── True ratios ────────────────────────────────────────────────────────────\nconst FALLBACK_RATIO=.8;function mediaRatio(slot){const video=slot.querySelector(\"video\");if(video&&video.videoWidth&&video.videoHeight)return video.videoWidth/video.videoHeight;const img=slot.querySelector(\"img\");if(img&&img.naturalWidth&&img.naturalHeight)return img.naturalWidth/img.naturalHeight;return null;}const SLOT_PROPS=[\"flex\",\"width\",\"height\",\"min-width\",\"aspect-ratio\"];// Below this viewport width a phone stacks each pair; at or above it, pairs stay side by side.\nconst SIDE_BY_SIDE_MIN=400;function attachTrueRatios(el){let frame=0;// Framer sometimes wraps a layer in a display: contents shell; size the layer inside it.\nconst slots=()=>{const out=[];const visit=node=>{if(!(node instanceof HTMLElement)||node.tagName===\"STYLE\")return;if(getComputedStyle(node).display===\"contents\")Array.from(node.children).forEach(visit);else if(getComputedStyle(node).display!==\"none\")out.push(node);};Array.from(el.children).forEach(visit);return out;};// Whether this breakpoint was designed to wrap (phones), read once before anything is set.\nlet designedWrap=null;function apply(){if(designedWrap===null)designedWrap=getComputedStyle(el).flexWrap===\"wrap\";// Larger phones keep the pair side by side; small ones stack it, each at its own shape.\nconst stacked=designedWrap&&window.innerWidth<SIDE_BY_SIDE_MIN;if(designedWrap&&!stacked)el.style.setProperty(\"flex-wrap\",\"nowrap\",\"important\");else el.style.removeProperty(\"flex-wrap\");// Clear anything set on a wrapper by an earlier pass.\nel.querySelectorAll(\":scope > [style*='aspect-ratio']\").forEach(w=>{if(getComputedStyle(w).display===\"contents\")SLOT_PROPS.forEach(p=>w.style.removeProperty(p));});for(const slot of slots()){const ratio=mediaRatio(slot)??FALLBACK_RATIO;if(stacked){slot.style.setProperty(\"flex\",\"none\",\"important\");slot.style.setProperty(\"width\",\"100%\",\"important\");slot.style.setProperty(\"min-width\",\"0\",\"important\");slot.style.setProperty(\"height\",\"auto\",\"important\");slot.style.setProperty(\"aspect-ratio\",ratio.toFixed(4),\"important\");continue;}slot.style.setProperty(\"flex\",`${ratio.toFixed(4)} 1 0px`,\"important\");slot.style.setProperty(\"width\",\"auto\",\"important\");slot.style.setProperty(\"min-width\",\"0\",\"important\");slot.style.setProperty(\"height\",\"auto\",\"important\");slot.style.setProperty(\"aspect-ratio\",ratio.toFixed(4),\"important\");}}const schedule=()=>{cancelAnimationFrame(frame);frame=requestAnimationFrame(apply);};// Films and images arrive after the row mounts; re-measure as each one reports its size.\nconst onMedia=e=>{const t=e.target;if(t instanceof HTMLVideoElement||t instanceof HTMLImageElement)schedule();};el.addEventListener(\"loadedmetadata\",onMedia,true);el.addEventListener(\"load\",onMedia,true);const mo=new MutationObserver(schedule);mo.observe(el,{childList:true,subtree:true});window.addEventListener(\"resize\",schedule);schedule();return()=>{cancelAnimationFrame(frame);el.removeEventListener(\"loadedmetadata\",onMedia,true);el.removeEventListener(\"load\",onMedia,true);mo.disconnect();window.removeEventListener(\"resize\",schedule);};}// One picture or film in its own frame (the case study \"Full\" rows): the frame takes the\n// media's own shape, so it's never cropped.\nfunction attachTrueRatio(el){let frame=0;function apply(){const ratio=mediaRatio(el);if(!ratio)return;el.style.setProperty(\"height\",\"auto\",\"important\");el.style.setProperty(\"aspect-ratio\",ratio.toFixed(4),\"important\");}const schedule=()=>{cancelAnimationFrame(frame);frame=requestAnimationFrame(apply);};const onMedia=e=>{const t=e.target;if(t instanceof HTMLVideoElement||t instanceof HTMLImageElement)schedule();};el.addEventListener(\"loadedmetadata\",onMedia,true);el.addEventListener(\"load\",onMedia,true);const mo=new MutationObserver(schedule);mo.observe(el,{childList:true,subtree:true});schedule();return()=>{cancelAnimationFrame(frame);el.removeEventListener(\"loadedmetadata\",onMedia,true);el.removeEventListener(\"load\",onMedia,true);mo.disconnect();};}export function withTrueRatio(Component){return /*#__PURE__*/forwardRef(function TrueRatio(props,ref){const setRef=useAttached(ref,attachTrueRatio);return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});});}export function withTrueRatios(Component){return /*#__PURE__*/forwardRef(function TrueRatios(props,ref){const setRef=useAttached(ref,attachTrueRatios);return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});});}// ─── Hover and pulse ────────────────────────────────────────────────────────\nexport function withHoverDetails(Component){return /*#__PURE__*/forwardRef(function HoverDetails(props,ref){const setRef=useAttached(ref,attachHoverDetails);return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});});}export function withLivePulse(Component){return /*#__PURE__*/forwardRef(function LivePulse(props,ref){const setRef=useAttached(ref,attachPulse);return /*#__PURE__*/_jsx(Component,{...props,ref:setRef});});}export function withDuotoneLabel(Component){return /*#__PURE__*/forwardRef(function DuotoneLabel(props,ref){ensureStyles();const className=[props.className,\"ooo-duotone\"].filter(Boolean).join(\" \");return /*#__PURE__*/_jsx(Component,{...props,ref:ref,className:className});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withMaskTitle\":{\"type\":\"reactHoc\",\"name\":\"withMaskTitle\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withMaskHeading\":{\"type\":\"reactHoc\",\"name\":\"withMaskHeading\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withMaskText\":{\"type\":\"reactHoc\",\"name\":\"withMaskText\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withDuotoneLabel\":{\"type\":\"reactHoc\",\"name\":\"withDuotoneLabel\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withHoverDetails\":{\"type\":\"reactHoc\",\"name\":\"withHoverDetails\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withTrueRatios\":{\"type\":\"reactHoc\",\"name\":\"withTrueRatios\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withTrueRatio\":{\"type\":\"reactHoc\",\"name\":\"withTrueRatio\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withLivePulse\":{\"type\":\"reactHoc\",\"name\":\"withLivePulse\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Motion.map"],"mappings":"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"}