1(function(){'use strict';if(window.matchMedia&&window.matchMedia('(prefers-reduced-motion:reduce)').matches)return;var c=document.getElementById('heroCanvas');if(!c)return;var ctx=c.getContext('2d');var DPR=Math.min(window.devicePixelRatio||1,2);var w,h,blobs,parts,mx=-9999,my=-9999;function size(){var r=c.getBoundingClientRect();w=c.width=r.width*DPR;h=c.height=r.height*DPR;} 2function init(){blobs=[];for(var i=0;i<4;i++)blobs.push({x:Math.random()*w,y:Math.random()*h,r:(200+Math.random()*220)*DPR,ph:Math.random()*6.28,sp:0.005+Math.random()*0.006,dx:(Math.random()-.5)*0.16*DPR,dy:(Math.random()-.5)*0.16*DPR,a:0.06+Math.random()*0.06});parts=[];var n=Math.min(70,Math.floor((w/DPR)/20));for(var j=0;j<n;j++)parts.push({x:Math.random()*w,y:Math.random()*h,r:(1+Math.random()*2.4)*DPR,vy:-(0.15+Math.random()*0.45)*DPR,vx:(Math.random()-.5)*0.12*DPR,a:0.12+Math.random()*0.35});} 3function frame(){ctx.clearRect(0,0,w,h);for(var i=0;i<blobs.length;i++){var b=blobs[i];b.x+=b.dx;b.y+=b.dy;b.ph+=b.sp;if(b.x<-b.r)b.x=w+b.r;else if(b.x>w+b.r)b.x=-b.r;if(b.y<-b.r)b.y=h+b.r;else if(b.y>h+b.r)b.y=-b.r;var pr=b.r*(0.82+0.18*Math.sin(b.ph));var g=ctx.createRadialGradient(b.x,b.y,0,b.x,b.y,pr);g.addColorStop(0,'rgba(62,222,156,'+b.a+')');g.addColorStop(1,'rgba(62,222,156,0)');ctx.fillStyle=g;ctx.beginPath();ctx.arc(b.x,b.y,pr,0,6.2832);ctx.fill();} 4if(mx>-9000){var mg=ctx.createRadialGradient(mx,my,0,mx,my,240*DPR);mg.addColorStop(0,'rgba(62,222,156,0.12)');mg.addColorStop(1,'rgba(62,222,156,0)');ctx.fillStyle=mg;ctx.fillRect(0,0,w,h);} 5for(var k=0;k<parts.length;k++){var p=parts[k];p.y+=p.vy;p.x+=p.vx;if(p.y<-6){p.y=h+6;p.x=Math.random()*w;} 6if(p.x<0)p.x=w;else if(p.x>w)p.x=0;ctx.fillStyle='rgba(11,205,125,'+p.a+')';ctx.beginPath();ctx.arc(p.x,p.y,p.r,0,6.2832);ctx.fill();} 7requestAnimationFrame(frame);} 8size();init();frame();var host=c.parentElement;host.addEventListener('mousemove',function(e){var r=c.getBoundingClientRect();mx=(e.clientX-r.left)*DPR;my=(e.clientY-r.top)*DPR;});host.addEventListener('mouseleave',function(){mx=-9999;});window.addEventListener('resize',function(){size();init();});})();
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.