{"version":3,"file":"MvKit.BSUE9S9C.mjs","names":["useFonts","FONTS","useStill","useLive","useState","useSize","onTick","fontsOf","stack","wOf","usePre","useScrollVars","clamp01","SCRUB_K","useStage","useOn","useRef","c","colorsOf","useReduced","cssVars","plainOf","CSS_BASE","CSS_MOTION","siteFontCss","Eyebrow","Head","rise","MAXW","famOf","famCss","DEF","COLOR_CONTROLS","FONT_CONTROLS","BP_CONTROL","splitWords","_Fragment","useEffect","useLayoutEffect","useState","c","useRef","_Fragment"],"sources":["https:/framerusercontent.com/modules/6KYKkELWZddjnkCb60QF/YMZ4AU9I02E0JujoMoh2/MvCredits.js","https:/framerusercontent.com/modules/kYSeD0tmUxo2ssAU6QRj/GkRgCrkAyPjjBDl7xK0m/MvKit.js"],"sourcesContent":["// ===== JOSH BARNES shared scaffold (THE CANVAS: graphite design-tool canvas, paper sections, selection-cyan, SELECTION buttons) (inlined by mk.py; each Framer code file must be self-contained) =====\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useEffect,useLayoutEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";const FONTS=\"https://fonts.googleapis.com/css2?family=Mona+Sans:ital,wdth,wght@0,75..125,200..900;1,75..125,200..900&family=Chivo+Mono:ital,wght@0,300..600;1,300..600&display=swap\";// Token-safe alpha: Styles-bound colours arrive as var(--token-…) so hex-alpha breaks; color-mix keeps a palette flip working. Never 0% (hue drops) — floor at 0.4%.\nconst A=(c,a)=>`color-mix(in srgb, ${c} ${Math.max(.4,Math.round(a*1e3)/10)}%, transparent)`;const MIX=(a,b,t)=>`color-mix(in srgb, ${a} ${Math.round((1-t)*100)}%, ${b})`;const srcOf=(v,fallback)=>v&&typeof v===\"object\"&&v.src?String(v.src).split(\"?\")[0]:typeof v===\"string\"&&v.trim()?v.trim().split(\"?\")[0]:fallback;const T=(s,fb)=>s&&s.trim()?s.trim():fb;// ink or white text on a CMS brand colour (luminance test; the brand colour is data, not a palette token)\nconst onBrand=hex=>{const m=String(hex||\"\").replace(\"#\",\"\").match(/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);if(!m)return\"var(--mv-cloud)\";const[r,g,b]=[m[1],m[2],m[3]].map(x=>{const v=parseInt(x,16)/255;return v<=.03928?v/12.92:Math.pow((v+.055)/1.055,2.4);});const L=.2126*r+.7152*g+.0722*b;return L>.2?\"var(--mv-ink)\":\"var(--mv-cloud)\";};const cleanTel=s=>s.replace(/[^\\d+]/g,\"\");// Premium layout band (measured 09-13): container 1340 @1440 / 1520 @1920, body 16, button label 12–13.\nconst MAXW=\"clamp(1280px, 92vw, 1520px)\";// Responsive delivery: Framer's resizer serves any upload at ?scale-down-to=N (longest side). The query is stripped first so one file never downloads twice.\n// Responsive delivery. Framer uploads: the resizer serves ?scale-down-to=N. Unsplash stand-ins: ?w=N. The src is already the smallest width that covers the slot (a 52px avatar never pulls a 1600px photo), so a big image is never decoded for a small box — decode is what stalls scrolling.\nconst RS_W=[160,320,480,800,1200,1600];const rsTarget=sizes=>{const t=String(sizes||\"\").trim().split(\",\").pop()||\"\";const px=t.match(/(\\d+(?:\\.\\d+)?)px/);const vw=t.match(/(\\d+(?:\\.\\d+)?)vw/);const want=px?parseFloat(px[1])*2:vw?parseFloat(vw[1])/100*1600*1.25:1600;return RS_W.find(w=>w>=want)||1600;};const RS=(u,sizes)=>{const s=String(u||\"\");const b=s.split(\"?\")[0];if(/framerusercontent\\.com\\/images\\//.test(s)){const w=rsTarget(sizes);const d=w<=512?512:w<=1024?1024:2048;return{src:`${b}?scale-down-to=${d}`,srcSet:`${b}?scale-down-to=512 512w, ${b}?scale-down-to=1024 1024w, ${b}?scale-down-to=2048 2048w`,sizes};}if(/images\\.unsplash\\.com\\//.test(s)){const w=rsTarget(sizes);const q=n=>`${b}?w=${n}&q=70&fm=jpg&auto=format`;return{src:q(w),srcSet:RS_W.filter(n=>n<=Math.max(w*2,480)).map(n=>`${q(n)} ${n}w`).join(\", \"),sizes};}return{src:s};};// A Framer Font control stores a selector (GF;Family-700), not a CSS family — derive one, reject anything with ';'\nconst famOf=f=>{if(!f)return\"\";if(typeof f===\"string\")return f.includes(\";\")?\"\":f;if(f.fontFamily&&!String(f.fontFamily).includes(\";\"))return String(f.fontFamily);const sel=String(f.fontSelector||\"\");if(!sel)return\"\";const n=sel.split(\";\").pop()||\"\";return n.replace(/-(regular|italic|bold|\\d{3}(italic)?)$/i,\"\").replace(/-/g,\" \");};const wOf=(f,fb)=>{if(!f)return fb;if(f.fontWeight)return Number(f.fontWeight)||fb;const m=String(f.fontSelector||\"\").match(/-(\\d{3})/);return m?Number(m[1]):fb;};// famCss: Framer's Font `fontFamily` is ALREADY a stack — never wrap it in quotes (one fake family → fallback renders). A bare name gets quoted.\nconst famCss=f=>{const fa=famOf(f).replace(/\"/g,\"'\").trim();if(!fa)return\"\";return fa.includes(\",\")||fa.startsWith(\"'\")?fa:`'${fa}'`;};const stack=(custom,f,fb,tail)=>{const fam=custom?famCss(f):\"\";return`${fam?`${fam}, `:\"\"}${fb}, ${tail}`;};function useFonts(){useEffect(()=>{if(typeof document===\"undefined\"||document.getElementById(\"mv-fonts\"))return;const l=document.createElement(\"link\");l.id=\"mv-fonts\";l.rel=\"stylesheet\";l.href=FONTS;document.head.appendChild(l);},[]);}// live = client after hydration and not on the canvas. SSR and the first client render share the same markup.\n// TRUE on the Framer canvas AND in its export / thumbnail / screenshot renderers (anything that is not the running preview): no scroll and no hydration there, so every reveal / pinned stage must draw its FINAL state or the editor shows empty blocks.\nfunction useStill(){const isStatic=useIsStaticRenderer();let t=null;try{t=RenderTarget.current();}catch(e){}return isStatic||t!==null&&t!==RenderTarget.preview;}function useLive(){const isStatic=useIsStaticRenderer();const[live,setLive]=useState(false);useEffect(()=>{if(!isStatic&&RenderTarget.current()!==RenderTarget.canvas&&typeof window!==\"undefined\")setLive(true);},[isStatic]);return live;}// Width/height of the root + viewport height. SSR starts from the breakpoint hint (Framer renders the Tablet/Phone copies with the same code and no width).\nfunction useSize(root,hint){const ov=String(hint||\"\").toLowerCase();const[w,setW]=useState(ov===\"phone\"?390:ov===\"tablet\"?810:1440),[vh,setVh]=useState(ov===\"phone\"?844:ov===\"tablet\"?1080:900);useLayoutEffect(()=>{const el=root.current;if(!el)return;const ro=new ResizeObserver(([e])=>{const x=Math.round((e.borderBoxSize&&e.borderBoxSize[0]?e.borderBoxSize[0].inlineSize:0)||el.offsetWidth);if(x>0)setW(x);});ro.observe(el);const vv=()=>setVh(window.innerHeight);vv();const read=()=>{const x=Math.round(el.offsetWidth);if(x>0)setW(x);};const t1=window.setTimeout(read,150),t2=window.setTimeout(read,700),t3=window.setTimeout(read,1600);window.addEventListener(\"resize\",vv);window.addEventListener(\"load\",read);return()=>{ro.disconnect();window.clearTimeout(t1);window.clearTimeout(t2);window.clearTimeout(t3);window.removeEventListener(\"resize\",vv);window.removeEventListener(\"load\",read);};},[]);return{w,vh};}const useReduced=()=>{const[rm,setRm]=useState(false);useLayoutEffect(()=>{setRm(window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches);},[]);return rm;};// One shared rAF for every section. Each frame runs ALL reads first (layout reads: getBoundingClientRect, offsetHeight), then ALL writes (CSS vars, transforms).\n// Interleaving read → write → read made the browser recalc the whole page's style once per section per frame (layout thrashing: 20+ recalcs a frame).\nfunction onTick(fn,read,pre){if(typeof window===\"undefined\")return()=>{};const w=window;if(!w.__nuTick){w.__nuTick={pre:new Set,subs:new Set,reads:new Set,raf:0};const loop=t=>{const T=w.__nuTick;T.pre.forEach(r=>r(t));T.reads.forEach(r=>r(t));T.subs.forEach(s=>s(t));T.raf=requestAnimationFrame(loop);};w.__nuTick.raf=requestAnimationFrame(loop);}w.__nuTick.subs.add(fn);if(read)w.__nuTick.reads.add(read);if(pre)w.__nuTick.pre.add(pre);return()=>{w.__nuTick.subs.delete(fn);if(read)w.__nuTick.reads.delete(read);if(pre)w.__nuTick.pre.delete(pre);};}const clamp01=v=>Math.min(1,Math.max(0,v));const easeIO=t=>{const x=clamp01(t);return x<.5?4*x*x*x:1-Math.pow(-2*x+2,3)/2;};const DEF={bone:\"#F1ECE4\",ink:\"#141210\",brass:\"#4D9FFF\",pine:\"#231D19\",fog:\"#DDD4C8\",stone:\"#857B70\",cloud:\"#FFFFFF\",night:\"#171311\"};// collaborator cursor colours (constants, not tokens): the client and the developer on the canvas\nconst AMBER=\"#FFB224\",VIOLET=\"#A58BFF\";const colorsOf=p=>({bone:p.bone||DEF.bone,ink:p.ink||DEF.ink,brass:p.brass||DEF.brass,pine:p.pine||DEF.pine,fog:p.fog||DEF.fog,stone:p.stone||DEF.stone,cloud:p.cloud||DEF.cloud,night:p.night||DEF.night});// a Style-bound colour arrives as var(--token-…, #hex): let the browser resolve it to r,g,b for canvas drawing\nconst cssRgb=(el,col,fb)=>{if(!el||typeof window===\"undefined\")return fb;const p=document.createElement(\"i\");p.style.display=\"none\";p.style.color=col;el.appendChild(p);const v=getComputedStyle(p).color;p.remove();const m=v.match(/(\\d+(?:\\.\\d+)?),\\s*(\\d+(?:\\.\\d+)?),\\s*(\\d+(?:\\.\\d+)?)/);return m?`${Math.round(+m[1])},${Math.round(+m[2])},${Math.round(+m[3])}`:fb;};const cssVars=c=>({\"--mv-bone\":c.bone,\"--mv-ink\":c.ink,\"--mv-brass\":c.brass,\"--mv-pine\":c.pine,\"--mv-fog\":c.fog,\"--mv-stone\":c.stone,\"--mv-cloud\":c.cloud,\"--mv-night\":c.night});const COLOR_CONTROLS={bone:{type:ControlType.Color,title:\"Paper\",defaultValue:DEF.bone},ink:{type:ControlType.Color,title:\"Ink\",defaultValue:DEF.ink},brass:{type:ControlType.Color,title:\"Accent\",defaultValue:DEF.brass},pine:{type:ControlType.Color,title:\"Deep\",defaultValue:DEF.pine},fog:{type:ControlType.Color,title:\"Line\",defaultValue:DEF.fog},stone:{type:ControlType.Color,title:\"Muted\",defaultValue:DEF.stone},cloud:{type:ControlType.Color,title:\"White\",defaultValue:DEF.cloud},night:{type:ControlType.Color,title:\"Dark\",defaultValue:DEF.night}};// ---- Fonts: Custom Fonts toggle → Font controls; off = Mona Sans (wide display) / Mona Sans / Chivo Mono ----\nconst FONT_CONTROLS={customFonts:{type:ControlType.Boolean,title:\"Custom Fonts\",description:\"Off = the site fonts (set once on the Header in the Site Layout). On = different fonts for this section only\",defaultValue:false},displayFont:{type:ControlType.Font,title:\"Display Font\",defaultFontType:\"sans-serif\",hidden:p=>!p.customFonts},bodyFont:{type:ControlType.Font,title:\"Body Font\",defaultFontType:\"sans-serif\",hidden:p=>!p.customFonts},monoFont:{type:ControlType.Font,title:\"Mono Font\",defaultFontType:\"monospace\",hidden:p=>!p.customFonts}};const NUMF=\"var(--mv-font-m, 'Chivo Mono'), ui-monospace, monospace\";// Site-wide fonts: the Header (Site Layout, every page) writes --mv-font-d/b/m (+ weights) on :root when its Custom Fonts is on. A section uses them unless its own Custom Fonts is on.\nconst siteFontCss=p=>{if(!p||!p.customFonts)return\"\";const v=[];const put=(k,f,w)=>{const fam=famCss(f);if(fam){v.push(`--mv-font-${k}:${fam}`);v.push(`--mv-font-${k}w:${wOf(f,w)}`);}};put(\"d\",p.displayFont,600);put(\"b\",p.bodyFont,400);put(\"m\",p.monoFont,400);put(\"a\",p.accentFont,400);return v.length?`:root{${v.join(\";\")}}`:\"\";};function fontsOf(p){const on=!!p.customFonts;const D={fontFamily:stack(on,p.displayFont,\"var(--mv-font-d, 'Mona Sans')\",\"Inter, -apple-system, Arial, sans-serif\"),fontWeight:on?wOf(p.displayFont,600):\"var(--mv-font-dw, 600)\",fontStyle:on&&p.displayFont&&p.displayFont.fontStyle?p.displayFont.fontStyle:\"normal\"};const B={fontFamily:stack(on,p.bodyFont,\"var(--mv-font-b, 'Mona Sans')\",\"Inter, system-ui, -apple-system, Arial, sans-serif\"),fontWeight:on?wOf(p.bodyFont,400):\"var(--mv-font-bw, 400)\"};const M={fontFamily:stack(on,p.monoFont,\"var(--mv-font-m, 'Chivo Mono')\",\"ui-monospace, SFMono-Regular, Menlo, monospace\"),fontWeight:on?wOf(p.monoFont,400):\"var(--mv-font-mw, 400)\"};return{D,B,M};}const BP_CONTROL={bpHint:{type:ControlType.Enum,title:\"Breakpoint Hint\",description:\"Set per breakpoint copy so the server render starts at the right width\",options:[\"auto\",\"desktop\",\"tablet\",\"phone\"],optionTitles:[\"Auto\",\"Desktop\",\"Tablet\",\"Phone\"],defaultValue:\"auto\",hidden:()=>true}};// ---- Button system: THE PING — a pill. On hover a pink notification dot pops on its right edge with a rolling \"+1\", a lime ring pings out of the dot, the accent fill sweeps in from the left and the label rolls up. Magnetic on desktop, squish on press. Solid = ink (fill lime), ghost = glass/hairline (fill paper), quiet = small nav pill. ----\nconst Glyph=({k})=>k===\"mail\"?/*#__PURE__*/_jsxs(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"rect\",{x:\"3\",y:\"5\",width:\"18\",height:\"14\",rx:\"3\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M4 7l8 6 8-6\"})]}):k===\"cal\"?/*#__PURE__*/_jsxs(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"rect\",{x:\"3.5\",y:\"5\",width:\"17\",height:\"15\",rx:\"3\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M3.5 10h17M8 3v4M16 3v4\"})]}):k===\"play\"?/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{fill:\"currentColor\",d:\"M8 5.5v13l10.5-6.5z\"})}):/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2.2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M7 17L17 7M9 7h8v8\"})});// In-page CTA jumps (\"#download\", \"/#download\"): scroll to the section when it is on this page, otherwise go to it on the home page.\nfunction jumpTo(e,href){try{const m=String(href||\"\").match(/^\\/?#([\\w-]+)$/);if(!m)return;const el=document.getElementById(m[1]);if(el){e.preventDefault();const W=window;const L=W.__ltLenis||W.__vcLenis||W.lenis;if(L&&L.scrollTo)L.scrollTo(el,{offset:-20});else el.scrollIntoView({behavior:\"smooth\",block:\"start\"});try{history.replaceState(null,\"\",\"#\"+m[1]);}catch(x){}}else if(href.startsWith(\"#\")){e.preventDefault();window.location.href=\"/\"+href;}}catch(x){}}const Btn=({href,label,kind=\"solid\",arrow=true,style,className,onClick,ariaLabel,cur,icon,sub})=>/*#__PURE__*/_jsxs(\"a\",{className:`mv-btn mv-${kind}${arrow?\"\":\" mv-noarr\"}${className?\" \"+className:\"\"}`,\"data-mag\":true,\"data-cur\":cur||\"go\",href:href,target:/^https?:\\/\\//.test(href||\"\")?\"_blank\":undefined,rel:/^https?:\\/\\//.test(href||\"\")?\"noopener\":undefined,onClick:onClick||(e=>jumpTo(e,href)),\"aria-label\":ariaLabel||(sub?`${sub} ${label}`:undefined),style:style,children:[/*#__PURE__*/_jsxs(\"span\",{className:\"mv-face\",children:[/*#__PURE__*/_jsx(\"span\",{className:\"mv-fill\",\"aria-hidden\":true}),/*#__PURE__*/_jsx(\"span\",{className:\"mv-lbl\",children:/*#__PURE__*/_jsxs(\"span\",{className:\"mv-roll\",children:[/*#__PURE__*/_jsx(\"span\",{className:\"mv-l1\",children:label}),/*#__PURE__*/_jsx(\"span\",{className:\"mv-l2\",\"aria-hidden\":true,children:label})]})}),arrow&&/*#__PURE__*/_jsxs(\"span\",{className:\"mv-arr\",\"aria-hidden\":true,children:[/*#__PURE__*/_jsx(\"span\",{className:\"mv-a1\",children:/*#__PURE__*/_jsx(Glyph,{k:icon})}),/*#__PURE__*/_jsx(\"span\",{className:\"mv-a2\",children:/*#__PURE__*/_jsx(Glyph,{k:icon})})]})]}),/*#__PURE__*/_jsxs(\"span\",{className:\"mv-selb\",\"aria-hidden\":true,children:[/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{})]}),/*#__PURE__*/_jsx(\"b\",{className:\"mv-dim\",\"aria-hidden\":true})]});function useNearFocus(root,live){useEffect(()=>{if(!live||!root.current)return;const el=root.current;const f=e=>{const t=e.target;const sc=t.closest?.(\".mv-inring\");if(!sc)return;try{t.scrollIntoView({block:\"nearest\",inline:\"nearest\"});}catch(x){}};el.addEventListener(\"focusin\",f);return()=>el.removeEventListener(\"focusin\",f);},[live]);}function useMagnet(root,live){useEffect(()=>{if(!live||!root.current||!window.matchMedia(\"(hover:hover) and (pointer:fine)\").matches)return;const r=root.current;const btns=()=>Array.from(r.querySelectorAll(\"[data-mag]\"));const en=e=>{const b=e.target.closest?.(\"[data-mag]\");if(b){const d=b.querySelector(\".mv-dim\");if(d)d.textContent=`${Math.round(b.offsetWidth)} \\xd7 ${Math.round(b.offsetHeight)}`;}};const mv=e=>{for(const b of btns()){const rc=b.getBoundingClientRect();const dx=e.clientX-(rc.left+rc.width/2),dy=e.clientY-(rc.top+rc.height/2);const d=Math.hypot(dx,dy);const pull=d<150?(1-d/150)*8:0;b.style.setProperty(\"--mx\",`${dx/(d||1)*pull}px`);b.style.setProperty(\"--my\",`${dy/(d||1)*pull}px`);}};const lv=()=>{for(const b of btns()){b.style.setProperty(\"--mx\",\"0px\");b.style.setProperty(\"--my\",\"0px\");}};r.addEventListener(\"pointermove\",mv);r.addEventListener(\"pointerleave\",lv);r.addEventListener(\"pointerover\",en);r.addEventListener(\"focusin\",en);return()=>{r.removeEventListener(\"pointermove\",mv);r.removeEventListener(\"pointerleave\",lv);r.removeEventListener(\"pointerover\",en);r.removeEventListener(\"focusin\",en);};},[live]);}const CSS_BASE=`\n:where(.mv){position:relative;z-index:10} .mv,.mv *{box-sizing:border-box;min-width:0} .mv-sr{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;white-space:nowrap!important;padding:0!important;margin:-1px!important;border:0!important} :where(.mv) a{color:inherit} html,body{overflow-x:clip}\n:where(a[href],button,input,select,textarea,summary,[tabindex]:not([tabindex=\"-1\"]),[role=\"button\"]):focus-visible{outline:3px solid var(--mv-ink,#0D0E10)!important;outline-offset:2px!important;box-shadow:0 0 0 2px var(--mv-bone,#EEEEE8)!important} :where(.mv-dark) :where(a[href],button,input,select,textarea,summary,[tabindex]:not([tabindex=\"-1\"])):focus-visible{outline-color:var(--mv-cloud,#FFFFFF)!important;box-shadow:0 0 0 2px var(--mv-night,#08090A)!important} :where(.mv-inring) :where(a[href],button):focus-visible{outline-offset:-4px!important;box-shadow:none!important} :where(.mv) :is(input:not([type=range]):not([type=checkbox]):not([type=radio]),textarea,select):focus-visible{outline:2px solid currentColor!important;outline-offset:2px!important;box-shadow:none!important} :where(.mv) textarea{resize:none} .mv-inring:focus-visible{outline-offset:-3px!important;box-shadow:none!important} html{scroll-padding-top:96px;scroll-padding-bottom:88px}\n/* THE SELECTION button: a 10px-radius block. Hover/focus = the design-tool selection snaps around it (cyan outline 5px outside, four white handles, live W \\xd7 H badge underneath), the fill sweeps in from the left and the label rolls up. Magnetic on desktop. */\n.mv-btn{position:relative;display:inline-flex;padding:0;min-height:54px;border-radius:10px;text-decoration:none;cursor:pointer;isolation:isolate;white-space:nowrap;font-size:13px;font-weight:600;letter-spacing:.005em;border:0;color:var(--fg);transition:color .35s,transform .45s cubic-bezier(.34,1.56,.64,1)}\n.mv-face{position:relative;z-index:1;display:inline-flex;align-items:center;gap:14px;width:100%;min-height:inherit;padding:0 8px 0 22px;border-radius:inherit;background:var(--face);-webkit-backdrop-filter:blur(14px) saturate(1.3);backdrop-filter:blur(14px) saturate(1.3);box-shadow:inset 0 0 0 1px var(--rim);overflow:hidden;isolation:isolate}\n.mv-fill{position:absolute;z-index:0;inset:0;background:var(--fill);border-radius:inherit;clip-path:inset(0 100% 0 0);transition:clip-path .6s cubic-bezier(.7,0,.2,1)} .mv-btn:hover .mv-fill,.mv-btn:focus-visible .mv-fill{clip-path:inset(0 0 0 0)}\n.mv-lbl{position:relative;z-index:1;display:inline-flex;flex-direction:column;justify-content:center;line-height:1.15}\n.mv-roll{display:block;height:1.2em;overflow:hidden;line-height:1.2} .mv-l1,.mv-l2{display:block;transition:translate .5s cubic-bezier(.7,0,.2,1)} .mv-btn:hover .mv-l1,.mv-btn:hover .mv-l2,.mv-btn:focus-visible .mv-l1,.mv-btn:focus-visible .mv-l2{translate:0 -100%}\n.mv-arr{position:relative;z-index:1;display:grid;place-items:center;width:38px;height:38px;flex:none;border-radius:6px;background:var(--chip);color:var(--chipfg);overflow:hidden;transition:background .4s,color .4s} .mv-arr>span{grid-area:1/1;display:grid;place-items:center;transition:transform .55s cubic-bezier(.7,0,.2,1)} .mv-arr svg{width:15px;height:15px} .mv-a2{transform:translate(-160%,160%)}\n.mv-btn:hover .mv-a1,.mv-btn:focus-visible .mv-a1{transform:translate(160%,-160%)} .mv-btn:hover .mv-a2,.mv-btn:focus-visible .mv-a2{transform:none} .mv-btn:hover .mv-arr,.mv-btn:focus-visible .mv-arr{background:var(--chip2);color:var(--chipfg2)}\n.mv-selb{position:absolute;z-index:2;inset:-5px;border-radius:13px;box-shadow:0 0 0 1.5px var(--mv-brass);pointer-events:none;opacity:0;scale:1.06;transition:opacity .25s,scale .45s cubic-bezier(.34,1.56,.64,1)}\n.mv-selb i{position:absolute;width:7px;height:7px;background:var(--mv-cloud);box-shadow:0 0 0 1.5px var(--mv-brass);translate:-50% -50%} .mv-selb i:nth-child(1){left:0;top:0} .mv-selb i:nth-child(2){left:100%;top:0} .mv-selb i:nth-child(3){left:0;top:100%} .mv-selb i:nth-child(4){left:100%;top:100%}\n.mv-btn:hover .mv-selb,.mv-btn:focus-visible .mv-selb{opacity:1;scale:1}\n.mv-dim{position:absolute;z-index:3;left:50%;top:calc(100% + 11px);translate:-50% -4px;padding:2px 6px;border-radius:4px;background:var(--mv-brass);color:var(--mv-ink);font:500 10px/1.4 var(--mv-font-m,'Chivo Mono'),ui-monospace,monospace;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .25s,translate .35s}\n.mv-btn:hover .mv-dim,.mv-btn:focus-visible .mv-dim{opacity:1;translate:-50% 0}\n.mv-btn:hover,.mv-btn:focus-visible{color:var(--fg2)}\n.mv-btn.mv-noarr .mv-face{padding-right:22px}\n.mv-btn.mv-solid{--face:var(--mv-brass);--rim:transparent;--fill:var(--mv-cloud);--fg:var(--mv-ink);--fg2:var(--mv-ink);--chip:var(--mv-ink);--chipfg:var(--mv-brass);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n.mv-btn.mv-ghost{--face:color-mix(in srgb,var(--mv-cloud) 8%,transparent);--rim:color-mix(in srgb,var(--mv-cloud) 26%,transparent);--fill:var(--mv-cloud);--fg:var(--mv-cloud);--fg2:var(--mv-ink);--chip:color-mix(in srgb,var(--mv-cloud) 14%,transparent);--chipfg:var(--mv-cloud);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n.mv-btn.mv-quiet{min-height:40px;font-size:13px;border-radius:8px;--face:var(--mv-brass);--rim:transparent;--fill:var(--mv-cloud);--fg:var(--mv-ink);--fg2:var(--mv-ink);--chip:var(--mv-ink);--chipfg:var(--mv-brass);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)} .mv-btn.mv-quiet .mv-arr{width:28px;height:28px;border-radius:5px} .mv-btn.mv-quiet .mv-face{padding-left:16px;gap:10px;padding-right:6px} .mv-btn.mv-quiet .mv-selb{inset:-4px;border-radius:11px}\n/* on paper grounds: solid = ink face (cyan fill), ghost = ink hairline */\n.mv:not(.mv-dark) .mv-btn.mv-solid,.mv-lt .mv-btn.mv-solid{--face:var(--mv-ink);--fill:var(--mv-brass);--fg:var(--mv-cloud);--fg2:var(--mv-ink);--chip:var(--mv-brass);--chipfg:var(--mv-ink);--chip2:var(--mv-ink);--chipfg2:var(--mv-brass)}\n.mv:not(.mv-dark) .mv-btn.mv-ghost,.mv-lt .mv-btn.mv-ghost{--face:transparent;--rim:color-mix(in srgb,var(--mv-ink) 28%,transparent);--fill:var(--mv-ink);--fg:var(--mv-ink);--fg2:var(--mv-cloud);--chip:color-mix(in srgb,var(--mv-ink) 7%,transparent);--chipfg:var(--mv-ink);--chip2:var(--mv-brass);--chipfg2:var(--mv-ink)}\n.mv:not(.mv-dark) .mv-selb i,.mv-lt .mv-selb i{background:var(--mv-cloud)}\n/* a DARK band nested inside a paper section (case next-project, service film band): dark button faces again. Higher specificity than the paper rule above, so the result no longer depends on which component's <style> tag comes last in the page */\n.mv:not(.mv-dark) .mv-dark:not(.mv-lt) .mv-btn.mv-solid{--face:var(--mv-brass);--rim:transparent;--fill:var(--mv-cloud);--fg:var(--mv-ink);--fg2:var(--mv-ink);--chip:var(--mv-ink);--chipfg:var(--mv-brass);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n.mv:not(.mv-dark) .mv-dark:not(.mv-lt) .mv-btn.mv-ghost{--face:color-mix(in srgb,var(--mv-cloud) 8%,transparent);--rim:color-mix(in srgb,var(--mv-cloud) 26%,transparent);--fill:var(--mv-cloud);--fg:var(--mv-cloud);--fg2:var(--mv-ink);--chip:color-mix(in srgb,var(--mv-cloud) 14%,transparent);--chipfg:var(--mv-cloud);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n@media (max-width:600px),(hover:none){.mv .mv-btn{white-space:normal;text-align:left;line-height:1.25;min-height:54px;max-width:100%} .mv .mv-btn.mv-quiet{min-height:40px;white-space:nowrap} .mv .mv-btn .mv-face{justify-content:space-between} .mv .mv-roll{height:auto} .mv .mv-l2{display:none} .mv .mv-btn .mv-l1{translate:none!important} .mv .mv-selb,.mv .mv-dim{display:none}}\n.mv-btn:hover{transform:translate(var(--mx,0px),var(--my,0px))} .mv-btn:active{transform:translate(var(--mx,0px),var(--my,0px)) scale(.97)!important;transition-duration:.12s}\n/* TEXT-SAFE accents: cyan is a SURFACE colour on paper (selections, fills, chips) — accent text on paper is ink; on graphite grounds the cyan itself reads */\n.mv{--mv-acc:var(--mv-ink);--mv-acc-lg:var(--mv-brass);--mv-hl:var(--mv-brass);--mv-mut:color-mix(in srgb,var(--mv-stone) 45%,var(--mv-ink));--mv-acc-d:var(--mv-brass)}\n.mv-lt,.mv .mv-lt{--mv-acc:var(--mv-ink);--mv-acc-lg:var(--mv-brass);--mv-hl:var(--mv-brass);--mv-mut:color-mix(in srgb,var(--mv-stone) 45%,var(--mv-ink))}\n.mv-dark,.mv.mv-dark{--mv-acc:var(--mv-brass);--mv-acc-lg:var(--mv-brass);--mv-hl:transparent;--mv-mut:color-mix(in srgb,var(--mv-stone) 40%,var(--mv-cloud))}\n.mv-port{width:7px;height:7px;flex:none;border-radius:50%;background:#3DDC84;box-shadow:0 0 0 0 rgba(61,220,132,.6);animation:mv-live 1.8s infinite} @keyframes mv-live{0%{box-shadow:0 0 0 0 rgba(61,220,132,.55)}100%{box-shadow:0 0 0 9px rgba(61,220,132,0)}}\n@media (prefers-reduced-motion:reduce){.mv *,.sth *{animation-duration:.01ms!important;transition-duration:.01ms!important}}`;const IcoArrow=({s=15})=>/*#__PURE__*/_jsx(\"svg\",{width:s,height:s,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{d:\"M5 12h14M13 5l7 7-7 7\"})});const Stars=({v=5,s=13})=>/*#__PURE__*/_jsx(\"span\",{className:\"mv-stars\",\"aria-hidden\":true,children:[0,1,2,3,4].map(i=>/*#__PURE__*/_jsx(\"svg\",{width:s,height:s,viewBox:\"0 0 24 24\",style:{opacity:i<Math.round(v)?1:.28},children:/*#__PURE__*/_jsx(\"path\",{fill:\"currentColor\",d:\"M12 2.6l2.9 6.1 6.7.9-4.9 4.6 1.2 6.6L12 17.6 6.1 20.8l1.2-6.6L2.4 9.6l6.7-.9z\"})},i))});// ===== JOSH BARNES motion layer (THE FLOW) (composed by mk.py after _common) =====\n// One shared rAF (onTick). Sections write --sp (0 = top edge enters the viewport bottom → 1 = bottom edge leaves the top) and,\n// for tall pinned wrappers, --pp (0 = wrapper top hits the viewport top → 1 = wrapper bottom hits the viewport bottom). IO-gated.\nconst SCRUB_K=.18;// Decode a section's photos while it is still a screen and a half away, so the first frame it is on screen never waits for a decode.\nfunction usePre(el){try{const io=new IntersectionObserver(es=>{if(!es[0].isIntersecting)return;io.disconnect();el.querySelectorAll(\"img\").forEach(im=>{try{im.loading=\"eager\";im.decode().catch(()=>{});}catch(e){}});},{rootMargin:\"150% 0px 150% 0px\"});io.observe(el);}catch(e){}}function focusTo(el,frac){if(!el||typeof window===\"undefined\")return;if(window.innerWidth<810)return;const r=el.getBoundingClientRect();const vh=window.innerHeight;if(r.height<=vh*1.05)return;const y=r.top+window.scrollY+(r.height-vh)*Math.min(1,Math.max(0,frac));if(Math.abs(window.scrollY-y)<8)return;const w=window;if(w.__ltLenis)w.__ltLenis.scrollTo(y,{immediate:true,force:true});else window.scrollTo(0,y);}function useScrollVars(ref,live,rm,cb){useEffect(()=>{if(!live||rm||!ref.current)return;const el=ref.current;let vis=true,last=-9,cs=-1,cp=-1,settled=false;usePre(el);const io=new IntersectionObserver(es=>{vis=es[0].isIntersecting;},{rootMargin:\"25% 0px 25% 0px\"});io.observe(el);// eased scrub: the values glide toward the true scroll position (K per frame), so wheel steps never jump a pinned scene\nlet rt=0,rh=0,vh=1,fresh=false;const read=()=>{if(!vis&&settled){fresh=false;return;}const r=el.getBoundingClientRect();rt=r.top;rh=r.height;vh=window.innerHeight||1;fresh=true;};const off=onTick(()=>{if(!fresh)return;const sp=clamp01((vh-rt)/(vh+rh));const pp=rh>vh*1.05?clamp01(-rt/(rh-vh)):sp;if(cs<0){cs=sp;cp=pp;}else{cs+=(sp-cs)*SCRUB_K;cp+=(pp-cp)*SCRUB_K;if(Math.abs(sp-cs)<5e-4)cs=sp;if(Math.abs(pp-cp)<5e-4)cp=pp;}settled=cs===sp&&cp===pp;if(Math.abs(cs+cp-last)<3e-4)return;last=cs+cp;el.style.setProperty(\"--sp\",cs.toFixed(4));el.style.setProperty(\"--pp\",cp.toFixed(4));if(cb)cb(cs,cp);},read);return()=>{off();io.disconnect();};},[live,rm]);}// STAGE — false while the loader or the page-transition cover is on screen (html.mv-hold-*), so first-screen intros play AFTER the cover lifts, never under it. 9 s safety.\nfunction useStage(live){const[r,setR]=useState(false);useEffect(()=>{if(!live)return;const h=document.documentElement;const ok=()=>!/(^|\\s)mv-hold/.test(h.className);if(ok()){setR(true);return;}const mo=new MutationObserver(()=>{if(ok()){mo.disconnect();setR(true);}});mo.observe(h,{attributes:true,attributeFilter:[\"class\"]});const t=window.setTimeout(()=>{mo.disconnect();setR(true);},9e3);return()=>{mo.disconnect();window.clearTimeout(t);};},[live]);return r;}// true once the element has entered the viewport (stays true) — and only once the stage is clear. Reduced motion = true at once.\nfunction useOn(ref,live,rm,amount=.16){const[on,setOn]=useState(false);const still=useStill();const ready=useStage(live);useEffect(()=>{if(!live)return;if(rm){setOn(true);return;}if(!ready)return;const el=ref.current;if(!el)return;let off=()=>{};// keyboard focus: mark the section FIRST and flush styles, so the reveal that follows runs with instant transitions (a transition keeps the timing it started with)\nconst fin=e=>{try{if(e.target.matches(\":focus-visible\")){el.setAttribute(\"data-kb\",\"\");void el.offsetWidth;}}catch(x){}setOn(true);};const fout=e=>{if(!el.contains(e.relatedTarget))el.removeAttribute(\"data-kb\");};el.addEventListener(\"focusin\",fin);el.addEventListener(\"focusout\",fout);const io=new IntersectionObserver(es=>{for(const e of es)if(e.isIntersecting){io.disconnect();// IO ignores occlusion: under a curtain (Reveal) wait until about a quarter of it is uncovered\noff=onTick(()=>{const rev=el.closest(\".mv-rev.is-act\");const rv=rev?parseFloat(rev.style.getPropertyValue(\"--rv\")||\"0\"):1;if(rv>.24){setOn(true);off();}});}},{threshold:Math.min(amount,Math.max(.005,window.innerHeight*.3/Math.max(1,el.offsetHeight))),rootMargin:\"0px 0px -6% 0px\"});io.observe(el);return()=>{io.disconnect();off();el.removeEventListener(\"focusin\",fin);el.removeEventListener(\"focusout\",fout);};},[live,rm,ready]);return on||still;}// CURTAIN REVEAL — the section is pinned BEHIND the one above it and is uncovered as that one lifts away (the footer movement, for any section).\n// Wrapper = section + a spacer of T, pulled up by T (page length unchanged); the section is sticky for exactly T of scroll. T = min(section height, 100svh):\n// a tall section pins at the top, a short one sits on the bottom edge of the viewport. The section ABOVE needs a higher Layer (z-index).\nfunction Reveal({on,layer=9,style,children}){const live=useLive();const rm=useReduced();const wrap=useRef(null);const inner=useRef(null);const sp=useRef(null);const[h,setH]=useState(0);const act=on&&live&&!rm&&h>0&&typeof window!==\"undefined\"&&window.innerWidth>=810;useEffect(()=>{if(!on||!live||rm||!inner.current)return;const el=inner.current;const m=()=>setH(el.offsetHeight);m();const ro=new ResizeObserver(m);ro.observe(el);return()=>ro.disconnect();},[on,live,rm]);useEffect(()=>{if(!act||!wrap.current)return;const el=wrap.current;let vis=true,last=-1;const io=new IntersectionObserver(es=>{vis=es[0].isIntersecting;},{rootMargin:\"30% 0px 30% 0px\"});io.observe(el);let cur=-1,T=0,vh=1,top=0,fresh=false;const read=()=>{if(!vis){fresh=false;return;}T=sp.current?sp.current.offsetHeight:0;vh=window.innerHeight;top=el.getBoundingClientRect().top;fresh=true;};const off=onTick(()=>{if(!fresh||!T)return;const rv=clamp01((vh-T-top)/T);if(cur<0)cur=rv;else{cur+=(rv-cur)*SCRUB_K;if(Math.abs(rv-cur)<5e-4)cur=rv;}if(Math.abs(cur-last)<4e-4)return;last=cur;el.style.setProperty(\"--rv\",cur.toFixed(4));},read);return()=>{off();io.disconnect();};},[act]);return /*#__PURE__*/_jsxs(\"div\",{ref:wrap,className:`mv-rev${act?\" is-act\":\"\"}`,style:{...style||{},[\"--h\"]:`${h}px`,[\"--layer\"]:layer},onFocusCapture:e=>{if(!act||!wrap.current)return;const t=e.target;const w=window;const r=wrap.current.getBoundingClientRect();const T=sp.current?sp.current.offsetHeight:0;const y=Math.max(0,Math.min(document.documentElement.scrollHeight-window.innerHeight,r.top+window.scrollY-window.innerHeight+2*T));if(Math.abs(window.scrollY-y)>4){if(w.__ltLenis)w.__ltLenis.scrollTo(y,{immediate:true,force:true});else window.scrollTo(0,y);}requestAnimationFrame(()=>{try{t.scrollIntoView({block:\"nearest\"});}catch(x){}});},children:[/*#__PURE__*/_jsx(\"div\",{ref:inner,className:\"mv-rev-in\",children:children}),/*#__PURE__*/_jsx(\"div\",{ref:sp,className:\"mv-rev-sp\",\"aria-hidden\":true})]});}const REVEAL_CONTROLS={reveal:{type:ControlType.Boolean,title:\"Reveal\",description:\"Curtain: this section waits behind the one above and is uncovered as that one lifts away\",enabledTitle:\"Curtain\",disabledTitle:\"Off\",defaultValue:true},layer:{type:ControlType.Number,title:\"Layer\",description:\"Stacking order. Must be LOWER than the section above (sections default to 10)\",min:0,max:20,step:1,displayStepper:true,defaultValue:9,hidden:p=>p.reveal===false}};const splitWords=s=>String(s||\"\").replace(/\\*([^*]+)\\*/g,(_m,g)=>g.trim().split(/\\s+/).map(w=>{const m=w.match(/^(.*?)([.,!?;:’']*)$/);return m&&m[1]?`*${m[1]}*${m[2]}`:w;}).join(\" \")).split(/\\s+/).filter(Boolean).map(t=>{const m=t.match(/^\\*(.+?)\\*([.,!?;:’']*)$/);return m?{t:m[1],tail:m[2],acc:true}:{t:t.replace(/\\*/g,\"\"),tail:\"\",acc:false};});const plainOf=s=>String(s||\"\").replace(/\\*/g,\"\").replace(/\\s*\\|\\s*/g,\" \").replace(/\\s+/g,\" \").trim();// Heading whose words rise out of masks. \"|\" forces a line break, *word* = the accent: light-weight coral (deep coral mix on paper).\nconst Head=({text,on,D,tag=\"h2\",size=\"clamp(40px,4.8vw,72px)\",lh=.92,delay=0,step=55,style,className})=>{const Tag=tag;let k=0;return /*#__PURE__*/_jsx(Tag,{className:`mv-hd${on?\" is-on\":\"\"}${className?\" \"+className:\"\"}`,\"aria-label\":plainOf(text),style:{...D,fontSize:size,lineHeight:lh,...style||{}},children:String(text).split(\"|\").map((line,li)=>/*#__PURE__*/_jsx(\"span\",{className:\"mv-hd-l\",\"aria-hidden\":true,children:splitWords(line).map((w,i)=>{const d=delay+k++*step;return /*#__PURE__*/_jsxs(\"span\",{className:`mv-hd-w${w.acc?\" is-accw\":\"\"}`,children:[/*#__PURE__*/_jsx(\"span\",{className:`mv-hd-i${w.acc?\" is-acc\":\"\"}`,style:{transitionDelay:`${d}ms`,[\"--pd\"]:`${d+500}ms`},children:w.acc?/*#__PURE__*/_jsxs(\"span\",{className:\"mv-it\",children:[w.t,w.tail,/*#__PURE__*/_jsx(\"svg\",{className:\"mv-spark\",viewBox:\"0 0 24 24\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{d:\"M12 1.5C12.9 8 16 11.1 22.5 12 16 12.9 12.9 16 12 22.5 11.1 16 8 12.9 1.5 12 8 11.1 11.1 8 12 1.5Z\"})})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[w.t,w.tail]})}),\" \"]},i);})},li))});};const Eyebrow=({text,on,M,delay=0,style})=>text?/*#__PURE__*/_jsxs(\"p\",{className:`mv-eb${on?\" is-on\":\"\"}`,style:{...M,transitionDelay:`${delay}ms`,...style||{}},children:[/*#__PURE__*/_jsx(\"i\",{\"aria-hidden\":true}),text]}):null;// one-shot rise for copy / rows\nconst rise=(on,d=0,y=22)=>({opacity:on?1:0,translate:on?\"0 0\":`0 ${y}px`,transition:`opacity .9s ease ${d}ms, translate 1s cubic-bezier(.2,.8,.2,1) ${d}ms`});// Image that UNMASKS through a shape as it enters, settles from a zoom, then drifts with scroll (needs --sp on an ancestor).\nconst SHAPES={up:[\"inset(100% 0 0 0)\",\"inset(0 0 0 0)\"],down:[\"inset(0 0 100% 0)\",\"inset(0 0 0 0)\"],left:[\"inset(0 100% 0 0)\",\"inset(0 0 0 0)\"],right:[\"inset(0 0 0 100%)\",\"inset(0 0 0 0)\"],diag:[\"polygon(0 100%,0 100%,0 100%,0 100%)\",\"polygon(0 -160%,260% 100%,0 100%,0 100%)\"],iris:[\"circle(0% at 50% 55%)\",\"circle(85% at 50% 55%)\"],arch:[\"inset(100% 0 0 0 round 999px 999px 0 0)\",\"inset(0 0 0 0 round 999px 999px 0 0)\"],slit:[\"inset(0 50% 0 50%)\",\"inset(0 0 0 0)\"]};const Um=({src,alt=\"\",on,shape=\"up\",ratio=\"4/5\",delay=0,par=1,focus=\"50% 40%\",radius=4,sizes=\"(max-width: 809px) 100vw, 50vw\",style,className,eager=false})=>{const sh=SHAPES[shape]||SHAPES.up;const im=RS(src,sizes);return /*#__PURE__*/_jsx(\"div\",{className:`mv-um${on?\" is-on\":\"\"}${className?\" \"+className:\"\"}`,style:{aspectRatio:ratio,borderRadius:radius,clipPath:on?sh[1]:sh[0],WebkitClipPath:on?sh[1]:sh[0],transitionDelay:`${delay}ms`,[\"--par\"]:par,...style||{}},children:/*#__PURE__*/_jsx(\"img\",{src:im.src,srcSet:im.srcSet,sizes:im.sizes,alt:alt,loading:eager?\"eager\":\"lazy\",decoding:\"async\",draggable:false,style:{objectPosition:focus,transitionDelay:`${delay}ms`}})});};const CSS_MOTION=`\n[data-kb] *,[data-kb] *::before,[data-kb] *::after{transition:none!important}\n.mv-sec{position:relative;z-index:10;display:block;width:100%;--sp:.5;--pp:0}\n.mv-rev{position:relative;width:100%;--rv:1} .mv-rev-in{position:relative} .mv-rev-sp{height:0}\n.mv-rev.is-act{--rv:0;--t:min(var(--h),100vh);--t:min(var(--h),100svh);z-index:var(--layer,9);margin-top:calc(var(--t)*-1)}\n.mv-rev.is-act>.mv-rev-in{position:sticky;top:calc(100vh - var(--t));top:calc(100svh - var(--t))} .mv-rev.is-act>.mv-rev-sp{height:var(--t)}\n/* the lifting edge throws a shadow on the section beneath, and that section comes out of the dark as it is uncovered */\n.mv-rev.is-act>.mv-rev-in::before{content:\"\";position:absolute;z-index:40;left:0;right:0;top:0;height:120px;translate:0 calc((1 - var(--rv))*var(--t));background:linear-gradient(180deg,rgba(0,0,0,.2),rgba(0,0,0,0));opacity:min(1,calc(var(--rv)*(1 - var(--rv))*9));pointer-events:none}\n.mv-rev.is-act>.mv-rev-in::after{content:\"\";position:absolute;z-index:39;left:0;right:0;top:0;height:var(--t);background:#000;opacity:calc((1 - var(--rv))*.16);pointer-events:none}\n.mv-wrap{--pad:56px;width:100%;max-width:calc(${MAXW} + var(--pad)*2);margin:0 auto;padding-left:var(--pad);padding-right:var(--pad)}\n.mv-eb{display:inline-flex;align-items:center;gap:9px;width:max-content;max-width:100%;margin:0;padding:7px 13px 7px 11px;border-radius:6px;background:color-mix(in srgb,var(--mv-ink) 6%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mv-ink) 12%,transparent);color:var(--mv-ink);font-size:11.5px;font-weight:500;letter-spacing:.06em;opacity:0;translate:0 10px;transition:opacity .8s ease,translate .9s cubic-bezier(.2,.8,.2,1)} .mv-eb.is-on{opacity:1;translate:0 0}\n.mv-eb i{display:block;flex:none;order:-1;width:7px;height:7px;border-radius:50%;background:var(--mv-brass)}\n.mv-dark .mv-eb{color:var(--mv-cloud);background:color-mix(in srgb,var(--mv-cloud) 9%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mv-cloud) 18%,transparent)}\n.mv-hd{margin:0;letter-spacing:-.042em;text-wrap:balance;font-weight:var(--mv-font-dw,600)} .mv-hd-l{display:block}\n.mv-hd-w{display:inline-block;overflow:hidden;vertical-align:top;padding:0 .04em .12em;margin:0 -.04em -.12em;white-space:pre}\n.mv-hd-i{position:relative;display:inline-block;translate:0 108%;transition:translate 1.05s cubic-bezier(.2,.85,.15,1)}\n.mv-hd.is-on .mv-hd-i{translate:0 0}\n.mv-hd-w.is-accw{overflow:hidden}\n.mv-it{position:relative;color:var(--mv-acc);font-weight:inherit} .mv-dark .mv-it{color:var(--mv-brass)}\n.mv-spark{display:none}\n\n.mv-um{position:relative;overflow:hidden;transition:clip-path 1.35s cubic-bezier(.7,0,.2,1);background:color-mix(in srgb,var(--mv-stone) 22%,transparent)}\n.mv-um img{position:absolute;left:0;top:-9%;width:100%;height:118%;display:block;object-fit:cover;scale:1.28;translate:0 calc((var(--sp,.5) - .5)*var(--par,1)*-7%);transition:scale 1.9s cubic-bezier(.16,.84,.24,1);user-select:none}\n.mv-um.is-on img{scale:1}\n/* diagonal cuts: the section hangs over its neighbour and is cut on a slope (clip-path, so the neighbour shows through) */\n.mv-cut-t{margin-top:calc(var(--cut,7vw)*-1);clip-path:polygon(0 var(--cut,7vw),100% 0,100% 100%,0 100%);padding-top:var(--cut,7vw)}\n.mv-cut-b{margin-bottom:calc(var(--cut,7vw)*-1);padding-bottom:var(--cut,7vw)}\n.mv-cut-t.mv-cut-b{clip-path:polygon(0 var(--cut,7vw),100% 0,100% calc(100% - var(--cut,7vw)),0 100%)}\n.mv-cut-b:not(.mv-cut-t){clip-path:polygon(0 0,100% 0,100% calc(100% - var(--cut,7vw)),0 100%)}\n@media (max-width:1099px){.mv-wrap{--pad:32px}}\n@media (max-width:699px){.mv-wrap{--pad:20px}}\n@media (prefers-reduced-motion:reduce){.mv-hd-i{translate:0 0!important} .mv-spark{scale:1!important;rotate:0deg!important;animation:none!important} .mv-um{clip-path:none!important} .mv-um img{scale:1!important;translate:0 0!important}}\n`;const SEED={site:[{\"slug\":\"site\",\"f1\":\"Josh Barnes\",\"f2\":\"Product designer & developer\",\"f3\":\"I design digital products and build them in code, from the first sketch to the shipped release.\",\"f4\":\"hello@maravoss.design\",\"f5\":\"Berlin\",\"f6\":\"Europe/Berlin\",\"f7\":\"Available for work \\xb7 Nov 2026\",\"f8\":\"/resume\",\"f9\":\"Dribbble:https://dribbble.com,GitHub:https://github.com,LinkedIn:https://linkedin.com,Read.cv:https://read.cv\",\"f10\":\"9\",\"f11\":\"/contact\",\"n1\":\"1\"}],experience:[{\"slug\":\"independent\",\"f1\":\"Independent product designer & developer\",\"f2\":\"Josh Barnes Studio\",\"f3\":\"2023 — now\",\"f4\":\"Product design and front-end for startups and brands in Europe and the US.\",\"f5\":\"work\",\"n1\":\"1\"},{\"slug\":\"loop\",\"f1\":\"Lead product designer\",\"f2\":\"Loop Bank\",\"f3\":\"2020 — 2023\",\"f4\":\"Led design of the mobile app from beta to 1.2M users.\",\"f5\":\"work\",\"n1\":\"2\"},{\"slug\":\"pulse\",\"f1\":\"Design engineer\",\"f2\":\"Pulse Analytics\",\"f3\":\"2018 — 2020\",\"f4\":\"Built the design system in Figma and React.\",\"f5\":\"work\",\"n1\":\"3\"},{\"slug\":\"studio-north\",\"f1\":\"Designer\",\"f2\":\"Studio North\",\"f3\":\"2016 — 2018\",\"f4\":\"Brand and web projects for cultural clients.\",\"f5\":\"work\",\"n1\":\"4\"},{\"slug\":\"hfg\",\"f1\":\"BA Interaction Design\",\"f2\":\"HfG Schw\\xe4bisch Gm\\xfcnd\",\"f3\":\"2012 — 2016\",\"f4\":\"Thesis on motion in interfaces.\",\"f5\":\"edu\",\"n1\":\"5\"},{\"slug\":\"awwwards\",\"f1\":\"Site of the Day\",\"f2\":\"Awwwards\",\"f3\":\"2024\",\"f4\":\"For the Atlas docs site.\",\"f5\":\"award\",\"n1\":\"6\"}]};const SW_BUILD=\"MvCredits@cms1\";// An override control wins only when it holds real text; empty (or a single space) inherits from the CMS.\nconst pick=(o,fb)=>o!==undefined&&o!==null&&String(o).trim()?String(o).trim():fb;const imgOf=(r,k=\"img\")=>String(r&&r[k]||\"\").split(\"?\")[0];// A cleared CMS image draws this quiet placeholder — never a stock photo, and list positions stay aligned with their rows.\nconst EMPTY_IMG=\"data:image/svg+xml;utf8,\"+encodeURIComponent(\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 500' preserveAspectRatio='xMidYMid slice'><rect width='400' height='500' fill='#D3D8E2'/><rect x='120' y='170' width='160' height='160' rx='8' fill='none' stroke='#AEB6C6' stroke-width='1.5'/><rect x='100' y='150' width='200' height='200' rx='10' fill='none' stroke='#C3CAD8' stroke-width='1' stroke-dasharray='2 6'/></svg>\");const imgOr=(r,k=\"img\")=>imgOf(r,k)||EMPTY_IMG;const cmsNum=(r,k,fb=0)=>{const v=parseFloat(String((r&&r[k])??\"\"));return isFinite(v)?v:fb;};const useIso=typeof window===\"undefined\"?useEffect:useLayoutEffect;function readCMS(kind){if(typeof document===\"undefined\")return null;if(!document.querySelector('[data-mv-row=\"bridge\"]'))return null;const seen=new Set;const out=[];document.querySelectorAll(`[data-mv-row=\"${kind}\"]`).forEach(el=>{const o={};for(const a of Array.from(el.attributes))if(a.name.startsWith(\"data-\"))o[a.name.slice(5)]=a.value;const key=o.slug||JSON.stringify(o);if(seen.has(key))return;seen.add(key);out.push(o);});return out.sort((a,b)=>(parseFloat(a.n1)||0)-(parseFloat(b.n1)||0));}function useCMS(kind,fallback){const[rows,setRows]=useState(fallback);const sig=useRef(\"\");useIso(()=>{let n=0,t=0,ok=0;try{const w=window;if(!w.__ltCms||typeof w.__ltCms!==\"object\")w.__ltCms={};w.__ltCms[SW_BUILD]=1;}catch(e){}const pull=()=>{const r=readCMS(kind);if(!r)return false;const s=JSON.stringify(r);if(s!==sig.current){sig.current=s;setRows(r);}return true;};const mo=new MutationObserver(()=>{if(pull()){ok++;if(ok>2)mo.disconnect();}});mo.observe(document.body,{childList:true,subtree:true});if(pull())ok++;const poll=()=>{if(n++<30){pull();t=window.setTimeout(poll,150);}};t=window.setTimeout(poll,150);return()=>{mo.disconnect();window.clearTimeout(t);};},[kind]);return rows;}// The one-row Site collection holds every site-wide fact (name, role, contact, availability, resume link). A section's \"… Override\" control only replaces it on that one section.\nfunction useSite(){const r=useCMS(\"site\",SEED.site||[]);const s=r[0]||(SEED.site||[])[0]||{};const g=k=>String(s[k]??\"\").trim();return{name:g(\"f1\")||\"Josh Barnes\",role:g(\"f2\"),tagline:g(\"f3\"),email:g(\"f4\"),city:g(\"f5\"),tz:g(\"f6\")||\"Europe/Berlin\",avail:g(\"f7\"),resume:g(\"f8\")||\"/resume\",socials:g(\"f9\"),years:g(\"f10\"),book:g(\"f11\")||\"/contact\"};}const linkList=s=>String(s||\"\").split(\",\").map(x=>x.trim()).filter(Boolean).map(x=>{const i=x.indexOf(\":\");return{l:i<0?x:x.slice(0,i).trim(),h:i<0?\"/\":x.slice(i+1).trim()};});const listOf=s=>String(s||\"\").split(\";\").map(x=>x.trim()).filter(Boolean);// The row a CMS detail page is about: the bound Slug control wins (server render included), else the last URL segment, else the first row.\nfunction useRow(kind,fallback,slug){const rows=useCMS(kind,fallback);const[path,setPath]=useState(\"\");useEffect(()=>{try{setPath(decodeURIComponent(window.location.pathname.split(\"/\").filter(Boolean).pop()||\"\"));}catch(e){}},[]);const want=String(slug||\"\").trim()||path;const row=rows.find(r=>r.slug===want)||rows[0]||{};return{row,rows};}const crumbs=s=>linkList(s);// Open now? Open Hours = \"1-6 07:00-19:00\" (weekday numbers, Mon = 1 … Sun = 7) evaluated in the Site Time Zone.\nfunction openState(spec,tz){try{const m=String(spec||\"\").match(/(\\d)\\s*-\\s*(\\d)\\s+(\\d{1,2}):(\\d{2})\\s*-\\s*(\\d{1,2}):(\\d{2})/);if(!m)return null;const parts=new Intl.DateTimeFormat(\"en-US\",{timeZone:tz||\"UTC\",weekday:\"short\",hour:\"2-digit\",minute:\"2-digit\",hour12:false}).formatToParts(new Date);const g=t=>(parts.find(p=>p.type===t)||{value:\"\"}).value;const wd=[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"].indexOf(g(\"weekday\"))+1;const mins=Number(g(\"hour\"))%24*60+Number(g(\"minute\"));const d1=Number(m[1]),d2=Number(m[2]),a=Number(m[3])*60+Number(m[4]),b=Number(m[5])*60+Number(m[6]);const open=wd>=d1&&wd<=d2&&mins>=a&&mins<b;return{open,label:open?`Open \\xb7 till ${m[5].padStart(2,\"0\")}:${m[6]}`:`Closed \\xb7 opens ${m[3].padStart(2,\"0\")}:${m[4]}`};}catch(e){return null;}}// ---- THE CREDITS: the résumé as an END-CREDITS ROLL. A pinned film gate (rounded frame + four corner marks, reel labels) holds a centred\n// two-column credits roll — role in mono caps on the right-aligned side, company in display on the left-aligned side, grouped Work / Education /\n// Awards — that rolls UP with scroll (--pp), fading in at the bottom edge and out at the top, while a mono TIMECODE counts in the corner.\n// It ends on the closing card \"Directed & built by …\". Hover a credit: the selection block snaps round it and its Summary opens underneath.\n// Phone / reduced motion / canvas: no pin, the whole list in the same typography. ----\nconst GROUPS=[[\"work\",\"groupWork\"],[\"edu\",\"groupEdu\"],[\"award\",\"groupAward\"]];const tcOf=sec=>{const f=Math.floor(sec*24);const ff=f%24,s=Math.floor(f/24)%60,m=Math.floor(f/1440)%60,h=Math.floor(f/86400);const p=n=>String(n).padStart(2,\"0\");return`${p(h)}:${p(m)}:${p(s)}:${p(ff)}`;};export default function MvCredits(props){const{eyebrow=\"FRAME 06 — R\\xe9sum\\xe9\",heading=\"The *credits*.\",primary=\"Download r\\xe9sum\\xe9\",primaryLink=\"\",secondary=\"Full r\\xe9sum\\xe9\",secondaryLink=\"/resume\",opener=\"{years} years in production\",openerKicker=\"A {name} production\",closingKicker=\"Directed & built by\",closingName=\"\",closingLine=\"Shot on location in {city}\",cornerTL=\"End credits\",cornerTR=\"Reel 06 \\xb7 24 fps\",cornerBL=\"R\\xe9sum\\xe9 \\xb7 {name}\",runTime=96,rollLength=260,bpHint=\"auto\"}=props;const c=colorsOf(props);const{D,B,M}=fontsOf(props);useFonts();const live=useLive();const rm=useReduced();const still=useStill();const site=useSite();const root=useRef(null);const gate=useRef(null);const roll=useRef(null);const card=useRef(null);const tc=useRef(null);const{w,vh}=useSize(root,bpHint);const phone=w<810,tab=w>=810&&w<1100;const on=useOn(root,live,rm);useMagnet(root,live);const pin=live&&!rm&&!still&&!phone;const rows=useCMS(\"experience\",SEED.experience||[]);const fill=s=>String(s||\"\").replace(/\\{name\\}/g,site.name).replace(/\\{years\\}/g,site.years||\"\").replace(/\\{city\\}/g,site.city||\"\").replace(/\\s+/g,\" \").trim();const groups=GROUPS.map(([k,pk])=>({k,title:String(props[pk]??(k===\"work\"?\"Work\":k===\"edu\"?\"Education\":\"Awards\")),items:rows.filter(r=>{const t=String(r.f5||\"work\").toLowerCase().trim();return k===\"work\"?![\"edu\",\"award\"].includes(t):t===k;})})).filter(g=>g.items.length);const[geo,setGeo]=useState({r0:0,r1:0});useLayoutEffect(()=>{if(!pin)return;const g=gate.current,r=roll.current,cd=card.current;if(!g||!r||!cd)return;const m=()=>{const gh=g.clientHeight;const cm=cd.offsetTop+cd.offsetHeight/2;const n={r0:Math.round(gh*.36),r1:Math.round(gh/2-cm)};setGeo(o=>o.r0===n.r0&&o.r1===n.r1?o:n);};m();const ro=new ResizeObserver(m);ro.observe(g);ro.observe(r);const t=window.setTimeout(m,900);return()=>{ro.disconnect();window.clearTimeout(t);};},[pin,rows.length,w]);const lastTc=useRef(\"\");useScrollVars(root,pin,rm,(_sp,pp)=>{const s=tcOf(pp*Math.max(10,runTime||96));if(s!==lastTc.current&&tc.current){lastTc.current=s;tc.current.textContent=s;}});const endTc=tcOf(Math.max(10,runTime||96));const resume=pick(primaryLink,site.resume||\"/resume\");const name=pick(closingName,site.name);let k=0;return /*#__PURE__*/_jsxs(\"section\",{ref:root,className:`mv mv-sec mv-dark mvcr${pin?\" is-pin\":\" is-flat\"}${phone?\" is-ph\":tab?\" is-tab\":\"\"}${on?\" is-on\":\"\"}`,style:{...cssVars(c),...B,[\"--len\"]:`${Math.max(160,rollLength||260)}`,[\"--r0\"]:`${geo.r0}px`,[\"--r1\"]:`${geo.r1}px`,...props.style||{}},\"aria-label\":plainOf(heading),children:[/*#__PURE__*/_jsx(\"link\",{rel:\"stylesheet\",href:FONTS}),/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:CSS_BASE+CSS_MOTION+CSS_CR+siteFontCss(props)}}),/*#__PURE__*/_jsxs(\"div\",{className:\"mvcr-stick\",children:[/*#__PURE__*/_jsxs(\"header\",{className:\"mvcr-top mv-wrap\",children:[/*#__PURE__*/_jsxs(\"div\",{className:\"mvcr-hl\",children:[/*#__PURE__*/_jsx(Eyebrow,{text:eyebrow,on:on,M:M}),/*#__PURE__*/_jsx(Head,{text:heading,on:on,D:D,size:\"clamp(40px,4.3vw,64px)\",lh:.95,delay:120,style:{fontWeight:760,fontStretch:\"115%\"}})]}),/*#__PURE__*/_jsxs(\"div\",{className:\"mvcr-btns\",style:rise(on,380,14),children:[/*#__PURE__*/_jsx(Btn,{href:resume,label:primary,kind:\"solid\"}),/*#__PURE__*/_jsx(Btn,{href:secondaryLink||\"/resume\",label:secondary,kind:\"ghost\"})]})]}),/*#__PURE__*/_jsx(\"div\",{className:\"mvcr-gatewrap mv-wrap\",children:/*#__PURE__*/_jsxs(\"div\",{ref:gate,className:\"mvcr-gate\",style:rise(on,260,18),children:[/*#__PURE__*/_jsx(\"div\",{className:\"mvcr-view\",children:/*#__PURE__*/_jsxs(\"div\",{ref:roll,className:\"mvcr-roll\",children:[/*#__PURE__*/_jsxs(\"div\",{className:\"mvcr-open\",children:[openerKicker&&/*#__PURE__*/_jsx(\"p\",{className:\"mvcr-ok\",style:M,children:fill(openerKicker)}),opener&&/*#__PURE__*/_jsx(\"p\",{className:\"mvcr-ot\",style:D,children:fill(opener)})]}),groups.map(g=>/*#__PURE__*/_jsxs(\"div\",{className:\"mvcr-grp\",children:[/*#__PURE__*/_jsxs(\"h3\",{className:\"mvcr-gh\",style:M,children:[/*#__PURE__*/_jsx(\"i\",{\"aria-hidden\":true}),g.title,/*#__PURE__*/_jsx(\"i\",{\"aria-hidden\":true})]}),/*#__PURE__*/_jsx(\"ul\",{className:\"mvcr-list\",children:g.items.map(r=>{const i=k++;return /*#__PURE__*/_jsx(\"li\",{className:\"mvcr-row\",style:{[\"--i\"]:i},children:/*#__PURE__*/_jsxs(\"span\",{className:\"mvcr-hit\",children:[/*#__PURE__*/_jsxs(\"span\",{className:\"mvcr-sel\",\"aria-hidden\":true,children:[/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{})]}),/*#__PURE__*/_jsxs(\"span\",{className:\"mvcr-role\",style:M,children:[/*#__PURE__*/_jsx(\"span\",{children:r.f1}),r.f3&&/*#__PURE__*/_jsx(\"em\",{children:r.f3})]}),/*#__PURE__*/_jsx(\"span\",{className:\"mvcr-co\",style:D,children:r.f2}),r.f4&&/*#__PURE__*/_jsx(\"span\",{className:\"mvcr-sum\",children:/*#__PURE__*/_jsx(\"span\",{children:r.f4})})]})},r.slug||i);})})]},g.k)),/*#__PURE__*/_jsxs(\"div\",{ref:card,className:\"mvcr-card\",children:[/*#__PURE__*/_jsx(\"p\",{className:\"mvcr-ck\",style:M,children:closingKicker}),/*#__PURE__*/_jsx(\"p\",{className:\"mvcr-cn\",style:D,children:name}),closingLine&&/*#__PURE__*/_jsx(\"p\",{className:\"mvcr-cl\",style:M,children:fill(closingLine)})]})]})}),/*#__PURE__*/_jsxs(\"div\",{className:\"mvcr-frame\",\"aria-hidden\":true,children:[/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsxs(\"span\",{className:\"mvcr-lb mvcr-tl\",style:M,children:[/*#__PURE__*/_jsx(\"b\",{}),fill(cornerTL)]}),/*#__PURE__*/_jsx(\"span\",{className:\"mvcr-lb mvcr-tr\",style:M,children:fill(cornerTR)}),/*#__PURE__*/_jsx(\"span\",{className:\"mvcr-lb mvcr-bl\",style:M,children:fill(cornerBL)}),/*#__PURE__*/_jsxs(\"span\",{className:\"mvcr-lb mvcr-br\",style:M,children:[\"TC \",/*#__PURE__*/_jsx(\"span\",{ref:tc,children:pin?\"00:00:00:00\":endTc})]})]})]})})]})]});}const CSS_CR=`\n.mvcr{background:var(--mv-night);color:var(--mv-cloud);--hair:color-mix(in srgb,var(--mv-cloud) 14%,transparent)}\n.mvcr .mv-eb{border-radius:4px;text-transform:uppercase;letter-spacing:.1em;font-size:11px;padding:6px 10px 6px 9px}\n.mvcr .mv-eb i{border-radius:1px}\n.mvcr .mv-hd{letter-spacing:-.04em;margin-top:18px}\n.mvcr .mv-it{color:var(--mv-brass);font-weight:inherit}\n/* pinned: the wrapper is tall, the stage sticks for its length */\n.mvcr.is-pin{height:calc(var(--len) * 1svh)}\n.mvcr-stick{display:flex;flex-direction:column}\n.mvcr.is-pin .mvcr-stick{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden}\n.mvcr-top{display:flex;align-items:flex-end;justify-content:space-between;gap:32px;padding-top:clamp(40px,6vh,72px);padding-bottom:clamp(20px,3vh,32px)}\n.mvcr-btns{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end}\n.mvcr-gatewrap{flex:1;min-height:0;display:flex;padding-bottom:clamp(20px,3.4vh,40px)}\n.mvcr-gate{position:relative;flex:1;min-height:0;border-radius:18px;background:radial-gradient(60% 55% at 50% 0%,rgba(255,226,180,.07),transparent 70%),color-mix(in srgb,var(--mv-cloud) 2%,transparent)}\n.mvcr-view{position:absolute;inset:0;overflow:hidden;border-radius:inherit;-webkit-mask:linear-gradient(180deg,transparent 0,#000 20%,#000 80%,transparent 100%);mask:linear-gradient(180deg,transparent 0,#000 20%,#000 80%,transparent 100%)}\n.mvcr-roll{position:relative;width:min(880px,100%);margin:0 auto;padding:0 24px;will-change:transform}\n.mvcr.is-pin .mvcr-roll{transform:translate3d(0,calc(var(--r0) + (var(--r1) - var(--r0)) * var(--pp,0)),0)}\n/* film gate overlay: hairline frame, four corner marks, reel labels */\n.mvcr-frame{position:absolute;inset:0;pointer-events:none;border-radius:inherit;box-shadow:inset 0 0 0 1px var(--hair)}\n.mvcr-frame>i{position:absolute;width:26px;height:26px;border:0 solid color-mix(in srgb,var(--mv-cloud) 62%,transparent)}\n.mvcr-frame>i:nth-child(1){left:14px;top:14px;border-left-width:1.5px;border-top-width:1.5px;border-top-left-radius:6px}\n.mvcr-frame>i:nth-child(2){right:14px;top:14px;border-right-width:1.5px;border-top-width:1.5px;border-top-right-radius:6px}\n.mvcr-frame>i:nth-child(3){left:14px;bottom:14px;border-left-width:1.5px;border-bottom-width:1.5px;border-bottom-left-radius:6px}\n.mvcr-frame>i:nth-child(4){right:14px;bottom:14px;border-right-width:1.5px;border-bottom-width:1.5px;border-bottom-right-radius:6px}\n.mvcr-lb{position:absolute;display:flex;align-items:center;gap:8px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--mv-mut)}\n.mvcr-tl{left:52px;top:20px} .mvcr-tr{right:52px;top:20px} .mvcr-bl{left:52px;bottom:20px} .mvcr-br{right:52px;bottom:20px;color:var(--mv-cloud);font-variant-numeric:tabular-nums}\n.mvcr-br span{display:inline-block;min-width:11ch;padding:3px 6px;border-radius:4px;background:color-mix(in srgb,var(--mv-cloud) 8%,transparent)}\n.mvcr-tl b{width:7px;height:7px;border-radius:50%;background:var(--mv-brass);box-shadow:0 0 10px var(--mv-brass);animation:mvcr-rec 1.6s steps(2) infinite}\n@keyframes mvcr-rec{50%{opacity:.25}}\n/* the credits */\n.mvcr-open{text-align:center;padding:24px 0 40px}\n.mvcr-ok{margin:0 0 14px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mv-mut)}\n.mvcr-ot{margin:0;font-size:clamp(28px,2.6vw,40px);line-height:1;letter-spacing:-.035em;font-weight:720;font-stretch:115%}\n.mvcr-grp{padding:34px 0 10px}\n.mvcr-gh{display:flex;align-items:center;justify-content:center;gap:16px;margin:0 0 18px;font-size:11px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--mv-brass)}\n.mvcr-gh i{display:block;width:56px;height:1px;background:color-mix(in srgb,var(--mv-brass) 55%,transparent)}\n.mvcr-list{list-style:none;margin:0;padding:0}\n.mvcr-row{display:flex;justify-content:center}\n.mvcr-hit{position:relative;display:grid;grid-template-columns:1fr 1fr;column-gap:36px;width:100%;padding:12px 20px;border-radius:4px;transition:background-color .25s,color .25s}\n.mvcr-hit::before{content:\"\";position:absolute;inset:0;border-radius:inherit;background:var(--mv-brass);clip-path:inset(0 100% 0 0);transition:clip-path .45s steps(8)}\n.mvcr-role{position:relative;display:flex;flex-direction:column;align-items:flex-end;gap:5px;text-align:right;padding-top:.55em;font-size:12px;letter-spacing:.12em;text-transform:uppercase;line-height:1.35}\n.mvcr-role em{font-style:normal;font-size:11px;letter-spacing:.08em;color:var(--mv-mut);font-variant-numeric:tabular-nums;transition:color .25s}\n.mvcr-co{position:relative;font-size:clamp(24px,2.3vw,34px);line-height:1.05;letter-spacing:-.03em;font-weight:720;font-stretch:112%;text-wrap:balance}\n.mvcr-sum{position:relative;grid-column:1 / -1;display:grid;grid-template-rows:0fr;transition:grid-template-rows .45s cubic-bezier(.2,.8,.2,1)}\n.mvcr-sum>span{overflow:hidden;text-align:center;font-size:15px;line-height:1.5;opacity:0;transition:opacity .3s}\n.mvcr-sel{position:absolute;inset:-4px;border-radius:7px;box-shadow:0 0 0 1.5px var(--mv-brass);opacity:0;scale:1.03;transition:opacity .2s,scale .4s cubic-bezier(.34,1.56,.64,1);pointer-events:none}\n.mvcr-sel i{position:absolute;width:7px;height:7px;background:var(--mv-cloud);box-shadow:0 0 0 1.5px var(--mv-brass);translate:-50% -50%} .mvcr-sel i:nth-child(1){left:0;top:0} .mvcr-sel i:nth-child(2){left:100%;top:0} .mvcr-sel i:nth-child(3){left:0;top:100%} .mvcr-sel i:nth-child(4){left:100%;top:100%}\n@media (hover:hover){.mvcr-hit:hover{color:var(--mv-ink)} .mvcr-hit:hover::before{clip-path:inset(0 0 0 0)} .mvcr-hit:hover .mvcr-role em{color:color-mix(in srgb,var(--mv-ink) 70%,transparent)} .mvcr-hit:hover .mvcr-sel{opacity:1;scale:1} .mvcr-hit:hover .mvcr-sum{grid-template-rows:1fr} .mvcr-hit:hover .mvcr-sum>span{opacity:1;padding-top:10px}}\n.mvcr-card{text-align:center;padding:64px 0 24px}\n.mvcr-ck{margin:0 0 16px;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mv-mut)}\n.mvcr-cn{margin:0;font-size:clamp(48px,6vw,92px);line-height:.9;letter-spacing:-.045em;font-weight:800;font-stretch:118%;color:#FFF1DA;text-shadow:0 0 42px rgba(255,226,180,.35)}\n.mvcr-cl{margin:18px 0 0;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mv-mut)}\n/* flat (phone / reduced motion / canvas): the whole roll in the same typography */\n.mvcr.is-flat{padding-bottom:clamp(40px,6vw,80px)}\n.mvcr.is-flat .mvcr-gate{flex:none;width:100%}\n.mvcr.is-flat .mvcr-view{position:relative;-webkit-mask:none;mask:none;padding:56px 0 64px}\n.mvcr.is-tab .mvcr-top{flex-direction:column;align-items:flex-start} .mvcr.is-tab .mvcr-btns{justify-content:flex-start}\n.mvcr.is-ph .mvcr-top{flex-direction:column;align-items:stretch;gap:24px;padding-top:56px}\n.mvcr.is-ph .mvcr-btns{flex-direction:column;align-items:stretch} .mvcr.is-ph .mvcr-btns .mv-btn{width:100%}\n.mvcr.is-ph .mvcr-roll{padding:0 12px}\n.mvcr.is-ph .mvcr-hit{grid-template-columns:1fr;row-gap:6px;text-align:center;padding:12px 8px}\n.mvcr.is-ph .mvcr-role{align-items:center;text-align:center;padding-top:0}\n.mvcr.is-ph .mvcr-co{font-size:26px}\n.mvcr.is-ph .mvcr-sum{grid-template-rows:1fr} .mvcr.is-ph .mvcr-sum>span{opacity:.8;padding-top:4px;font-size:15px}\n.mvcr.is-ph .mvcr-lb{font-size:10px;letter-spacing:.06em} .mvcr.is-ph .mvcr-tl,.mvcr.is-ph .mvcr-bl{left:44px} .mvcr.is-ph .mvcr-tr,.mvcr.is-ph .mvcr-br{right:44px} .mvcr.is-ph .mvcr-tr,.mvcr.is-ph .mvcr-bl{display:none}\n.mvcr.is-ph .mvcr-view{padding:52px 0 56px}\n@media (prefers-reduced-motion:reduce){.mvcr-tl b{animation:none}}`;addPropertyControls(MvCredits,{...COLOR_CONTROLS,...FONT_CONTROLS,...BP_CONTROL,eyebrow:{type:ControlType.String,title:\"Eyebrow\",defaultValue:\"FRAME 06 — R\\xe9sum\\xe9\"},heading:{type:ControlType.String,title:\"Heading\",description:\"*word* = accent \\xb7 | = line break\",defaultValue:\"The *credits*.\"},primary:{type:ControlType.String,title:\"Primary button\",defaultValue:\"Download r\\xe9sum\\xe9\"},primaryLink:{type:ControlType.Link,title:\"Primary link\",description:\"Empty = Resume Link on the Site CMS row\"},secondary:{type:ControlType.String,title:\"Second button\",defaultValue:\"Full r\\xe9sum\\xe9\"},secondaryLink:{type:ControlType.Link,title:\"Second link\",defaultValue:\"/resume\"},openerKicker:{type:ControlType.String,title:\"Opening line\",description:\"{name} {years} {city} come from the Site CMS row\",defaultValue:\"A {name} production\"},opener:{type:ControlType.String,title:\"Opening title\",defaultValue:\"{years} years in production\"},groupWork:{type:ControlType.String,title:\"Work heading\",defaultValue:\"Work\"},groupEdu:{type:ControlType.String,title:\"Education heading\",defaultValue:\"Education\"},groupAward:{type:ControlType.String,title:\"Awards heading\",defaultValue:\"Awards\"},closingKicker:{type:ControlType.String,title:\"Closing line\",defaultValue:\"Directed & built by\"},closingName:{type:ControlType.String,title:\"Closing name\",description:\"Empty = Name on the Site CMS row\",defaultValue:\"\"},closingLine:{type:ControlType.String,title:\"Closing note\",defaultValue:\"Shot on location in {city}\"},cornerTL:{type:ControlType.String,title:\"Corner label 1\",defaultValue:\"End credits\"},cornerTR:{type:ControlType.String,title:\"Corner label 2\",defaultValue:\"Reel 06 \\xb7 24 fps\"},cornerBL:{type:ControlType.String,title:\"Corner label 3\",defaultValue:\"R\\xe9sum\\xe9 \\xb7 {name}\"},runTime:{type:ControlType.Number,title:\"Run time\",description:\"Seconds the timecode counts over the roll\",defaultValue:96,min:10,max:600,step:1,unit:\"s\"},rollLength:{type:ControlType.Number,title:\"Roll length\",description:\"Scroll length of the pinned roll (desktop)\",defaultValue:260,min:160,max:500,step:10,unit:\"vh\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MvCredits\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MvCredits.map","// ===== JOSH BARNES shared scaffold (THE CANVAS: graphite design-tool canvas, paper sections, selection-cyan, SELECTION buttons) (inlined by mk.py; each Framer code file must be self-contained) =====\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useEffect,useLayoutEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget,useIsStaticRenderer}from\"framer\";const FONTS=\"https://fonts.googleapis.com/css2?family=Mona+Sans:ital,wdth,wght@0,75..125,200..900;1,75..125,200..900&family=Chivo+Mono:ital,wght@0,300..600;1,300..600&display=swap\";// Token-safe alpha: Styles-bound colours arrive as var(--token-…) so hex-alpha breaks; color-mix keeps a palette flip working. Never 0% (hue drops) — floor at 0.4%.\nconst A=(c,a)=>`color-mix(in srgb, ${c} ${Math.max(.4,Math.round(a*1e3)/10)}%, transparent)`;const MIX=(a,b,t)=>`color-mix(in srgb, ${a} ${Math.round((1-t)*100)}%, ${b})`;const srcOf=(v,fallback)=>v&&typeof v===\"object\"&&v.src?String(v.src).split(\"?\")[0]:typeof v===\"string\"&&v.trim()?v.trim().split(\"?\")[0]:fallback;const T=(s,fb)=>s&&s.trim()?s.trim():fb;// ink or white text on a CMS brand colour (luminance test; the brand colour is data, not a palette token)\nconst onBrand=hex=>{const m=String(hex||\"\").replace(\"#\",\"\").match(/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);if(!m)return\"var(--mv-cloud)\";const[r,g,b]=[m[1],m[2],m[3]].map(x=>{const v=parseInt(x,16)/255;return v<=.03928?v/12.92:Math.pow((v+.055)/1.055,2.4);});const L=.2126*r+.7152*g+.0722*b;return L>.2?\"var(--mv-ink)\":\"var(--mv-cloud)\";};const cleanTel=s=>s.replace(/[^\\d+]/g,\"\");// Premium layout band (measured 09-13): container 1340 @1440 / 1520 @1920, body 16, button label 12–13.\nconst MAXW=\"clamp(1280px, 92vw, 1520px)\";// Responsive delivery: Framer's resizer serves any upload at ?scale-down-to=N (longest side). The query is stripped first so one file never downloads twice.\n// Responsive delivery. Framer uploads: the resizer serves ?scale-down-to=N. Unsplash stand-ins: ?w=N. The src is already the smallest width that covers the slot (a 52px avatar never pulls a 1600px photo), so a big image is never decoded for a small box — decode is what stalls scrolling.\nconst RS_W=[160,320,480,800,1200,1600];const rsTarget=sizes=>{const t=String(sizes||\"\").trim().split(\",\").pop()||\"\";const px=t.match(/(\\d+(?:\\.\\d+)?)px/);const vw=t.match(/(\\d+(?:\\.\\d+)?)vw/);const want=px?parseFloat(px[1])*2:vw?parseFloat(vw[1])/100*1600*1.25:1600;return RS_W.find(w=>w>=want)||1600;};const RS=(u,sizes)=>{const s=String(u||\"\");const b=s.split(\"?\")[0];if(/framerusercontent\\.com\\/images\\//.test(s)){const w=rsTarget(sizes);const d=w<=512?512:w<=1024?1024:2048;return{src:`${b}?scale-down-to=${d}`,srcSet:`${b}?scale-down-to=512 512w, ${b}?scale-down-to=1024 1024w, ${b}?scale-down-to=2048 2048w`,sizes};}if(/images\\.unsplash\\.com\\//.test(s)){const w=rsTarget(sizes);const q=n=>`${b}?w=${n}&q=70&fm=jpg&auto=format`;return{src:q(w),srcSet:RS_W.filter(n=>n<=Math.max(w*2,480)).map(n=>`${q(n)} ${n}w`).join(\", \"),sizes};}return{src:s};};// A Framer Font control stores a selector (GF;Family-700), not a CSS family — derive one, reject anything with ';'\nconst famOf=f=>{if(!f)return\"\";if(typeof f===\"string\")return f.includes(\";\")?\"\":f;if(f.fontFamily&&!String(f.fontFamily).includes(\";\"))return String(f.fontFamily);const sel=String(f.fontSelector||\"\");if(!sel)return\"\";const n=sel.split(\";\").pop()||\"\";return n.replace(/-(regular|italic|bold|\\d{3}(italic)?)$/i,\"\").replace(/-/g,\" \");};const wOf=(f,fb)=>{if(!f)return fb;if(f.fontWeight)return Number(f.fontWeight)||fb;const m=String(f.fontSelector||\"\").match(/-(\\d{3})/);return m?Number(m[1]):fb;};// famCss: Framer's Font `fontFamily` is ALREADY a stack — never wrap it in quotes (one fake family → fallback renders). A bare name gets quoted.\nconst famCss=f=>{const fa=famOf(f).replace(/\"/g,\"'\").trim();if(!fa)return\"\";return fa.includes(\",\")||fa.startsWith(\"'\")?fa:`'${fa}'`;};const stack=(custom,f,fb,tail)=>{const fam=custom?famCss(f):\"\";return`${fam?`${fam}, `:\"\"}${fb}, ${tail}`;};function useFonts(){useEffect(()=>{if(typeof document===\"undefined\"||document.getElementById(\"mv-fonts\"))return;const l=document.createElement(\"link\");l.id=\"mv-fonts\";l.rel=\"stylesheet\";l.href=FONTS;document.head.appendChild(l);},[]);}// live = client after hydration and not on the canvas. SSR and the first client render share the same markup.\n// TRUE on the Framer canvas AND in its export / thumbnail / screenshot renderers (anything that is not the running preview): no scroll and no hydration there, so every reveal / pinned stage must draw its FINAL state or the editor shows empty blocks.\nfunction useStill(){const isStatic=useIsStaticRenderer();let t=null;try{t=RenderTarget.current();}catch(e){}return isStatic||t!==null&&t!==RenderTarget.preview;}function useLive(){const isStatic=useIsStaticRenderer();const[live,setLive]=useState(false);useEffect(()=>{if(!isStatic&&RenderTarget.current()!==RenderTarget.canvas&&typeof window!==\"undefined\")setLive(true);},[isStatic]);return live;}// Width/height of the root + viewport height. SSR starts from the breakpoint hint (Framer renders the Tablet/Phone copies with the same code and no width).\nfunction useSize(root,hint){const ov=String(hint||\"\").toLowerCase();const[w,setW]=useState(ov===\"phone\"?390:ov===\"tablet\"?810:1440),[vh,setVh]=useState(ov===\"phone\"?844:ov===\"tablet\"?1080:900);useLayoutEffect(()=>{const el=root.current;if(!el)return;const ro=new ResizeObserver(([e])=>{const x=Math.round((e.borderBoxSize&&e.borderBoxSize[0]?e.borderBoxSize[0].inlineSize:0)||el.offsetWidth);if(x>0)setW(x);});ro.observe(el);const vv=()=>setVh(window.innerHeight);vv();const read=()=>{const x=Math.round(el.offsetWidth);if(x>0)setW(x);};const t1=window.setTimeout(read,150),t2=window.setTimeout(read,700),t3=window.setTimeout(read,1600);window.addEventListener(\"resize\",vv);window.addEventListener(\"load\",read);return()=>{ro.disconnect();window.clearTimeout(t1);window.clearTimeout(t2);window.clearTimeout(t3);window.removeEventListener(\"resize\",vv);window.removeEventListener(\"load\",read);};},[]);return{w,vh};}const useReduced=()=>{const[rm,setRm]=useState(false);useLayoutEffect(()=>{setRm(window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches);},[]);return rm;};// One shared rAF for every section. Each frame runs ALL reads first (layout reads: getBoundingClientRect, offsetHeight), then ALL writes (CSS vars, transforms).\n// Interleaving read → write → read made the browser recalc the whole page's style once per section per frame (layout thrashing: 20+ recalcs a frame).\nfunction onTick(fn,read,pre){if(typeof window===\"undefined\")return()=>{};const w=window;if(!w.__nuTick){w.__nuTick={pre:new Set,subs:new Set,reads:new Set,raf:0};const loop=t=>{const T=w.__nuTick;T.pre.forEach(r=>r(t));T.reads.forEach(r=>r(t));T.subs.forEach(s=>s(t));T.raf=requestAnimationFrame(loop);};w.__nuTick.raf=requestAnimationFrame(loop);}w.__nuTick.subs.add(fn);if(read)w.__nuTick.reads.add(read);if(pre)w.__nuTick.pre.add(pre);return()=>{w.__nuTick.subs.delete(fn);if(read)w.__nuTick.reads.delete(read);if(pre)w.__nuTick.pre.delete(pre);};}const clamp01=v=>Math.min(1,Math.max(0,v));const easeIO=t=>{const x=clamp01(t);return x<.5?4*x*x*x:1-Math.pow(-2*x+2,3)/2;};const DEF={bone:\"#F1ECE4\",ink:\"#141210\",brass:\"#4D9FFF\",pine:\"#231D19\",fog:\"#DDD4C8\",stone:\"#857B70\",cloud:\"#FFFFFF\",night:\"#171311\"};// collaborator cursor colours (constants, not tokens): the client and the developer on the canvas\nconst AMBER=\"#FFB224\",VIOLET=\"#A58BFF\";const colorsOf=p=>({bone:p.bone||DEF.bone,ink:p.ink||DEF.ink,brass:p.brass||DEF.brass,pine:p.pine||DEF.pine,fog:p.fog||DEF.fog,stone:p.stone||DEF.stone,cloud:p.cloud||DEF.cloud,night:p.night||DEF.night});// a Style-bound colour arrives as var(--token-…, #hex): let the browser resolve it to r,g,b for canvas drawing\nconst cssRgb=(el,col,fb)=>{if(!el||typeof window===\"undefined\")return fb;const p=document.createElement(\"i\");p.style.display=\"none\";p.style.color=col;el.appendChild(p);const v=getComputedStyle(p).color;p.remove();const m=v.match(/(\\d+(?:\\.\\d+)?),\\s*(\\d+(?:\\.\\d+)?),\\s*(\\d+(?:\\.\\d+)?)/);return m?`${Math.round(+m[1])},${Math.round(+m[2])},${Math.round(+m[3])}`:fb;};const cssVars=c=>({\"--mv-bone\":c.bone,\"--mv-ink\":c.ink,\"--mv-brass\":c.brass,\"--mv-pine\":c.pine,\"--mv-fog\":c.fog,\"--mv-stone\":c.stone,\"--mv-cloud\":c.cloud,\"--mv-night\":c.night});const COLOR_CONTROLS={bone:{type:ControlType.Color,title:\"Paper\",defaultValue:DEF.bone},ink:{type:ControlType.Color,title:\"Ink\",defaultValue:DEF.ink},brass:{type:ControlType.Color,title:\"Accent\",defaultValue:DEF.brass},pine:{type:ControlType.Color,title:\"Deep\",defaultValue:DEF.pine},fog:{type:ControlType.Color,title:\"Line\",defaultValue:DEF.fog},stone:{type:ControlType.Color,title:\"Muted\",defaultValue:DEF.stone},cloud:{type:ControlType.Color,title:\"White\",defaultValue:DEF.cloud},night:{type:ControlType.Color,title:\"Dark\",defaultValue:DEF.night}};// ---- Fonts: Custom Fonts toggle → Font controls; off = Mona Sans (wide display) / Mona Sans / Chivo Mono ----\nconst FONT_CONTROLS={customFonts:{type:ControlType.Boolean,title:\"Custom Fonts\",description:\"Off = the site fonts (set once on the Header in the Site Layout). On = different fonts for this section only\",defaultValue:false},displayFont:{type:ControlType.Font,title:\"Display Font\",defaultFontType:\"sans-serif\",hidden:p=>!p.customFonts},bodyFont:{type:ControlType.Font,title:\"Body Font\",defaultFontType:\"sans-serif\",hidden:p=>!p.customFonts},monoFont:{type:ControlType.Font,title:\"Mono Font\",defaultFontType:\"monospace\",hidden:p=>!p.customFonts}};const NUMF=\"var(--mv-font-m, 'Chivo Mono'), ui-monospace, monospace\";// Site-wide fonts: the Header (Site Layout, every page) writes --mv-font-d/b/m (+ weights) on :root when its Custom Fonts is on. A section uses them unless its own Custom Fonts is on.\nconst siteFontCss=p=>{if(!p||!p.customFonts)return\"\";const v=[];const put=(k,f,w)=>{const fam=famCss(f);if(fam){v.push(`--mv-font-${k}:${fam}`);v.push(`--mv-font-${k}w:${wOf(f,w)}`);}};put(\"d\",p.displayFont,600);put(\"b\",p.bodyFont,400);put(\"m\",p.monoFont,400);put(\"a\",p.accentFont,400);return v.length?`:root{${v.join(\";\")}}`:\"\";};function fontsOf(p){const on=!!p.customFonts;const D={fontFamily:stack(on,p.displayFont,\"var(--mv-font-d, 'Mona Sans')\",\"Inter, -apple-system, Arial, sans-serif\"),fontWeight:on?wOf(p.displayFont,600):\"var(--mv-font-dw, 600)\",fontStyle:on&&p.displayFont&&p.displayFont.fontStyle?p.displayFont.fontStyle:\"normal\"};const B={fontFamily:stack(on,p.bodyFont,\"var(--mv-font-b, 'Mona Sans')\",\"Inter, system-ui, -apple-system, Arial, sans-serif\"),fontWeight:on?wOf(p.bodyFont,400):\"var(--mv-font-bw, 400)\"};const M={fontFamily:stack(on,p.monoFont,\"var(--mv-font-m, 'Chivo Mono')\",\"ui-monospace, SFMono-Regular, Menlo, monospace\"),fontWeight:on?wOf(p.monoFont,400):\"var(--mv-font-mw, 400)\"};return{D,B,M};}const BP_CONTROL={bpHint:{type:ControlType.Enum,title:\"Breakpoint Hint\",description:\"Set per breakpoint copy so the server render starts at the right width\",options:[\"auto\",\"desktop\",\"tablet\",\"phone\"],optionTitles:[\"Auto\",\"Desktop\",\"Tablet\",\"Phone\"],defaultValue:\"auto\",hidden:()=>true}};// ---- Button system: THE PING — a pill. On hover a pink notification dot pops on its right edge with a rolling \"+1\", a lime ring pings out of the dot, the accent fill sweeps in from the left and the label rolls up. Magnetic on desktop, squish on press. Solid = ink (fill lime), ghost = glass/hairline (fill paper), quiet = small nav pill. ----\nconst Glyph=({k})=>k===\"mail\"?/*#__PURE__*/_jsxs(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"rect\",{x:\"3\",y:\"5\",width:\"18\",height:\"14\",rx:\"3\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M4 7l8 6 8-6\"})]}):k===\"cal\"?/*#__PURE__*/_jsxs(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"rect\",{x:\"3.5\",y:\"5\",width:\"17\",height:\"15\",rx:\"3\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M3.5 10h17M8 3v4M16 3v4\"})]}):k===\"play\"?/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{fill:\"currentColor\",d:\"M8 5.5v13l10.5-6.5z\"})}):/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 24 24\",\"aria-hidden\":true,fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2.2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M7 17L17 7M9 7h8v8\"})});// In-page CTA jumps (\"#download\", \"/#download\"): scroll to the section when it is on this page, otherwise go to it on the home page.\nfunction jumpTo(e,href){try{const m=String(href||\"\").match(/^\\/?#([\\w-]+)$/);if(!m)return;const el=document.getElementById(m[1]);if(el){e.preventDefault();const W=window;const L=W.__ltLenis||W.__vcLenis||W.lenis;if(L&&L.scrollTo)L.scrollTo(el,{offset:-20});else el.scrollIntoView({behavior:\"smooth\",block:\"start\"});try{history.replaceState(null,\"\",\"#\"+m[1]);}catch(x){}}else if(href.startsWith(\"#\")){e.preventDefault();window.location.href=\"/\"+href;}}catch(x){}}const Btn=({href,label,kind=\"solid\",arrow=true,style,className,onClick,ariaLabel,cur,icon,sub})=>/*#__PURE__*/_jsxs(\"a\",{className:`mv-btn mv-${kind}${arrow?\"\":\" mv-noarr\"}${className?\" \"+className:\"\"}`,\"data-mag\":true,\"data-cur\":cur||\"go\",href:href,target:/^https?:\\/\\//.test(href||\"\")?\"_blank\":undefined,rel:/^https?:\\/\\//.test(href||\"\")?\"noopener\":undefined,onClick:onClick||(e=>jumpTo(e,href)),\"aria-label\":ariaLabel||(sub?`${sub} ${label}`:undefined),style:style,children:[/*#__PURE__*/_jsxs(\"span\",{className:\"mv-face\",children:[/*#__PURE__*/_jsx(\"span\",{className:\"mv-fill\",\"aria-hidden\":true}),/*#__PURE__*/_jsx(\"span\",{className:\"mv-lbl\",children:/*#__PURE__*/_jsxs(\"span\",{className:\"mv-roll\",children:[/*#__PURE__*/_jsx(\"span\",{className:\"mv-l1\",children:label}),/*#__PURE__*/_jsx(\"span\",{className:\"mv-l2\",\"aria-hidden\":true,children:label})]})}),arrow&&/*#__PURE__*/_jsxs(\"span\",{className:\"mv-arr\",\"aria-hidden\":true,children:[/*#__PURE__*/_jsx(\"span\",{className:\"mv-a1\",children:/*#__PURE__*/_jsx(Glyph,{k:icon})}),/*#__PURE__*/_jsx(\"span\",{className:\"mv-a2\",children:/*#__PURE__*/_jsx(Glyph,{k:icon})})]})]}),/*#__PURE__*/_jsxs(\"span\",{className:\"mv-selb\",\"aria-hidden\":true,children:[/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{}),/*#__PURE__*/_jsx(\"i\",{})]}),/*#__PURE__*/_jsx(\"b\",{className:\"mv-dim\",\"aria-hidden\":true})]});function useNearFocus(root,live){useEffect(()=>{if(!live||!root.current)return;const el=root.current;const f=e=>{const t=e.target;const sc=t.closest?.(\".mv-inring\");if(!sc)return;try{t.scrollIntoView({block:\"nearest\",inline:\"nearest\"});}catch(x){}};el.addEventListener(\"focusin\",f);return()=>el.removeEventListener(\"focusin\",f);},[live]);}function useMagnet(root,live){useEffect(()=>{if(!live||!root.current||!window.matchMedia(\"(hover:hover) and (pointer:fine)\").matches)return;const r=root.current;const btns=()=>Array.from(r.querySelectorAll(\"[data-mag]\"));const en=e=>{const b=e.target.closest?.(\"[data-mag]\");if(b){const d=b.querySelector(\".mv-dim\");if(d)d.textContent=`${Math.round(b.offsetWidth)} \\xd7 ${Math.round(b.offsetHeight)}`;}};const mv=e=>{for(const b of btns()){const rc=b.getBoundingClientRect();const dx=e.clientX-(rc.left+rc.width/2),dy=e.clientY-(rc.top+rc.height/2);const d=Math.hypot(dx,dy);const pull=d<150?(1-d/150)*8:0;b.style.setProperty(\"--mx\",`${dx/(d||1)*pull}px`);b.style.setProperty(\"--my\",`${dy/(d||1)*pull}px`);}};const lv=()=>{for(const b of btns()){b.style.setProperty(\"--mx\",\"0px\");b.style.setProperty(\"--my\",\"0px\");}};r.addEventListener(\"pointermove\",mv);r.addEventListener(\"pointerleave\",lv);r.addEventListener(\"pointerover\",en);r.addEventListener(\"focusin\",en);return()=>{r.removeEventListener(\"pointermove\",mv);r.removeEventListener(\"pointerleave\",lv);r.removeEventListener(\"pointerover\",en);r.removeEventListener(\"focusin\",en);};},[live]);}const CSS_BASE=`\n:where(.mv){position:relative;z-index:10} .mv,.mv *{box-sizing:border-box;min-width:0} .mv-sr{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;white-space:nowrap!important;padding:0!important;margin:-1px!important;border:0!important} :where(.mv) a{color:inherit} html,body{overflow-x:clip}\n:where(a[href],button,input,select,textarea,summary,[tabindex]:not([tabindex=\"-1\"]),[role=\"button\"]):focus-visible{outline:3px solid var(--mv-ink,#0D0E10)!important;outline-offset:2px!important;box-shadow:0 0 0 2px var(--mv-bone,#EEEEE8)!important} :where(.mv-dark) :where(a[href],button,input,select,textarea,summary,[tabindex]:not([tabindex=\"-1\"])):focus-visible{outline-color:var(--mv-cloud,#FFFFFF)!important;box-shadow:0 0 0 2px var(--mv-night,#08090A)!important} :where(.mv-inring) :where(a[href],button):focus-visible{outline-offset:-4px!important;box-shadow:none!important} :where(.mv) :is(input:not([type=range]):not([type=checkbox]):not([type=radio]),textarea,select):focus-visible{outline:2px solid currentColor!important;outline-offset:2px!important;box-shadow:none!important} :where(.mv) textarea{resize:none} .mv-inring:focus-visible{outline-offset:-3px!important;box-shadow:none!important} html{scroll-padding-top:96px;scroll-padding-bottom:88px}\n/* THE SELECTION button: a 10px-radius block. Hover/focus = the design-tool selection snaps around it (cyan outline 5px outside, four white handles, live W \\xd7 H badge underneath), the fill sweeps in from the left and the label rolls up. Magnetic on desktop. */\n.mv-btn{position:relative;display:inline-flex;padding:0;min-height:54px;border-radius:10px;text-decoration:none;cursor:pointer;isolation:isolate;white-space:nowrap;font-size:13px;font-weight:600;letter-spacing:.005em;border:0;color:var(--fg);transition:color .35s,transform .45s cubic-bezier(.34,1.56,.64,1)}\n.mv-face{position:relative;z-index:1;display:inline-flex;align-items:center;gap:14px;width:100%;min-height:inherit;padding:0 8px 0 22px;border-radius:inherit;background:var(--face);-webkit-backdrop-filter:blur(14px) saturate(1.3);backdrop-filter:blur(14px) saturate(1.3);box-shadow:inset 0 0 0 1px var(--rim);overflow:hidden;isolation:isolate}\n.mv-fill{position:absolute;z-index:0;inset:0;background:var(--fill);border-radius:inherit;clip-path:inset(0 100% 0 0);transition:clip-path .6s cubic-bezier(.7,0,.2,1)} .mv-btn:hover .mv-fill,.mv-btn:focus-visible .mv-fill{clip-path:inset(0 0 0 0)}\n.mv-lbl{position:relative;z-index:1;display:inline-flex;flex-direction:column;justify-content:center;line-height:1.15}\n.mv-roll{display:block;height:1.2em;overflow:hidden;line-height:1.2} .mv-l1,.mv-l2{display:block;transition:translate .5s cubic-bezier(.7,0,.2,1)} .mv-btn:hover .mv-l1,.mv-btn:hover .mv-l2,.mv-btn:focus-visible .mv-l1,.mv-btn:focus-visible .mv-l2{translate:0 -100%}\n.mv-arr{position:relative;z-index:1;display:grid;place-items:center;width:38px;height:38px;flex:none;border-radius:6px;background:var(--chip);color:var(--chipfg);overflow:hidden;transition:background .4s,color .4s} .mv-arr>span{grid-area:1/1;display:grid;place-items:center;transition:transform .55s cubic-bezier(.7,0,.2,1)} .mv-arr svg{width:15px;height:15px} .mv-a2{transform:translate(-160%,160%)}\n.mv-btn:hover .mv-a1,.mv-btn:focus-visible .mv-a1{transform:translate(160%,-160%)} .mv-btn:hover .mv-a2,.mv-btn:focus-visible .mv-a2{transform:none} .mv-btn:hover .mv-arr,.mv-btn:focus-visible .mv-arr{background:var(--chip2);color:var(--chipfg2)}\n.mv-selb{position:absolute;z-index:2;inset:-5px;border-radius:13px;box-shadow:0 0 0 1.5px var(--mv-brass);pointer-events:none;opacity:0;scale:1.06;transition:opacity .25s,scale .45s cubic-bezier(.34,1.56,.64,1)}\n.mv-selb i{position:absolute;width:7px;height:7px;background:var(--mv-cloud);box-shadow:0 0 0 1.5px var(--mv-brass);translate:-50% -50%} .mv-selb i:nth-child(1){left:0;top:0} .mv-selb i:nth-child(2){left:100%;top:0} .mv-selb i:nth-child(3){left:0;top:100%} .mv-selb i:nth-child(4){left:100%;top:100%}\n.mv-btn:hover .mv-selb,.mv-btn:focus-visible .mv-selb{opacity:1;scale:1}\n.mv-dim{position:absolute;z-index:3;left:50%;top:calc(100% + 11px);translate:-50% -4px;padding:2px 6px;border-radius:4px;background:var(--mv-brass);color:var(--mv-ink);font:500 10px/1.4 var(--mv-font-m,'Chivo Mono'),ui-monospace,monospace;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .25s,translate .35s}\n.mv-btn:hover .mv-dim,.mv-btn:focus-visible .mv-dim{opacity:1;translate:-50% 0}\n.mv-btn:hover,.mv-btn:focus-visible{color:var(--fg2)}\n.mv-btn.mv-noarr .mv-face{padding-right:22px}\n.mv-btn.mv-solid{--face:var(--mv-brass);--rim:transparent;--fill:var(--mv-cloud);--fg:var(--mv-ink);--fg2:var(--mv-ink);--chip:var(--mv-ink);--chipfg:var(--mv-brass);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n.mv-btn.mv-ghost{--face:color-mix(in srgb,var(--mv-cloud) 8%,transparent);--rim:color-mix(in srgb,var(--mv-cloud) 26%,transparent);--fill:var(--mv-cloud);--fg:var(--mv-cloud);--fg2:var(--mv-ink);--chip:color-mix(in srgb,var(--mv-cloud) 14%,transparent);--chipfg:var(--mv-cloud);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n.mv-btn.mv-quiet{min-height:40px;font-size:13px;border-radius:8px;--face:var(--mv-brass);--rim:transparent;--fill:var(--mv-cloud);--fg:var(--mv-ink);--fg2:var(--mv-ink);--chip:var(--mv-ink);--chipfg:var(--mv-brass);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)} .mv-btn.mv-quiet .mv-arr{width:28px;height:28px;border-radius:5px} .mv-btn.mv-quiet .mv-face{padding-left:16px;gap:10px;padding-right:6px} .mv-btn.mv-quiet .mv-selb{inset:-4px;border-radius:11px}\n/* on paper grounds: solid = ink face (cyan fill), ghost = ink hairline */\n.mv:not(.mv-dark) .mv-btn.mv-solid,.mv-lt .mv-btn.mv-solid{--face:var(--mv-ink);--fill:var(--mv-brass);--fg:var(--mv-cloud);--fg2:var(--mv-ink);--chip:var(--mv-brass);--chipfg:var(--mv-ink);--chip2:var(--mv-ink);--chipfg2:var(--mv-brass)}\n.mv:not(.mv-dark) .mv-btn.mv-ghost,.mv-lt .mv-btn.mv-ghost{--face:transparent;--rim:color-mix(in srgb,var(--mv-ink) 28%,transparent);--fill:var(--mv-ink);--fg:var(--mv-ink);--fg2:var(--mv-cloud);--chip:color-mix(in srgb,var(--mv-ink) 7%,transparent);--chipfg:var(--mv-ink);--chip2:var(--mv-brass);--chipfg2:var(--mv-ink)}\n.mv:not(.mv-dark) .mv-selb i,.mv-lt .mv-selb i{background:var(--mv-cloud)}\n/* a DARK band nested inside a paper section (case next-project, service film band): dark button faces again. Higher specificity than the paper rule above, so the result no longer depends on which component's <style> tag comes last in the page */\n.mv:not(.mv-dark) .mv-dark:not(.mv-lt) .mv-btn.mv-solid{--face:var(--mv-brass);--rim:transparent;--fill:var(--mv-cloud);--fg:var(--mv-ink);--fg2:var(--mv-ink);--chip:var(--mv-ink);--chipfg:var(--mv-brass);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n.mv:not(.mv-dark) .mv-dark:not(.mv-lt) .mv-btn.mv-ghost{--face:color-mix(in srgb,var(--mv-cloud) 8%,transparent);--rim:color-mix(in srgb,var(--mv-cloud) 26%,transparent);--fill:var(--mv-cloud);--fg:var(--mv-cloud);--fg2:var(--mv-ink);--chip:color-mix(in srgb,var(--mv-cloud) 14%,transparent);--chipfg:var(--mv-cloud);--chip2:var(--mv-ink);--chipfg2:var(--mv-cloud)}\n@media (max-width:600px),(hover:none){.mv .mv-btn{white-space:normal;text-align:left;line-height:1.25;min-height:54px;max-width:100%} .mv .mv-btn.mv-quiet{min-height:40px;white-space:nowrap} .mv .mv-btn .mv-face{justify-content:space-between} .mv .mv-roll{height:auto} .mv .mv-l2{display:none} .mv .mv-btn .mv-l1{translate:none!important} .mv .mv-selb,.mv .mv-dim{display:none}}\n.mv-btn:hover{transform:translate(var(--mx,0px),var(--my,0px))} .mv-btn:active{transform:translate(var(--mx,0px),var(--my,0px)) scale(.97)!important;transition-duration:.12s}\n/* TEXT-SAFE accents: cyan is a SURFACE colour on paper (selections, fills, chips) — accent text on paper is ink; on graphite grounds the cyan itself reads */\n.mv{--mv-acc:var(--mv-ink);--mv-acc-lg:var(--mv-brass);--mv-hl:var(--mv-brass);--mv-mut:color-mix(in srgb,var(--mv-stone) 45%,var(--mv-ink));--mv-acc-d:var(--mv-brass)}\n.mv-lt,.mv .mv-lt{--mv-acc:var(--mv-ink);--mv-acc-lg:var(--mv-brass);--mv-hl:var(--mv-brass);--mv-mut:color-mix(in srgb,var(--mv-stone) 45%,var(--mv-ink))}\n.mv-dark,.mv.mv-dark{--mv-acc:var(--mv-brass);--mv-acc-lg:var(--mv-brass);--mv-hl:transparent;--mv-mut:color-mix(in srgb,var(--mv-stone) 40%,var(--mv-cloud))}\n.mv-port{width:7px;height:7px;flex:none;border-radius:50%;background:#3DDC84;box-shadow:0 0 0 0 rgba(61,220,132,.6);animation:mv-live 1.8s infinite} @keyframes mv-live{0%{box-shadow:0 0 0 0 rgba(61,220,132,.55)}100%{box-shadow:0 0 0 9px rgba(61,220,132,0)}}\n@media (prefers-reduced-motion:reduce){.mv *,.sth *{animation-duration:.01ms!important;transition-duration:.01ms!important}}`;const IcoArrow=({s=15})=>/*#__PURE__*/_jsx(\"svg\",{width:s,height:s,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{d:\"M5 12h14M13 5l7 7-7 7\"})});const Stars=({v=5,s=13})=>/*#__PURE__*/_jsx(\"span\",{className:\"mv-stars\",\"aria-hidden\":true,children:[0,1,2,3,4].map(i=>/*#__PURE__*/_jsx(\"svg\",{width:s,height:s,viewBox:\"0 0 24 24\",style:{opacity:i<Math.round(v)?1:.28},children:/*#__PURE__*/_jsx(\"path\",{fill:\"currentColor\",d:\"M12 2.6l2.9 6.1 6.7.9-4.9 4.6 1.2 6.6L12 17.6 6.1 20.8l1.2-6.6L2.4 9.6l6.7-.9z\"})},i))});// ===== JOSH BARNES motion layer (THE FLOW) (composed by mk.py after _common) =====\n// One shared rAF (onTick). Sections write --sp (0 = top edge enters the viewport bottom → 1 = bottom edge leaves the top) and,\n// for tall pinned wrappers, --pp (0 = wrapper top hits the viewport top → 1 = wrapper bottom hits the viewport bottom). IO-gated.\nconst SCRUB_K=.18;// Decode a section's photos while it is still a screen and a half away, so the first frame it is on screen never waits for a decode.\nfunction usePre(el){try{const io=new IntersectionObserver(es=>{if(!es[0].isIntersecting)return;io.disconnect();el.querySelectorAll(\"img\").forEach(im=>{try{im.loading=\"eager\";im.decode().catch(()=>{});}catch(e){}});},{rootMargin:\"150% 0px 150% 0px\"});io.observe(el);}catch(e){}}function focusTo(el,frac){if(!el||typeof window===\"undefined\")return;if(window.innerWidth<810)return;const r=el.getBoundingClientRect();const vh=window.innerHeight;if(r.height<=vh*1.05)return;const y=r.top+window.scrollY+(r.height-vh)*Math.min(1,Math.max(0,frac));if(Math.abs(window.scrollY-y)<8)return;const w=window;if(w.__ltLenis)w.__ltLenis.scrollTo(y,{immediate:true,force:true});else window.scrollTo(0,y);}function useScrollVars(ref,live,rm,cb){useEffect(()=>{if(!live||rm||!ref.current)return;const el=ref.current;let vis=true,last=-9,cs=-1,cp=-1,settled=false;usePre(el);const io=new IntersectionObserver(es=>{vis=es[0].isIntersecting;},{rootMargin:\"25% 0px 25% 0px\"});io.observe(el);// eased scrub: the values glide toward the true scroll position (K per frame), so wheel steps never jump a pinned scene\nlet rt=0,rh=0,vh=1,fresh=false;const read=()=>{if(!vis&&settled){fresh=false;return;}const r=el.getBoundingClientRect();rt=r.top;rh=r.height;vh=window.innerHeight||1;fresh=true;};const off=onTick(()=>{if(!fresh)return;const sp=clamp01((vh-rt)/(vh+rh));const pp=rh>vh*1.05?clamp01(-rt/(rh-vh)):sp;if(cs<0){cs=sp;cp=pp;}else{cs+=(sp-cs)*SCRUB_K;cp+=(pp-cp)*SCRUB_K;if(Math.abs(sp-cs)<5e-4)cs=sp;if(Math.abs(pp-cp)<5e-4)cp=pp;}settled=cs===sp&&cp===pp;if(Math.abs(cs+cp-last)<3e-4)return;last=cs+cp;el.style.setProperty(\"--sp\",cs.toFixed(4));el.style.setProperty(\"--pp\",cp.toFixed(4));if(cb)cb(cs,cp);},read);return()=>{off();io.disconnect();};},[live,rm]);}// STAGE — false while the loader or the page-transition cover is on screen (html.mv-hold-*), so first-screen intros play AFTER the cover lifts, never under it. 9 s safety.\nfunction useStage(live){const[r,setR]=useState(false);useEffect(()=>{if(!live)return;const h=document.documentElement;const ok=()=>!/(^|\\s)mv-hold/.test(h.className);if(ok()){setR(true);return;}const mo=new MutationObserver(()=>{if(ok()){mo.disconnect();setR(true);}});mo.observe(h,{attributes:true,attributeFilter:[\"class\"]});const t=window.setTimeout(()=>{mo.disconnect();setR(true);},9e3);return()=>{mo.disconnect();window.clearTimeout(t);};},[live]);return r;}// true once the element has entered the viewport (stays true) — and only once the stage is clear. Reduced motion = true at once.\nfunction useOn(ref,live,rm,amount=.16){const[on,setOn]=useState(false);const still=useStill();const ready=useStage(live);useEffect(()=>{if(!live)return;if(rm){setOn(true);return;}if(!ready)return;const el=ref.current;if(!el)return;let off=()=>{};// keyboard focus: mark the section FIRST and flush styles, so the reveal that follows runs with instant transitions (a transition keeps the timing it started with)\nconst fin=e=>{try{if(e.target.matches(\":focus-visible\")){el.setAttribute(\"data-kb\",\"\");void el.offsetWidth;}}catch(x){}setOn(true);};const fout=e=>{if(!el.contains(e.relatedTarget))el.removeAttribute(\"data-kb\");};el.addEventListener(\"focusin\",fin);el.addEventListener(\"focusout\",fout);const io=new IntersectionObserver(es=>{for(const e of es)if(e.isIntersecting){io.disconnect();// IO ignores occlusion: under a curtain (Reveal) wait until about a quarter of it is uncovered\noff=onTick(()=>{const rev=el.closest(\".mv-rev.is-act\");const rv=rev?parseFloat(rev.style.getPropertyValue(\"--rv\")||\"0\"):1;if(rv>.24){setOn(true);off();}});}},{threshold:Math.min(amount,Math.max(.005,window.innerHeight*.3/Math.max(1,el.offsetHeight))),rootMargin:\"0px 0px -6% 0px\"});io.observe(el);return()=>{io.disconnect();off();el.removeEventListener(\"focusin\",fin);el.removeEventListener(\"focusout\",fout);};},[live,rm,ready]);return on||still;}// CURTAIN REVEAL — the section is pinned BEHIND the one above it and is uncovered as that one lifts away (the footer movement, for any section).\n// Wrapper = section + a spacer of T, pulled up by T (page length unchanged); the section is sticky for exactly T of scroll. T = min(section height, 100svh):\n// a tall section pins at the top, a short one sits on the bottom edge of the viewport. The section ABOVE needs a higher Layer (z-index).\nfunction Reveal({on,layer=9,style,children}){const live=useLive();const rm=useReduced();const wrap=useRef(null);const inner=useRef(null);const sp=useRef(null);const[h,setH]=useState(0);const act=on&&live&&!rm&&h>0&&typeof window!==\"undefined\"&&window.innerWidth>=810;useEffect(()=>{if(!on||!live||rm||!inner.current)return;const el=inner.current;const m=()=>setH(el.offsetHeight);m();const ro=new ResizeObserver(m);ro.observe(el);return()=>ro.disconnect();},[on,live,rm]);useEffect(()=>{if(!act||!wrap.current)return;const el=wrap.current;let vis=true,last=-1;const io=new IntersectionObserver(es=>{vis=es[0].isIntersecting;},{rootMargin:\"30% 0px 30% 0px\"});io.observe(el);let cur=-1,T=0,vh=1,top=0,fresh=false;const read=()=>{if(!vis){fresh=false;return;}T=sp.current?sp.current.offsetHeight:0;vh=window.innerHeight;top=el.getBoundingClientRect().top;fresh=true;};const off=onTick(()=>{if(!fresh||!T)return;const rv=clamp01((vh-T-top)/T);if(cur<0)cur=rv;else{cur+=(rv-cur)*SCRUB_K;if(Math.abs(rv-cur)<5e-4)cur=rv;}if(Math.abs(cur-last)<4e-4)return;last=cur;el.style.setProperty(\"--rv\",cur.toFixed(4));},read);return()=>{off();io.disconnect();};},[act]);return /*#__PURE__*/_jsxs(\"div\",{ref:wrap,className:`mv-rev${act?\" is-act\":\"\"}`,style:{...style||{},[\"--h\"]:`${h}px`,[\"--layer\"]:layer},onFocusCapture:e=>{if(!act||!wrap.current)return;const t=e.target;const w=window;const r=wrap.current.getBoundingClientRect();const T=sp.current?sp.current.offsetHeight:0;const y=Math.max(0,Math.min(document.documentElement.scrollHeight-window.innerHeight,r.top+window.scrollY-window.innerHeight+2*T));if(Math.abs(window.scrollY-y)>4){if(w.__ltLenis)w.__ltLenis.scrollTo(y,{immediate:true,force:true});else window.scrollTo(0,y);}requestAnimationFrame(()=>{try{t.scrollIntoView({block:\"nearest\"});}catch(x){}});},children:[/*#__PURE__*/_jsx(\"div\",{ref:inner,className:\"mv-rev-in\",children:children}),/*#__PURE__*/_jsx(\"div\",{ref:sp,className:\"mv-rev-sp\",\"aria-hidden\":true})]});}const REVEAL_CONTROLS={reveal:{type:ControlType.Boolean,title:\"Reveal\",description:\"Curtain: this section waits behind the one above and is uncovered as that one lifts away\",enabledTitle:\"Curtain\",disabledTitle:\"Off\",defaultValue:true},layer:{type:ControlType.Number,title:\"Layer\",description:\"Stacking order. Must be LOWER than the section above (sections default to 10)\",min:0,max:20,step:1,displayStepper:true,defaultValue:9,hidden:p=>p.reveal===false}};const splitWords=s=>String(s||\"\").replace(/\\*([^*]+)\\*/g,(_m,g)=>g.trim().split(/\\s+/).map(w=>{const m=w.match(/^(.*?)([.,!?;:’']*)$/);return m&&m[1]?`*${m[1]}*${m[2]}`:w;}).join(\" \")).split(/\\s+/).filter(Boolean).map(t=>{const m=t.match(/^\\*(.+?)\\*([.,!?;:’']*)$/);return m?{t:m[1],tail:m[2],acc:true}:{t:t.replace(/\\*/g,\"\"),tail:\"\",acc:false};});const plainOf=s=>String(s||\"\").replace(/\\*/g,\"\").replace(/\\s*\\|\\s*/g,\" \").replace(/\\s+/g,\" \").trim();// Heading whose words rise out of masks. \"|\" forces a line break, *word* = the accent: light-weight coral (deep coral mix on paper).\nconst Head=({text,on,D,tag=\"h2\",size=\"clamp(40px,4.8vw,72px)\",lh=.92,delay=0,step=55,style,className})=>{const Tag=tag;let k=0;return /*#__PURE__*/_jsx(Tag,{className:`mv-hd${on?\" is-on\":\"\"}${className?\" \"+className:\"\"}`,\"aria-label\":plainOf(text),style:{...D,fontSize:size,lineHeight:lh,...style||{}},children:String(text).split(\"|\").map((line,li)=>/*#__PURE__*/_jsx(\"span\",{className:\"mv-hd-l\",\"aria-hidden\":true,children:splitWords(line).map((w,i)=>{const d=delay+k++*step;return /*#__PURE__*/_jsxs(\"span\",{className:`mv-hd-w${w.acc?\" is-accw\":\"\"}`,children:[/*#__PURE__*/_jsx(\"span\",{className:`mv-hd-i${w.acc?\" is-acc\":\"\"}`,style:{transitionDelay:`${d}ms`,[\"--pd\"]:`${d+500}ms`},children:w.acc?/*#__PURE__*/_jsxs(\"span\",{className:\"mv-it\",children:[w.t,w.tail,/*#__PURE__*/_jsx(\"svg\",{className:\"mv-spark\",viewBox:\"0 0 24 24\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{d:\"M12 1.5C12.9 8 16 11.1 22.5 12 16 12.9 12.9 16 12 22.5 11.1 16 8 12.9 1.5 12 8 11.1 11.1 8 12 1.5Z\"})})]}):/*#__PURE__*/_jsxs(_Fragment,{children:[w.t,w.tail]})}),\" \"]},i);})},li))});};const Eyebrow=({text,on,M,delay=0,style})=>text?/*#__PURE__*/_jsxs(\"p\",{className:`mv-eb${on?\" is-on\":\"\"}`,style:{...M,transitionDelay:`${delay}ms`,...style||{}},children:[/*#__PURE__*/_jsx(\"i\",{\"aria-hidden\":true}),text]}):null;// one-shot rise for copy / rows\nconst rise=(on,d=0,y=22)=>({opacity:on?1:0,translate:on?\"0 0\":`0 ${y}px`,transition:`opacity .9s ease ${d}ms, translate 1s cubic-bezier(.2,.8,.2,1) ${d}ms`});// Image that UNMASKS through a shape as it enters, settles from a zoom, then drifts with scroll (needs --sp on an ancestor).\nconst SHAPES={up:[\"inset(100% 0 0 0)\",\"inset(0 0 0 0)\"],down:[\"inset(0 0 100% 0)\",\"inset(0 0 0 0)\"],left:[\"inset(0 100% 0 0)\",\"inset(0 0 0 0)\"],right:[\"inset(0 0 0 100%)\",\"inset(0 0 0 0)\"],diag:[\"polygon(0 100%,0 100%,0 100%,0 100%)\",\"polygon(0 -160%,260% 100%,0 100%,0 100%)\"],iris:[\"circle(0% at 50% 55%)\",\"circle(85% at 50% 55%)\"],arch:[\"inset(100% 0 0 0 round 999px 999px 0 0)\",\"inset(0 0 0 0 round 999px 999px 0 0)\"],slit:[\"inset(0 50% 0 50%)\",\"inset(0 0 0 0)\"]};const Um=({src,alt=\"\",on,shape=\"up\",ratio=\"4/5\",delay=0,par=1,focus=\"50% 40%\",radius=4,sizes=\"(max-width: 809px) 100vw, 50vw\",style,className,eager=false})=>{const sh=SHAPES[shape]||SHAPES.up;const im=RS(src,sizes);return /*#__PURE__*/_jsx(\"div\",{className:`mv-um${on?\" is-on\":\"\"}${className?\" \"+className:\"\"}`,style:{aspectRatio:ratio,borderRadius:radius,clipPath:on?sh[1]:sh[0],WebkitClipPath:on?sh[1]:sh[0],transitionDelay:`${delay}ms`,[\"--par\"]:par,...style||{}},children:/*#__PURE__*/_jsx(\"img\",{src:im.src,srcSet:im.srcSet,sizes:im.sizes,alt:alt,loading:eager?\"eager\":\"lazy\",decoding:\"async\",draggable:false,style:{objectPosition:focus,transitionDelay:`${delay}ms`}})});};const CSS_MOTION=`\n[data-kb] *,[data-kb] *::before,[data-kb] *::after{transition:none!important}\n.mv-sec{position:relative;z-index:10;display:block;width:100%;--sp:.5;--pp:0}\n.mv-rev{position:relative;width:100%;--rv:1} .mv-rev-in{position:relative} .mv-rev-sp{height:0}\n.mv-rev.is-act{--rv:0;--t:min(var(--h),100vh);--t:min(var(--h),100svh);z-index:var(--layer,9);margin-top:calc(var(--t)*-1)}\n.mv-rev.is-act>.mv-rev-in{position:sticky;top:calc(100vh - var(--t));top:calc(100svh - var(--t))} .mv-rev.is-act>.mv-rev-sp{height:var(--t)}\n/* the lifting edge throws a shadow on the section beneath, and that section comes out of the dark as it is uncovered */\n.mv-rev.is-act>.mv-rev-in::before{content:\"\";position:absolute;z-index:40;left:0;right:0;top:0;height:120px;translate:0 calc((1 - var(--rv))*var(--t));background:linear-gradient(180deg,rgba(0,0,0,.2),rgba(0,0,0,0));opacity:min(1,calc(var(--rv)*(1 - var(--rv))*9));pointer-events:none}\n.mv-rev.is-act>.mv-rev-in::after{content:\"\";position:absolute;z-index:39;left:0;right:0;top:0;height:var(--t);background:#000;opacity:calc((1 - var(--rv))*.16);pointer-events:none}\n.mv-wrap{--pad:56px;width:100%;max-width:calc(${MAXW} + var(--pad)*2);margin:0 auto;padding-left:var(--pad);padding-right:var(--pad)}\n.mv-eb{display:inline-flex;align-items:center;gap:9px;width:max-content;max-width:100%;margin:0;padding:7px 13px 7px 11px;border-radius:6px;background:color-mix(in srgb,var(--mv-ink) 6%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mv-ink) 12%,transparent);color:var(--mv-ink);font-size:11.5px;font-weight:500;letter-spacing:.06em;opacity:0;translate:0 10px;transition:opacity .8s ease,translate .9s cubic-bezier(.2,.8,.2,1)} .mv-eb.is-on{opacity:1;translate:0 0}\n.mv-eb i{display:block;flex:none;order:-1;width:7px;height:7px;border-radius:50%;background:var(--mv-brass)}\n.mv-dark .mv-eb{color:var(--mv-cloud);background:color-mix(in srgb,var(--mv-cloud) 9%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mv-cloud) 18%,transparent)}\n.mv-hd{margin:0;letter-spacing:-.042em;text-wrap:balance;font-weight:var(--mv-font-dw,600)} .mv-hd-l{display:block}\n.mv-hd-w{display:inline-block;overflow:hidden;vertical-align:top;padding:0 .04em .12em;margin:0 -.04em -.12em;white-space:pre}\n.mv-hd-i{position:relative;display:inline-block;translate:0 108%;transition:translate 1.05s cubic-bezier(.2,.85,.15,1)}\n.mv-hd.is-on .mv-hd-i{translate:0 0}\n.mv-hd-w.is-accw{overflow:hidden}\n.mv-it{position:relative;color:var(--mv-acc);font-weight:inherit} .mv-dark .mv-it{color:var(--mv-brass)}\n.mv-spark{display:none}\n\n.mv-um{position:relative;overflow:hidden;transition:clip-path 1.35s cubic-bezier(.7,0,.2,1);background:color-mix(in srgb,var(--mv-stone) 22%,transparent)}\n.mv-um img{position:absolute;left:0;top:-9%;width:100%;height:118%;display:block;object-fit:cover;scale:1.28;translate:0 calc((var(--sp,.5) - .5)*var(--par,1)*-7%);transition:scale 1.9s cubic-bezier(.16,.84,.24,1);user-select:none}\n.mv-um.is-on img{scale:1}\n/* diagonal cuts: the section hangs over its neighbour and is cut on a slope (clip-path, so the neighbour shows through) */\n.mv-cut-t{margin-top:calc(var(--cut,7vw)*-1);clip-path:polygon(0 var(--cut,7vw),100% 0,100% 100%,0 100%);padding-top:var(--cut,7vw)}\n.mv-cut-b{margin-bottom:calc(var(--cut,7vw)*-1);padding-bottom:var(--cut,7vw)}\n.mv-cut-t.mv-cut-b{clip-path:polygon(0 var(--cut,7vw),100% 0,100% calc(100% - var(--cut,7vw)),0 100%)}\n.mv-cut-b:not(.mv-cut-t){clip-path:polygon(0 0,100% 0,100% calc(100% - var(--cut,7vw)),0 100%)}\n@media (max-width:1099px){.mv-wrap{--pad:32px}}\n@media (max-width:699px){.mv-wrap{--pad:20px}}\n@media (prefers-reduced-motion:reduce){.mv-hd-i{translate:0 0!important} .mv-spark{scale:1!important;rotate:0deg!important;animation:none!important} .mv-um{clip-path:none!important} .mv-um img{scale:1!important;translate:0 0!important}}\n`;const SEED={site:[{\"slug\":\"site\",\"f1\":\"Josh Barnes\",\"f2\":\"Product designer & developer\",\"f3\":\"I design digital products and build them in code, from the first sketch to the shipped release.\",\"f4\":\"hello@maravoss.design\",\"f5\":\"Berlin\",\"f6\":\"Europe/Berlin\",\"f7\":\"Available for work \\xb7 Nov 2026\",\"f8\":\"/resume\",\"f9\":\"Dribbble:https://dribbble.com,GitHub:https://github.com,LinkedIn:https://linkedin.com,Read.cv:https://read.cv\",\"f10\":\"9\",\"f11\":\"/contact\",\"n1\":\"1\"}]};const SW_BUILD=\"MvKit@cms1\";// An override control wins only when it holds real text; empty (or a single space) inherits from the CMS.\nconst pick=(o,fb)=>o!==undefined&&o!==null&&String(o).trim()?String(o).trim():fb;const imgOf=(r,k=\"img\")=>String(r&&r[k]||\"\").split(\"?\")[0];// A cleared CMS image draws this quiet placeholder — never a stock photo, and list positions stay aligned with their rows.\nconst EMPTY_IMG=\"data:image/svg+xml;utf8,\"+encodeURIComponent(\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 500' preserveAspectRatio='xMidYMid slice'><rect width='400' height='500' fill='#D3D8E2'/><rect x='120' y='170' width='160' height='160' rx='8' fill='none' stroke='#AEB6C6' stroke-width='1.5'/><rect x='100' y='150' width='200' height='200' rx='10' fill='none' stroke='#C3CAD8' stroke-width='1' stroke-dasharray='2 6'/></svg>\");const imgOr=(r,k=\"img\")=>imgOf(r,k)||EMPTY_IMG;const cmsNum=(r,k,fb=0)=>{const v=parseFloat(String((r&&r[k])??\"\"));return isFinite(v)?v:fb;};const useIso=typeof window===\"undefined\"?useEffect:useLayoutEffect;function readCMS(kind){if(typeof document===\"undefined\")return null;if(!document.querySelector('[data-mv-row=\"bridge\"]'))return null;const seen=new Set;const out=[];document.querySelectorAll(`[data-mv-row=\"${kind}\"]`).forEach(el=>{const o={};for(const a of Array.from(el.attributes))if(a.name.startsWith(\"data-\"))o[a.name.slice(5)]=a.value;const key=o.slug||JSON.stringify(o);if(seen.has(key))return;seen.add(key);out.push(o);});return out.sort((a,b)=>(parseFloat(a.n1)||0)-(parseFloat(b.n1)||0));}function useCMS(kind,fallback){const[rows,setRows]=useState(fallback);const sig=useRef(\"\");useIso(()=>{let n=0,t=0,ok=0;try{const w=window;if(!w.__ltCms||typeof w.__ltCms!==\"object\")w.__ltCms={};w.__ltCms[SW_BUILD]=1;}catch(e){}const pull=()=>{const r=readCMS(kind);if(!r)return false;const s=JSON.stringify(r);if(s!==sig.current){sig.current=s;setRows(r);}return true;};const mo=new MutationObserver(()=>{if(pull()){ok++;if(ok>2)mo.disconnect();}});mo.observe(document.body,{childList:true,subtree:true});if(pull())ok++;const poll=()=>{if(n++<30){pull();t=window.setTimeout(poll,150);}};t=window.setTimeout(poll,150);return()=>{mo.disconnect();window.clearTimeout(t);};},[kind]);return rows;}// The one-row Site collection holds every site-wide fact (name, role, contact, availability, resume link). A section's \"… Override\" control only replaces it on that one section.\nfunction useSite(){const r=useCMS(\"site\",SEED.site||[]);const s=r[0]||(SEED.site||[])[0]||{};const g=k=>String(s[k]??\"\").trim();return{name:g(\"f1\")||\"Josh Barnes\",role:g(\"f2\"),tagline:g(\"f3\"),email:g(\"f4\"),city:g(\"f5\"),tz:g(\"f6\")||\"Europe/Berlin\",avail:g(\"f7\"),resume:g(\"f8\")||\"/resume\",socials:g(\"f9\"),years:g(\"f10\"),book:g(\"f11\")||\"/contact\"};}const linkList=s=>String(s||\"\").split(\",\").map(x=>x.trim()).filter(Boolean).map(x=>{const i=x.indexOf(\":\");return{l:i<0?x:x.slice(0,i).trim(),h:i<0?\"/\":x.slice(i+1).trim()};});const listOf=s=>String(s||\"\").split(\";\").map(x=>x.trim()).filter(Boolean);// The row a CMS detail page is about: the bound Slug control wins (server render included), else the last URL segment, else the first row.\nfunction useRow(kind,fallback,slug){const rows=useCMS(kind,fallback);const[path,setPath]=useState(\"\");useEffect(()=>{try{setPath(decodeURIComponent(window.location.pathname.split(\"/\").filter(Boolean).pop()||\"\"));}catch(e){}},[]);const want=String(slug||\"\").trim()||path;const row=rows.find(r=>r.slug===want)||rows[0]||{};return{row,rows};}const crumbs=s=>linkList(s);// Open now? Open Hours = \"1-6 07:00-19:00\" (weekday numbers, Mon = 1 … Sun = 7) evaluated in the Site Time Zone.\nfunction openState(spec,tz){try{const m=String(spec||\"\").match(/(\\d)\\s*-\\s*(\\d)\\s+(\\d{1,2}):(\\d{2})\\s*-\\s*(\\d{1,2}):(\\d{2})/);if(!m)return null;const parts=new Intl.DateTimeFormat(\"en-US\",{timeZone:tz||\"UTC\",weekday:\"short\",hour:\"2-digit\",minute:\"2-digit\",hour12:false}).formatToParts(new Date);const g=t=>(parts.find(p=>p.type===t)||{value:\"\"}).value;const wd=[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"].indexOf(g(\"weekday\"))+1;const mins=Number(g(\"hour\"))%24*60+Number(g(\"minute\"));const d1=Number(m[1]),d2=Number(m[2]),a=Number(m[3])*60+Number(m[4]),b=Number(m[5])*60+Number(m[6]);const open=wd>=d1&&wd<=d2&&mins>=a&&mins<b;return{open,label:open?`Open \\xb7 till ${m[5].padStart(2,\"0\")}:${m[6]}`:`Closed \\xb7 opens ${m[3].padStart(2,\"0\")}:${m[4]}`};}catch(e){return null;}}const ktPad=n=>String(n).padStart(2,\"0\");const ktTools=(s,rk)=>{const R=listOf(rk).map(x=>x.toLowerCase());return listOf(s).map(x=>{const[a,b]=x.split(\"|\").map(y=>(y||\"\").trim());return{name:a||\"\",kind:b||\"\",right:R.includes((b||\"\").toLowerCase())};}).filter(t=>t.name).slice(0,16);};const KtFace=({t,idx,M,D})=>/*#__PURE__*/_jsxs(\"span\",{className:`mvkt-ti ${t.right?\"is-code\":\"is-design\"}`,children:[/*#__PURE__*/_jsx(\"svg\",{className:\"mvkt-str\",viewBox:\"0 0 60 40\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{d:\"M31 21c-8-2-13-9-17-14C10 2 5 1 1 3\"})}),/*#__PURE__*/_jsxs(\"span\",{className:\"mvkt-face\",children:[/*#__PURE__*/_jsx(\"i\",{className:\"mvkt-hole\",\"aria-hidden\":true}),/*#__PURE__*/_jsx(\"span\",{className:\"mvkt-lb\",style:D,children:t.name}),/*#__PURE__*/_jsxs(\"span\",{className:\"mvkt-cat\",style:M,children:[t.kind,\" \\xb7 \",ktPad(idx+1)]})]})]});export default function MvKit(props){const{eyebrow=\"FRAME 05 — Tools\",title=\"Design *and* code,|same hands.\",intro=\"The kit I bring to every project. Half of it draws, half of it ships — and I use all of it myself.\",tools=\"Figma|Design;Framer|Design;Rive|Motion;Protopie|Prototyping;Blender|3D;React|Code;TypeScript|Code;Next.js|Code;Tailwind|Code;Storybook|Code;Git|Code;Notion|Ops\",leftTitle=\"Design\",rightTitle=\"Code\",rightKinds=\"Code\",tableLabel=\"Kit check \\xb7 load-in\",hint=\"Drag a tag to throw it\",sortAt=.55,bpHint=\"auto\"}=props;const c=colorsOf(props);const{D,B,M}=fontsOf(props);useFonts();const live=useLive();const rm=useReduced();const still=useStill();const root=useRef(null);const table=useRef(null);const tagEls=useRef([]);const{w}=useSize(root,bpHint);const phone=w<810,tab=w>=810&&w<1100;const on=useOn(root,live,rm);const TL=ktTools(tools,rightKinds);const L=TL.filter(t=>!t.right),Rr=TL.filter(t=>t.right);const sim=live&&!rm&&!still&&!phone&&TL.length>0;const spRef=useRef(.5);useScrollVars(root,sim,rm,sp=>{spRef.current=sp;});const[sorted,setSorted]=useState(false);const[geo,setGeo]=useState(null);const[fine,setFine]=useState(false);const TW=tab?164:188,TH=tab?52:58,GAP=12;const sig=TL.map(t=>t.name+t.right).join(\",\");useEffect(()=>{if(!sim||!table.current)return;const tb=table.current;const N=TL.length;const r=TH/2,half=(TW-TH)/2;const isFine=window.matchMedia(\"(hover:hover) and (pointer:fine)\").matches;setFine(isFine);// ---- geometry: two columns, each with as many sub-columns as fit ----\nlet W=tb.clientWidth,H=0;let slots=[];const layout=()=>{W=tb.clientWidth;const pad=28,mid=36;const cw=(W-pad*2-mid)/2;const per=Math.max(1,Math.min(3,Math.floor((cw+GAP)/(TW+GAP))));const y0=92;const rowsL=Math.ceil(L.length/per),rowsR=Math.ceil(Rr.length/per);const rows=Math.max(rowsL,rowsR,1);H=Math.max(tab?400:430,y0+rows*(TH+GAP)+40);const cx=[pad,pad+cw+mid];let li=0,ri=0;slots=TL.map(t=>{const k=t.right?ri++:li++;const col=t.right?1:0;return{x:cx[col]+k%per*(TW+GAP)+TW/2,y:y0+Math.floor(k/per)*(TH+GAP)+TH/2};});setGeo({H,hx:cx,hy:30});};layout();const rnd=(a,b)=>a+Math.random()*(b-a);const place=(cx,cy,a)=>[-1,0,1].map(s=>{const x=cx+Math.cos(a)*half*s,y=cy+Math.sin(a)*half*s;return{x,y,ox:x,oy:y};});const bodies=TL.map((_,i)=>({p:place(rnd(.12,.88)*W,-TH-30,rnd(-.7,.7)),live:false,spawn:i*95+rnd(0,60),pose:{x:0,y:-200,a:0},tw:null}));let mode=\"wait\",t0=0,calm=0,drag=-1,dx=0,dy=0,px=0,py=0,vis=true,lastSorted=false;const io=new IntersectionObserver(es=>{const e=es[0];vis=e.isIntersecting;if(e.isIntersecting&&e.intersectionRatio>.22&&mode===\"wait\"){mode=\"pile\";t0=performance.now();}},{threshold:[0,.25,.5]});io.observe(tb);const ro=new ResizeObserver(()=>{if(Math.abs(tb.clientWidth-W)>2){layout();for(const b of bodies)for(const q of b.p){q.x=Math.min(W-r,q.x);q.ox=q.x;}}});ro.observe(tb);const G=.16,SUB=2;const step=()=>{const fl=H-16;for(let s=0;s<SUB;s++){for(const b of bodies){if(!b.live)continue;for(const q of b.p){const vx=(q.x-q.ox)*.994,vy=(q.y-q.oy)*.994;q.ox=q.x;q.oy=q.y;q.x+=vx;q.y+=vy+G;}}for(let it=0;it<5;it++){for(const b of bodies){if(!b.live)continue;const P=b.p;const st=(a,c2,len)=>{const ddx=c2.x-a.x,ddy=c2.y-a.y;const d=Math.hypot(ddx,ddy)||.001;const k=(d-len)/d*.5;a.x+=ddx*k;a.y+=ddy*k;c2.x-=ddx*k;c2.y-=ddy*k;};st(P[0],P[1],half);st(P[1],P[2],half);st(P[0],P[2],half*2);}for(let i=0;i<N;i++){const A=bodies[i];if(!A.live)continue;for(let j=i+1;j<N;j++){const Bb=bodies[j];if(!Bb.live)continue;if(Math.abs(A.p[1].x-Bb.p[1].x)>TW+4||Math.abs(A.p[1].y-Bb.p[1].y)>TW+4)continue;for(const a of A.p)for(const b2 of Bb.p){const ddx=b2.x-a.x,ddy=b2.y-a.y;const d2=ddx*ddx+ddy*ddy;if(d2<4*r*r&&d2>1e-4){const d=Math.sqrt(d2);const k=(2*r-d)/d*.5;const wa=i===drag?0:1,wb=j===drag?0:1;const sw=wa+wb||1;a.x-=ddx*k*2*wa/sw;a.y-=ddy*k*2*wa/sw;b2.x+=ddx*k*2*wb/sw;b2.y+=ddy*k*2*wb/sw;}}}}for(const b of bodies){if(!b.live)continue;for(const q of b.p){if(q.y>fl-r){q.y=fl-r;q.ox=q.x-(q.x-q.ox)*.7;}if(q.x<r){q.x=r;q.ox=q.x+(q.x-q.ox)*-.4;}if(q.x>W-r){q.x=W-r;q.ox=q.x+(q.x-q.ox)*-.4;}}}}}};const down=e=>{const el=e.target.closest?.(\".mvkt-tag\");if(!el||!isFine)return;const i=Number(el.dataset.i);if(!(i>=0))return;const a=tb.getBoundingClientRect();px=e.clientX-a.left;py=e.clientY-a.top;const bo=bodies[i];const cx=mode===\"sorted\"?bo.pose.x:bo.p[1].x,cy=mode===\"sorted\"?bo.pose.y:bo.p[1].y;dx=px-cx;dy=py-cy;drag=i;bo.live=bo.live||mode!==\"wait\";calm=0;el.setPointerCapture?.(e.pointerId);tb.classList.add(\"is-drag\");e.preventDefault();};const move=e=>{if(drag<0)return;const a=tb.getBoundingClientRect();px=e.clientX-a.left;py=e.clientY-a.top;};const up=()=>{if(drag<0)return;const bo=bodies[drag];if(mode===\"sorted\")bo.tw={t0:performance.now(),fx:bo.pose.x,fy:bo.pose.y,fa:bo.pose.a};drag=-1;calm=0;tb.classList.remove(\"is-drag\");};tb.addEventListener(\"pointerdown\",down);window.addEventListener(\"pointermove\",move);window.addEventListener(\"pointerup\",up);window.addEventListener(\"pointercancel\",up);const norm=a=>{let x=a%(Math.PI*2);if(x>Math.PI)x-=Math.PI*2;if(x<-Math.PI)x+=Math.PI*2;return x;};const off=onTick(now=>{if(!vis)return;const sp=spRef.current;// sort / unsort with a little hysteresis\nif(mode!==\"sorted\"&&sp>sortAt&&(mode===\"pile\"||mode===\"wait\")){if(mode===\"wait\"){for(const b of bodies){b.p=place(rnd(.1,.9)*W,H-60,rnd(-.3,.3));}}mode=\"sorted\";let k=0;for(const b of bodies){const cx=b.live?b.p[1].x:b.p[1].x,cy=b.live?b.p[1].y:-TH*2;const a=b.live?norm(Math.atan2(b.p[2].y-b.p[0].y,b.p[2].x-b.p[0].x)):0;b.pose={x:cx,y:cy,a};b.tw={t0:now+k++*45,fx:cx,fy:cy,fa:a};b.live=true;}}else if(mode===\"sorted\"&&sp<sortAt-.08){mode=\"pile\";calm=0;for(const b of bodies){b.p=place(b.pose.x,b.pose.y,b.pose.a);b.tw=null;}}if(mode===\"sorted\"!==lastSorted){lastSorted=mode===\"sorted\";setSorted(lastSorted);}if(mode===\"pile\"){const t=now-t0;for(const b of bodies)if(!b.live&&t>b.spawn){b.live=true;for(const q of b.p){q.ox=q.x-rnd(-1.5,1.5);q.oy=q.y-2;}}if(drag>=0){const b=bodies[drag];const tx=px-dx,ty=py-dy;const mx=tx-b.p[1].x,my=ty-b.p[1].y;for(const q of b.p){q.ox=q.x;q.oy=q.y;q.x+=mx*.5;q.y+=my*.5;}}let mv=0;for(const b of bodies)if(b.live)mv+=Math.abs(b.p[1].x-b.p[1].ox)+Math.abs(b.p[1].y-b.p[1].oy);const allIn=bodies.every(b=>b.live);calm=mv<.02*N&&allIn&&drag<0?calm+1:0;if(calm<40)step();for(const b of bodies){if(!b.live){b.pose={x:b.p[1].x,y:-TH*2,a:0};continue;}b.pose={x:b.p[1].x,y:b.p[1].y,a:Math.atan2(b.p[2].y-b.p[0].y,b.p[2].x-b.p[0].x)};}}else if(mode===\"sorted\"){bodies.forEach((b,i)=>{const sl=slots[i];if(!sl)return;if(i===drag){b.pose={x:px-dx,y:py-dy,a:b.pose.a*.85};return;}if(b.tw){const k=easeIO(clamp01((now-b.tw.t0)/820));b.pose={x:b.tw.fx+(sl.x-b.tw.fx)*k,y:b.tw.fy+(sl.y-b.tw.fy)*k-Math.sin(k*Math.PI)*40,a:b.tw.fa*(1-k)};if(k>=1)b.tw=null;}else b.pose={x:sl.x,y:sl.y,a:0};});}for(let i=0;i<N;i++){const el=tagEls.current[i];if(!el)continue;const p=bodies[i].pose;const tr=`translate3d(${(p.x-TW/2).toFixed(1)}px,${(p.y-TH/2).toFixed(1)}px,0) rotate(${p.a.toFixed(4)}rad)`;if(el.__tr!==tr){el.__tr=tr;el.style.transform=tr;}}});return()=>{off();io.disconnect();ro.disconnect();tb.removeEventListener(\"pointerdown\",down);window.removeEventListener(\"pointermove\",move);window.removeEventListener(\"pointerup\",up);window.removeEventListener(\"pointercancel\",up);};},[sim,sig,TW,TH,sortAt]);const col=(t,arr,off0)=>/*#__PURE__*/_jsxs(\"div\",{className:\"mvkt-col\",children:[/*#__PURE__*/_jsxs(\"h3\",{className:\"mvkt-ch\",style:D,children:[t,/*#__PURE__*/_jsx(\"span\",{style:M,children:ktPad(arr.length)})]}),/*#__PURE__*/_jsx(\"ul\",{className:\"mvkt-list\",children:arr.map((x,i)=>/*#__PURE__*/_jsx(\"li\",{className:\"mvkt-stag\",children:/*#__PURE__*/_jsx(KtFace,{t:x,idx:TL.indexOf(x),M:M,D:D})},i))})]});return /*#__PURE__*/_jsxs(\"section\",{ref:root,className:`mv mv-sec mvkt${phone?\" is-ph\":tab?\" is-tab\":\"\"}${on?\" is-in\":\"\"}${sim?\" is-sim\":\"\"}${sorted?\" is-sorted\":\"\"}`,style:{...cssVars(c),...B,[\"--tw\"]:`${TW}px`,[\"--th\"]:`${TH}px`,...props.style||{}},children:[/*#__PURE__*/_jsx(\"link\",{rel:\"stylesheet\",href:FONTS}),/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:CSS_BASE+CSS_MOTION+CSS_KT+siteFontCss(props)}}),/*#__PURE__*/_jsxs(\"div\",{className:\"mv-wrap\",children:[/*#__PURE__*/_jsxs(\"header\",{className:\"mvkt-top\",children:[/*#__PURE__*/_jsxs(\"div\",{className:\"mvkt-tl\",children:[/*#__PURE__*/_jsx(Eyebrow,{text:eyebrow,on:on,M:M}),/*#__PURE__*/_jsx(Head,{text:title,on:on,D:D,size:\"clamp(40px,4.3vw,64px)\",lh:.95,delay:120,style:{fontStretch:\"115%\",fontWeight:760}})]}),intro&&/*#__PURE__*/_jsx(\"p\",{className:\"mvkt-intro\",style:rise(on,360,14),children:intro})]}),TL.length>0&&(sim?/*#__PURE__*/_jsxs(\"div\",{ref:table,className:\"mvkt-table\",style:{height:geo?geo.H:480},children:[geo&&[leftTitle,rightTitle].map((t,k)=>/*#__PURE__*/_jsxs(\"h3\",{className:\"mvkt-ch mvkt-hh\",style:{...D,left:geo.hx[k],top:geo.hy},children:[t,/*#__PURE__*/_jsx(\"span\",{style:M,children:ktPad(k?Rr.length:L.length)})]},k)),/*#__PURE__*/_jsx(\"i\",{className:\"mvkt-div\",\"aria-hidden\":true}),/*#__PURE__*/_jsx(\"ul\",{className:\"mvkt-pile\",\"aria-label\":`${leftTitle}, ${rightTitle}`,children:TL.map((t,i)=>/*#__PURE__*/_jsx(\"li\",{ref:el=>{tagEls.current[i]=el;},\"data-i\":i,className:\"mvkt-tag\",style:{transform:\"translate3d(0,-200px,0)\"},children:/*#__PURE__*/_jsx(KtFace,{t:t,idx:i,M:M,D:D})},t.name+i))}),/*#__PURE__*/_jsxs(\"p\",{className:\"mvkt-lab\",style:M,children:[/*#__PURE__*/_jsxs(\"span\",{children:[tableLabel,\" \\xb7 \",ktPad(TL.length)]}),fine&&hint&&/*#__PURE__*/_jsx(\"span\",{className:\"mvkt-hint\",children:hint})]})]}):/*#__PURE__*/_jsxs(\"div\",{className:\"mvkt-cols\",children:[col(leftTitle,L,0),col(rightTitle,Rr,L.length)]}))]})]});}const CSS_KT=`\n.mvkt{background:var(--mv-bone);color:var(--mv-ink);padding:clamp(96px,10vw,160px) 0}\n.mvkt .mv-hd{font-stretch:115%} .mvkt .mv-it{display:inline-block;font-weight:inherit;color:var(--mv-ink);line-height:1.02;padding:0 .07em;background:linear-gradient(var(--mv-brass),var(--mv-brass)) no-repeat 0 0/0% 100%;transition:background-size .72s steps(8) var(--pd,600ms)} .mvkt .mv-hd.is-on .mv-it{background-size:100% 100%}\n.mvkt-top{display:flex;align-items:flex-end;justify-content:space-between;gap:40px;margin-bottom:clamp(40px,5vw,72px)} .mvkt-tl{display:grid;gap:22px}\n.mvkt-intro{max-width:380px;margin:0;font-size:17px;line-height:1.5;color:var(--mv-mut)}\n/* the table */\n.mvkt-table{position:relative;overflow:hidden;border-radius:10px;background:color-mix(in srgb,var(--mv-ink) 4.5%,var(--mv-bone));box-shadow:inset 0 0 0 1px var(--mv-fog);touch-action:pan-y;user-select:none;-webkit-user-select:none}\n.mvkt-table::before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:16px;background:color-mix(in srgb,var(--mv-ink) 8%,var(--mv-bone));box-shadow:0 -1px 0 var(--mv-fog)}\n.mvkt-table::after{content:\"\";position:absolute;inset:0;pointer-events:none;background:radial-gradient(50% 70% at 30% 0%,rgba(255,241,218,.55),rgba(255,226,180,0) 70%);mix-blend-mode:screen}\n.mvkt-div{position:absolute;left:50%;top:22px;bottom:34px;width:1px;background:var(--mv-fog);opacity:0;transition:opacity .6s}\n.mvkt-hh{position:absolute;opacity:0;translate:0 -8px;transition:opacity .5s .5s,translate .6s .5s} .mvkt.is-sorted .mvkt-hh,.mvkt.is-sorted .mvkt-div{opacity:1;translate:0 0}\n.mvkt-pile{list-style:none;margin:0;padding:0}\n.mvkt-tag{position:absolute;left:0;top:0;width:var(--tw);height:var(--th);will-change:transform;cursor:grab;z-index:1} .mvkt-table.is-drag .mvkt-tag{cursor:grabbing} .mvkt-tag:hover{z-index:3}\n.mvkt-lab{position:absolute;right:20px;top:20px;display:flex;gap:18px;margin:0;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--mv-mut);pointer-events:none} .mvkt.is-sorted .mvkt-lab{opacity:0} .mvkt-lab{transition:opacity .4s}\n/* column heads */\n.mvkt-ch{display:flex;align-items:baseline;gap:10px;margin:0;font-size:clamp(24px,2vw,30px);line-height:1;letter-spacing:-.035em;font-stretch:115%;font-weight:760} .mvkt-ch span{font-size:11px;letter-spacing:.1em;padding:3px 6px;border-radius:4px;background:var(--mv-brass);color:var(--mv-ink)}\n/* the tag */\n.mvkt-ti{position:relative;display:block;width:var(--tw);height:var(--th);transform-origin:20px 50%}\n.mvkt-tag:hover .mvkt-ti,.mvkt-stag:hover .mvkt-ti{animation:mvkt-swing 1.5s cubic-bezier(.3,.6,.3,1)}\n@keyframes mvkt-swing{0%{rotate:0deg}14%{rotate:9deg}32%{rotate:-6deg}50%{rotate:3.5deg}68%{rotate:-1.8deg}84%{rotate:.7deg}100%{rotate:0deg}}\n.mvkt-face{position:absolute;inset:0;display:grid;align-content:center;gap:5px;padding:0 12px 0 40px;border-radius:4px 10px 10px 4px;clip-path:polygon(14px 0,100% 0,100% 100%,14px 100%,0 calc(100% - 14px),0 14px);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mv-ink) 16%,transparent)}\n.mvkt-ti.is-design .mvkt-face{background:linear-gradient(180deg,var(--mv-cloud),color-mix(in srgb,var(--mv-cloud) 88%,var(--mv-stone)));color:var(--mv-ink)}\n.mvkt-ti.is-design .mvkt-face::after{content:\"\";position:absolute;right:0;top:0;bottom:0;width:8px;background:var(--mv-brass)}\n.mvkt-ti.is-code .mvkt-face{background:linear-gradient(180deg,color-mix(in srgb,var(--mv-ink) 92%,var(--mv-cloud)),var(--mv-ink));color:var(--mv-cloud);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mv-cloud) 10%,transparent)}\n.mvkt-hole{position:absolute;left:14px;top:50%;width:13px;height:13px;margin-top:-6.5px;border-radius:50%;background:color-mix(in srgb,var(--mv-ink) 4.5%,var(--mv-bone));box-shadow:0 0 0 3px color-mix(in srgb,var(--mv-stone) 45%,var(--mv-cloud)),inset 0 1px 2px rgba(0,0,0,.3)}\n.mvkt-ti.is-code .mvkt-hole{box-shadow:0 0 0 3px color-mix(in srgb,var(--mv-brass) 80%,var(--mv-ink)),inset 0 1px 2px rgba(0,0,0,.5)}\n.mvkt-lb{display:block;font-size:17px;line-height:1;letter-spacing:-.02em;font-stretch:112%;font-weight:680;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.mvkt-cat{display:block;font-size:10.5px;line-height:1;letter-spacing:.1em;text-transform:uppercase;opacity:.72;white-space:nowrap}\n.mvkt-str{position:absolute;left:-10px;top:50%;width:30px;height:20px;margin-top:-17px;overflow:visible;pointer-events:none} .mvkt-str path{fill:none;stroke:color-mix(in srgb,var(--mv-ink) 55%,transparent);stroke-width:1.4;stroke-linecap:round}\n.mvkt-tag{filter:drop-shadow(0 6px 8px rgba(0,0,0,.14))}\n/* static (phone / still / reduced motion): the sorted final state */\n.mvkt-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:36px;padding:28px;border-radius:10px;background:color-mix(in srgb,var(--mv-ink) 4.5%,var(--mv-bone));box-shadow:inset 0 0 0 1px var(--mv-fog)}\n.mvkt-col{display:grid;align-content:start;gap:26px} .mvkt-col+.mvkt-col{padding-left:36px;border-left:1px solid var(--mv-fog)}\n.mvkt-list{display:flex;flex-wrap:wrap;gap:12px;list-style:none;margin:0;padding:0 0 0 10px}\n.mvkt-stag{width:var(--tw);height:var(--th);filter:drop-shadow(0 6px 8px rgba(0,0,0,.12))}\n.mvkt.is-ph .mvkt-top{flex-direction:column;align-items:flex-start;gap:22px} .mvkt.is-ph .mvkt-intro{font-size:16px}\n.mvkt.is-ph .mvkt-cols{grid-template-columns:minmax(0,1fr);gap:30px;padding:22px 18px} .mvkt.is-ph .mvkt-col+.mvkt-col{padding:28px 0 0;border-left:0;border-top:1px solid var(--mv-fog)}\n.mvkt.is-ph{--th:52px!important} .mvkt.is-ph .mvkt-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-left:8px} .mvkt.is-ph .mvkt-stag,.mvkt.is-ph .mvkt-ti{width:100%} .mvkt.is-ph .mvkt-cat{font-size:9.5px;overflow:hidden;text-overflow:ellipsis} .mvkt.is-ph .mvkt-lb{font-size:16px} .mvkt.is-ph .mvkt-face{padding-left:36px}\n@media (max-width:340px){.mvkt.is-ph .mvkt-list{grid-template-columns:minmax(0,1fr)}}`;addPropertyControls(MvKit,{...COLOR_CONTROLS,...FONT_CONTROLS,...BP_CONTROL,eyebrow:{type:ControlType.String,title:\"Eyebrow\",defaultValue:\"FRAME 05 — Tools\"},title:{type:ControlType.String,title:\"Heading\",description:\"| = line break, *word* = highlighted\",defaultValue:\"Design *and* code,|same hands.\"},intro:{type:ControlType.String,title:\"Intro\",displayTextArea:true,defaultValue:\"The kit I bring to every project. Half of it draws, half of it ships — and I use all of it myself.\"},tools:{type:ControlType.String,title:\"Tools\",description:\"Name|Category; … (up to 16)\",displayTextArea:true,defaultValue:\"Figma|Design;Framer|Design;Rive|Motion;Protopie|Prototyping;Blender|3D;React|Code;TypeScript|Code;Next.js|Code;Tailwind|Code;Storybook|Code;Git|Code;Notion|Ops\"},leftTitle:{type:ControlType.String,title:\"Left column\",defaultValue:\"Design\"},rightTitle:{type:ControlType.String,title:\"Right column\",defaultValue:\"Code\"},rightKinds:{type:ControlType.String,title:\"Right column categories\",description:\"Categories that sort into the right column; all others go left\",defaultValue:\"Code\"},tableLabel:{type:ControlType.String,title:\"Table label\",defaultValue:\"Kit check \\xb7 load-in\"},hint:{type:ControlType.String,title:\"Drag hint\",defaultValue:\"Drag a tag to throw it\"},sortAt:{type:ControlType.Number,title:\"Sort at\",description:\"Scroll progress (0–1) where the pile sorts into columns\",min:.3,max:.8,step:.01,defaultValue:.55}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MvKit\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MvKit.map"],"mappings":"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"}