interactive-bg 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +55 -7
  2. package/dist/fluid/canvas2d.cjs +14 -0
  3. package/dist/fluid/canvas2d.cjs.map +1 -0
  4. package/dist/fluid/canvas2d.d.cts +5 -0
  5. package/dist/fluid/canvas2d.d.ts +5 -0
  6. package/dist/fluid/canvas2d.js +13 -0
  7. package/dist/fluid/canvas2d.js.map +1 -0
  8. package/dist/fluid/index.cjs +16 -0
  9. package/dist/fluid/index.cjs.map +1 -0
  10. package/dist/fluid/index.d.cts +5 -0
  11. package/dist/fluid/index.d.ts +5 -0
  12. package/dist/fluid/index.js +15 -0
  13. package/dist/fluid/index.js.map +1 -0
  14. package/dist/fluid/webgl.cjs +14 -0
  15. package/dist/fluid/webgl.cjs.map +1 -0
  16. package/dist/fluid/webgl.d.cts +5 -0
  17. package/dist/fluid/webgl.d.ts +5 -0
  18. package/dist/fluid/webgl.js +13 -0
  19. package/dist/fluid/webgl.js.map +1 -0
  20. package/dist/index.cjs +4 -0
  21. package/dist/index.d.cts +4 -0
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.js +3 -1
  24. package/dist/index.umd.js +255 -12
  25. package/dist/index.umd.js.map +1 -1
  26. package/dist/shimmer/canvas2d.cjs +14 -0
  27. package/dist/shimmer/canvas2d.cjs.map +1 -0
  28. package/dist/shimmer/canvas2d.d.cts +5 -0
  29. package/dist/shimmer/canvas2d.d.ts +5 -0
  30. package/dist/shimmer/canvas2d.js +13 -0
  31. package/dist/shimmer/canvas2d.js.map +1 -0
  32. package/dist/shimmer/index.cjs +16 -0
  33. package/dist/shimmer/index.cjs.map +1 -0
  34. package/dist/shimmer/index.d.cts +5 -0
  35. package/dist/shimmer/index.d.ts +5 -0
  36. package/dist/shimmer/index.js +15 -0
  37. package/dist/shimmer/index.js.map +1 -0
  38. package/dist/shimmer/webgl.cjs +14 -0
  39. package/dist/shimmer/webgl.cjs.map +1 -0
  40. package/dist/shimmer/webgl.d.cts +5 -0
  41. package/dist/shimmer/webgl.d.ts +5 -0
  42. package/dist/shimmer/webgl.js +13 -0
  43. package/dist/shimmer/webgl.js.map +1 -0
  44. package/dist/styles/fluid/canvas2d.cjs +155 -0
  45. package/dist/styles/fluid/canvas2d.cjs.map +1 -0
  46. package/dist/styles/fluid/canvas2d.d.cts +8 -0
  47. package/dist/styles/fluid/canvas2d.d.ts +8 -0
  48. package/dist/styles/fluid/canvas2d.js +155 -0
  49. package/dist/styles/fluid/canvas2d.js.map +1 -0
  50. package/dist/styles/fluid/color.cjs +40 -0
  51. package/dist/styles/fluid/color.cjs.map +1 -0
  52. package/dist/styles/fluid/color.d.cts +4 -0
  53. package/dist/styles/fluid/color.d.ts +4 -0
  54. package/dist/styles/fluid/color.js +40 -0
  55. package/dist/styles/fluid/color.js.map +1 -0
  56. package/dist/styles/fluid/definition.cjs +14 -0
  57. package/dist/styles/fluid/definition.cjs.map +1 -0
  58. package/dist/styles/fluid/definition.d.cts +8 -0
  59. package/dist/styles/fluid/definition.d.ts +8 -0
  60. package/dist/styles/fluid/definition.js +15 -0
  61. package/dist/styles/fluid/definition.js.map +1 -0
  62. package/dist/styles/fluid/options.cjs +29 -0
  63. package/dist/styles/fluid/options.cjs.map +1 -0
  64. package/dist/styles/fluid/options.d.cts +31 -0
  65. package/dist/styles/fluid/options.d.ts +31 -0
  66. package/dist/styles/fluid/options.js +28 -0
  67. package/dist/styles/fluid/options.js.map +1 -0
  68. package/dist/styles/fluid/settings.cjs +32 -0
  69. package/dist/styles/fluid/settings.cjs.map +1 -0
  70. package/dist/styles/fluid/settings.d.cts +24 -0
  71. package/dist/styles/fluid/settings.d.ts +24 -0
  72. package/dist/styles/fluid/settings.js +23 -0
  73. package/dist/styles/fluid/settings.js.map +1 -0
  74. package/dist/styles/fluid/simulation.cjs +183 -0
  75. package/dist/styles/fluid/simulation.cjs.map +1 -0
  76. package/dist/styles/fluid/simulation.d.cts +22 -0
  77. package/dist/styles/fluid/simulation.d.ts +22 -0
  78. package/dist/styles/fluid/simulation.js +183 -0
  79. package/dist/styles/fluid/simulation.js.map +1 -0
  80. package/dist/styles/fluid/size.cjs +17 -0
  81. package/dist/styles/fluid/size.cjs.map +1 -0
  82. package/dist/styles/fluid/size.d.cts +5 -0
  83. package/dist/styles/fluid/size.d.ts +5 -0
  84. package/dist/styles/fluid/size.js +17 -0
  85. package/dist/styles/fluid/size.js.map +1 -0
  86. package/dist/styles/fluid/webgl.cjs +607 -0
  87. package/dist/styles/fluid/webgl.cjs.map +1 -0
  88. package/dist/styles/fluid/webgl.d.cts +3 -0
  89. package/dist/styles/fluid/webgl.d.ts +3 -0
  90. package/dist/styles/fluid/webgl.js +607 -0
  91. package/dist/styles/fluid/webgl.js.map +1 -0
  92. package/dist/styles/shimmer/canvas2d.cjs +84 -0
  93. package/dist/styles/shimmer/canvas2d.cjs.map +1 -0
  94. package/dist/styles/shimmer/canvas2d.d.cts +3 -0
  95. package/dist/styles/shimmer/canvas2d.d.ts +3 -0
  96. package/dist/styles/shimmer/canvas2d.js +84 -0
  97. package/dist/styles/shimmer/canvas2d.js.map +1 -0
  98. package/dist/styles/shimmer/definition.cjs +15 -0
  99. package/dist/styles/shimmer/definition.cjs.map +1 -0
  100. package/dist/styles/shimmer/definition.d.cts +8 -0
  101. package/dist/styles/shimmer/definition.d.ts +8 -0
  102. package/dist/styles/shimmer/definition.js +16 -0
  103. package/dist/styles/shimmer/definition.js.map +1 -0
  104. package/dist/styles/shimmer/field.cjs +79 -0
  105. package/dist/styles/shimmer/field.cjs.map +1 -0
  106. package/dist/styles/shimmer/field.d.cts +11 -0
  107. package/dist/styles/shimmer/field.d.ts +11 -0
  108. package/dist/styles/shimmer/field.js +78 -0
  109. package/dist/styles/shimmer/field.js.map +1 -0
  110. package/dist/styles/shimmer/options.cjs +28 -0
  111. package/dist/styles/shimmer/options.cjs.map +1 -0
  112. package/dist/styles/shimmer/options.d.cts +22 -0
  113. package/dist/styles/shimmer/options.d.ts +22 -0
  114. package/dist/styles/shimmer/options.js +27 -0
  115. package/dist/styles/shimmer/options.js.map +1 -0
  116. package/dist/styles/shimmer/webgl.cjs +89 -0
  117. package/dist/styles/shimmer/webgl.cjs.map +1 -0
  118. package/dist/styles/shimmer/webgl.d.cts +4 -0
  119. package/dist/styles/shimmer/webgl.d.ts +4 -0
  120. package/dist/styles/shimmer/webgl.js +89 -0
  121. package/dist/styles/shimmer/webgl.js.map +1 -0
  122. package/package.json +76 -2
