{"version":3,"file":"shared-lib.CyN4sEDT.mjs","names":["React.useContext","React.useMemo","React.Fragment","React.forwardRef","React.useRef","React.useId","SVG","RichText","UtilsComponentMessage","useRef"],"sources":["https:/framerusercontent.com/modules/fMDE7Cqb2uOvQFAHEP2m/cRfVFRl0izzBulKFjOAe/W7oLCU4_B.js","https:/framer.com/m/Utils-Component-Message-ZVoG.js@cRfVFRl0izzBulKFjOAe","https:/framerusercontent.com/modules/aej5zpwxBpkMdzOteBwy/DWeAZ5wauvGM5oFwVdgS/Utils.js","https:/framer.com/m/Utils-FINc.js","https:/framerusercontent.com/modules/zxcGfQb3lPhoJOWc1HTU/UHrEi0qhIpd3yrAh6Rk2/ParallaxImage_prod.js","https:/framerusercontent.com/modules/lOPubZwh9mFk2GxcjKjn/vHd0YrwbTkzTPgDufaL2/siteMetadata.js"],"sourcesContent":["// Generated by Framer (0b8b5e5)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,RichText,SVG,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";const serializationHash=\"framer-q8Ttd\";const variantClassNames={XvqTw0Be9:\"framer-v-jjcw9a\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={bounce:.2,delay:0,duration:.4,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const getProps=({height,id,subtitle,title,width,...props})=>{var _ref,_ref1;return{...props,WuF2iG84P:(_ref=subtitle!==null&&subtitle!==void 0?subtitle:props.WuF2iG84P)!==null&&_ref!==void 0?_ref:\"Set up the component by adding background and bouncer elements to the component properties.\",yeAnKbEUZ:(_ref1=title!==null&&title!==void 0?title:props.yeAnKbEUZ)!==null&&_ref1!==void 0?_ref1:\"Screen Saver\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,yeAnKbEUZ,WuF2iG84P,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"XvqTw0Be9\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const ref1=React.useRef(null);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-jjcw9a\",className,classNames),\"data-framer-name\":\"Default\",layoutDependency:layoutDependency,layoutId:\"XvqTw0Be9\",ref:ref!==null&&ref!==void 0?ref:ref1,style:{backgroundColor:\"rgba(136, 85, 255, 0.1)\",...style},children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-uh2i08\",layoutDependency:layoutDependency,layoutId:\"aM7oiNoFL\",children:[/*#__PURE__*/_jsx(SVG,{className:\"framer-flw0dh\",\"data-framer-name\":\"Logo\",layout:\"position\",layoutDependency:layoutDependency,layoutId:\"GthLmGmBt\",opacity:1,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 28 28\"><g id=\"ss11036020200_1\"><path d=\"M 0 0 L 28 0 L 28 28 L 0 28 Z\" fill=\"transparent\"></path><path d=\"M 21 7.113 C 21 7.041 21.029 6.971 21.079 6.921 L 27.534 0.465 C 27.613 0.388 27.73 0.365 27.831 0.407 C 27.933 0.449 28 0.548 28 0.658 L 28 13.888 C 28 13.96 27.971 14.028 27.921 14.079 L 21 21 Z M 7 21 L 7 7.658 C 7 7.548 6.933 7.449 6.831 7.407 C 6.73 7.365 6.613 7.388 6.534 7.465 L 0.079 13.921 C 0.028 13.972 0 14.041 0 14.113 L 0 27.728 C 0 27.877 0.122 28 0.273 28 L 13.888 28 C 13.96 28 14.028 27.971 14.079 27.921 L 21 21 Z\" fill=\"rgb(153, 102, 255)\"></path></g></svg>',svgContentId:11036020200,withExternalLayout:true}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-k3ullq\",layoutDependency:layoutDependency,layoutId:\"E3DQBYSAf\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"SW50ZXItQm9sZA==\",\"--framer-font-family\":'\"Inter\", \"Inter Placeholder\", sans-serif',\"--framer-font-size\":\"11px\",\"--framer-font-weight\":\"700\",\"--framer-letter-spacing\":\"-0.02em\",\"--framer-line-height\":\"1em\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(153, 102, 255))\"},children:\"Screen Saver\"})}),className:\"framer-q0gs4u\",\"data-framer-name\":\"Title\",fonts:[\"Inter-Bold\"],layoutDependency:layoutDependency,layoutId:\"UqJwZqJjg\",style:{\"--extracted-r6o4lv\":\"rgb(153, 102, 255)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:yeAnKbEUZ,verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--framer-font-size\":\"11px\",\"--framer-letter-spacing\":\"-0.03em\",\"--framer-line-height\":\"1.4em\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgba(153, 102, 255, 0.7))\"},children:\"Set up the component by adding background and bouncer elements to the component properties.\"})}),className:\"framer-g5dqhc\",\"data-framer-name\":\"Subtitle\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"RJ7UF99m8\",style:{\"--extracted-r6o4lv\":\"rgba(153, 102, 255, 0.7)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:WuF2iG84P,verticalAlignment:\"top\",withExternalLayout:true})]})]})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-q8Ttd.framer-qanqo2, .framer-q8Ttd .framer-qanqo2 { display: block; }\",\".framer-q8Ttd.framer-jjcw9a { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: 200px; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 400px; }\",\".framer-q8Ttd .framer-uh2i08 { align-content: center; align-items: center; display: flex; flex: 1 0 0px; flex-direction: column; flex-wrap: nowrap; gap: 16px; height: min-content; justify-content: center; overflow: hidden; padding: 0px 20px 0px 20px; position: relative; width: 1px; }\",\".framer-q8Ttd .framer-flw0dh { flex: none; height: 28px; position: relative; width: 28px; }\",\".framer-q8Ttd .framer-k3ullq { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 12px; height: min-content; justify-content: center; max-width: 200px; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-q8Ttd .framer-q0gs4u, .framer-q8Ttd .framer-g5dqhc { flex: none; height: auto; position: relative; white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-q8Ttd.framer-jjcw9a, .framer-q8Ttd .framer-uh2i08, .framer-q8Ttd .framer-k3ullq { gap: 0px; } .framer-q8Ttd.framer-jjcw9a > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-q8Ttd.framer-jjcw9a > :first-child { margin-left: 0px; } .framer-q8Ttd.framer-jjcw9a > :last-child { margin-right: 0px; } .framer-q8Ttd .framer-uh2i08 > * { margin: 0px; margin-bottom: calc(16px / 2); margin-top: calc(16px / 2); } .framer-q8Ttd .framer-uh2i08 > :first-child, .framer-q8Ttd .framer-k3ullq > :first-child { margin-top: 0px; } .framer-q8Ttd .framer-uh2i08 > :last-child, .framer-q8Ttd .framer-k3ullq > :last-child { margin-bottom: 0px; } .framer-q8Ttd .framer-k3ullq > * { margin: 0px; margin-bottom: calc(12px / 2); margin-top: calc(12px / 2); } }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 200\n * @framerIntrinsicWidth 400\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerVariables {\"yeAnKbEUZ\":\"title\",\"WuF2iG84P\":\"subtitle\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerW7oLCU4_B=withCSS(Component,css,\"framer-q8Ttd\");export default FramerW7oLCU4_B;FramerW7oLCU4_B.displayName=\"Utils/Component Message\";FramerW7oLCU4_B.defaultProps={height:200,width:400};addPropertyControls(FramerW7oLCU4_B,{yeAnKbEUZ:{defaultValue:\"Screen Saver\",displayTextArea:false,title:\"Title\",type:ControlType.String},WuF2iG84P:{defaultValue:\"Set up the component by adding background and bouncer elements to the component properties.\",displayTextArea:false,title:\"Subtitle\",type:ControlType.String}});addFonts(FramerW7oLCU4_B,[{explicitInter:true,fonts:[{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/DpPBYI0sL4fYLgAkX8KXOPVt7c.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/4RAEQdEOrcnDkhHiiCbJOw92Lk.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/1K3W8DizY3v4emK8Mb08YHxTbs.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/tUSCtfYVM1I1IchuyCwz9gDdQ.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/VgYFWiwsAC5OYxAycRXXvhze58.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/DXD0Q7LSl7HEvDzucnyLnGBHM.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/GIryZETIX4IFypco5pYZONKhJIo.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5vvr9Vy74if2I6bQbJvbw7SY1pQ.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/OYrD2tBIBPvoJXiIHnLoOXnY9M.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/JeYwfuaPfZHQhEG8U5gtPDZ7WQ.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/vQyevYAyHtARFwPqUzQGpnDs.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/b6Y37FthZeALduNqHicBT6FutY.woff2\",weight:\"400\"}]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerW7oLCU4_B\",\"slots\":[],\"annotations\":{\"framerImmutableVariables\":\"true\",\"framerComponentViewportWidth\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerVariables\":\"{\\\"yeAnKbEUZ\\\":\\\"title\\\",\\\"WuF2iG84P\\\":\\\"subtitle\\\"}\",\"framerIntrinsicWidth\":\"400\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"200\",\"framerDisplayContentsDiv\":\"false\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./W7oLCU4_B.map","/*\n * Utils/Component Message\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/fMDE7Cqb2uOvQFAHEP2m/cRfVFRl0izzBulKFjOAe/W7oLCU4_B.js\"\nexport { default } from \"https://framerusercontent.com/modules/fMDE7Cqb2uOvQFAHEP2m/cRfVFRl0izzBulKFjOAe/W7oLCU4_B.js\"\n","import{jsx as _jsx}from\"react/jsx-runtime\";import{cloneElement}from\"react\";import UtilsComponentMessage from\"https://framer.com/m/Utils-Component-Message-ZVoG.js@cRfVFRl0izzBulKFjOAe\";export const ComponentMessage=({title,subtitle,style})=>{return /*#__PURE__*/_jsx(UtilsComponentMessage,{yeAnKbEUZ:title,WuF2iG84P:subtitle,style:{width:\"100%\",height:\"100%\",...style}});};/* \n    This function is also used many times to make sure components work even if we set a color style like \"Accent\" on their color properties. We can make this into a utility function.\n*/export const extractRGBColorFromString=str=>{const rgbRegex=/(rgba|rgb)\\(.*?\\)/g;const match=str.match(rgbRegex);return match?match[0]:str;};/*\n    This function makes a connected layer use the sizing of the component it is inside,\n    preventing it from being larger or smaller than the component's size.\n    Use this on layers connected with ControlType.ComponentInstance.\n*/export function styleLayer(layer,style={}){layer=Array.isArray(layer)?layer[0]:layer;let newLayer=layer;const{width,height,...otherStyle}=style;if(layer&&layer.props&&style&&(width||height)){if(typeof layer.type===\"function\"&&typeof layer.props.children===\"object\"){newLayer=/*#__PURE__*/cloneElement(layer,{children:{...layer.props.children,props:{...layer.props.children.props,style:{...layer.props.children.props.style,...width&&{width},...height&&{height},...otherStyle}}}});}else{newLayer=/*#__PURE__*/cloneElement(layer,{style:{...layer.props.style,...width&&{width},...height&&{height},...otherStyle}});}}return newLayer;}\nexport const __FramerMetadata__ = {\"exports\":{\"ComponentMessage\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"extractRGBColorFromString\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"styleLayer\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Utils.map","/*\n * Utils\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/aej5zpwxBpkMdzOteBwy/DWeAZ5wauvGM5oFwVdgS/Utils.js\"\n","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useRef,useLayoutEffect}from\"react\";import{ComponentMessage}from\"https://framer.com/m/Utils-FINc.js\";/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 300\n * @framerIntrinsicHeight 400\n * @framerDisableUnlink\n */export default function ImageParallax(props){const{verticalParallaxAmount=50,horizontalParallaxAmount=0,image,style,borderRadius=0,border,boxShadow}=props;// Reference to the container and image elements\nconst containerRef=useRef(null);const imageRef=useRef(null);// Check if we're in canvas mode - if so, skip parallax and just show the image\nconst isCanvas=RenderTarget.current()===RenderTarget.canvas;// Simple, performant parallax using requestAnimationFrame (like many CodePen examples)\n// Only run parallax logic in preview/live mode, not in canvas\nuseLayoutEffect(()=>{// Skip parallax in canvas mode\nif(isCanvas)return;if(!containerRef.current||!imageRef.current)return;const container=containerRef.current;const image=imageRef.current;// Enable hardware acceleration via CSS\nimage.style.transform=\"translate3d(0, 0, 0)\";image.style.willChange=\"transform\";let rafId=null;let ticking=false;let animationFrameId=null;const updateParallax=()=>{if(!container||!image)return;const rect=container.getBoundingClientRect();const containerHeight=container.offsetHeight;const containerWidth=container.offsetWidth;// Skip if container has no dimensions\nif(containerHeight===0||containerWidth===0)return;// Calculate vertical parallax based on scroll position\n// Progress goes from 0 (top hits bottom of viewport) to 1 (bottom hits top of viewport)\n// When element is vertically centered (progress = 0.5), image should be centered\nconst viewportHeight=window.innerHeight;const scrollProgress=Math.max(0,Math.min(1,(viewportHeight-rect.top)/(viewportHeight+containerHeight)));// Vertical parallax: center around midpoint (0.5)\n// When scrollProgress = 0.5 (centered), yOffset = 0\n// When scrollProgress = 0 (top), yOffset = -parallaxAmount/2\n// When scrollProgress = 1 (bottom), yOffset = +parallaxAmount/2\nconst yOffset=(scrollProgress-.5)*(verticalParallaxAmount/100)*containerHeight;// Horizontal parallax: based purely on element's horizontal position in viewport\n// Works independently of scroll - responds to horizontal movement/looping\n// When element is centered, image should be centered (no offset)\nlet xOffset=0;if(horizontalParallaxAmount!==0){const viewportWidth=window.innerWidth;const viewportCenter=viewportWidth/2;const elementCenter=rect.left+rect.width/2;// Calculate progress from -1 (left) to +1 (right), 0 when centered\n// Normalize based on viewport width so it works regardless of element position\nconst horizontalProgress=(elementCenter-viewportCenter)/viewportWidth;// Apply parallax movement based on element position relative to viewport center\n// horizontalProgress: negative when element is left of center, positive when right of center\n// When element is left of center, image shifts left (negative offset)\n// When element is right of center, image shifts right (positive offset)\n// When element is centered (horizontalProgress = 0), xOffset = 0 (image centered)\nxOffset=horizontalProgress*(horizontalParallaxAmount/100)*containerWidth;}// Apply transforms using translate3d for GPU acceleration\nimage.style.transform=`translate3d(${xOffset}px, ${yOffset}px, 0)`;ticking=false;};const requestTick=()=>{if(!ticking){rafId=requestAnimationFrame(updateParallax);ticking=true;}};// Continuous animation loop for horizontal parallax (works with looping elements)\nconst startAnimationLoop=()=>{if(horizontalParallaxAmount!==0){const animate=()=>{updateParallax();animationFrameId=requestAnimationFrame(animate);};animationFrameId=requestAnimationFrame(animate);}};const stopAnimationLoop=()=>{if(animationFrameId!==null){cancelAnimationFrame(animationFrameId);animationFrameId=null;}};// Use passive scroll listener for vertical parallax\nconst handleScroll=()=>{requestTick();};const handleResize=()=>{// Debounce resize\nif(rafId!==null){cancelAnimationFrame(rafId);}rafId=requestAnimationFrame(updateParallax);};// Initial update\nupdateParallax();// Start continuous loop for horizontal parallax if enabled\nstartAnimationLoop();// Add event listeners for vertical parallax\nwindow.addEventListener(\"scroll\",handleScroll,{passive:true});window.addEventListener(\"resize\",handleResize,{passive:true});// Cleanup\nreturn()=>{stopAnimationLoop();if(rafId!==null){cancelAnimationFrame(rafId);}window.removeEventListener(\"scroll\",handleScroll);window.removeEventListener(\"resize\",handleResize);};},[verticalParallaxAmount,horizontalParallaxAmount,isCanvas]);// Check if image is provided\nconst imageSrc=image?.src||(typeof image===\"string\"?image:null);const hasImage=!!imageSrc;return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{...style,position:\"relative\",overflow:\"hidden\",width:\"100%\",height:\"100%\",borderRadius:borderRadius,boxShadow:boxShadow||undefined},children:[hasImage&&/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",zIndex:1e3,height:\"100%\",borderRadius:borderRadius,position:\"absolute\",top:0,left:0,right:0,bottom:0,...border||{}}}),!hasImage?/*#__PURE__*/_jsx(ComponentMessage,{style:{position:\"relative\",width:\"100%\",height:\"100%\",minWidth:0,minHeight:0},title:\"Image Parallax\",subtitle:\"Add an image to create a parallax effect that moves as you scroll\"}):isCanvas?// Canvas mode: simple responsive image, no parallax\n/*#__PURE__*/_jsx(\"img\",{src:imageSrc,alt:\"\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",borderRadius:borderRadius,userSelect:\"none\",pointerEvents:\"none\"}}):// Preview/Live mode: render parallax effect\n// Extend beyond boundaries to allow room for parallax movement\n/*#__PURE__*/_jsx(\"div\",{ref:imageRef,style:{position:\"absolute\",// ALWAYS center the image by extending equally on both sides\n// This ensures the image is centered when element is centered, regardless of parallax direction\n// The sign of parallax only affects the direction of movement, not the centering\ntop:`-${Math.abs(verticalParallaxAmount)/2}%`,left:`-${Math.abs(horizontalParallaxAmount)/2}%`,right:`-${Math.abs(horizontalParallaxAmount)/2}%`,bottom:`-${Math.abs(verticalParallaxAmount)/2}%`,// Always use Math.abs so the image is larger than container regardless of direction\nwidth:`calc(100% + ${Math.abs(horizontalParallaxAmount)}%)`,height:`calc(100% + ${Math.abs(verticalParallaxAmount)}%)`,backgroundImage:imageSrc?`url(${imageSrc})`:undefined,backgroundSize:\"cover\",backgroundPosition:image?.positionX&&image?.positionY?`${image.positionX} ${image.positionY}`:\"center\",borderRadius:borderRadius,willChange:\"transform\",backfaceVisibility:\"hidden\",userSelect:\"none\",pointerEvents:\"none\"}})]});}// Default props with descriptive values\nImageParallax.defaultProps={verticalParallaxAmount:50,horizontalParallaxAmount:0};// Property controls with descriptive tooltips and appropriate ranges\naddPropertyControls(ImageParallax,{image:{type:ControlType.ResponsiveImage,title:\"Image\"},// Vertical parallax controls (in percentage)\nverticalParallaxAmount:{type:ControlType.Number,title:\"Parallax Y\",defaultValue:30,step:5,max:100,min:-100,unit:\"%\"},horizontalParallaxAmount:{type:ControlType.Number,title:\"Parallax X\",defaultValue:0,step:5,max:100,min:-100,unit:\"%\",description:\"Only seen if image moves horizontally.\"},border:{// @ts-ignore - ControlType.Border exists but may not be in types\ntype:ControlType.Border,title:\"Border\",optional:true},borderRadius:{// @ts-ignore - ControlType.BorderRadius exists but may not be in types\ntype:ControlType.BorderRadius,title:\"Radius\",defaultValue:0,min:0,max:100,step:1,unit:\"px\"},boxShadow:{// @ts-ignore - ControlType.BoxShadow exists but may not be in types\ntype:ControlType.BoxShadow,title:\"Shadow\"}});ImageParallax.displayName=\"Image Parallax\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ImageParallax\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"400\",\"framerIntrinsicWidth\":\"300\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ParallaxImage_prod.map","// Generated by Framer (4f63079)\nexport default function metadata(params,activeLocale){return{description:\"Made with Framer\",favicon:\"https://framerusercontent.com/assets/3vB4h5hFUXhFFEk5PsdMrokJsU.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/S2HPjS5dTmt9S9K8hReLjWZmEfw.png\",title:\"Mireva - Wellness and Coaching\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}