{"version":3,"file":"shared-lib.C_AdNAoJ.mjs","names":["useState","useRef","metadata","metadata","siteMetadata","metadataVersion","__FramerMetadata__","siteMetadata"],"sources":["https:/framerusercontent.com/modules/rkc17ldBdHBFPwCWkvAV/o3NaKaBOUTYTzNIdMmwS/Mirror_v2.js","https:/framerusercontent.com/modules/hGWQ6DoocusTRlKjXbzF/itczqvbEqpED3jEVlLGI/siteMetadata.js","https:/framerusercontent.com/modules/3ImbR1fUTdEkmB09vteD/7cHFoKva5CzQsfcaA0AM/augiA20Il.js","https:/framerusercontent.com/modules/xJA4AUAD1e2AbUDQP48G/zwFSHj66mpaz07DjK2Ou/lpN3QlI27.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useRef,useEffect,useState,useLayoutEffect}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";// Longest-edge cap for the smooth pixel-filter work buffer. Keeps per-frame\n// cost flat regardless of how large the component is on the page.\nconst PROC_MAX=900;// Bayer 8x8 ordered-dithering threshold matrix (values 0..63). The 8x8\n// matrix produces far smoother tonal ramps than a 4x4 — faces read as\n// faces (classic newspaper / 1-bit Mac halftone) instead of noise.\nconst BAYER8=[[0,32,8,40,2,34,10,42],[48,16,56,24,50,18,58,26],[12,44,4,36,14,46,6,38],[60,28,52,20,62,30,54,22],[3,35,11,43,1,33,9,41],[51,19,59,27,49,17,57,25],[15,47,7,39,13,45,5,37],[63,31,55,23,61,29,53,21]];// Sparse -> dense glyph ramp for the ASCII filter (terminal-art style).\nconst ASCII_RAMP=\" .':;-=+*x%#@$\";// Thermal gradient stops: [position 0..1, [r,g,b]]\nconst THERMAL=[[0,[0,0,30]],[.25,[60,0,130]],[.45,[200,30,30]],[.65,[245,130,0]],[.82,[250,225,60]],[1,[255,255,255]]];function parseRGB(str){if(!str)return[0,0,0];if(str[0]===\"#\"){let h=str.slice(1);if(h.length===3)h=h.split(\"\").map(c=>c+c).join(\"\");const n=parseInt(h,16);return[n>>16&255,n>>8&255,n&255];}const m=str.match(/[\\d.]+/g);if(m&&m.length>=3)return[+m[0]||0,+m[1]||0,+m[2]||0];return[0,0,0];}// Auto-contrast: scan the (small) sample buffer once and return the\n// luminance lo/hi so tonal filters can stretch the camera's usually\n// flat, underexposed feed to full range. This is what makes ASCII /\n// Dither / Grain / Halftone actually SHOW the face instead of mud.\nfunction lumRange(data){let lo=255;let hi=0;for(let i=0;i<data.length;i+=4){const l=.299*data[i]+.587*data[i+1]+.114*data[i+2];if(l<lo)lo=l;if(l>hi)hi=l;}if(hi-lo<32){lo=Math.max(0,lo-16);hi=Math.min(255,lo+32);}return[lo,hi];}// System-fallback font stacks — nothing is fetched at runtime. If the\n// project bundles Inter / Poppins (Framer font settings), those faces are\n// used; otherwise the closest system font renders instead.\nconst FONT_STACKS={Inter:'\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Arial, sans-serif',Poppins:'\"Poppins\", \"Avenir Next\", \"Century Gothic\", Futura, Verdana, sans-serif',Helvetica:'\"Helvetica Neue\", Helvetica, Arial, sans-serif'};function fontStringFor(family,px){const stack=FONT_STACKS[family]||FONT_STACKS.Inter;if(family===\"Helvetica\")return`italic 900 ${px}px ${stack}`;return`900 ${px}px ${stack}`;}function getScratch(ref,readFrequently){if(!ref.current){const canvas=document.createElement(\"canvas\");const ctx=canvas.getContext(\"2d\",{willReadFrequently:readFrequently});ref.current={canvas,ctx};}return ref.current;}// Resizing a canvas (even to the same value) wipes it and reallocates the\n// backing store — only touch width/height when the size actually changed.\nfunction sizeCanvas(canvas,w,h){let resized=false;if(canvas.width!==w){canvas.width=w;resized=true;}if(canvas.height!==h){canvas.height=h;resized=true;}return resized;}/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 600\n * @framerIntrinsicHeight 240\n */export default function CameraTextMask(props){const{text,fontSize,letterSpacing,fontFamily,mirror,filter,pixelSize,duoShadow,duoHighlight,haloInk,haloPaper,padding,bgType,bgColor,gradColorA,gradColorB,gradAngle,bgImage,glowIntensity,glowColor,style}=props;const isStatic=useIsStaticRenderer();const[hasPermission,setHasPermission]=useState(false);// True once the camera has been denied / blocked / found unsupported.\n// Drives the graceful fallback: the styled gradient text keeps rendering\n// and a small non-blocking \"Try again\" notice is shown instead of the\n// component going blank.\nconst[cameraDenied,setCameraDenied]=useState(false);const[errorMsg,setErrorMsg]=useState(null);const[size,setSize]=useState({width:0,height:0});const[dpr,setDpr]=useState(1);const[fontsVersion,setFontsVersion]=useState(0);// Measured ink box of the current text — drives the auto height.\nconst[textBox,setTextBox]=useState({ascent:0,descent:0});const containerRef=useRef(null);const videoRef=useRef(null);const canvasRef=useRef(null);const streamRef=useRef(null);const rafRef=useRef(null);const runningRef=useRef(false);const procRef=useRef(null);const sampleRef=useRef(null);// Persistent frame-history buffer for the Afterimage filter. Unlike the\n// other scratch canvases it intentionally KEEPS its pixels between\n// frames — the decaying echo trail lives here.\nconst echoRef=useRef(null);// Reused canvas for text measurement (avoids allocating one per measure).\nconst measureRef=useRef(null);// Loop gating state (refs so the rAF loop / observers never go stale).\n// hasPermissionRef mirrors hasPermission; inViewRef is written by the\n// IntersectionObserver; together with document.hidden they decide\n// whether the draw loop (and <video> decode) should be running.\nconst hasPermissionRef=useRef(false);const inViewRef=useRef(true);// Always-fresh copy of the props the draw loop needs, so live edits in the\n// Framer panel take effect without tearing down the camera stream.\nconst liveRef=useRef(props);liveRef.current=props;// Fresh copy of the measured ink box for the rAF draw loop.\nconst boxRef=useRef(textBox);boxRef.current=textBox;// Fresh copy of dpr for the rAF draw loop. The loop's closure is frozen\n// at the render where it started; without this it would keep drawing at\n// whatever dpr was current then (often 1 at mount, before the retina\n// bump to 2), shrinking the text against a higher-res canvas.\nconst dprRef=useRef(dpr);dprRef.current=dpr;// ---- Device pixel ratio (crisp text + mask on retina) ----\nuseEffect(()=>{if(typeof window!==\"undefined\")setDpr(Math.min(window.devicePixelRatio||1,2));},[]);// ---- Track layout WIDTH from Framer's drag-to-resize ----\n// (Height is derived from the text, not measured here.)\nuseEffect(()=>{const el=containerRef.current;if(!el)return;const obs=new ResizeObserver(entries=>{const r=entries[0].contentRect;setSize({width:r.width,height:r.height});});obs.observe(el);return()=>obs.disconnect();},[]);// ---- Track font loading. No fonts are fetched here — we only LISTEN\n//      for faces the site itself bundles (e.g. Inter/Poppins added via\n//      Framer's font settings) and re-measure the ink box each time one\n//      settles, so the component height matches the glyphs actually\n//      rendered instead of the fallback that painted first. ----\nuseEffect(()=>{if(typeof document===\"undefined\"||!document.fonts){setFontsVersion(v=>v+1);return;}const fonts=document.fonts;let alive=true;const bump=()=>alive&&setFontsVersion(v=>v+1);// Resolves once every font in the document has settled.\nfonts.ready?.then?.(bump)?.catch?.(()=>{});// Fires each time a (late) face finishes loading.\nfonts.addEventListener?.(\"loadingdone\",bump);const t=setTimeout(bump,1500);return()=>{alive=false;clearTimeout(t);fonts.removeEventListener?.(\"loadingdone\",bump);};},[]);// ---- Measure the real ink box of the text so the component height\n//      hugs the typography exactly. Runs in useLayoutEffect so Framer's\n//      auto-sizing measures the new height before paint. ----\nuseLayoutEffect(()=>{if(typeof document===\"undefined\")return;const{ctx:mctx}=getScratch(measureRef,false);mctx.font=fontStringFor(fontFamily,fontSize);const m=mctx.measureText(text||\" \");const aRaw=m.actualBoundingBoxAscent;const dRaw=m.actualBoundingBoxDescent;// Use the measured value even when it's 0 (all-caps words have no\n// descender, so descent is 0 — falling back here would pad a phantom\n// band below the letters). Only substitute when the metric is missing.\nconst ascent=typeof aRaw===\"number\"&&isFinite(aRaw)?aRaw:fontSize*.72;const descent=typeof dRaw===\"number\"&&isFinite(dRaw)?dRaw:fontSize*.2;setTextBox(prev=>prev.ascent===ascent&&prev.descent===descent?prev:{ascent,descent});},[text,fontFamily,fontSize,fontsVersion]);// CSS height of the typography ink box (before padding).\nconst textHeightCSS=Math.max(1,textBox.ascent+textBox.descent);// Mirror + cover-fit the live video into the given context/size.\nfunction drawCoverMirrored(ctx,video,w,h,doMirror,cssFilter){const vW=video.videoWidth;const vH=video.videoHeight;if(!vW||!vH)return;ctx.save();if(cssFilter)ctx.filter=cssFilter;if(doMirror){ctx.translate(w,0);ctx.scale(-1,1);}const s=Math.max(w/vW,h/vH);const dw=vW*s;const dh=vH*s;ctx.drawImage(video,(w-dw)/2,(h-dh)/2,dw,dh);ctx.restore();}// ---- The filter engine: paints filtered camera onto the main ctx ----\nfunction paintFilteredCamera(ctx,video,W,H,p,d){const f=p.filter;// 1) Cheap GPU css-filter looks — draw straight to main, full res.\nif(f===\"None\"||f===\"Grayscale\"||f===\"Sepia\"||f===\"Invert\"){const cssMap={None:undefined,Grayscale:\"grayscale(1) brightness(1.06) contrast(1.12)\",Sepia:\"sepia(0.85) saturate(1.15) brightness(1.05) contrast(1.08)\",Invert:\"invert(1) contrast(1.05)\"};drawCoverMirrored(ctx,video,W,H,p.mirror,cssMap[f]);return;}// 2) CRT scanlines — draw + overlay soft horizontal lines. Thinner,\n//    lighter lines than before so the face stays readable.\nif(f===\"Scanlines\"){drawCoverMirrored(ctx,video,W,H,p.mirror,\"saturate(1.25) brightness(1.06) contrast(1.1)\");const line=Math.max(1,Math.round(d));const gap=line*3;ctx.fillStyle=\"rgba(0,0,0,0.28)\";for(let y=0;y<H;y+=gap)ctx.fillRect(0,y,W,line);return;}// 2b) CRT phosphor monitor — green terminal look built from a\n//     grayscale draw tinted green, vertical phosphor columns,\n//     faint scanlines and a vignette. (Matrix / hacker-cam.)\nif(f===\"CRT\"){drawCoverMirrored(ctx,video,W,H,p.mirror,\"grayscale(1) brightness(1.2) contrast(1.4) sepia(1) hue-rotate(66deg) saturate(4.5)\");// Vertical phosphor columns (the signature CRT texture).\nconst col=Math.max(1,Math.round(d));const cgap=col*3;ctx.fillStyle=\"rgba(0,12,4,0.4)\";for(let x=0;x<W;x+=cgap)ctx.fillRect(x,0,col,H);// Faint horizontal scanlines on top.\nctx.fillStyle=\"rgba(0,0,0,0.16)\";const lgap=Math.max(3,Math.round(3*d));for(let y=0;y<H;y+=lgap)ctx.fillRect(0,y,W,1);// Soft vignette so edges fall into black like a tube screen.\nconst vg=ctx.createRadialGradient(W/2,H/2,Math.min(W,H)*.35,W/2,H/2,Math.max(W,H)*.75);vg.addColorStop(0,\"rgba(0,0,0,0)\");vg.addColorStop(1,\"rgba(0,0,0,0.55)\");ctx.fillStyle=vg;ctx.fillRect(0,0,W,H);return;}// 2c) Afterimage — decaying motion echo. Previous frames persist in\n//     a dedicated buffer, get nudged sideways + faded each frame,\n//     and the crisp current frame is layered on top. Moving through\n//     frame leaves glitchy ghost trails.\nif(f===\"Afterimage\"){const{canvas:ec,ctx:ectx}=getScratch(echoRef,false);const resized=sizeCanvas(ec,W,H);if(resized){ectx.fillStyle=\"#000\";ectx.fillRect(0,0,W,H);}// Smear the existing echo sideways and let it decay.\nectx.save();ectx.globalAlpha=.86;ectx.drawImage(ec,Math.round(4*d),0);ectx.restore();ectx.fillStyle=\"rgba(0,0,0,0.07)\";ectx.fillRect(0,0,W,H);// Feed the current frame into the echo at partial strength.\nectx.save();ectx.globalAlpha=.4;drawCoverMirrored(ectx,video,W,H,p.mirror,\"saturate(1.3) brightness(1.05)\");ectx.restore();// Composite: trail first, then a semi-crisp live pass on top.\nctx.drawImage(ec,0,0);ctx.save();ctx.globalAlpha=.6;drawCoverMirrored(ctx,video,W,H,p.mirror,\"saturate(1.2) contrast(1.05)\");ctx.restore();return;}// 3) Chunky sample-buffer filters (ASCII / Dither / Pixelate / Halftone).\nif(f===\"ASCII\"){let cell=Math.max(5,Math.round(p.pixelSize*d));while(W/cell*(H/cell)>9e3)cell+=1;const cols=Math.ceil(W/cell);const rows=Math.ceil(H/cell);const{canvas:sc,ctx:sctx}=getScratch(sampleRef,true);sizeCanvas(sc,cols,rows);sctx.setTransform(1,0,0,1,0,0);drawCoverMirrored(sctx,video,cols,rows,p.mirror);const data=sctx.getImageData(0,0,cols,rows).data;// Auto-contrast so the full glyph ramp is actually used —\n// this is what makes the face pop out of the character field.\nconst[lo,hi]=lumRange(data);const span=hi-lo||1;ctx.fillStyle=\"#000\";ctx.fillRect(0,0,W,H);ctx.textAlign=\"center\";ctx.textBaseline=\"middle\";ctx.font=`bold ${Math.round(cell*1.05)}px \"Courier New\", ui-monospace, monospace`;const len=ASCII_RAMP.length;for(let r=0;r<rows;r++){for(let c=0;c<cols;c++){const i=(r*cols+c)*4;const lum=.299*data[i]+.587*data[i+1]+.114*data[i+2];// Stretched 0..1 tone with a slight gamma lift.\nlet t=(lum-lo)/span;t=Math.pow(Math.max(0,Math.min(1,t)),.85);const idx=Math.min(len-1,Math.round(t*(len-1)));const ch=ASCII_RAMP[idx];if(ch===\" \")continue;// Mono glyphs whose brightness follows the tone — reads\n// like classic terminal art instead of muddy color.\nconst v=Math.round(90+t*165);ctx.fillStyle=`rgb(${v},${v},${v})`;ctx.fillText(ch,c*cell+cell/2,r*cell+cell/2);}}return;}if(f===\"Halftone\"){// Riso-print dot grid: ink dots on paper, dot size = darkness.\nlet cell=Math.max(4,Math.round(p.pixelSize*d));while(W/cell*(H/cell)>1e4)cell+=1;const cols=Math.ceil(W/cell)+1;const rows=Math.ceil(H/cell)+1;const{canvas:sc,ctx:sctx}=getScratch(sampleRef,true);sizeCanvas(sc,cols,rows);sctx.setTransform(1,0,0,1,0,0);drawCoverMirrored(sctx,video,cols,rows,p.mirror);const data=sctx.getImageData(0,0,cols,rows).data;const[lo,hi]=lumRange(data);const span=hi-lo||1;ctx.fillStyle=p.haloPaper;ctx.fillRect(0,0,W,H);ctx.fillStyle=p.haloInk;ctx.beginPath();const maxR=cell*.62;for(let r=0;r<rows;r++){// Stagger alternate rows for the classic print rosette feel.\nconst off=(r&1)*(cell/2);for(let c=0;c<cols;c++){const i=(r*cols+c)*4;const lum=.299*data[i]+.587*data[i+1]+.114*data[i+2];const t=Math.max(0,Math.min(1,(lum-lo)/span));const rad=(1-t)*maxR;if(rad<.35)continue;const x=c*cell+off;const y=r*cell+cell/2;ctx.moveTo(x+rad,y);ctx.arc(x,y,rad,0,Math.PI*2);}}ctx.fill();return;}if(f===\"Dither\"){// 1-bit ordered dither, retro-Mac style: fine dot cells, 8x8\n// Bayer matrix for smooth tonal ramps, auto-contrast so the\n// face reads clearly, pure black & white output.\nconst block=Math.max(2,Math.round(p.pixelSize*d*.4));const cols=Math.max(1,Math.round(W/block));const rows=Math.max(1,Math.round(H/block));const{canvas:sc,ctx:sctx}=getScratch(sampleRef,true);sizeCanvas(sc,cols,rows);sctx.setTransform(1,0,0,1,0,0);drawCoverMirrored(sctx,video,cols,rows,p.mirror);const img=sctx.getImageData(0,0,cols,rows);const dd=img.data;const[lo,hi]=lumRange(dd);const span=hi-lo||1;for(let y=0;y<rows;y++){const rowBayer=BAYER8[y&7];for(let x=0;x<cols;x++){const i=(y*cols+x)*4;const lum=.299*dd[i]+.587*dd[i+1]+.114*dd[i+2];const t=Math.max(0,Math.min(1,(lum-lo)/span));const th=(rowBayer[x&7]+.5)/64;const v=t>th?255:0;dd[i]=dd[i+1]=dd[i+2]=v;dd[i+3]=255;}}sctx.putImageData(img,0,0);ctx.imageSmoothingEnabled=false;ctx.drawImage(sc,0,0,cols,rows,0,0,W,H);ctx.imageSmoothingEnabled=true;return;}if(f===\"Pixelate\"){const block=Math.max(2,Math.round(p.pixelSize*d));const cols=Math.max(1,Math.round(W/block));const rows=Math.max(1,Math.round(H/block));const{canvas:sc,ctx:sctx}=getScratch(sampleRef,true);sizeCanvas(sc,cols,rows);sctx.setTransform(1,0,0,1,0,0);// Slight saturation/contrast lift makes the mosaic tiles pop\n// like a censorship / \"classified\" treatment.\ndrawCoverMirrored(sctx,video,cols,rows,p.mirror,\"saturate(1.2) contrast(1.06)\");ctx.imageSmoothingEnabled=false;ctx.drawImage(sc,0,0,cols,rows,0,0,W,H);ctx.imageSmoothingEnabled=true;return;}// 4) Smooth per-pixel filters run on a capped work buffer, upscaled.\nconst ratio=Math.min(1,PROC_MAX/Math.max(W,H));const pw=Math.max(1,Math.round(W*ratio));const ph=Math.max(1,Math.round(H*ratio));const{canvas:pc,ctx:pctx}=getScratch(procRef,true);sizeCanvas(pc,pw,ph);pctx.setTransform(1,0,0,1,0,0);drawCoverMirrored(pctx,video,pw,ph,p.mirror);const img=pctx.getImageData(0,0,pw,ph);const px=img.data;if(f===\"Posterize\"){const levels=4;const step=255/(levels-1);for(let i=0;i<px.length;i+=4){px[i]=Math.round(px[i]/step)*step;px[i+1]=Math.round(px[i+1]/step)*step;px[i+2]=Math.round(px[i+2]/step)*step;}}else if(f===\"Grain\"){// Stochastic (noise) dither — the \"dust particle\" portrait\n// look: each pixel flips to pure white or black against a\n// random threshold, so tone becomes living particle density.\n// Auto-contrast first so highlights bloom and shadows sit black.\nconst[lo,hi]=lumRange(px);const span=hi-lo||1;for(let i=0;i<px.length;i+=4){const lum=.299*px[i]+.587*px[i+1]+.114*px[i+2];let t=(lum-lo)/span;t=Math.pow(Math.max(0,Math.min(1,t)),1.15);const v=Math.random()<t?255:0;px[i]=px[i+1]=px[i+2]=v;px[i+3]=255;}}else if(f===\"Thermal\"){for(let i=0;i<px.length;i+=4){const lum=(.299*px[i]+.587*px[i+1]+.114*px[i+2])/255;let r=255,g=255,b=255;for(let s=1;s<THERMAL.length;s++){if(lum<=THERMAL[s][0]){const[t0,c0]=THERMAL[s-1];const[t1,c1]=THERMAL[s];const k=(lum-t0)/(t1-t0||1);r=c0[0]+(c1[0]-c0[0])*k;g=c0[1]+(c1[1]-c0[1])*k;b=c0[2]+(c1[2]-c0[2])*k;break;}}px[i]=r;px[i+1]=g;px[i+2]=b;}}else if(f===\"Duotone\"){const sh=parseRGB(p.duoShadow);const hi2=parseRGB(p.duoHighlight);for(let i=0;i<px.length;i+=4){const t=(.299*px[i]+.587*px[i+1]+.114*px[i+2])/255;px[i]=sh[0]+(hi2[0]-sh[0])*t;px[i+1]=sh[1]+(hi2[1]-sh[1])*t;px[i+2]=sh[2]+(hi2[2]-sh[2])*t;}}else if(f===\"Edge\"){// Sobel edge detection on the luminance channel.\nconst gray=new Float32Array(pw*ph);for(let i=0,j=0;i<px.length;i+=4,j++)gray[j]=.299*px[i]+.587*px[i+1]+.114*px[i+2];for(let y=0;y<ph;y++){for(let x=0;x<pw;x++){const i=(y*pw+x)*4;if(x===0||y===0||x===pw-1||y===ph-1){px[i]=px[i+1]=px[i+2]=12;continue;}const o=y*pw+x;const gx=-gray[o-pw-1]-2*gray[o-1]-gray[o+pw-1]+gray[o-pw+1]+2*gray[o+1]+gray[o+pw+1];const gy=-gray[o-pw-1]-2*gray[o-pw]-gray[o-pw+1]+gray[o+pw-1]+2*gray[o+pw]+gray[o+pw+1];// 1.4x boost so edges glow instead of whispering.\nconst mag=Math.min(255,Math.hypot(gx,gy)*1.4);px[i]=px[i+1]=px[i+2]=mag;}}}pctx.putImageData(img,0,0);// Grain must stay crisp on upscale — nearest-neighbor keeps each\n// particle a hard dot instead of gray smear.\nctx.imageSmoothingEnabled=f!==\"Grain\";ctx.drawImage(pc,0,0,pw,ph,0,0,W,H);ctx.imageSmoothingEnabled=true;}// ---- One rendered frame (camera + filter + text mask) ----\nfunction renderFrame(){const canvas=canvasRef.current;const video=videoRef.current;if(!canvas||!video)return;const W=canvas.width;const H=canvas.height;if(!W||!H)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;const p=liveRef.current;const d=dprRef.current;const box=boxRef.current;const ascent=(box.ascent||p.fontSize*.72)*d;ctx.setTransform(1,0,0,1,0,0);ctx.globalCompositeOperation=\"source-over\";ctx.filter=\"none\";ctx.letterSpacing=\"0px\";ctx.clearRect(0,0,W,H);const ready=video.readyState>=2&&video.videoWidth>0;if(ready)paintFilteredCamera(ctx,video,W,H,p,d);// Cut the filtered image down to the text shape. The glyph ink box\n// fills the canvas exactly (top at 0, baseline at the measured ascent).\nctx.globalCompositeOperation=\"destination-in\";ctx.filter=\"none\";ctx.font=fontStringFor(p.fontFamily,p.fontSize*d);ctx.letterSpacing=`${(p.letterSpacing||0)*d}px`;ctx.textAlign=\"center\";ctx.textBaseline=\"alphabetic\";ctx.fillStyle=\"#fff\";ctx.fillText(p.text,W/2,ascent);ctx.letterSpacing=\"0px\";ctx.globalCompositeOperation=\"source-over\";}function loop(){if(!runningRef.current)return;renderFrame();rafRef.current=requestAnimationFrame(loop);}// ---- Loop gate: single source of truth for whether the draw loop\n//      (and the <video> element's decode work) should be running.\n//      Runs the loop ONLY when: permission granted AND the component\n//      is inside the viewport AND the tab is visible. Everything else\n//      (scrolled offscreen, hidden tab) pauses both loop and video. ----\nfunction syncLoop(){const video=videoRef.current;const hidden=typeof document!==\"undefined\"?document.hidden:false;const shouldRun=hasPermissionRef.current&&inViewRef.current&&!hidden&&!!video&&!!streamRef.current;if(shouldRun){if(video.paused)video.play().catch(()=>{});if(!runningRef.current){runningRef.current=true;loop();}}else{runningRef.current=false;if(rafRef.current){cancelAnimationFrame(rafRef.current);rafRef.current=null;}if(video&&!video.paused)video.pause();}}// ---- Static / fallback canvas preview (no camera) ----\n//      Paints the text filled with the gradient. Used in TWO cases:\n//        1) the Framer editor canvas (isStatic), so designers can size\n//           the text without the camera running, and\n//        2) the graceful fallback on the live site when the visitor\n//           denies the camera or the browser can't provide it — the\n//           text still renders as an intentional, styled headline\n//           instead of going blank.\nuseLayoutEffect(()=>{if(!isStatic&&!cameraDenied)return;const canvas=canvasRef.current;if(!canvas||!canvas.width||!canvas.height)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;const W=canvas.width;const H=canvas.height;const d=dpr;const ascent=(textBox.ascent||fontSize*.72)*d;ctx.setTransform(1,0,0,1,0,0);ctx.globalCompositeOperation=\"source-over\";ctx.filter=\"none\";ctx.clearRect(0,0,W,H);const g=ctx.createLinearGradient(0,0,W,H);g.addColorStop(0,gradColorA);g.addColorStop(1,gradColorB);ctx.fillStyle=g;ctx.fillRect(0,0,W,H);ctx.globalCompositeOperation=\"destination-in\";ctx.font=fontStringFor(fontFamily,fontSize*d);ctx.letterSpacing=`${(letterSpacing||0)*d}px`;ctx.textAlign=\"center\";ctx.textBaseline=\"alphabetic\";ctx.fillStyle=\"#fff\";ctx.fillText(text,W/2,ascent);ctx.letterSpacing=\"0px\";ctx.globalCompositeOperation=\"source-over\";},[isStatic,cameraDenied,size.width,textHeightCSS,dpr,text,fontFamily,fontSize,letterSpacing,gradColorA,gradColorB,textBox.ascent,textBox.descent,fontsVersion]);// ---- Camera lifecycle ----\n// IMPORTANT: per the Framer Community review, the camera is requested\n// ONLY here, in direct response to the visitor's click/tap/keypress on\n// the \"Enable Camera\" control. There is no automatic request on load.\nconst requestingRef=useRef(false);const requestCamera=async()=>{if(requestingRef.current||hasPermission)return;requestingRef.current=true;try{setErrorMsg(null);// Clear any previous denial so a retry re-shows the consent UI\n// and re-arms the live loop cleanly.\nsetCameraDenied(false);if(typeof navigator===\"undefined\"||!navigator.mediaDevices?.getUserMedia){setErrorMsg(\"Your browser doesn't support camera access — showing a preview instead.\");setCameraDenied(true);return;}const stream=await navigator.mediaDevices.getUserMedia({video:{facingMode:\"user\"},audio:false});streamRef.current=stream;const video=videoRef.current;if(!video){stream.getTracks().forEach(t=>t.stop());return;}video.srcObject=stream;hasPermissionRef.current=true;setHasPermission(true);const start=()=>{video.play().then(()=>{// Hand control to the gate — it starts the loop only\n// if the component is actually visible right now.\nsyncLoop();}).catch(()=>setErrorMsg(\"Video playback blocked\"));};// Metadata can already be available by the time we attach.\nif(video.readyState>=1)start();else video.addEventListener(\"loadedmetadata\",start,{once:true});}catch(err){// Denied / blocked / no device: fall back to the styled preview\n// and surface a friendly, actionable message with Try again.\nconst name=err?.name||\"\";const friendly=name===\"NotAllowedError\"||name===\"SecurityError\"?\"Camera access was blocked. Showing a preview — you can try again anytime.\":name===\"NotFoundError\"||name===\"OverconstrainedError\"?\"No camera was found. Showing a preview instead.\":\"Couldn't start the camera. Showing a preview — you can try again.\";setErrorMsg(friendly);setCameraDenied(true);}finally{requestingRef.current=false;}};// Keyboard activation for the consent overlay (Enter / Space).\nconst onOverlayKeyDown=e=>{if(e.key===\"Enter\"||e.key===\" \"||e.key===\"Spacebar\"){e.preventDefault();requestCamera();}};// ---- Viewport visibility (Framer Community review requirement) ----\n// IntersectionObserver pauses the camera render loop the moment the\n// component leaves the viewport and resumes it when it re-enters, so\n// no video/canvas processing runs offscreen. Tab visibility changes\n// route through the same gate.\nuseEffect(()=>{if(isStatic)return;const el=containerRef.current;let io=null;if(el&&typeof IntersectionObserver!==\"undefined\"){io=new IntersectionObserver(entries=>{inViewRef.current=entries[0]?.isIntersecting??true;syncLoop();},// Small margin so the feed is already live as it scrolls in.\n{rootMargin:\"100px\"});io.observe(el);}const onVis=()=>syncLoop();if(typeof document!==\"undefined\")document.addEventListener(\"visibilitychange\",onVis);return()=>{io?.disconnect();if(typeof document!==\"undefined\")document.removeEventListener(\"visibilitychange\",onVis);};},[isStatic]);// Clean up the stream + loop on unmount.\nuseEffect(()=>{return()=>{runningRef.current=false;if(rafRef.current)cancelAnimationFrame(rafRef.current);streamRef.current?.getTracks().forEach(t=>t.stop());};},[]);// ---- Background (CSS, never drawn to canvas -> canvas stays untainted) ----\nconst bgStyles=bgType===\"Image\"&&bgImage?.src?{backgroundImage:`url(${bgImage.src})`,backgroundSize:\"cover\",backgroundPosition:\"center\"}:bgType===\"Gradient\"?{background:`linear-gradient(${gradAngle}deg, ${gradColorA}, ${gradColorB})`}:bgType===\"Transparent\"?{background:\"transparent\"}:{backgroundColor:bgColor};const cw=Math.max(1,Math.round(size.width*dpr));const ch=Math.max(1,Math.round(textHeightCSS*dpr));return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{position:\"relative\",// overflow visible so the glow can spill past the tight box\noverflow:\"visible\",boxSizing:\"border-box\",width:\"100%\",padding,...bgStyles,...style},children:[!isStatic&&!hasPermission&&!cameraDenied&&/*#__PURE__*/_jsxs(\"div\",{onClick:requestCamera,onKeyDown:onOverlayKeyDown,role:\"button\",tabIndex:0,\"aria-label\":\"Enable camera for the live text effect\",style:{position:\"absolute\",inset:0,zIndex:10,display:\"flex\",flexDirection:\"column\",justifyContent:\"center\",alignItems:\"center\",backgroundColor:\"rgba(0,0,0,0.6)\",backdropFilter:\"blur(2px)\",cursor:\"pointer\",padding:16,textAlign:\"center\"},children:[/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":\"true\",style:{fontSize:48,marginBottom:12},children:\"📷\"}),/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:FONT_STACKS.Inter,fontWeight:600,color:\"white\",marginBottom:6},children:\"This effect uses your camera\"}),/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:FONT_STACKS.Inter,fontSize:12,color:\"rgba(255,255,255,0.75)\",marginBottom:16,maxWidth:\"85%\"},children:\"The live feed is shown inside the text only, processed on your device — nothing is recorded or uploaded.\"}),/*#__PURE__*/_jsx(\"button\",{onClick:e=>{e.stopPropagation();requestCamera();},style:{padding:\"12px 24px\",backgroundColor:\"white\",color:\"black\",border:\"none\",borderRadius:8,fontFamily:FONT_STACKS.Inter,fontWeight:600,cursor:\"pointer\"},children:\"Enable Camera\"})]}),!isStatic&&!hasPermission&&cameraDenied&&/*#__PURE__*/_jsxs(\"div\",{role:\"status\",\"aria-live\":\"polite\",style:{position:\"absolute\",left:\"50%\",bottom:12,transform:\"translateX(-50%)\",zIndex:10,display:\"flex\",alignItems:\"center\",gap:10,maxWidth:\"92%\",padding:\"8px 10px 8px 14px\",borderRadius:999,backgroundColor:\"rgba(0,0,0,0.72)\",backdropFilter:\"blur(4px)\",boxShadow:\"0 4px 16px rgba(0,0,0,0.25)\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontFamily:FONT_STACKS.Inter,fontSize:12,lineHeight:1.35,color:\"rgba(255,255,255,0.9)\"},children:errorMsg||\"Camera unavailable. Showing a preview — you can try again anytime.\"}),/*#__PURE__*/_jsx(\"button\",{onClick:requestCamera,style:{flexShrink:0,padding:\"6px 14px\",backgroundColor:\"white\",color:\"black\",border:\"none\",borderRadius:999,fontFamily:FONT_STACKS.Inter,fontSize:12,fontWeight:600,cursor:\"pointer\"},children:\"Try again\"})]}),/*#__PURE__*/_jsx(\"video\",{ref:videoRef,playsInline:true,muted:true,autoPlay:true,style:{display:\"none\"}}),/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,width:cw,height:ch,style:{display:\"block\",position:\"relative\",width:\"100%\",height:textHeightCSS,pointerEvents:\"none\",filter:glowIntensity>0?`drop-shadow(0 0 ${glowIntensity}px ${glowColor})`:\"none\"}})]});}CameraTextMask.defaultProps={text:\"LOOK\",fontSize:240,letterSpacing:0,fontFamily:\"Inter\",mirror:true,filter:\"None\",pixelSize:9,duoShadow:\"#0a0a2a\",duoHighlight:\"#ff2d75\",haloInk:\"#ff3b1f\",haloPaper:\"#f2ead9\",padding:\"0px\",bgType:\"Solid\",bgColor:\"#000000\",gradColorA:\"#FF0080\",gradColorB:\"#7928CA\",gradAngle:135,glowIntensity:24,glowColor:\"rgba(255,255,255,0.8)\"};addPropertyControls(CameraTextMask,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"LOOK\",description:\"Uses the visitor's camera (only after they tap Enable Camera). Short, wide words reveal the most face — LOOK \\xb7 YOU \\xb7 SEE \\xb7 WAVE \\xb7 FACE. Avoid I, T, L at large sizes.\"},fontFamily:{type:ControlType.Enum,title:\"Font\",options:[\"Inter\",\"Poppins\",\"Helvetica\"],optionTitles:[\"Inter Black\",\"Poppins Black\",\"Helvetica Black Italic\"],defaultValue:\"Inter\",description:\"No fonts are downloaded at runtime. Inter/Poppins render when your site already bundles them (add them via Framer's font settings); otherwise a matching system font is used.\"},fontSize:{type:ControlType.Number,title:\"Font Size\",min:40,max:800,step:1,unit:\"px\",defaultValue:240},letterSpacing:{type:ControlType.Number,title:\"Letter Spacing\",min:-50,max:200,step:1,unit:\"px\",defaultValue:0,description:\"Space between letters. Can be negative to tighten.\"},mirror:{type:ControlType.Boolean,title:\"Mirror\",enabledTitle:\"Selfie\",disabledTitle:\"Normal\",defaultValue:true},filter:{type:ControlType.Enum,title:\"Filter\",options:[\"None\",\"Grayscale\",\"Sepia\",\"Invert\",\"Posterize\",\"Pixelate\",\"Dither\",\"ASCII\",\"Grain\",\"Halftone\",\"Thermal\",\"Duotone\",\"Edge\",\"Scanlines\",\"CRT\",\"Afterimage\"],optionTitles:[\"None\",\"Black & White\",\"Sepia\",\"Negative\",\"Posterize\",\"Pixelate\",\"Dither (1-Bit)\",\"ASCII\",\"Grain (Dust)\",\"Halftone (Riso)\",\"Thermal\",\"Duotone\",\"Edge Detect\",\"Scanlines\",\"CRT Phosphor\",\"Afterimage\"],defaultValue:\"None\"},pixelSize:{type:ControlType.Number,title:\"Chunkiness\",min:3,max:30,step:1,defaultValue:9,description:\"Cell size for ASCII, Dither, Pixelate and Halftone.\",hidden:p=>p.filter!==\"ASCII\"&&p.filter!==\"Dither\"&&p.filter!==\"Pixelate\"&&p.filter!==\"Halftone\"},duoShadow:{type:ControlType.Color,title:\"Duo Shadow\",defaultValue:\"#0a0a2a\",hidden:p=>p.filter!==\"Duotone\"},duoHighlight:{type:ControlType.Color,title:\"Duo Light\",defaultValue:\"#ff2d75\",hidden:p=>p.filter!==\"Duotone\"},haloInk:{type:ControlType.Color,title:\"Dot Ink\",defaultValue:\"#ff3b1f\",hidden:p=>p.filter!==\"Halftone\"},haloPaper:{type:ControlType.Color,title:\"Paper\",defaultValue:\"#f2ead9\",hidden:p=>p.filter!==\"Halftone\"},padding:{type:ControlType.Padding,title:\"Padding\",defaultValue:\"0px\",description:\"Space added around the text. The component height = text height + top/bottom padding.\"},glowIntensity:{type:ControlType.Number,title:\"Glow Blur\",min:0,max:200,step:1,defaultValue:24},glowColor:{type:ControlType.Color,title:\"Glow Color\",defaultValue:\"rgba(255,255,255,0.8)\",hidden:p=>p.glowIntensity<=0},bgType:{type:ControlType.Enum,title:\"Bg Type\",options:[\"Solid\",\"Transparent\",\"Gradient\",\"Image\"],defaultValue:\"Solid\"},bgColor:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\",hidden:p=>p.bgType!==\"Solid\"},gradColorA:{type:ControlType.Color,title:\"Color A\",defaultValue:\"#FF0080\",hidden:p=>p.bgType!==\"Gradient\"},gradColorB:{type:ControlType.Color,title:\"Color B\",defaultValue:\"#7928CA\",hidden:p=>p.bgType!==\"Gradient\"},gradAngle:{type:ControlType.Number,title:\"Angle\",min:0,max:360,step:1,unit:\"deg\",defaultValue:135,hidden:p=>p.bgType!==\"Gradient\"},bgImage:{type:ControlType.ResponsiveImage,title:\"Image\",hidden:p=>p.bgType!==\"Image\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CameraTextMask\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"240\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicWidth\":\"600\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Mirror_v2.map","// Generated by Framer (3ad0d99)\nexport default function metadata(params,activeLocale){return{description:\"Made with Framer\",robots:\"max-image-preview:large\",title:\"My Framer Site\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (e0e363b)\nimport siteMetadata from\"#framer/local/siteMetadata/siteMetadata/siteMetadata.js\";export default function metadata(params,activeLocale){return{breakpoints:[{hash:\"72rtr7\"}],description:siteMetadata(params,activeLocale).description,elements:{},robots:\"max-image-preview:large\",serializationId:\"framer-Huhhp\",title:siteMetadata(params,activeLocale).title||\"Home\",viewport:\"width=1200\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (d2fa8fd)\nimport siteMetadata from\"#framer/local/siteMetadata/siteMetadata/siteMetadata.js\";export default function metadata(params,activeLocale){return{breakpoints:[{hash:\"wstoag\"}],description:siteMetadata(params,activeLocale).description,elements:{},robots:\"max-image-preview:large\",serializationId:\"framer-OPHMp\",title:siteMetadata(params,activeLocale).title||\"Page\",viewport:\"width=1200\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}