package/dist/index.umd.js CHANGED
@@ -1,4 +1,4 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.InteractiveBg={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e.top>0||e.right>0||e.bottom>0||e.left>0}function n(e,t,n,r,i,a){let o=r===`auto`?t:[...t.filter(e=>e.name===r),...t.filter(e=>e.name!==r)];for(let[t,r]of o.entries()){t>0&&a?.();let o=r.create(e(),n,i);if(o)return o}return null}var r=Object.freeze({renderer:`auto`,backgroundColor:null,fadeOutTop:0,fadeOutRight:0,fadeOutBottom:0,fadeOutLeft:0,interactive:!0,maxDpr:1.5,maxFps:60,idleFps:30,respectReducedMotion:!0});function i(e,t,i={}){let l=typeof e==`string`?document.querySelector(e):e;if(typeof e==`string`&&!l)throw Error(`interactive-bg: no element matches "${e}"`);let u=t.definition,d={...t.options},f={...r,...i},p=s(f.backgroundColor),m=o(f),h=!(l instanceof HTMLCanvasElement),g=h&&l?l.style.position:null,_=h?c(l??null):l,v=n(()=>_,u.renderers,d,f.renderer,()=>{R=!0,J()},h?()=>{let e=c(l??null);_.remove(),_=e}:void 0)??a(u),y=0,b=0,x=1,S=0,C=0,w=0,T=0,E=0,D=0,O=[],k=[],A={x:0,y:0,influence:0},j={width:0,height:0,dpr:1,dt:0,reducedMotion:!1,pointer:A,clicks:k},M=!1,N=0,P=0,F=0,I=!1,L=!0,ee=!0,te=!1,R=!0,z=window.matchMedia?.(`(prefers-reduced-motion: reduce)`),ne=z?.matches??!1;function B(){return f.respectReducedMotion&&ne}function V(){return v.name!==null&&u.animates(d)&&!B()}function H(){return M||O.length>0||re()}function U(){let e=f.maxFps<=0?f.idleFps:f.idleFps<=0?f.maxFps:Math.min(f.maxFps,f.idleFps),t=u.idleFps?.(d)??0;return t<=0?e:e<=0?t:Math.min(e,t)}function W(e){return e>0?1e3/e:0}function G(){return!te&&!I&&L}function re(){return E!==D||E>0&&(Math.abs(w-S)>.5||Math.abs(T-C)>.5)}function K(){let e=_.getBoundingClientRect(),t=Math.max(1,Math.round(e.width)),n=Math.max(1,Math.round(e.height)),r=Math.min(window.devicePixelRatio||1,Math.max(.5,f.maxDpr));(t!==y||n!==b||r!==x)&&(y=t,b=n,x=r,_.width=Math.round(y*x),_.height=Math.round(b*x),R=!0)}function ie(e){if(P=0,!G())return;let t=W(H()?f.maxFps:U());if(N&&e-N<t*.85){q(t-(e-N));return}let n=N?Math.min((e-N)/1e3,.1):0;N=e;let r=H(),i=1-Math.exp(-n*8);S+=(w-S)*i,C+=(T-C)*i,E+=(D-E)*i,Math.abs(D-E)<.001&&(E=D);let a=V();(a||r||R)&&(R=!1,[k,O]=[O,k],O.length=0,A.x=S,A.y=C,A.influence=E,j.width=y,j.height=b,j.dpr=x,j.dt=n,j.reducedMotion=B(),j.clicks=k,M=v.render(j,p,m)),H()?q():a?q(W(U())):N=0}function q(e=0){P||F||!G()||(e>8?F=window.setTimeout(ae,e*.8):P=requestAnimationFrame(ie))}function ae(){F=0,q()}function J(){F&&clearTimeout(F),F=0,q()}function Y(){P&&cancelAnimationFrame(P),F&&clearTimeout(F),P=F=0}function oe(e){if(!f.interactive||!G())return;let t=_.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=n>=0&&r>=0&&n<=t.width&&r<=t.height;i&&D===0&&(S=n,C=r),w=n,T=r,D=+!!i,(i||E>0)&&J()}function X(e){if(!f.interactive||!G())return;let t=_.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;n<0||r<0||n>t.width||r>t.height||(O.push({x:n,y:r}),J())}function se(){D=0,J()}function Z(){L=document.visibilityState===`visible`&&ee,N=0,L?J():Y()}function ce(e){ne=e.matches,R=!0,J()}let Q=null;function le(){Q?.removeEventListener?.(`change`,$),Q=window.matchMedia?.(`(resolution: ${window.devicePixelRatio||1}dppx)`)??null,Q?.addEventListener?.(`change`,$)}function $(){K(),J(),le()}le();let ue=new ResizeObserver(()=>{K(),J()});ue.observe(_);let de=typeof IntersectionObserver==`function`?new IntersectionObserver(e=>{ee=e[e.length-1].isIntersecting,Z()}):null;return de?.observe(_),window.addEventListener(`pointermove`,oe,{passive:!0}),window.addEventListener(`pointerdown`,X,{passive:!0}),document.documentElement.addEventListener(`pointerleave`,se),document.addEventListener(`visibilitychange`,Z),z?.addEventListener?.(`change`,ce),K(),q(),{canvas:_,style:u.name,renderer:v.name,get options(){return d},get engineOptions(){return f},setOptions(e){d={...d,...e},v.update(d),R=!0,J()},setEngineOptions(e){let t=f;f={...f,...e},p=s(f.backgroundColor),m=o(f),f.maxDpr!==t.maxDpr&&K(),f.interactive||(E=D=0,O.length=0),R=!0,J()},pause(){I=!0,Y()},resume(){I=!1,N=0,J()},destroy(){te||(te=!0,Y(),ue.disconnect(),de?.disconnect(),window.removeEventListener(`pointermove`,oe),window.removeEventListener(`pointerdown`,X),document.documentElement.removeEventListener(`pointerleave`,se),document.removeEventListener(`visibilitychange`,Z),z?.removeEventListener?.(`change`,ce),Q?.removeEventListener?.(`change`,$),h||v.clear(),v.destroy(),h&&(v.name===`webgl`&&_.getContext(`webgl2`)?.getExtension(`WEBGL_lose_context`)?.loseContext(),_.remove(),l&&g!==null&&(l.style.position=g)))}}}function a(e){let t=e.renderers.map(e=>e.name===`webgl`?`WebGL2`:`Canvas 2D`).join(` or `);return console.warn(`interactive-bg: style "${e.name}" needs ${t}, which this browser doesn't provide`),{name:null,update(){},render:()=>!1,clear(){},destroy(){}}}function o(e){return{top:Math.max(0,e.fadeOutTop),right:Math.max(0,e.fadeOutRight),bottom:Math.max(0,e.fadeOutBottom),left:Math.max(0,e.fadeOutLeft)}}function s(e){return e&&e!==`transparent`?e:null}function c(e){let t=document.createElement(`canvas`);return t.setAttribute(`aria-hidden`,`true`),Object.assign(t.style,{position:e?`absolute`:`fixed`,inset:`0`,width:`100%`,height:`100%`,display:`block`,pointerEvents:`none`,zIndex:e?`0`:`-1`}),e?(getComputedStyle(e).position===`static`&&(e.style.position=`relative`),e.prepend(t)):document.body.prepend(t),t}var l=[`top`,`right`,`bottom`,`left`];function u(e){return{name:`canvas2d`,create(n,r){let i=n.getContext(`2d`);if(!i)return null;let a=e(i,r),o=l.map(()=>({gradient:null,size:0,length:0})),s=(e,t,n,r)=>{let a=e===1||e===3?n:r,s=o[e];if(!s.gradient||s.size!==a||s.length!==t){let[o,c,l,u]=[[0,t,0,0],[n-t,0,n,0],[0,r-t,0,r],[t,0,0,0]][e];s.gradient=i.createLinearGradient(o,c,l,u),s.gradient.addColorStop(0,`rgba(0, 0, 0, 0)`),s.gradient.addColorStop(1,`rgba(0, 0, 0, 1)`),s.size=a,s.length=t}let c=Math.min(t,a);i.fillStyle=s.gradient,e===0?i.fillRect(0,0,n,c):e===1?i.fillRect(n-c,0,c,r):e===2?i.fillRect(0,r-c,n,c):i.fillRect(0,0,c,r)};return{name:`canvas2d`,update(e){a.update(e)},render(e,n,r){let{width:o,height:c,dpr:u}=e;i.setTransform(u,0,0,u,0,0),i.globalAlpha=1,i.globalCompositeOperation=`source-over`,i.clearRect(0,0,o,c);let d=t(r);n&&!d&&(i.fillStyle=n,i.fillRect(0,0,o,c));let f=a.render(e)===!0;if(d){i.setTransform(u,0,0,u,0,0),i.globalAlpha=1,i.globalCompositeOperation=`destination-out`;for(let e=0;e<l.length;e++){let t=r[l[e]];t>0&&s(e,t,o,c)}n&&(i.globalCompositeOperation=`destination-over`,i.fillStyle=n,i.fillRect(0,0,o,c)),i.globalCompositeOperation=`source-over`}return f},clear(){i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,n.width,n.height)},destroy(){a.destroy?.()}}}}}function d(e){if(e.renderers.length===0)throw Error(`interactive-bg: style "${e.name}" has no renderer`);return Object.assign((t={})=>({definition:e,options:{...e.defaults,...t}}),{styleName:e.name,defaults:e.defaults})}var f=[0,0,0,0],p=null,m=new Map;function h(e){if(!e||e===`transparent`)return f;let t=m.get(e);if(t)return t;if(!p){let e=document.createElement(`canvas`);if(e.width=e.height=1,p=e.getContext(`2d`,{willReadFrequently:!0}),!p)return[0,0,0,1]}p.clearRect(0,0,1,1),p.fillStyle=`#000`,p.fillStyle=e,p.fillRect(0,0,1,1);let[n,r,i,a]=p.getImageData(0,0,1,1).data,o=[n/255,r/255,i/255,a/255];return m.size>64&&m.clear(),m.set(e,o),o}var g=`#version 300 es
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.InteractiveBg={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){return e.top>0||e.right>0||e.bottom>0||e.left>0}function n(e,t,n,r,i,a){let o=r===`auto`?t:[...t.filter(e=>e.name===r),...t.filter(e=>e.name!==r)];for(let[t,r]of o.entries()){t>0&&a?.();let o=r.create(e(),n,i);if(o)return o}return null}var r=Object.freeze({renderer:`auto`,backgroundColor:null,fadeOutTop:0,fadeOutRight:0,fadeOutBottom:0,fadeOutLeft:0,interactive:!0,maxDpr:1.5,maxFps:60,idleFps:30,respectReducedMotion:!0});function i(e,t,i={}){let l=typeof e==`string`?document.querySelector(e):e;if(typeof e==`string`&&!l)throw Error(`interactive-bg: no element matches "${e}"`);let u=t.definition,d={...t.options},f={...r,...i},p=s(f.backgroundColor),m=o(f),h=!(l instanceof HTMLCanvasElement),g=h&&l?l.style.position:null,_=h?c(l??null):l,v=n(()=>_,u.renderers,d,f.renderer,()=>{B=!0,X()},h?()=>{let e=c(l??null);_.remove(),_=e}:void 0)??a(u),y=0,b=0,x=1,S=0,C=0,w=0,T=0,E=0,D=0,O=[],k=[],A={x:0,y:0,influence:0},j={width:0,height:0,dpr:1,dt:0,reducedMotion:!1,pointer:A,clicks:k},M=!1,N=0,P=0,F=0,I=!1,L=!0,R=!0,z=!1,B=!0,V=window.matchMedia?.(`(prefers-reduced-motion: reduce)`),H=V?.matches??!1;function U(){return f.respectReducedMotion&&H}function W(){return v.name!==null&&u.animates(d)&&!U()}function G(){return M||O.length>0||q()}function ee(){let e=f.maxFps<=0?f.idleFps:f.idleFps<=0?f.maxFps:Math.min(f.maxFps,f.idleFps),t=u.idleFps?.(d)??0;return t<=0?e:e<=0?t:Math.min(e,t)}function te(e){return e>0?1e3/e:0}function K(){return!z&&!I&&L}function q(){return E!==D||E>0&&(Math.abs(w-S)>.5||Math.abs(T-C)>.5)}function J(){let e=_.getBoundingClientRect(),t=Math.max(1,Math.round(e.width)),n=Math.max(1,Math.round(e.height)),r=Math.min(window.devicePixelRatio||1,Math.max(.5,f.maxDpr));(t!==y||n!==b||r!==x)&&(y=t,b=n,x=r,_.width=Math.round(y*x),_.height=Math.round(b*x),B=!0)}function ne(e){if(P=0,!K())return;let t=te(G()?f.maxFps:ee());if(N&&e-N<t*.85){Y(t-(e-N));return}let n=N?Math.min((e-N)/1e3,.1):0;N=e;let r=G(),i=1-Math.exp(-n*8);S+=(w-S)*i,C+=(T-C)*i,E+=(D-E)*i,Math.abs(D-E)<.001&&(E=D);let a=W();(a||r||B)&&(B=!1,[k,O]=[O,k],O.length=0,A.x=S,A.y=C,A.influence=E,j.width=y,j.height=b,j.dpr=x,j.dt=n,j.reducedMotion=U(),j.clicks=k,M=v.render(j,p,m)),G()?Y():a?Y(te(ee())):N=0}function Y(e=0){P||F||!K()||(e>8?F=window.setTimeout(re,e*.8):P=requestAnimationFrame(ne))}function re(){F=0,Y()}function X(){F&&clearTimeout(F),F=0,Y()}function ie(){P&&cancelAnimationFrame(P),F&&clearTimeout(F),P=F=0}function ae(e){if(!f.interactive||!K())return;let t=_.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=n>=0&&r>=0&&n<=t.width&&r<=t.height;i&&D===0&&(S=n,C=r),w=n,T=r,D=+!!i,(i||E>0)&&X()}function Z(e){if(!f.interactive||!K())return;let t=_.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;n<0||r<0||n>t.width||r>t.height||(O.push({x:n,y:r}),X())}function oe(){D=0,X()}function se(){L=document.visibilityState===`visible`&&R,N=0,L?X():ie()}function ce(e){H=e.matches,B=!0,X()}let le=null;function ue(){le?.removeEventListener?.(`change`,de),le=window.matchMedia?.(`(resolution: ${window.devicePixelRatio||1}dppx)`)??null,le?.addEventListener?.(`change`,de)}function de(){J(),X(),ue()}ue();let fe=new ResizeObserver(()=>{J(),X()});fe.observe(_);let pe=typeof IntersectionObserver==`function`?new IntersectionObserver(e=>{R=e[e.length-1].isIntersecting,se()}):null;return pe?.observe(_),window.addEventListener(`pointermove`,ae,{passive:!0}),window.addEventListener(`pointerdown`,Z,{passive:!0}),document.documentElement.addEventListener(`pointerleave`,oe),document.addEventListener(`visibilitychange`,se),V?.addEventListener?.(`change`,ce),J(),Y(),{canvas:_,style:u.name,renderer:v.name,get options(){return d},get engineOptions(){return f},setOptions(e){d={...d,...e},v.update(d),B=!0,X()},setEngineOptions(e){let t=f;f={...f,...e},p=s(f.backgroundColor),m=o(f),f.maxDpr!==t.maxDpr&&J(),f.interactive||(E=D=0,O.length=0),B=!0,X()},pause(){I=!0,ie()},resume(){I=!1,N=0,X()},destroy(){z||(z=!0,ie(),fe.disconnect(),pe?.disconnect(),window.removeEventListener(`pointermove`,ae),window.removeEventListener(`pointerdown`,Z),document.documentElement.removeEventListener(`pointerleave`,oe),document.removeEventListener(`visibilitychange`,se),V?.removeEventListener?.(`change`,ce),le?.removeEventListener?.(`change`,de),h||v.clear(),v.destroy(),h&&(v.name===`webgl`&&_.getContext(`webgl2`)?.getExtension(`WEBGL_lose_context`)?.loseContext(),_.remove(),l&&g!==null&&(l.style.position=g)))}}}function a(e){let t=e.renderers.map(e=>e.name===`webgl`?`WebGL2`:`Canvas 2D`).join(` or `);return console.warn(`interactive-bg: style "${e.name}" needs ${t}, which this browser doesn't provide`),{name:null,update(){},render:()=>!1,clear(){},destroy(){}}}function o(e){return{top:Math.max(0,e.fadeOutTop),right:Math.max(0,e.fadeOutRight),bottom:Math.max(0,e.fadeOutBottom),left:Math.max(0,e.fadeOutLeft)}}function s(e){return e&&e!==`transparent`?e:null}function c(e){let t=document.createElement(`canvas`);return t.setAttribute(`aria-hidden`,`true`),Object.assign(t.style,{position:e?`absolute`:`fixed`,inset:`0`,width:`100%`,height:`100%`,display:`block`,pointerEvents:`none`,zIndex:e?`0`:`-1`}),e?(getComputedStyle(e).position===`static`&&(e.style.position=`relative`),e.prepend(t)):document.body.prepend(t),t}var l=[`top`,`right`,`bottom`,`left`];function u(e){return{name:`canvas2d`,create(n,r){let i=n.getContext(`2d`);if(!i)return null;let a=e(i,r),o=l.map(()=>({gradient:null,size:0,length:0})),s=(e,t,n,r)=>{let a=e===1||e===3?n:r,s=o[e];if(!s.gradient||s.size!==a||s.length!==t){let[o,c,l,u]=[[0,t,0,0],[n-t,0,n,0],[0,r-t,0,r],[t,0,0,0]][e];s.gradient=i.createLinearGradient(o,c,l,u),s.gradient.addColorStop(0,`rgba(0, 0, 0, 0)`),s.gradient.addColorStop(1,`rgba(0, 0, 0, 1)`),s.size=a,s.length=t}let c=Math.min(t,a);i.fillStyle=s.gradient,e===0?i.fillRect(0,0,n,c):e===1?i.fillRect(n-c,0,c,r):e===2?i.fillRect(0,r-c,n,c):i.fillRect(0,0,c,r)};return{name:`canvas2d`,update(e){a.update(e)},render(e,n,r){let{width:o,height:c,dpr:u}=e;i.setTransform(u,0,0,u,0,0),i.globalAlpha=1,i.globalCompositeOperation=`source-over`,i.clearRect(0,0,o,c);let d=t(r);n&&!d&&(i.fillStyle=n,i.fillRect(0,0,o,c));let f=a.render(e)===!0;if(d){i.setTransform(u,0,0,u,0,0),i.globalAlpha=1,i.globalCompositeOperation=`destination-out`;for(let e=0;e<l.length;e++){let t=r[l[e]];t>0&&s(e,t,o,c)}n&&(i.globalCompositeOperation=`destination-over`,i.fillStyle=n,i.fillRect(0,0,o,c)),i.globalCompositeOperation=`source-over`}return f},clear(){i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,n.width,n.height)},destroy(){a.destroy?.()}}}}}function d(e){if(e.renderers.length===0)throw Error(`interactive-bg: style "${e.name}" has no renderer`);return Object.assign((t={})=>({definition:e,options:{...e.defaults,...t}}),{styleName:e.name,defaults:e.defaults})}var f=[0,0,0,0],p=null,m=new Map;function h(e){if(!e||e===`transparent`)return f;let t=m.get(e);if(t)return t;if(!p){let e=document.createElement(`canvas`);if(e.width=e.height=1,p=e.getContext(`2d`,{willReadFrequently:!0}),!p)return[0,0,0,1]}p.clearRect(0,0,1,1),p.fillStyle=`#000`,p.fillStyle=e,p.fillRect(0,0,1,1);let[n,r,i,a]=p.getImageData(0,0,1,1).data,o=[n/255,r/255,i/255,a/255];return m.size>64&&m.clear(),m.set(e,o),o}var g=`#version 300 es
2
2
  void main() {
3
3
  vec2 p = vec2(float((gl_VertexID << 1) & 2), float(gl_VertexID & 2));
4
4
  gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0);
