{"version":3,"file":"CustomCursor.CiuMSWdU.mjs","names":["React.useRef","React.useState","_Fragment"],"sources":["https:/framerusercontent.com/modules/wHVUonLA5Bw2yWi2EhZk/1314EAuN1nWe595apP5K/K2EO7xJvX.js","https:/framerusercontent.com/modules/uCbZZfvYT2PiHbrF9Amr/76QJMPxzkazzy8y2qcVE/Chip.js","https:/framerusercontent.com/modules/3Lcy1Xc1o5W685doVwP5/t97llmXsEuFS4q2vOsCC/CustomCursor.js"],"sourcesContent":["// Generated by Framer (7175f5c)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"Inter\",\"Inter-Bold\",\"Inter-BoldItalic\",\"Inter-Italic\"]);export const fonts=[{explicitInter:true,fonts:[{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",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\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/OYrD2tBIBPvoJXiIHnLoOXnY9M.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",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\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/GrgcKwrN6d3Uz8EwcLHZxwEfC4.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",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\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",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\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/4RAEQdEOrcnDkhHiiCbJOw92Lk.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/1K3W8DizY3v4emK8Mb08YHxTbs.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/tUSCtfYVM1I1IchuyCwz9gDdQ.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",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\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/syRNPWzAMIrcJ3wIlPIP43KjQs.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",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\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/H89BbHkbHDzlxZzxi8uPzTsp90.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/u6gJwDuwB143kpNK1T1MDKDWkMc.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/43sJ6MfOPh1LCJt46OvyDuSbA6o.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/wccHG0r4gBDAIRhfHiOlq6oEkqw.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",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/WZ367JPwf9bRW6LdTHN8rXgSjw.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/ia3uin3hQWqDrVloC1zEtYHWw.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",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/2A4Xx7CngadFGlVV4xrO06OBHY.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/CfMzU8w2e7tHgF4T4rATMPuWosA.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/867QObYax8ANsfX4TGEVU9YiCM.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Oyn2ZbENFdnW7mt2Lzjk1h9Zb9k.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/cdAe8hgZ1cMyLu9g005pAW3xMo.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",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/DOfvtmE1UplCq161m6Hj8CSQYg.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/pKRFNWFoZl77qYCAIp84lN1h944.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"italic\",uiFamilyName:\"Inter\",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/tKtBcDnBMevsEEJKdNGhhkLzYo.woff2\",weight:\"400\"}]}];export const css=['.framer-4W0O6 .framer-styles-preset-153o8v7:not(.rich-text-wrapper), .framer-4W0O6 .framer-styles-preset-153o8v7.rich-text-wrapper p { --framer-font-family: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-open-type-features: \\'blwf\\' on, \\'cv03\\' on, \\'cv04\\' on, \\'cv09\\' on, \\'cv11\\' on; --framer-font-size: 16px; --framer-font-style: normal; --framer-font-style-bold: normal; --framer-font-style-bold-italic: italic; --framer-font-style-italic: italic; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-font-weight-bold: 700; --framer-font-weight-bold-italic: 700; --framer-font-weight-italic: 400; --framer-letter-spacing: -0.03em; --framer-line-height: 150%; --framer-paragraph-spacing: 16px; --framer-text-alignment: start; --framer-text-color: var(--token-9781846a-b212-4042-8cac-29e532b59231, #f4f4f4); --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: uppercase; }','@media (max-width: 1199px) and (min-width: 810px) { .framer-4W0O6 .framer-styles-preset-153o8v7:not(.rich-text-wrapper), .framer-4W0O6 .framer-styles-preset-153o8v7.rich-text-wrapper p { --framer-font-family: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-open-type-features: \\'blwf\\' on, \\'cv03\\' on, \\'cv04\\' on, \\'cv09\\' on, \\'cv11\\' on; --framer-font-size: 14px; --framer-font-style: normal; --framer-font-style-bold: normal; --framer-font-style-bold-italic: italic; --framer-font-style-italic: italic; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-font-weight-bold: 700; --framer-font-weight-bold-italic: 700; --framer-font-weight-italic: 400; --framer-letter-spacing: -0.04em; --framer-line-height: 155%; --framer-paragraph-spacing: 16px; --framer-text-alignment: start; --framer-text-color: var(--token-9781846a-b212-4042-8cac-29e532b59231, #f4f4f4); --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: uppercase; } }','@media (max-width: 809px) and (min-width: 0px) { .framer-4W0O6 .framer-styles-preset-153o8v7:not(.rich-text-wrapper), .framer-4W0O6 .framer-styles-preset-153o8v7.rich-text-wrapper p { --framer-font-family: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-bold-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-family-italic: \"Inter\", \"Inter Placeholder\", sans-serif; --framer-font-open-type-features: \\'blwf\\' on, \\'cv03\\' on, \\'cv04\\' on, \\'cv09\\' on, \\'cv11\\' on; --framer-font-size: 12px; --framer-font-style: normal; --framer-font-style-bold: normal; --framer-font-style-bold-italic: italic; --framer-font-style-italic: italic; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-font-weight-bold: 700; --framer-font-weight-bold-italic: 700; --framer-font-weight-italic: 400; --framer-letter-spacing: -0.05em; --framer-line-height: 160%; --framer-paragraph-spacing: 16px; --framer-text-alignment: start; --framer-text-color: var(--token-9781846a-b212-4042-8cac-29e532b59231, #f4f4f4); --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: uppercase; } }'];export const className=\"framer-4W0O6\";\nexport const __FramerMetadata__ = {\"exports\":{\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";// Accent synced to the current brand red (#D33C2B, was #EB4330) and its\n// paired light content color (#FAFAFA, was #F4F4F4) — matches Button.tsx\n// / GetInTouchButton.tsx / AdaptiveNav.tsx after the same accessibility\n// pass (the old pair sat at 3.55:1 against #EB4330; #FAFAFA on #D33C2B\n// clears 4.5:1 AA).\nconst styles={Accent:{bg:\"#D33C2B\",content:\"#FAFAFA\",outline:null},Neutral:{bg:\"#E8E8E8\",content:\"#1A1A1A\",outline:\"#D1D1D1\"},Success:{bg:\"#CCEBDC\",content:\"#003D20\",outline:null},Warning:{bg:\"#F5E4CC\",content:\"#523100\",outline:null},Error:{bg:\"#FBD9D6\",content:\"#5E1B13\",outline:null},Dark:{bg:\"#2A2A2A\",content:\"#FAFAFA\",outline:\"#FAFAFA\"}};function StarIcon({size,color}){return /*#__PURE__*/_jsx(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:color,stroke:color,strokeWidth:1,children:/*#__PURE__*/_jsx(\"polygon\",{points:\"12 2 15 9 22 9.5 17 14.5 18.5 22 12 18 5.5 22 7 14.5 2 9.5 9 9\"})});}function CloseIcon({size,color}){return /*#__PURE__*/_jsxs(\"svg\",{width:size,height:size,viewBox:\"0 0 24 24\",fill:\"none\",stroke:color,strokeWidth:2,strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"line\",{x1:\"18\",y1:\"6\",x2:\"6\",y2:\"18\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"6\",y1:\"6\",x2:\"18\",y2:\"18\"})]});}/**\n * A compact, dismissible unit of information mapped to the status colour system.\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export default function Chip(props){const{label,variant,size,leadingIcon,trailingIcon,onDismiss,style}=props;const s=styles[variant]??styles.Accent;const isLarge=size===\"Large\";const iconSize=isLarge?16:12;const fontSize=isLarge?16:14;return /*#__PURE__*/_jsxs(\"div\",{style:{...style,display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",gap:8,height:isLarge?40:24,padding:isLarge?\"8px 16px\":\"4px 8px\",borderRadius:24,background:s.bg,border:s.outline?`1px solid ${s.outline}`:\"none\",boxSizing:\"border-box\",fontFamily:\"Inter, sans-serif\",whiteSpace:\"nowrap\"},children:[leadingIcon&&/*#__PURE__*/_jsx(StarIcon,{size:iconSize,color:s.content}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize,lineHeight:1.65,letterSpacing:\"0.16px\",color:s.content},children:label}),trailingIcon&&/*#__PURE__*/_jsx(\"span\",{onClick:e=>{e.stopPropagation();onDismiss&&onDismiss();},style:{display:\"flex\",cursor:onDismiss?\"pointer\":\"default\"},children:/*#__PURE__*/_jsx(CloseIcon,{size:iconSize,color:s.content})})]});}Chip.defaultProps={label:\"Chip\",variant:\"Accent\",size:\"Large\",leadingIcon:true,trailingIcon:true};addPropertyControls(Chip,{label:{type:ControlType.String,defaultValue:\"Chip\"},variant:{type:ControlType.Enum,options:[\"Accent\",\"Neutral\",\"Success\",\"Warning\",\"Error\",\"Dark\"],optionTitles:[\"Accent\",\"Neutral\",\"Success\",\"Warning\",\"Error\",\"Dark\"],defaultValue:\"Accent\",title:\"Style\"},size:{type:ControlType.Enum,options:[\"Large\",\"Small\"],optionTitles:[\"Large\",\"Small\"],defaultValue:\"Large\"},leadingIcon:{type:ControlType.Boolean,defaultValue:true,title:\"Leading icon\"},trailingIcon:{type:ControlType.Boolean,defaultValue:true,title:\"Trailing icon\"},onDismiss:{type:ControlType.EventHandler}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Chip\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Chip.map","import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import*as ReactDOM from\"react-dom\";import{addPropertyControls,ControlType}from\"framer\";// mix-blend-mode: difference computes |source - backdrop| per channel.\n// A pure black source always yields the backdrop unchanged (0 diff) - a\n// black dot on \"difference\" is invisible on any background - so Black\n// never blends and is always a plain solid dot instead. Red and White\n// both genuinely blend everywhere, including over the site's own brand\n// red (which produces a shifting teal/cyan there - that's the actual\n// color math of inverting a saturated backdrop, kept intentionally\n// rather than special-cased away).\nconst VARIANT_STYLES={// = /Button Primary/background-default (was #EB4330)\nRed:{background:\"#D33C2B\",mixBlendMode:\"difference\"},White:{background:\"#FFFFFF\",mixBlendMode:\"difference\"},Black:{background:\"#1A1A1A\",mixBlendMode:\"normal\"}};// The site's own logo <img> (in the nav and in SiteFooter) is always\n// given alt=\"No Name Creative\" - excluding that specific alt text is a\n// reliable way to keep the logo out of the image-hide behavior without\n// depending on any Framer-internal DOM attribute.\nconst EXCLUDED_ALT=\"No Name Creative\";// Selector for elements that should be EXEMPT from the hover-grow scale,\n// even though the base interactive selector would otherwise match them.\n// Two different signals are checked (see isInteractive below): a\n// purpose-built data-cursor-static attribute, AND aria-haspopup=\"menu\" -\n// the latter is redundant with the former on the nav's menu button, but\n// is kept as a second, independent match because that attribute has\n// been present on the button for longer (it's part of an older,\n// already-widely-cached bundle), so it still works to exempt the button\n// even at a moment where a freshly-added data-cursor-static attribute on\n// a just-edited nested component hasn't finished propagating through\n// Framer's CDN/browser cache yet.\nconst CURSOR_GROW_EXEMPT_SELECTOR='[data-cursor-static=\"true\"], [aria-haspopup=\"menu\"]';// Only elements whose COMPUTED pointer-events is \"none\" count as\n// \"hide the cursor here\" candidates - not every <img> or background-image\n// element site-wide.\n//\n// Earlier versions matched every <img> and every element with an inline\n// background-image anywhere on the page, which was meant to catch one\n// specific thing: the Projects row's floating hover-preview image (which\n// is deliberately pointer-events: none so it doesn't block clicks on the\n// text/links underneath it, and which elementFromPoint-based hit-testing\n// can't see for exactly that reason). But matching \"any image at all\"\n// also caught ordinary content images elsewhere on the site - case study\n// screenshots, wireframe mockups, the FluidImage quote-section visual -\n// which made the cursor disappear across entire sections of the Blink\n// Travel/Weather Guarantee pages, not just over that one hover preview.\n// Ordinary content images don't set pointer-events: none (they don't need\n// to - nothing needs to click through them), so filtering on computed\n// pointer-events narrows this back down to just the intended case.\nfunction isOverImage(x,y){if(typeof document===\"undefined\")return false;// Any open modal (e.g. the \"Get in touch\" form) is a fully opaque\n// fixed overlay covering the entire viewport - nothing on the\n// underlying page behind it should ever affect the cursor. The\n// bounding-rect scan below has no concept of stacking order, so\n// without this check, a pointer-events:none image sitting elsewhere\n// on the page (like the Projects row's hover-preview image) could\n// coincide with the same on-screen coordinates as a gap between two\n// modal form fields once the page is scroll-locked, and incorrectly\n// hide the cursor even though that image is completely covered by\n// the modal. Checked first as a fast, unconditional bail-out.\nconst openModal=document.querySelector('[aria-modal=\"true\"]');if(openModal){const modalRect=openModal.getBoundingClientRect();if(x>=modalRect.left&&x<=modalRect.right&&y>=modalRect.top&&y<=modalRect.bottom){return false;}}const candidates=document.querySelectorAll('img, [style*=\"background-image\"]');for(let i=0;i<candidates.length;i++){const el=candidates[i];if(el.tagName===\"IMG\"&&el.alt===EXCLUDED_ALT)continue;const rect=el.getBoundingClientRect();if(rect.width<=0||rect.height<=0)continue;const style=window.getComputedStyle(el);if(style.visibility===\"hidden\"||parseFloat(style.opacity||\"1\")===0)continue;if(style.pointerEvents!==\"none\")continue;if(x>=rect.left&&x<=rect.right&&y>=rect.top&&y<=rect.bottom){return true;}}return false;}/**\n * CustomCursor — a small circular dot that follows the pointer with a\n * light spring lag, growing on hover over interactive elements (a,\n * button, [role=\"button\"], input, textarea, select, or anything marked\n * data-cursor-hover=\"true\"), and fading out entirely while the pointer is\n * over a pointer-events:none image overlay elsewhere on the page (see\n * isOverImage above) - EXCEPT the site logo (see EXCLUDED_ALT), which\n * always stays the normal blended dot.\n *\n * Elements matching CURSOR_GROW_EXEMPT_SELECTOR (data-cursor-static, or\n * aria-haspopup=\"menu\") are exempt from the hover-grow scale entirely,\n * even though they're still matched by the base interactive selector.\n * This exists for the wave-fill buttons (Button.tsx and MorphedMenu.tsx's\n * Menubutton): those already have their own strong, dedicated hover\n * affordance (a clip-path fill sweeping in from the pointer), so a\n * second effect - the cursor ballooning to hoverScale x its normal size\n * and difference-blending teal over the fill's red - competes with it\n * rather than adding to it. On the compact ~40px-tall menu button\n * specifically, a 2.5x-scaled dot is roughly as tall as the whole button\n * and visually swallows the label, which read as \"the button is broken\"\n * even though the fill and text-color swap underneath were both working\n * correctly.\n *\n * Leaving/re-entering the window: this needs to be a hard, instant\n * toggle with zero animated travel - not a fade, not an eased slide.\n * Two earlier attempts got this wrong:\n *   1. Snapping the lerp target to (-100, -100) on leave visibly dragged\n *      the dot to the corner, then dragged it back on return.\n *   2. A single document-level \"mouseleave\" listener plus a CSS opacity\n *      transition left the dot appearing to \"stick\" at the last edge\n *      position - the leave event wasn't firing reliably inside Framer's\n *      preview iframe, and even when it did, the 0.15s CSS fade meant it\n *      wasn't actually instant.\n * This version: (a) listens for the leave via three independent signals\n * (documentElement mouseleave, a mouseout with no relatedTarget, and a\n * window blur) so it isn't dependent on any single event type behaving\n * correctly in this environment; (b) sets the dot's opacity directly and\n * synchronously in the leave handler itself (not just via the animation\n * loop, so there's no even one-frame delay); (c) has no CSS transition on\n * opacity at all, so both hide and show are hard cuts; and (d) never\n * moves the lerp target on leave, so there's nothing to travel back from\n * on return - the first mousemove after re-entry snaps position straight\n * to the real cursor location.\n *\n * Red and White use mix-blend-mode: difference so the dot's visible\n * color continuously inverts against whatever is behind it, including a\n * shifting teal/cyan over the site's brand red - that's the genuine\n * color math of the blend, not a bug. Black skips the blend (see\n * VARIANT_STYLES note) and is always a flat solid dot.\n *\n * Rendered through a React portal straight into document.body: Framer\n * wraps every canvas layer in its own positioned/transformed container,\n * and a transform on any ancestor creates a new stacking context that\n * silently confines mix-blend-mode to blending only within that tiny\n * wrapper instead of the real page. Portaling escapes that entirely.\n *\n * Only activates on devices with a fine pointer (mouse/trackpad) - on\n * touch devices nothing is rendered and the native cursor is left alone.\n *\n * Place one instance anywhere on the page - one instance is enough for\n * the whole page. Switch the Variant control to compare Red / White /\n * Black live.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function CustomCursor(props){const{variant,size,hoverScale,ease,hideNativeCursor}=props;const dotRef=React.useRef(null);const pos=React.useRef({x:-100,y:-100});const target=React.useRef({x:-100,y:-100});const scale=React.useRef(1);const targetScale=React.useRef(1);const overImage=React.useRef(false);const isOutside=React.useRef(true);const hasPosition=React.useRef(false);const raf=React.useRef(null);const[enabled,setEnabled]=React.useState(false);const[mounted,setMounted]=React.useState(false);const resolvedVariant=variant in VARIANT_STYLES?variant:\"White\";React.useEffect(()=>{setMounted(true);},[]);React.useEffect(()=>{if(typeof window===\"undefined\")return;const fine=window.matchMedia?.(\"(pointer: fine)\").matches??true;setEnabled(fine);if(!fine)return;function isInteractive(el){if(!el)return false;if(el.closest(CURSOR_GROW_EXEMPT_SELECTOR))return false;return!!el.closest('a, button, [role=\"button\"], input, textarea, select, [data-cursor-hover=\"true\"]');}function hideNow(){isOutside.current=true;// Set synchronously here too, not just in the rAF loop - this\n// is what makes the disappearance instant rather than waiting\n// up to one animation frame.\nif(dotRef.current)dotRef.current.style.opacity=\"0\";}function onMove(e){target.current.x=e.clientX;target.current.y=e.clientY;targetScale.current=isInteractive(e.target)?hoverScale:1;// Re-entering after being outside the window (or before the\n// very first move) - snap straight to the pointer instead of\n// lerping in from wherever it was last, so there's no visible\n// \"catch-up\" travel across the screen.\nif(isOutside.current||!hasPosition.current){pos.current.x=e.clientX;pos.current.y=e.clientY;hasPosition.current=true;if(dotRef.current)dotRef.current.style.opacity=\"1\";}isOutside.current=false;}function onDocMouseLeave(){hideNow();}function onDocMouseOut(e){// Fires on any element-to-element transition, not just the\n// viewport edge - only treat it as \"left the window\" when\n// there's no relatedTarget, which is what happens when the\n// pointer moves off the document entirely.\nif(!e.relatedTarget&&!e.toElement){hideNow();}}function onBlur(){hideNow();}window.addEventListener(\"mousemove\",onMove,{passive:true});document.documentElement.addEventListener(\"mouseleave\",onDocMouseLeave);document.addEventListener(\"mouseout\",onDocMouseOut);window.addEventListener(\"blur\",onBlur);function loop(){// Snappier direct-follow instead of a heavy smoothed lerp -\n// still eases very slightly so fast flicks don't feel robotic,\n// but tracks close to 1:1 with the actual pointer.\nconst followEase=Math.min(1,ease*2.2);pos.current.x+=(target.current.x-pos.current.x)*followEase;pos.current.y+=(target.current.y-pos.current.y)*followEase;scale.current+=(targetScale.current-scale.current)*.25;// Checked here (once per animation frame) rather than on every\n// mousemove event, since this scans DOM elements and mousemove\n// can fire far more often than the screen can repaint anyway.\noverImage.current=isOverImage(target.current.x,target.current.y);if(dotRef.current){dotRef.current.style.transform=`translate3d(${pos.current.x}px, ${pos.current.y}px, 0) translate(-50%, -50%) scale(${scale.current})`;dotRef.current.style.opacity=overImage.current||isOutside.current?\"0\":\"1\";}raf.current=requestAnimationFrame(loop);}raf.current=requestAnimationFrame(loop);return()=>{window.removeEventListener(\"mousemove\",onMove);document.documentElement.removeEventListener(\"mouseleave\",onDocMouseLeave);document.removeEventListener(\"mouseout\",onDocMouseOut);window.removeEventListener(\"blur\",onBlur);if(raf.current)cancelAnimationFrame(raf.current);};},[ease,hoverScale]);if(!mounted||!enabled||typeof document===\"undefined\")return null;const style=VARIANT_STYLES[resolvedVariant];const content=/*#__PURE__*/_jsxs(_Fragment,{children:[hideNativeCursor&&/*#__PURE__*/_jsx(\"style\",{children:`\n                    @media (pointer: fine) {\n                        * { cursor: none !important; }\n                    }\n                `}),/*#__PURE__*/_jsx(\"div\",{ref:dotRef,style:{position:\"fixed\",top:0,left:0,width:size,height:size,borderRadius:\"50%\",background:style.background,mixBlendMode:style.mixBlendMode,pointerEvents:\"none\",zIndex:2147483647,opacity:0,willChange:\"transform, opacity\"}})]});return /*#__PURE__*/ReactDOM.createPortal(content,document.body);}CustomCursor.displayName=\"CustomCursor\";CustomCursor.defaultProps={variant:\"White\",size:16,hoverScale:2.5,ease:.18,hideNativeCursor:true};addPropertyControls(CustomCursor,{variant:{type:ControlType.Enum,options:[\"Red\",\"White\",\"Black\"],optionTitles:[\"Red (difference blend)\",\"White (difference blend)\",\"Black (solid, no blend)\"],defaultValue:\"White\",title:\"Variant\"},size:{type:ControlType.Number,defaultValue:16,min:6,max:60,title:\"Size (px)\"},hoverScale:{type:ControlType.Number,defaultValue:2.5,min:1,max:6,step:.1,title:\"Hover scale\"},ease:{type:ControlType.Number,defaultValue:.18,min:.05,max:.6,step:.01,title:\"Follow ease\"},hideNativeCursor:{type:ControlType.Boolean,defaultValue:true,title:\"Hide native cursor\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CustomCursor\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CustomCursor.map"],"mappings":"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"}