{"version":3,"file":"Loader.Bit4LDd5.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/tHM8QDh2LpC5Vpkvzkvk/k6ocrcVCqqDXVhN8aoah/Loader.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useEffect,useLayoutEffect,useRef}from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * Snelsky site loader\n *\n * Covers the page while fonts, images and the showreel load, then slides up\n * to reveal the page. Plays once per visit. Clicking between pages won't replay it.\n *\n * Put it inside your Navigation component (so it's on every page automatically),\n * or drop it on each page as the top layer. It attaches itself to the page body,\n * so a nav with blur, sticky or transform effects can't squash it. The layer's size\n * doesn't matter on the live site. On the canvas it just shows a preview.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 480\n * @framerIntrinsicHeight 280\n */const ORANGE=\"#FF4F15\";const DARK=\"#1C1916\";const LIGHT=\"#FAFAF8\";const fontHeading=\"'Plus Jakarta Sans', sans-serif\";const fontBody=\"'Figtree', sans-serif\";const STORAGE_KEY=\"snelsky-loader-seen\";const FPS=25;function isCanvas(){try{return RenderTarget.current()===RenderTarget.canvas;}catch{return false;}}function reducedMotion(){return typeof window!==\"undefined\"&&!!window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;}function timecode(ms){const totalFrames=Math.floor(ms/1e3*FPS);const ff=totalFrames%FPS;const ss=Math.floor(totalFrames/FPS)%60;const mm=Math.floor(totalFrames/FPS/60);const p=n=>String(n).padStart(2,\"0\");return`00:${p(mm)}:${p(ss)}:${p(ff)}`;}// Resolves when the page is genuinely ready: fonts, window load, and (optionally) the first video\nfunction whenPageReady(waitForVideo){const fonts=document.fonts?.ready?document.fonts.ready.then(()=>{}):Promise.resolve();const load=document.readyState===\"complete\"?Promise.resolve():new Promise(res=>window.addEventListener(\"load\",()=>res(),{once:true}));const video=!waitForVideo?Promise.resolve():new Promise(res=>{// Give the page a moment to mount its video\nsetTimeout(()=>{const v=document.querySelector(\"video\");if(!v||v.readyState>=3)return res();v.addEventListener(\"canplay\",()=>res(),{once:true});v.addEventListener(\"error\",()=>res(),{once:true});},150);});return Promise.all([fonts,load,video]).then(()=>{});}function Mark({wordmark,logo,logoWidth=360,logoZoom=1,logoWhite=true,size=1}){return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:14*size},children:[/*#__PURE__*/_jsx(\"span\",{className:\"sl-rec\",style:{width:Math.max(10,Math.min(20,logoWidth*.035))*size,height:Math.max(10,Math.min(20,logoWidth*.035))*size,borderRadius:\"50%\",background:ORANGE,flexShrink:0}}),logo?.src?/*#__PURE__*/_jsx(\"img\",{src:// Ask Framer for a 1024px version rather than the full-size upload\nlogo.src.includes(\"framerusercontent.com\")&&!logo.src.includes(\"scale-down-to\")?logo.src+(logo.src.includes(\"?\")?\"&\":\"?\")+\"scale-down-to=1024\":logo.src,alt:logo.alt||wordmark,style:{width:`min(${logoWidth*size}px, 80vw)`,height:\"auto\",display:\"block\",// Zoom enlarges the logo past any empty space baked into the image file\ntransform:logoZoom!==1?`scale(${logoZoom})`:undefined,transformOrigin:\"center\",// Turns a dark logo white so it shows up on the dark background\nfilter:logoWhite?\"brightness(0) invert(1)\":\"none\"}}):/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:fontHeading,fontWeight:800,fontSize:52*size,letterSpacing:\"-0.04em\",color:LIGHT,lineHeight:1},children:wordmark})]});}function Bar({progress=0,ms=0,size=1,refs={}}){const pct=Math.max(0,Math.min(1,progress))*100;return /*#__PURE__*/_jsxs(\"div\",{style:{width:`min(${320*size}px, 64vw)`},children:[/*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",height:4,borderRadius:2,background:\"rgba(250,250,248,0.14)\"},children:[/*#__PURE__*/_jsx(\"div\",{ref:refs.fill,style:{position:\"absolute\",left:0,top:0,bottom:0,width:`${pct}%`,borderRadius:2,background:ORANGE}}),/*#__PURE__*/_jsx(\"div\",{ref:refs.dot,style:{position:\"absolute\",top:\"50%\",left:`${pct}%`,width:12,height:12,borderRadius:\"50%\",background:ORANGE,border:`2px solid ${DARK}`,transform:\"translate(-50%, -50%)\"}})]}),/*#__PURE__*/_jsxs(\"div\",{style:{marginTop:14,display:\"flex\",justifyContent:\"space-between\",fontFamily:fontBody,fontSize:12,color:\"rgba(250,250,248,0.5)\",fontVariantNumeric:\"tabular-nums\"},children:[/*#__PURE__*/_jsx(\"span\",{children:\"REC\"}),/*#__PURE__*/_jsx(\"span\",{ref:refs.time,children:timecode(ms)})]})]});}// Paints a dark cover over the whole screen from the very first frame, before the\n// loader itself has mounted. Pseudo-elements on body can't be trapped by the nav.\nconst EARLY_COVER=`html:not(.snel-seen) body::before { content: \"\"; position: fixed; inset: 0; background: ${DARK}; z-index: 2147482999; pointer-events: none; }`;const STYLES=`\n@keyframes sl-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }\n.sl-rec { display: inline-block; animation: sl-pulse 1.4s ease-in-out infinite; }\n@keyframes sl-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }\n.sl-content { animation: sl-in .3s cubic-bezier(.2,.7,.2,1) both; transition: opacity .35s ease, transform .5s cubic-bezier(.76,0,.24,1); }\n.sl-content.is-out { opacity: 0; transform: translateY(-24px); }\n.sl-overlay { transition: transform .85s cubic-bezier(.76,0,.24,1); }\n.sl-overlay.is-out { transform: translateY(-100%); }\n@media (prefers-reduced-motion: reduce) {\n    .sl-rec, .sl-content { animation: none; }\n    .sl-overlay { transition: opacity .3s ease; }\n    .sl-overlay.is-out { transform: none; opacity: 0; }\n}\n`;export default function SnelskyLoader(props){const{wordmark=\"snelsky\",logo,logoWidth=360,logoZoom=1,logoWhite=true,minDuration=1.5,maxWait=3.5,waitForVideo=true}=props;const canvas=isCanvas();const[active,setActive]=useState(true);// The bar and timecode are updated directly, not through React, so the loader\n// costs almost nothing to run on a phone\nconst fillRef=useRef(null);const dotRef=useRef(null);const timeRef=useRef(null);const paint=(p,t)=>{const pct=`${Math.max(0,Math.min(1,p))*100}%`;if(fillRef.current)fillRef.current.style.width=pct;if(dotRef.current)dotRef.current.style.left=pct;if(timeRef.current)timeRef.current.textContent=timecode(t);};const[leaving,setLeaving]=useState(false);const[mounted,setMounted]=useState(false);const readyRef=useRef(false);useEffect(()=>setMounted(true),[]);// Already seen this visit: remove before the browser paints\nuseLayoutEffect(()=>{if(canvas)return;try{if(window.sessionStorage.getItem(STORAGE_KEY)===\"1\")setActive(false);}catch{}},[]);useEffect(()=>{if(canvas||!active)return;try{window.sessionStorage.setItem(STORAGE_KEY,\"1\");}catch{}const prevOverflow=document.documentElement.style.overflow;document.documentElement.style.overflow=\"hidden\";const minMs=minDuration*1e3;const maxMs=Math.max(maxWait*1e3,minMs);// Clock only moves while frames are actually painting, so a busy page\n// can't make the bar jump ahead before anyone has seen it\nconst INTRO_MS=300// bar holds at zero while the logo fades in\n;let elapsed=0;let last=0;let shown=0;let raf=0;let done=false;const timers=[];whenPageReady(waitForVideo).then(()=>readyRef.current=true);// Safety net: never hold anyone for longer than maxWait\ntimers.push(setTimeout(()=>readyRef.current=true,maxMs));const finish=()=>{if(done)return;done=true;setLeaving(true);const exitMs=reducedMotion()?320:900;timers.push(setTimeout(()=>{document.documentElement.style.overflow=prevOverflow;// From now on, pages opened in this visit skip the dark cover\ndocument.documentElement.classList.add(\"snel-seen\");setActive(false);window.dispatchEvent(new Event(\"snelsky:loaded\"));},exitMs));};const tick=now=>{const delta=last?Math.min(now-last,50):0;last=now;elapsed+=delta;const t=Math.min(1,Math.max(0,elapsed-INTRO_MS)/minMs);// Even pace: gentle start, steady middle, eases into 90% while waiting\nconst eased=t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2;const target=readyRef.current&&elapsed>=minMs+INTRO_MS?1:.9*eased;shown+=(target-shown)*.12;paint(shown,elapsed);if(target===1&&shown>.995){paint(1,elapsed);finish();return;}raf=requestAnimationFrame(tick);};raf=requestAnimationFrame(tick);return()=>{cancelAnimationFrame(raf);timers.forEach(clearTimeout);document.documentElement.style.overflow=prevOverflow;};},[active]);// Canvas preview so you can see and style it without it covering your work\nif(canvas){return /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",background:DARK,borderRadius:8,display:\"flex\",flexDirection:\"column\",alignItems:\"center\",justifyContent:\"center\",gap:28,overflow:\"hidden\"},children:[/*#__PURE__*/_jsx(\"style\",{children:STYLES}),/*#__PURE__*/_jsx(Mark,{wordmark:wordmark,logo:logo,logoWidth:logoWidth,logoZoom:logoZoom,logoWhite:logoWhite,size:.6}),/*#__PURE__*/_jsx(Bar,{progress:.45,ms:1480,size:.7}),/*#__PURE__*/_jsx(\"div\",{style:{fontFamily:fontBody,fontSize:11,color:\"rgba(250,250,248,0.4)\"},children:\"Preview. Runs full screen on the live site.\"})]});}if(!active)return null;// Before mounting (first paint from the server), just hold the screen dark\nif(!mounted||typeof document===\"undefined\")return /*#__PURE__*/_jsx(\"style\",{children:EARLY_COVER});return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(\"div\",{className:leaving?\"sl-overlay is-out\":\"sl-overlay\",role:\"status\",\"aria-label\":\"Loading\",style:{position:\"fixed\",inset:0,zIndex:2147483e3,background:DARK,display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:[/*#__PURE__*/_jsx(\"style\",{children:STYLES}),/*#__PURE__*/_jsxs(\"div\",{className:leaving?\"sl-content is-out\":\"sl-content\",style:{display:\"flex\",flexDirection:\"column\",alignItems:\"center\",gap:40},children:[/*#__PURE__*/_jsx(Mark,{wordmark:wordmark,logo:logo,logoWidth:logoWidth,logoZoom:logoZoom,logoWhite:logoWhite}),/*#__PURE__*/_jsx(Bar,{refs:{fill:fillRef,dot:dotRef,time:timeRef}})]})]}),document.body);}addPropertyControls(SnelskyLoader,{wordmark:{type:ControlType.String,title:\"Wordmark\",defaultValue:\"snelsky\",description:\"Shown if no logo image is set.\"},logo:{type:ControlType.ResponsiveImage,title:\"Logo\"},logoWidth:{type:ControlType.Number,title:\"Logo width\",defaultValue:360,min:80,max:1e3,step:10,unit:\"px\",displayStepper:true,description:\"Never wider than 80% of the screen on phones.\"},logoZoom:{type:ControlType.Number,title:\"Logo zoom\",defaultValue:1,min:1,max:4,step:.1,displayStepper:true,description:\"Use if the logo file has lots of empty space around it.\"},logoWhite:{type:ControlType.Boolean,title:\"Logo colour\",defaultValue:true,enabledTitle:\"White\",disabledTitle:\"Original\",description:\"White makes a dark logo visible on the dark screen.\"},minDuration:{type:ControlType.Number,title:\"Min time\",defaultValue:1.5,min:.4,max:3,step:.1,unit:\"s\",displayStepper:true},maxWait:{type:ControlType.Number,title:\"Max wait\",defaultValue:3.5,min:1,max:8,step:.5,unit:\"s\",displayStepper:true,description:\"Never holds anyone longer than this.\"},waitForVideo:{type:ControlType.Boolean,title:\"Wait for video\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SnelskyLoader\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Loader.map"],"mappings":"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"}