1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70731,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(69622),i=e.i(47163);let o=e=>new Map(e.split(",").map(e=>e.trim()).map(e=>{let[t,r]=e.split(" ");return[t.replace(/['"]/g,""),parseFloat(r)]})),s=(0,r.forwardRef)(({children:e,as:s="span",fromFontVariationSettings:l,toFontVariationSettings:a,containerRef:c,radius:u=50,falloff:p="linear",letterIndexOffset:v,className:d,...h},f)=>{var m;let w,g=(0,r.useRef)([]),b=(0,r.useRef)([]),j=(0,n.useMousePositionRef)(c),x=(0,r.useRef)(!1);(0,r.useEffect)(()=>{let e=()=>{x.current=!0};return window.addEventListener("mousemove",e,{once:!0}),window.addEventListener("touchstart",e,{once:!0}),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("touchstart",e)}},[]);let k=(0,r.useMemo)(()=>{let e=o(l),t=o(a);return Array.from(e.entries()).map(([e,r])=>({axis:e,fromValue:r,toValue:t.get(e)??r}))},[l,a]);m=()=>{if(!c.current||!x.current)return;let e=c.current.getBoundingClientRect();g.current.forEach((t,r)=>{let n;if(!t)return;let i=t.getBoundingClientRect(),o=i.left+i.width/2-e.left,s=i.top+i.height/2-e.top,a=(n=j.current.x,Math.sqrt(Math.pow(o-n,2)+Math.pow(s-j.current.y,2)));if(a>=u){t.style.fontVariationSettings!==l&&(t.style.fontVariationSettings=l);return}let c=(e=>{let t=Math.min(Math.max(1-e/u,0),1);switch(p){case"exponential":return Math.pow(t,2);case"gaussian":return Math.exp(-Math.pow(e/(u/2),2)/2);default:return t}})(a),v=k.map(({axis:e,fromValue:t,toValue:r})=>`'${e}' ${t+(r-t)*c}`).join(", ");b.current[r]=v,t.style.fontVariationSettings=v})},(w=(0,r.useRef)(m)).current=m,(0,r.useEffect)(()=>{let e=0,t=performance.now(),r=n=>{w.current(n,n-t),t=n,e=requestAnimationFrame(r)};return e=requestAnimationFrame(r),()=>cancelAnimationFrame(e)},[]);let L=String(e).split(" "),y=0;return(0,t.jsxs)(s,{ref:f,className:(0,i.cn)(d),...h,"data-text":String(e),children:[L.map((e,r)=>(0,t.jsxs)("span",{className:"inline-block whitespace-nowrap","aria-hidden":!0,children:[e.split("").map(e=>{let r=y++;return(0,t.jsx)("span",{ref:e=>{g.current[r]=e},className:"inline-block","aria-hidden":"true","data-letter":void 0===v?void 0:"",style:{fontVariationSettings:b.current[r]??l,...void 0===v?{}:{"--letter-i":v+r}},children:e},r)}),r<L.length-1&&(0,t.jsx)("span",{className:"inline-block",children:"Â "})]},r)),(0,t.jsx)("span",{className:"sr-only",children:e})]})});s.displayName="VariableFontCursorProximity",e.s(["default",0,s],70731)},37306,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(28985);let i=1e3/60;e.s(["default",0,function({color:e="#082ae5",flip:o=!1,swell:s=!1}){let l=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let t=l.current,r=t?.getContext("2d");if(!t||!r)return;let a=window.matchMedia(n.REDUCED_MOTION).matches,c=Math.min(2,window.devicePixelRatio||1),u=0,p=0,v=new Float32Array(0),d=new Float32Array(0),h=new Float32Array(0),f=!1,m=t=>{r.setTransform(c,0,0,c,0,0),r.clearRect(0,0,u,56),r.beginPath(),r.moveTo(0,56);for(let e=0;e<p;e++){let n=6*e,i=a?0:2.2*Math.sin(.012*n+.0011*t)+1.6*Math.sin(.027*n-.0017*t);r.lineTo(n,32-v[e]-i)}r.lineTo(u,56),r.closePath(),r.fillStyle=e,r.fill()},w=()=>{v=new Float32Array(p=Math.ceil((u=t.clientWidth)/6)+1),d=new Float32Array(p),h=new Float32Array(p),t.width=u*c,t.height=56*c,m(performance.now())};w();let g=new ResizeObserver(()=>{t.clientWidth!==u&&w()});if(g.observe(t),a)return()=>g.disconnect();let b=(e,t)=>{let r=Math.round(e/6);for(let e=-5;e<=5;e++){let n=r+e;n>=0&&n<p&&(d[n]+=t*Math.exp(-(e*e)/8))}f=!0},j=()=>{let e=0;for(let t=0;t<p;t++)d[t]+=-.02*v[t]-.018*d[t],v[t]=Math.max(-20,Math.min(28,v[t]+d[t])),e=Math.max(e,Math.abs(d[t]),.1*Math.abs(v[t]));for(let e=0;e<3;e++){h.fill(0);for(let e=0;e<p;e++)e>0&&(h[e-1]+=.22*(v[e]-v[e-1])),e<p-1&&(h[e+1]+=.22*(v[e]-v[e+1]));for(let e=0;e<p;e++)d[e]+=h[e]}return!(e<.03)||(v.fill(0),d.fill(0),!1)},x=null,k=e=>{if("touch"===e.pointerType)return;let r=t.getBoundingClientRect(),n=e.clientX-r.left;L=n;let i=(o?56-(e.clientY-r.top):e.clientY-r.top)-32;if(x&&48>=Math.abs(i)){let e=n-x.x,t=i-x.y,r=Math.hypot(e,t);if(r>=1)if(Math.sign(i)!==Math.sign(x.y)){let e=Math.min(6,1.6+.22*r);b(n,i>0?-e:e)}else{let e=1-Math.abs(i)/48;b(n,Math.max(-2,Math.min(2,t*(i>0?-.16:.16)-.025*r))*e)}}x={x:n,y:i}},L=null,y=window.scrollY,M=performance.now(),R=!1,_=()=>{let e=performance.now(),t=window.scrollY,r=Math.abs(t-y)/Math.max(1,e-M),n=window.innerHeight+t>=document.documentElement.scrollHeight-2;if(n&&!R&&t>y){let e=Math.min(9,4+3*r),t=L??u*(.35+.3*Math.random());b(t-8,-e),b(t+8,-e)}R=n,y=t,M=e},E=0,S=0,A=0,T=0,C=e=>{for(E=requestAnimationFrame(C),S+=Math.min(100,e-A),A=e;S>=i;)f&&(f=j()),S-=i;(f||(1&T++)==0)&&m(e)},F=()=>{cancelAnimationFrame(E),E=0,x=null,window.removeEventListener("pointermove",k),window.removeEventListener("scroll",_)}
1,V=new IntersectionObserver(([e])=>{if(!e.isIntersecting)return F();if(E||(A=performance.now(),E=requestAnimationFrame(C),window.addEventListener("pointermove",k,{passive:!0}),window.addEventListener("scroll",_,{passive:!0})),s&&e.boundingClientRect.top>0)for(let e=0;e<=72;e+=12)b(e,3.2)},{rootMargin:"48px"});return V.observe(t),()=>{F(),g.disconnect(),V.disconnect()}},[e,o,s]),(0,t.jsx)("canvas",{ref:l,"aria-hidden":!0,className:`px-footer-water pointer-events-none block w-full${o?" -scale-y-100":""}`,style:{height:56}})}])},88205,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(28985),i=e.i(91606);let o=[{x0:0,x1:83,d:["M80.23 17.58c-1.62-4.12-4.16-7.54-7.62-10.25-3.42-2.71-7.81-4.48-13.19-5.31-1.17-.21-2.49-.34-4-.38-1.46-.08-2.63-.12-3.5-.12H31.05v15.87h20.13c.87 0 1.83.04 2.87.12q1.56.135 2.88.51c2.29.62 4.05 1.68 5.31 3.19 1.24 1.46 2.1 3.1 2.56 4.93.5 1.8.75 3.5.75 5.13s-.25 3.35-.75 5.19c-.46 1.79-1.32 3.43-2.56 4.93-1.26 1.46-3.02 2.5-5.31 3.12q-1.32.39-2.88.51c-1.04.08-2 .12-2.87.12H30.92v15.88h21c.83 0 2-.04 3.5-.13 1.51-.08 2.83-.21 4-.37 5.34-.84 9.71-2.61 13.13-5.31 3.45-2.71 6-6.11 7.62-10.19 1.67-4.12 2.5-8.71 2.5-13.75s-.81-9.61-2.44-13.69m-66.31.29v27.27h17V17.87z","M13.92 45.14h17L17 90.92H0z"]},{x0:87,x1:148,d:["M87.97 91.51V1.08H147v15.95h-41.95v19.34h34.41v15.95h-34.41v23.24H147v15.95z"]},{x0:152,x1:224,d:["M219.17 17.22c-1.63-4.14-4.18-7.57-7.66-10.29-3.43-2.73-7.85-4.5-13.25-5.34-1.17-.21-2.51-.34-4.02-.38q-2.19-.12-3.51-.12h-20.85v15.95h20.09c.88 0 1.84.04 2.89.12 1.05.09 2.01.25 2.89.5q3.45.945 5.34 3.21c1.25 1.46 2.11 3.12 2.57 4.96.51 1.8.76 3.52.76 5.15s-.25 3.37-.76 5.21c-.46 1.8-1.32 3.45-2.57 4.96-1.26 1.47-3.04 2.51-5.34 3.14-.88.25-1.84.42-2.89.5-1.05.09-2.01.13-2.89.13h-20.34V17.11h-17.09v74.41h17.09V60.87h21.1l7.53-.5c3.08-.48 5.84-1.26 8.29-2.35 3.96-1.74 7.09-4.27 9.42-7.57 3.77-5.4 5.65-11.89 5.65-19.47 0-5.07-.81-9.65-2.45-13.76m-12.62 40.8-3.26-6.69-17.59 3.39 2.98 6.15 14.86 30.65h19.34z"]},{x0:227,x1:310,d:["m228.05 91.78 30.4-45.72-29.52-44.71h20.97l19.22 30.14 18.97-30.14h21.1l-29.52 44.71 30.27 45.72h-20.98l-19.85-31.15-19.97 31.15h-21.1z"]},{x0:315,x1:376,d:["M316.46 91.78V1.35h59.03V17.3h-41.95v19.34h34.42v15.95h-34.42v23.24h41.95v15.95z"]},{x0:380,x1:438,d:["M437.31 75.84v15.95h-56.02V17.52h17.09v58.32z","M415.66 0h-17.2v17.52h17.2z"]}],s=1e3/60;e.s(["default",0,function(){let e=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let t=e.current,r=t?.getContext("2d");if(!t||!r)return;let l=window.matchMedia(n.REDUCED_MOTION).matches,a=o.map(e=>e.d.map(e=>new Path2D(e))),c=o.length,u=new i.Seaweed(o.map((e,t)=>1.7*t+.8*Math.random())),p=1,v=0,d=0,h=0,f=0,m=0,w=[],g=[],b=[],j=()=>{p=Math.min(2,window.devicePixelRatio||1),v=t.clientWidth,d=t.clientHeight,h=(v-(t.parentElement?.clientWidth??v))/2,t.width=Math.round(v*p),t.height=Math.round(d*p),m=d/120,b=o.map(e=>(e.x1-e.x0)*m);let e=(v-2*h-b.reduce((e,t)=>e+t,0))/(c-1);g=[];let r=h;for(let t=0;t<c;t++)g.push(r),r+=b[t]+e;f=Math.max(0,Math.min(.35*e,h,92*m*.5)),w=o.map((e,t)=>{let r=document.createElement("canvas");r.width=Math.ceil(b[t]*p),r.height=Math.ceil(92*m*p);let n=r.getContext("2d");for(let r of(n.scale(m*p,m*p),n.translate(-e.x0,0),n.fillStyle="rgb(255 255 255 / 0.12)",a[t]))n.fill(r);return r}),x()},x=()=>{r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,t.width,t.height);let e=Math.round(d*p);for(let t=0;t<c;t++){let n=w[t],o=n.height,s=g[t]*p,l=e-o;(0,i.drawBent)(r,n,0,0,n.width,o,s,l,o,o,u.sway[t]*p)}};j();let k=new ResizeObserver(()=>{(t.clientWidth!==v||t.clientHeight!==d)&&j()});if(k.observe(t),l)return()=>k.disconnect();let L=(e,t)=>u.push(e,t),y=null,M=e=>{if("touch"===e.pointerType)return;let r=t.getBoundingClientRect(),n=e.clientX-r.left,i=e.clientY-r.top;if(y&&i>-24&&i<d){let e=Math.max(-40,Math.min(40,n-y.x)),t=Math.max(.25,Math.min(1,(d-i)/d));for(let r=0;r<c;r++){let i=.3*b[r];n>g[r]-i&&n<g[r]+b[r]+i&&L(r,.035*e*t)}}y={x:n,y:i}},R=e=>{if("touch"!==e.pointerType)return;let r=t.getBoundingClientRect(),n=e.clientX-r.left,i=e.clientY-r.top;if(!(i<-24)&&!(i>d))for(let e=0;e<c;e++){let t=g[e]+b[e]/2;Math.abs(t-n)<1.5*b[e]&&L(e,2.5*Math.sign(t-n||1))}},_=window.scrollY,E=()=>{let e=Math.max(-60,Math.min(60,window.scrollY-_));_=window.scrollY;for(let t=0;t<c;t++)L(t,.012*e)},S=e=>u.step(e,f),A=0,T=0,C=0,F=0,V=e=>{A=requestAnimationFrame(V),T+=Math.min(100,e-C),C=e;let t=!1;for(;T>=s;)t=S(e)||t,T-=s;(t||(1&F++)==0)&&x()},I=()=>{cancelAnimationFrame(A),A=0,y=null,window.removeEventListener("pointermove",M),window.removeEventListener("pointerdown",R),window.removeEventListener("scroll",E)},N=new IntersectionObserver(([e])=>{e.isIntersecting?A||(C=performance.now(),_=window.scrollY,A=requestAnimationFrame(V),window.addEventListener("pointermove",M,{passive:!0}),window.addEventListener("pointerdown",R,{passive:!0}),window.addEventListener("scroll",E,{passive:!0})):I()});return N.observe(t),()=>{I(),k.disconnect(),N.disconnect()}}
1,[]),(0,t.jsx)("div",{"aria-hidden":!0,className:"px-footer-wordmark relative h-[calc(40vw*120/438)] w-full",children:(0,t.jsx)("canvas",{ref:e,className:"pointer-events-none absolute inset-y-0 -left-[3vw] -right-[3vw] block h-full w-[calc(100%+6vw)]"})})}])},44764,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(47163);let i=` 2#ifdef GL_ES 3precision highp float; 4#endif 5 6uniform vec2 u_mouse; 7uniform vec2 u_resolution; 8uniform float u_pixelRatio; 9uniform float u_time; 10uniform int u_shape; 11uniform vec3 u_lineColor; 12uniform vec3 u_bgColor; 13uniform bool u_bgTransparent; 14 15#define PI 3.1415926535897932384626433832795 16#define TWO_PI 6.2831853071795864769252867665590 17 18// 3D rotation matrices 19mat3 rotateX(float angle) { 20 float s = sin(angle); 21 float c = cos(angle); 22 return mat3( 23 1.0, 0.0, 0.0, 24 0.0, c, -s, 25 0.0, s, c 26 ); 27} 28 29mat3 rotateY(float angle) { 30 float s = sin(angle); 31 float c = cos(angle); 32 return mat3( 33 c, 0.0, s, 34 0.0, 1.0, 0.0, 35 -s, 0.0, c 36 ); 37} 38 39mat3 rotateZ(float angle) { 40 float s = sin(angle); 41 float c = cos(angle); 42 return mat3( 43 c, -s, 0.0, 44 s, c, 0.0, 45 0.0, 0.0, 1.0 46 ); 47} 48 49// Coordinate normalization 50vec2 coord(in vec2 p) { 51 p = p / u_resolution.xy; 52 if (u_resolution.x > u_resolution.y) { 53 p.x *= u_resolution.x / u_resolution.y; 54 p.x += (u_resolution.y - u_resolution.x) / u_resolution.y / 2.0; 55 } else { 56 p.y *= u_resolution.y / u_resolution.x; 57 p.y += (u_resolution.x - u_resolution.y) / u_resolution.x / 2.0; 58 } 59 p -= 0.5; 60 return p; 61} 62 63// Project 3D point to 2D 64vec2 project(vec3 p) { 65 float perspective = 2.0 / (2.0 - p.z); 66 return p.xy * perspective; 67} 68 69// Distance from point to line segment 70float distToSegment(vec2 p, vec2 a, vec2 b) { 71 vec2 pa = p - a; 72 vec2 ba = b - a; 73 float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0); 74 return length(pa - ba * h); 75} 76 77// Draw a line with blur effect 78float drawLine(vec2 p, vec2 a, vec2 b, float thickness, float blur) { 79 float d = distToSegment(p, a, b); 80 return smoothstep(thickness + blur, thickness - blur, d); 81} 82 83// Get cube vertices 84void getCubeVertices(out vec3 v[8]) { 85 float s = 0.7; // Scale down cube 86 v[0] = vec3(-s, -s, -s); 87 v[1] = vec3( s, -s, -s); 88 v[2] = vec3( s, s, -s); 89 v[3] = vec3(-s, s, -s); 90 v[4] = vec3(-s, -s, s); 91 v[5] = vec3( s, -s, s); 92 v[6] = vec3( s, s, s); 93 v[7] = vec3(-s, s, s); 94} 95 96// Get tetrahedron vertices 97void getTetrahedronVertices(out vec3 v[4]) { 98 float a = 1.0 / sqrt(3.0); 99 v[0] = vec3( a, a, a); 100 v[1] = vec3( a, -a, -a); 101 v[2] = vec3(-a, a, -a); 102 v[3] = vec3(-a, -a, a); 103} 104 105// Get octahedron vertices 106void getOctahedronVertices(out vec3 v[6]) { 107 v[0] = vec3( 1.0, 0.0, 0.0); 108 v[1] = vec3(-1.0, 0.0, 0.0); 109 v[2] = vec3( 0.0, 1.0, 0.0); 110 v[3] = vec3( 0.0, -1.0, 0.0); 111 v[4] = vec3( 0.0, 0.0, 1.0); 112 v[5] = vec3( 0.0, 0.0, -1.0); 113} 114 115// Get icosahedron vertices (12 vertices) 116void getIcosahedronVertices(out vec3 v[12]) { 117 float t = (1.0 + sqrt(5.0)) / 2.0; 118 float s = 1.0 / sqrt(1.0 + t * t); 119 120 v[0] = vec3(-s, t * s, 0); 121 v[1] = vec3( s, t * s, 0); 122 v[2] = vec3(-s, -t * s, 0); 123 v[3] = vec3( s, -t * s, 0); 124 125 v[4] = vec3(0, -s, t * s); 126 v[5] = vec3(0, s, t * s); 127 v[6] = vec3(0, -s, -t * s); 128 v[7] = vec3(0, s, -t * s); 129 130 v[8] = vec3( t * s, 0, -s); 131 v[9] = vec3( t * s, 0, s); 132 v[10] = vec3(-t * s, 0, -s); 133 v[11] = vec3(-t * s, 0, s); 134} 135 136// Transform and project vertices 137void transformVertices(inout vec3 vertices[12], int count, mat3 rotation, float scale) { 138 for (int i = 0; i < 12; i++) { 139 if (i < count) { 140 vertices[i] = rotation * (vertices[i] * scale); 141 } 142 } 143} 144 145// Draw wireframe shape 146float drawWireframe(vec2 p, int shape, mat3 rotation, float scale, float thickness, float blur) { 147 float result = 0.0; 148 149 if (shape == 0) { 150 // Cube - 12 edges 151 vec3 v[8]; 152 getCubeVertices(v); 153 154 // Transform vertices 155 for (int i = 0; i < 8; i++) { 156 v[i] = rotation * (v[i] * scale); 157 } 158 159 // Draw edges 160 // Bottom face 161 result += drawLine(p, project(v[0]), project(v[1]), thickness, blur); 162 result += drawLine(p, project(v[1]), project(v[2]), thickness, blur); 163 result += drawLine(p, project(v[2]), project(v[3]), thickness, blur); 164 result += drawLine(p, project(v[3]), project(v[0]), thickness, blur); 165 166 // Top face 167 result += drawLine(p, project(v[4]), project(v[5]), thickness, blur); 168 result += drawLine(p, project(v[5]), project(v[6]), thickness, blur); 169 result += drawLine(p, project(v[6]), project(v[7]), thickness, blur); 170 result += drawLine(p, project(v[7]), project(v[4]), thickness, blur); 171 172 // Vertical edges 173 result += drawLine(p, project(v[0]), project(v[4]), thickness, blur); 174 result += drawLine(p, project(v[1]), project(v[5]), thickness, blur); 175 result += drawLine(p, project(v[2]), project(v[6]), thickness, blur); 176 result += drawLine(p, project(v[3]), project(v[7]), thickness, blur); 177 178 } else if (shape == 1) { 179 // Tetrahedron - 6 edges 180 vec3 v[4]; 181 getTetrahedronVertices(v); 182 183 // Transform vertices 184 for (int i = 0; i < 4; i++) { 185 v[i] = rotation * (v[i] * scale); 186 } 187 188 // Draw all edges 189 result += drawLine(p, project(v[0]), project(v[1]), thickness, blur); 190 result += drawLine(p, project(v[0]), project(v[2]), thickness, blur); 191 result += drawLine(p, project(v[0]), project(v[3]), thickness, blur); 192 result += drawLine(p, project(v[1]), project(v[2]), thickness, blur); 193 result += drawLine(p, project(v[1]), project(v[3]), thickness, blur); 194 result += drawLine(p, project(v[2]), project(v[3]), thickness, blur); 195 196 } else if (shape == 2) { 197 // Octahedron - 12 edges 198 vec3 v[6]; 199 getOctahedronVertices(v); 200 201 // Transform vertices 202 for (int i = 0; i < 6; i++) { 203 v[i] = rotation * (v[i] * scale); 204 } 205 206 // Draw edges connecting to top vertex 207 result += drawLine(p, project(v[2]), project(v[0]), thickness, blur); 208 result += drawLine(p, project(v[2]), project(v[1]), thickness, blur); 209 result += drawLine(p, project(v[2]), project(v[4]), thickness, blur); 210 result += drawLine(p, project(v[2]), project(v[5]), thickness, blur); 211 212 // Draw edges connecting to bottom vertex 213 result += drawLine(p, project(v[3]), project(v[0]), thickness, blur); 214 result += drawLine(p, project(v[3]), project(v[1]), thickness, blur); 215 result += drawLine(p, project(v[3]), project(v[4]), thickness, blur); 216 result += drawLine(p, project(v[3]), project(v[5]), thickness, blur); 217 218 // Draw middle square 219 result += drawLine(p, project(v[0]), project(v[4]), thickness, blur); 220 result += drawLine(p, project(v[4]), project(v[1]), thickness, blur); 221 result += drawLine(p, project(v[1]), project(v[5]), thickness, blur); 222 result += drawLine(p, project(v[5]), project(v[0]), thickness, blur); 223 224 } else if (shape == 3) { 225 // Icosahedron - 30 edges 226 vec3 v[12]; 227 getIcosahedronVertices(v); 228 229 // Transform vertices 230 for (int i = 0; i < 12; i++) { 231 v[i] = rotation * (v[i] * scale); 232 } 233 234 // Draw all 30 edges of icosahedron 235 // Each vertex connects to exactly 5 others 236 237 // Vertex 0 connections 238 result += drawLine(p, project(v[0]), project(v[1]), thickness, blur); 239 result += drawLine(p, project(v[0]), project(v[5]), thickness, blur); 240 result += drawLine(p, project(v[0]), project(v[7]), thickness, blur); 241 result += drawLine(p, project(v[0]), project(v[10]), thickness, blur); 242 result += drawLine(p, project(v[0]), project(v[11]), thickness, blur); 243 244 // Vertex 1 connections (excluding already drawn) 245 result += drawLine(p, project(v[1]), project(v[5]), thickness, blur); 246 result += drawLine(p, project(v[1]), project(v[7]), thickness, blur); 247 result += drawLine(p, project(v[1]), project(v[8]), thickness, blur); 248 result += drawLine(p, project(v[1]), project(v[9]), thickness, blur); 249 250 // Vertex 2 connections 251 result += drawLine(p, project(v[2]), project(v[3]), thickness, blur); 252 result += drawLine(p, project(v[2]), project(v[4]), thickness, blur); 253 result += drawLine(p, project(v[2]), project(v[6]), thickness, blur); 254 result += drawLine(p, project(v[2]), project(v[10]), thickness, blur); 255 result += drawLine(p, project(v[2]), project(v[11]), thickness, blur); 256 257 // Vertex 3 connections (excluding already drawn) 258 result += drawLine(p, project(v[3]), project(v[4]), thickness, blur); 259 result += drawLine(p, project(v[3]), project(v[6]), thickness, blur); 260 result += drawLine(p, project(v[3]), project(v[8]), thickness, blur); 261 result += drawLine(p, project(v[3]), project(v[9]), thickness, blur); 262 263 // Vertex 4 connections (excluding already drawn) 264 result += drawLine(p, project(v[4]), project(v[5]), thickness, blur); 265 result += drawLine(p, project(v[4]), project(v[11]), thickness, blur); 266 267 // Vertex 5 connections (excluding already drawn) 268 result += drawLine(p, project(v[5]), project(v[11]), thickness, blur); 269 270 // Vertex 6 connections (excluding already drawn) 271 result += drawLine(p, project(v[6]), project(v[7]), thickness, blur); 272 result += drawLine(p, project(v[6]), project(v[8]), thickness, blur); 273 result += drawLine(p, project(v[6]), project(v[10]), thickness, blur); 274 275 // Vertex 7 connections (excluding already drawn) 276 result += drawLine(p, project(v[7]), project(v[10]), thickness, blur); 277 278 // Vertex 8 connections (excluding already drawn) 279 result += drawLine(p, project(v[8]), project(v[9]), thickness, blur); 280 281 // Vertex 9 connections (excluding already drawn) 282 result += drawLine(p, project(v[9]), project(v[11]), thickness, blur); 283 284 // Vertex 10 connections (excluding already drawn) 285 result += drawLine(p, project(v[10]), project(v[11]), thickness, blur); 286 287 } else if (shape == 4) { 288 // Pyramid - 8 edges 289 vec3 v[5]; 290 float s = 0.7; // Scale down pyramid base 291 v[0] = vec3(-s, 0.0, -s); 292 v[1] = vec3( s, 0.0, -s); 293 v[2] = vec3( s, 0.0, s); 294 v[3] = vec3(-s, 0.0, s); 295 v[4] = vec3( 0.0, 1.0, 0.0); // Lower height 296 297 // Transform vertices 298 for (int i = 0; i < 5; i++) { 299 v[i] = rotation * (v[i] * scale); 300 } 301 302 // Base 303 result += drawLine(p, project(v[0]), project(v[1]), thickness, blur); 304 result += drawLine(p, project(v[1]), project(v[2]), thickness, blur); 305 result += drawLine(p, project(v[2]), project(v[3]), thickness, blur); 306 result += drawLine(p, project(v[3]), project(v[0]), thickness, blur); 307 308 // Edges to apex 309 result += drawLine(p, project(v[0]), project(v[4]), thickness, blur); 310 result += drawLine(p, project(v[1]), project(v[4]), thickness, blur); 311 result += drawLine(p, project(v[2]), project(v[4]), thickness, blur); 312 result += drawLine(p, project(v[3]), project(v[4]), thickness, blur); 313 314 } else if (shape == 5) { 315 // Double pyramid (diamond) - 12 edges 316 vec3 v[6]; 317 float s = 0.6; // Scale down diamond 318 v[0] = vec3(-s, 0.0, -s); 319 v[1] = vec3( s, 0.0, -s); 320 v[2] = vec3( s, 0.0, s); 321 v[3] = vec3(-s, 0.0, s); 322 v[4] = vec3( 0.0, 1.0, 0.0); 323 v[5] = vec3( 0.0, -1.0, 0.0); 324 325 // Transform vertices 326 for (int i = 0; i < 6; i++) { 327 v[i] = rotation * (v[i] * scale); 328 } 329 330 // Middle square 331 result += drawLine(p, project(v[0]), project(v[1]), thickness, blur); 332 result += drawLine(p, project(v[1]), project(v[2]), thickness, blur); 333 result += drawLine(p, project(v[2]), project(v[3]), thickness, blur); 334 result += drawLine(p, project(v[3]), project(v[0]), thickness, blur); 335 336 // Top pyramid 337 result += drawLine(p, project(v[0]), project(v[4]), thickness, blur); 338 result += drawLine(p, project(v[1]), project(v[4]), thickness, blur); 339 result += drawLine(p, project(v[2]), project(v[4]), thickness, blur); 340 result += drawLine(p, project(v[3]), project(v[4]), thickness, blur); 341 342 // Bottom pyramid 343 result += drawLine(p, project(v[0]), project(v[5]), thickness, blur); 344 result += drawLine(p, project(v[1]), project(v[5]), thickness, blur); 345 result += drawLine(p, project(v[2]), project(v[5]), thickness, blur); 346 result += drawLine(p, project(v[3]), project(v[5]), thickness, blur); 347 348 } else if (shape == 6) { 349 // Hexagonal prism - 18 edges 350 vec3 v[12]; 351 float angleStep = TWO_PI / 6.0; 352 353 // Generate hexagon vertices - unrolled loop 354 v[0] = vec3(cos(0.0 * angleStep), -1.0, sin(0.0 * angleStep)); 355 v[1] = vec3(cos(1.0 * angleStep), -1.0, sin(1.0 * angleStep)); 356 v[2] = vec3(cos(2.0 * angleStep), -1.0, sin(2.0 * angleStep)); 357 v[3] = vec3(cos(3.0 * angleStep), -1.0, sin(3.0 * angleStep)); 358 v[4] = vec3(cos(4.0 * angleStep), -1.0, sin(4.0 * angleStep)); 359 v[5] = vec3(cos(5.0 * angleStep), -1.0, sin(5.0 * angleStep)); 360 361 v[6] = vec3(cos(0.0 * angleStep), 1.0, sin(0.0 * angleStep)); 362 v[7] = vec3(cos(1.0 * angleStep), 1.0, sin(1.0 * angleStep)); 363 v[8] = vec3(cos(2.0 * angleStep), 1.0, sin(2.0 * angleStep)); 364 v[9] = vec3(cos(3.0 * angleStep), 1.0, sin(3.0 * angleStep)); 365 v[10] = vec3(cos(4.0 * angleStep), 1.0, sin(4.0 * angleStep)); 366 v[11] = vec3(cos(5.0 * angleStep), 1.0, sin(5.0 * angleStep)); 367 368 // Transform vertices - unrolled loop 369 v[0] = rotation * (v[0] * scale); 370 v[1] = rotation * (v[1] * scale); 371 v[2] = rotation * (v[2] * scale); 372 v[3] = rotation * (v[3] * scale); 373 v[4] = rotation * (v[4] * scale); 374 v[5] = rotation * (v[5] * scale); 375 v[6] = rotation * (v[6] * scale); 376 v[7] = rotation * (v[7] * scale); 377 v[8] = rotation * (v[8] * scale); 378 v[9] = rotation * (v[9] * scale); 379 v[10] = rotation * (v[10] * scale); 380 v[11] = rotation * (v[11] * scale); 381 382 // Draw bottom hexagon - unrolled 383 result += drawLine(p, project(v[0]), project(v[1]), thickness, blur); 384 result += drawLine(p, project(v[1]), project(v[2]), thickness, blur); 385 result += drawLine(p, project(v[2]), project(v[3]), thickness, blur); 386 result += drawLine(p, project(v[3]), project(v[4]), thickness, blur); 387 result += drawLine(p, project(v[4]), project(v[5]), thickness, blur); 388 result += drawLine(p, project(v[5]), project(v[0]), thickness, blur); 389 390 // Draw top hexagon - unrolled 391 result += drawLine(p, project(v[6]), project(v[7]), thickness, blur); 392 result += drawLine(p, project(v[7]), project(v[8]), thickness, blur); 393 result += drawLine(p, project(v[8]), project(v[9]), thickness, blur); 394 result += drawLine(p, project(v[9]), project(v[10]), thickness, blur); 395 result += drawLine(p, project(v[10]), project(v[11]), thickness, blur); 396 result += drawLine(p, project(v[11]), project(v[6]), thickness, blur); 397 398 // Draw vertical edges - unrolled 399 result += drawLine(p, project(v[0]), project(v[6]), thickness, blur); 400 result += drawLine(p, project(v[1]), project(v[7]), thickness, blur); 401 result += drawLine(p, project(v[2]), project(v[8]), thickness, blur); 402 result += drawLine(p, project(v[3]), project(v[9]), thickness, blur); 403 result += drawLine(p, project(v[4]), project(v[10]), thi
403ckness, blur); 404 result += drawLine(p, project(v[5]), project(v[11]), thickness, blur); 405 406 } else { 407 // Animated morphing shape 408 float t = u_time * 0.5; 409 float morph = sin(t) * 0.5 + 0.5; 410 411 // Morph between cube and octahedron 412 vec3 cube[8]; 413 getCubeVertices(cube); 414 415 vec3 octa[6]; 416 getOctahedronVertices(octa); 417 418 // Create morphed vertices 419 vec3 v[8]; 420 for (int i = 0; i < 8; i++) { 421 if (i < 6) { 422 v[i] = mix(cube[i], octa[i] * 1.5, morph); 423 } else { 424 v[i] = cube[i] * (1.0 - morph * 0.3); 425 } 426 v[i] = rotation * (v[i] * scale); 427 } 428 429 // Draw morphed edges 430 float alpha = 1.0 - morph * 0.5; 431 432 // Cube edges (fade out as morphing) 433 result += drawLine(p, project(v[0]), project(v[1]), thickness, blur) * alpha; 434 result += drawLine(p, project(v[1]), project(v[2]), thickness, blur) * alpha; 435 result += drawLine(p, project(v[2]), project(v[3]), thickness, blur) * alpha; 436 result += drawLine(p, project(v[3]), project(v[0]), thickness, blur) * alpha; 437 438 result += drawLine(p, project(v[4]), project(v[5]), thickness, blur) * alpha; 439 result += drawLine(p, project(v[5]), project(v[6]), thickness, blur) * alpha; 440 result += drawLine(p, project(v[6]), project(v[7]), thickness, blur) * alpha; 441 result += drawLine(p, project(v[7]), project(v[4]), thickness, blur) * alpha; 442 443 // Morphing diagonals (octahedron-like) 444 result += drawLine(p, project(v[0]), project(v[6]), thickness, blur) * morph; 445 result += drawLine(p, project(v[1]), project(v[7]), thickness, blur) * morph; 446 result += drawLine(p, project(v[2]), project(v[4]), thickness, blur) * morph; 447 result += drawLine(p, project(v[3]), project(v[5]), thickness, blur) * morph; 448 } 449 450 return clamp(result, 0.0, 1.0); 451} 452 453// Main rendering function 454vec3 render(vec2 st, vec2 mouse) { 455 // Calculate mouse influence for hover effect - stronger falloff 456 float mouseDistance = length(st - mouse); 457 float mouseInfluence = 1.0 - smoothstep(0.0, 0.5, mouseDistance); 458 459 // Smooth rotation based on time and subtle mouse influence 460 float time = u_time * 0.2; 461 mat3 rotation = rotateY(time + (mouse.x - 0.5) * mouseInfluence * 1.0) * 462 rotateX(time * 0.7 + (mouse.y - 0.5) * mouseInfluence * 1.0) * 463 rotateZ(time * 0.1); 464 465 // Single layer with elegant parameters 466 float scale = 0.35; 467 468 // INVERTED: Hover creates blur effect 469 // Near mouse: blurry (0.05), far from mouse: sharp (0.0001) 470 float blur = mix(0.0001, 0.05, mouseInfluence); 471 472 // Dynamic thickness - thicker when blurred, thinner when clear 473 float thickness = mix(0.002, 0.003, mouseInfluence); 474 475 // Draw wireframe 476 float shape = drawWireframe(st, u_shape, rotation, scale, thickness, blur); 477 478 vec3 color = u_lineColor; 479 480 // Subtle dimming on hover (instead of glow) 481 float dimming = 1.0 - mouseInfluence * 0.3; 482 483 color *= shape * dimming; 484 485 // Very subtle vignette for depth 486 float vignette = 1.0 - length(st) * 0.2; 487 color *= vignette; 488 489 // Soft tone mapping 490 color = pow(color, vec3(0.9)); 491 492 return color; 493} 494 495void main() { 496 vec2 st = coord(gl_FragCoord.xy); 497 vec2 mouse = coord(u_mouse * u_pixelRatio) * vec2(1., -1.); 498 499 vec3 color = render(st, mouse); 500 501 // lineMask: 0 = background, 1 = full line 502 float lineMask = clamp(length(color) * 3.0, 0.0, 1.0); 503 504 if (u_bgTransparent) { 505 gl_FragColor = vec4(color, lineMask); 506 } else { 507 gl_FragColor = vec4(mix(u_bgColor, color, lineMask), 1.0); 508 } 509} 510`,o=` 511attribute vec3 a_position; 512attribute vec2 a_uv; 513varying vec2 v_texcoord; 514 515void main() { 516 gl_Position = vec4(a_position, 1.0); 517 v_texcoord = a_uv; 518} 519`,s=["Cube","Tetrahedron","Octahedron","Icosahedron","Pyramid","Diamond","Hexagonal Prism","Morphing"];function l(e){let t=parseInt(e.replace("#",""),16);return[(t>>16&255)/255,(t>>8&255)/255,(255&t)/255]}function a({bgColor:e="#000",lineColor:c="#e6f2ff",transparent:u=!1,className:p="",defaultShape:v="Cube",clickable:d=!1}){let h=(0,r.useRef)(null),f=(0,r.useRef)(null),m=(0,r.useRef)({x:0,y:0}),w=(0,r.useRef)({x:0,y:0}),[g,b]=(0,r.useState)(s.indexOf(v)),j=(0,r.useRef)(void 0),x=(0,r.useRef)(null),k=(0,r.useRef)(null),L=(0,r.useRef)({}),y=(0,r.useRef)(Date.now()),M=(0,r.useRef)(l(e)),R=(0,r.useRef)(l(c)),_=(0,r.useRef)(u);return(0,r.useEffect)(()=>{M.current=l(e)},[e]),(0,r.useEffect)(()=>{R.current=l(c)},[c]),(0,r.useEffect)(()=>{_.current=u},[u]),(0,r.useEffect)(()=>{let e=f.current;if(!e)return;let t=e.getContext("webgl",{antialias:!0,alpha:!0,premultipliedAlpha:!1,preserveDrawingBuffer:!1});if(!t)return void console.error("WebGL not supported");x.current=t;let r=(e,r)=>{let n=t.createShader(e);return n?(t.shaderSource(n,r),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS))?n:(console.error("Shader compilation error:",t.getShaderInfoLog(n)),t.deleteShader(n),null):null},n=r(t.VERTEX_SHADER,o),s=r(t.FRAGMENT_SHADER,i);if(!n||!s)return;let l=t.createProgram();if(!l)return;if(t.attachShader(l,n),t.attachShader(l,s),t.linkProgram(l),!t.getProgramParameter(l,t.LINK_STATUS))return void console.error("Program linking error:",t.getProgramInfoLog(l));k.current=l,t.useProgram(l),L.current={u_mouse:t.getUniformLocation(l,"u_mouse"),u_resolution:t.getUniformLocation(l,"u_resolution"),u_pixelRatio:t.getUniformLocation(l,"u_pixelRatio"),u_time:t.getUniformLocation(l,"u_time"),u_shape:t.getUniformLocation(l,"u_shape"),u_lineColor:t.getUniformLocation(l,"u_lineColor"),u_bgColor:t.getUniformLocation(l,"u_bgColor"),u_bgTransparent:t.getUniformLocation(l,"u_bgTransparent")};let a=new Float32Array([-1,-1,0,1,-1,0,-1,1,0,1,1,0]),c=new Float32Array([0,0,1,0,0,1,1,1]),u=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,u),t.bufferData(t.ARRAY_BUFFER,a,t.STATIC_DRAW);let p=t.getAttribLocation(l,"a_position");t.enableVertexAttribArray(p),t.vertexAttribPointer(p,3,t.FLOAT,!1,0,0);let v=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,v),t.bufferData(t.ARRAY_BUFFER,c,t.STATIC_DRAW);let d=t.getAttribLocation(l,"a_uv");return t.enableVertexAttribArray(d),t.vertexAttribPointer(d,2,t.FLOAT,!1,0,0),()=>{t.deleteProgram(l),t.deleteShader(n),t.deleteShader(s)}},[]),(0,r.useEffect)(()=>{let e=()=>{let e=f.current,t=h.current;if(!e||!t)return;let r=Math.min(window.devicePixelRatio,2),n=t.clientWidth,i=t.clientHeight;e.width=n*r,e.height=i*r,e.style.width=`${n}px`,e.style.height=`${i}px`;let o=x.current;o&&o.viewport(0,0,e.width,e.height)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),(0,r.useEffect)(()=>{let e=e=>{let t=f.current;if(!t)return;let r=t.getBoundingClientRect(),n="touches"in e?e.touches[0].clientX:e.clientX,i="touches"in e?e.touches[0].clientY:e.clientY;m.current={x:n-r.left,y:i-r.top}};return window.addEventListener("mousemove",e),window.addEventListener("touchmove",e),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("touchmove",e)}},[]),(0,r.useEffect)(()=>
519{if(!d)return;let e=()=>{b(e=>(e+1)%s.length)},t=h.current;if(t)return t.addEventListener("click",e),()=>t.removeEventListener("click",e)},[d]),(0,r.useEffect)(()=>{let e=e=>{if(e.key>="1"&&e.key<="8"){let t=parseInt(e.key)-1;t<s.length&&b(t)}};return window.addEventListener("keypress",e),()=>window.removeEventListener("keypress",e)},[]),(0,r.useEffect)(()=>{let e=performance.now(),t=r=>{let n=(r-e)/1e3;e=r;let i=f.current,o=x.current,s=k.current;if(!i||!o||!s){j.current=requestAnimationFrame(t);return}w.current.x+=(m.current.x-w.current.x)*8*n,w.current.y+=(m.current.y-w.current.y)*8*n,o.clear(o.COLOR_BUFFER_BIT);let l=Math.min(window.devicePixelRatio,2),a=(Date.now()-y.current)/1e3;if(L.current.u_mouse&&o.uniform2f(L.current.u_mouse,w.current.x,w.current.y),L.current.u_resolution&&o.uniform2f(L.current.u_resolution,i.width,i.height),L.current.u_pixelRatio&&o.uniform1f(L.current.u_pixelRatio,l),L.current.u_time&&o.uniform1f(L.current.u_time,a),L.current.u_shape&&o.uniform1i(L.current.u_shape,g),L.current.u_lineColor){let[e,t,r]=R.current;o.uniform3f(L.current.u_lineColor,e,t,r)}if(L.current.u_bgColor){let[e,t,r]=M.current;o.uniform3f(L.current.u_bgColor,e,t,r)}L.current.u_bgTransparent&&o.uniform1i(L.current.u_bgTransparent,+!!_.current),o.drawArrays(o.TRIANGLE_STRIP,0,4),j.current=requestAnimationFrame(t)};return j.current=requestAnimationFrame(t),()=>{j.current&&cancelAnimationFrame(j.current)}},[g]),(0,t.jsx)("div",{ref:h,"data-name":s[g],className:(0,n.cn)("px-geometric-blur-mesh hidden relative w-full aspect-square overflow-hidden lg:block",d&&"cursor-pointer",p),children:(0,t.jsx)("canvas",{ref:f,className:"w-full h-full"})})}e.s(["Component",0,a,"default",0,a])},26181,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(77487),i=e.i(47163);let o={checking:"bg-[color:var(--color-warm-gray)] opacity-50",up:"bg-emerald-500",down:"bg-red-500"};e.s(["default",0,function({className:e}){let[s,l]=(0,r.useState)("checking"),a=(0,n.useCommon)().mcpStatus;return(0,r.useEffect)(()=>{let e=!1;return fetch("/api/mcp-health").then(e=>e.json()).then(t=>!e&&l(t.ok?"up":"down")).catch(()=>!e&&l("down")),()=>{e=!0}},[]),(0,t.jsxs)("a",{href:"https://mcp.perxel.com",target:"_blank",rel:"noopener noreferrer",className:(0,i.cn)("px-mcp-status-badge inline-flex w-fit items-center gap-2 text-[13px] text-[color:var(--color-warm-gray)] transition-colors duration-200 hover:text-black",e),children:[(0,t.jsx)("span",{"aria-hidden":!0,className:(0,i.cn)("size-2 rounded-full",o[s])}),"Perxel MCP: ",a[s]]})}])},69667,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(66460),i=e.i(47163),o=e.i(27882);function s({src:e,width:r,height:i,sizes:l,alt:a,label:c,flex:u,paneRef:p,imgRef:v,state:d,isAnimating:h,isActive:f,onToggle:m}){let w=c.charAt(0).toUpperCase()+c.slice(1),g="expanded"===d?"Back to dual view":`Expand ${w} view`;return(0,t.jsx)(o.TooltipBubble,{tooltip:g,rotate:!1,children:(0,t.jsx)("div",{ref:p,onClick:"collapsed"===d?void 0:m,role:"button","aria-hidden":"collapsed"===d,"aria-label":g,className:`relative h-full rounded-[6px] transition-[flex-grow,opacity,box-shadow] duration-300 ease-in-out hover:shadow-[0_0_0_2px_var(--color-brand-blue)] ${"collapsed"===d?"pointer-events-none opacity-0":"cursor-pointer opacity-100"}`,style:{flex:`${"expanded"===d?1:"collapsed"===d?0:u} ${+("collapsed"!==d)} 0%`},children:(0,t.jsx)("div",{className:"relative h-full w-full overflow-hidden rounded-[6px] border bg-white",children:(0,t.jsx)(n.default,{ref:v,src:e,width:r,height:i,sizes:l,alt:a,loading:"lazy",className:`absolute left-0 top-0 h-auto w-full transition-[filter] duration-300 ease-in-out ${f||h?"will-change-transform":""} ${h?"blur-md":"blur-none"}`})})})})}function l({active:e,desktopSrc:n,desktopWidth:i,desktopHeight:o,mobileSrc:a,mobileWidth:c,mobileHeight:u,alt:p,tone:v="light"}){let d=(0,r.useRef)(null),h=(0,r.useRef)(null),f=(0,r.useRef)(null),m=(0,r.useRef)(null),w=(0,r.useRef)(0),g=(0,r.useRef)("scroll"),b=(0,r.useRef)(0),j=(0,r.useRef)(null),[x,k]=(0,r.useState)(null),[L,y]=(0,r.useState)(!1),[M,R]=(0,r.useState)(1),_=(0,r.useRef)(null);function E(e){k(t=>{let r=t===e?null:e;return null===r&&R(1),r}),y(!0),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>y(!1),300)}return(0,r.useEffect)(()=>()=>{_.current&&clearTimeout(_.current)},[]),(0,r.useEffect)(()=>{x&&(w.current=0,g.current="scroll",b.current=0)},[x]),(0,r.useEffect)(()=>{let t;if(!e)return;j.current=null;let r=e=>{let n=d.current,i=h.current,o=f.current,s=m.current;if(n&&i&&o&&s){let t=i.getBoundingClientRect().height-n.clientHeight,r=s.getBoundingClientRect().height-o.clientHeight,l="desktop"===x?Math.max(0,t):"mobile"===x?Math.max(0,r):Math.max(0,Math.min(t,r)),a=j.current??e,c=e-a;if(j.current=e,l<=0)w.current=0;else if("scroll"===g.current)w.current=Math.min(l,w.current+.06*c*M),w.current>=l&&(g.current="snap",b.current=0);else{b.current+=c;let e=Math.min(1,b.current/700);w.current=l*(1-e*e*e),e>=1&&(g.current="scroll",w.current=0)}i.style.transform=`translateY(-${w.current}px)`,s.style.transform=`translateY(-${w.current}px)`}t=requestAnimationFrame(r)};return t=requestAnimationFrame(r),()=>cancelAnimationFrame(t)}
519,[e,x,M]),(0,t.jsxs)("div",{className:`px-dual-screenshot-frame group relative aspect-[4/3] rounded-[8px] ${"blue"===v?"border-white/10 bg-black":"bg-[#f5f5f5]"} shadow-[var(--shadow-card)] transition-[padding,border-width] duration-300 ease-in-out`,style:{padding:x?"0px":"10px",borderWidth:x?"0px":"1px"},children:[(0,t.jsxs)("div",{className:"flex h-full transition-[gap] duration-300 ease-in-out",style:{gap:x?"0px":"10px"},children:[(0,t.jsx)(s,{src:n,width:i,height:o,sizes:"(min-width: 640px) 30vw, 55vw",alt:`${p} â desktop`,label:"desktop",flex:3,paneRef:d,imgRef:h,state:"desktop"===x?"expanded":"mobile"===x?"collapsed":"default",isAnimating:L,isActive:e,onToggle:()=>E("desktop")}),(0,t.jsx)(s,{src:a,width:c,height:u,sizes:"(min-width: 640px) 20vw, 40vw",alt:`${p} â mobile`,label:"mobile",flex:2,paneRef:f,imgRef:m,state:"mobile"===x?"expanded":"desktop"===x?"collapsed":"default",isAnimating:L,isActive:e,onToggle:()=>E("mobile")})]}),x&&(0,t.jsxs)("button",{type:"button",onClick:function(e){e.stopPropagation(),R(e=>1===e?2:2===e?4:1)},"aria-label":`Scroll speed ${M}x â click to cycle to ${1===M?2:2===M?4:1}x`,className:`absolute bottom-3 right-3 z-10 flex size-9 items-center justify-center rounded-full text-xs font-medium text-white opacity-0 backdrop-blur-md transition-[opacity,background-color,transform] duration-200 group-hover:opacity-100 hover:scale-110 ${4===M?"bg-[var(--color-brand-blue)] hover:brightness-110":2===M?"bg-[var(--color-brand-blue)]/70 hover:bg-[var(--color-brand-blue)]/90":"bg-black/40 hover:bg-black/60"}`,children:["x",M]})]})}let a=new Map,c=1,u=null;function p(){let e=null,t=0;for(let[r,n]of a)n.ratio>t&&(t=n.ratio,e=r);if(e===u)return;let r=null!=u?a.get(u):void 0;u=e,r?.setActive(!1),null!=e&&a.get(e)?.setActive(!0)}let v=3/4*1440;e.s(["default",0,function({thumbnail:e,title:o,iframeSrc:s,className:d,tone:h="light"}){let f=(0,r.useRef)(null),m=(0,r.useRef)(null),[w,g]=(0,r.useState)(!1),[b,j]=(0,r.useState)(1),x="dual-image"===e.type,k="video"===e.type,L="iframe"===e.type,y="blue"===h?"bg-black":"bg-[#f5f5f5]",M="blue"===h?"border-white/10":"border-[var(--color-border-light)]",R=function(e,t){let[n,i]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{if(!t||window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let r=e.current;if(!r)return;let n=c++;a.set(n,{ratio:0,setActive:i});let o=new IntersectionObserver(([e])=>{let t=a.get(n);t&&(t.ratio=e.isIntersecting?e.intersectionRatio:0,p())},{threshold:[0,.2,.4,.6,.8,1]});return o.observe(r),()=>{o.disconnect(),a.delete(n),u===n&&(u=null,p()),i(!1)}},[e,t]),t&&n}(f,w&&(x||k));return(0,r.useEffect)(()=>{if(!f.current)return;let e=new IntersectionObserver(([t])=>{t.isIntersecting&&(g(!0),e.disconnect())},{rootMargin:"200px"});return e.observe(f.current),()=>e.disconnect()},[]),(0,r.useEffect)(()=>{if(!L||!f.current)return;let e=f.current,t=()=>j(e.offsetWidth/1440);t();let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[L]),(0,r.useEffect)(()=>{let e=m.current;e&&(R?e.play().catch(()=>{}):e.pause())},[R,w]),(0,t.jsx)("div",{ref:f,className:(0,i.cn)("px-project-frame max-w-[560px]",!x&&`relative overflow-hidden rounded-xl border ${M} ${y} shadow-[var(--shadow-card)] ${k?"":"aspect-[4/3]"}`,d),style:k&&"video"===e.type?{aspectRatio:`${e.width} / ${e.height}`}:void 0,children:w?"dual-image"===e.type?(0,t.jsx)(l,{active:R,desktopSrc:e.desktopSrc,desktopWidth:e.desktopWidth,desktopHeight:e.desktopHeight,mobileSrc:e.mobileSrc,mobileWidth:e.mobileWidth,mobileHeight:e.mobileHeight,alt:o,tone:h}):"iframe"===e.type?s?(0,t.jsx)("div",{className:"origin-top-left",style:{width:1440,height:v,transform:`scale(${b})`},children:(0,t.jsx)("iframe",{src:s,title:o,className:"h-full w-full",style:{border:0},scrolling:"no",loading:"lazy"})}):(0,t.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-[var(--color-warm-gray)]",children:"No preview available"}):"image"===e.type?(0,t.jsx)(n.default,{src:e.src,alt:o,fill:!0,sizes:"(min-width: 1024px) 40vw, 100vw",className:"object-cover"}):(0,t.jsx)("video",{ref:m,src:e.src,poster:e.poster,className:"h-full w-full object-cover",preload:"metadata",muted:!0,loop:!0,playsInl
519ine:!0}):x?(0,t.jsx)("div",{className:`aspect-[4/3] rounded-[8px] ${y}`}):null})}],69667)},38378,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(70731),i=e.i(47163);e.s(["default",0,function({text:e,className:o,as:s="div"}){let l=(0,r.useRef)(null);return(0,t.jsx)("div",{ref:l,className:"px-proximity-heading inline-block",children:(0,t.jsx)(n.default,{as:s,className:(0,i.cn)("p-heading text-brand-blue text-4xl lg:text-5xl leading-[1.1]",o),fromFontVariationSettings:"'wght' 300",toFontVariationSettings:"'wght' 800",radius:140,falloff:"gaussian",containerRef:l,children:e})})}])},50724,e=>{"use strict";var t=e.i(38397),r=e.i(95331),n=e.i(28985);let i=20,o=1e3/60;e.s(["default",0,function({color:e="rgba(255,255,255,0.2)",className:s="",glow:l=!1,glowColor:a="8,42,229"}){let c=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let t=c.current,r=t?.getContext("2d");if(!t||!r)return;let s=window.matchMedia(n.REDUCED_MOTION).matches,u=window.matchMedia(n.FINE_POINTER).matches,p=Math.min(2,window.devicePixelRatio||1),v=0,d=0,h=new Float32Array(0),f=new Float32Array(0),m=new Float32Array(0),w=!1,g=null,b=0,j=0,x=null,k=!1,L=0,y=0,M=0,R=(e,t)=>{let r=Math.max(0,1-e/t);return r*r*(3-2*r)},_=(e,t,n,i)=>{for(let o=Math.max(0,e);o<Math.min(d-1,t);o++){let e=24-h[o],t=24-h[o+1],s=i((o+.5)*6,(e+t)/2)*n;s<.01||(r.beginPath(),r.moveTo(Math.min(v,6*o),e),r.lineTo(Math.min(v,(o+1)*6),t),r.lineWidth=1+.8*s,r.strokeStyle=`rgba(${a},${s})`,r.stroke())}},E=()=>{r.setTransform(p,0,0,p,0,0),r.clearRect(0,0,v,48),r.beginPath(),r.moveTo(0,24-h[0]);for(let e=1;e<d;e++)r.lineTo(Math.min(v,6*e),24-h[e]);r.lineWidth=1,r.strokeStyle=e,r.stroke(),l&&(M>0&&_(Math.floor((L-200)/6),Math.ceil((L+200)/6),M,(e,t)=>R(Math.hypot(e-L,t-y),200)),j>0&&_(Math.floor((b-200)/6),Math.ceil(b/6),j,e=>e>b?0:R(b-e,200)))},S=()=>{h=new Float32Array(d=Math.ceil((v=t.clientWidth)/6)+1),f=new Float32Array(d),m=new Float32Array(d),t.width=v*p,t.height=48*p,E()};S();let A=new ResizeObserver(()=>{t.clientWidth!==v&&S()});if(A.observe(t),s||!u)return()=>A.disconnect();let T=(e,t)=>{let r=Math.round(e/6);for(let e=-5;e<=5;e++){let n=r+e;n>=0&&n<d&&(f[n]+=t*Math.exp(-(e*e)/8))}w=!0},C=e=>{let{x:t,impulse:r}=e.detail;T(t,r)};t.addEventListener("px-wave-poke",C);let F=e=>{let{x:t}=e.detail;g=t,null!==t&&(b=t)};t.addEventListener("px-wave-tip",F);let V=()=>{let e=0;for(let t=0;t<d;t++)f[t]+=-.02*h[t]-.022*f[t],h[t]=Math.max(-i,Math.min(i,h[t]+f[t])),e=Math.max(e,Math.abs(f[t]),.1*Math.abs(h[t]));for(let e=0;e<3;e++){m.fill(0);for(let e=0;e<d;e++)e>0&&(m[e-1]+=.22*(h[e]-h[e-1])),e<d-1&&(m[e+1]+=.22*(h[e]-h[e+1]));for(let e=0;e<d;e++)f[e]+=m[e]}return h[0]=h[d-1]=0,f[0]=f[d-1]=0,!(e<.02)||(h.fill(0),f.fill(0),!1)},I=null,N=e=>{if("touch"===e.pointerType)return;let r=t.getBoundingClientRect(),n=e.clientX-r.left,i=24-(e.clientY-r.top);if(x={x:e.clientX,y:e.clientY},I&&n>=0&&n<=v&&28>=Math.abs(i)){let e=n-I.x,t=i-I.y,r=Math.hypot(e,t);r>=1&&(Math.sign(i)!==Math.sign(I.y)?T(n,Math.sign(t)*Math.min(5,1.4+.2*r)):T(n,Math.max(-1.5,Math.min(1.5,.14*t))*(1-Math.abs(i)/28)))}I={x:n,y:i}},P=0,D=0,B=0,O=e=>{P=requestAnimationFrame(O);let r=l&&(()=>{if(j+=((null!==g)-j)*.15,x){let e=t.getBoundingClientRect();L=x.x-e.left,y=x.y-e.top}return k=!!x&&y>-200&&y<248&&L>-200&&L<v+200,M+=(!!k-M)*.15,null===g&&j<.01&&(j=0),!k&&M<.01&&(M=0),j>0||M>0})();if(!w&&!r){B=e;return}for(D+=Math.min(100,e-B),B=e;D>=o;)w&&(w=V()),D-=o;E()},$=()=>{x=null},z=()=>{cancelAnimationFrame(P),P=0,I=null,x=null,window.removeEventListener("pointermove",N),document.documentElement.removeEventListener("mouseleave",$)},q=new IntersectionObserver(([e])=>{e.isIntersecting?P||(B=performance.now(),P=requestAnimationFrame(O),window.addEventListener("pointermove",N,{passive:!0}),document.documentElement.addEventListener("mouseleave",$)):z()},{rootMargin:`${l?200:28}px`});return q.observe(t),()=>{z(),t.removeEventListener("px-wave-poke",C),t.removeEventListener("px-wave-tip",F),A.disconnect(),q.disconnect()}},[e,l,a]),(0,t.jsx)("canvas",{ref:c,"aria-hidden":!0,className:`px-wave-line pointer-events-none absolute inset-x-0 block w-full ${s}`,style:{height:48,top:-24}})}])},69622,e=>{"use strict";var t=e.i(95331);e.s(["useMousePositionRef",0,e=>{let r=(0,t.useRef)({x:0,y:0});return(0,t.useEffect)(()=>{let t=(t,n)=>{if(e&&e.current){let i=e.current.getBoundingClientRect();r.current={x:t-i.left,y:n-i.top}}else r.current={x:t,y:n}},n=e=>{t(e.clientX,e.clientY)},i=e=>{let r=e.touches[0];t(r.clientX,r.clientY)};return window.addEventListener("mousemove",n),window.addEventListener("touchmove",i),()=>{window.removeEventListener("mousemove",n),window.removeEventListener("touchmove",i)}},[e]),r}])},91606,e=>{"use strict";e.s(["Seaweed",0,class{sway;vel;phase;feel;constructor(e){this.phase=e,this.sway=new Float32Array(e.length),this.vel=new Float32Array(e.length),this.feel=e.map(()=>.75+.5*Math.random())}push(e,t){this.vel[e]+=t*this.feel[e]}step(e,t,r=.22){let n=!1;for(let i=0;i<this.sway.length;i++){let o=t*r*Math.sin(7e-4*e+this.phase[i]);this.vel[i]+=-.012*(this.sway[i]-o)-.045*this.vel[i],this.sway[i]+=this.vel[i],Math.abs(this.sway[i])>t&&(this.sway[i]=Math.sign(this.sway[i])*t,this.vel[i]*=-.3),Math.abs(this.vel[i])>.15&&(n=!0)}return n}},"drawBent",0,function(e,t,r,n,i,o,s,l,a,c,u){for(let p=0;p<o;p+=3){let v=Math.min(3,o-p),d=Math.max(0,Math.min(1,(a-(p+v/2))/c));e.drawImage(t,r,n+p,i,v,s+u*d*d,l+p,i,v)}}])}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.