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.