@@ -22,7 +22,7 @@ void main() {
22
22
  vec2 p = gl_FragCoord.xy; // origin at the bottom left
23
23
  float kept = keep(uSize.y - p.y, uFade.x) * keep(uSize.x - p.x, uFade.y) * keep(p.y, uFade.z) * keep(p.x, uFade.w);
24
24
  outColor = vec4(0.0, 0.0, 0.0, 1.0 - kept);
25
- }`;function S(e){return{name:`webgl`,create(n,r,i){let a=n.getContext(`webgl2`,b);if(!a)return null;let o=r,s;try{s=e(a,o)}catch(e){return console.warn(`interactive-bg: WebGL setup failed, trying the next renderer`,e),a.getExtension(`WEBGL_lose_context`)?.loseContext(),null}let c=null,l=e=>{e.preventDefault(),s=null,c=null},u=(e,t,n)=>{if(!c){let e=_(a,g,x);if(!e)return;c={program:e,uniforms:v(a,e,[`uMode`,`uFade`,`uSize`,`uColor`])}}let{uniforms:r}=c;a.useProgram(c.program),a.uniform1f(r.uMode,0),a.uniform4f(r.uFade,e.top*t,e.right*t,e.bottom*t,e.left*t),a.uniform2f(r.uSize,a.drawingBufferWidth,a.drawingBufferHeight),a.blendFunc(a.ZERO,a.ONE_MINUS_SRC_ALPHA),a.drawArrays(a.TRIANGLES,0,3);let[i,o,s,l]=n;l>0&&(a.uniform1f(r.uMode,1),a.uniform4f(r.uColor,i*l,o*l,s*l,l),a.blendFunc(a.ONE_MINUS_DST_ALPHA,a.ONE),a.drawArrays(a.TRIANGLES,0,3))},d=()=>{s=e(a,o),i()};return n.addEventListener(`webglcontextlost`,l),n.addEventListener(`webglcontextrestored`,d),{name:`webgl`,update(e){o=e,s?.update(e)},render(e,n,r){if(!s)return!1;let i=h(n),[o,c,l,d]=i;a.viewport(0,0,a.drawingBufferWidth,a.drawingBufferHeight);let f=t(r);f?a.clearColor(0,0,0,0):a.clearColor(o*d,c*d,l*d,d),a.clear(a.COLOR_BUFFER_BIT),a.enable(a.BLEND),a.blendFunc(a.ONE,a.ONE_MINUS_SRC_ALPHA);let p=s.render(e)===!0;return f&&u(r,e.dpr,i),p},clear(){s&&(a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT))},destroy(){n.removeEventListener(`webglcontextlost`,l),n.removeEventListener(`webglcontextrestored`,d),s?.destroy?.(),s=null,c&&a.deleteProgram(c.program),c=null}}}}}function C(e){return{data:new Float32Array(e),length:0}}function w(e,t){if(e.length+t>e.data.length){let n=new Float32Array(Math.max(e.data.length*2,e.length+t));n.set(e.data),e.data=n}return e.data}function T(e,t,n,r,i,a){if(!(i<=0))for(let o=0;o<n-1;o++){let n=o*r,s=n+r;for(let c=0;c<t-1;c++){let l=o*t+c,u=e[l],d=e[l+1],f=e[l+t+1],p=e[l+t],m=Math.min(u,d,f,p),h=Math.max(u,d,f,p),g=Math.ceil(m/i),_=Math.floor(h/i);if(g>_)continue;let v=c*r,y=v+r;for(let e=g;e<=_;e++){let t=e*i,o=(u>=t?8:0)|(d>=t?4:0)|(f>=t?2:0)|p>=t;if(o===0||o===15)continue;let c=v+r*E(t,u,d),l=n+r*E(t,d,f),m=v+r*E(t,p,f),h=n+r*E(t,u,p);switch(o){case 1:case 14:a(v,h,m,s,e);break;case 2:case 13:a(m,s,y,l,e);break;case 3:case 12:a(v,h,y,l,e);break;case 4:case 11:a(c,n,y,l,e);break;case 6:case 9:a(c,n,m,s,e);break;case 7:case 8:a(v,h,c,n,e);break;case 5:case 10:{let r=(u+d+f+p)/4>=t;o===5===r?(a(v,h,c,n,e),a(m,s,y,l,e)):(a(c,n,y,l,e),a(v,h,m,s,e));break}}}}}}function E(e,t,n){let r=n-t;return r===0?.5:(e-t)/r}var D=Object.freeze({lineColor:`#5b6576`,majorLineColor:`#7dd3a8`,lineOpacity:.5,lineWidth:1,majorLineWidth:1.75,majorEvery:5,levels:12,scale:.0025,octaves:2,speed:.025,resolution:6,seed:1332056948,pointerRadius:100,pointerStrength:.35});function O(e){return{lineColor:e.lineColor,majorLineColor:e.majorLineColor??e.lineColor,lineOpacity:Math.min(1,Math.max(0,e.lineOpacity)),lineWidth:Math.max(.1,e.lineWidth),majorLineWidth:Math.max(.1,e.majorLineWidth),majorEvery:Math.max(0,Math.round(e.majorEvery)),levelStep:2/Math.max(1,e.levels),cellSize:Math.max(2,e.resolution),octaves:Math.max(1,Math.round(e.octaves)),scale:e.scale,speed:Math.abs(e.speed),seed:e.seed,pointerRadius:Math.max(1,e.pointerRadius),pointerStrength:e.pointerStrength}}var k=1/3,A=1/6,j=new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]);function M(e){let t=e>>>0;return()=>{t=t+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}function N(e=Math.random()*2**32){let t=M(e),n=new Uint8Array(256);for(let e=0;e<256;e++)n[e]=e;for(let e=255;e>0;e--){let r=Math.floor(t()*(e+1)),i=n[e];n[e]=n[r],n[r]=i}let r=new Uint8Array(512),i=new Uint8Array(512);for(let e=0;e<512;e++)r[e]=n[e&255],i[e]=r[e]%12;return(e,t,n)=>{let a=(e+t+n)*k,o=Math.floor(e+a),s=Math.floor(t+a),c=Math.floor(n+a),l=(o+s+c)*A,u=e-(o-l),d=t-(s-l),f=n-(c-l),p,m,h,g,_,v;u>=d?d>=f?(p=1,m=0,h=0,g=1,_=1,v=0):u>=f?(p=1,m=0,h=0,g=1,_=0,v=1):(p=0,m=0,h=1,g=1,_=0,v=1):d<f?(p=0,m=0,h=1,g=0,_=1,v=1):u<f?(p=0,m=1,h=0,g=0,_=1,v=1):(p=0,m=1,h=0,g=1,_=1,v=0);let y=u-p+A,b=d-m+A,x=f-h+A,S=u-g+2*A,C=d-_+2*A,w=f-v+2*A,T=u-1+3*A,E=d-1+3*A,D=f-1+3*A,O=o&255,M=s&255,N=c&255,P=0,F=.6-u*u-d*d-f*f;if(F>0){let e=i[O+r[M+r[N]]]*3;F*=F,P+=F*F*(j[e]*u+j[e+1]*d+j[e+2]*f)}if(F=.6-y*y-b*b-x*x,F>0){let e=i[O+p+r[M+m+r[N+h]]]*3;F*=F,P+=F*F*(j[e]*y+j[e+1]*b+j[e+2]*x)}if(F=.6-S*S-C*C-w*w,F>0){let e=i[O+g+r[M+_+r[N+v]]]*3;F*=F,P+=F*F*(j[e]*S+j[e+1]*C+j[e+2]*w)}if(F=.6-T*T-E*E-D*D,F>0){let e=i[O+1+r[M+1+r[N+1]]]*3;F*=F,P+=F*F*(j[e]*T+j[e+1]*E+j[e+2]*D)}return 32*P}}var P=.02;function F(e){let t=e,n=N(t.seed),r=2-2**(1-t.octaves),i=0,a=0,o=0,s=0,c=new Float32Array,l=new Float32Array,u=new Float32Array,d=0,f=0,p=!1,m=0;function h(){let e=Math.ceil(i/t.cellSize)+1,n=Math.ceil(a/t.cellSize)+1;(e!==o||n!==s)&&(o=e,s=n,c=new Float32Array(o*s),l=new Float32Array(o*s),u=new Float32Array(o*s),p=!1)}function g(e,i,a,s){let{cellSize:c,octaves:l,scale:u}=t;for(let t=a;t<s;t++){let a=t*c;for(let s=0;s<o;s++){let d=s*c,f=0;for(let e=0,t=1,r=u;e<l;e++,t*=.5,r*=2)f+=t*n(d*r,a*r,i+e*17.3);e[t*o+s]=f/r}}}return{get cols(){return o},get rows(){return s},get keyA(){return c},get keyB(){return l},get version(){return m},configure(e){let i=t;(e.seed!==i.seed||e.scale!==i.scale||e.octaves!==i.octaves||e.cellSize!==i.cellSize)&&(t={seed:e.seed,scale:e.scale,octaves:e.octaves,cellSize:e.cellSize},e.seed!==i.seed&&(n=N(e.seed)),r=2-2**(1-e.octaves),h(),p=!1)},resize(e,t){i=e,a=t,h()},advance(e){(!p||e<d||e>=d+2*P)&&(d=e,g(c,d,0,s),g(l,d+P,0,s),f=0,p=!0,m++),e>=d+P&&(g(u,d+2*P,f,s),[c,l,u]=[l,u,c],d+=P,f=0,m++);let t=(e-d)/P,n=Math.min(s,Math.ceil(s*t/.8));return n>f&&(g(u,d+2*P,f,n),f=n),t}}}function I(e){let t=F(e),n=e.speed,r=0;return{field:t,configure(e){t.configure(e),n=e.speed},advance(e){return t.resize(e.width,e.height),e.reducedMotion||(r+=e.dt*n),t.advance(r)}}}function L(e,t){let n=O(t),r=I(n),i=new Float32Array,a=C(4096),o=C(1024);function s(e,t,r,i,s){let c=n.majorEvery>0&&s%n.majorEvery===0?o:a,l=w(c,4);l[c.length++]=e,l[c.length++]=t,l[c.length++]=r,l[c.length++]=i}function c(t,n,r){let{data:i,length:a}=t;e.beginPath();for(let t=0;t<a;t+=4)e.moveTo(i[t],i[t+1]),e.lineTo(i[t+2],i[t+3]);e.strokeStyle=n,e.lineWidth=r,e.stroke()}function l(e,t,a,o){let{cols:s,rows:c,keyA:l,keyB:u}=r.field,d=s*c;i.length!==d&&(i=new Float32Array(d));for(let t=0;t<d;t++){let n=l[t];i[t]=n+(u[t]-n)*e}if(o===0)return;let{cellSize:f,pointerRadius:p}=n,m=p*p,h=3*p,g=Math.max(0,Math.floor((t-h)/f)),_=Math.min(s-1,Math.ceil((t+h)/f)),v=Math.max(0,Math.floor((a-h)/f)),y=Math.min(c-1,Math.ceil((a+h)/f));for(let e=v;e<=y;e++){let n=e*f-a;for(let r=g;r<=_;r++){let a=r*f-t;i[e*s+r]+=o*Math.exp(-(a*a+n*n)/m)}}}return{update(e){n=O(e),r.configure(n)},render(t){let u=r.advance(t),{pointer:d}=t;l(u,d.x,d.y,n.pointerStrength*d.influence),a.length=o.length=0;let{cols:f,rows:p}=r.field;T(i,f,p,n.cellSize,n.levelStep,s),e.globalAlpha=n.lineOpacity,c(a,n.lineColor,n.lineWidth),n.majorEvery>0&&c(o,n.majorLineColor,n.majorLineWidth)}}}var ee={name:`topo`,defaults:D,animates:e=>e.speed!==0},te=`#version 300 es
25
+ }`;function S(e){return{name:`webgl`,create(n,r,i){let a=n.getContext(`webgl2`,b);if(!a)return null;let o=r,s;try{s=e(a,o)}catch(e){return console.warn(`interactive-bg: WebGL setup failed, trying the next renderer`,e),a.getExtension(`WEBGL_lose_context`)?.loseContext(),null}let c=null,l=e=>{e.preventDefault(),s=null,c=null},u=(e,t,n)=>{if(!c){let e=_(a,g,x);if(!e)return;c={program:e,uniforms:v(a,e,[`uMode`,`uFade`,`uSize`,`uColor`])}}let{uniforms:r}=c;a.useProgram(c.program),a.uniform1f(r.uMode,0),a.uniform4f(r.uFade,e.top*t,e.right*t,e.bottom*t,e.left*t),a.uniform2f(r.uSize,a.drawingBufferWidth,a.drawingBufferHeight),a.blendFunc(a.ZERO,a.ONE_MINUS_SRC_ALPHA),a.drawArrays(a.TRIANGLES,0,3);let[i,o,s,l]=n;l>0&&(a.uniform1f(r.uMode,1),a.uniform4f(r.uColor,i*l,o*l,s*l,l),a.blendFunc(a.ONE_MINUS_DST_ALPHA,a.ONE),a.drawArrays(a.TRIANGLES,0,3))},d=()=>{s=e(a,o),i()};return n.addEventListener(`webglcontextlost`,l),n.addEventListener(`webglcontextrestored`,d),{name:`webgl`,update(e){o=e,s?.update(e)},render(e,n,r){if(!s)return!1;let i=h(n),[o,c,l,d]=i;a.viewport(0,0,a.drawingBufferWidth,a.drawingBufferHeight);let f=t(r);f?a.clearColor(0,0,0,0):a.clearColor(o*d,c*d,l*d,d),a.clear(a.COLOR_BUFFER_BIT),a.enable(a.BLEND),a.blendFunc(a.ONE,a.ONE_MINUS_SRC_ALPHA);let p=s.render(e)===!0;return f&&u(r,e.dpr,i),p},clear(){s&&(a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT))},destroy(){n.removeEventListener(`webglcontextlost`,l),n.removeEventListener(`webglcontextrestored`,d),s?.destroy?.(),s=null,c&&a.deleteProgram(c.program),c=null}}}}}function C(e){return{data:new Float32Array(e),length:0}}function w(e,t){if(e.length+t>e.data.length){let n=new Float32Array(Math.max(e.data.length*2,e.length+t));n.set(e.data),e.data=n}return e.data}function T(e,t,n,r,i,a){if(!(i<=0))for(let o=0;o<n-1;o++){let n=o*r,s=n+r;for(let c=0;c<t-1;c++){let l=o*t+c,u=e[l],d=e[l+1],f=e[l+t+1],p=e[l+t],m=Math.min(u,d,f,p),h=Math.max(u,d,f,p),g=Math.ceil(m/i),_=Math.floor(h/i);if(g>_)continue;let v=c*r,y=v+r;for(let e=g;e<=_;e++){let t=e*i,o=(u>=t?8:0)|(d>=t?4:0)|(f>=t?2:0)|p>=t;if(o===0||o===15)continue;let c=v+r*E(t,u,d),l=n+r*E(t,d,f),m=v+r*E(t,p,f),h=n+r*E(t,u,p);switch(o){case 1:case 14:a(v,h,m,s,e);break;case 2:case 13:a(m,s,y,l,e);break;case 3:case 12:a(v,h,y,l,e);break;case 4:case 11:a(c,n,y,l,e);break;case 6:case 9:a(c,n,m,s,e);break;case 7:case 8:a(v,h,c,n,e);break;case 5:case 10:{let r=(u+d+f+p)/4>=t;o===5===r?(a(v,h,c,n,e),a(m,s,y,l,e)):(a(c,n,y,l,e),a(v,h,m,s,e));break}}}}}}function E(e,t,n){let r=n-t;return r===0?.5:(e-t)/r}var D=Object.freeze({lineColor:`#5b6576`,majorLineColor:`#7dd3a8`,lineOpacity:.5,lineWidth:1,majorLineWidth:1.75,majorEvery:5,levels:12,scale:.0025,octaves:2,speed:.025,resolution:6,seed:1332056948,pointerRadius:100,pointerStrength:.35});function O(e){return{lineColor:e.lineColor,majorLineColor:e.majorLineColor??e.lineColor,lineOpacity:Math.min(1,Math.max(0,e.lineOpacity)),lineWidth:Math.max(.1,e.lineWidth),majorLineWidth:Math.max(.1,e.majorLineWidth),majorEvery:Math.max(0,Math.round(e.majorEvery)),levelStep:2/Math.max(1,e.levels),cellSize:Math.max(2,e.resolution),octaves:Math.max(1,Math.round(e.octaves)),scale:e.scale,speed:Math.abs(e.speed),seed:e.seed,pointerRadius:Math.max(1,e.pointerRadius),pointerStrength:e.pointerStrength}}var k=1/3,A=1/6,j=new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]);function M(e){let t=e>>>0;return()=>{t=t+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}function N(e=Math.random()*2**32){let t=M(e),n=new Uint8Array(256);for(let e=0;e<256;e++)n[e]=e;for(let e=255;e>0;e--){let r=Math.floor(t()*(e+1)),i=n[e];n[e]=n[r],n[r]=i}let r=new Uint8Array(512),i=new Uint8Array(512);for(let e=0;e<512;e++)r[e]=n[e&255],i[e]=r[e]%12;return(e,t,n)=>{let a=(e+t+n)*k,o=Math.floor(e+a),s=Math.floor(t+a),c=Math.floor(n+a),l=(o+s+c)*A,u=e-(o-l),d=t-(s-l),f=n-(c-l),p,m,h,g,_,v;u>=d?d>=f?(p=1,m=0,h=0,g=1,_=1,v=0):u>=f?(p=1,m=0,h=0,g=1,_=0,v=1):(p=0,m=0,h=1,g=1,_=0,v=1):d<f?(p=0,m=0,h=1,g=0,_=1,v=1):u<f?(p=0,m=1,h=0,g=0,_=1,v=1):(p=0,m=1,h=0,g=1,_=1,v=0);let y=u-p+A,b=d-m+A,x=f-h+A,S=u-g+2*A,C=d-_+2*A,w=f-v+2*A,T=u-1+3*A,E=d-1+3*A,D=f-1+3*A,O=o&255,M=s&255,N=c&255,P=0,F=.6-u*u-d*d-f*f;if(F>0){let e=i[O+r[M+r[N]]]*3;F*=F,P+=F*F*(j[e]*u+j[e+1]*d+j[e+2]*f)}if(F=.6-y*y-b*b-x*x,F>0){let e=i[O+p+r[M+m+r[N+h]]]*3;F*=F,P+=F*F*(j[e]*y+j[e+1]*b+j[e+2]*x)}if(F=.6-S*S-C*C-w*w,F>0){let e=i[O+g+r[M+_+r[N+v]]]*3;F*=F,P+=F*F*(j[e]*S+j[e+1]*C+j[e+2]*w)}if(F=.6-T*T-E*E-D*D,F>0){let e=i[O+1+r[M+1+r[N+1]]]*3;F*=F,P+=F*F*(j[e]*T+j[e+1]*E+j[e+2]*D)}return 32*P}}var P=.02;function F(e){let t=e,n=N(t.seed),r=2-2**(1-t.octaves),i=0,a=0,o=0,s=0,c=new Float32Array,l=new Float32Array,u=new Float32Array,d=0,f=0,p=!1,m=0;function h(){let e=Math.ceil(i/t.cellSize)+1,n=Math.ceil(a/t.cellSize)+1;(e!==o||n!==s)&&(o=e,s=n,c=new Float32Array(o*s),l=new Float32Array(o*s),u=new Float32Array(o*s),p=!1)}function g(e,i,a,s){let{cellSize:c,octaves:l,scale:u}=t;for(let t=a;t<s;t++){let a=t*c;for(let s=0;s<o;s++){let d=s*c,f=0;for(let e=0,t=1,r=u;e<l;e++,t*=.5,r*=2)f+=t*n(d*r,a*r,i+e*17.3);e[t*o+s]=f/r}}}return{get cols(){return o},get rows(){return s},get keyA(){return c},get keyB(){return l},get version(){return m},configure(e){let i=t;(e.seed!==i.seed||e.scale!==i.scale||e.octaves!==i.octaves||e.cellSize!==i.cellSize)&&(t={seed:e.seed,scale:e.scale,octaves:e.octaves,cellSize:e.cellSize},e.seed!==i.seed&&(n=N(e.seed)),r=2-2**(1-e.octaves),h(),p=!1)},resize(e,t){i=e,a=t,h()},advance(e){(!p||e<d||e>=d+2*P)&&(d=e,g(c,d,0,s),g(l,d+P,0,s),f=0,p=!0,m++),e>=d+P&&(g(u,d+2*P,f,s),[c,l,u]=[l,u,c],d+=P,f=0,m++);let t=(e-d)/P,n=Math.min(s,Math.ceil(s*t/.8));return n>f&&(g(u,d+2*P,f,n),f=n),t}}}function I(e){let t=F(e),n=e.speed,r=0;return{field:t,configure(e){t.configure(e),n=e.speed},advance(e){return t.resize(e.width,e.height),e.reducedMotion||(r+=e.dt*n),t.advance(r)}}}function L(e,t){let n=O(t),r=I(n),i=new Float32Array,a=C(4096),o=C(1024);function s(e,t,r,i,s){let c=n.majorEvery>0&&s%n.majorEvery===0?o:a,l=w(c,4);l[c.length++]=e,l[c.length++]=t,l[c.length++]=r,l[c.length++]=i}function c(t,n,r){let{data:i,length:a}=t;e.beginPath();for(let t=0;t<a;t+=4)e.moveTo(i[t],i[t+1]),e.lineTo(i[t+2],i[t+3]);e.strokeStyle=n,e.lineWidth=r,e.stroke()}function l(e,t,a,o){let{cols:s,rows:c,keyA:l,keyB:u}=r.field,d=s*c;i.length!==d&&(i=new Float32Array(d));for(let t=0;t<d;t++){let n=l[t];i[t]=n+(u[t]-n)*e}if(o===0)return;let{cellSize:f,pointerRadius:p}=n,m=p*p,h=3*p,g=Math.max(0,Math.floor((t-h)/f)),_=Math.min(s-1,Math.ceil((t+h)/f)),v=Math.max(0,Math.floor((a-h)/f)),y=Math.min(c-1,Math.ceil((a+h)/f));for(let e=v;e<=y;e++){let n=e*f-a;for(let r=g;r<=_;r++){let a=r*f-t;i[e*s+r]+=o*Math.exp(-(a*a+n*n)/m)}}}return{update(e){n=O(e),r.configure(n)},render(t){let u=r.advance(t),{pointer:d}=t;l(u,d.x,d.y,n.pointerStrength*d.influence),a.length=o.length=0;let{cols:f,rows:p}=r.field;T(i,f,p,n.cellSize,n.levelStep,s),e.globalAlpha=n.lineOpacity,c(a,n.lineColor,n.lineWidth),n.majorEvery>0&&c(o,n.majorLineColor,n.majorLineWidth)}}}var R={name:`topo`,defaults:D,animates:e=>e.speed!==0},z=`#version 300 es
26
26
  precision highp float;
