{"version":3,"file":"Navbar_bottom.CELC1DfM.mjs","names":["useRef","useState","useId","useReducer","_Fragment","_jsx"],"sources":["https:/framerusercontent.com/modules/T94zqbWtqYS1aCIEyGgN/3mMNtZnetXTr7ibzAtzM/Navbar_bottom.js"],"sourcesContent":["// NavBar — Liquid Glass nav with REAL refraction for Framer.\n//\n// Design:\n//   A single horizontal capsule docked at the bottom of the viewport.\n//   Each item is a radio circle (filled when active, outlined when not)\n//   followed by its text label. No icons. Matches the reference design.\n//\n// Liquid Glass material:\n//   Uses an SVG <filter> with <feTurbulence> + <feDisplacementMap>,\n//   applied via CSS `backdrop-filter: url(#filterId)`. This actually\n//   warps the backdrop pixels behind the nav — not just blurs them —\n//   giving a real refractive feel rather than a flat frosted plane.\n//\n//   Browser support for `backdrop-filter: url()`:\n//     • Safari 18.4+ (desktop + iOS): full support — real refraction\n//     • Chrome 142+: partial support / behind flag in some configs\n//     • Firefox: no support\n//   The component detects support at runtime via CSS.supports() and\n//   falls back to plain `backdrop-filter: blur()` where url() isn't\n//   supported. Visually, fallback browsers get a clean frosted-glass\n//   capsule; supported browsers additionally get backdrop warping.\n//\n// Multi-page behaviour:\n//   Detects current URL on mount and highlights the matching item.\n//   Clicking navigates via window.location.assign(). The from-path is\n//   stashed in sessionStorage so future iterations can transition.\n//\n// Copy-to-clipboard:\n//   Any item whose link is a `mailto:` copies the address to the\n//   clipboard instead of firing the mail client, and pops a glass callout\n//   (\"Email copied\") that clears the top of the bar, with a tail pointing\n//   back down at the item that was clicked. Built from the nav's own\n//   material — same tint, blur, refraction and edge treatment.\n//\n//   Two constraints shape how it's assembled:\n//     • It is a SIBLING of the nav, not a child. An element with\n//       backdrop-filter is a backdrop root for its descendants, so a\n//       nested glass surface would have nothing left to sample.\n//     • Capsule and tail are ONE element shaped by `clip-path: path()`,\n//       not a capsule plus a triangle. Two elements would mean two\n//       backdrop-filter regions sampling and warping independently, and\n//       the seam between them would read as two pieces of glass. Where\n//       `path()` isn't supported the tail is simply dropped and the\n//       callout falls back to the plain capsule.\n/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useLayoutEffect,useReducer,useRef,useState,useId}from\"react\";import{createPortal}from\"react-dom\";// ---------- Constants ----------\nconst NB_CLASS=\"framer-liquid-navbar\";const NAV_FROM_PATH_KEY=\"framer-liquid-navbar-from-path\";const EASE_OUT=\"cubic-bezier(0.23, 1, 0.32, 1)\";// Expo-out. Nearly all the distance is covered in the first third of the\n// duration, so the callout is legible almost immediately and spends the\n// rest of the time settling rather than travelling.\nconst EASE_POP=\"cubic-bezier(0.16, 1, 0.3, 1)\";// The fade finishes well before the movement does — the words are\n// readable while the capsule is still easing the last pixel or two into\n// place. This is a confirmation, so time-to-legible is what matters.\nconst TOAST_FADE_MS=120;const TOAST_MOVE_MS=220;const TOAST_EXIT_MS=140;// Visually-hidden live region: announces the copy to screen readers\n// without the tooltip itself having to be readable.\nconst SR_ONLY={position:\"absolute\",width:1,height:1,margin:-1,padding:0,overflow:\"hidden\",clipPath:\"inset(50%)\",whiteSpace:\"nowrap\",border:0};// ---------- Helpers ----------\nfunction applyOpacity(color,alpha){if(!color)return`rgba(28, 28, 30, ${alpha})`;const trimmed=color.trim();if(trimmed.startsWith(\"#\")){let hex=trimmed.slice(1);if(hex.length===3){hex=hex.split(\"\").map(c=>c+c).join(\"\");}if(hex.length>=6){const r=parseInt(hex.slice(0,2),16);const g=parseInt(hex.slice(2,4),16);const b=parseInt(hex.slice(4,6),16);return`rgba(${r}, ${g}, ${b}, ${alpha})`;}}const m=trimmed.match(/rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)/);if(m)return`rgba(${m[1]}, ${m[2]}, ${m[3]}, ${alpha})`;return trimmed;}// Path normalization for tolerant URL comparison.\nfunction normalize(s){if(!s)return\"\";let v=s.trim().replace(/^https?:\\/\\/[^/]+/i,\"\");v=v.replace(/\\/+$/,\"\");v=v.toLowerCase();if(v&&!/^[a-z][a-z0-9+.-]*:/.test(v)&&!v.startsWith(\"#\")&&!v.startsWith(\"/\")){v=\"/\"+v;}return v||\"/\";}// Pulls the bare address out of a mailto link, dropping any\n// ?subject=/&body= query so only the address lands on the clipboard.\nfunction emailFromLink(link){if(!link)return\"\";const m=link.trim().match(/^mailto:([^?]*)/i);if(!m)return\"\";try{return decodeURIComponent(m[1]).trim();}catch{return m[1].trim();}}// Async Clipboard API where available (all current browsers on https),\n// with an execCommand fallback for insecure origins and older Safari.\n// Must stay inside the click's user-gesture window — don't await\n// anything before calling this.\nasync function copyToClipboard(text){if(!text)return false;try{if(navigator.clipboard&&navigator.clipboard.writeText){await navigator.clipboard.writeText(text);return true;}}catch{/* permission denied or non-secure context — try the fallback */}try{const ta=document.createElement(\"textarea\");ta.value=text;ta.setAttribute(\"readonly\",\"\");ta.style.position=\"fixed\";ta.style.top=\"0\";ta.style.left=\"0\";ta.style.opacity=\"0\";document.body.appendChild(ta);ta.select();ta.setSelectionRange(0,ta.value.length);const ok=document.execCommand(\"copy\");document.body.removeChild(ta);return ok;}catch{return false;}}// ---------- Copy tooltip ----------\n// Rounded capsule with a tail hanging off the bottom edge, as one closed\n// path in the element's own pixel space. `tipX` is where the point sits\n// horizontally — kept on the clicked item even when the capsule itself\n// has been nudged inward to stay on screen, so the tail always points at\n// what was copied.\nfunction calloutPath(w,h,tailW,tailH,tipX){const hc=h-tailH// capsule height, tail excluded\n;const r=Math.min(hc/2,w/2);const half=tailW/2;// Keep the tail's base off the rounded ends, or it eats the corner.\nconst tip=Math.min(Math.max(tipX,r+half),w-r-half);const n=v=>Math.round(v*100)/100;return[`M ${n(r)},0`,`H ${n(w-r)}`,`A ${n(r)},${n(r)} 0 0 1 ${n(w)},${n(r)}`,`V ${n(hc-r)}`,`A ${n(r)},${n(r)} 0 0 1 ${n(w-r)},${n(hc)}`,`H ${n(tip+half)}`,`L ${n(tip)},${n(h)}`,`L ${n(tip-half)},${n(hc)}`,`H ${n(r)}`,`A ${n(r)},${n(r)} 0 0 1 0,${n(hc-r)}`,`V ${n(r)}`,`A ${n(r)},${n(r)} 0 0 1 ${n(r)},0`,`Z`].join(\" \");}// A glass callout that pops above the bar, tail pointing down at the\n// item that was clicked. Positioned against measured rects rather than\n// nested inside the nav, so its backdrop-filter samples the page and not\n// the nav's own glass.\n//\n// Motion: rises 6px and scales up from 0.92 on a long-tailed ease going\n// in, then leaves faster and flatter — appearing should feel like it\n// settles into place, dismissing should feel like it just goes. Opacity\n// runs shorter than the transform so the capsule is fully legible while\n// it's still travelling the last of the distance.\n//\n// Driven by the Web Animations API rather than a CSS transition on a\n// state flip: an animation self-starts on the frame it's created, with\n// no dependence on a rAF callback landing between the from- and\n// to-states. The resting inline style is the VISIBLE state, so if\n// animations can't run at all (throttled frames, no el.animate) the\n// tooltip degrades to simply appearing rather than never showing.\nfunction CopyToast({anchor,message,open,offset,tint,opacity,backdropFilterCss,edgeHighlight,shadowStrength,textColor,fontSize,letterSpacing,fontFamily}){const elRef=useRef(null);// Tail geometry rides the type size so the callout stays in\n// proportion if the label size is tuned. Zero when `path()` isn't\n// available — the callout is then a plain capsule, which is the\n// right thing to lose.\nconst[supportsPath]=useState(()=>typeof window!==\"undefined\"&&!!window.CSS&&!!window.CSS.supports&&window.CSS.supports(\"clip-path\",'path(\"M 0 0 L 1 1 Z\")'));// Wider than tall — a shallow triangle reads as part of the capsule,\n// where an acute one reads as a spike hanging off it.\nconst tailW=supportsPath?Math.round(fontSize*1.45):0;const tailH=supportsPath?Math.round(fontSize*.58):0;// Read once at mount — the toast is short-lived, so re-reading on\n// change isn't worth a subscription. A later toast picks up a\n// changed setting on its own mount.\nconst[reduced]=useState(()=>typeof window!==\"undefined\"&&!!window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches);// Place and enter. Position is written imperatively before paint, so\n// there's no first frame at the wrong coordinates and no extra state.\n// Centered on the anchor, then clamped so a wide callout can't push\n// off either viewport edge (Contact sits at the nav's end). Vertical\n// anchor is the BAR's top edge, not the item's — the callout has to\n// clear the whole capsule, not just the row of text inside it.\nuseLayoutEffect(()=>{const el=elRef.current;if(!el)return;const place=()=>{const a=anchor.getBoundingClientRect();const bar=(anchor.closest(\"nav\")??anchor).getBoundingClientRect();const w=el.offsetWidth;const margin=8;const cx=a.left+a.width/2;const clamped=Math.min(Math.max(cx,w/2+margin),window.innerWidth-w/2-margin);el.style.left=`${clamped}px`;el.style.bottom=`${window.innerHeight-bar.top+offset}px`;if(tailH>0){// The tip tracks the item through any clamping shift.\nconst path=`path(\"${calloutPath(w,el.offsetHeight,tailW,tailH,w/2+(cx-clamped))}\")`;el.style.clipPath=path;el.style.webkitClipPath=path;}};place();window.addEventListener(\"resize\",place);const anims=[];if(typeof el.animate===\"function\"){anims.push(el.animate([{opacity:0},{opacity:1}],{duration:TOAST_FADE_MS,easing:EASE_OUT}));// Reduced motion keeps the fade but drops the travel and\n// the scale — the change in size is the part that reads as\n// motion here.\nif(!reduced){anims.push(el.animate([{transform:\"translateX(-50%) translateY(6px) scale(0.92)\"},{transform:\"translateX(-50%)\"}],{duration:TOAST_MOVE_MS,easing:EASE_POP}));}}return()=>{window.removeEventListener(\"resize\",place);anims.forEach(a=>a.cancel());};},[anchor,offset,reduced,tailW,tailH]);// Exit. `fill: forwards` holds the faded state for the few frames\n// between the animation ending and the parent unmounting us.\nuseEffect(()=>{if(open)return;const el=elRef.current;if(!el||typeof el.animate!==\"function\")return;el.animate([{opacity:1,transform:\"translateX(-50%)\"},{opacity:0,transform:reduced?\"translateX(-50%)\":\"translateX(-50%) translateY(4px) scale(0.96)\"}],{duration:TOAST_EXIT_MS,easing:\"ease-in\",fill:\"forwards\"});},[open,reduced]);return /*#__PURE__*/_jsx(\"div\",{ref:elRef,\"aria-hidden\":\"true\",style:{position:\"absolute\",// left/bottom are written by the layout effect above.\ndisplay:\"inline-flex\",alignItems:\"center\",// Extra bottom padding reserves the tail's strip of box.\n// The text stays centered in the capsule above it.\npadding:`7px 12px ${7+tailH}px`,// With a tail the shape comes from clip-path; a radius\n// here would additionally clip against a pill sized to\n// the box INCLUDING the tail, and bevel the corners.\nborderRadius:tailH>0?0:999,whiteSpace:\"nowrap\",color:textColor,fontFamily,fontSize,fontWeight:500,letterSpacing,lineHeight:1,background:applyOpacity(tint,opacity),backdropFilter:backdropFilterCss,WebkitBackdropFilter:backdropFilterCss,// clip-path clips box-shadow too, so the float shadow has\n// to come from `filter: drop-shadow` — which derives from\n// the clipped alpha and therefore hugs the tail. The top\n// specular edge survives clipping and stays an inset; the\n// nav's two faint rim insets are dropped, since they'd\n// trace the rectangle rather than the shape.\nboxShadow:tailH>0?`inset 0 1px 0 rgba(255, 255, 255, ${Math.min(1,edgeHighlight)})`:[`inset 0 1px 0 rgba(255, 255, 255, ${Math.min(1,edgeHighlight)})`,`inset 0 0 0 0.5px rgba(255, 255, 255, ${edgeHighlight*.35})`,`inset 0 0 0 1px rgba(0, 0, 0, 0.05)`,`0 1px 1px rgba(0, 0, 0, ${shadowStrength*.2})`,`0 6px 16px -6px rgba(0, 0, 0, ${shadowStrength*.9})`,`0 16px 30px -14px rgba(0, 0, 0, ${shadowStrength*.45})`].join(\", \"),filter:tailH>0?[`drop-shadow(0 1px 1px rgba(0, 0, 0, ${shadowStrength*.35}))`,`drop-shadow(0 5px 8px rgba(0, 0, 0, ${shadowStrength*.8}))`,`drop-shadow(0 14px 20px rgba(0, 0, 0, ${shadowStrength*.4}))`].join(\" \"):undefined,// Resting state = fully shown. The enter/exit animations\n// above play over this, so a browser that can't run them\n// still gets a working tooltip.\nopacity:1,transform:\"translateX(-50%)\",transformOrigin:\"50% 100%\",pointerEvents:\"none\",isolation:\"isolate\"},children:message});}// ---------- Radio circle ----------\nfunction RadioCircle({filled,ringColor,fillColor,size,strokeWidth}){return /*#__PURE__*/_jsxs(\"svg\",{width:size,height:size,viewBox:\"0 0 14 14\",\"aria-hidden\":\"true\",style:{flex:\"0 0 auto\",display:\"block\"},children:[/*#__PURE__*/_jsx(\"circle\",{cx:\"7\",cy:\"7\",r:7-strokeWidth/2,fill:\"none\",stroke:ringColor,strokeWidth:strokeWidth}),/*#__PURE__*/_jsx(\"circle\",{cx:\"7\",cy:\"7\",r:\"3.4\",fill:fillColor,style:{transform:filled?\"scale(1)\":\"scale(0)\",transformOrigin:\"50% 50%\",transition:`transform 260ms ${EASE_OUT}`}})]});}// ---------- Component ----------\nexport default function NavBar(props){const{items,fallbackActiveIndex,copyEmailOnClick,copiedMessage,tooltipDuration,tooltipOffset,tooltipOpacity,tooltipTextColor,tooltipFontSize,bottomOffset,activeTextColor,inactiveTextColor,fontSize,fontWeight,letterSpacing,fontFamily,ringColor,ringFillColor,ringStrokeWidth,glassTint,glassOpacity,glassBlur,glassSaturation,edgeHighlight,shadowStrength,refractionEnabled,refractionScale,refractionFrequency,refractionOctaves,cornerRadius,itemGap,paddingX,paddingY,zIndex}=props;// SSR guard — Framer renders on the server; window/CSS.supports/\n// location aren't available there. Render nothing until mount, then\n// flip the flag and render the real tree.\nconst[hasMounted,setHasMounted]=useState(false);useEffect(()=>{setHasMounted(true);},[]);// Per-instance filter ID so multiple NavBar instances on a page\n// don't collide on a global SVG filter ID.\nconst rawId=useId();const filterId=`lg-${rawId.replace(/[^a-z0-9-]/gi,\"\")}`;// Detect support for SVG filters in backdrop-filter.\n// Safari 18.4+ supports `backdrop-filter: url(#svg)` and renders the\n// refraction. Chrome support is partial; Firefox is none. When not\n// supported we fall back to a plain blur-based backdrop-filter,\n// which renders as clean frosted glass without the refraction.\nconst[supportsBackdropUrl,setSupportsBackdropUrl]=useState(false);useEffect(()=>{if(typeof window===\"undefined\"||!window.CSS)return;const probe=`url(\"#__lg_probe__\")`;const supported=window.CSS.supports(\"backdrop-filter\",probe)||window.CSS.supports(\"-webkit-backdrop-filter\",probe);setSupportsBackdropUrl(supported);},[]);// Force-render hook for URL changes (Framer's SPA router uses\n// history.pushState which doesn't fire popstate — we poll instead).\nconst[,forceRender]=useReducer(n=>n+1,0);// Active index from URL\nconst computeActiveIndex=()=>{if(typeof window===\"undefined\")return fallbackActiveIndex;if(!hasMounted)return fallbackActiveIndex;const path=normalize(window.location.pathname);const hash=window.location.hash.toLowerCase();let i=items.findIndex(it=>{const lk=normalize(it.link);return!!lk&&(lk===path||lk===hash);});if(i>=0)return i;i=items.findIndex(it=>{const lk=normalize(it.link);if(!lk||lk===\"/\")return false;return path.endsWith(lk)||hash.endsWith(lk);});if(i>=0)return i;i=items.findIndex(it=>normalize(it.link)===\"/\");if(i>=0&&(path===\"/\"||path===\"\"))return i;return fallbackActiveIndex;};const activeIndex=computeActiveIndex();// URL change subscription — 100ms poll catches programmatic\n// navigations, plus listeners for popstate/hashchange.\nuseEffect(()=>{let lastUrl=window.location.pathname+window.location.hash;const checkUrl=()=>{const currentUrl=window.location.pathname+window.location.hash;if(currentUrl!==lastUrl){lastUrl=currentUrl;forceRender();}};const pollId=window.setInterval(checkUrl,100);window.addEventListener(\"popstate\",forceRender);window.addEventListener(\"hashchange\",forceRender);return()=>{window.clearInterval(pollId);window.removeEventListener(\"popstate\",forceRender);window.removeEventListener(\"hashchange\",forceRender);};},[]);// ---- Copy tooltip state ----\n// `phase` drives the exit animation: the toast stays mounted through\n// its fade-out, then unmounts. `id` guards against a stale timer from\n// an earlier click tearing down a newer toast.\nconst[copyState,setCopyState]=useState(null);const[liveMessage,setLiveMessage]=useState(\"\");const copyIdRef=useRef(0);const copyTimersRef=useRef([]);const clearCopyTimers=()=>{copyTimersRef.current.forEach(t=>window.clearTimeout(t));copyTimersRef.current=[];};useEffect(()=>clearCopyTimers,[]);// Re-clicking while a toast is up remounts it (fresh `id` used as the\n// React key), so the pop replays instead of the timer silently\n// resetting under a static capsule.\nconst showCopyToast=anchor=>{clearCopyTimers();const id=copyIdRef.current+1;copyIdRef.current=id;setCopyState({anchor,id,phase:\"in\"});setLiveMessage(copiedMessage);copyTimersRef.current.push(window.setTimeout(()=>{setCopyState(s=>s&&s.id===id?{...s,phase:\"out\"}:s);},Math.max(400,tooltipDuration)),window.setTimeout(()=>{setCopyState(s=>s&&s.id===id?null:s);setLiveMessage(\"\");},Math.max(400,tooltipDuration)+TOAST_EXIT_MS));};// Click handler — copies mailto items, otherwise stores from-path\n// then navigates.\nconst onLinkClick=(e,link)=>{if(!link){e.preventDefault();return;}if(e.metaKey||e.ctrlKey||e.shiftKey||e.button!==0)return;// Contact — copy the address rather than handing off to a mail\n// client. Capture the anchor synchronously: currentTarget is\n// cleared once the handler returns, and the copy is async.\nconst email=copyEmailOnClick?emailFromLink(link):\"\";if(email){e.preventDefault();const anchor=e.currentTarget;copyToClipboard(email).then(ok=>{if(ok)showCopyToast(anchor);else window.location.href=link;});return;}if(/^(mailto:|tel:)/i.test(link))return;e.preventDefault();try{sessionStorage.setItem(NAV_FROM_PATH_KEY,window.location.pathname);}catch{/* sessionStorage may be blocked */}window.location.assign(link);};// Portal to document.documentElement so Framer's body transforms\n// don't affect the nav's fixed positioning.\nconst[portalEl]=useState(()=>{if(typeof document===\"undefined\")return null;return document.createElement(\"div\");});useLayoutEffect(()=>{if(!portalEl||typeof document===\"undefined\")return;portalEl.setAttribute(\"data-framer-navbar-portal\",\"\");portalEl.style.position=\"fixed\";portalEl.style.top=\"0\";portalEl.style.left=\"0\";portalEl.style.right=\"0\";portalEl.style.bottom=\"0\";portalEl.style.width=\"100%\";portalEl.style.height=\"100%\";portalEl.style.pointerEvents=\"none\";portalEl.style.transform=\"none\";portalEl.style.zIndex=String(zIndex);document.documentElement.appendChild(portalEl);return()=>{if(portalEl.parentNode)portalEl.parentNode.removeChild(portalEl);};},[portalEl,zIndex]);if(!hasMounted)return null;// Backdrop filter — refraction via SVG filter where supported,\n// plain blur fallback elsewhere. Both branches include saturation\n// boost to match iOS UIBlurEffect's color amplification.\nconst useRefraction=refractionEnabled&&supportsBackdropUrl;const backdropFilterCss=useRefraction?`url(#${filterId}) saturate(${glassSaturation}%)`:`blur(${glassBlur}px) saturate(${glassSaturation}%)`;// SVG filter definitions — rendered as a zero-sized invisible svg\n// alongside the nav. The filter chain:\n//   1. feTurbulence — generate organic noise (the \"liquid\" pattern)\n//   2. feDisplacementMap — warp the backdrop using the noise as a\n//      vector field. R channel drives X displacement, G drives Y.\n//   3. feGaussianBlur — soften the warped result for the frost finish.\nconst filterDefs=/*#__PURE__*/_jsx(\"svg\",{width:\"0\",height:\"0\",\"aria-hidden\":\"true\",style:{position:\"absolute\",width:0,height:0,overflow:\"hidden\",pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(\"defs\",{children:/*#__PURE__*/_jsxs(\"filter\",{id:filterId,x:\"-10%\",y:\"-10%\",width:\"120%\",height:\"120%\",colorInterpolationFilters:\"sRGB\",children:[/*#__PURE__*/_jsx(\"feTurbulence\",{type:\"fractalNoise\",baseFrequency:refractionFrequency,numOctaves:refractionOctaves,seed:7,result:\"noise\"}),/*#__PURE__*/_jsx(\"feDisplacementMap\",{in:\"SourceGraphic\",in2:\"noise\",scale:refractionScale,xChannelSelector:\"R\",yChannelSelector:\"G\"}),/*#__PURE__*/_jsx(\"feGaussianBlur\",{stdDeviation:Math.max(2,glassBlur*.3)})]})})});// Edge + shadow stack — same restrained Apple-on-white treatment\n// as the previous iteration: one bright top crescent, one soft\n// luminous rim, a hairline anchor, and a refined three-tier drop\n// shadow. Restraint reads more like physical glass than a layered\n// construction.\nconst navStyle={position:\"absolute\",bottom:bottomOffset,left:\"50%\",transform:\"translateX(-50%)\",display:\"inline-flex\",flexDirection:\"row\",alignItems:\"center\",gap:itemGap,padding:`${paddingY}px ${paddingX}px`,borderRadius:cornerRadius,background:applyOpacity(glassTint,glassOpacity),backdropFilter:backdropFilterCss,WebkitBackdropFilter:backdropFilterCss,boxShadow:[`inset 0 1px 0 rgba(255, 255, 255, ${Math.min(1,edgeHighlight)})`,`inset 0 0 0 0.5px rgba(255, 255, 255, ${edgeHighlight*.35})`,`inset 0 0 0 1px rgba(0, 0, 0, 0.05)`,`0 1px 1px rgba(0, 0, 0, ${shadowStrength*.2})`,`0 10px 24px -8px rgba(0, 0, 0, ${shadowStrength*.95})`,`0 28px 48px -20px rgba(0, 0, 0, ${shadowStrength*.5})`].join(\", \"),pointerEvents:\"auto\",fontFamily,isolation:\"isolate\"};const navTree=/*#__PURE__*/_jsx(\"nav\",{className:NB_CLASS,\"aria-label\":\"Navigation\",style:navStyle,children:items.map((item,i)=>{const isActive=i===activeIndex;// href stays the real mailto so cmd-click, middle-click and\n// \"Copy link\" keep working — only the plain left click is\n// intercepted for the clipboard.\nconst isCopyItem=copyEmailOnClick&&!!emailFromLink(item.link);return /*#__PURE__*/_jsxs(\"a\",{href:item.link||\"#\",onClick:e=>onLinkClick(e,item.link),\"aria-label\":isCopyItem?`${item.label} — copy email address`:item.label,\"aria-current\":isActive?\"page\":undefined,\"data-active\":isActive?\"true\":\"false\",style:{position:\"relative\",display:\"inline-flex\",flexDirection:\"row\",alignItems:\"center\",gap:6,color:isActive?activeTextColor:inactiveTextColor,textDecoration:\"none\",cursor:\"pointer\",fontSize,fontWeight,letterSpacing,lineHeight:1,whiteSpace:\"nowrap\",transition:`color 220ms ${EASE_OUT}`},children:[/*#__PURE__*/_jsx(RadioCircle,{filled:isActive,ringColor:ringColor,fillColor:ringFillColor,size:Math.round(fontSize*1.15),strokeWidth:ringStrokeWidth}),/*#__PURE__*/_jsx(\"span\",{children:item.label})]},i);})});const content=/*#__PURE__*/_jsxs(_Fragment,{children:[filterDefs,navTree,copyState&&/*#__PURE__*/_jsx(CopyToast,{anchor:copyState.anchor,message:copiedMessage,open:copyState.phase===\"in\",offset:tooltipOffset,tint:glassTint,opacity:tooltipOpacity,backdropFilterCss:backdropFilterCss,edgeHighlight:edgeHighlight,shadowStrength:shadowStrength,textColor:tooltipTextColor,fontSize:tooltipFontSize,letterSpacing:letterSpacing,fontFamily:fontFamily},copyState.id),/*#__PURE__*/_jsx(\"span\",{role:\"status\",\"aria-live\":\"polite\",style:SR_ONLY,children:liveMessage})]});return portalEl?/*#__PURE__*/createPortal(content,portalEl):content;}// ---------- Property Controls ----------\naddPropertyControls(NavBar,{items:{type:ControlType.Array,title:\"Items\",control:{type:ControlType.Object,controls:{label:{type:ControlType.String,defaultValue:\"Home\"},link:{type:ControlType.String,title:\"Link\",placeholder:\"/about or mailto:...\",defaultValue:\"\",description:\"Path or URL. Examples: /, /about, mailto:you@email.com. A mailto: item copies the address to the clipboard instead of opening a mail client (see Copy Email).\"}}},defaultValue:[{label:\"Home\",link:\"/\"},{label:\"About\",link:\"/about\"},{label:\"Playground\",link:\"/playground\"},{label:\"Contact\",link:\"mailto:thomasmccluskey561@gmail.com\"}]},fallbackActiveIndex:{type:ControlType.Number,title:\"Fallback Active\",defaultValue:0,min:0,step:1,description:\"Used when no item link matches the current URL.\"},// ---- Copy tooltip ----\ncopyEmailOnClick:{type:ControlType.Boolean,title:\"Copy Email\",defaultValue:true,description:\"Clicking any mailto: item copies the address to the clipboard and pops the tooltip, instead of launching a mail client. Cmd/middle-click still opens the mailto normally. Turn off to restore plain mailto behavior.\"},copiedMessage:{type:ControlType.String,title:\"Copied Text\",defaultValue:\"Email copied\",description:\"Tooltip copy. Also what screen readers announce on copy.\"},tooltipDuration:{type:ControlType.Number,title:\"Tooltip Time\",defaultValue:1600,min:400,max:5e3,step:100,unit:\"ms\",description:\"How long the tooltip holds before fading. ~1.6s is long enough to read two words and short enough not to linger.\"},tooltipOffset:{type:ControlType.Number,title:\"Tooltip Gap\",defaultValue:3,min:0,max:48,step:1,unit:\"px\",description:\"Gap between the top edge of the nav capsule and the point of the callout's tail. Measured from the bar, not from the item's text, so the callout always clears the whole capsule. 3px reads as resting on the bar while keeping them two separate objects; 0 fuses them.\"},tooltipOpacity:{type:ControlType.Number,title:\"Tooltip Opacity\",defaultValue:.5,min:0,max:1,step:.02,description:\"Alpha of the callout's glass. Matches Glass Opacity by default so the two surfaces are the same material; tint, blur, refraction and edge treatment are inherited from the nav's settings directly. Raise toward 0.65 only if the label loses legibility over a busy photo.\"},tooltipTextColor:{type:ControlType.Color,title:\"Tooltip Text\",defaultValue:\"#FFFFFF\",description:\"Full white here, unlike the nav's off-white — the tooltip is a momentary confirmation and should read as the brightest thing on screen while it's up.\"},tooltipFontSize:{type:ControlType.Number,title:\"Tooltip Size\",defaultValue:12,min:10,max:20,step:.5,unit:\"px\"},// ---- Position ----\nbottomOffset:{type:ControlType.Number,title:\"Bottom Offset\",defaultValue:36,min:0,max:200,step:1,unit:\"px\",description:\"Distance from the bottom edge of the viewport. The nav docks at the bottom center.\"},// ---- Text ----\nactiveTextColor:{type:ControlType.Color,title:\"Active Text\",defaultValue:\"#E8E5E3\",description:\"Text color of the active item. Slightly brighter than inactive so the active state has subtle text emphasis alongside the radio fill. Pure white feels harsh against the dim grey inactive — a soft warm off-white reads more refined.\"},inactiveTextColor:{type:ControlType.Color,title:\"Inactive Text\",defaultValue:\"#94908F\",description:\"Text color of inactive items. Warm medium grey reads as 'secondary' on the dark glass capsule.\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:12,min:10,max:24,step:.5,unit:\"px\"},fontWeight:{type:ControlType.Number,title:\"Font Weight\",defaultValue:600,min:100,max:900,step:100},letterSpacing:{type:ControlType.Number,title:\"Letter Spacing\",defaultValue:-.2,min:-2,max:2,step:.1,unit:\"px\"},fontFamily:{type:ControlType.String,title:\"Font Family\",defaultValue:\"Inter, system-ui, -apple-system, sans-serif\"},// ---- Radio circle ----\nringColor:{type:ControlType.Color,title:\"Ring Color\",defaultValue:\"#94908F\",description:\"Outline color of the radio circle. Matches inactive text by default so the ring reads as part of the same secondary layer.\"},ringFillColor:{type:ControlType.Color,title:\"Ring Fill\",defaultValue:\"#FFFFFF\",description:\"Fill color of the active radio's inner dot. Animates in via a scale transition when the item becomes active. This is the primary active-state indicator.\"},ringStrokeWidth:{type:ControlType.Number,title:\"Ring Stroke\",defaultValue:1,min:.5,max:3,step:.1,unit:\"px\"},// ---- Glass material ----\nglassTint:{type:ControlType.Color,title:\"Glass Tint\",defaultValue:\"#4A4744\",description:\"Glass material hue. Warm dark grey reads as the soft medium-grey capsule from the reference. Switch to a lighter tint if you prefer dark text on light glass.\"},glassOpacity:{type:ControlType.Number,title:\"Glass Opacity\",defaultValue:.5,min:0,max:1,step:.02,description:\"Alpha of the glass tint. 0.50 gives the warm dark capsule enough presence on white pages while still letting the backdrop show through on photos.\"},glassBlur:{type:ControlType.Number,title:\"Glass Blur\",defaultValue:28,min:0,max:80,step:1,unit:\"px\",description:\"Backdrop blur amount. Used by the fallback path in browsers that don't support SVG-filter backdrop-filter. Also influences the Gaussian smoothing inside the refraction filter.\"},glassSaturation:{type:ControlType.Number,title:\"Saturation\",defaultValue:180,min:50,max:250,step:5,unit:\"%\",description:\"Color pop behind the glass. 180% matches iOS UIBlurEffect — pulls color from surrounding content.\"},edgeHighlight:{type:ControlType.Number,title:\"Edge Highlight\",defaultValue:.3,min:0,max:1,step:.05,description:\"Brightness of the top specular edge and the luminous rim. 0.30 keeps the top edge soft instead of reading as a hard bright outline — bump up for more pronounced lit-glass feel, drop further to ~0.15 for an even more restrained look.\"},shadowStrength:{type:ControlType.Number,title:\"Shadow Strength\",defaultValue:.22,min:0,max:.6,step:.01,description:\"Outer drop-shadow alpha. The nav floats with a soft three-tier shadow (close contact, mid bloom, soft ambient).\"},// ---- Refraction (SVG filter) ----\nrefractionEnabled:{type:ControlType.Boolean,title:\"Refraction\",defaultValue:true,description:\"Enable SVG-based backdrop refraction (warps backdrop pixels, not just blurs). Active in Safari 18.4+; Chrome partial; Firefox falls back to plain blur. Turn off to force the blur fallback everywhere.\"},refractionScale:{type:ControlType.Number,title:\"Refraction Scale\",defaultValue:18,min:0,max:60,step:1,unit:\"px\",description:\"Maximum displacement of backdrop pixels. ~15–22 reads as gentle Liquid Glass refraction; >30 starts to look like distortion artifacts. Only visible on backdrops with color/contrast — uniform backdrops have nothing to warp.\"},refractionFrequency:{type:ControlType.Number,title:\"Refraction Frequency\",defaultValue:.012,min:.002,max:.05,step:.001,description:\"Spatial frequency of the turbulence pattern that drives refraction. Lower values (~0.005–0.015) give large, slow 'waves'; higher values give tighter, busier distortion.\"},refractionOctaves:{type:ControlType.Number,title:\"Refraction Octaves\",defaultValue:2,min:1,max:4,step:1,description:\"Number of noise layers in the turbulence pattern. Higher = more organic complexity but more expensive to render.\"},// ---- Layout ----\ncornerRadius:{type:ControlType.Number,title:\"Corner Radius\",defaultValue:24,min:0,max:999,step:1,unit:\"px\",description:\"Capsule corner radius. 24 gives a softly rounded rect (matches the reference). Set to 999 for a fully rounded pill / capsule.\"},itemGap:{type:ControlType.Number,title:\"Item Gap\",defaultValue:16,min:8,max:64,step:1,unit:\"px\",description:\"Horizontal spacing between items. Tighter (~14–18) reads as a refined modern nav; wider (~24+) starts to feel like a chunky dock.\"},paddingX:{type:ControlType.Number,title:\"Padding X\",defaultValue:16,min:8,max:60,step:1,unit:\"px\"},paddingY:{type:ControlType.Number,title:\"Padding Y\",defaultValue:8,min:4,max:32,step:1,unit:\"px\"},// ---- Misc ----\nzIndex:{type:ControlType.Number,title:\"Z-Index\",defaultValue:9999,min:0,max:999999,step:1,description:\"Stacking layer. Keep high so the nav floats above page content.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"NavBar\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Navbar_bottom.map"],"mappings":"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"}