1"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[54],{54(e,n,t){t.r(n),t.d(n,{AwardsLoaderScene:()=>f,default:()=>v});var o=t(544),a=t(43),i=t(37),r=t(926),s=t(111),c=t(435),l=t(579);const d={desktop:{count:1500,size:4.2},mobile:{count:600,size:4.6}};function u(e){let n=e.isAnimated,t=e.count,i=e.size;const s=(0,a.useRef)(),d=(0,a.useRef)(),u=(0,r.C)(e=>e.gl),f=(0,r.C)(e=>e.invalidate),v=(0,a.useState)(!1),h=(0,o.A)(v,2),m=h[0],p=h[1],x=(0,a.useMemo)(()=>function(e){const n=new c.LoY,t=new Float32Array(3*e),o=new Float32Array(3*e),a=new Float32Array(3*e);for(let i=0;i<e;i+=1){const e=6*Math.cbrt(Math.random()),n=Math.random()*Math.PI*2,r=Math.acos(2*Math.random()-1);t[3*i+0]=e*Math.sin(r)*Math.cos(n),t[3*i+1]=e*Math.sin(r)*Math.sin(n),t[3*i+2]=e*Math.cos(r),o[3*i+0]=t[3*i+0],o[3*i+1]=t[3*i+1],o[3*i+2]=t[3*i+2],a[3*i+0]=100*Math.random(),a[3*i+1]=100*Math.random(),a[3*i+2]=100*Math.random()}return n.setAttribute("position",new c.THS(t,3)),n.setAttribute("aLatticePos",new c.THS(o,3)),n.setAttribute("aSeed",new c.THS(a,3)),n}(t),[t]);(0,a.useEffect)(()=>()=>x.dispose(),[x]);const g=(0,a.useMemo)(()=>{var e,n;return{uTime:{value:0},uNoiseAmp:{value:.55},uSize:{value:i},uPixelRatio:{value:Math.min(null!==(e=null===(n=u.getPixelRatio)||void 0===n?void 0:n.call(u))&&void 0!==e?e:1,1.5)}}},[i]);return(0,a.useEffect)(()=>{const e=()=>p(document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]),(0,a.useEffect)(()=>{n||f()},[n,f]),(0,r.D)((e,t)=>{if(!n||m)return;const o=d.current;o&&(o.uniforms.uTime.value+=t),s.current&&(s.current.rotation.y+=.07*t)}),(0,l.jsx)("group",{ref:s,children:(0,l.jsx)("points",{geometry:x,frustumCulled:!1,children:(0,l.jsx)("shaderMaterial",{ref:d,uniforms:g,vertexShader:"\n attribute vec3 aLatticePos;\n attribute vec3 aSeed;\n uniform float uTime;\n uniform float uNoiseAmp;\n uniform float uSize;\n uniform float uPixelRatio;\n varying vec3 vColor;\n varying float vAlpha;\n\n float hash13(vec3 p) {\n p = fract(p * 0.1031);\n p += dot(p, p.yzx + 33.33);\n return fract((p.x + p.y) * p.z);\n }\n float vnoise(vec3 p) {\n vec3 i = floor(p);\n vec3 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n float n000 = hash13(i);\n float n100 = hash13(i + vec3(1.0, 0.0, 0.0));\n float n010 = hash13(i + vec3(0.0, 1.0, 0.0));\n float n110 = hash13(i + vec3(1.0, 1.0, 0.0));\n float n001 = hash13(i + vec3(0.0, 0.0, 1.0));\n float n101 = hash13(i + vec3(1.0, 0.0, 1.0));\n float n011 = hash13(i + vec3(0.0, 1.0, 1.0));\n float n111 = hash13(i + vec3(1.0, 1.0, 1.0));\n return mix(\n mix(mix(n000, n100, f.x), mix(n010, n110, f.x), f.y),\n mix(mix(n001, n101, f.x), mix(n011, n111, f.x), f.y),\n f.z\n );\n }\n\n void main() {\n vec3 base = position;\n vec3 nseed = aSeed * 0.35 + uTime * 0.12;\n vec3 disp = vec3(\n vnoise(nseed) - 0.5,\n vnoise(nseed + vec3(19.7, 9.3, 47.1)) - 0.5,\n vnoise(nseed + vec3(83.2, 61.5, 12.9)) - 0.5\n ) * uNoiseAmp;\n vec3 pos = base + disp;\n\n // Colour ramp \u2014 darker than SceneA so it never fights the copy.\n vec3 colFar = vec3(0.008, 0.016, 0.043); // ~ #02040B\n vec3 colMid = vec3(0.100, 0.030, 0.220); // slightly darker #2A0A4A\n vec3 colNear = vec3(0.320, 0.000, 0.620); // slightly darker #7200DB\n vec3 col = mix(colFar, colMid, smoothstep(-3.0, 0.0, pos.z));\n col = mix(col, colNear, smoothstep( 0.0, 3.0, pos.z));\n vColor = col;\n\n vAlpha = 0.42;\n\n vec4 mv = modelViewMatrix * vec4(pos, 1.0);\n gl_Position = projectionMatrix * mv;\n gl_PointSize = uSize * uPixelRatio * (10.0 / max(-mv.z, 3.0));\n }\n",fragmentShader:"\n varying vec3 vColor;\n varying float vAlpha;\n void main() {\n vec2 c = gl_PointCoord - 0.5;\n float d = length(c);\n if (d > 0.5) discard;\n float core = smoothstep(0.5, 0.0, d);\n float halo = smoothstep(0.5, 0.32, d);\n float a = pow(core, 1.4) * 0.55 + pow(halo, 2.6) * 0.35;\n gl_FragColor = vec4(vColor, clamp(a * vAlpha, 0.0, 1.0));\n }\n",transparent:!0,depthWrite:!1,blending:c.EZo})})})}function f(){const e=(0,s.I)(),n=(0,a.useState)(()=>"undefined"!==typeof window&&window.innerWidth<640?"mobile":"desktop"),t=(0,o.A)(n,2),r=t[0],c=t[1];(0,a.useEffect)(()=>{const e=window.innerWidth<640?"mobile":"desktop";c(e)},[]);const f=d[r],v=!e;return(0,l.jsxs)(i.Hl,{dpr:[1,1.5],camera:{position:[0,0,8],fov:45,near:.1,far:100},frameloop:v?"always":"demand",gl:{antialias:!0,alpha:!0,powerPreference:"default"},style:{position:"absolute",inset:0},"data-testid":"awards-loader-scene",children:[(0,l.jsx)("color",{attach:"background",args:["#02040B"]}),(0,l.jsx)(u,{isAnimated:v,count:f.count,size:f.size})]})}const v=f}}]); 2//# sourceMappingURL=54.3b5f8a16.chunk.js.map
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.