{"version":3,"file":"shared-lib.DmEv5mN1.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/lFYqGtzrgXoZQEkDGvSS/mJchnRxTRdbAMSzMZCQZ/DNA_Background.js","https:/framerusercontent.com/modules/Chm7klvDhI6Q0l74JOjm/9SrP2TdMcfqlTSw7GVj5/OnC3GOW9k.js","https:/framerusercontent.com/modules/hGWQ6DoocusTRlKjXbzF/itczqvbEqpED3jEVlLGI/siteMetadata.js"],"sourcesContent":["// ============================================================================\n// DNA BACKGROUND — Framer Code Component\n// ----------------------------------------------------------------------------\n// HOW TO USE (once, ~2 minutes):\n//   1. In Framer, open the left panel → \"Assets\" tab.\n//   2. Next to \"Code\", click the + and choose \"New Code File\".\n//   3. Name it  DNABackground  and press Enter.\n//   4. Select ALL the starter text in that file and delete it.\n//   5. Copy EVERYTHING in this file and paste it in. Press Cmd/Ctrl+S.\n//   6. The component \"DNA Background\" now appears in your Assets → Code list.\n//   7. Drag it onto your page. In the layers panel, send it to the BACK,\n//      and set its size to \"Fill\" so it covers the whole page.\n//   8. On the right-hand panel you'll get two controls: Accent colour and\n//      Intensity. That's it — you never touch this code again.\n// ============================================================================\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useEffect}from\"react\";import{addPropertyControls,ControlType}from\"framer\";export default function DNABackground(props){const{accent=\"#4fd8c8\",intensity=1}=props;const rootRef=useRef(null);const canvasRef=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;let w=0,h=0,raf=0;const DPR=Math.min(1.5,window.devicePixelRatio||1);const mouse={x:.5,y:.5};const resize=()=>{const rect=rootRef.current?.getBoundingClientRect();const rectW=rect?.width??0;const rectH=rect?.height??0;w=rectW>0?rectW:window.innerWidth;h=rectH>0?rectH:window.innerHeight;canvas.width=w*DPR;canvas.height=h*DPR;ctx.setTransform(DPR,0,0,DPR,0,0);};resize();window.addEventListener(\"resize\",resize);const onMove=e=>{mouse.x=e.clientX/w;mouse.y=e.clientY/h;};window.addEventListener(\"mousemove\",onMove);const motes=Array.from({length:30},()=>({x:Math.random(),y:Math.random(),s:.5+Math.random()*1.8,v:1e-4+Math.random()*4e-4,ph:Math.random()*Math.PI*2}));const hexA=(hex,a)=>{const n=parseInt(hex.slice(1),16);return`rgba(${n>>16&255},${n>>8&255},${n&255},${a})`;};let t=0;const loop=()=>{raf=requestAnimationFrame(loop);const k=intensity;t+=.008*k;ctx.clearRect(0,0,w,h);const mx=(mouse.x-.5)*20;const my=(mouse.y-.5)*14;// drifting motes\nfor(const m of motes){m.y-=m.v*k;if(m.y<-.02){m.y=1.02;m.x=Math.random();}const tw=.25+.2*Math.sin(t*3+m.ph);ctx.beginPath();ctx.arc(m.x*w+mx*m.s*.4,m.y*h+my*m.s*.4,m.s,0,7);ctx.fillStyle=hexA(accent,tw*.5);ctx.fill();}// helix band\nconst amp=Math.min(120,w*.09);const x0=w*.3,x1=w*1;for(let strand=0;strand<2;strand++){ctx.beginPath();for(let x=x0;x<=x1;x+=6){const p=(x-x0)/(x1-x0);const yBase=h*.72-p*h*.55;const ang=p*Math.PI*4.2+t*2+strand*Math.PI;const y=yBase+Math.sin(ang)*amp*.35;if(x===x0)ctx.moveTo(x+mx,y+my);else ctx.lineTo(x+mx,y+my);}ctx.strokeStyle=\"rgba(110,168,255,.28)\";ctx.lineWidth=1.4;ctx.stroke();}// rungs + node dots\nfor(let i=0;i<=30;i++){const p=i/30;const x=x0+p*(x1-x0);const yBase=h*.72-p*h*.55;const ang=p*Math.PI*4.2+t*2;const y1=yBase+Math.sin(ang)*amp*.35;const y2=yBase+Math.sin(ang+Math.PI)*amp*.35;const depth=Math.cos(ang);ctx.beginPath();ctx.moveTo(x+mx,y1+my);ctx.lineTo(x+mx,y2+my);ctx.strokeStyle=hexA(accent,.05+.09*Math.abs(depth));ctx.lineWidth=1;ctx.stroke();ctx.beginPath();ctx.arc(x+mx,y1+my,2+Math.abs(depth)*1.4,0,7);ctx.fillStyle=\"rgba(110,168,255,.4)\";ctx.fill();ctx.beginPath();ctx.arc(x+mx,y2+my,2+(1-Math.abs(depth))*1.4,0,7);ctx.fillStyle=\"rgba(110,168,255,.4)\";ctx.fill();}};loop();return()=>{cancelAnimationFrame(raf);window.removeEventListener(\"resize\",resize);window.removeEventListener(\"mousemove\",onMove);};},[accent,intensity]);return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",pointerEvents:\"none\"}})});}// The two dials that show up on Framer's right-hand panel:\naddPropertyControls(DNABackground,{accent:{type:ControlType.Color,title:\"Accent\",defaultValue:\"#4fd8c8\"},intensity:{type:ControlType.Number,title:\"Intensity\",min:.2,max:2.5,step:.1,defaultValue:1}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DNABackground\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DNA_Background.map","// Generated by Framer (1a21bd5)\nimport{fontStore}from\"framer\";fontStore.loadFonts([]);export const fonts=[{explicitInter:true,fonts:[]}];export const css=[\".framer-h7qjP .framer-styles-preset-demdhc:not(.rich-text-wrapper), .framer-h7qjP .framer-styles-preset-demdhc.rich-text-wrapper a { --framer-link-current-text-color: #4fd8c8; --framer-link-current-text-decoration: none; --framer-link-hover-text-color: #ffffff; --framer-link-hover-text-decoration: none; --framer-link-text-color: rgba(226, 241, 245, 0.62); --framer-link-text-decoration: none; transition-delay: 0s; transition-duration: 0.2s; transition-property: color; transition-timing-function: cubic-bezier(0.44, 0, 0.56, 1); }\"];export const className=\"framer-h7qjP\";\nexport const __FramerMetadata__ = {\"exports\":{\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// 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\"}}}"],"mappings":"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"}