27
27
  precision highp sampler2D;
28
28
 
@@ -74,7 +74,7 @@ void main() {
74
74
  // Analytic antialiasing: coverage ramps over one pixel at the line edge.
75
75
  float a = line.a * clamp(halfWidth + 0.5 - dist, 0.0, 1.0);
76
76
  outColor = vec4(line.rgb * a, a); // premultiplied; the engine blends it over the background
77
- }`,R=[`uKeyA`,`uKeyB`,`uBlend`,`uGrid`,`uCellSize`,`uDpr`,`uHeight`,`uPointer`,`uRadius2`,`uStep`,`uMajorEvery`,`uHalfWidth`,`uMinor`,`uMajor`];function z(e,t){let n=O(t),r=I(n),i=_(e,g,te),a=i?v(e,i,R):null,o=[e.createTexture(),e.createTexture()];for(let t of o)e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);let s=0,c=0,l=-1;function u(){let{field:t}=r,n=s!==t.cols||c!==t.rows;if(!n&&l===t.version)return;let i=[t.keyA,t.keyB];for(let r=0;r<2;r++)e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,o[r]),n?e.texImage2D(e.TEXTURE_2D,0,e.R32F,t.cols,t.rows,0,e.RED,e.FLOAT,i[r]):e.texSubImage2D(e.TEXTURE_2D,0,0,0,t.cols,t.rows,e.RED,e.FLOAT,i[r]);s=t.cols,c=t.rows,l=t.version}return{update(e){n=O(e),r.configure(n)},render(t){let o=r.advance(t);if(!i||!a)return;u();let s=h(n.lineColor),c=h(n.majorLineColor),l=n.lineOpacity,{field:d}=r;e.useProgram(i),e.uniform1i(a.uKeyA,0),e.uniform1i(a.uKeyB,1),e.uniform1f(a.uBlend,o),e.uniform2f(a.uGrid,d.cols,d.rows),e.uniform1f(a.uCellSize,n.cellSize),e.uniform1f(a.uDpr,t.dpr),e.uniform1f(a.uHeight,e.drawingBufferHeight),e.uniform3f(a.uPointer,t.pointer.x,t.pointer.y,n.pointerStrength*t.pointer.influence),e.uniform1f(a.uRadius2,n.pointerRadius*n.pointerRadius),e.uniform1f(a.uStep,n.levelStep),e.uniform1f(a.uMajorEvery,n.majorEvery),e.uniform2f(a.uHalfWidth,n.lineWidth*t.dpr/2,n.majorLineWidth*t.dpr/2),e.uniform4f(a.uMinor,s[0],s[1],s[2],s[3]*l),e.uniform4f(a.uMajor,c[0],c[1],c[2],c[3]*l),e.drawArrays(e.TRIANGLES,0,3)},destroy(){e.deleteTexture(o[0]),e.deleteTexture(o[1]),e.deleteProgram(i)}}}var ne=d({...ee,renderers:[S(z),u(L)]}),B=Math.PI*2;function V(e,t,n){let r=Math.max(1,Math.floor(e/n)),i=Math.max(1,Math.floor(t/n));return{cols:r,rows:i,originX:(e-(r-1)*n)/2,originY:(t-(i-1)*n)/2}}function H(e,t,n){let r=Math.sin(e*12.9898+t*78.233+n)*43758.5453;return(r-Math.floor(r))*B}function U(){let e=new Float32Array,t=0;return(n,r)=>{if(t===n&&e.length===n*r*4)return e;e=new Float32Array(n*r*4);for(let t=0;t<r;t++)for(let r=0;r<n;r++){let i=(t*n+r)*4,a=H(r,t,0),o=H(r,t,1);e[i]=Math.cos(a),e[i+1]=Math.sin(a),e[i+2]=Math.cos(o),e[i+3]=Math.sin(o)}return t=n,e}}function W(e){return{sx:Math.sin(e),cx:Math.cos(e),sy:Math.sin(e*1.3),cy:Math.cos(e*1.3)}}function G(e,t){let n=Math.max(0,1-e/t);return n*n}function re(e,t,n){let r=(e-t)/n;return Math.exp(-r*r)}function K(e,t){let n=Math.max(0,1-e/t);return n*n}var ie=.25;function q(e,t){let n=e*t*B*1.3;return Math.ceil(n/ie)}function ae(e){return Math.max(5,q(e.jitter,e.jitterSpeed))}function J(){let e=[];return{waves:e,advance(t,n,r){for(let n of e)n.age+=t.dt;for(let t=e.length-1;t>=0;t--)e[t].age>=n&&e.splice(t,1);if(r)for(let n of t.clicks)e.length===8&&e.shift(),e.push({x:n.x,y:n.y,age:0})},pack(t,n,r){t.fill(0);for(let i=0;i<e.length;i++){let a=e[i];t[i*4]=a.x,t[i*4+1]=a.y,t[i*4+2]=n*a.age,t[i*4+3]=K(a.age,r)}}}}var Y=.6,oe=Object.freeze({color:`#8b95a5`,opacity:.6,size:1.6,spacing:26,jitter:1.2,jitterSpeed:.35,pointerRadius:160,pointerStrength:22,waveSpeed:520,waveStrength:10,waveWidth:60,waveDuration:1.8});function X(e){return{...e,opacity:Math.min(1,Math.max(0,e.opacity)),size:Math.max(.1,e.size),spacing:Math.max(4,e.spacing),jitter:Math.max(0,e.jitter),jitterSpeed:Math.max(0,e.jitterSpeed),pointerRadius:Math.max(1,e.pointerRadius),waveSpeed:Math.max(1,e.waveSpeed),waveWidth:Math.max(1,e.waveWidth),waveDuration:Math.max(.05,e.waveDuration)}}var se=4,Z=8;function ce(e,t){let n=X(t),r=J(),i=new Float32Array(32),a=0,o=Array.from({length:9},()=>C(256));function s(e,t,n){let r=w(e,2);r[e.length++]=t,r[e.length++]=n}function c(t,n){let{data:r,length:i}=t;e.lineWidth=2*n,e.beginPath();for(let t=0;t<i;t+=2)e.moveTo(r[t],r[t+1]),e.lineTo(r[t]+.01,r[t+1]);e.stroke()}let l=U();return{update(e){n=X(e)},render(t){t.reducedMotion||(a+=t.dt*n.jitterSpeed*B),r.advance(t,n.waveDuration,n.waveStrength!==0);let{spacing:u,size:d,jitter:f,pointerRadius:p,waveWidth:m,waveStrength:h}=n,{cols:g,rows:_,originX:v,originY:y}=V(t.width,t.height,u),b=l(g,_),{sx:x,cx:S,sy:C,cy:w}=W(a),T=n.pointerStrength*t.pointer.influence,{x:E,y:D}=t.pointer,O=r.waves.length;r.pack(i,n.waveSpeed,n.waveDuration);let k=3*m;for(let e of o)e.length=0;for(let e=0;e<_;e++){let t=y+e*u;for(let n=0;n<g;n++){let r=v+n*u,a=(e*g+n)*4,c=r+f*(x*b[a]+S*b[a+1]),l=t+f*(w*b[a+2]-C*b[a+3]);if(T!==0){let e=r-E,n=t-D;if(Math.abs(e)<p&&Math.abs(n)<p){let t=Math.sqrt(e*e+n*n);if(t>0&&t<p){let r=T*G(t,p)/t;c+=e*r,l+=n*r}}}let d=0;for(let e=0;e<O*4;e+=4){let n=r-i[e],a=t-i[e+1],o=i[e+2]+k;if(Math.abs(n)>o||Math.abs(a)>o)continue;let s=Math.sqrt(n*n+a*a);if(s===0||Math.abs(s-i[e+2])>k)continue;let u=re(s,i[e+2],m)*i[e+3],f=h*u/s;c+=n*f,l+=a*f,d+=u}s(o[Math.min(Z,Math.round(d*se))],c,l)}}e.globalAlpha=n.opacity,e.strokeStyle=n.color,e.lineCap=`round`;for(let e=0;e<=Z;e++)o[e].length>0&&c(o[e],d*(1+Y*e/se));return O>0}}}var Q={name:`dots`,defaults:oe,animates:e=>e.jitter>0&&e.jitterSpeed>0,idleFps:ae},le=[`uCols`,`uOrigin`,`uSpacing`,`uViewport`,`uDpr`,`uClock`,`uJitter`],$=`
77
+ }`,B=[`uKeyA`,`uKeyB`,`uBlend`,`uGrid`,`uCellSize`,`uDpr`,`uHeight`,`uPointer`,`uRadius2`,`uStep`,`uMajorEvery`,`uHalfWidth`,`uMinor`,`uMajor`];function V(e,t){let n=O(t),r=I(n),i=_(e,g,z),a=i?v(e,i,B):null,o=[e.createTexture(),e.createTexture()];for(let t of o)e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);let s=0,c=0,l=-1;function u(){let{field:t}=r,n=s!==t.cols||c!==t.rows;if(!n&&l===t.version)return;let i=[t.keyA,t.keyB];for(let r=0;r<2;r++)e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,o[r]),n?e.texImage2D(e.TEXTURE_2D,0,e.R32F,t.cols,t.rows,0,e.RED,e.FLOAT,i[r]):e.texSubImage2D(e.TEXTURE_2D,0,0,0,t.cols,t.rows,e.RED,e.FLOAT,i[r]);s=t.cols,c=t.rows,l=t.version}return{update(e){n=O(e),r.configure(n)},render(t){let o=r.advance(t);if(!i||!a)return;u();let s=h(n.lineColor),c=h(n.majorLineColor),l=n.lineOpacity,{field:d}=r;e.useProgram(i),e.uniform1i(a.uKeyA,0),e.uniform1i(a.uKeyB,1),e.uniform1f(a.uBlend,o),e.uniform2f(a.uGrid,d.cols,d.rows),e.uniform1f(a.uCellSize,n.cellSize),e.uniform1f(a.uDpr,t.dpr),e.uniform1f(a.uHeight,e.drawingBufferHeight),e.uniform3f(a.uPointer,t.pointer.x,t.pointer.y,n.pointerStrength*t.pointer.influence),e.uniform1f(a.uRadius2,n.pointerRadius*n.pointerRadius),e.uniform1f(a.uStep,n.levelStep),e.uniform1f(a.uMajorEvery,n.majorEvery),e.uniform2f(a.uHalfWidth,n.lineWidth*t.dpr/2,n.majorLineWidth*t.dpr/2),e.uniform4f(a.uMinor,s[0],s[1],s[2],s[3]*l),e.uniform4f(a.uMajor,c[0],c[1],c[2],c[3]*l),e.drawArrays(e.TRIANGLES,0,3)},destroy(){e.deleteTexture(o[0]),e.deleteTexture(o[1]),e.deleteProgram(i)}}}var H=d({...R,renderers:[S(V),u(L)]}),U=Math.PI*2;function W(e,t,n){let r=Math.max(1,Math.floor(e/n)),i=Math.max(1,Math.floor(t/n));return{cols:r,rows:i,originX:(e-(r-1)*n)/2,originY:(t-(i-1)*n)/2}}function G(e,t,n){let r=Math.sin(e*12.9898+t*78.233+n)*43758.5453;return(r-Math.floor(r))*U}function ee(){let e=new Float32Array,t=0;return(n,r)=>{if(t===n&&e.length===n*r*4)return e;e=new Float32Array(n*r*4);for(let t=0;t<r;t++)for(let r=0;r<n;r++){let i=(t*n+r)*4,a=G(r,t,0),o=G(r,t,1);e[i]=Math.cos(a),e[i+1]=Math.sin(a),e[i+2]=Math.cos(o),e[i+3]=Math.sin(o)}return t=n,e}}function te(e){return{sx:Math.sin(e),cx:Math.cos(e),sy:Math.sin(e*1.3),cy:Math.cos(e*1.3)}}function K(e,t){let n=Math.max(0,1-e/t);return n*n}function q(e,t,n){let r=(e-t)/n;return Math.exp(-r*r)}function J(e,t){let n=Math.max(0,1-e/t);return n*n}var ne=.25;function Y(e,t){let n=e*t*U*1.3;return Math.ceil(n/ne)}function re(e){return Math.max(5,Y(e.jitter,e.jitterSpeed))}function X(){let e=[];return{waves:e,advance(t,n,r){for(let n of e)n.age+=t.dt;for(let t=e.length-1;t>=0;t--)e[t].age>=n&&e.splice(t,1);if(r)for(let n of t.clicks)e.length===8&&e.shift(),e.push({x:n.x,y:n.y,age:0})},pack(t,n,r){t.fill(0);for(let i=0;i<e.length;i++){let a=e[i];t[i*4]=a.x,t[i*4+1]=a.y,t[i*4+2]=n*a.age,t[i*4+3]=J(a.age,r)}}}}var ie=.6,ae=Object.freeze({color:`#8b95a5`,opacity:.6,size:1.6,spacing:26,jitter:1.2,jitterSpeed:.35,pointerRadius:160,pointerStrength:22,waveSpeed:520,waveStrength:10,waveWidth:60,waveDuration:1.8});function Z(e){return{...e,opacity:Math.min(1,Math.max(0,e.opacity)),size:Math.max(.1,e.size),spacing:Math.max(4,e.spacing),jitter:Math.max(0,e.jitter),jitterSpeed:Math.max(0,e.jitterSpeed),pointerRadius:Math.max(1,e.pointerRadius),waveSpeed:Math.max(1,e.waveSpeed),waveWidth:Math.max(1,e.waveWidth),waveDuration:Math.max(.05,e.waveDuration)}}var oe=4,se=8;function ce(e,t){let n=Z(t),r=X(),i=new Float32Array(32),a=0,o=Array.from({length:9},()=>C(256));function s(e,t,n){let r=w(e,2);r[e.length++]=t,r[e.length++]=n}function c(t,n){let{data:r,length:i}=t;e.lineWidth=2*n,e.beginPath();for(let t=0;t<i;t+=2)e.moveTo(r[t],r[t+1]),e.lineTo(r[t]+.01,r[t+1]);e.stroke()}let l=ee();return{update(e){n=Z(e)},render(t){t.reducedMotion||(a+=t.dt*n.jitterSpeed*U),r.advance(t,n.waveDuration,n.waveStrength!==0);let{spacing:u,size:d,jitter:f,pointerRadius:p,waveWidth:m,waveStrength:h}=n,{cols:g,rows:_,originX:v,originY:y}=W(t.width,t.height,u),b=l(g,_),{sx:x,cx:S,sy:C,cy:w}=te(a),T=n.pointerStrength*t.pointer.influence,{x:E,y:D}=t.pointer,O=r.waves.length;r.pack(i,n.waveSpeed,n.waveDuration);let k=3*m;for(let e of o)e.length=0;for(let e=0;e<_;e++){let t=y+e*u;for(let n=0;n<g;n++){let r=v+n*u,a=(e*g+n)*4,c=r+f*(x*b[a]+S*b[a+1]),l=t+f*(w*b[a+2]-C*b[a+3]);if(T!==0){let e=r-E,n=t-D;if(Math.abs(e)<p&&Math.abs(n)<p){let t=Math.sqrt(e*e+n*n);if(t>0&&t<p){let r=T*K(t,p)/t;c+=e*r,l+=n*r}}}let d=0;for(let e=0;e<O*4;e+=4){let n=r-i[e],a=t-i[e+1],o=i[e+2]+k;if(Math.abs(n)>o||Math.abs(a)>o)continue;let s=Math.sqrt(n*n+a*a);if(s===0||Math.abs(s-i[e+2])>k)continue;let u=q(s,i[e+2],m)*i[e+3],f=h*u/s;c+=n*f,l+=a*f,d+=u}s(o[Math.min(se,Math.round(d*oe))],c,l)}}e.globalAlpha=n.opacity,e.strokeStyle=n.color,e.lineCap=`round`;for(let e=0;e<=se;e++)o[e].length>0&&c(o[e],d*(1+ie*e/oe));return O>0}}}var le={name:`dots`,defaults:ae,animates:e=>e.jitter>0&&e.jitterSpeed>0,idleFps:re},ue=[`uCols`,`uOrigin`,`uSpacing`,`uViewport`,`uDpr`,`uClock`,`uJitter`],de=`
78
78
  uniform int uCols;
