PageSourceSearch

https://www.tryprofound.com/_next/static/immutable/chunks/2yzq3izhfx1il.js

js tryprofound.com collected 2026-10-02 02:15:51 UTC 21,127 bytes, 284 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,615535,e=>{"use strict";var t=e.i(843476),o=e.i(82706),r=e.i(271645),i=e.i(937148);let a={x:.65,y:.5},n="(hover: none) and (pointer: coarse)";function l(e,t,o,r){let i=e.x-t.x,a=e.y-t.y,n=i*o.x+a*o.y;return Math.exp(-(1.7*((-(i*o.y)+a*o.x)/((.075*r+.3*Math.max(n,0))*1.6))**2))}let s=`
2  const bool addNoise = true; // Whether to add noise to the rays
3  const float decay = 0.97; // the amount to decay each sample by
4  const float exposure = 0.25;  // the screen exposure
5  const float lightStrength = 1.5; // the strength of the light
6  const vec3 lightcolour = vec3(1.0, 1.0, 1.0); // the colour of the light
7  const vec3 falloffcolour = vec3(2.0, 2.0, 2.0); // the colour of the falloff
8  const vec4 bgcolour = vec4(0.0, 0.0, 0.0, 0.0); // transparent background
9  const float falloff = 0.3;
10  const int samples = 12; // The number of samples to take
11  const float density = 0.98; // The density of the "smoke"
12  const float weight = 0.2; // how heavily to apply each step of the supersample
13  const int octaves = 1;  // the number of octaves to generate in the FBM noise
14  const float seed = 43758.5453123;
15
16  float random2d(vec2 uv) {
17    uv /= 256.0;
18    vec4 tex = texture2D(u_noise, uv);
19    return mix(tex.x, tex.y, tex.a);
20  }
21
22  vec2 random2(vec2 st, float seed) {
23    st = vec2(dot(st, vec2(127.1, 311.7)), dot(st, vec2(269.5, 183.3)));
24    return -1.0 + 2.0 * fract(sin(st) * seed);
25  }
26
27  float noise(vec2 st, float seed) {
28    vec3 x = vec3(st, 1.0);
29    vec3 p = floor(x);
30    vec3 f = fract(x);
31    f = f * f * (3.0 - 2.0 * f);
32    vec2 uv = (p.xy + vec2(37.0, 17.0) * p.z) + f.xy;
33    vec2 rg = texture2D(u_noise, (uv + 0.5) / 256.0, 0.0).yx - 0.5;
34    return mix(rg.x, rg.y, f.z);
35  }
36
37  float fbm1(in vec2 _st, float seed) {
38    float v = 0.0;
39    float a = 0.5;
40    vec2 shift = vec2(100.0);
41    mat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.50));
42    for (int i = 0; i < octaves; ++i) {
43      v += a * noise(_st, seed);
44      _st = rot * _st * 2.0 + shift;
45      a *= 0.4;
46    }
47    return v + 0.4;
48  }
49
50  float pattern(vec2 uv, float seed, float time, inout vec2 q, inout vec2 r) {
51    q = vec2(
52      fbm1(uv + vec2(0.0, 0.0), seed),
53      fbm1(uv + vec2(5.2, 1.3), seed)
54    );
55
56    r = vec2(
57      fbm1(uv + 4.0 * q + vec2(1.7 - time / 2.0, 9.2), seed),
58      fbm1(uv + 4.0 * q + vec2(8.3 - time / 2.0, 2.8), seed)
59    );
60
61    return fbm1(uv + 4.0 * r, seed);
62  }
63
64  float shapes(vec2 uv);
65
66  float occlusion(vec2 uv, vec2 lightpos, float objects) {
67    return (1.0 - smoothstep(0.0, lightStrength * 2.0, length(lightpos - uv) * 0.5)) * (1.0 - objects);
68  }
69
70  float scatterCareersLight(inout vec2 uv, vec2 lightpos) {
71    vec2 _uv = uv;
72    float obj = shapes(uv);
73    float map = occlusion(uv, lightpos, obj);
74
75    float _pattern = 0.0;
76    vec2 q = vec2(0.0);
77    vec2 r = vec2(0.0);
78    if (addNoise) {
79      _pattern = pattern(_uv * 3.0, seed, u_time, q, r) / 2.0;
80    }
81
82    vec2 dtc = (_uv - lightpos) * (1.0 / float(samples) * density);
83    float illumination_decay = 1.0;
84    vec4 basecolour = bgcolour;
85
86    for (int i = 0; i < samples; i++) {
87      _uv -= dtc;
88      if (addNoise) {
89        uv += _pattern / 16.0;
90      }
91
92      float movement = u_time * 20.0 * float(i + 1);
93      float dither = random2d(uv * 512.0 + mod(vec2(movement * sin(u_time * 0.5), -movement), 1000.0)) * 2.0;
94
95      float stepped_map = occlusion(uv, lightpos, shapes(_uv + dtc * dither));
96      stepped_map *= illumination_decay * weight;
97      illumination_decay *= decay;
98
99      map += stepped_map;
100    }
101
102    return map;
103  }
104`,c=`
105float pixelNoise(uvec2 pixel) {
106  uint value = pixel.x * 1973u + pixel.y * 9277u + 89173u;
107  value = (value ^ (value >> 16u)) * 2246822519u;
108  value = (value ^ (value >> 13u)) * 3266489917u;
109  return float(value ^ (value >> 16u)) / 4294967296.0;
110}
111`,u=`
112uniform float u_copy_height;
113
114float lightShade(vec2 pixel) {
115  float y = pixel.y / u_resolution.y;
116  float top = 1.0 - 0.15 * (1.0 - clamp(y / 0.22, 0.0, 1.0));
117  float bottom = 1.0 - clamp((y - 0.66) / 0.34, 0.0, 1.0);
118  vec2 center = u_resolution * vec2(0.5, 0.16);
119  vec2 radius = vec2(u_resolution.x * 0.55, max(u_copy_height * 0.6, 1.0));
120  float copy = 1.0 - 0.6 * (1.0 - clamp(length((pixel - center) / radius), 0.0, 1.0));
121  return top * bottom * copy;
122}
123`,d=`#version 300 es
124layout(location = 0) in vec2 a_position;
125void main() {
126  gl_Position = vec4(a_position, 0.0, 1.0);
127}
128`,h=`#version 300 es
129precision highp float;
130precision highp int;
131#define texture2D texture
132uniform vec2 u_resolution;
133uniform vec2 u_source;
134uniform vec2 u_direction;
135// Keep the scattering field anchored; moving its sample positions produces traveling contour artifacts.
136const float u_time = 5.0;
137uniform float u_power;
138uniform float u_intermediate_dither;
139uniform sampler2D u_noise;
140out vec4 outColor;
141
142${c}
143${s}
144
145float shapes(vec2 uv) {
146  vec2 relative = uv - u_source;
147  float along = dot(relative, u_direction);
148  float across = dot(relative, vec2(-u_direction.y, u_direction.x));
149  float aperture = smoothstep(0.06, 0.15, along) * (1.0 - smoothstep(0.32, 0.40, along));
150  float slats = 0.5 + 0.5 * sin(across * 23.0 + sin(across * 7.0) * 1.8);
151  return aperture * smoothstep(0.28, 0.75, slats) * 0.8;
152}
153
154void main() {
155  vec2 pixel = vec2(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y);
156  vec2 uv = pixel / u_resolution.x * 4.0;
157  vec2 original = uv;
158  float map = scatterCareersLight(uv, u_source);
159  vec2 relative = original - u_source;
160  float along = dot(relative, u_direction);
161  float across = dot(relative, vec2(-u_direction.y, u_direction.x));
162  float spread = (0.30 + max(along, 0.0) * 0.30) * 1.60;
163  float cone = exp(-pow(across / spread, 2.0) * 1.7);
164  cone *= smoothstep(-0.15, 0.2, along);
165  float distanceFade = exp(-max(along, 0.0) * 0.18);
166  float exposure = 0.22 + sin(u_time) * 0.012;
167  vec3 color = mix(vec3(0.78, 0.84, 0.94), vec3(1.0, 0.96, 0.90), cone * 0.7);
168  vec3 light = color * map * exposure * cone * distanceFade * 0.90 * u_power;
169  float dither = (pixelNoise(uvec2(gl_FragCoord.xy)) - 0.5) / 25
1695.0;
170  light += dither * u_intermediate_dither * smoothstep(0.0, 0.02, max(light.r, max(light.g, light.b)));
171  outColor = vec4(light, 1.0);
172}
173`,f=`#version 300 es
174precision highp float;
175precision highp int;
176uniform vec2 u_resolution;
177uniform sampler2D u_light;
178out vec4 outColor;
179
180${c}
181${u}
182
183void main() {
184  vec3 light = texture(u_light, gl_FragCoord.xy / u_resolution).rgb;
185  light *= lightShade(vec2(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y));
186  float brightness = max(light.r, max(light.g, light.b));
187  // Grain is generated per display pixel, after the soft beam has been enlarged.
188  float amplitude = (1.0 / 255.0 + brightness * 0.035) * smoothstep(0.0, 0.02, brightness);
189  float grain = (pixelNoise(uvec2(gl_FragCoord.xy)) - 0.5) * amplitude;
190  outColor = vec4(max(vec3(0.0), light + grain), 1.0);
191}
192`,m=`#version 300 es
193precision highp float;
194uniform vec2 u_resolution;
195uniform vec2 u_source;
196uniform vec2 u_direction;
197uniform float u_time;
198uniform float u_power;
199uniform float u_pixel_ratio;
200out vec3 v_color;
201out float v_opacity;
202out float v_core_sharpness;
203out vec2 v_point;
204
205const vec2 CORNERS[6] = vec2[6](
206  vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0),
207  vec2(-1.0, 1.0), vec2(1.0, -1.0), vec2(1.0, 1.0)
208);
209
210float dustRandom(float seed) {
211  return fract(sin(seed * 127.1 + 311.7) * 43758.5453);
212}
213
214void main() {
215  float seed = float(gl_InstanceID) + 1.0;
216  float cameraDistance = mix(2.4, 0.9, dustRandom(seed + 17.0));
217  float perspective = 1.0 / cameraDistance;
218  float foreground = smoothstep(0.42, 1.12, perspective);
219  float grainSize = mix(0.55, 1.65, pow(dustRandom(seed + 131.0), 1.35));
220  float phase = dustRandom(seed + 41.0) * 6.283185;
221  vec2 origin = vec2(dustRandom(seed), dustRandom(seed + 89.0));
222  vec2 velocity = vec2(dustRandom(seed + 23.0) - 0.5, dustRandom(seed + 53.0) - 0.65);
223  velocity *= 0.0055 * perspective;
224  float drift = mix(0.65, 1.25, dustRandom(seed + 107.0));
225  vec2 sway = vec2(
226    sin(u_time * 0.43 * drift + phase) + sin(u_time * 0.17 + phase * 1.7) * 0.35,
227    cos(u_time * 0.37 * drift + phase) + sin(u_time * 0.23 + phase * 1.3) * 0.4
228  ) * 0.025 * perspective;
229  vec2 position = fract(origin + velocity * u_time + sway);
230  vec2 edge = smoothstep(vec2(0.0), vec2(0.06), position)
231    * (1.0 - smoothstep(vec2(0.94), vec2(1.0), position));
232
233  vec2 uv = position * u_resolution / u_resolution.x * 4.0;
234  vec2 relative = uv - u_source;
235  float along = dot(relative, u_direction);
236  float across = dot(relative, vec2(-u_direction.y, u_direction.x));
237  float spread = (0.30 + max(along, 0.0) * 0.30) * 1.60;
238  float cone = exp(-pow(across / spread, 2.0) * 1.7) * smoothstep(-0.15, 0.2, along);
239  float distanceFade = exp(-max(along, 0.0) * 0.18);
240  float turn = 0.78 + sin(u_time * 0.4 + phase) * 0.22;
241
242  v_color = mix(vec3(0.78, 0.84, 0.94), vec3(1.0, 0.96, 0.90), cone * 0.7);
243  v_opacity = 0.42 * mix(0.48, 1.5, foreground) * mix(0.82, 1.0, dustRandom(seed + 71.0))
244    * cone * distanceFade * edge.x * edge.y * turn * u_power;
245  v_core_sharpness = mix(32.0, 22.0, foreground);
246  v_point = CORNERS[gl_VertexID];
247  float diameter = 6.3 * grainSize * perspective * u_pixel_ratio;
248  vec2 center = vec2(position.x * 2.0 - 1.0, 1.0 - position.y * 2.0);
249  gl_Position = vec4(center + v_point * diameter / u_resolution, 0.0, 1.0);
250}
251`,v=`#version 300 es
252precision highp float;
253uniform vec2 u_resolution;
254in vec3 v_color;
255in float v_opacity;
256in float v_core_sharpness;
257in vec2 v_point;
258out vec4 outColor;
259
260${u}
261
262float grain(vec2 point) {
263  float radiusSquared = dot(point, point);
264  float core = exp(-radiusSquared * v_core_sharpness);
265  float halo = exp(-radiusSquared * 6.0);
266  return (core * 1.05 + halo * 0.09) * (1.0 - smoothstep(0.5, 1.0, radiusSquared));
267}
268
269void main() {
270  // 4x4 pixel coverage keeps the sharper subpixel grains stable while drifting.
271  vec2 dx = dFdx(v_point);
272  vec2 dy = dFdy(v_point);
273  float mote = 0.0;
274  for (int y = 0; y < 4; y++) {
275    for (int x = 0; x < 4; x++) {
276      vec2 offset = dx * (float(x) * 0.25 - 0.375) + dy * (float(y) * 0.25 - 0.375);
277      mote += grain(v_point + offset);
278    }
279  }
280  mote *= 0.0625;
281  float shade = lightShade(vec2(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y));
282  outColor = vec4(v_color, v_opacity * mote * shade);
283}
284`;function g(e,t){return Math.abs(t.x-e.x)>1e-5||Math.abs(t.y-e.y)>1e-5}function p(e,t=0){return e.throwIfAborted(),new Promise((o,r)=>{let i=()=>{window.clearTimeout(a),r(e.reason)},a=window.setTimeout(()=>{e.removeEventListener("abort",i),o()},t);e.addEventListener("abort",i,{once:!0})})}function _(e,t,o,r){let i=e.createShader(t);if(!i)throw Error("Could not allocate the hero light shader.");return r.push(i),e.shaderSource(i,o),e.compileShader(i),i}function x(e,t,o,r){let i=e.createProgram();if(!i)throw Error("Could not allocate the hero light program.");return r.push(i),e.attachShader(i,t),e.attachShader(i,o),e.linkProgram(i),i}async function y(e,t,o){let r=e.getExtension("KHR_parallel_shader_compile");for(let i of t){for(;r&&!e.getProgramParameter(i,r.COMPLETION_STATUS_KHR);)await p(o,16);if(!e.getProgramParameter(i,e.LINK_STATUS))throw Error(`Could not link the hero light program: ${e.getProgramInfoLog(i)}`);await p(o)}}async function E(e,t){t.throwIfAborted();let o=e.getContext("webgl2",{alpha:!1,antialias:!1,depth:!1,stencil:!1,powerPreference:"low-power"});if(!o)return null;let r=[],i=[],a=null,l=null,s=null,c=null,u=()=>{for(let e of(o.deleteTexture(l),o.deleteTexture(s),o.deleteFramebuffer(c),o.deleteBuffer(a),i))o.deleteProgram(e);for(let e of r)o.deleteShader(e)};try{await p(t);let E=!!o.getExtension("EXT_color_buffer_float"),R=o.getParameter(o.MAX_VIEWPORT_DIMS),b=o.getParameter(o.MAX_RENDERBUFFER_SIZE);await p(t);let w=_(o,o.VERTEX_SHADER,d,r),T=_(o,o.FRAGMENT_SHADER,h,r),A=_(o,o.FRAGMENT_SHADER,f,r),F=_(o,o.VERTEX_SHADER,m,r),M=_(o,o.FRAGMENT_SHADER,v,r),S=x(o,w,T,i),U=x(o,w,A,i),L=x(o,F,M,i);await p(t);let P=function(){let e,t=(e=0x71a93b5d,()=>(e^=e<<13,e^=e>>>17,((e^=e<<5)>>>0)/0x100000000)),o=new Uint8Array(262144);for(let e=0;e<o.length;e++)o[e]=104+Math.floor(48*t());return o}();for(let e of(await p(t),await y(o,i,t),r))o.deleteShader(e);if(r.length=0,o.useProgram(S),!(a=o.createBuffer()))throw Error("Could not allocate the hero light buffer.");o.bindBuffer(o.ARRAY_BUFFER,a),o.bufferData(o.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),o.STATIC_DRAW);let D=o.getAttribLocation(S,"a_position");if(o.enableVertexAttribArray(D),o.vertexAttribPointer(D,2,o.FLOAT,!1,0,0),!(l=o.createTexture()))throw Error("Could not allocate the hero light texture.");o.bindTexture(o.TEXTURE_2D,l),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.REPEAT),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.REPEAT),o.texImage2D(o.TEXTURE_2D,0,o.RGBA,256,256,0,o.RGBA,o.UNSIGNED_BYTE,P),await p(t);let C=o.getUniformLocation(S,"u_resolution"),N=o.getUniformLocation(S,"u_source"),I=o.getUniformLocation(S,"u_direction"),X=o.getUniformLocation(S,"u_power"),B=o.getUniformLocation(S,"u_intermediate_dither");o.uniform1f(B,+!E);let O=o.getUniformLocation(U,"u_resolution"),q=o.getUniformLocation(U,"u_copy_height"),G=o.getUniformLocation(L,"u_resolution"),j=o.getUniformLocation(L,"u_time"),H=o.getUniformLocation(L,"u_source"),k=o.getUniformLocation(L,"u_direction"),z=o.getUniformLocation(L,"u_power"),W=o.getUniformLocation(L,"u_pixel_ratio"),$=o.getUniformLocation(L,"u_copy_height");if(s=o.createTexture(),c=o.createFramebuffer(),!(s&&c))throw Error("Could not allocate the hero light render target.");o.bindTexture(o.TEXTURE_2D,s),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,o.LINEAR),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.bindFramebuffer(o.FRAMEBUFFER,c),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,s,0),o.bindFramebuffer(o.FRAMEBUFFER,null),o.bindTexture(o.TEXTURE_2D,l),await p(t);let Y=1,K=0,V=0,Z=0,J=!0,Q={x:0,y:0},ee={x:0,y:0};return{resize(t,r){let i=(Y=t.width)*t.height,a=window.matchMedia(n).matches?4e5:12e5,u=Math.min(window.devicePixelRatio,1.25,Math.sqrt(a/i)),d=Math.min(window.devicePixelRatio,2,Math.min(R[0],b)/Y,Math.min(R[1],b)/t.height),h=Math.max(1,Math.floor(Y*d)),f=Math.max(1,Math.floor(t.height*d));e.width!==h&&(e.width=h),e.height!==f&&(e.height=f);let m=Math.max(1,Math.floor(Y*u)),v=Math.max(1,Math.floor(t.height*u));if(V!==m||Z!==v){if(V=m,Z=v,o.bindTexture(o.TEXTURE_2D,s),o.texImage2D(o.TEXTURE_2D,0,E?o.RGBA16F:o.RGBA8,V,Z,0,o.RGBA,E?o.HALF_FLOAT:o.UNSIGNED_BYTE,null),o.bindFramebuffer(o.FRAMEBUFFER,c),o.checkFramebufferStatus(o.FRAMEBUFFER)!==o.FRAMEBUFFER_COMPLETE)throw Error("The hero light render target is 
284incomplete.");o.bindFramebuffer(o.FRAMEBUFFER,null),o.bindTexture(o.TEXTURE_2D,l)}K=Math.max(64,Math.min(400,Math.round(i/4e3))),o.useProgram(L),o.uniform2f(G,e.width,e.height),o.uniform1f(W,e.width/Y),o.uniform1f($,r*e.height/t.height),o.useProgram(U),o.uniform2f(O,e.width,e.height),o.uniform1f(q,r*e.height/t.height),o.useProgram(S),o.uniform2f(C,V,Z),J=!0},draw(t,r,i){let a={x:r.x/Y*4,y:r.y/Y*4};(J||g(Q,a)||g(ee,i))&&(J=!1,Object.assign(Q,a),Object.assign(ee,i),o.bindFramebuffer(o.FRAMEBUFFER,c),o.viewport(0,0,V,Z),o.uniform1f(X,1),o.uniform2f(N,a.x,a.y),o.uniform2f(I,i.x,i.y),o.drawArrays(o.TRIANGLES,0,6),o.bindFramebuffer(o.FRAMEBUFFER,null)),o.viewport(0,0,e.width,e.height),o.useProgram(U),o.bindTexture(o.TEXTURE_2D,s),o.drawArrays(o.TRIANGLES,0,6),o.bindTexture(o.TEXTURE_2D,l),o.useProgram(L),o.uniform1f(j,t),o.uniform1f(z,1),o.uniform2f(H,a.x,a.y),o.uniform2f(k,i.x,i.y),o.enable(o.BLEND),o.blendFunc(o.SRC_ALPHA,o.ONE),o.drawArraysInstanced(o.TRIANGLES,0,6,K),o.disable(o.BLEND),o.useProgram(S)},dispose:u}}catch(e){throw u(),e}}let R=1e3/30;e.s(["default",0,function(){let e=(0,r.useRef)(null),s=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let t=e.current,o=s.current;if(t&&o)return function(e,t){let o,r,i=e.parentElement,s=i?.querySelector("[data-light-mockup]");if(!s)return;let c=null,u=null,d={x:0,y:0,width:1,height:1},h=[],f=5,m=0,v=0,g=0,p=!1,_="",x=(o={...a},r=null,{follow(e){e.x<0||e.x>1||e.y<0||e.y>1||(r=e)},rest(){r=null,Object.assign(o,a)},sample(e,t,i,n){let l=n?a:r||{x:.62+.12*Math.cos(.25*t),y:.5+.08*Math.sin(.5*t)},s=1-.92**(60*i);o.x+=(l.x-o.x)*s,o.y+=(l.y-o.y)*s;let c={x:-.13*e.width,y:-.11*e.width},u=o.x*e.width,d=Math.max(.25,Math.min(1.3,Math.atan2(o.y*e.height-c.y,u-c.x)));return{source:c,direction:{x:Math.cos(d),y:Math.sin(d)}}}}),y=window.matchMedia("(prefers-reduced-motion: reduce)"),b=window.matchMedia("(hover: hover) and (pointer: fine)"),w=window.matchMedia(n),T=(t=0)=>{let{source:o,direction:r}=x.sample(d,f,t,w.matches),i=y.matches?1:function(e){if(e>=1500)return 1;if(e<=0)return 0;let t=e/1500;return t*t*(3-2*t)}(g),a=String(Math.min(i,1));a!==_&&(_=a,e.style.setProperty("--light-reveal",_)),c?.draw(f,o,r),function(e,t,o,r,i,a){for(let{box:n,gradient:s,dispersion:c,reflection:u,drawn:d}of e){let e=function(e,t,o,r){let i=Math.max(0,Math.min(o.width,t.y>0?e.x+(o.y-e.y)*t.x/t.y-o.x:o.width)),a=Math.max(0,Math.min(o.height,t.x>0?e.y+(o.x-e.x)*t.y/t.x-o.y:o.height)),n=l({x:o.x+i,y:o.y},e,t,r),s=l({x:o.x,y:o.y+a},e,t,r);return n>=s?{x:i,y:0,strength:n}:{x:0,y:a,strength:s}}(t,o,n,r),h=e.y<1?o.y:o.x,f={cx:String(e.x),cy:String(e.y),dx:String(e.x+28*o.x),dy:String(e.y+28*o.y),opacity:String(e.strength*(.25+.07*h)*(1+.054*Math.sin(i))*a)};f.cx!==d.cx&&s.setAttribute("cx",f.cx),f.cy!==d.cy&&s.setAttribute("cy",f.cy),f.dx!==d.dx&&c.setAttribute("cx",f.dx),f.dy!==d.dy&&c.setAttribute("cy",f.dy),f.opacity!==d.opacity&&(u.style.opacity=f.opacity),Object.assign(d,f)}}(h,o,r,d.width,f,i)},A=e=>{if(v=0,m&&w.matches&&e-m<R-4)return void F();let t=m?Math.min((e-m)/1e3,.1):0;m=e,f+=t,g=Math.min(1500,g+1e3*t),T(t),F()},F=()=>{(document.hidden||y.matches)&&(g=1500);let e=!!(c&&p&&!document.hidden&&!y.matches);e&&!v&&(v=requestAnimationFrame(A)),e||(cancelAnimationFrame(v),v=0,m=0)},M=()=>{T(),F()},S=()=>{let t=e.getBoundingClientRect(),o=s.getBoundingClientRect();for(let e of(d={x:t.left,y:t.top+window.scrollY,width:t.width,height:t.height},h=function(e,t){let o=[];for(let r of e.querySelectorAll("[data-light-border]")){let e=r.parentElement,i=r.querySelector("[data-light-gradient]"),a=r.querySelector("[data-light-dispersion]"),n=r.querySelector("[data-light-reflection]");if(!(e&&i&&a&&n))continue;let l=e.getBoundingClientRect(),s={x:l.left-t.left,y:l.top-t.top,width:l.width,height:l.height};if(!(s.width&&s.height))continue;let c=s.width/e.offsetWidth,u=Number.parseFloat(getComputedStyle(r).borderTopLeftRadius)*c;for(let e of(r.setAttribute("viewBox",`0 0 ${s.width} ${s.height}`),r.querySelectorAll("rect"))){let t=Number(e.getAttribute("x"));e.setAttribute("width",String(Math.max(0,s.width-2*t))),e.setAttribute("height",String(Math.max(0,s.height-2*t))),e.setAttribute("rx",String(Math.max(0,u-t)))}let d=Math.max(120,Math.min(.46*s.width,.4*t.width));i.setAttribute("r",String(d)),a.setAttribute("r",String(.8*d)),o.push({target:e,box:s,gradient:i,dispersion:a,reflection:n,drawn:{cx:"",cy:"",dx:"",dy:"",opacity:""}})}return o}(s,t)))N.observe(e.target);c?.resize(d,o.top-t.top),T()},U=()=>{w.matches&&x.rest(),S()},L=e=>{if(!(p&&b.matches)||y.matches||w.matches||"touch"===e.pointerType)return;let t=e.clientX-d.x,o=e.clientY+window.scrollY-d.y;x.follow({x:t/d.width,y:o/d.height})},P=()=>{for(let{reflection:t,drawn:o}of(u?.abort(),u=null,cancelAnimationFrame(v),v=0,c?.dispose(),c=null,e.dataset.renderer="none",e.style.removeProperty("--light-reveal"),_="",h))t.style.opacity="0",o.opacity="0"},D=async()=>{P();let o=new AbortController;u=o;try{let r=await E(t,o.signal);if(o.signal.aborted)return void r?.dispose();if(!(c=r))return;S(),e.dataset.renderer="gpu",F()}catch{o.signal.aborted||P()}},C=e=>{e.preventDefault(),P()},N=new ResizeObserver(S);D(),N.observe(e),N.observe(s);let I=new IntersectionObserver(([e])=>{(p=e.isIntersecting)||(g=1500,T()),F()});return I.observe(e),window.addEventListener("pointermove",L,{passive:!0}),document.addEventListener("visibilitychange",F),y.addEventListener("change",M),w.addEventListener("change",U),t.addEventListener("webglcontextlost",C),t.addEventListener("webglcontextrestored",D),()=>{P(),N.disconnect(),I.disconnect(),window.removeEventListener("pointermove",L),document.removeEventListener("visibilitychange",F),y.removeEventListener("change",M),w.removeEventListener("change",U),t.removeEventListener("webglcontextlost",C),t.removeEventListener("webglcontextrestored",D)}}(t,o)}
284,[]),(0,t.jsx)("div",{"aria-hidden":!0,className:(0,o.cn)("pointer-events-none absolute inset-0 z-0 overflow-clip",i.default.surface),"data-hero-light":"","data-renderer":"none",inert:!0,ref:e,children:(0,t.jsx)("canvas",{className:i.default.canvas,ref:s})})}],615535)},831577,function(e){e.n(e.i(615535))}]);

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.