1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5321],{5321:function(e,t,o){o.r(t),o.d(t,{default:function(){return v}});var r=o(85893),a=o(67294);let i={fps:25,loopFrames:374,echoCount:7,echoLagFrames:5,echoDx:-18.4,echoDz:7.75,echoX0:98.904,echoZ0:13.177,echoOpacity:.5,anchor:[751.481,420.995],layerScale:.446,orientY:292.8,nullScale:.43,nullPos:[179.5,95],nullRz:16,compW:359,compH:200,focal:900,segmentSteps:34,strokeBase:.65,blurAxis:.5,blurGain:5.5,blurSigma:.12,featherBase:.35,featherGain:.62,groupScale:1.75,groupX:126,groupY:78,colourMix:.7,edgeStart:.1,edgeEnd:.7,orangeWeight:.12,depth:.45,strokeMinScale:1e-4,fpsCap:30,dprCap:1.25,startTimeoutMs:1200,mobileBreakpoint:768,mobile:{groupScale:.95,groupX:10,groupY:30,blurSigma:.24,strokeMinScale:.6,fpsCap:24,dprCap:1.5}},n=[{t:0,pts:[{v:[746.481,-36.977],i:[0,-181.2],o:[0,181.2]},{v:[2.311,415.995],i:[412.3,0],o:[-412.3,0]},{v:[-746.481,-36.977],i:[0,181.2],o:[0,-162.1]},{v:[-109.258,-415.995],i:[-353.8,0],o:[22.6,0]},{v:[0,-406.751],i:[-20,0],o:[21.4,0]},{v:[110.931,-415.995],i:[-22.5,0],o:[412.3,0]}]},{t:75,pts:[{v:[794.342,-13.676],i:[95.2,-168],o:[-83.7,147.8]},{v:[1.303,375.455],i:[439.3,0],o:[-439.3,0]},{v:[-796.661,-13.676],i:[88.7,133],o:[-95.8,-143.7]},{v:[-117.593,-323.996],i:[-377,0],o:[24.1,0]},{v:[-1.158,-314.144],i:[-21.3,0],o:[22.8,0]},{v:[117.057,-323.996],i:[-24,0],o:[439.3,0]}]},{t:151,pts:[{v:[607.238,-171.573],i:[0,-184.3],o:[0,184.3]},{v:[-69.621,509.987],i:[419.2,0],o:[-419.2,0]},{v:[-746.48,-171.573],i:[0,184.3],o:[0,-164.8]},{v:[-276.439,-415.995],i:[-359.7,0],o:[23,0]},{v:[-71.972,-406.594],i:[-20.3,0],o:[21.7,0]},{v:[137.196,-415.995],i:[-22.9,0],o:[419.2,0]}]},{t:225,pts:[{v:[717.5,180.1],i:[0,-195.8],o:[0,195.8]},{v:[-1.5,459.7],i:[445.4,0],o:[-445.4,0]},{v:[-720.5,180.1],i:[0,195.8],o:[0,-175.1]},{v:[-221.2,-454],i:[-382.1,0],o:[24.5,0]},{v:[-1.5,-439],i:[-49.9,0],o:[74.9,0]},{v:[218.2,-454],i:[-24.3,0],o:[445.4,0]}]},{t:300,pts:[{v:[791.8,161],i:[0,-185.1],o:[0,185.1]},{v:[32,439.5],i:[420.9,0],o:[-420.9,0]},{v:[-732.5,161],i:[0,185.1],o:[0,-165.5]},{v:[-81.9,-410],i:[-361.2,0],o:[23.1,0]},{v:[29.7,-400.6],i:[-20.4,0],o:[21.8,0]},{v:[142.9,-410],i:[-23,0],o:[420.9,0]}]},{t:374,pts:[{v:[746.481,-36.977],i:[0,-181.2],o:[0,181.2]},{v:[2.311,415.995],i:[412.3,0],o:[-412.3,0]},{v:[-746.481,-36.977],i:[0,181.2],o:[0,-162.1]},{v:[-109.258,-415.995],i:[-353.8,0],o:[22.6,0]},{v:[0,-406.751],i:[-20,0],o:[21.4,0]},{v:[110.931,-415.995],i:[-22.5,0],o:[412.3,0]}]}],l=[{t:0,v:-5},{t:189,v:46},{t:374,v:-5}];function u(e){let t=0,o=1,r=e;for(let a=0;a<12;a++){let a=1-(r=(t+o)/2);3*a*a*r*.333+3*a*r*r*.667+r*r*r<e?t=r:o=r}return 3*(1-r)*r*r*1+r*r*r}function c(e,t,o){let r=Math.min(1,Math.max(0,(o-e)/(t-e)));return r*r*(3-2*r)}let f=` 2vec3 pm(vec3 z) { return mod(((z * 34.0) + 1.0) * z, 289.0); } 3float sn(vec2 v) { 4 const vec4 C = vec4(0.211324865405187, 0.366025403784439, 5 -0.577350269189626, 0.024390243902439); 6 vec2 i = floor(v + dot(v, C.yy)); 7 vec2 x0 = v - i + dot(i, C.xx); 8 vec2 i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); 9 vec4 x12 = x0.xyxy + C.xxzz; 10 x12.xy -= i1; 11 i = mod(i, 289.0); 12 vec3 q = pm(pm(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0)); 13 vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); 14 m = m * m; m = m * m; 15 vec3 x = 2.0 * fract(q * C.www) - 1.0; 16 vec3 h = abs(x) - 0.5; 17 vec3 ox = floor(x + 0.5); 18 vec3 a0 = x - ox; 19 m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); 20 vec3 g; 21 g.x = a0.x * x0.x + h.x * x0.y; 22 g.yz = a0.yz * x12.xz + h.yz * x12.yw; 23 return 130.0 * dot(m, g); 24} 25`,m=` 26precision highp float; 27attribute vec2 aPos; 28attribute vec2 aNorm; 29attribute float aSide; 30uniform vec2 uRes; 31uniform float uStroke; 32uniform float uBlurGain; 33uniform float uBlurSigma; 34uniform float uBlurAxis; 35uniform float uTime; 36varying mediump float vSide; 37varying mediump float vBlur; 38varying highp vec2 vUv; 39varying mediump vec3 vNoise; 40${f} 41void main() { 42 vec2 uv = aPos / uRes; 43 float d = (uv.x - uBlurAxis) / uBlurSigma; 44 float blur = exp(-d * d); 45 // Not \`half\`: that is a reserved word in GLSL ES and fails to compile. 46 float halfWidth = uStroke * (1.0 + blur * uBlurGain); 47 vec2 p = (aPos + aNorm * aSide * halfWidth) / uRes; 48 vSide = aSide; 49 vBlur = blur; 50 vUv = p; 51 vNoise = vec3( 52 sn(p * 2.3 + vec2(uTime * 0.05, -uTime * 0.035)), 53 sn(p * 4.1 - vec2(uTime * 0.04, uTime * 0.06) + 7.3), 54 sn(p * 1.55 + vec2(-uTime * 0.075, uTime * 0.045) + 19.1) 55 ); 56 gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0); 57 gl_Position.y = -gl_Position.y; 58} 59`,s=` 60precision highp float; 61varying mediump float vSide; 62varying mediump float vBlur; 63varying highp vec2 vUv; 64varying mediump vec3 vNoise; 65uniform float uFeatherBase; 66uniform float uFeatherGain; 67uniform float uColourMix; 68uniform float uEdgeStart; 69uniform float uEdgeEnd; 70uniform float uBlurAxis; 71uniform float uDepth; 72uniform float uFade; 73uniform float uOrangeAmt; 74 75const vec3 light = vec3(0.949, 0.965, 0.957); 76const vec3 jade = vec3(0.161, 0.639, 0.514); 77const vec3 teal = vec3(0.078, 0.376, 0.420); 78const vec3 blue = vec3(0.051, 0.235, 0.282); 79const vec3 orange = vec3(0.969, 0.404, 0.031); 80 81void main() { 82 float feather = uFeatherBase + vBlur * uFeatherGain; 83 float alpha = 1.0 - smoothstep(1.0 - feather, 1.0, abs(vSide)); 84 85 alpha *= uFade; 86 alpha *= mix(1.0, 0.30, vBlur); 87 88 float off = clamp(abs(vUv.x - uBlurAxis) / max(uBlurAxis, 1.0 - uBlurAxis), 0.0, 1.0); 89 90 float flow = vNoise.x; 91 float drift = vNoise.y; 92 float depthWave = vNoise.z; 93 94 float toEdge = smoothstep(uEdgeStart, uEdgeEnd, off + flow * 0.12); 95 96 vec3 col = mix(light, jade, toEdge * uColourMix * 0.88); 97 98 // Slow darker drift, weighted away from the text column. 99 float darkBand = smoothstep(0.02, 0.72, depthWave); 100 col = mix(col, teal, darkBand * uDepth * mix(0.30, 1.0, off)); 101 col = mix(col, blue, smoothstep(0.62, 1.12, darkBand + off * 0.32) * uDepth * 0.45); 102 103 col = mix(col, blue, smoothstep(0.76, 1.14, off + drift * 0.10) * 0.5 * uColourMix); 104 105 col = mix(col, orange, uOrangeAmt * toEdge); 106 107 alpha *= mix(0.34, 1.0, pow(off, 0.7)); 108 109 gl_FragColor = vec4(col, clamp(alpha, 0.0, 1.0)); 110} 111`;function v({className:e="",speed:t=.4}){let o=(0,a.useRef)(null),[f,v]=(0,a.useState)(0);return(0,a.useEffect)(()=>{let e=o.current;if(!e)return;let r=!1,a=null,d=0,h=0,g=()=>{r||(a=function(e,t,o){let r=0,a=e=>{e.preventDefault(),cancelAnimationFrame(r)};e.addEventListener("webglcontextlost",a),e.addEventListener("webglcontextrestored",o);let f=e.getContext("webgl",{antialias:!0,alpha:!1,depth:!1,stencil:!1,powerPreference:"low-power",failIfMajorPerformanceCaveat:!0}),v=()=>{e.removeEventListener("webglcontextlost",a),e.removeEventListener("webglcontextrestored",o)};if(!f)return e.style.background="#FBFDFC",v;let d=(e,t)=>{let o=f.createShader(e);return(f.shaderSource(o,t),f.compileShader(o),f.getShaderParameter(o,f.COMPILE_STATUS))?o:(console.error(f.getShaderInfoLog(o)),null)},h=d(f.VERTEX_SHADER,m),g=d(f.FRAGMENT_SHADER,s);if(!h||!g)return v;let p=f.createProgram();if(f.attachShader(p,h),f.attachShader(p,g),f.linkProgram(p),!f.getProgramParameter(p,f.LINK_STATUS))return console.error(f.getProgramInfoLog(p)),v;f.useProgram(p);let x=i.segmentSteps,S=6*x+1,b=2*S,A=new Float32Array(i.echoCount*b*5),w=new Float64Array(36),B=new Float64Array(S),F=new Float64Array(S),y=new Float64Array(i.echoCount);for(let e=0;e<i.echoCount;e++)y[e]=i.echoOpacity*(1-e/(i.echoCount+2));let E={aPos:f.getAttribLocation(p,"aPos"),aNorm:f.getAttribLocation(p,"aNorm"),aSide:f.getAttribLocation(p,"aSide"),uRes:f.getUniformLocation(p,"uRes"),uTime:f.getUniformLocation(p,"uTime"),uStroke:f.getUniformLocation(p,"uStroke"),uBlurGain:f.getUniformLocation(p,"uBlurGain"),uBlurSigma:f.getUniformLocation(p,"uBlurSigma"),uBlurAxis:f.getUniformLocation(p,"uBlurAxis"),uFeatherBase:f.getUniformLocation(p,"uFeatherBase"),uFeatherGain:f.getUniformLocation(p,"uFeatherGain"),uColourMix:f.getUniformLocation(p,"uColourMix"),uEdgeStart:f.getUniformLocation(p,"uEdgeStart"),uEdgeEnd:f.getUniformLocation(p,"uEdgeEnd"),uDepth:f.getUniformLocation(p,"uDepth"),uFade:f.getUniformLocation(p,"uFade"),uOrangeAmt:f.getUniformLocation(p,"uOrangeAmt")},C=f.createBuffer();f.bindBuffer(f.ARRAY_BUFFER,C),f.bufferData(f.ARRAY_BUFFER,A.byteLength,f.DYNAMIC_DRAW),f.enableVertexAttribArray(E.aPos),f.vertexAttribPointer(E.aPos,2,f.FLOAT,!1,20,0),f.enableVertexAttribArray(E.aNorm),f.vertexAttribPointer(E.aNorm,2,f.FLOAT,!1,20,8),f.enableVertexAttribArray(E.aSide),f.vertexAttribPointer(E.aSide,1,f.FLOAT,!1,20,16),f.enable(f.BLEND),f.blendFuncSeparate(f.SRC_ALPHA,f.ONE_MINUS_SRC_ALPHA,f.ONE,f.ONE_MINUS_SRC_ALPHA),f.clearColor(.984,.992,.988,1);let M=0,L=0,P=1,R=0,_=0,k={...i},T=null,N=()=>{f.uniform2f(E.uRes,M,L),f.uniform1f(E.uStroke,k.strokeBase*Math.max(k.strokeMinScale,M/1440)),f.uniform1f(E.uBlurGain,k.blurGain),f.uniform1f(E.uBlurSigma,k.blurSigma),f.uniform1f(E.uBlurAxis,k.blurAxis),f.uniform1f(E.uFeatherBase,k.featherBase),f.uniform1f(E.uFeatherGain,k.featherGain),f.uniform1f(E.uColourMix,k.colourMix),f.uniform1f(E.uEdgeStart,k.edgeStart),f.uniform1f(E.uEdgeEnd,k.edgeEnd),f.uniform1f(E.uDepth,k.depth)},U=()=>{let t=e.getBoundingClientRect(),o=t.width<i.mobileBreakpoint,r=o!==T;r&&(T=o,k=o?{...i,...i.mobile}:{...i});let a=Math.min(window.devicePixelRatio||1,k.dprCap),n=Math.max(1,Math.round(t.width*a)),l=Math.max(1,Math.round(t.height*a));return n===M&&l===L?(r&&N(),r):(M=n,L=l,e.width=M,e.height=L,f.viewport(0,0,M,L),P=Math.max(M/i.compW,L/i.compH),R=(M-i.compW*P)/2,_=(L-i.compH*P)/2,N(),!0)},D=e=>{let t=i.nullRz*Math.PI/180,o=Math.cos(t),r=Math.sin(t),a=i.nullPos[0],c=i.nullPos[1],f=k.groupScale,m=k.groupX,s=k.groupY,v=i.nullScale,d=i.anchor[0],h=i.anchor[1],g=i.layerScale,p=0;for(let t=0;t<i.echoCount;t++){let b=((e-t*i.echoLagFrames)%i.loopFrames+i.loopFrames)%i.loopFrames;!function(e,t){let o=0;for(;o<n.length-2&&e>=n[o+1].t;)o++;let r=n[o],a=n[o+1],i=u(Math.min(1,Math.max(0,(e-r.t)/(a.t-r.t))));for(let e=0,o=0;e<6;e++){let n=r.pts[e],l=a.pts[e];t[o++]=n.v[0]+(l.v[0]-n.v[0])*i,t[o++]=n.v[1]+(l.v[1]-n.v[1])*i,t[o++]=n.i[0]+(l.i[0]-n.i[0])*i,t[o++]=n.i[1]+(l.i[1]-n.i[1])*i,t[o++]=n.o[0]+(l.o[0]-n.o[0])*i,t[o++]=n.o[1]+(l.o[1]-n.o[1])*i}
111}(b,w);let y=(function(e){let t=0;for(;t<l.length-2&&e>=l[t+1].t;)t++;let o=l[t],r=l[t+1],a=Math.min(1,Math.max(0,(e-o.t)/(r.t-o.t)));return o.v+(r.v-o.v)*u(a)}(b)+i.orientY)*Math.PI/180,E=Math.cos(y),C=Math.sin(y),M=i.echoX0+i.echoDx*t,L=i.echoZ0+i.echoDz*t,k=0;for(let e=0;e<6;e++){let t=6*e,n=(e+1)%6*6,l=w[t],u=w[t+1],p=w[t]+w[t+4],S=w[t+1]+w[t+5],b=w[n]+w[n+2],A=w[n+1]+w[n+3],y=w[n],T=w[n+1];for(let e=0;e<x;e++){let t=e/x,n=1-t,w=n*n*n,N=3*n*n*t,U=3*n*t*t,D=t*t*t,I=(w*l+N*p+U*b+D*y-d)*g+M,G=(w*u+N*S+U*A+D*T-h)*g,O=I*E+L*C,z=-I*C+L*E,W=O*o-G*r,Y=O*r+G*o,H=i.focal/(i.focal+z*v),q=W*v*H*f+a+m,X=Y*v*H*f+c+s;B[k]=q*P+R,F[k]=X*P+_,k++}}B[k]=B[0],F[k]=F[0];for(let e=0;e<S;e++){let t=0===e?S-1:e-1,o=e===S-1?0:e+1,r=B[o]-B[t],a=F[o]-F[t],i=Math.sqrt(r*r+a*a)||1;r/=i;let n=-(a/=i),l=r,u=B[e],c=F[e];A[p]=u,A[p+1]=c,A[p+2]=n,A[p+3]=l,A[p+4]=-1,A[p+5]=u,A[p+6]=c,A[p+7]=n,A[p+8]=l,A[p+9]=1,p+=10}}},I=e=>{D(e*i.fps),f.bufferSubData(f.ARRAY_BUFFER,0,A),f.uniform1f(E.uTime,e);let t=e/14.96-Math.floor(e/14.96),o=c(.1,.31,t)*(1-c(.31,.55,t));f.uniform1f(E.uOrangeAmt,o*k.orangeWeight*k.colourMix),f.clear(f.COLOR_BUFFER_BIT);for(let e=0;e<i.echoCount;e++)f.uniform1f(E.uFade,y[e]),f.drawArrays(f.TRIANGLE_STRIP,e*b,b)},G=window.matchMedia("(prefers-reduced-motion: reduce)").matches,O=performance.now(),z=!1,W=!0,Y=-1/0,H=0,q=16.7,X=e=>{if(r=requestAnimationFrame(X),H){let t=e-H;t>1&&t<40&&(q+=(t-q)*.1)}H=e,k.fpsCap&&e-Y<1e3/k.fpsCap-.5*q||(Y=e,I((e-O)/1e3*t))},j=()=>{z||G||(z=!0,H=0,r=requestAnimationFrame(X))},V=()=>{z&&(z=!1,cancelAnimationFrame(r),r=0)},Z=()=>{W&&!document.hidden?j():V()},$=new ResizeObserver(()=>{if(U()){if(G){I(3.2);return}I(((Y=performance.now())-O)/1e3*t)}});$.observe(e);let K=new IntersectionObserver(([e])=>{W=e.isIntersecting,Z()},{threshold:0});return K.observe(e),document.addEventListener("visibilitychange",Z),U(),G?I(3.2):(I(((Y=performance.now())-O)/1e3*t),Z()),()=>{V(),$.disconnect(),K.disconnect(),document.removeEventListener("visibilitychange",Z),v(),f.deleteProgram(p),f.deleteShader(h),f.deleteShader(g),f.deleteBuffer(C),f.getExtension("WEBGL_lose_context")?.loseContext()}}(e,t,()=>v(e=>e+1)))};return f>0?g():"function"==typeof window.requestIdleCallback?d=window.requestIdleCallback(g,{timeout:i.startTimeoutMs}):h=window.setTimeout(g,i.startTimeoutMs),()=>{r=!0,d&&"function"==typeof window.cancelIdleCallback&&window.cancelIdleCallback(d),h&&window.clearTimeout(h),a?.()}},[t,f]),(0,r.jsx)("canvas",{ref:o,"aria-hidden":"true",className:`pointer-events-none absolute inset-0 h-full w-full ${e}`,style:{background:"#FBFDFC"}})}}}]);
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.