79
79
  uniform vec2 uOrigin; // CSS px of mark (0, 0)
80
80
  uniform float uSpacing;
@@ -84,7 +84,7 @@ uniform float uClock; // wander phase, radians
84
84
  uniform float uJitter;
85
85
 
86
86
  float phase(vec2 ij, float salt) {
87
- return fract(sin(ij.x * 12.9898 + ij.y * 78.233 + salt) * 43758.5453) * ${B.toFixed(6)};
87
+ return fract(sin(ij.x * 12.9898 + ij.y * 78.233 + salt) * 43758.5453) * ${U.toFixed(6)};
88
88
  }
89
89
 
90
90
  // This vertex's mark as (column, row). Integer maths: float division can put the first
@@ -106,10 +106,10 @@ vec4 toClip(vec2 p) {
106
106
  vec2 clip = p / uViewport * 2.0 - 1.0;
107
107
  return vec4(clip.x, -clip.y, 0.0, 1.0);
108
108
  }
109
- `;function ue(e,t,n,r,i,a,o){e.uniform1i(t.uCols,n.cols),e.uniform2f(t.uOrigin,n.originX,n.originY),e.uniform1f(t.uSpacing,i),e.uniform2f(t.uViewport,r.width,r.height),e.uniform1f(t.uDpr,r.dpr),e.uniform1f(t.uClock,a),e.uniform1f(t.uJitter,o)}var de=`#version 300 es
109
+ `;function fe(e,t,n,r,i,a,o){e.uniform1i(t.uCols,n.cols),e.uniform2f(t.uOrigin,n.originX,n.originY),e.uniform1f(t.uSpacing,i),e.uniform2f(t.uViewport,r.width,r.height),e.uniform1f(t.uDpr,r.dpr),e.uniform1f(t.uClock,a),e.uniform1f(t.uJitter,o)}var pe=`#version 300 es
110
110
  precision highp float;
111
111
 
112
- ${$}
112
+ ${de}
113
113
  uniform float uSize; // dot radius, CSS px
114
114
  uniform vec3 uPointer; // x, y, push distance (strength × influence)
115
115
  uniform float uPointerRadius;
@@ -145,11 +145,11 @@ void main() {
145
145
  grow += ring;
146
146
  }
147
147
 
148
- vRadius = uSize * (1.0 + ${Y.toFixed(3)} * grow) * uDpr;
148
+ vRadius = uSize * (1.0 + ${ie.toFixed(3)} * grow) * uDpr;
149
149
  vPointSize = 2.0 * vRadius + 2.0; // room for the antialiased edge
150
150
  gl_PointSize = vPointSize;
151
151
  gl_Position = toClip(p);
152
- }`,fe=`#version 300 es
152
+ }`,me=`#version 300 es
153
153
  precision highp float;
154
154
 
155
155
  uniform vec4 uColor; // straight RGBA, opacity applied
@@ -161,12 +161,12 @@ void main() {
161
161
  float dist = length(gl_PointCoord - 0.5) * vPointSize;
162
162
  float a = uColor.a * clamp(vRadius + 0.5 - dist, 0.0, 1.0);
163
163
  outColor = vec4(uColor.rgb * a, a); // premultiplied; the engine blends it over the background
164
- }`,pe=[...le,`uSize`,`uPointer`,`uPointerRadius`,`uWaves`,`uWaveStrength`,`uWaveWidth`,`uColor`];function me(e,t){let n=X(t),r=J(),i=new Float32Array(32),a=0,o=_(e,de,fe),s=o?v(e,o,pe):null;return{update(e){n=X(e)},render(t){if(t.reducedMotion||(a+=t.dt*n.jitterSpeed*B),r.advance(t,n.waveDuration,n.waveStrength!==0),!o||!s)return r.waves.length>0;r.pack(i,n.waveSpeed,n.waveDuration);let c=V(t.width,t.height,n.spacing),l=h(n.color);return e.useProgram(o),ue(e,s,c,t,n.spacing,a,n.jitter),e.uniform1f(s.uSize,n.size),e.uniform3f(s.uPointer,t.pointer.x,t.pointer.y,n.pointerStrength*t.pointer.influence),e.uniform1f(s.uPointerRadius,n.pointerRadius),e.uniform4fv(s.uWaves,i),e.uniform1f(s.uWaveStrength,n.waveStrength),e.uniform1f(s.uWaveWidth,n.waveWidth),e.uniform4f(s.uColor,l[0],l[1],l[2],l[3]*n.opacity),e.drawArrays(e.POINTS,0,c.cols*c.rows),r.waves.length>0},destroy(){e.deleteProgram(o)}}}var he=d({...Q,renderers:[S(me),u(ce)]}),ge=Object.freeze({color:`#8b95a5`,opacity:.6,size:4,weight:1.2,spacing:28,jitter:1,jitterSpeed:.35,pointerAlign:1,turnTime:.25,waveSpeed:520,waveAlign:1,waveWeight:1.5,waveWidth:60,waveDuration:1.8}),_e=e=>Math.min(1,Math.max(0,e));function ve(e){return{...e,opacity:_e(e.opacity),size:Math.max(.5,e.size),weight:Math.max(.1,e.weight),spacing:Math.max(4,e.spacing),jitter:Math.max(0,e.jitter),jitterSpeed:Math.max(0,e.jitterSpeed),pointerAlign:_e(e.pointerAlign),turnTime:Math.max(0,e.turnTime),waveSpeed:Math.max(1,e.waveSpeed),waveAlign:_e(e.waveAlign),waveWeight:Math.max(0,e.waveWeight),waveWidth:Math.max(1,e.waveWidth),waveDuration:Math.max(.05,e.waveDuration)}}function ye(e){return e.waveAlign!==0||e.waveWeight!==0}function be(e){let t=e*e;return e*(.99997726+t*(-.33262347+t*(.19354346+t*(-.11643287+t*(.05265332-.0117212*t)))))}function xe(e,t){let n=Math.abs(e);return n>=Math.abs(t)?n===0?0:be(t/e):-be(e/t)}var Se=Math.PI/2,Ce=.05;function we(e){return e-Se*Math.round(e/Se)}function Te(){let e=new Float32Array,t=new Float32Array(32);function n(e,n,r){for(let i=0;i<e.length;i++){let a=e[i];t[i*4]=a.x,t[i*4+1]=a.y,t[i*4+2]=n*a.age,t[i*4+3]=K(a.age,r)}}let r=!1,i=!1,a=NaN,o=NaN,s=NaN,c=NaN,l=NaN,u=null,d=!1;return{get data(){return e},get changed(){return r},get settling(){return i},update(f,p,m,h){let{cols:g,rows:_,originX:v,originY:y}=m,{spacing:b,waveSpeed:x,waveWidth:S,waveDuration:C,waveAlign:w}=p,T=e.length!==g*_*2;T&&(e=new Float32Array(g*_*2));let E=p.pointerAlign*f.pointer.influence,{x:D,y:O}=f.pointer,k=!T&&!i&&!d&&h.length===0&&E===s&&(E===0||D===a&&O===o&&v===c&&y===l&&p===u);if(d=h.length>0,k){r=!1;return}a=D,o=O,s=E,c=v,l=y,u=p;let A=h.length;n(h,x,C);let j=3*S,M=Ce/p.size,N=p.turnTime>0?1-Math.exp(-f.dt/p.turnTime):1;i=!1;for(let n=0;n<_;n++){let r=y+n*b;for(let a=0;a<g;a++){let o=v+a*b,s=0;E!==0&&(s=E*xe(o-D,r-O));let c=0;for(let e=0;e<A*4;e+=4){let n=o-t[e],i=r-t[e+1],a=t[e+2]+j;if(Math.abs(n)>a||Math.abs(i)>a)continue;let l=Math.sqrt(n*n+i*i);if(Math.abs(l-t[e+2])>j)continue;let u=re(l,t[e+2],S)*t[e+3];c+=u,s+=w*Math.min(1,u)*xe(n,i)}let l=(n*g+a)*2,u=we(s-e[l]);Math.abs(u)<M?e[l]=we(s):(e[l]=we(e[l]+u*N),i=!0),e[l+1]=c}}r=!0}}}var Ee=8,De=16;function Oe(e,t){let n=ve(t),r=J(),i=U(),a=Te(),o=0,s=Array.from({length:17},()=>C(512));function c(e,t,n,r,i){let a=w(e,4);a[e.length++]=t,a[e.length++]=n,a[e.length++]=r,a[e.length++]=i}function l(t,n){let{data:r,length:i}=t;e.lineWidth=n,e.beginPath();for(let t=0;t<i;t+=4){let n=r[t],i=r[t+1],a=r[t+2],o=r[t+3];e.moveTo(n-a,i-o),e.lineTo(n+a,i+o),e.moveTo(n+o,i-a),e.lineTo(n-o,i+a)}e.stroke()}return{update(e){n=ve(e)},render(t){t.reducedMotion||(o+=t.dt*n.jitterSpeed*B),r.advance(t,n.waveDuration,ye(n));let{spacing:u,size:d,jitter:f}=n,p=V(t.width,t.height,u),{cols:m,rows:h,originX:g,originY:_}=p,v=i(m,h),{sx:y,cx:b,sy:x,cy:S}=W(o);a.update(t,n,p,r.waves);let C=a.data;for(let e of s)e.length=0;for(let e=0;e<h;e++){let t=_+e*u;for(let n=0;n<m;n++){let r=e*m+n,i=r*4,a=g+n*u+f*(y*v[i]+b*v[i+1]),o=t+f*(S*v[i+2]-x*v[i+3]),l=C[r*2],p=Math.min(De,Math.round(C[r*2+1]*Ee));if(l===0)c(s[p],a,o,d,0);else{let e=l*l,t=1-e*(.5-e*(1/24-e*(1/720-e/40320))),n=l*(1-e*(1/6-e*(1/120-e/5040)));c(s[p],a,o,d*t,d*n)}}}e.globalAlpha=n.opacity,e.strokeStyle=n.color,e.lineCap=`round`;for(let e=0;e<=De;e++)s[e].length>0&&l(s[e],n.weight*(1+n.waveWeight*e/Ee));return r.waves.length>0||a.settling}}}var ke={name:`plus`,defaults:ge,animates:e=>e.jitter>0&&e.jitterSpeed>0,idleFps:ae},Ae=`#version 300 es
164
+ }`,he=[...ue,`uSize`,`uPointer`,`uPointerRadius`,`uWaves`,`uWaveStrength`,`uWaveWidth`,`uColor`];function ge(e,t){let n=Z(t),r=X(),i=new Float32Array(32),a=0,o=_(e,pe,me),s=o?v(e,o,he):null;return{update(e){n=Z(e)},render(t){if(t.reducedMotion||(a+=t.dt*n.jitterSpeed*U),r.advance(t,n.waveDuration,n.waveStrength!==0),!o||!s)return r.waves.length>0;r.pack(i,n.waveSpeed,n.waveDuration);let c=W(t.width,t.height,n.spacing),l=h(n.color);return e.useProgram(o),fe(e,s,c,t,n.spacing,a,n.jitter),e.uniform1f(s.uSize,n.size),e.uniform3f(s.uPointer,t.pointer.x,t.pointer.y,n.pointerStrength*t.pointer.influence),e.uniform1f(s.uPointerRadius,n.pointerRadius),e.uniform4fv(s.uWaves,i),e.uniform1f(s.uWaveStrength,n.waveStrength),e.uniform1f(s.uWaveWidth,n.waveWidth),e.uniform4f(s.uColor,l[0],l[1],l[2],l[3]*n.opacity),e.drawArrays(e.POINTS,0,c.cols*c.rows),r.waves.length>0},destroy(){e.deleteProgram(o)}}}var _e=d({...le,renderers:[S(ge),u(ce)]}),ve=Object.freeze({color:`#8b95a5`,opacity:.6,size:4,weight:1.2,spacing:28,jitter:1,jitterSpeed:.35,pointerAlign:1,turnTime:.25,waveSpeed:520,waveAlign:1,waveWeight:1.5,waveWidth:60,waveDuration:1.8}),ye=e=>Math.min(1,Math.max(0,e));function be(e){return{...e,opacity:ye(e.opacity),size:Math.max(.5,e.size),weight:Math.max(.1,e.weight),spacing:Math.max(4,e.spacing),jitter:Math.max(0,e.jitter),jitterSpeed:Math.max(0,e.jitterSpeed),pointerAlign:ye(e.pointerAlign),turnTime:Math.max(0,e.turnTime),waveSpeed:Math.max(1,e.waveSpeed),waveAlign:ye(e.waveAlign),waveWeight:Math.max(0,e.waveWeight),waveWidth:Math.max(1,e.waveWidth),waveDuration:Math.max(.05,e.waveDuration)}}function xe(e){return e.waveAlign!==0||e.waveWeight!==0}function Se(e){let t=e*e;return e*(.99997726+t*(-.33262347+t*(.19354346+t*(-.11643287+t*(.05265332-.0117212*t)))))}function Ce(e,t){let n=Math.abs(e);return n>=Math.abs(t)?n===0?0:Se(t/e):-Se(e/t)}var we=Math.PI/2,Te=.05;function Ee(e){return e-we*Math.round(e/we)}function De(){let e=new Float32Array,t=new Float32Array(32);function n(e,n,r){for(let i=0;i<e.length;i++){let a=e[i];t[i*4]=a.x,t[i*4+1]=a.y,t[i*4+2]=n*a.age,t[i*4+3]=J(a.age,r)}}let r=!1,i=!1,a=NaN,o=NaN,s=NaN,c=NaN,l=NaN,u=null,d=!1;return{get data(){return e},get changed(){return r},get settling(){return i},update(f,p,m,h){let{cols:g,rows:_,originX:v,originY:y}=m,{spacing:b,waveSpeed:x,waveWidth:S,waveDuration:C,waveAlign:w}=p,T=e.length!==g*_*2;T&&(e=new Float32Array(g*_*2));let E=p.pointerAlign*f.pointer.influence,{x:D,y:O}=f.pointer,k=!T&&!i&&!d&&h.length===0&&E===s&&(E===0||D===a&&O===o&&v===c&&y===l&&p===u);if(d=h.length>0,k){r=!1;return}a=D,o=O,s=E,c=v,l=y,u=p;let A=h.length;n(h,x,C);let j=3*S,M=Te/p.size,N=p.turnTime>0?1-Math.exp(-f.dt/p.turnTime):1;i=!1;for(let n=0;n<_;n++){let r=y+n*b;for(let a=0;a<g;a++){let o=v+a*b,s=0;E!==0&&(s=E*Ce(o-D,r-O));let c=0;for(let e=0;e<A*4;e+=4){let n=o-t[e],i=r-t[e+1],a=t[e+2]+j;if(Math.abs(n)>a||Math.abs(i)>a)continue;let l=Math.sqrt(n*n+i*i);if(Math.abs(l-t[e+2])>j)continue;let u=q(l,t[e+2],S)*t[e+3];c+=u,s+=w*Math.min(1,u)*Ce(n,i)}let l=(n*g+a)*2,u=Ee(s-e[l]);Math.abs(u)<M?e[l]=Ee(s):(e[l]=Ee(e[l]+u*N),i=!0),e[l+1]=c}}r=!0}}}var Oe=8,ke=16;function Ae(e,t){let n=be(t),r=X(),i=ee(),a=De(),o=0,s=Array.from({length:17},()=>C(512));function c(e,t,n,r,i){let a=w(e,4);a[e.length++]=t,a[e.length++]=n,a[e.length++]=r,a[e.length++]=i}function l(t,n){let{data:r,length:i}=t;e.lineWidth=n,e.beginPath();for(let t=0;t<i;t+=4){let n=r[t],i=r[t+1],a=r[t+2],o=r[t+3];e.moveTo(n-a,i-o),e.lineTo(n+a,i+o),e.moveTo(n+o,i-a),e.lineTo(n-o,i+a)}e.stroke()}return{update(e){n=be(e)},render(t){t.reducedMotion||(o+=t.dt*n.jitterSpeed*U),r.advance(t,n.waveDuration,xe(n));let{spacing:u,size:d,jitter:f}=n,p=W(t.width,t.height,u),{cols:m,rows:h,originX:g,originY:_}=p,v=i(m,h),{sx:y,cx:b,sy:x,cy:S}=te(o);a.update(t,n,p,r.waves);let C=a.data;for(let e of s)e.length=0;for(let e=0;e<h;e++){let t=_+e*u;for(let n=0;n<m;n++){let r=e*m+n,i=r*4,a=g+n*u+f*(y*v[i]+b*v[i+1]),o=t+f*(S*v[i+2]-x*v[i+3]),l=C[r*2],p=Math.min(ke,Math.round(C[r*2+1]*Oe));if(l===0)c(s[p],a,o,d,0);else{let e=l*l,t=1-e*(.5-e*(1/24-e*(1/720-e/40320))),n=l*(1-e*(1/6-e*(1/120-e/5040)));c(s[p],a,o,d*t,d*n)}}}e.globalAlpha=n.opacity,e.strokeStyle=n.color,e.lineCap=`round`;for(let e=0;e<=ke;e++)s[e].length>0&&l(s[e],n.weight*(1+n.waveWeight*e/Oe));return r.waves.length>0||a.settling}}}var je={name:`plus`,defaults:ve,animates:e=>e.jitter>0&&e.jitterSpeed>0,idleFps:re},Me=`#version 300 es
165
165
  precision highp float;
