{"version":3,"file":"shared-lib.DerXxIi6.mjs","names":["__esmMin","init_npm_react_18_3_1","window","c","init_jsx_runtime","ce","init_ssg_sandbox_shims","addPropertyControls","init_framer_BWFVvmND","useIsStaticRenderer","useSharedStyles","tag","id","css","useProximity","el","ref","enabled","host","box","measure","st","px","py","on","focused","raf","step","r","pt","rx","ry","dist","dx","dy","beforeHover","reach","tx","clamp","ty","ease","ang","more","onFrame","kick","onMove","onLeave","onFocus","onBlur","foilStops","s","spread","l","li","i","hue","foilCSS","p","GLITTER","luminance","ok","cs","m","g","b","x","v","useSurface","update","page","n","pageLum","probeSelector","probe","base","mo","mq","later","paletteStops","o","seeds","S","t","a","f","paletteVars","prefix","pickPalette","SEED_DEFAULTS","shadowSteps","w","layers","sum","out","y","length","SH","TOKENS","GLITTER_SVG","hideSpectrum","hideSeeds","hideAccent","PALETTE_CONTROLS","CARD_SHINE_SIZE","SHADOW_SIZES","shColour","boxShadow","shapeShadow","SHADOW_CSS","init_SpectrumShared","share","k","FocusRing","props","isStatic","label","seen","who","name","inner","src","scrolls","cap","head","th","dlg","u","q","msg","lastOutside","searchOpen","focusIn","run","was","rt","resize","visible","colour","halo","ringWidth","ringOffset","SEL","init_FocusRing","ring","ControlType"],"sources":["https:/framerusercontent.com/modules/xXMBRP6xEscknKQvTMla/nOgwdkXu2Q8xTbSE9F29/SpectrumShared.js","https:/framerusercontent.com/modules/Ppa5ZFw5h8G3dPcZD3H0/Y8IBNW3GLOc9IKZhoAZU/FocusRing.js"],"sourcesContent":["import{useEffect}from\"react\";// Shared helpers for the Spectrum components (chip, button, star).\n// Adds a stylesheet to <head> once, however many instances are on the page.\nexport function useSharedStyles(id,css){useEffect(()=>{let tag=document.getElementById(id);if(!tag){tag=document.createElement(\"style\");tag.id=id;document.head.appendChild(tag);}if(tag.textContent!==css)tag.textContent=css;},[id,css]);}const clamp=(v,a,b)=>Math.min(b,Math.max(a,v));// Writes --g, --mx, --my and --ang onto the element as the pointer approaches,\n// and sets data-near once it is close. Keyboard focus counts as touching.\nexport function useProximity(ref,{enabled,reach,beforeHover,measure=\"self\",ease=.2,onFrame}){useEffect(()=>{const el=ref.current;if(!enabled||!el)return;// Focus is tracked on whichever link or button holds the element (or sits inside it).\nconst host=el.matches(\"a, button\")?el:el.closest(\"a, button\")??el.querySelector(\"a, button\");const box=measure===\"host\"&&host?host:el;const st={x:.5,y:.5,g:0};let px=-1e4,py=-1e4,on=false,focused=false,raf=0;const step=()=>{raf=0;const r=box.getBoundingClientRect();let pt=0,rx=.5,ry=.5,dist=Infinity;if(focused){pt=1;dist=0;}else if(on&&r.width>0){const dx=Math.max(r.left-px,0,px-r.right);const dy=Math.max(r.top-py,0,py-r.bottom);dist=Math.hypot(dx,dy);pt=dist===0?1:beforeHover?Math.max(0,1-dist/reach):0;pt=pt*pt*(3-2*pt);rx=(px-r.left)/r.width;ry=(py-r.top)/r.height;}const tx=pt>.01&&!focused?clamp(rx,-.5,1.5):.5;const ty=pt>.01&&!focused?clamp(ry,-.5,1.5):.5;st.x+=(tx-st.x)*ease;st.y+=(ty-st.y)*ease;st.g+=(pt-st.g)*.14;const ang=Math.atan2(st.y-.5,(st.x-.5)*r.width/Math.max(r.height,1))*180/Math.PI+90;const css=el.style;css.setProperty(\"--mx\",(st.x*100).toFixed(1)+\"%\");css.setProperty(\"--my\",(st.y*100).toFixed(1)+\"%\");css.setProperty(\"--ang\",ang.toFixed(1)+\"deg\");css.setProperty(\"--g\",st.g.toFixed(3));el.toggleAttribute(\"data-near\",st.g>.5);const more=onFrame?.({g:st.g,x:st.x,y:st.y,el});const settled=Math.abs(pt-st.g)<.002&&Math.abs(tx-st.x)<.002&&Math.abs(ty-st.y)<.002;if(!settled||more||on&&dist<reach*1.5)raf=requestAnimationFrame(step);};const kick=()=>{if(!raf)raf=requestAnimationFrame(step);};const onMove=e=>{px=e.clientX;py=e.clientY;on=true;kick();};const onLeave=()=>{on=false;kick();};const onFocus=e=>{focused=e.target.matches?.(\":focus-visible\")??true;kick();};const onBlur=()=>{focused=false;kick();};window.addEventListener(\"pointermove\",onMove,{passive:true});document.documentElement.addEventListener(\"pointerleave\",onLeave);window.addEventListener(\"blur\",onLeave);host?.addEventListener(\"focus\",onFocus);host?.addEventListener(\"blur\",onBlur);return()=>{cancelAnimationFrame(raf);window.removeEventListener(\"pointermove\",onMove);document.documentElement.removeEventListener(\"pointerleave\",onLeave);window.removeEventListener(\"blur\",onLeave);host?.removeEventListener(\"focus\",onFocus);host?.removeEventListener(\"blur\",onBlur);};},[ref,enabled,reach,beforeHover,measure,ease,onFrame]);}// Site colour styles, with the dark-mode value as fallback.\nexport const TOKENS={textSecondary:\"var(--token-1103eab9-1384-4e53-8ad9-d060dcee532a, #a1a1a1)\",textPrimary:\"var(--token-72be4b58-ad30-40d4-9403-e97ffbb2d1b3, #f6f6f6)\",lime:\"var(--token-c925e94c-9f2a-4014-9ebf-19d23c054654, #c2ff66)\",limeSurface:\"var(--token-74d5d851-d806-4c09-a678-a60d5bf5a1b1, rgba(17, 31, 8, 0.5))\",limeBorder:\"var(--token-ffe9185e-0379-488f-858b-50b5c7c68144, rgba(44, 79, 10, 0.5))\",inverse:\"var(--token-35911f0f-9d59-49bc-8df9-8d645c2176d5, #ededed)\",onInverse:\"var(--token-a9e1c999-7996-4f18-b63f-d1186deeaccf, #161616)\",page:\"var(--token-cc944d59-d713-46c5-805a-36c4e8480b17, #161616)\",divider:\"var(--token-a7b4259f-612f-48f2-ac42-98bc0c2c044d, rgb(39, 43, 45))\"};// Hues for the spectrum palette, in order around the foil.\nexport const SPECTRUM_HUES=[200,250,300,350,60,130];// ---------------------------------------------------------------------------------------------\n// Foil: the recipe shared by the avatar, the foil cards and SpectrumFoil.\n// Seven stops around the spectrum. Spread 1 is the full rainbow; lower values keep a narrow band\n// around the hue.\nexport function foilStops(hue=0,spread=1){const s=spread>=.99?51.4:spread*60;const l=[80,82,84,83,80,78,80],c=[.17,.16,.15,.15,.16,.17,.17];return l.map((li,i)=>`oklch(${li}% ${c[i]} ${(hue+s*(i-3)).toFixed(1)}deg)`);}export function foilVars(hue=0,spread=1){const v={};foilStops(hue,spread).forEach((c,i)=>v[`--c${i+1}`]=c);return v;}const GLITTER_SVG='<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"150\"><filter id=\"g\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"1.1\" numOctaves=\"1\" seed=\"4\"/><feColorMatrix type=\"saturate\" values=\"0\"/><feComponentTransfer><feFuncR type=\"discrete\" tableValues=\"0 0 0 0 0 0 0 0 0 1\"/><feFuncG type=\"discrete\" tableValues=\"0 0 0 0 0 0 0 0 0 1\"/><feFuncB type=\"discrete\" tableValues=\"0 0 0 0 0 0 0 0 0 1\"/></feComponentTransfer></filter><rect width=\"100%\" height=\"100%\" filter=\"url(#g)\"/></svg>';export const GLITTER=`url(\"data:image/svg+xml,${encodeURIComponent(GLITTER_SVG)}\")`;// CSS for the foil layers, scoped to a class prefix. The layers read:\n//   --g (0-1 response), --mx/--my (pointer), --px/--py (shine offset), --int (intensity),\n//   --rest (shine strength at rest), --c1..--c7 (stops), --glitter-size.\n// The rainbow bands run top to bottom on the square avatar. Wide, short elements (buttons,\n// stickers, words) apply WIDE_SHINE, which turns the bands to run across and stretches them along\n// the width, so they show the same two or three hues at once that the avatar does.\n// On a dark surface the shine and glitter colour-dodge (brighten), as on the foil cards.\n// On a light surface brightening washes colour out to grey, so the shine overlays instead,\n// which adds colour without lightening. useSurface() sets data-surface on the element.\nexport function foilCSS(p){return`\n.${p}-shine { mix-blend-mode: color-dodge;\n  background-image:\n    repeating-linear-gradient(var(--shine-angle, 0deg), var(--c1) 0%, var(--c2) 4.5%, var(--c3) 9%, var(--c4) 13.5%, var(--c5) 18%, var(--c6) 22.5%, var(--c7) 27%, var(--c1) 31.5%),\n    repeating-linear-gradient(126deg, #0e152e 0%, oklch(68% 0.03 210) 3.8%, oklch(76% 0.06 200) 4.5%, oklch(68% 0.03 210) 5.2%, #0e152e 10%, #0e152e 12%),\n    radial-gradient(farthest-corner circle at var(--mx, 50%) var(--my, 50%), oklch(100% 0 0 / .1) 12%, oklch(0% 0 0 / .18) 30%, oklch(0% 0 0 / .45) 120%);\n  background-size: var(--shine-size, 200% 700%, 300% 300%, 200% 200%);\n  background-position: var(--stripe-pos, 0% var(--py, 50%)), var(--px, 50%) var(--py, 50%), center;\n  background-blend-mode: soft-light, hard-light, normal;\n  filter: brightness(calc(1 + var(--g, 0) * .5)) contrast(2.2) saturate(1.6);\n  opacity: calc((var(--rest, .35) + var(--g, 0) * (1 - var(--rest, .35))) * var(--int, 1)); }\n.${p}-glitter { mix-blend-mode: color-dodge; background-image: ${GLITTER}; background-size: var(--glitter-size, 90px) var(--glitter-size, 90px);\n  background-position: calc(var(--px, 50%) * 2) calc(var(--py, 50%) * 2); filter: brightness(1.2);\n  opacity: calc(var(--g, 0) * .9 * var(--int, 1)); }\n.${p}-glare { mix-blend-mode: overlay;\n  background: radial-gradient(farthest-corner circle at var(--mx, 50%) var(--my, 50%), oklch(100% 0 0 / .8) 6%, oklch(100% 0 0 / .4) 22%, oklch(0% 0 0 / .5) 95%);\n  opacity: calc(var(--g, 0) * .8 * var(--int, 1)); }\n[data-surface=\"light\"] .${p}-shine { mix-blend-mode: overlay; filter: contrast(1.6) saturate(1.8); }\n[data-surface=\"light\"] .${p}-glitter { mix-blend-mode: soft-light; }\n[data-surface=\"light\"] .${p}-glare { mix-blend-mode: soft-light; }\n@media not (prefers-color-scheme: dark) {\n  .${p}-shine:not([data-surface] *) { mix-blend-mode: overlay; filter: contrast(1.6) saturate(1.8); }\n  :is(.${p}-glitter, .${p}-glare):not([data-surface] *) { mix-blend-mode: soft-light; } }\n`;}// Sets --px/--py (shine offset, mapped as on the avatar) and --tx/--ty (card tilt) from a frame.\nexport function writeFoilFrame(target,f,tilt){const cx=clamp(f.x,0,1),cy=clamp(f.y,0,1);const reduce=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;const t=reduce?0:tilt*f.g;const css=target.style;css.setProperty(\"--px\",(37+cx*26).toFixed(2)+\"%\");css.setProperty(\"--py\",(33+cy*34).toFixed(2)+\"%\");css.setProperty(\"--tx\",((cx-.5)*t).toFixed(2)+\"deg\");css.setProperty(\"--ty\",((.5-cy)*t).toFixed(2)+\"deg\");}// Relative luminance of a computed rgb()/rgba() colour, or null if transparent.\nexport function luminance(c){// oklch() / oklab() (what color-mix() computes to): lightness first, as 0-1 or a %. Relative luminance is about L cubed\nconst ok=c.match(/^okl(?:ch|ab)\\(\\s*([\\d.]+)(%?)[^/)]*(?:\\/\\s*([\\d.]+)(%?))?/);if(ok){const a=ok[3]==null?1:Number(ok[3])/(ok[4]?100:1);return a===0?null:(Number(ok[1])/(ok[2]?100:1))**3;}// color(srgb r g b): channels 0-1\nconst cs=c.match(/^color\\(srgb\\s+([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)(?:\\s*\\/\\s*([\\d.]+))?/);if(cs)c=`rgb(${+cs[1]*255}, ${+cs[2]*255}, ${+cs[3]*255}${cs[4]!=null?`, ${cs[4]}`:\"\"})`;const m=c.match(/[\\d.]+/g);if(!m||m.length<3||m.length>3&&Number(m[3])===0)return null;const[r,g,b]=m.slice(0,3).map(v=>{const x=Number(v)/255;return x<=.04045?x/12.92:((x+.055)/1.055)**2.4;});return .2126*r+.7152*g+.0722*b;}// Works out the surface an element sits on and writes data-surface=\"light\" | \"dark\" onto it.\n// With a probe (an element whose `color` is the foil's base colour) it also writes --lock:\n// 1 where brightening the base would lower its contrast with the page, 0 where it would raise it.\n// Re-checks when the site's theme toggle or the OS theme changes.\nexport function useSurface(ref,probeSelector,enabled=true){useEffect(()=>{const el=ref.current;if(!el||!enabled)return;const update=()=>{let page=null;for(let n=el.parentElement;n&&page===null;n=n.parentElement)page=luminance(getComputedStyle(n).backgroundColor);const pageLum=page??1;el.dataset.surface=pageLum>.4?\"light\":\"dark\";if(probeSelector){const probe=el.querySelector(probeSelector);const base=probe?luminance(getComputedStyle(probe).color):null;el.style.setProperty(\"--lock\",base!==null&&base>pageLum?\"0\":\"1\");}};update();const mo=new MutationObserver(update);mo.observe(document.documentElement,{attributes:true});mo.observe(document.body,{attributes:true});const mq=window.matchMedia(\"(prefers-color-scheme: dark)\");mq.addEventListener(\"change\",update);window.addEventListener(\"storage\",update);// The site's theme toggle swaps colour styles without touching attributes, so check after clicks too.\nconst later=()=>setTimeout(update,80);document.addEventListener(\"click\",later);return()=>{mo.disconnect();mq.removeEventListener(\"change\",update);window.removeEventListener(\"storage\",update);document.removeEventListener(\"click\",later);};},[ref,probeSelector,enabled]);}export function paletteStops(p){if(p.palette===\"accent\"&&p.accent){const l=p.matchLightness===false?\"l\":\".8\",c=p.matchLightness===false?\"c\":\"max(c, .12)\";return[-45,-30,-15,0,15,30,45].map(o=>`oklch(from ${p.accent} ${l} ${c} calc(h + ${o}))`);}const seeds=p.palette===\"seeds\"?[p.seed1,p.seed2,p.seed3].filter(c=>!!c):[];if(!seeds.length)return foilStops(p.hue??0,p.spread??1);const S=seeds.map(c=>p.matchLightness===false?c:`oklch(from ${c} .8 max(c, .12) h)`);return Array.from({length:7},(_,i)=>{const t=i/7*S.length;const a=Math.floor(t)%S.length,b=(a+1)%S.length,f=t-Math.floor(t);return f<.01||S.length===1?S[a]:`color-mix(in oklch, ${S[a]} ${Math.round((1-f)*100)}%, ${S[b]})`;});}export function paletteVars(p,prefix=\"--c\"){const v={};paletteStops(p).forEach((c,i)=>v[`${prefix}${i+1}`]=c);return v;}const SEED_DEFAULTS=[TOKENS.lime,\"var(--token-46f860d4-6708-40b9-930b-21c953d17e45, rgb(193, 191, 255))\",\"var(--token-25d897a2-f011-4b5a-b3a5-62fa9a82fe3f, rgb(120, 140, 255))\"];const hideSpectrum=p=>p.palette===\"seeds\"||p.palette===\"accent\";const hideSeeds=p=>p.palette!==\"seeds\";const hideAccent=p=>p.palette!==\"accent\";export const PALETTE_CONTROLS={palette:{type:\"enum\",title:\"Palette\",defaultValue:\"spectrum\",options:[\"spectrum\",\"accent\",\"seeds\"],optionTitles:[\"Spectrum\",\"Accent\",\"Seed colours\"]},accent:{type:\"color\",title:\"Accent\",defaultValue:SEED_DEFAULTS[0],hidden:hideAccent},hue:{type:\"number\",title:\"Hue\",defaultValue:0,min:0,max:360,step:1,hidden:hideSpectrum},spread:{type:\"number\",title:\"Spread\",defaultValue:1,min:.05,max:1,step:.05,hidden:hideSpectrum},seed1:{type:\"color\",title:\"Seed 1\",defaultValue:SEED_DEFAULTS[0],hidden:hideSeeds},seed2:{type:\"color\",title:\"Seed 2\",defaultValue:SEED_DEFAULTS[1],optional:true,hidden:hideSeeds},seed3:{type:\"color\",title:\"Seed 3\",defaultValue:SEED_DEFAULTS[2],optional:true,hidden:hideSeeds},matchLightness:{type:\"boolean\",title:\"Foil lightness\",defaultValue:true,hidden:p=>p.palette!==\"seeds\"&&p.palette!==\"accent\"}};// Reads the palette settings off a component's props, with the same defaults as the controls.\nexport function pickPalette(p){return{palette:p.palette??\"spectrum\",hue:p.hue??0,spread:p.spread??1,accent:p.accent??SEED_DEFAULTS[0],seed1:p.seed1??SEED_DEFAULTS[0],seed2:p.seed2??SEED_DEFAULTS[1],seed3:p.seed3??SEED_DEFAULTS[2],matchLightness:p.matchLightness??true};}export const WIDE_SHINE={\"--shine-angle\":\"90deg\",\"--shine-size\":\"700% 200%, 300% 300%, 200% 200%\",\"--stripe-pos\":\"var(--px, 50%) 50%\"};// The foil cards' pattern at the cards' own size (270 x 377px): small elements show a slice of a\n// card-sized sheet, and the colour cycles through it as the pointer moves, exactly as on a card.\nexport const CARD_SHINE_SIZE=\"540px 2640px, 810px 1131px, 200% 200%\";// ---------------------------------------------------------------------------------------------\n// Shadows: the site's one shadow recipe. Many soft layers, each a little lower, blurrier and pulled in, so\n// the shadow reads as soft light rather than one grey smudge. Light pages use a faint navy; dark pages plain\n// black, stronger, or it vanishes on #161616. Tuned by Ben in the shadow tuner (17 Oct 2026) on the Menu button:\n// md = 9 layers, 16px long, softness .82, pull-in .27, curve 1.9, strength .19 light / 1.22 dark.\n// sm and lg are the same recipe, shorter and longer. Three sizes:\n//   sm  things resting on the page (cards, chips)\n//   md  things floating over the page (the Menu button, popovers)\n//   lg  things well above the page (panels, dialogs)\n// Use the CSS variables, so every component picks up the same values and dark mode in one place:\n//   box-shadow: var(--shadow-md)          drop shadows on boxes\n//   filter: var(--shadow-shape-md)        follows a shape's outline (cut-outs, icons, transparent PNGs)\n// Include SHADOW_CSS once in a component's <style> (it only defines variables, so repeats are harmless).\nconst SHADOW_SIZES={sm:{layers:6,length:7},md:{layers:9,length:16},lg:{layers:12,length:40}};const SH={blur:.82,spread:.27,curve:1.9};// Each layer's share of the total strength: later layers get a little more (0.75x to 1.25x of the mean).\nfunction shadowSteps(layers,length){const w=i=>.75+.5*(i/layers);let sum=0;for(let i=1;i<=layers;i++)sum+=w(i);const out=[];for(let i=1;i<=layers;i++){const y=length*Math.pow(i/layers,SH.curve);out.push([+y.toFixed(1),+(y*SH.blur).toFixed(1),+(-y*SH.spread).toFixed(1),+(w(i)/sum).toFixed(4)]);}return out;}const shColour=share=>`rgb(var(--shadow-tint) / calc(${share} * var(--shadow-strength)))`;const boxShadow=k=>shadowSteps(SHADOW_SIZES[k].layers,SHADOW_SIZES[k].length).map(([y,b,s,a])=>`0 ${y}px ${b}px ${s}px ${shColour(a)}`).join(\", \");// drop-shadow() has no spread, so the blur is halved to keep about the same footprint.\nconst shapeShadow=k=>shadowSteps(SHADOW_SIZES[k].layers,SHADOW_SIZES[k].length).map(([y,b,,a])=>`drop-shadow(0 ${y}px ${+(b/2).toFixed(2)}px ${shColour(a)})`).join(\" \");export const SHADOW_CSS=`\n:root { --shadow-tint: 26 34 72; --shadow-strength: .19;\n  --shadow-sm: ${boxShadow(\"sm\")};\n  --shadow-md: ${boxShadow(\"md\")};\n  --shadow-lg: ${boxShadow(\"lg\")};\n  --shadow-shape-sm: ${shapeShadow(\"sm\")};\n  --shadow-shape-md: ${shapeShadow(\"md\")};\n  --shadow-shape-lg: ${shapeShadow(\"lg\")}; }\n@media (prefers-color-scheme: dark) { :root { --shadow-tint: 0 0 0; --shadow-strength: 1.22; } }\n`;\nexport const __FramerMetadata__ = {\"exports\":{\"foilStops\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"writeFoilFrame\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"GLITTER\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ProximityFrame\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"foilCSS\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"WIDE_SHINE\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PaletteProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"luminance\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SPECTRUM_HUES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PALETTE_CONTROLS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"paletteVars\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useSharedStyles\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"TOKENS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"paletteStops\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useProximity\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"pickPalette\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CARD_SHINE_SIZE\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"foilVars\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SHADOW_CSS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useSurface\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SpectrumShared.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{TOKENS}from\"https://framerusercontent.com/modules/xXMBRP6xEscknKQvTMla/nOgwdkXu2Q8xTbSE9F29/SpectrumShared.js\";// Site-wide focus ring, CSS only. Place one instance on every page (it lives in the nav).\n// One rule for everything: a solid ring in Text/Primary, 2px clear of the element, with a halo in\n// the page colour on both sides, so it keeps 3:1 contrast over photos, cards and foil.\n//   element | 2px halo | 2px ring | 2px halo\n// Frames that used to clip the ring had their overflow turned off in Framer, so nothing is moved\n// inside. Components with their own focus style keep it: these rules use :where() (no specificity).\n// High contrast mode drops the halo (box-shadow) and keeps the solid ring.\nconst SEL=\"a[href],button,input,select,textarea,summary,[tabindex]:not([tabindex='-1']),[contenteditable='true']\";const css=(ring,halo,w,o)=>`\n:where(${SEL}), :where(:has(> .framer-before-after-range)) { --focus-ring: ${ring}; --focus-halo: ${halo}; }\n:where(${SEL}):focus-visible {\n  outline: ${w}px solid var(--focus-ring); outline-offset: ${o}px;\n  box-shadow: 0 0 0 ${o}px var(--focus-halo), 0 0 0 ${o+w+2}px var(--focus-halo);\n  position: relative; z-index: 1;\n}\n@supports not selector(:focus-visible) {\n  :where(${SEL}):focus { outline: ${w}px solid var(--focus-ring); outline-offset: ${o}px; box-shadow: 0 0 0 ${o}px var(--focus-halo), 0 0 0 ${o+w+2}px var(--focus-halo); }\n}\n/* Links with square corners get soft ones, so the ring doesn't box in the words. */\n:where(a:not(:has(img, picture, video))):focus-visible { border-radius: 6px; }\n/* Links set on a text layer (Terms, Privacy, links inside sentences) get the same ring as every other link, plus the underline. */\n/* Their text box is only one line tall, so the ring sits 2px further out to clear the underline. */\na.framer-text:focus-visible { border-radius: 6px; outline-offset: ${o+2}px; box-shadow: 0 0 0 ${o+2}px var(--focus-halo), 0 0 0 ${o+w+4}px var(--focus-halo);\n  text-decoration-line: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; }\n/* Standalone text links (a text layer named \"Link Label\") underline on keyboard focus, as they do on hover. */\n:where(a:focus-visible, :has(> [data-framer-name=\"[s]\"] button:focus-visible)) > [data-framer-name=\"Link Label\"] .framer-text {\n  text-decoration-line: underline; text-decoration-thickness: 1px; text-underline-offset: 4px; }\n/* Form fields: Framer switches their outline off. Their ring sits on the field's edge. */\n.framer-form-input:focus-visible, .framer-form-input:focus { outline: ${w}px solid var(--focus-ring) !important; outline-offset: -${w}px !important; box-shadow: none; }\n/* Code components that switch the outline off inline. */\n:where(${SEL})[style*=\"outline\"]:focus-visible { outline: ${w}px solid var(--focus-ring) !important; }\n/* The mobile nav scrolls sideways, so there's no room outside: ring on the item's edge instead. */\n[data-framer-name=\"Mobile Navbar\"] :where(${SEL}):focus-visible { outline-offset: -${w}px; box-shadow: none; }\n/* Framer's before/after slider is an invisible range input, so ring the slider frame. */\n:has(> .framer-before-after-range:focus-visible) { outline: ${w}px solid var(--focus-ring); outline-offset: -${w}px; }\n/* The phone layout has a fixed bottom nav bar. Keep anything focused scrolled clear of it (WCAG 2.4.11). */\n@media (max-width: 809.98px) { html { scroll-padding-bottom: 88px; } }\n@media (forced-colors: active) { :where(${SEL}):focus-visible { outline-color: Highlight; } }\n/* Skip link: off-screen until it has focus, then a pill top-left over everything. Its target takes focus with no ring.\n   Hidden well up and to the left: iOS draws the page behind the status bar, so a link just above the top showed behind the clock.\n   Shown clear of the notch or island via the safe-area insets. */\na.fr-skip { position: fixed; top: max(12px, calc(env(safe-area-inset-top) + 8px)); left: max(12px, calc(env(safe-area-inset-left) + 8px)); z-index: 2147483647; padding: 12px 18px; border-radius: 999px;\n  background: ${halo}; color: ${ring}; border: 1px solid color-mix(in srgb, ${ring} 24%, transparent);\n  font: 500 15px/1.2 Inter, \"Inter Placeholder\", system-ui, sans-serif; text-decoration: none;\n  transform: translate(calc(-100% - 200px), calc(-100% - 200px)); }\na.fr-skip:focus { transform: none; }\n@media (prefers-reduced-motion: no-preference) { a.fr-skip { transition: transform 0.15s ease-out; } }\n[data-skip-target]:focus { outline: none; box-shadow: none; }\n/* Text only screen readers hear (the search modal's result count) */\n.fr-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }\n/* Text selection: the page inverted, so it follows the theme. Beats the old fixed blue in the legacy-bodyStart snippet. */\n:root ::selection { background: ${ring} !important; color: ${halo} !important; -webkit-text-fill-color: ${halo} !important; }\n/* Buttons of every kind and the carousel cards don't select their text when tapped, dragged or double-clicked. Clicks, links and keyboard are unaffected. */\n:where(button, [role=\"button\"], input:is([type=\"button\"], [type=\"submit\"], [type=\"reset\"]), summary, [data-framer-name*=\"Button\"],\n  [data-foil-card], [data-cs-carousel], [data-framer-name=\"Testimonial Cards\"]) { -webkit-user-select: none; user-select: none; }\n:where([data-foil-card], [data-cs-carousel], [data-framer-name=\"Testimonial Cards\"]) :where(input, textarea, [contenteditable=\"true\"]) { -webkit-user-select: text; user-select: text; }\n/* Framer's search modal. The ring goes round the whole box, not the bare input inside it. */\n.__framer-search-modal-container { --sfg: var(--token-72be4b58-ad30-40d4-9403-e97ffbb2d1b3, #f6f6f6); }\n.__framer-search-modal-container > [role=\"presentation\"] { -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }\n.__framer-search-modal-container [role=\"dialog\"] { border-radius: 12px !important; border: 1px solid color-mix(in srgb, var(--sfg) 14%, transparent); box-shadow: 0 24px 48px rgba(0, 0, 0, 0.35) !important; }\n.__framer-search-modal-container [role=\"dialog\"]:has(input:focus-visible) { outline: ${w}px solid ${ring}; outline-offset: 3px; }\n.__framer-search-modal-container [role=\"search\"] { padding: 0 16px !important; min-height: 52px; }\n.__framer-search-modal-container [role=\"search\"] svg { width: 20px; height: 20px; }\n.__framer-search-modal-container [role=\"search\"] + div { opacity: 0.12 !important; }\n/* 16px stops iOS zooming in on focus. Placeholder and excerpts at 70% of the text colour clear 4.5:1. */\n.__framer-search-modal-container [role=\"search\"] input { font-size: 16px !important; --framer-search-placeholder-color: color-mix(in srgb, var(--sfg) 70%, transparent) !important; }\n.__framer-search-modal-container [role=\"search\"] input:is(:focus, :focus-visible) { outline: none !important; box-shadow: none !important; }\n.__framer-search-modal-container li p { color: color-mix(in srgb, var(--sfg) 70%, transparent) !important; }\n/* On phones Framer runs the modal edge to edge, which pushes the ring off-screen. Inset it 12px. */\n.__framer-search-modal-container [role=\"dialog\"] { max-width: calc(100vw - 24px); }\n@media (max-width: 809.98px) { .__framer-search-modal-container [role=\"dialog\"] { margin-top: 12px; } }\n/* Clear button: the same X as the site's other close buttons (ProfileStatus, MiniCaseStudy), 36px target. */\n.__framer-search-modal-container .__framer-search-clear-button { width: 36px !important; height: 36px !important; margin-right: -8px; border-radius: 8px !important; background: none !important;\n  display: grid !important; place-items: center; color: color-mix(in srgb, var(--sfg) 70%, transparent) !important; }\n.__framer-search-modal-container .__framer-search-clear-button:hover { background: color-mix(in srgb, var(--sfg) 8%, transparent) !important; color: var(--sfg) !important; }\n.__framer-search-modal-container .__framer-search-clear-button > * { display: none !important; }\n/* Not focus styling: Framer's Embed is a srcdoc iframe whose document has no colour scheme (so light). On a dark page\n   the schemes differ and Firefox gives the iframe an opaque white backdrop (the /perception poll sat in a white box).\n   Matching the element to its document keeps it see-through; Chrome and Safari draw it the same either way */\niframe[srcdoc] { color-scheme: light; }\n.__framer-search-modal-container .__framer-search-clear-button::before { content: \"\"; width: 18px; height: 18px; background: currentColor; -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E\") center/contain no-repeat; mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E\") center/contain no-repeat; }\n`;/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n * @framerIntrinsicWidth 1\n * @framerIntrinsicHeight 1\n */export default function FocusRing(props){const{colour=TOKENS.textPrimary,halo=TOKENS.page,ringWidth=2,ringOffset=2}=props;const isStatic=useIsStaticRenderer();// Not focus styling: Framer's before/after slider and Senja's play buttons ship without\n// accessible names, and Framer's search modal placeholder can't be set from the canvas.\nuseEffect(()=>{if(isStatic)return;const label=()=>{document.querySelectorAll(\".framer-before-after-range:not([aria-label]):not([aria-labelledby])\").forEach(i=>i.setAttribute(\"aria-label\",\"Before and after comparison\"));document.querySelectorAll(\".__framer-search-modal-container input[placeholder='Search...']\").forEach(i=>{i.placeholder=\"Search\";i.setAttribute(\"aria-label\",\"Search\");});document.querySelectorAll(\".__framer-search-clear-button:not([aria-label])\").forEach(b=>b.setAttribute(\"aria-label\",\"Clear search\"));// Senja's video play buttons have no name. They're built inside an open shadow root, which this observer\n// can't see into, so each root gets its own. The embed's layer is named for the person (\"Sara\")\ndocument.querySelectorAll(\".senja-embed\").forEach(s=>{const r=s.shadowRoot;if(!r||seen.has(r))return;seen.add(r);const who=s.closest(\"[data-framer-name]\")?.getAttribute(\"data-framer-name\")||\"\";const name=()=>r.querySelectorAll(\"button:not([aria-label])\").forEach(b=>{if(!b.textContent?.trim())b.setAttribute(\"aria-label\",who?`Play video testimonial from ${who}`:\"Play video testimonial\");});name();const m=new MutationObserver(name);m.observe(r,{childList:true,subtree:true});inner.push(m);});// Embeds (Framer's Embed is an untitled iframe): name them by what they load (WCAG 4.1.2)\ndocument.querySelectorAll(\"iframe:not([title])\").forEach(f=>{const src=(f.getAttribute(\"srcdoc\")||\"\")+\" \"+(f.getAttribute(\"src\")||\"\");const t=/tally\\.so/.test(src)?\"Survey form\":/elfsight/.test(src)?\"Feature voting board\":/youtube|vimeo|mux\\.com/.test(src)?\"Video\":\"\";if(t)f.title=t;});// Email fields from Framer's form input: no label but a placeholder, and autocomplete switched off (WCAG 1.3.5)\ndocument.querySelectorAll(\"input[type='email']\").forEach(i=>{if(i.autocomplete!==\"email\")i.autocomplete=\"email\";if(!i.labels?.length&&!i.hasAttribute(\"aria-label\")&&!i.hasAttribute(\"aria-labelledby\"))i.setAttribute(\"aria-label\",\"Email address\");});// Tables that scroll sideways (rich text tables, hand-written ones in articles) need to take focus so the\n// keyboard can scroll them (WCAG 2.1.1). Only while they overflow, so a table that fits adds no stop\ndocument.querySelectorAll(\"figure.framer-table-wrapper, .table-container\").forEach(w=>{const scrolls=w.scrollWidth>w.clientWidth+1;if(scrolls&&!w.hasAttribute(\"tabindex\")){const cap=w.querySelector(\"caption, figcaption\")?.textContent?.trim();const head=[...w.querySelectorAll(\"th\")].map(th=>th.textContent?.trim()).filter(Boolean).slice(0,2).join(\", \");w.setAttribute(\"data-fr-scroll\",\"\");w.tabIndex=0;w.setAttribute(\"role\",\"region\");w.setAttribute(\"aria-label\",cap||(head?`Table: ${head}`:\"Table\"));}else if(!scrolls&&w.hasAttribute(\"data-fr-scroll\")){w.removeAttribute(\"data-fr-scroll\");w.removeAttribute(\"tabindex\");w.removeAttribute(\"role\");w.removeAttribute(\"aria-label\");}});// Framer's search modal: a named, modal dialog. Its results list is aria-live, which reads every result out on\n// each keystroke, and its links wrap the <li>s (not a valid list): the list is flattened to plain links and a\n// short status says how many there are\nconst dlg=document.querySelector(\".__framer-search-modal-container [role='dialog']\");if(dlg){if(!dlg.hasAttribute(\"aria-label\"))dlg.setAttribute(\"aria-label\",\"Search\");if(dlg.getAttribute(\"aria-modal\")!==\"true\")dlg.setAttribute(\"aria-modal\",\"true\");dlg.querySelectorAll(\"ul[aria-live]\").forEach(u=>{u.setAttribute(\"aria-live\",\"off\");u.setAttribute(\"role\",\"none\");});dlg.querySelectorAll(\"ul > a > li:not([role])\").forEach(li=>li.setAttribute(\"role\",\"none\"));let st=dlg.querySelector(\"[data-fr-search-status]\");if(!st){st=document.createElement(\"div\");st.setAttribute(\"data-fr-search-status\",\"\");st.setAttribute(\"role\",\"status\");st.className=\"fr-sr\";dlg.append(st);}const q=dlg.querySelector(\"input\")?.value.trim()||\"\";const n=dlg.querySelectorAll(\"ul a[href]\").length;const msg=q?n?`${n} result${n===1?\"\":\"s\"}`:\"No results\":\"\";if(st.textContent!==msg)st.textContent=msg;}searchOpen=!!dlg;};const seen=new WeakSet,inner=[];// Where focus was before the search modal opened, to put it back when the modal closes (it drops it on <body>)\nlet lastOutside=null,searchOpen=false;const focusIn=e=>{const t=e.target;if(!t.closest?.(\".__framer-search-modal-container\"))lastOutside=t;};const run=()=>{const was=searchOpen;label();if(was&&!searchOpen&&(document.activeElement===document.body||!document.activeElement)&&lastOutside?.isConnected)lastOutside.focus({preventScroll:true});};let rt=0;const resize=()=>{clearTimeout(rt);rt=window.setTimeout(label,200);};label();const mo=new MutationObserver(run);// data-built: Senja marks the embed once its shadow root is filled\nmo.observe(document.body,{childList:true,subtree:true,attributes:true,attributeFilter:[\"data-built\"]});document.addEventListener(\"focusin\",focusIn);window.addEventListener(\"resize\",resize);return()=>{mo.disconnect();inner.forEach(m=>m.disconnect());document.removeEventListener(\"focusin\",focusIn);window.removeEventListener(\"resize\",resize);clearTimeout(rt);};},[isStatic]);// Skip link (WCAG 2.4.1): the first stop on every page, shown on focus. It goes at the very start of <body>,\n// outside Framer's root, so it's first in the tab order and survives page changes. Pages without a <main>\n// fall back to their first heading.\nuseEffect(()=>{if(isStatic||document.querySelector(\"a.fr-skip\"))return;const a=document.createElement(\"a\");a.className=\"fr-skip\";a.href=\"#main\";a.textContent=\"Skip to main content\";a.addEventListener(\"click\",e=>{const visible=el=>el.getClientRects().length>0;const t=[...document.querySelectorAll(\"main, [role='main']\")].find(visible)??[...document.querySelectorAll(\"h1, h2\")].find(visible);if(!t)return;e.preventDefault();if(!t.hasAttribute(\"tabindex\"))t.setAttribute(\"tabindex\",\"-1\");t.setAttribute(\"data-skip-target\",\"\");t.focus({preventScroll:true});t.scrollIntoView({block:\"start\",behavior:window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches?\"auto\":\"smooth\"});});document.body.prepend(a);// Not removed on unmount: the next page's instance would only add it again.\n},[isStatic]);return /*#__PURE__*/_jsx(\"style\",{\"data-focus-ring\":\"\",dangerouslySetInnerHTML:{__html:css(colour,halo,ringWidth,ringOffset)}});}addPropertyControls(FocusRing,{colour:{type:ControlType.Color,title:\"Ring\",defaultValue:TOKENS.textPrimary},halo:{type:ControlType.Color,title:\"Halo\",defaultValue:TOKENS.page,description:\"Page colour either side of the ring, for contrast over images.\"},ringWidth:{type:ControlType.Number,title:\"Width\",defaultValue:2,min:1,max:4,step:.5,unit:\"px\"},ringOffset:{type:ControlType.Number,title:\"Gap\",defaultValue:2,min:0,max:6,step:1,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FocusRing\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"1\",\"framerIntrinsicWidth\":\"1\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerSupportedLayoutWidth\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FocusRing.map"],"mappings":"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"}