166
166
 
167
167
  layout(location = 0) in vec2 aTurn; // angle (radians), wave-crest height
168
168
 
169
- ${$}
169
+ ${de}
170
170
  uniform float uSize; // arm length, CSS px
171
171
  uniform float uWeight; // stroke weight, CSS px
172
172
  uniform float uWaveWeight;
@@ -186,7 +186,7 @@ void main() {
186
186
  vPointSize = 2.0 * (vArm + vHalfWeight) + 2.0; // room for the antialiased edge
187
187
  gl_PointSize = vPointSize;
188
188
  gl_Position = toClip(p);
189
- }`,je=`#version 300 es
189
+ }`,Ne=`#version 300 es
190
190
  precision highp float;
191
191
 
192
192
  uniform vec4 uColor; // straight RGBA, opacity applied
@@ -207,5 +207,248 @@ void main() {
207
207
  float d = min(arm(q), arm(q.yx));
208
208
  float a = uColor.a * clamp(0.5 - d, 0.0, 1.0);
209
209
  outColor = vec4(uColor.rgb * a, a); // premultiplied; the engine blends it over the background
210
- }`,Me=[...le,`uSize`,`uWeight`,`uWaveWeight`,`uColor`];function Ne(e,t){let n=ve(t),r=J(),i=Te(),a=0,o=-1,s=_(e,Ae,je),c=s?v(e,s,Me):null,l=e.createVertexArray(),u=e.createBuffer();return e.bindVertexArray(l),e.bindBuffer(e.ARRAY_BUFFER,u),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,0,0),e.bindVertexArray(null),{update(e){n=ve(e)},render(t){t.reducedMotion||(a+=t.dt*n.jitterSpeed*B),r.advance(t,n.waveDuration,ye(n));let d=V(t.width,t.height,n.spacing);i.update(t,n,d,r.waves);let f=r.waves.length>0||i.settling;if(!s||!c)return f;let p=d.cols*d.rows;e.bindBuffer(e.ARRAY_BUFFER,u),o===p?i.changed&&e.bufferSubData(e.ARRAY_BUFFER,0,i.data):(e.bufferData(e.ARRAY_BUFFER,i.data,e.DYNAMIC_DRAW),o=p);let m=h(n.color);return e.useProgram(s),ue(e,c,d,t,n.spacing,a,n.jitter),e.uniform1f(c.uSize,n.size),e.uniform1f(c.uWeight,n.weight),e.uniform1f(c.uWaveWeight,n.waveWeight),e.uniform4f(c.uColor,m[0],m[1],m[2],m[3]*n.opacity),e.bindVertexArray(l),e.drawArrays(e.POINTS,0,p),e.bindVertexArray(null),f},destroy(){e.deleteProgram(s),e.deleteBuffer(u),e.deleteVertexArray(l)}}}var Pe=d({...ke,renderers:[S(Ne),u(Oe)]});e.FULLSCREEN_VERTEX_SHADER=g,e.canvas2dRenderer=u,e.createBackground=i,e.createNoise3D=N,e.createProgram=_,e.defineStyle=d,e.dots=he,e.engineDefaults=r,e.getUniforms=v,e.parseColor=h,e.plus=Pe,e.topo=ne,e.webglRenderer=S});
210
+ }`,Pe=[...ue,`uSize`,`uWeight`,`uWaveWeight`,`uColor`];function Fe(e,t){let n=be(t),r=X(),i=De(),a=0,o=-1,s=_(e,Me,Ne),c=s?v(e,s,Pe):null,l=e.createVertexArray(),u=e.createBuffer();return e.bindVertexArray(l),e.bindBuffer(e.ARRAY_BUFFER,u),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,0,0),e.bindVertexArray(null),{update(e){n=be(e)},render(t){t.reducedMotion||(a+=t.dt*n.jitterSpeed*U),r.advance(t,n.waveDuration,xe(n));let d=W(t.width,t.height,n.spacing);i.update(t,n,d,r.waves);let f=r.waves.length>0||i.settling;if(!s||!c)return f;let p=d.cols*d.rows;e.bindBuffer(e.ARRAY_BUFFER,u),o===p?i.changed&&e.bufferSubData(e.ARRAY_BUFFER,0,i.data):(e.bufferData(e.ARRAY_BUFFER,i.data,e.DYNAMIC_DRAW),o=p);let m=h(n.color);return e.useProgram(s),fe(e,c,d,t,n.spacing,a,n.jitter),e.uniform1f(c.uSize,n.size),e.uniform1f(c.uWeight,n.weight),e.uniform1f(c.uWaveWeight,n.waveWeight),e.uniform4f(c.uColor,m[0],m[1],m[2],m[3]*n.opacity),e.bindVertexArray(l),e.drawArrays(e.POINTS,0,p),e.bindVertexArray(null),f},destroy(){e.deleteProgram(s),e.deleteBuffer(u),e.deleteVertexArray(l)}}}var Ie=d({...je,renderers:[S(Fe),u(Ae)]});function Le(e,t,n){if(t===0)return[n,n,n];let r=n<.5?n*(1+t):n+t-n*t,i=2*n-r,a=e=>{let t=e%1;return t<0&&(t+=1),t<1/6?i+(r-i)*6*t:t<1/2?r:t<2/3?i+(r-i)*(2/3-t)*6:i};return[a(e+1/3),a(e),a(e-1/3)]}function Q(e,t){if(e.color){let[t,n,r,i]=h(e.color);return[t*i,n*i,r*i]}return Le(((.55+Math.floor(t*e.colorSpeed)*.61803398875)%1+1)%1,1,.5)}var Re=Object.freeze({color:null,colorSpeed:10,opacity:.85,curl:10,force:6e3,radius:75,fade:.3,resolution:128,shading:!0}),ze=(e,t,n)=>Math.min(n,Math.max(t,e));function Be(e){return{...e,colorSpeed:Math.max(0,e.colorSpeed),opacity:ze(e.opacity,0,1),curl:ze(e.curl,0,100),force:Math.max(0,e.force),radius:Math.max(2,e.radius),fade:Math.max(.2,e.fade),resolution:Math.round(ze(e.resolution,48,192))}}var Ve=.15,He=.5,Ue=.1,We=.003,Ge=2.2,Ke=2.2,qe=.7,Je=3.5,Ye=1440,$=(e,t,n)=>Math.min(n,Math.max(t,e));function Xe(e,t){let n=e,r=t,i=n*r,a=new Float32Array(i),o=new Float32Array(i),s=new Float32Array(i),c=new Float32Array(i),l=new Float32Array(i),u=new Float32Array(i),d=new Float32Array(i),f=new Float32Array(i),p=new Float32Array(i),m=new Float32Array(i),h=new Float32Array(i),g=new Float32Array(i),_=new Float32Array(i),v=new Float32Array(i);function y(e,t,i){let a=$(t,0,n-1),o=$(i,0,r-1),s=Math.floor(a),c=Math.floor(o),l=Math.min(s+1,n-1),u=Math.min(c+1,r-1),d=a-s,f=o-c,p=e[c*n+s]*(1-d)+e[c*n+l]*d,m=e[u*n+s]*(1-d)+e[u*n+l]*d;return p*(1-f)+m*f}function b(){for(let e=0;e<n;e++)a[e]=0,a[(r-1)*n+e]=0,o[e]=0,o[(r-1)*n+e]=0;for(let e=0;e<r;e++)a[e*n]=0,a[e*n+n-1]=0,o[e*n]=0,o[e*n+n-1]=0}function x(e,t){for(let e=1;e<r-1;e++)for(let t=1;t<n-1;t++){let r=e*n+t;g[r]=.5*(o[r+1]-o[r-1]-(a[r+n]-a[r-n]))}for(let i=1;i<r-1;i++)for(let r=1;r<n-1;r++){let s=i*n+r,c=.5*(Math.abs(g[s+1])-Math.abs(g[s-1])),l=.5*(Math.abs(g[s-n])-Math.abs(g[s+n])),u=Math.hypot(c,l)+1e-4,d=t*g[s]*e/u;a[s]=$(a[s]+c*d,-1e3,1e3),o[s]=$(o[s]+l*d,-1e3,1e3)}}function S(e,t){t.curl>0&&x(e,t.curl);for(let e=1;e<r-1;e++)for(let t=1;t<n-1;t++){let r=e*n+t;h[r]=.5*(a[r+1]-a[r-1]+o[r+n]-o[r-n])}_.fill(0);for(let e=0;e<14;e++){for(let e=1;e<r-1;e++)for(let t=1;t<n-1;t++){let r=e*n+t;v[r]=(_[r-1]+_[r+1]+_[r-n]+_[r+n]-h[r])*.25}[_,v]=[v,_]}for(let e=1;e<r-1;e++)for(let t=1;t<n-1;t++){let r=e*n+t;a[r]-=.5*(_[r+1]-_[r-1]),o[r]-=.5*(_[r+n]-_[r-n])}b()}function C(e,t){for(let i=0;i<r;i++)for(let r=0;r<n;r++){let l=i*n+r,u=r-a[l]*e,d=i-o[l]*e;s[l]=y(a,u,d)*t,c[l]=y(o,u,d)*t}[a,s]=[s,a],[o,c]=[c,o],b()}function w(e,t){for(let i=0;i<r;i++)for(let r=0;r<n;r++){let s=i*n+r,c=r-a[s]*e,h=i-o[s]*e;f[s]=y(l,c,h)*t,p[s]=y(u,c,h)*t,m[s]=y(d,c,h)*t}[l,f]=[f,l],[u,p]=[p,u],[d,m]=[m,d]}return{width:n,height:r,get dyeR(){return l},get dyeG(){return u},get dyeB(){return d},splat(e,t,i,s,c,f,p,m){let h=Math.max(1,p)/Math.max(1,m),g=Math.max(5e-4,f/m),_=e/Math.max(1,p),v=t/Math.max(1,m),y=g/h*n*3,b=g*r*3,x=Math.max(0,Math.floor(_*n-y)),S=Math.min(n-1,Math.ceil(_*n+y)),C=Math.max(0,Math.floor(v*r-b)),w=Math.min(r-1,Math.ceil(v*r+b)),T=$(i,-1e3,1e3),E=$(s,-1e3,1e3),D=g*g;for(let e=C;e<=w;e++){let t=(e+.5)/r-v;for(let r=x;r<=S;r++){let i=((r+.5)/n-_)*h,s=i*i+t*t;if(s>D*9)continue;let f=Math.exp(-s/D),p=e*n+r;a[p]=$(a[p]+T*f,-1e3,1e3),o[p]=$(o[p]+E*f,-1e3,1e3),l[p]+=c[0]*Ve*f,u[p]+=c[1]*Ve*f,d[p]+=c[2]*Ve*f}}},step(e,t){let n=Math.min(e,1/30);n<=0||(S(n,t),C(n,1/(1+n/He)),w(n,1/(1+n/t.fade)))},clear(){for(let e of[a,o,s,c,l,u,d,f,p,m,_,v,h,g])e.fill(0)}}}function Ze(e,t,n){let r=Math.max(1,t)/Math.max(1,n),i=Math.max(16,Math.round(e));return r>=1?{width:i,height:Math.max(12,Math.round(i/r))}:{width:Math.max(12,Math.round(i*r)),height:i}}var Qe=Math.PI*2;function $e(e,t){let n=Be(t),r=null,i=null,a=null,o=null,s=0,c=0,l=-1,u=0,d=0,f=0,p=0,m=0,h=!1,g=!0;function _(e,t){let u=Ze(n.resolution,e,t);r=Xe(u.width,u.height),a=document.createElement(`canvas`),a.width=u.width,a.height=u.height,o=a.getContext(`2d`),i=o?.createImageData(u.width,u.height)??null,s=e,c=t,l=n.resolution,g=!0}function v(){d=Math.max(d,Je+.5),f=0}function y(e,t,n,i,a,o,s){r?.splat(t,n,i,a,o,s,e.width,e.height)}function b(e){let t=Q(n,u),r=[t[0]*Ke,t[1]*Ke,t[2]*Ke],i=Math.random()*Qe,a=n.force*We;y(e,e.width*(.34+Math.random()*.18),e.height*(.4+Math.random()*.2),Math.cos(i)*a,Math.sin(i)*a,r,n.radius*Ge),v()}function x(e,t,r){let i=Q(n,u),a=[i[0]*10,i[1]*10,i[2]*10];y(e,t,r,10*(Math.random()-.5),30*(Math.random()-.5),a,n.radius),v()}function S(t){if(!r||!i||!a||!o)return;let{dyeR:s,dyeG:c,dyeB:l}=r,u=i.data;for(let e=0;e<s.length;e++){let t=Math.min(1,Math.max(0,s[e])),n=Math.min(1,Math.max(0,c[e])),r=Math.min(1,Math.max(0,l[e])),i=Math.max(t,Math.max(n,r)),a=i>1e-4?255/i:0,o=e*4;u[o]=Math.round(t*a),u[o+1]=Math.round(n*a),u[o+2]=Math.round(r*a),u[o+3]=Math.round(i*255)}o.putImageData(i,0,0),e.globalAlpha=n.opacity,e.imageSmoothingEnabled=!0,e.drawImage(a,0,0,t.width,t.height),e.globalAlpha=1}return{update(e){n=Be(e)},render(e){if(r&&e.width===s&&e.height===c&&n.resolution===l||_(e.width,e.height),e.reducedMotion)return g&&(g=!1,b(e)),S(e),!1;let t=Math.min(e.dt,1/60),{pointer:i}=e;if(g&&(g=!1,b(e)),i.influence>0){if(h){let t=i.x-p,r=i.y-m,a=t/Math.max(1,e.width),o=r/Math.max(1,e.height);if(Math.hypot(t,r)>.5){let t=Q(n,u),r=n.force*i.influence;y(e,i.x,i.y,a*r,o*r,t,n.radius),v()}}p=i.x,m=i.y,h=!0}else h=!1;for(let t of e.clicks)x(e,t.x,t.y);if(t>0){if(f+=t,f>=3.5)return r?.clear(),f=0,d=0,S(e),!1;let i=f>.5?{...n,fade:Math.min(n.fade,qe)}:n;r?.step(t,i),u+=t,d=Math.max(0,d-t)}return S(e),d>0}}}var et={name:`fluid`,defaults:Re,animates:()=>!1},tt=Math.PI*2,nt=`#version 300 es
211
+ precision highp float;
212
+
213
+ uniform vec2 uTexelSize;
214
+
215
+ out vec2 vUv;
216
+ out vec2 vL;
217
+ out vec2 vR;
218
+ out vec2 vT;
219
+ out vec2 vB;
220
+
221
+ void main() {
222
+ vec2 p = vec2(float((gl_VertexID << 1) & 2), float(gl_VertexID & 2));
223
+ vUv = p;
224
+ vL = vUv - vec2(uTexelSize.x, 0.0);
225
+ vR = vUv + vec2(uTexelSize.x, 0.0);
226
+ vT = vUv + vec2(0.0, uTexelSize.y);
227
+ vB = vUv - vec2(0.0, uTexelSize.y);
228
+ gl_Position = vec4(p * 2.0 - 1.0, 0.0, 1.0);
229
+ }`,rt=`#version 300 es
230
+ precision highp float;
231
+
232
+ uniform sampler2D uTarget;
233
+ uniform vec2 uPoint;
234
+ uniform vec3 uColor;
235
+ uniform float uRadius; // squared radius, in screens-heights
236
+ uniform float uAspect;
237
+
238
+ in vec2 vUv;
239
+ out vec4 outColor;
240
+
241
+ void main() {
242
+ vec2 p = vUv - uPoint;
243
+ p.x *= uAspect;
244
+ vec3 splat = exp(-dot(p, p) / uRadius) * uColor;
245
+ outColor = vec4(texture(uTarget, vUv).rgb + splat, 1.0);
246
+ }`,it=`#version 300 es
247
+ precision highp float;
248
+
249
+ uniform sampler2D uVelocity;
250
+ uniform sampler2D uSource;
251
+ uniform vec2 uTexelSize;
252
+ uniform float uDt;
253
+ uniform float uDissipation;
254
+
255
+ in vec2 vUv;
256
+ out vec4 outColor;
257
+
258
+ void main() {
259
+ vec2 coord = vUv - uDt * texture(uVelocity, vUv).xy * uTexelSize;
260
+ outColor = texture(uSource, coord) / (1.0 + uDissipation * uDt);
261
+ }`,at=`#version 300 es
262
+ precision highp float;
263
+
264
+ uniform sampler2D uVelocity;
265
+ uniform vec2 uTexelSize;
266
+
267
+ in vec2 vUv;
268
+ in vec2 vL;
269
+ in vec2 vR;
270
+ in vec2 vT;
271
+ in vec2 vB;
272
+ out vec4 outColor;
273
+
274
+ void main() {
275
+ float L = texture(uVelocity, vL).x;
276
+ float R = texture(uVelocity, vR).x;
277
+ float T = texture(uVelocity, vT).y;
278
+ float B = texture(uVelocity, vB).y;
279
+ vec2 C = texture(uVelocity, vUv).xy;
280
+ if (vL.x < 0.0) L = -C.x;
281
+ if (vR.x > 1.0) R = -C.x;
282
+ if (vT.y > 1.0) T = -C.y;
283
+ if (vB.y < 0.0) B = -C.y;
284
+ outColor = vec4(0.5 * (R - L + T - B), 0.0, 0.0, 1.0);
285
+ }`,ot=`#version 300 es
286
+ precision highp float;
287
+
288
+ uniform sampler2D uVelocity;
289
+ uniform vec2 uTexelSize;
290
+
291
+ in vec2 vL;
292
+ in vec2 vR;
293
+ in vec2 vT;
294
+ in vec2 vB;
295
+ out vec4 outColor;
296
+
297
+ void main() {
298
+ float L = texture(uVelocity, vL).y;
299
+ float R = texture(uVelocity, vR).y;
300
+ float T = texture(uVelocity, vT).x;
301
+ float B = texture(uVelocity, vB).x;
302
+ outColor = vec4(0.5 * (R - L - T + B), 0.0, 0.0, 1.0);
303
+ }`,st=`#version 300 es
304
+ precision highp float;
305
+
306
+ uniform sampler2D uVelocity;
307
+ uniform sampler2D uCurl;
308
+ uniform vec2 uTexelSize;
309
+ uniform float uDt;
310
+ uniform float uStrength;
311
+
312
+ in vec2 vUv;
313
+ in vec2 vL;
314
+ in vec2 vR;
315
+ in vec2 vT;
316
+ in vec2 vB;
317
+ out vec4 outColor;
318
+
319
+ void main() {
320
+ float L = texture(uCurl, vL).x;
321
+ float R = texture(uCurl, vR).x;
322
+ float T = texture(uCurl, vT).x;
323
+ float B = texture(uCurl, vB).x;
324
+ float C = texture(uCurl, vUv).x;
325
+ vec2 force = 0.5 * vec2(abs(T) - abs(B), abs(R) - abs(L));
326
+ force /= length(force) + 1e-4;
327
+ force *= uStrength * C;
328
+ force.y *= -1.0;
329
+ vec2 velocity = texture(uVelocity, vUv).xy + force * uDt;
330
+ outColor = vec4(clamp(velocity, vec2(-1000.0), vec2(1000.0)), 0.0, 1.0);
331
+ }`,ct=`#version 300 es
332
+ precision highp float;
333
+
334
+ uniform sampler2D uPressure;
335
+ uniform sampler2D uDivergence;
336
+ uniform vec2 uTexelSize;
337
+
338
+ in vec2 vUv;
339
+ in vec2 vL;
340
+ in vec2 vR;
341
+ in vec2 vT;
342
+ in vec2 vB;
343
+ out vec4 outColor;
344
+
345
+ void main() {
346
+ float L = texture(uPressure, vL).x;
347
+ float R = texture(uPressure, vR).x;
348
+ float T = texture(uPressure, vT).x;
349
+ float B = texture(uPressure, vB).x;
350
+ float divergence = texture(uDivergence, vUv).x;
351
+ outColor = vec4((L + R + T + B - divergence) * 0.25, 0.0, 0.0, 1.0);
352
+ }`,lt=`#version 300 es
353
+ precision highp float;
354
+
355
+ uniform sampler2D uPressure;
356
+ uniform sampler2D uVelocity;
357
+ uniform vec2 uTexelSize;
358
+
359
+ in vec2 vUv;
360
+ in vec2 vL;
361
+ in vec2 vR;
362
+ in vec2 vT;
363
+ in vec2 vB;
364
+ out vec4 outColor;
365
+
366
+ void main() {
367
+ float L = texture(uPressure, vL).x;
368
+ float R = texture(uPressure, vR).x;
369
+ float T = texture(uPressure, vT).x;
370
+ float B = texture(uPressure, vB).x;
371
+ vec2 velocity = texture(uVelocity, vUv).xy - vec2(R - L, T - B);
372
+ outColor = vec4(velocity, 0.0, 1.0);
373
+ }`,ut=`#version 300 es
374
+ precision highp float;
375
+
376
+ uniform sampler2D uTexture;
377
+ uniform float uValue;
378
+
379
+ in vec2 vUv;
380
+ out vec4 outColor;
381
+
382
+ void main() {
383
+ outColor = vec4(uValue * texture(uTexture, vUv).rgb, 1.0);
384
+ }`,dt=`#version 300 es
385
+ precision highp float;
386
+
387
+ uniform sampler2D uDye;
388
+ uniform vec2 uTexelSize;
389
+ uniform float uOpacity;
390
+ uniform bool uShading;
391
+
392
+ in vec2 vUv;
393
+ in vec2 vL;
394
+ in vec2 vR;
395
+ in vec2 vT;
396
+ in vec2 vB;
397
+ out vec4 outColor;
398
+
399
+ void main() {
400
+ vec3 c = texture(uDye, vUv).rgb;
401
+ if (uShading) {
402
+ vec3 lc = texture(uDye, vL).rgb;
403
+ vec3 rc = texture(uDye, vR).rgb;
404
+ vec3 tc = texture(uDye, vT).rgb;
405
+ vec3 bc = texture(uDye, vB).rgb;
406
+ float dx = length(rc) - length(lc);
407
+ float dy = length(tc) - length(bc);
408
+ vec3 normal = normalize(vec3(dx, dy, length(uTexelSize)));
409
+ float diffuse = clamp(dot(normal, vec3(0.0, 0.0, 1.0)) + 0.7, 0.7, 1.0);
410
+ c *= diffuse;
411
+ }
412
+ vec3 colour = clamp(c, 0.0, 1.0);
413
+ float alpha = clamp(max(colour.r, max(colour.g, colour.b)) * uOpacity, 0.0, 1.0);
414
+ outColor = vec4(colour * uOpacity, alpha);
415
+ }`;function ft(e,t){if(!e.getExtension(`EXT_color_buffer_float`))throw Error(`interactive-bg: fluid needs EXT_color_buffer_float`);let n=Be(t);function r(t,n){let r=_(e,nt,t);if(!r)throw Error(`interactive-bg: fluid could not create a shader program`);return{program:r,uniforms:v(e,r,n)}}let i=r(rt,[`uTarget`,`uPoint`,`uColor`,`uRadius`,`uAspect`]),a=r(it,[`uVelocity`,`uSource`,`uDt`,`uDissipation`,`uTexelSize`]),o=r(at,[`uVelocity`,`uTexelSize`]),s=r(ot,[`uVelocity`,`uTexelSize`]),c=r(st,[`uVelocity`,`uCurl`,`uDt`,`uStrength`,`uTexelSize`]),l=r(ct,[`uPressure`,`uDivergence`,`uTexelSize`]),u=r(lt,[`uPressure`,`uVelocity`,`uTexelSize`]),d=r(ut,[`uTexture`,`uValue`]),f=r(dt,[`uDye`,`uOpacity`,`uShading`,`uTexelSize`]);function p(t,n){let r=e.createTexture(),i=e.createFramebuffer();if(!r||!i)throw Error(`interactive-bg: fluid could not allocate a render target`);if(e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,e.RGBA16F,t,n,0,e.RGBA,e.HALF_FLOAT,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0),e.checkFramebufferStatus(e.FRAMEBUFFER)!==e.FRAMEBUFFER_COMPLETE)throw Error(`interactive-bg: fluid render target is incomplete`);return e.viewport(0,0,t,n),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),{texture:r,framebuffer:i,width:t,height:n}}function m(e,t){let n={read:p(e,t),write:p(e,t),swap(){[n.read,n.write]=[n.write,n.read]}};return n}function h(t){e.deleteTexture(t.texture),e.deleteFramebuffer(t.framebuffer)}let g=0,y=0,b=0,x=0,S=0,C=0,w=-1,T,E,D,O,k;T=m(1,1),E=m(1,1),D=m(1,1),O=p(1,1),k=p(1,1);function A(e,t){for(let e of[T.read,T.write,E.read,E.write,D.read,D.write,O,k])h(e);let r=Ze(n.resolution,e,t),i=Ze(Math.min(Ye,Math.max(256,n.resolution*8)),e,t);g=r.width,y=r.height,b=i.width,x=i.height,T=m(g,y),E=m(b,x),D=m(g,y),O=p(g,y),k=p(g,y),U=!0}function j(t,n){e.bindFramebuffer(e.FRAMEBUFFER,n.framebuffer),e.viewport(0,0,n.width,n.height),e.useProgram(t.program),e.drawArrays(e.TRIANGLES,0,3)}function M(t,n){e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,n)}function N(t,n,r,a,o,s){let{uniforms:c,program:l}=i;M(0,T.read.texture),e.useProgram(l),e.uniform1i(c.uTarget,0),e.uniform2f(c.uPoint,t,n),e.uniform3f(c.uColor,r,a,0),e.uniform1f(c.uRadius,o*o),e.uniform1f(c.uAspect,s),j(i,T.write),T.swap()}function P(t,n,r,a,o){let{uniforms:s,program:c}=i;M(0,E.read.texture),e.useProgram(c),e.uniform1i(s.uTarget,0),e.uniform2f(s.uPoint,t,n),e.uniform3f(s.uColor,r[0]*Ve,r[1]*Ve,r[2]*Ve),e.uniform1f(s.uRadius,a*a),e.uniform1f(s.uAspect,o),j(i,E.write),E.swap()}function F(e,t,n,r,i,a,o,s){let c=e/(s*o),l=1-t/s,u=Math.max(5e-4,a/s);N(c,l,n,-r,u,o),P(c,l,i,u,o)}function I(t){e.disable(e.BLEND);let r=z>.5?1/qe:0;e.useProgram(s.program),M(0,T.read.texture),e.uniform1i(s.uniforms.uVelocity,0),e.uniform2f(s.uniforms.uTexelSize,1/g,1/y),j(s,k),e.useProgram(c.program),M(0,T.read.texture),M(1,k.texture),e.uniform1i(c.uniforms.uVelocity,0),e.uniform1i(c.uniforms.uCurl,1),e.uniform2f(c.uniforms.uTexelSize,1/g,1/y),e.uniform1f(c.uniforms.uDt,t),e.uniform1f(c.uniforms.uStrength,n.curl),j(c,T.write),T.swap(),e.useProgram(o.program),M(0,T.read.texture),e.uniform1i(o.uniforms.uVelocity,0),e.uniform2f(o.uniforms.uTexelSize,1/g,1/y),j(o,O),e.useProgram(d.program),M(0,D.read.texture),e.uniform1i(d.uniforms.uTexture,0),e.uniform1f(d.uniforms.uValue,Ue),j(d,D.write),D.swap();for(let t=0;t<20;t++)e.useProgram(l.program),M(0,D.read.texture),M(1,O.texture),e.uniform1i(l.uniforms.uPressure,0),e.uniform1i(l.uniforms.uDivergence,1),e.uniform2f(l.uniforms.uTexelSize,1/g,1/y),j(l,D.write),D.swap();e.useProgram(u.program),M(0,D.read.texture),M(1,T.read.texture),e.uniform1i(u.uniforms.uPressure,0),e.uniform1i(u.uniforms.uVelocity,1),e.uniform2f(u.uniforms.uTexelSize,1/g,1/y),j(u,T.write),T.swap(),e.useProgram(a.program),e.uniform1i(a.uniforms.uVelocity,0),e.uniform1i(a.uniforms.uSource,1),e.uniform1f(a.uniforms.uDt,t),e.uniform2f(a.uniforms.uTexelSize,1/g,1/y),M(0,T.read.texture),M(1,T.read.texture),e.uniform1f(a.uniforms.uDissipation,1/He),j(a,T.write),T.swap(),e.useProgram(a.program),e.uniform1i(a.uniforms.uVelocity,0),e.uniform1i(a.uniforms.uSource,1),e.uniform1f(a.uniforms.uDt,t),e.uniform1f(a.uniforms.uDissipation,1/n.fade+r),e.uniform2f(a.uniforms.uTexelSize,1/g,1/y),M(0,T.read.texture),M(1,E.read.texture),j(a,E.write),E.swap()}let L=0,R=0,z=0,B=0,V=0,H=!1,U=!0;function W(){R=Math.max(R,Je+.5),z=0}function G(e,t,r,i,a){let o=Q(n,L),s=[o[0]*Ke,o[1]*Ke,o[2]*Ke],c=Math.random()*tt,l=n.force*We;F(e,t,Math.cos(c)*l,Math.sin(c)*l,s,r,i,a)}function ee(e,t,r,i){let a=Q(n,L),o=[a[0]*10,a[1]*10,a[2]*10];F(e,t,10*(Math.random()-.5),30*(Math.random()-.5),o,n.radius,r,i),W()}function te(e,t){(e!==S||t!==C||n.resolution!==w)&&(S=e,C=t,w=n.resolution,A(e,t))}function K(t){for(let n of[t.read,t.write])e.bindFramebuffer(e.FRAMEBUFFER,n.framebuffer),e.viewport(0,0,n.width,n.height),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)}function q(t){e.bindFramebuffer(e.FRAMEBUFFER,null),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),e.enable(e.BLEND),e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA),e.useProgram(f.program),M(0,E.read.texture),e.uniform1i(f.uniforms.uDye,0),e.uniform2f(f.uniforms.uTexelSize,1/Math.max(1,t.width*t.dpr),1/Math.max(1,t.height*t.dpr)),e.uniform1f(f.uniforms.uOpacity,n.opacity),e.uniform1i(f.uniforms.uShading,+!!n.shading),e.drawArrays(e.TRIANGLES,0,3)}return{update(e){n=Be(e)},render(e){if(te(e.width,e.height),e.reducedMotion){if(U){U=!1;let t=e.width/Math.max(1,e.height);G(e.width*(.34+Math.random()*.18),e.height*(.4+Math.random()*.2),n.radius*Ge,t,e.height)}return q(e),!1}let t=Math.min(e.dt,1/60),r=e.width/Math.max(1,e.height),{pointer:i}=e;if(U&&(U=!1,G(e.width*(.34+Math.random()*.18),e.height*(.4+Math.random()*.2),n.radius*Ge,r,e.height),W()),i.influence>0){if(H){let t=i.x-B,a=i.y-V,o=t/Math.max(1,e.width),s=a/Math.max(1,e.height);if(Math.hypot(t,a)>.5){let t=Q(n,L),a=n.force*i.influence;F(i.x,i.y,o*a,s*a,t,n.radius,r,e.height),W()}}B=i.x,V=i.y,H=!0}else H=!1;for(let t of e.clicks)ee(t.x,t.y,r,e.height);if(t>0){if(z+=t,z>=3.5)return K(E),K(T),z=0,R=0,q(e),!1;I(t),L+=t,R=Math.max(0,R-t)}return q(e),R>0},destroy(){for(let e of[T.read,T.write,E.read,E.write,D.read,D.write,O,k])h(e);for(let t of[i,a,o,s,c,l,u,d,f])e.deleteProgram(t.program)}}}var pt=d({...et,renderers:[S(ft),u($e)]}),mt=.22,ht=.8,gt=Math.PI*2,_t=Math.PI/2,vt=2048,yt=new Float32Array(2049);for(let e=0;e<=vt;e++)yt[e]=Math.sin(e/vt*gt);function bt(e){let t=e*vt/gt;t-=Math.floor(t/vt)*vt;let n=t|0,r=t-n;return yt[n]+(yt[n+1]-yt[n])*r}function xt(e){return bt(e+_t)}function St(e,t,n,r,i,a,o,s,c){let l=e.data,u=r*mt*s.speed,d=s.frequency,f=s.colorScale,p=s.warp,m=s.chroma,h=s.opacity,g=s.pointerStrength*o,_=Math.max(1,t)/Math.max(1,n),v=(e,t,n)=>{let r=e+n,i=t+n;for(let e=1;e<7;e++)r+=p*.3*bt(e*5*i+u)/e,i+=p*.1*xt(e*3*r+u)/e;return r};for(let e=0;e<n;e++){let r=(e+.5)/n;for(let n=0;n<t;n++){let o=(n+.5)/t,s=o,u=r;if(g>0){let e=(o-i)*_,t=r-a,n=Math.exp(-(e*e+t*t)/.03)*g;s+=e/_*n,u+=t*n}let p=bt(v(s,u,0)*d)*.5+.5,y=bt(v(s,u,m)*d)*.5+.5,b=bt(v(s,u,2*m)*d)*.5+.5,x=p**+f,S=y**+f,C=b**+f,w=c[0]*.19999999999999996+x*ht,T=c[1]*.19999999999999996+S*ht,E=c[2]*.19999999999999996+C*ht,D=(e*t+n)*4;l[D]=Math.round(Math.min(1,Math.max(0,w))*255),l[D+1]=Math.round(Math.min(1,Math.max(0,T))*255),l[D+2]=Math.round(Math.min(1,Math.max(0,E))*255),l[D+3]=Math.round(h*255)}}}var Ct=Object.freeze({opacity:1,speed:1,frequency:7,colorScale:10,baseColor:`#5735ff`,chroma:.02,warp:1,pointerStrength:.35}),wt=(e,t,n)=>Math.min(n,Math.max(t,e));function Tt(e){return{...e,opacity:wt(e.opacity,0,1),speed:Math.max(0,e.speed),frequency:wt(e.frequency,.5,40),colorScale:wt(e.colorScale,.5,40),chroma:wt(e.chroma,0,.2),warp:wt(e.warp,0,4),pointerStrength:wt(e.pointerStrength,0,1.5)}}function Et(e,t){let n=Math.max(1,e)/Math.max(1,t);return n>=1?{width:128,height:Math.max(1,Math.round(128/n))}:{width:Math.max(1,Math.round(128*n)),height:128}}var Dt=12;function Ot(e,t){let n=Tt(t),r=0,i=0,a=!1,o=null,s=null,c=null,l=0,u=0,d=0,f=0;function p(e,t){let n=Et(e,t);l=n.width,u=n.height,o=document.createElement(`canvas`),o.width=l,o.height=u,s=o.getContext(`2d`),c=s?.createImageData(l,u)??null,d=e,f=t,i=0,a=!1}return{update(e){n=Tt(e)},render(t){if(c&&t.width===d&&t.height===f||p(t.width,t.height),c&&o&&s){if(t.reducedMotion){if(!a){let[e,t,i]=h(n.baseColor);St(c,l,u,r,.5,.5,0,n,[e,t,i]),s.putImageData(c,0,0),a=!0}}else if(i+=t.dt,!a||i>=1/Dt){r+=i,i=0;let[e,o,d]=h(n.baseColor);St(c,l,u,r,t.pointer.x/Math.max(1,t.width),t.pointer.y/Math.max(1,t.height),t.pointer.influence,n,[e,o,d]),s.putImageData(c,0,0),a=!0}e.imageSmoothingEnabled=!0,e.drawImage(o,0,0,t.width,t.height)}}}}var kt={name:`shimmer`,defaults:Ct,animates:e=>e.speed>0,idleFps:()=>16},At=`#version 300 es
416
+ precision highp float;
417
+
418
+ uniform vec2 uRes;
419
+ uniform float uTime;
420
+ uniform float uFrequency;
421
+ uniform float uColorScale;
422
+ uniform vec3 uBaseColor;
423
+ uniform float uChroma;
424
+ uniform float uWarp;
425
+ uniform float uOpacity;
426
+ uniform vec3 uPointer; // x, y, strength × influence
427
+
428
+ out vec4 fragColor;
429
+
430
+ vec2 distort(vec2 p, float offset) {
431
+ p += offset;
432
+ for (float i = 1.0; i < 7.0; i++) {
433
+ p.x += uWarp * 0.3 / i * sin(i * 5.0 * p.y + uTime);
434
+ p.y += uWarp * 0.1 / i * cos(i * 3.0 * p.x + uTime);
435
+ }
436
+ return p;
437
+ }
438
+
439
+ void main() {
440
+ // gl_FragCoord is bottom-up; flip it so pointer coordinates are top-down.
441
+ vec2 uv = vec2(gl_FragCoord.x / uRes.x, 1.0 - gl_FragCoord.y / uRes.y);
442
+
443
+ float aspect = uRes.x / uRes.y;
444
+ vec2 d = (uv - uPointer.xy) * vec2(aspect, 1.0);
445
+ uv += vec2(d.x / aspect, d.y) * exp(-dot(d, d) / 0.03) * uPointer.z;
446
+
447
+ float r = sin(distort(uv, 0.0).x * uFrequency) * 0.5 + 0.5;
448
+ float g = sin(distort(uv, uChroma).x * uFrequency) * 0.5 + 0.5;
449
+ float b = sin(distort(uv, 2.0 * uChroma).x * uFrequency) * 0.5 + 0.5;
450
+ vec3 colour = pow(vec3(r, g, b), vec3(uColorScale));
451
+ vec3 finalColour = mix(uBaseColor, colour, 0.8);
452
+ fragColor = vec4(finalColour * uOpacity, uOpacity);
453
+ }`,jt=[`uRes`,`uTime`,`uFrequency`,`uColorScale`,`uBaseColor`,`uChroma`,`uWarp`,`uOpacity`,`uPointer`];function Mt(e,t){let n=Tt(t),r=0,i=_(e,g,At),a=i?v(e,i,jt):null;return{update(e){n=Tt(e)},render(t){if(!i||!a)return;!t.reducedMotion&&n.speed>0&&(r+=t.dt);let[o,s,c]=h(n.baseColor);e.useProgram(i),e.uniform2f(a.uRes,e.drawingBufferWidth,e.drawingBufferHeight),e.uniform1f(a.uTime,r*mt*n.speed),e.uniform1f(a.uFrequency,n.frequency),e.uniform1f(a.uColorScale,n.colorScale),e.uniform3f(a.uBaseColor,o,s,c),e.uniform1f(a.uChroma,n.chroma),e.uniform1f(a.uWarp,n.warp),e.uniform1f(a.uOpacity,n.opacity),e.uniform3f(a.uPointer,t.pointer.x/Math.max(1,t.width),t.pointer.y/Math.max(1,t.height),t.reducedMotion?0:n.pointerStrength*t.pointer.influence),e.drawArrays(e.TRIANGLES,0,3)},destroy(){e.deleteProgram(i)}}}var Nt=d({...kt,renderers:[S(Mt),u(Ot)]});e.FULLSCREEN_VERTEX_SHADER=g,e.canvas2dRenderer=u,e.createBackground=i,e.createNoise3D=N,e.createProgram=_,e.defineStyle=d,e.dots=_e,e.engineDefaults=r,e.fluid=pt,e.getUniforms=v,e.parseColor=h,e.plus=Ie,e.shimmer=Nt,e.topo=H,e.webglRenderer=S});
211
454
  //# sourceMappingURL=index.umd.js.map