asciify-engine 4.24.0 → 4.26.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 (105) hide show
  1. package/CHANGELOG.md +325 -0
  2. package/README.md +71 -718
  3. package/dist/core.cjs +1 -1
  4. package/dist/core.js +1 -1
  5. package/dist/field.cjs +1 -1
  6. package/dist/field.d.cts +132 -272
  7. package/dist/field.d.ts +132 -272
  8. package/dist/field.js +1 -1
  9. package/dist/glyph-field-C2fQIlnq.d.cts +292 -0
  10. package/dist/glyph-field-DRC-7uVf.d.ts +292 -0
  11. package/dist/hover.cjs +1 -1
  12. package/dist/hover.js +1 -1
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/kit/chunk-2FH6GGV6.js +1 -0
  16. package/dist/kit/chunk-2GAV4OAK.js +1 -0
  17. package/dist/kit/{chunk-C4KZYCPF.js → chunk-2LBQ7QJT.js} +1 -1
  18. package/dist/kit/{chunk-BN7HL52Z.js → chunk-3LJ5C3U3.js} +1 -1
  19. package/dist/kit/{chunk-NURPDP3Y.js → chunk-3MHEDZLZ.js} +1 -1
  20. package/dist/kit/{chunk-BR6ZNJZW.js → chunk-3OD5BMF5.js} +1 -1
  21. package/dist/kit/{chunk-C3C7AYKL.js → chunk-3VEMKDBW.js} +1 -1
  22. package/dist/kit/{chunk-PFKYKAIP.js → chunk-42KMN727.js} +1 -1
  23. package/dist/kit/{chunk-2CF4PX6U.js → chunk-6G5MPND3.js} +1 -1
  24. package/dist/kit/{chunk-QALCXKU6.js → chunk-6WU247CB.js} +1 -1
  25. package/dist/kit/{chunk-YBRP6BFW.js → chunk-776H2BJ7.js} +1 -1
  26. package/dist/kit/chunk-7DXSG526.js +1 -0
  27. package/dist/kit/{chunk-H2UZBVKE.js → chunk-7M2FFUZ3.js} +1 -1
  28. package/dist/kit/{chunk-5BEBNKYM.js → chunk-7NVKRDKE.js} +1 -1
  29. package/dist/kit/{chunk-XB4DKPGL.js → chunk-AIGAJMNN.js} +1 -1
  30. package/dist/kit/{chunk-O7SGY4YJ.js → chunk-B3TY6UXJ.js} +1 -1
  31. package/dist/kit/{chunk-XDKKCIIL.js → chunk-BFBG3VHI.js} +1 -1
  32. package/dist/kit/{chunk-3A5LID2G.js → chunk-CG6SGQMY.js} +1 -1
  33. package/dist/kit/{chunk-T3GWGPST.js → chunk-CGSWUO67.js} +1 -1
  34. package/dist/kit/{chunk-DFOWXOZR.js → chunk-DAJSBX6H.js} +1 -1
  35. package/dist/kit/{chunk-IUKSHYED.js → chunk-DCLJHSWM.js} +1 -1
  36. package/dist/kit/{chunk-W2STAN6V.js → chunk-DMRPBFLW.js} +1 -1
  37. package/dist/kit/{chunk-XANKANGR.js → chunk-E3FPFANJ.js} +1 -1
  38. package/dist/kit/{chunk-VC2ZQG63.js → chunk-EKYEA7Z4.js} +1 -1
  39. package/dist/kit/{chunk-IQTGJRDX.js → chunk-F6F2C3RH.js} +1 -1
  40. package/dist/kit/chunk-FEAFQY7O.js +1 -0
  41. package/dist/kit/{chunk-FUI5AVIF.js → chunk-FHN3PPSI.js} +1 -1
  42. package/dist/kit/{chunk-QRCXXS5Z.js → chunk-FPCCX4FM.js} +1 -1
  43. package/dist/kit/{chunk-TTGMK4EA.js → chunk-FWODCYYJ.js} +1 -1
  44. package/dist/kit/{chunk-AIM3J2US.js → chunk-GBNV3GXG.js} +1 -1
  45. package/dist/kit/chunk-GF72XM4C.js +1 -0
  46. package/dist/kit/{chunk-SARCZMLN.js → chunk-GKR3ROYR.js} +1 -1
  47. package/dist/kit/{chunk-ROR6MG3K.js → chunk-H5KHXZWR.js} +1 -1
  48. package/dist/kit/{chunk-PCIAA2LL.js → chunk-I5R2347P.js} +1 -1
  49. package/dist/kit/{chunk-4QHFEMFS.js → chunk-IBNDCKEX.js} +1 -1
  50. package/dist/kit/{chunk-J2YZBT3N.js → chunk-ILXVBO7M.js} +1 -1
  51. package/dist/kit/{chunk-S62H7ZIU.js → chunk-JELJEEJO.js} +1 -1
  52. package/dist/kit/{chunk-2NVKPXPL.js → chunk-K6JX64AS.js} +1 -1
  53. package/dist/kit/{chunk-3473NPIN.js → chunk-KCEYRIU4.js} +1 -1
  54. package/dist/kit/{chunk-HTUGMGVA.js → chunk-KDROJANO.js} +1 -1
  55. package/dist/kit/{chunk-5QE6UMXN.js → chunk-KEE55QSD.js} +1 -1
  56. package/dist/kit/{chunk-MIZ2DUHU.js → chunk-KFXMLIVF.js} +1 -1
  57. package/dist/kit/{chunk-G57QACJG.js → chunk-KLRF3S7O.js} +1 -1
  58. package/dist/kit/{chunk-ENTDGT2V.js → chunk-KXI3T72F.js} +1 -1
  59. package/dist/kit/{chunk-4ZQFDFEH.js → chunk-KY5KCIZE.js} +1 -1
  60. package/dist/kit/{chunk-4OT66HSZ.js → chunk-LE53AVKR.js} +1 -1
  61. package/dist/kit/{chunk-WJLZM3DR.js → chunk-LVCGC3SO.js} +1 -1
  62. package/dist/kit/chunk-M5VVLYI2.js +1 -0
  63. package/dist/kit/{chunk-7ABNWOW4.js → chunk-MJJSZS23.js} +1 -1
  64. package/dist/kit/{chunk-VVW7LZT2.js → chunk-MZFK765W.js} +1 -1
  65. package/dist/kit/{chunk-5I4IZTL5.js → chunk-NF4WVWAC.js} +1 -1
  66. package/dist/kit/{chunk-PIU2BMFU.js → chunk-NW4U2YRE.js} +1 -1
  67. package/dist/kit/{chunk-5Z2EJAUV.js → chunk-ORSI57T2.js} +1 -1
  68. package/dist/kit/{chunk-UML6XQAR.js → chunk-QSTDYL35.js} +1 -1
  69. package/dist/kit/{chunk-K563CCOL.js → chunk-QVICL57J.js} +1 -1
  70. package/dist/kit/{chunk-MQJQIDO5.js → chunk-RXOPJJC4.js} +1 -1
  71. package/dist/kit/{chunk-SNCXU7KF.js → chunk-SDSW7422.js} +1 -1
  72. package/dist/kit/{chunk-DZ5XGHTJ.js → chunk-TRDA73HN.js} +1 -1
  73. package/dist/kit/{chunk-KWTF6Q5W.js → chunk-UOYBFLGJ.js} +1 -1
  74. package/dist/kit/chunk-UVLKCAKH.js +1 -0
  75. package/dist/kit/{chunk-YCWMOTYH.js → chunk-VBWG7HQA.js} +1 -1
  76. package/dist/kit/{chunk-FR3ZJNOY.js → chunk-VIUEAEBX.js} +1 -1
  77. package/dist/kit/{chunk-ZRJVOUWH.js → chunk-VV2KP7ZW.js} +1 -1
  78. package/dist/kit/chunk-VX2AD3M7.js +1 -0
  79. package/dist/kit/{chunk-RFLIFKZ4.js → chunk-W4U5CK6L.js} +1 -1
  80. package/dist/kit/{chunk-I4QVLLRQ.js → chunk-WI2AF2KE.js} +1 -1
  81. package/dist/kit/{chunk-MGVPLQ3Z.js → chunk-XUCYFWC3.js} +1 -1
  82. package/dist/kit/{chunk-BNVRKD3V.js → chunk-Z2FRNFMB.js} +1 -1
  83. package/dist/kit/{chunk-BQZCLGCY.js → chunk-Z3KD6CLE.js} +1 -1
  84. package/dist/kit/{chunk-E3TUOX2A.js → chunk-ZCXNGJGB.js} +1 -1
  85. package/dist/kit/{chunk-IPVN22ZM.js → chunk-ZWZZMU5P.js} +1 -1
  86. package/dist/kit.cjs +1 -1
  87. package/dist/kit.d.cts +4 -2
  88. package/dist/kit.d.ts +4 -2
  89. package/dist/kit.js +1 -1
  90. package/dist/studio-worker.js +1 -0
  91. package/dist/studio.cjs +1 -1
  92. package/dist/studio.js +1 -1
  93. package/package.json +3 -1
  94. package/skills/asciify-engine/SKILL.md +2 -2
  95. package/skills/asciify-engine/references/applying-asciify.md +1 -1
  96. package/skills/asciify-engine/references/kit.md +2 -2
  97. package/skills/asciify-engine/references/performance.md +6 -3
  98. package/dist/kit/chunk-3PCKMO6I.js +0 -1
  99. package/dist/kit/chunk-4HWMQCAM.js +0 -1
  100. package/dist/kit/chunk-73M2OESE.js +0 -1
  101. package/dist/kit/chunk-BTD6EFAW.js +0 -1
  102. package/dist/kit/chunk-OWEZV7TQ.js +0 -1
  103. package/dist/kit/chunk-S7RZP2MT.js +0 -1
  104. package/dist/kit/chunk-UO7RB7RC.js +0 -1
  105. package/dist/kit/chunk-XM56OTYT.js +0 -1
package/dist/kit.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { GlyphField, GlyphFieldOptions } from './field.cjs';
1
+ import { G as GlyphField, r as GlyphFieldOptions } from './glyph-field-C2fQIlnq.cjs';
2
2
  import { C as CHARACTER_SETS } from './characters-BgECi5Lf.cjs';
3
3
  import './hover-guide-DdFnAnfU.cjs';
4
4
 
@@ -1379,8 +1379,10 @@ declare const getGlobalLook: () => GlobalLook | null;
1379
1379
  /** Calls `listener` after each `setGlobalLook`. Returns the unsubscribe. */
1380
1380
  declare function subscribeGlobalLook(listener: (look: GlobalLook | null) => void): () => void;
1381
1381
  /**
1382
- * At most `n` kit fields hold a WebGL context at once (default 12; browsers drop the oldest past about 16).
1382
+ * At most `n` kit fields hold a WebGL context of their own at once (default 12; browsers drop the oldest past about 16).
1383
1383
  * Past it the live field farthest off screen is released first, and shows its poster until it is the nearer one again.
1384
+ * Fields drawn through the page's shared context hold none, so they don't count; only fields that fall back to a context
1385
+ * of their own (a canvas in another document, a browser without the shared path) do.
1384
1386
  */
1385
1387
  declare function setFieldBudget(n: number): void;
1386
1388
  declare const getFieldBudget: () => number;
package/dist/kit.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { GlyphField, GlyphFieldOptions } from './field.js';
1
+ import { G as GlyphField, r as GlyphFieldOptions } from './glyph-field-DRC-7uVf.js';
2
2
  import { C as CHARACTER_SETS } from './characters-BgECi5Lf.js';
3
3
  import './hover-guide-DdFnAnfU.js';
4
4
 
@@ -1379,8 +1379,10 @@ declare const getGlobalLook: () => GlobalLook | null;
1379
1379
  /** Calls `listener` after each `setGlobalLook`. Returns the unsubscribe. */
1380
1380
  declare function subscribeGlobalLook(listener: (look: GlobalLook | null) => void): () => void;
1381
1381
  /**
1382
- * At most `n` kit fields hold a WebGL context at once (default 12; browsers drop the oldest past about 16).
1382
+ * At most `n` kit fields hold a WebGL context of their own at once (default 12; browsers drop the oldest past about 16).
1383
1383
  * Past it the live field farthest off screen is released first, and shows its poster until it is the nearer one again.
1384
+ * Fields drawn through the page's shared context hold none, so they don't count; only fields that fall back to a context
1385
+ * of their own (a canvas in another document, a browser without the shared path) do.
1384
1386
  */
1385
1387
  declare function setFieldBudget(n: number): void;
1386
1388
  declare const getFieldBudget: () => number;
package/dist/kit.js CHANGED
@@ -1 +1 @@
1
- export{wave}from"./kit/chunk-UO7RB7RC.js";export{weave}from"./kit/chunk-RFLIFKZ4.js";export{noise}from"./kit/chunk-XM56OTYT.js";export{pulse}from"./kit/chunk-5QE6UMXN.js";export{rain}from"./kit/chunk-XDKKCIIL.js";export{silk}from"./kit/chunk-BN7HL52Z.js";export{stars}from"./kit/chunk-5Z2EJAUV.js";export{terrain}from"./kit/chunk-UML6XQAR.js";export{veil}from"./kit/chunk-T3GWGPST.js";export{voidWell}from"./kit/chunk-H2UZBVKE.js";export{dna}from"./kit/chunk-XB4DKPGL.js";export{dune}from"./kit/chunk-E3TUOX2A.js";export{etch}from"./kit/chunk-3A5LID2G.js";export{facet}from"./kit/chunk-QALCXKU6.js";export{fire}from"./kit/chunk-73M2OESE.js";export{grid}from"./kit/chunk-I4QVLLRQ.js";export{moire}from"./kit/chunk-O7SGY4YJ.js";import"./kit/chunk-XPXMCXYI.js";export{morph}from"./kit/chunk-SARCZMLN.js";export{halo}from"./kit/chunk-2CF4PX6U.js";export{interference}from"./kit/chunk-VC2ZQG63.js";export{mesh}from"./kit/chunk-YBRP6BFW.js";export{cascade}from"./kit/chunk-DZ5XGHTJ.js";export{constellation}from"./kit/chunk-NURPDP3Y.js";export{aurora}from"./kit/chunk-FUI5AVIF.js";export{halftone}from"./kit/chunk-W2STAN6V.js";export{circuit}from"./kit/chunk-XANKANGR.js";import"./kit/chunk-ZCHGV2CV.js";export{mountCanvas}from"./kit/chunk-BR6ZNJZW.js";export{background,backgroundCharset}from"./kit/chunk-PIU2BMFU.js";export{swell}from"./kit/chunk-4ZQFDFEH.js";export{drift}from"./kit/chunk-AIM3J2US.js";export{wordField}from"./kit/chunk-MQJQIDO5.js";export{fluid}from"./kit/chunk-KWTF6Q5W.js";export{caustics}from"./kit/chunk-IQTGJRDX.js";export{contour}from"./kit/chunk-QRCXXS5Z.js";export{ripple}from"./kit/chunk-BQZCLGCY.js";import"./kit/chunk-C3C7AYKL.js";export{toastStack}from"./kit/chunk-IUKSHYED.js";export{thinking}from"./kit/chunk-IPVN22ZM.js";export{streamText}from"./kit/chunk-FR3ZJNOY.js";export{compare}from"./kit/chunk-VVW7LZT2.js";export{accordion}from"./kit/chunk-5BEBNKYM.js";export{dropzone}from"./kit/chunk-4QHFEMFS.js";export{disintegrate}from"./kit/chunk-S62H7ZIU.js";export{pullRefresh}from"./kit/chunk-7ABNWOW4.js";export{VOICE_PALETTES,voiceOrb}from"./kit/chunk-ENTDGT2V.js";export{commandPalette}from"./kit/chunk-4HWMQCAM.js";import"./kit/chunk-4OT66HSZ.js";export{likeBurst}from"./kit/chunk-5I4IZTL5.js";export{blockChart}from"./kit/chunk-YCWMOTYH.js";export{pageDissolve}from"./kit/chunk-WJLZM3DR.js";import"./kit/chunk-BNVRKD3V.js";export{swipeDeck}from"./kit/chunk-TTGMK4EA.js";export{slideToConfirm}from"./kit/chunk-2NVKPXPL.js";export{codeInput}from"./kit/chunk-MIZ2DUHU.js";export{tabs}from"./kit/chunk-G57QACJG.js";export{imageGenerate}from"./kit/chunk-HTUGMGVA.js";export{fieldBackground}from"./kit/chunk-J2YZBT3N.js";export{wordmark}from"./kit/chunk-PCIAA2LL.js";export{asciiVideo}from"./kit/chunk-C4KZYCPF.js";export{artPanel}from"./kit/chunk-MGVPLQ3Z.js";export{pricingGlow}from"./kit/chunk-PFKYKAIP.js";import"./kit/chunk-BTD6EFAW.js";export{BEAM_PALETTES,beam,beamPalette}from"./kit/chunk-SNCXU7KF.js";export{decode}from"./kit/chunk-ZRJVOUWH.js";export{odometer}from"./kit/chunk-OWEZV7TQ.js";export{buttonLoading}from"./kit/chunk-K563CCOL.js";export{statusOrb}from"./kit/chunk-3473NPIN.js";export{skeleton}from"./kit/chunk-ROR6MG3K.js";export{PILL_TONES,pill}from"./kit/chunk-DFOWXOZR.js";export{mountSurface,resolveColor}from"./kit/chunk-S7RZP2MT.js";export{KIT_STYLES,getFieldBudget,getGlobalLook,setFieldBudget,setGlobalLook,subscribeGlobalLook}from"./kit/chunk-3PCKMO6I.js";//# sourceMappingURL=kit.js.map
1
+ export{wave}from"./kit/chunk-2GAV4OAK.js";export{weave}from"./kit/chunk-W4U5CK6L.js";export{noise}from"./kit/chunk-M5VVLYI2.js";export{pulse}from"./kit/chunk-KEE55QSD.js";export{rain}from"./kit/chunk-BFBG3VHI.js";export{silk}from"./kit/chunk-3LJ5C3U3.js";export{stars}from"./kit/chunk-ORSI57T2.js";export{terrain}from"./kit/chunk-QSTDYL35.js";export{veil}from"./kit/chunk-CGSWUO67.js";export{voidWell}from"./kit/chunk-7M2FFUZ3.js";export{dna}from"./kit/chunk-AIGAJMNN.js";export{dune}from"./kit/chunk-ZCXNGJGB.js";export{etch}from"./kit/chunk-CG6SGQMY.js";export{facet}from"./kit/chunk-6WU247CB.js";export{fire}from"./kit/chunk-UVLKCAKH.js";export{grid}from"./kit/chunk-WI2AF2KE.js";export{moire}from"./kit/chunk-B3TY6UXJ.js";import"./kit/chunk-XPXMCXYI.js";export{morph}from"./kit/chunk-GKR3ROYR.js";export{halo}from"./kit/chunk-6G5MPND3.js";export{interference}from"./kit/chunk-EKYEA7Z4.js";export{mesh}from"./kit/chunk-776H2BJ7.js";export{cascade}from"./kit/chunk-TRDA73HN.js";export{constellation}from"./kit/chunk-3MHEDZLZ.js";export{aurora}from"./kit/chunk-FHN3PPSI.js";export{halftone}from"./kit/chunk-DMRPBFLW.js";export{circuit}from"./kit/chunk-E3FPFANJ.js";import"./kit/chunk-ZCHGV2CV.js";export{mountCanvas}from"./kit/chunk-3OD5BMF5.js";export{background,backgroundCharset}from"./kit/chunk-NW4U2YRE.js";export{swell}from"./kit/chunk-KY5KCIZE.js";export{drift}from"./kit/chunk-GBNV3GXG.js";export{wordField}from"./kit/chunk-RXOPJJC4.js";export{fluid}from"./kit/chunk-UOYBFLGJ.js";export{caustics}from"./kit/chunk-F6F2C3RH.js";export{contour}from"./kit/chunk-FPCCX4FM.js";export{ripple}from"./kit/chunk-Z3KD6CLE.js";import"./kit/chunk-3VEMKDBW.js";export{toastStack}from"./kit/chunk-DCLJHSWM.js";export{thinking}from"./kit/chunk-ZWZZMU5P.js";export{streamText}from"./kit/chunk-VIUEAEBX.js";export{compare}from"./kit/chunk-MZFK765W.js";export{accordion}from"./kit/chunk-7NVKRDKE.js";export{dropzone}from"./kit/chunk-IBNDCKEX.js";export{disintegrate}from"./kit/chunk-JELJEEJO.js";export{pullRefresh}from"./kit/chunk-MJJSZS23.js";export{VOICE_PALETTES,voiceOrb}from"./kit/chunk-KXI3T72F.js";export{commandPalette}from"./kit/chunk-VX2AD3M7.js";import"./kit/chunk-LE53AVKR.js";export{likeBurst}from"./kit/chunk-NF4WVWAC.js";export{blockChart}from"./kit/chunk-VBWG7HQA.js";export{pageDissolve}from"./kit/chunk-LVCGC3SO.js";import"./kit/chunk-Z2FRNFMB.js";export{swipeDeck}from"./kit/chunk-FWODCYYJ.js";export{slideToConfirm}from"./kit/chunk-K6JX64AS.js";export{codeInput}from"./kit/chunk-KFXMLIVF.js";export{tabs}from"./kit/chunk-KLRF3S7O.js";export{imageGenerate}from"./kit/chunk-KDROJANO.js";export{fieldBackground}from"./kit/chunk-ILXVBO7M.js";export{wordmark}from"./kit/chunk-I5R2347P.js";export{asciiVideo}from"./kit/chunk-2LBQ7QJT.js";export{artPanel}from"./kit/chunk-XUCYFWC3.js";export{pricingGlow}from"./kit/chunk-42KMN727.js";import"./kit/chunk-7DXSG526.js";export{BEAM_PALETTES,beam,beamPalette}from"./kit/chunk-SDSW7422.js";export{decode}from"./kit/chunk-VV2KP7ZW.js";export{odometer}from"./kit/chunk-2FH6GGV6.js";export{buttonLoading}from"./kit/chunk-QVICL57J.js";export{statusOrb}from"./kit/chunk-KCEYRIU4.js";export{skeleton}from"./kit/chunk-H5KHXZWR.js";export{PILL_TONES,pill}from"./kit/chunk-DAJSBX6H.js";export{mountSurface,resolveColor}from"./kit/chunk-GF72XM4C.js";export{KIT_STYLES,getFieldBudget,getGlobalLook,setFieldBudget,setGlobalLook,subscribeGlobalLook}from"./kit/chunk-FEAFQY7O.js";//# sourceMappingURL=kit.js.map
@@ -0,0 +1 @@
1
+ var t='"use strict";(()=>{function Ce(n,t,e,r,i,a){r=Math.max(0,Math.min(t-1,r)),i=Math.max(0,Math.min(e-1,i));let o=Math.floor(r),l=Math.floor(i),s=r-o,h=i-l,m=(l*t+o)*4;if(s===0&&h===0){for(let S=0;S<4;S++)a[S]=n[m+S];return}let u=(l*t+Math.min(t-1,o+1))*4,f=(Math.min(e-1,l+1)*t+o)*4,p=(Math.min(e-1,l+1)*t+Math.min(t-1,o+1))*4,c=(1-s)*(1-h)*n[m+3],b=s*(1-h)*n[u+3],g=(1-s)*h*n[f+3],M=s*h*n[p+3],v=c+b+g+M;for(let S=0;S<3;S++)a[S]=v?(n[m+S]*c+n[u+S]*b+n[f+S]*g+n[p+S]*M)/v:0;a[3]=v}function Vr(n,t,e,r,i,a){if(r>=0&&r<=t-1&&i>=0&&i<=e-1)return Ce(n,t,e,r,i,a);if(a[0]=a[1]=a[2]=a[3]=0,r<=-1||r>=t||i<=-1||i>=e)return;let o=Math.floor(r),l=Math.floor(i),s=r-o,h=i-l;for(let m=0;m<=1;m++)for(let u=0;u<=1;u++){let f=o+u,p=l+m;if(f<0||f>=t||p<0||p>=e)continue;let c=(p*t+f)*4,b=(u?s:1-s)*(m?h:1-h)*n[c+3];a[0]+=n[c]*b,a[1]+=n[c+1]*b,a[2]+=n[c+2]*b,a[3]+=b}a[3]&&(a[0]/=a[3],a[1]/=a[3],a[2]/=a[3])}var Ni=["rgb","red","green","blue"],Fr=n=>Math.max(0,Math.min(1,n));function _r(n){let t=new Map([[0,0],[1,1]]);if(Array.isArray(n))for(let e of n.slice(0,64)){if(!Array.isArray(e)||e.length<2||typeof e[0]!="number"||!Number.isFinite(e[0])||typeof e[1]!="number"||!Number.isFinite(e[1]))continue;let r=Math.round(Fr(e[0])*255)/255;!t.has(r)&&t.size>=16||t.set(r,Fr(e[1]))}return[...t].sort((e,r)=>e[0]-r[0])}function Jr(n){let t=n&&typeof n=="object"?n:{};return Object.fromEntries(Ni.map(e=>[e,_r(t[e])]))}function Er(n){let t=_r(n),e=t.length,r=t.slice(1).map((s,h)=>s[0]-t[h][0]),i=t.slice(1).map((s,h)=>(s[1]-t[h][1])/r[h]),a=new Float64Array(e);a[0]=i[0],a[e-1]=i[e-2];for(let s=1;s<e-1;s++){let h=i[s-1],m=i[s];if(h*m<=0)continue;let u=2*r[s]+r[s-1],f=r[s]+2*r[s-1];a[s]=(u+f)/(u/h+f/m)}let o=new Uint8Array(256),l=0;for(let s=0;s<256;s++){let h=s/255;for(;l<e-2&&h>t[l+1][0];)l++;let m=r[l],u=(h-t[l][0])/m,f=u*u,p=f*u,c=(2*p-3*f+1)*t[l][1]+(p-2*f+u)*m*a[l]+(-2*p+3*f)*t[l+1][1]+(p-f)*m*a[l+1];o[s]=Math.round(Fr(c)*255)}return o}function Rr(n){let t=qi(n),e=n.curves;if(!t&&(!e||Object.values(e).every(o=>o.every(([l,s])=>l===s))))return null;let r=Er(e?.rgb),i=[e?.red,e?.green,e?.blue].map(Er),a=new Uint8Array(768);for(let o=0;o<256;o++)for(let l=0;l<3;l++)a[l*256+o]=i[l][r[t?t[o]:o]];return a}function Zr(n,t){for(let e=0;e<n.length;e+=4)n[e+3]&&(n[e]=t[n[e]],n[e+1]=t[256+n[e+1]],n[e+2]=t[512+n[e+2]])}function qi(n){let t=n.blackPoint??0,e=n.whitePoint??1,r=n.gamma??1,i=n.shadows??0,a=n.highlights??0;if(t===0&&e===1&&r===1&&i===0&&a===0)return null;let o=[0,.25+i*.2,.5,.75+a*.2,1],l=o.slice(1).map((m,u)=>(m-o[u])*4),s=[l[0],...l.slice(1).map((m,u)=>2*m*l[u]/(m+l[u])),l[3]],h=new Uint8Array(256);for(let m=0;m<256;m++){let u=Math.pow(Math.max(0,Math.min(1,(m/255-t)/(e-t))),1/r),f=Math.min(3,Math.floor(u*4)),p=u*4-f,c=p*p,b=c*p,g=(2*b-3*c+1)*o[f]+(b-2*c+p)*s[f]/4+(-2*b+3*c)*o[f+1]+(b-c)*s[f+1]/4;h[m]=Math.round(Math.max(0,Math.min(1,g))*255)}return h}var Qe=class{constructor(t=0){this.amount=0;this.weights=new Float32Array(256);this.source=new Uint8ClampedArray(0);this.configure(t)}configure(t=0){let e=Math.max(0,Math.min(1,Number.isFinite(t)?t:0));if(e===this.amount)return;if(this.amount=e,e===0){this.source=new Uint8ClampedArray(0);return}let r=8+e*24;for(let i=0;i<256;i++)this.weights[i]=Math.exp(-i*i/(2*r*r))}apply(t,e,r){if(!this.amount)return;if(!Number.isInteger(e)||!Number.isInteger(r)||e<1||r<1||e*r*4!==t.length)throw new Error("Denoise dimensions do not match the source.");this.source.length!==t.length&&(this.source=new Uint8ClampedArray(t.length));let i=this.source;i.set(t);for(let a=0;a<r;a++)for(let o=0;o<e;o++){let l=(a*e+o)*4;if(!i[l+3])continue;let s=i[l],h=i[l+1],m=i[l+2],u=0,f=0,p=0,c=0;for(let b=-1;b<=1;b++){let g=a+b;if(!(g<0||g>=r))for(let M=-1;M<=1;M++){let v=o+M;if(v<0||v>=e)continue;let S=(g*e+v)*4;if(!i[S+3])continue;let k=Math.max(Math.abs(i[S]-s),Math.abs(i[S+1]-h),Math.abs(i[S+2]-m)),A=this.weights[k]*(M===0?1:.6)*(b===0?1:.6)*i[S+3];u+=i[S]*A,f+=i[S+1]*A,p+=i[S+2]*A,c+=A}}t[l]=s+(u/c-s)*this.amount,t[l+1]=h+(f/c-h)*this.amount,t[l+2]=m+(p/c-m)*this.amount}}};var zi=[{value:"twirl",label:"Twirl",description:"Rotate the center into a smooth spiral; the outer boundary stays fixed.",direction:!1,frequency:!1},{value:"pinch",label:"Pinch",description:"Contract the center, or expand it with negative strength.",direction:!1,frequency:!1},{value:"sphere",label:"Spherize",description:"Magnify a rounded lens through the source; negative strength recedes.",direction:!1,frequency:!1},{value:"ripple",label:"Ripple",description:"Bend the image through concentric, soft-edged waves.",direction:!1,frequency:!0},{value:"zigzag",label:"Zigzag",description:"Alternate the twist in sharp, concentric bands.",direction:!1,frequency:!0},{value:"shear",label:"Shear",description:"Slant a region along an adjustable direction.",direction:!0,frequency:!1},{value:"smudge",label:"Smudge",description:"Draw a soft region of the source along one direction.",direction:!0,frequency:!1},{value:"polar",label:"Polar",description:"Unwrap a region into polar coordinates; negative strength wraps it.",direction:!0,frequency:!1},{value:"fragment",label:"Fragment",description:"Offset small source tiles into a stable fractured texture.",direction:!0,frequency:!0}],Bi=8,Ie=(n,t,e,r)=>typeof n=="number"&&Number.isFinite(n)?Math.max(e,Math.min(r,n)):t;function Cr(n){if(!Array.isArray(n))return[];let t=[];for(let e of n.slice(0,64))if(!(!e||typeof e!="object"||!zi.some(r=>r.value===e.type))&&(t.push({type:e.type,enabled:e.enabled!==!1,amount:Ie(e.amount,.35,-1,1),x:Ie(e.x,.5,0,1),y:Ie(e.y,.5,0,1),radius:Ie(e.radius,.55,.05,2),angle:Ie(e.angle,0,-180,180),frequency:Ie(e.frequency,5,1,24)}),t.length===Bi))break;return t}var Tr=Math.PI*2,Qr=(n,t)=>{let e=Math.imul(n,374761393)^Math.imul(t,668265263);return e=Math.imul(e^e>>>13,1274126177),((e^e>>>16)>>>0)/4294967296},$e=class{constructor(t=[],e="clamp"){this.warps=[];this.signature="";this.geometry="";this.coordinates=new Float32Array(0);this.output=new Uint8ClampedArray(0);this.sampled=[0,0,0,0];this.edge="clamp";this.configure(t,e)}configure(t=[],e="clamp"){let r=Cr(t).filter(a=>a.enabled&&a.amount!==0),i=JSON.stringify(r);this.edge=e==="transparent"?"transparent":"clamp",i!==this.signature&&(this.signature=i,this.geometry="",this.warps=r.map(a=>({...a,cos:Math.cos(a.angle*Math.PI/180),sin:Math.sin(a.angle*Math.PI/180)})),r.length||this.clear())}get active(){return this.warps.length>0}apply(t,e,r,i=e/r){if(!this.active)return t;if(!Number.isInteger(e)||!Number.isInteger(r)||e<1||r<1||e*r*4!==t.length||!Number.isFinite(i)||i<=0)throw new Error("Warp dimensions do not match the source.");let a=`${e}:${r}:${i}`;if(a!==this.geometry){this.coordinates.length!==e*r*2&&(this.coordinates=new Float32Array(e*r*2));let s=Math.max(1,i),h=Math.max(1,1/i);for(let m=0;m<r;m++)for(let u=0;u<e;u++){let f=(u+.5)/e,p=(m+.5)/r;for(let b=this.warps.length-1;b>=0;b--){let g=this.warps[b],M=(f-g.x)*s/g.radius,v=(p-g.y)*h/g.radius,S=M*M+v*v;if(S>=1)continue;let k=Math.sqrt(S),A=(1-S)*(1-S),H=g.amount,N=M,C=v;if(g.type==="twirl"||g.type==="zigzag"){let I=g.type==="twirl"?-H*Tr*A:H*.65*(2/Math.PI*Math.asin(Math.sin(k*Tr*g.frequency)))*A,y=Math.cos(I),z=Math.sin(I);N=M*y-v*z,C=M*z+v*y}else if(g.type==="pinch"){let I=Math.exp(H*2*A);N=M*I,C=v*I}else if(g.type==="sphere"&&k>0){let I=Math.asin(k)*2/Math.PI,y=1+H*A*(I/k-1);N=M*y,C=v*y}else if(g.type==="ripple"&&k>0){let I=1+H*.12*Math.sin(k*Tr*g.frequency)*A/k;N=M*I,C=v*I}else if(g.type==="shear"){let I=-M*g.sin+v*g.cos;N-=H*I*.9*A*g.cos,C-=H*I*.9*A*g.sin}else if(g.type==="smudge")N-=H*.65*A*g.cos,C-=H*.65*A*g.sin;else if(g.type==="polar"){let I=M*g.cos+v*g.sin,y=-M*g.sin+v*g.cos,z=Math.atan2(y,I),q=H>0?z/Math.PI:Math.cos(I*Math.PI)*(y+1)/2,Y=H>0?k*2-1:Math.sin(I*Math.PI)*(y+1)/2,x=q*g.cos-Y*g.sin,D=q*g.sin+Y*g.cos;N+=(x-M)*Math.abs(H)*A,C+=(D-v)*Math.abs(H)*A}else if(g.type==="fragment"){let I=Math.floor((M*g.cos+v*g.sin)*g.frequency),y=Math.floor((-M*g.sin+v*g.cos)*g.frequency),z=(Qr(I,y)-.5)*H*.5*A,q=(Qr(y+71,I-31)-.5)*H*.5*A;N+=z*g.cos-q*g.sin,C+=z*g.sin+q*g.cos}f=g.x+N*g.radius/s,p=g.y+C*g.radius/h}let c=(m*e+u)*2;this.coordinates[c]=f*e-.5,this.coordinates[c+1]=p*r-.5}this.geometry=a}this.output.length!==t.length&&(this.output=new Uint8ClampedArray(t.length));let o=t===this.output?t.slice():t,l=this.edge==="transparent"?Vr:Ce;for(let s=0,h=0;s<t.length;s+=4,h+=2){l(o,e,r,this.coordinates[h],this.coordinates[h+1],this.sampled);for(let m=0;m<4;m++)this.output[s+m]=this.sampled[m]}return this.output}clear(){this.coordinates=new Float32Array(0),this.output=new Uint8ClampedArray(0),this.geometry=""}};var Ir=["stipple","engraving","crosshatch","woodblock","risograph","pointillism"];function qe(n){return Ir.includes(n)}var tr={density:1,weight:1,angle:-35,roughness:.35,invert:!1,secondaryInk:"#ec6752",registration:.2,seed:7};function er(n){let t=n&&typeof n=="object"&&!Array.isArray(n)?n:{},e=(r,i,a)=>{let o=t[r];return typeof o=="number"&&Number.isFinite(o)?Math.max(i,Math.min(a,o)):tr[r]};return{density:e("density",0,2),weight:e("weight",.25,2),angle:e("angle",-180,180),roughness:e("roughness",0,1),invert:t.invert===!0,secondaryInk:typeof t.secondaryInk=="string"&&/^#[\\da-f]{6}$/i.test(t.secondaryInk)?t.secondaryInk:tr.secondaryInk,registration:e("registration",0,1),seed:Math.round(e("seed",0,65535))}}var Pe=Math.PI*2,$r=n=>Math.max(0,Math.min(1,n)),ir=.1,ti=n=>Math.max(-ir,Math.min(1+ir,n)),Gi=Float32Array.from({length:2048},(n,t)=>Math.sin(t/2048*Pe)),ei=n=>Gi[Math.floor(n*(2048/Pe))&2047];function rr(n,t,e){let r=Math.imul(n,374761393)^Math.imul(t,668265263)^Math.imul(e,1442695041);return r=Math.imul(r^r>>>13,1274126177),((r^r>>>16)>>>0)/4294967296}function Pr(n){let t=er(n),{density:e,weight:r,angle:i,roughness:a,invert:o,secondaryInk:l,registration:s,seed:h}=t,m=i*Math.PI/180,f=[m,m+Math.PI/2,m+Math.PI/4].map(b=>[Math.cos(b),Math.sin(b)]),p=new Float32Array(6);function c(b,g,M,v,S,k,A,H,N=!1){if(A<=0)return;let[C,I]=f[H],y=-I,z=C,q=y*(g+.5)+z*(M+.5),Y=(Math.abs(y)+Math.abs(z))*.5,x=N?1:.5,D=Math.ceil((q-Y)/x),V=Math.floor((q+Y)/x),Z=Math.min(x*.94,x*.72*A*r);b.lineWidth=k*Z,b.beginPath();for(let T=D;T<=V;T++){let O=T*x-q,w=.5+y*O,F=.5+z*O,W=-2,P=2;if(Math.abs(C)>1e-8){let U=-w/C,E=(1-w)/C;W=Math.max(W,Math.min(U,E)),P=Math.min(P,Math.max(U,E))}else if(w<0||w>1)continue;if(Math.abs(I)>1e-8){let U=-F/I,E=(1-F)/I;W=Math.max(W,Math.min(U,E)),P=Math.min(P,Math.max(U,E))}else if(F<0||F>1)continue;if(!(P<=W))if(N&&(W-=ir,P+=ir),!N)b.moveTo(v+(w+C*W)*k,S+(F+I*W)*k),b.lineTo(v+(w+C*P)*k,S+(F+I*P)*k);else{for(let U=0;U<6;U++){let E=W+(P-W)*U/5,B=C*(g+w+C*E)+I*(M+F+I*E);p[U]=ei(B*5.3+T*1.9+h)*.5+ei(B*13.1+T)*.25}for(let U=0;U<2;U++)for(let E=0;E<6;E++){let B=W+(P-W)*(U?5-E:E)/5,nt=p[U?5-E:E],Q=Z*.5*(1+a*nt*.5)*(U?-1:1),ct=v+ti(w+C*B+y*Q)*k,ft=S+ti(F+I*B+z*Q)*k;!U&&!E?b.moveTo(ct,ft):b.lineTo(ct,ft)}b.closePath()}}N?b.fill():b.stroke()}return{settings:t,paint(b,g,M,v,S,k,A,H,N,C,I,y,z){let q=$r((o?1-H:H)*e);if(q<=0||b.globalAlpha<=0)return;b.fillStyle=N,b.strokeStyle=N;let Y=rr(M,v,h);if(g==="engraving"||g==="crosshatch"||g==="woodblock"){let x=q*(1-a*Y*.3);g==="woodblock"?c(b,M,v,S,k,A,Math.ceil(x*5)/5,0,!0):(c(b,M,v,S,k,A,x,0),g==="crosshatch"&&(c(b,M,v,S,k,A,Math.max(0,x*1.5-.3),1),c(b,M,v,S,k,A,Math.max(0,x*2-1.2),2)))}else if(g==="risograph"){let x=z==="source"?$r(.5+(C-y)/510):.5,D=s*.38*A,V=A*Math.min(.48,.44*Math.sqrt(q)*r);b.beginPath(),b.arc(S+A*.5,k+A*.5,V*Math.sqrt(.35+(1-x)*.65),0,Pe),b.fill(),b.globalCompositeOperation="multiply",b.fillStyle=l;let Z=1-a*rr(M,v,h+13)*.3;b.beginPath(),b.arc(S+A*.5+D*f[0][0],k+A*.5+D*f[0][1],V*Math.sqrt(.3+x*.7)*Z,0,Pe),b.fill(),b.globalCompositeOperation="source-over"}else{let x=b.fillEllipse;g==="stipple"&&b.beginPath();for(let D=0;D<4;D++){let V=rr(M*2+D%2,v*2+(D>>1),h),Z=rr(M,v,h+D*11+1),T=S+((D%2+.5)/2+(V-.5)*a*.28)*A,O=k+(((D>>1)+.5)/2+(Z-.5)*a*.28)*A,w=Math.min(T-S,S+A-T,O-k,k+A-O,A*Math.min(.245,.21*r*Math.sqrt(q)*(1-a*V*.35)));if(g==="stipple")b.moveTo(T+w,O),b.arc(T,O,w,0,Pe);else{let F=(V-.5)*a*64;if(x&&z!=="accent"){let W=Math.round(C+F);x(T,O,w,w*.64,V*Math.PI,W,z==="source"?Math.round(I-F*.4):W,z==="source"?Math.round(y-F):W);continue}z==="source"?b.fillStyle=`rgb(${Math.round(C+F)},${Math.round(I-F*.4)},${Math.round(y-F)})`:z==="gray"?b.fillStyle=`rgb(${Math.round(C+F)},${Math.round(C+F)},${Math.round(C+F)})`:b.fillStyle=N,b.beginPath(),b.ellipse(T,O,w,w*.64,V*Math.PI,0,Pe),b.fill()}}g==="stipple"&&b.fill()}}}}var Xi=new Set(["none","floyd-steinberg","atkinson","stucki","sierra","sierra-lite","burkes","jarvis"]);function ri(n){return n.style==="dither"&&(n.dither.motion==="shimmer"||n.dither.motion==="drift"&&n.dither.amount>0&&!Xi.has(n.dither.algorithm))}function ii(n){return n.motion.type!=="none"&&(n.motion.amount??1)>0}var ni={caustics:"sheen",grain:"shimmer",trace:"relight",tidal:"current",weave:"current",breeze:"current",reform:"develop",print:"develop",unfold:"develop"},Dr=[{value:"none",mode:"none",group:"Still",label:"Off",description:"Keep the image still. Hover stays available."},{value:"relight",mode:"relight",group:"Light",label:"Relight",description:"A key light circles the subject and models its own relief, like moving a lamp around a sculpture."},{value:"sheen",mode:"sheen",group:"Light",label:"Specular sweep",description:"One slow pass of light glances across the highlights and follows their form, then rests."},{value:"glow",mode:"glow",group:"Light",label:"Highlight bloom",description:"The brightest areas breathe a soft halo into their surroundings. Shadows stay deep."},{value:"shimmer",mode:"shimmer",group:"Light",label:"Glints",description:"Sparse glints on bright fine detail, like light on water, metal or an eye. Everything else holds still."},{value:"parallax",mode:"parallax",group:"Depth",label:"Parallax",description:"A slow camera drift: the subject moves against its background, read from the photo\\u2019s own depth cues."},{value:"push",mode:"push",group:"Depth",label:"Slow push",description:"A gentle push toward the subject and back, with nearer areas moving slightly more."},{value:"focus",mode:"focus",group:"Depth",label:"Focus pull",description:"Focus racks from the subject to the background and back; the characters soften out of focus."},{value:"mist",mode:"mist",group:"Atmosphere",label:"Mist",description:"Soft mist drifts through the distance and plain areas, leaving the subject clear."},{value:"current",mode:"current",group:"Atmosphere",label:"Drift",description:"Water swells and glints, falls stream down, sky and clouds drift slowly, like a cinemagraph. Subjects and buildings hold still."},{value:"develop",mode:"develop",group:"Reveal",label:"Develop",description:"The image holds, fades, then develops back in from its highlights to its shadows, like a print in the tray."}];function oi(n){let t=n&&Object.prototype.hasOwnProperty.call(ni,n)?ni[n]:n;return Dr.find(e=>e.value===t||e.mode===t)?.mode??"none"}var ze=n=>Math.max(0,Math.min(1,n)),Lt=(n,t,e)=>{let r=ze((e-n)/(t-n));return r*r*(3-2*r)},nr=(n,t)=>{let e=52.9829189*((n*.06711056+t*.00583715)%1);return e-Math.floor(e)};function Lr(n,t,e,r,i,a=.5,o,l=0){if(i[0]=i[1]=i[2]=0,i[3]=1,n==="none")return i;a=ze(a);let s=o?o[l]:a,h=o?o[l+1]:.5+.5*ze(1-Math.hypot(t-.5,e-.55)*2),m=o?o[l+2]:Lt(.55,1,a)**2,u=o?o[l+3]:.5,f=o?o[l+4]:0,p=o?o[l+5]:0,c=r*Math.PI/6,b=(r%12+12)%12,g=Lt(0,.12,Math.min(t,1-t,e,1-e));if(n==="relight"){let M=c+.6,v=Math.cos(M),S=Math.sin(M),k=Math.max(-1,Math.min(1,f*v+p*S))+(v*(t-.5)+S*(e-.5))*.35;i[2]=k*.2*(.3+.7*Lt(.04,.3,s)*(1-.6*Lt(.82,1,a)))}else if(n==="sheen"){let M=-.35+1.9*Lt(0,8,b),v=(t*.75+e*.45)/1.2+(f*.75+p*.45)*.05,S=Math.exp(-(((v-M)/.12)**2));i[2]=S*Lt(.3,.8,s)*(1-.5*Lt(.9,1,a))*.45}else if(n==="glow"){let M=.5-.5*Math.cos(c),v=1-.8*M;i[2]=.2*Lt(v-.3,v+.02,m)*Math.sqrt(m)*(1-.65*a)+.05*M*Lt(.6,.95,a)}else if(n==="shimmer"){let M=nr(Math.floor(t*160),Math.floor(e*100))*Math.PI*2,v=Math.pow(.5+.5*Math.cos(c*2+M),28);i[2]=v*Lt(.5,.88,a)*(.35+.65*Lt(.1,.55,u))*.42}else if(n==="parallax"){let M=h-.45;i[0]=M*16*Math.sin(c)*g,i[1]=M*7*Math.sin(c*2)*g}else if(n==="push"){let M=.045*(.5-.5*Math.cos(c))*(.7+.6*h)*960,v=o?o[l+6]:.5,S=o?o[l+7]:.5;i[0]=(t-v)*M,i[1]=(e-S)*M}else if(n==="focus"){let M=Math.sin(c),v=M*M*Lt(.35,.85,M>=0?1-h:h);i[2]=(s-a)*v*.75}else if(n==="mist"){let M=Math.pow(1-h,1.5)*(1-.6*u),v=Math.sin(t*4.1-c+Math.sin(e*3.3+c)*.9)*.5+Math.sin(t*7.3+e*2.1-c*2+Math.sin(t*2.7-e*5.1+c)*1.1)*.3+Math.sin(e*5.7-t*1.9+c)*.2;i[2]=Lt(-.3,.9,v)*M*.16*(1-.55*a)}else if(n==="current"){let M=o?.[l+8]??0,v=o?.[l+9]??0,S=o?.[l+10]??0,k=Lt(0,.06,Math.min(t,1-t,e,1-e)),A=o?0:(1-.4*u)*(1-.8*h)*g,H=q=>e*14-q+Math.sin(t*3+q)*1.5,N=q=>e*16+t*2-q,C=q=>e*29-t*3-q*2,I=q=>t*1.7+e*2.3-q,y=q=>e*26+Math.sin(t*40)*1.5-q*2;i[0]=(Math.sin(H(c))-Math.sin(H(0))+(Math.sin(t*5-e*3+c)-Math.sin(t*5-e*3))*.43)*7*A+((Math.sin(N(c))-Math.sin(N(0)))*3.5+(Math.sin(C(c))-Math.sin(C(0)))*1.5)*M*k+(Math.sin(I(c))-Math.sin(I(0)))*5*v*k,i[1]=(Math.sin(t*11+c)-Math.sin(t*11))*2*A+(Math.cos(N(c))-Math.cos(N(0)))*.8*M*k+(Math.sin(y(c))-Math.sin(y(0)))*12*S*k;let z=Math.pow(.5+.5*Math.cos(c*2+t*9-e*4+nr(Math.floor(t*160),Math.floor(e*100))*6.2831853),24)-Math.pow(.5+.5*Math.cos(t*9-e*4+nr(Math.floor(t*160),Math.floor(e*100))*6.2831853),24);i[2]=(Math.cos(H(c))-Math.cos(H(0)))*.03*A+(z*Lt(.5,.85,a)*.3+(Math.cos(N(c))-Math.cos(N(0)))*.025)*M*k+(Math.cos(y(c))-Math.cos(y(0)))*.08*S*k}else if(n==="develop"){let M=Lt(7,8.5,b),v=ze((b-8.5)/3.5),S=b<8.5?1-M:Lt(0,1,(v*1.45-(1-a)+(nr(Math.floor(t*160),Math.floor(e*100))-.5)*.06)/.3);i[2]=-(1-S)*.3,i[3]=1-(1-S)*.9}return i}var si=n=>n==="relight"||n==="sheen"||n==="glow"||n==="shimmer"||n==="mist";function ai(n){let t=Math.floor(n),e=Math.max(0,Math.min(1,(n-t-.2)/.6));return t+e*e*(3-2*e)}function Ur(n,t,e,r,i,a){return a[0]=ai(Math.max(0,Math.min(r-1,t-n[0]/960*r))),a[1]=ai(Math.max(0,Math.min(i-1,e-n[1]/960*i))),a}function Hr(n,t){let e=Math.max(0,Math.min(2,Number.isFinite(t)?t:1));return n[0]*=e,n[1]*=e,n[2]*=e,n[3]=ze(1+(n[3]-1)*e),n}var Nr=n=>n==="subject"||n==="outside"?n:"all";function xt(n,t,e,r,i){if(!(i<1))for(let a=0;a<2;a++){for(let o=0;o<r;o++){let l=0,s=o*e;for(let h=-i;h<=i;h++)l+=n[s+Math.max(0,Math.min(e-1,h))];for(let h=0;h<e;h++)t[s+h]=l/(i*2+1),l+=n[s+Math.min(e-1,h+i+1)]-n[s+Math.max(0,h-i)]}for(let o=0;o<e;o++){let l=0;for(let s=-i;s<=i;s++)l+=t[Math.max(0,Math.min(r-1,s))*e+o];for(let s=0;s<r;s++)n[s*e+o]=l/(i*2+1),l+=t[Math.min(r-1,s+i+1)*e+o]-t[Math.max(0,s-i)*e+o]}}}var Or=new Float32Array(0);function ar(n,t,e,r,i){let a=t*e,o=i&&i.width===t&&i.height===e?i:{width:t,height:e,subject:new Float32Array(a),depth:new Float32Array(a),key:"none"},{subject:l,depth:s}=o,h=0;for(let c=0;c<a;c++)n[c*4+3]<250&&h++;let m=c=>(n[c*4]*.2126+n[c*4+1]*.7152+n[c*4+2]*.0722)/255,u="none",f=0;if(h>a*.01)u="alpha";else if(r)u="mask";else{let c=0,b=0,g=0,M=Math.max(1,Math.round(Math.min(t,e)*.03));for(let S=0;S<e;S++)for(let k=0;k<t;k++){if(k>=M&&S>=M&&k<t-M&&S<e-M)continue;let A=m(S*t+k);c+=A,b+=A*A,g++}f=c/Math.max(1,g),Math.sqrt(Math.max(0,b/Math.max(1,g)-f*f))<.07&&(u="ground")}for(let c=0;c<a;c++){let b=n[c*4+3]/255,g=m(c),M=1;if(u==="alpha")M=b;else if(u==="ground"){let v=Math.max(0,Math.min(1,(Math.abs(g-f)-.035)/.12));M=v*v*(3-2*v)}l[c]=M*(r?Math.max(0,Math.min(1,r[c])):1),s[c]=g*b}o.key=u,Or.length<a&&(Or=new Float32Array(a));let p=Or;return xt(l,p,t,e,Math.max(1,Math.round(Math.min(t,e)*.02))),xt(s,p,t,e,Math.max(1,Math.round(Math.min(t,e)*.035))),o}function li(n,t,e="ground"){return e==="none"?1:n==="subject"?t:n==="outside"?1-t:1}function hi(n,t,e,r){let i=n[t],a=n.width,o=n.height,l=Math.max(0,Math.min(a-1.001,e*(a-1))),s=Math.max(0,Math.min(o-1.001,r*(o-1))),h=Math.floor(l),m=Math.floor(s),u=l-h,f=s-m,p=m*a+h,c=Math.min(o-1,m+1)*a+h,b=h+1<a?1:0;return(i[p]*(1-u)+i[p+b]*u)*(1-f)+(i[c]*(1-u)+i[c+b]*u)*f}var ve=11,Gt=n=>Math.max(0,Math.min(1,n)),X=(n,t,e)=>{let r=Gt((e-n)/(t-n));return r*r*(3-2*r)};function Vt(n,t,e=256){let r=0;for(let l=0;l<n.length;l++)n[l]>r&&(r=n[l]);if(r<=0)return 0;let i=new Uint32Array(e);for(let l=0;l<n.length;l++)i[Math.min(e-1,Math.floor(Math.max(0,n[l])/r*e))]++;let a=0,o=n.length*t;for(let l=0;l<e;l++)if(a+=i[l],a>=o)return(l+1)/e*r;return r}var Yi=12e3,Br=class{constructor(t){this.n=t;this.arrays=[];this.next=0}take(t){this.next===this.arrays.length&&this.arrays.push(new Float32Array(this.n));let e=this.arrays[this.next++];return t?e.set(t):e.fill(0),e}reset(){this.next=0}},or=null;function Wi(n,t,e,r,i,a,o,l,s){let h=i*a,m=s.take(),u=x=>(ye(x,m,i,a,o),x),f=(x,D)=>{let V=s.take();for(let Z=0;Z<h;Z++)V[Z]=x[Z]*D[Z];return u(V)},p=u(s.take(t)),c=u(s.take(e)),b=u(s.take(r)),g=u(s.take(n)),M=f(t,t),v=f(t,e),S=f(t,r),k=f(e,e),A=f(e,r),H=f(r,r),N=f(t,n),C=f(e,n),I=f(r,n),y=s.take(),z=s.take(),q=s.take(),Y=s.take();for(let x=0;x<h;x++){let D=N[x]-p[x]*g[x],V=C[x]-c[x]*g[x],Z=I[x]-b[x]*g[x],T=M[x]-p[x]*p[x]+l,O=v[x]-p[x]*c[x],w=S[x]-p[x]*b[x],F=k[x]-c[x]*c[x]+l,W=A[x]-c[x]*b[x],P=H[x]-b[x]*b[x]+l,U=F*P-W*W,E=w*W-O*P,B=O*W-w*F,nt=T*P-w*w,Q=O*w-T*W,ct=T*F-O*O,ft=T*U+O*E+w*B,At=Math.abs(ft)>1e-12?1/ft:0;y[x]=(U*D+E*V+B*Z)*At,z[x]=(E*D+nt*V+Q*Z)*At,q[x]=(B*D+Q*V+ct*Z)*At,Y[x]=g[x]-y[x]*p[x]-z[x]*c[x]-q[x]*b[x]}u(y),u(z),u(q),u(Y);for(let x=0;x<h;x++)n[x]=y[x]*t[x]+z[x]*e[x]+q[x]*r[x]+Y[x]}function ye(n,t,e,r,i){let a=i*2+1;for(let o=0;o<r;o++){let l=o*e,s=0;for(let h=-i;h<=i;h++)s+=n[l+Math.max(0,Math.min(e-1,h))];for(let h=0;h<e;h++)t[l+h]=s/a,s+=n[l+Math.min(e-1,h+i+1)]-n[l+Math.max(0,h-i)]}for(let o=0;o<e;o++){let l=0;for(let s=-i;s<=i;s++)l+=t[Math.max(0,Math.min(r-1,s))*e+o];for(let s=0;s<r;s++)n[s*e+o]=l/a,l+=t[Math.min(r-1,s+i+1)*e+o]-t[Math.max(0,s-i)*e+o]}}function qr(n,t,e,r,i,a,o){let l=e*r,s=o.take(),h=o.take(t),m=o.take(n),u=o.take(),f=o.take();for(let p=0;p<l;p++)u[p]=t[p]*t[p],f[p]=t[p]*n[p];ye(h,s,e,r,i),ye(m,s,e,r,i),ye(u,s,e,r,i),ye(f,s,e,r,i);for(let p=0;p<l;p++){let c=(f[p]-h[p]*m[p])/(u[p]-h[p]*h[p]+a);u[p]=c,f[p]=m[p]-c*h[p]}ye(u,s,e,r,i),ye(f,s,e,r,i);for(let p=0;p<l;p++)n[p]=u[p]*t[p]+f[p]}function zr(n,t,e,r,i,a=2){for(let o=0;o<a;o++){for(let l=0;l<r;l++)for(let s=0;s<e;s++){let h=l*e+s,m=n[h];s>0&&(m=Math.max(m,Math.min(t[h],n[h-1]*i))),l>0&&(m=Math.max(m,Math.min(t[h],n[h-e]*i),s>0?Math.min(t[h],n[h-e-1]*i):0,s<e-1?Math.min(t[h],n[h-e+1]*i):0)),n[h]=m}for(let l=r-1;l>=0;l--)for(let s=e-1;s>=0;s--){let h=l*e+s,m=n[h];s<e-1&&(m=Math.max(m,Math.min(t[h],n[h+1]*i))),l<r-1&&(m=Math.max(m,Math.min(t[h],n[h+e]*i),s>0?Math.min(t[h],n[h+e-1]*i):0,s<e-1?Math.min(t[h],n[h+e+1]*i):0)),n[h]=m}}}function sr(n,t,e,r,i){for(let a=0;a<r;a++)for(let o=0;o<e;o++){let l=1;for(let s=Math.max(0,o-i);s<=Math.min(e-1,o+i);s++)l=Math.min(l,n[a*e+s]);t[a*e+o]=l}for(let a=0;a<r;a++)for(let o=0;o<e;o++){let l=1;for(let s=Math.max(0,a-i);s<=Math.min(r-1,a+i);s++)l=Math.min(l,t[s*e+o]);n[a*e+o]=l}}function ji(n,t,e,r,i){let a=e*r,o=Math.min(e,r),l=i.take(),s=i.take(),h=i.take(),m=i.take(),u=i.take();for(let d=0;d<a;d++){let G=n[d*4+3]/255;u[d]=G,l[d]=t[d*4]/255*G,s[d]=t[d*4+1]/255*G,h[d]=t[d*4+2]/255*G,m[d]=(n[d*4]*.299+n[d*4+1]*.587+n[d*4+2]*.114)/255*G}let f=i.take(),p=(d,G)=>{let R=i.take(d);return xt(R,f,e,r,G),R},c=Math.max(2,Math.round(o*.04)),b=Math.max(c+2,Math.round(o*.12)),g=Math.max(2,Math.round(o*.05)),M=p(m,1),v=p(m,c),S=p(m,b),k=i.take(),A=i.take(),H=i.take(),N=i.take(),C=i.take();for(let d=0;d<r;d++)for(let G=0;G<e;G++){let R=d*e+G;k[R]=Math.abs(m[R]-M[R]),A[R]=Math.abs(M[R]-v[R]),H[R]=Math.abs(v[R]-S[R]),N[R]=Math.abs(m[d*e+Math.min(e-1,G+1)]-m[d*e+Math.max(0,G-1)]),C[R]=Math.abs(m[Math.min(r-1,d+1)*e+G]-m[Math.max(0,d-1)*e+G])}xt(k,f,e,r,g),xt(A,f,e,r,g),xt(H,f,e,r,g),xt(N,f,e,r,2),xt(C,f,e,r,2);let I=Math.max(.01,Vt(k,.9)+Vt(A,.9)),y=p(l,1),z=p(s,1),q=p(h,1),Y=i.take(),x=i.take(),D=i.take(),V=0;for(let d=0;d<a;d++){let G=y[d],R=z[d],_=q[d],j=Math.max(G,R,_),pt=Math.min(G,R,_),Mt=j-pt;D[d]=j,x[d]=j>.001?Mt/j:0,V+=Mt;let Ft=0;Mt>1e-4&&(Ft=j===G?((R-_)/Mt+6)%6:j===R?(_-G)/Mt+2:(G-R)/Mt+4),Y[d]=Ft*60}let Z=X(.02,.07,V/a),T=Math.max(2,Math.round(r*.06)),O=new Float32Array(r);for(let d=0;d<r;d++){let G=0;for(let R=0;R<e;R++)G+=k[d*e+R]+A[d*e+R];O[d]=G/e}let w=.5,F=0;for(let d=Math.max(T,Math.round(r*.12));d<=Math.min(r-T,Math.round(r*.88));d++){let G=0,R=0,_=0,j=0;for(let tt=0;tt<e;tt++){let dt=0,lt=0,qt=0,Rt=0,gt=0,Ut=0;for(let ht=1;ht<=T;ht++){let rt=(d-ht)*e+tt,St=(d+ht-1)*e+tt;dt+=y[rt],lt+=z[rt],qt+=q[rt],Rt+=y[St],gt+=z[St],Ut+=q[St]}let bt=(Math.abs(dt-Rt)+Math.abs(lt-gt)+Math.abs(qt-Ut))/T;G+=bt,R+=bt>.12?1:0}let pt=Math.max(2,Math.round(r*.15)),Mt=Math.max(0,d-pt),Ft=Math.min(r,d+pt);for(let tt=Mt;tt<d;tt++)_+=O[tt];for(let tt=d;tt<Ft;tt++)j+=O[tt];_/=d-Mt,j/=Ft-d;let K=X(-.05,.3,(j-_)/(j+_+1e-4)),J=X(.08,.35,G/e)*(R/e)*K;J>F&&(F=J,w=d/r)}let W=X(.15,.45,F),P=i.take(),U=i.take(),E=i.take();for(let d=0;d<a;d++)P[d]=Math.min(l[d],s[d],h[d]);sr(P,f,e,r,1),xt(P,f,e,r,c);for(let d=0;d<a;d++)U[d]=A[d]+H[d];let B=0,nt=0,Q=0;for(let d=0;d<a;d++)B+=y[d],nt+=z[d],Q+=q[d];B/=a,nt/=a,Q/=a;let ct=p(y,c),ft=p(z,c),At=p(q,c),Tt=p(y,b),mt=p(z,b),se=p(q,b);for(let d=0;d<a;d++){let G=Math.hypot(ct[d]-B,ft[d]-nt,At[d]-Q),R=Math.hypot(ct[d]-Tt[d],ft[d]-mt[d],At[d]-se[d]);E[d]=(G+R*1.5)*(.4+.6*x[d]*Z+.4*(1-Z))}let ot=i.take(),te=i.take(),Ae=i.take(),yt=i.take(),le=i.take(),ee=i.take(),Ct=i.take(),re=i.take(),Zt=i.take(),Le=i.take();for(let d=0;d<r;d++)for(let G=0;G<e;G++)Le[d*e+G]=Math.abs(m[Math.min(r-1,d+1)*e+G]-m[Math.max(0,d-1)*e+G]);xt(Le,f,e,r,1);for(let d=0;d<r;d++)for(let G=0;G<e;G++){let R=d*e+G,_=(d+.5)/r,j=Y[R],pt=x[R]*Z,Mt=D[R],Ft=k[R]+A[R],K=X(175,200,j)*(1-X(250,275,j))*X(.08,.25,pt),J=(1-X(45,65,j)+X(290,330,j))*X(.2,.45,pt)*X(.3,.55,Mt),tt=(1-X(.15,.35,pt))*X(.45,.7,Mt)*W,dt=(1-X(.08,.2,Mt))*W,lt=W>.3?1-X(w,w+.1,_):1-X(.4,.8,_),qt=1-X(.02,.06,Ft),Rt=1-X(.03,.09,Ft);te[R]=Math.max(K*qt,dt*.7*(1-X(.008,.025,Ft)),J*Rt*.9)*lt,Ae[R]=Math.max(te[R],tt*qt*lt),ot[R]=d===0?te[R]:0,yt[R]=X(150,172,j)*(1-X(232,250,j))*X(.25,.45,pt),Ct[R]=X(1.3,2.2,(N[R]+.004)/(C[R]+.004))*X(.35,.55,M[R])*(1-X(.1,.18,x[R]*Z))*X(.025,.07,Ft)*X(.025,.045,Le[R]);let gt=1-X(.18,.4,pt),Ut=X(.55,.8,Mt)*X(.05,.12,Ft);le[R]=Math.max(yt[R],gt*.85,Ut*.8)}zr(ot,te,e,r,.995,1),zr(ot,Ae,e,r,.8,1);let We=0;for(let d=0;d<a;d++)We+=ot[d];let Ue=We>a*.04&&W>.3;if(Ue)for(let d=0;d<r;d++)for(let G=0;G<e;G++)yt[d*e+G]*=X(w,w+.05,(d+.5)/r);if(Ue){let d=i.take(),G=i.take(),R=i.take();for(let K=0;K<a;K++)d[K]=ct[K]*.299+ft[K]*.587+At[K]*.114;for(let K=0;K<r;K++)for(let J=0;J<e;J++)G[K*e+J]=M[Math.min(r-1,K+1)*e+J]-M[Math.max(0,K-1)*e+J];let _=new Uint8Array(a);for(let K=1;K<r-1;K++)for(let J=0;J<e;J++){let tt=Math.abs(G[K*e+J]),dt=tt>.03;for(let lt=-3;lt<=3&&dt;lt++)lt&&K+lt>=0&&K+lt<r&&Math.abs(G[(K+lt)*e+J])>tt&&(dt=!1);_[K*e+J]=dt?1:0}let j=(K,J,tt,dt=!0)=>{let lt=ct[J]+ft[J]+At[J]+.05,qt=ct[tt]+ft[tt]+At[tt]+.05,Rt=Math.abs(ct[J]/lt-ct[tt]/qt)+Math.abs(ft[J]/lt-ft[tt]/qt)+Math.abs(At[J]/lt-At[tt]/qt),gt=Math.min(Math.abs(Y[J]-Y[tt]),360-Math.abs(Y[J]-Y[tt])),Ut=Math.max(1-X(.1,.25,Rt),(1-X(15,35,gt))*X(.15,.3,Math.min(x[J],x[tt]))),bt=Math.max(X(2,3,(C[J]+.004)/(N[J]+.004))*X(.015,.04,k[J]+A[J])*X(.4,.55,k[J]/(k[J]+A[J]+1e-4)),1-X(.12,.25,d[J]));return Ut*(dt?bt:1)*(1-X(d[tt]*.82+.02,d[tt]*1.02+.05,d[J]))},pt=0,Mt=0;for(let K=Math.max(3,Math.round(r*Math.max(.25,w)));K<Math.round(r*.88);K++){let J=0;for(let dt=0;dt<e;dt++)(_[(K-1)*e+dt]||_[K*e+dt]||_[(K+1)*e+dt])&&J++;if(J<e*.5)continue;let tt=0;for(let dt=K+1;dt<Math.min(r,2*K);dt++)for(let lt=0;lt<e;lt++)tt+=j(K,dt*e+lt,(2*K-dt)*e+lt);tt>Mt&&(Mt=tt,pt=K)}let Ft=X(.05,.1,Mt/a);if(Ft>0)for(let K=pt+1;K<Math.min(r,2*pt);K++)for(let J=0;J<e;J++){let tt=K*e+J;re[tt]=j(pt,tt,(2*pt-K)*e+J)*Ft,Zt[tt]=j(pt,tt,(2*pt-K)*e+J,!1)*Ft,R[tt]=re[tt]}xt(R,f,e,r,1);for(let K=0;K<a;K++)re[K]=Math.max(re[K],R[K]),yt[K]=Math.max(yt[K],re[K])}let je=p(yt,b);for(let d=0;d<a;d++)yt[d]*=X(.15,.35,je[d]);let wt=p(yt,c);for(let d=0;d<a;d++){yt[d]*=1-te[d]*.8;let G=Math.min(Math.abs(Y[d]-200),360-Math.abs(Y[d]-200));ee[d]=X(.28,.45,x[d]*Z)*X(55,80,G)*(1-X(.3,.6,Zt[d]))}let Nt=p(ee,c);for(let d=0;d<a;d++)ee[d]=Math.max(ee[d]*(1-(1-X(.15,.3,Nt[d]))*X(.55,.7,D[d])*X(.5,.65,x[d])),1-u[d]),le[d]=Math.min(Math.max(le[d],Zt[d]*.9),Math.max(yt[d],X(.25,.6,wt[d])))*(1-ot[d])*(1-ee[d]);zr(yt,le,e,r,.97);let Xt=i.take(Ct),jt=Math.max(2,Math.round(r*.12));for(let d=0;d<e;d++){let G=0;for(let R=-jt;R<=jt;R++)G+=Ct[Math.max(0,Math.min(r-1,R))*e+d];for(let R=0;R<r;R++)Xt[R*e+d]=G/(jt*2+1),G+=Ct[Math.min(r-1,R+jt+1)*e+d]-Ct[Math.max(0,R-jt)*e+d]}xt(Xt,f,e,r,1);for(let d=0;d<a;d++)Ct[d]=X(.2,.45,Xt[d])*X(.2,.5,Ct[d]+Xt[d]*.5)*(1-ot[d]);qr(ot,m,e,r,Math.max(2,Math.round(o*.04)),.002,i),qr(yt,m,e,r,Math.max(2,Math.round(o*.04)),.002,i),qr(Ct,m,e,r,Math.max(2,Math.round(o*.03)),.002,i),xt(ee,f,e,r,1);for(let d=0;d<a;d++)ot[d]=X(.3,.7,ot[d])*u[d],Ct[d]=X(.3,.7,Ct[d])*u[d]*(1-ot[d]),yt[d]=X(.3,.7,yt[d])*(1-ot[d])*(1-Ct[d])*(1-X(.15,.4,ee[d]));sr(ot,f,e,r,2),sr(yt,f,e,r,2),sr(Ct,f,e,r,1),xt(ot,f,e,r,1),xt(yt,f,e,r,1),xt(Ct,f,e,r,1);let He=1/Math.max(.02,Vt(E,.97)),kr=1/Math.max(.01,Vt(U,.9)),Ke=Vt(P,.97),Oe=Vt(P,.1),it=X(.06,.25,Ke-Oe),$=i.take();for(let d=0;d<r;d++)for(let G=0;G<e;G++){let R=d*e+G,_=(G+.5)/e,j=(d+.5)/r,pt=Math.max(ot[R],yt[R]),Mt=k[R]+A[R]+H[R],Ft=Gt(((k[R]+A[R]*.6)/(Mt+.004)-.25)/.55)*.6+Gt((k[R]+A[R])/I)*.4,K=X(.04,.35,Mt/I)*(1-pt),J=Gt((P[R]-Oe)/Math.max(.05,Ke-Oe))*.55+(1-Gt(U[R]*kr))*.25+Gt((q[R]-y[R])*2+.3)*.2*Z,tt=it*X(.12,.35,v[R])*(.4+.6*W),dt=j<w?.45:.45+.55*X(0,1,(j-w)/Math.max(.15,1-w)),lt=W*dt+(1-W)*(.5+(j-.5)*.4),qt=k[R]/(k[R]+A[R]+1e-4),Rt=X(.2,.7,(k[R]+A[R])/I)*(.35+.65*W)*(1-pt),gt=1-Gt(Math.hypot((_-.5)*1.2,j-.52)*1.5),Ut=Gt(E[R]*He)*(.55+.45*gt),bt=.3*K,ht=.25*tt,rt=.12+.45*W,St=.12*Rt,Kt=.35*(1-.4*W)*(1-pt);$[R]=(bt*Ft+ht*(1-J)+rt*lt+St*Gt(1.6-qt*1.6)+Kt*Ut+.08*.5)/(bt+ht+rt+St+Kt+.08)*(1-.85*ot[R])*(1-.45*yt[R]*(1-W))}let ie=ar(n,e,r);if(ie.key!=="none")for(let d=0;d<a;d++)$[d]=ie.subject[d]*.7+$[d]*.3;return xt($,f,e,r,Math.max(1,Math.round(o*.03))),Wi($,y,z,q,e,r,Math.max(2,Math.round(o*.07)),.004,i),{depth:$,water:yt,sky:ot,falls:Ct}}function lr(n,t,e,r,i,a,o){if(t===a&&e===o)return n[i*a+r];let l=Math.max(0,Math.min(t-1,(r+.5)*t/a-.5)),s=Math.max(0,Math.min(e-1,(i+.5)*e/o-.5)),h=Math.min(t-2,Math.floor(l)),m=Math.min(e-2,Math.floor(s)),u=l-h,f=s-m;if(h<0||m<0)return n[Math.round(s)*t+Math.round(l)];let p=m*t+h,c=p+t;return(n[p]*(1-u)+n[p+1]*u)*(1-f)+(n[c]*(1-u)+n[c+1]*u)*f}function ci(n,t,e,r,i=n){let a=t*e,o=r?.length===a*ve?r:new Float32Array(a*ve);if(!a)return o;let l=Math.min(t,e),s=new Float32Array(a),h=new Float32Array(a),m=new Float32Array(a),u=new Float32Array(a),f=new Float32Array(a),p=new Float32Array(a);for(let T=0;T<a;T++){let O=n[T*4+3]/255;s[T]=(n[T*4]*.299+n[T*4+1]*.587+n[T*4+2]*.114)/255*O}h.set(s),xt(h,p,t,e,Math.max(1,Math.round(l*.012))),m.set(s),xt(m,p,t,e,Math.max(1,Math.round(l*.03)));for(let T=0;T<a;T++){u[T]=Math.abs(s[T]-h[T]);let O=Math.max(0,s[T]-.55)/.45;f[T]=O*O}xt(u,p,t,e,Math.max(1,Math.round(l*.02)));let c=1/Math.max(.02,Vt(u,.95));xt(f,p,t,e,Math.max(1,Math.round(l*.05)));let b=1/Math.max(.03,Vt(f,.98)),g=Math.max(1,Math.ceil(Math.sqrt(a/Yi))),M=Math.max(1,Math.floor(t/g)),v=Math.max(1,Math.floor(e/g)),S=M*v,k=n,A=i;if(g>1){let T=new Uint8ClampedArray(S*4),O=i===n?T:new Uint8ClampedArray(S*4);for(let w=0;w<v;w++)for(let F=0;F<M;F++){let W=[0,0,0,0,0,0,0];for(let E=w*g;E<(w+1)*g;E++)for(let B=F*g;B<(F+1)*g;B++){let nt=(E*t+B)*4;for(let Q=0;Q<4;Q++)W[Q]+=n[nt+Q];if(O!==T)for(let Q=0;Q<3;Q++)W[4+Q]+=i[nt+Q]}let P=(w*M+F)*4,U=g*g;for(let E=0;E<4;E++)T[P+E]=W[E]/U;if(O!==T){for(let E=0;E<3;E++)O[P+E]=W[4+E]/U;O[P+3]=T[P+3]}}k=T,A=O}or?.n!==S&&(or=new Br(S)),or.reset();let{depth:H,water:N,sky:C,falls:I}=ji(k,A,M,v,or),y=Vt(H,.03),z=Vt(H,.97),q=Math.max(.05,z-y),Y=0,x=0,D=0,V=new Float32Array(a);for(let T=0;T<e;T++)for(let O=0;O<t;O++){let w=T*t+O,F=w*ve,W=Gt((lr(H,M,v,O,T,t,e)-y)/q);o[F+1]=W,o[F+8]=Gt(lr(N,M,v,O,T,t,e)),o[F+9]=Gt(lr(C,M,v,O,T,t,e)),o[F+10]=Gt(lr(I,M,v,O,T,t,e));let P=W*W*W*(.25+s[w]);Y+=(O+.5)/t*P,x+=(T+.5)/e*P,D+=P,V[w]=Math.hypot(m[T*t+Math.min(t-1,O+1)]-m[T*t+Math.max(0,O-1)],m[Math.min(e-1,T+1)*t+O]-m[Math.max(0,T-1)*t+O])}Y=D>0?Math.max(.3,Math.min(.7,Y/D)):.5,x=D>0?Math.max(.3,Math.min(.7,x/D)):.5;let Z=1/Math.max(.004,Vt(V,.97));for(let T=0;T<e;T++)for(let O=0;O<t;O++){let w=T*t+O,F=w*ve,W=(m[T*t+Math.min(t-1,O+1)]-m[T*t+Math.max(0,O-1)])*Z,P=(m[Math.min(e-1,T+1)*t+O]-m[Math.max(0,T-1)*t+O])*Z;o[F]=m[w],o[F+2]=Math.min(1,f[w]*b),o[F+3]=Math.min(1,u[w]*c),o[F+4]=Math.max(-1,Math.min(1,-W)),o[F+5]=Math.max(-1,Math.min(1,-P)),o[F+6]=Y,o[F+7]=x}return o}var Ki=[{value:"none",label:"Off",group:"Still",description:"Keep the artwork still under the pointer."},{value:"trail",label:"Trail",group:"Change characters",description:"A fluid wake changes character density and settles behind your cursor."},{value:"dissolve",label:"Dissolve",group:"Change characters",description:"Erase a soft path through the characters; the image gradually reforms."},{value:"contour",label:"Contour",group:"Change characters",description:"Fine tonal rings trace your path without moving the grid."},{value:"etch",label:"Emboss",group:"Change characters",description:"Press a light-and-shadow impression into the characters; the grid stays fixed."},{value:"ripple",label:"Ripple rings",group:"Change characters",description:"Expanding light-and-shadow rings follow your stroke. Faster movement excites stronger rings; the grid stays still."},{value:"bleed",label:"Ink bleed",group:"Change characters",description:"Ink wells up where the cursor rests, spreads along the paper grain, then dries back."},{value:"water",label:"Water",group:"Move the image",description:"Soft ripples refract the image and settle after your stroke."},{value:"silk",label:"Silk",group:"Move the image",description:"Directional folds follow the movement of your hand."},{value:"vortex",label:"Vortex",group:"Move the image",description:"A swirling wake curls through the image."},{value:"magnetic",label:"Magnetic Pull",group:"Move the image",description:"The image gathers toward your stroke, then relaxes."},{value:"scatter",label:"Scatter",group:"Move the image",description:"Characters scatter in soft drifts from your stroke, then spring back into place."},{value:"elastic",label:"Elastic",group:"Move the image",description:"Push the image with your stroke; it recoils past its rest once, then settles."},{value:"lens",label:"Lens wake",group:"Move the image",description:"A soft magnifying wake brings details closer, then relaxes back into focus."},{value:"smudge",label:"Smudge",group:"Move the image",description:"Drag the image in the direction of your stroke; a smooth, lingering pull settles without a bounce."},{value:"loupe",label:"Loupe",group:"Follow the cursor",description:"A glass loupe glides after the cursor and magnifies what it covers, easing through a soft rim."},{value:"reveal",label:"Reveal",group:"Follow the cursor",description:"A soft spotlight shows the original photograph through the characters."},{value:"repel",label:"Repel",group:"Follow the cursor",description:"Characters part around the cursor and spring back with one soft rebound when it leaves."},{value:"tilt",label:"Tilt",group:"Follow the cursor",description:"The image leans toward the cursor; bright areas sit nearer and move more, like a parallax card."},{value:"haze",label:"Heat haze",group:"Follow the cursor",description:"A rising shimmer bends the characters above the cursor, livelier while you move."}],ui={rake:"silk"},xe={radius:{label:"Hover size",min:.1,max:1,step:.05,default:.2},strength:{label:"Hover strength",min:0,max:1,step:.05,default:.55},decay:{label:"Linger",min:0,max:1,step:.05,default:.5}},mi={effect:"trail",strength:.55,radius:.2,decay:.5,scope:"all",edgeSafe:!1};function hr(n){if(typeof n=="string")return n in ui?ui[n]:Ki.some(t=>t.value===n)?n:void 0}var Vi=["ascii","blocks","braille","dots","lines","cross","diagonal","diamond","mixed","pixel","mosaic","lego","voxel","disco","dither","hex","led","cmyk",...Ir],_i=["none","bayer2","bayer4","bayer8","bayer16","floyd-steinberg","atkinson","stucki","sierra","sierra-lite","burkes","jarvis","halftone","lines","noise","vertical-lines","diagonal-lines","radial","blue-noise"],Ji=["source-over","multiply","screen","overlay","soft-light","hard-light","color-dodge","color-burn","hue","saturation","color","luminosity"],cr={original:[],gray4:["#000000","#555555","#aaaaaa","#ffffff"],gray8:["#000000","#242424","#494949","#6d6d6d","#929292","#b6b6b6","#dbdbdb","#ffffff"],rgb8:["#000000","#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff","#ffffff"],cyberpunk:["#08081a","#3c1670","#ed299a","#29dfef","#fff7bf"],pastel:["#393448","#a5b4d4","#9ed9c6","#e7aac1","#f5e8be"],mono:["#080808","#f2f2e8"],asciify:["#080808","#625b38","#a19558","#e8b900"],gameboy:["#0f380f","#306230","#8bac0f","#9bbc0f"],cga:["#000000","#55ffff","#ff55ff","#ffffff"],pico8:["#000000","#1d2b53","#7e2553","#008751","#ab5236","#5f574f","#c2c3c7","#fff1e8","#ff004d","#ffa300","#ffec27","#00e436","#29adff","#83769c","#ff77a8","#ffccaa"],c64:["#000000","#ffffff","#880000","#aaffee","#cc44cc","#00cc55","#0000aa","#eeee77","#dd8855","#664400","#ff7777","#333333","#777777","#aaff66","#0088ff","#bbbbbb"],amber:["#100b00","#5f3b00","#c98014","#ffd17c"],ice:["#081b29","#25586e","#69a6b3","#d9ece7"],risograph:["#f4ebd0","#f2594b","#2853a5","#29232e"],sepia:["#201b17","#6b5039","#b49868","#f6e6c5"],nord:["#2e3440","#4c566a","#88c0d0","#eceff4"],dusk:["#211b35","#654271","#c3788c","#f5c9a3"],forest:["#101f1b","#355747","#87a16f","#e4e3ba"],ocean:["#071b33","#17577f","#3fa7a4","#d9efde"],newsprint:["#191919","#666666","#aaaaaa","#eee9df"],custom:["#0b0b0a","#e6e3da"]},Zi={version:1,aspectRatio:"original",style:"ascii",cellSize:6,charset:" .:-=+*#%@",colorMode:"accent",ink:"#e6e3da",print:{...tr},crop:{x:.5,y:.5,zoom:1,rotation:0},warps:[],warpEdge:"clamp",backdrop:{mode:"solid",color:"#080808",color2:"#1d1d1b",blur:12,opacity:1},color:{brightness:0,contrast:1,saturation:1,grayscale:0,tint:"#e6e3da",amount:0,blend:"source-over",blackPoint:0,whitePoint:1,gamma:1,shadows:0,highlights:0,curves:{rgb:[[0,0],[1,1]],red:[[0,0],[1,1]],green:[[0,0],[1,1]],blue:[[0,0],[1,1]]},denoise:0,levels:"auto"},dither:{algorithm:"none",palette:"mono",colors:["#080808","#e6e3da"],amount:1,scale:2,threshold:.5,motion:"none",speed:1,direction:45,colorSpace:"rgb"},mask:{enabled:!1,invert:!1,shapes:[]},lights:[],effects:{bloom:0,characterBloom:0,grain:0,dust:0,scanlines:0,crt:0,prism:0,rgbSplit:0,sharpen:0,vignette:0,glitch:0,pixelate:0,blur:0,blurType:"gaussian",angle:0,focus:.5,halftone:0},motion:{type:"none",speed:1,amount:1},hover:{effect:"trail",strength:.55,radius:.2,edgeSafe:!1}},_t=n=>n&&typeof n=="object"&&!Array.isArray(n)?n:{},et=(n,t,e,r)=>typeof n=="number"&&Number.isFinite(n)?Math.min(r,Math.max(e,n)):t,De=(n,t)=>typeof n=="string"&&/^#[\\da-f]{6}$/i.test(n)?n:t,Wt=(n,t,e)=>t.includes(n)?n:e;function ur(n={}){let t=_t(n),e=Zi;if(t.version!==void 0&&t.version!==1)throw new Error("Unsupported studio settings version. Update asciify-engine.");let r=_t(t.crop),i=_t(t.backdrop),a=_t(t.color),o=_t(t.dither),l=_t(t.mask),s=_t(t.effects),h=_t(t.motion),m=_t(t.hover),u={...e.effects};for(let p of["bloom","characterBloom","grain","dust","scanlines","crt","prism","rgbSplit","sharpen","vignette","glitch","pixelate","halftone"])u[p]=et(s[p],0,0,1);u.blur=et(s.blur,0,0,24),u.blurType=Wt(s.blurType,["gaussian","directional","radial","progressive"],e.effects.blurType),u.angle=et(s.angle,0,-180,180),u.focus=et(s.focus,.5,0,1);let f=2048;return{version:1,aspectRatio:Wt(t.aspectRatio,["original","16:9","9:16","1:1","4:3","3:4","21:9"],"original"),style:Wt(t.style,Vi,e.style),cellSize:et(t.cellSize,e.cellSize,qe(String(t.style))||["pixel","mosaic","lego","voxel","disco","dots","hex","led","cmyk"].includes(String(t.style))?1:3,60),charset:typeof t.charset=="string"&&t.charset.length?Array.from(t.charset).slice(0,128).join(""):e.charset,colorMode:Wt(t.colorMode,["accent","source","gray"],e.colorMode),ink:De(t.ink,e.ink),print:er(t.print),warps:Cr(t.warps),warpEdge:Wt(t.warpEdge,["clamp","transparent"],"clamp"),crop:{x:et(r.x,.5,0,1),y:et(r.y,.5,0,1),zoom:et(r.zoom,1,1,5),rotation:Math.round(et(r.rotation,0,-360,360)/90)*90},backdrop:{mode:Wt(i.mode,["solid","transparent","source","blurred","gradient"],e.backdrop.mode),color:De(i.color,e.backdrop.color),color2:De(i.color2,e.backdrop.color2),blur:et(i.blur,12,0,32),opacity:et(i.opacity,1,0,1)},color:{brightness:et(a.brightness,0,-1,1),contrast:et(a.contrast,1,0,3),saturation:et(a.saturation,1,0,3),grayscale:et(a.grayscale,0,0,1),tint:De(a.tint,e.color.tint),amount:et(a.amount,0,0,1),blend:Wt(a.blend,Ji,e.color.blend),blackPoint:et(a.blackPoint,0,0,.99),whitePoint:Math.max(et(a.blackPoint,0,0,.99)+1/255,et(a.whitePoint,1,1/255,1)),gamma:et(a.gamma,1,.25,4),shadows:et(a.shadows,0,-1,1),highlights:et(a.highlights,0,-1,1),curves:Jr(a.curves),denoise:et(a.denoise,0,0,1),levels:a.levels==="none"?"none":"auto"},dither:{algorithm:Wt(o.algorithm,_i,"none"),palette:typeof o.palette=="string"&&Object.prototype.hasOwnProperty.call(cr,o.palette)?o.palette:"mono",colors:Array.isArray(o.colors)&&o.colors.length>=2?o.colors.slice(0,32).map(p=>De(p,"#000000")):[...e.dither.colors],amount:et(o.amount,1,0,2),scale:Math.round(et(o.scale,2,1,12)),threshold:et(o.threshold,.5,0,1),motion:Wt(o.motion,["none","drift","shimmer"],"none"),speed:et(o.speed,1,.1,3),direction:et(o.direction,45,-180,180),colorSpace:Wt(o.colorSpace,["rgb","luminance"],"rgb")},mask:{enabled:l.enabled===!0,invert:l.invert===!0,shapes:Array.isArray(l.shapes)?l.shapes.slice(0,64).map(p=>{let c=_t(p),b=Wt(c.kind,["rectangle","ellipse","brush"],"rectangle"),g=b==="brush"&&Array.isArray(c.points)?c.points.slice(0,f).map(M=>Array.isArray(M)?[Math.round(et(M[0],0,0,1)*1e4)/1e4,Math.round(et(M[1],0,0,1)*1e4)/1e4]:[0,0]):[];return f-=g.length,{kind:b,x:et(c.x,0,0,1),y:et(c.y,0,0,1),width:et(c.width,.5,0,1),height:et(c.height,.5,0,1),size:et(c.size,.05,.005,.5),points:g}}):[]},lights:Array.isArray(t.lights)?t.lights.slice(0,4).map(p=>{let c=_t(p);return{x:et(c.x,.5,0,1),y:et(c.y,.5,0,1),radius:et(c.radius,.3,.02,1),intensity:et(c.intensity,.5,0,1),color:De(c.color,"#ffffff")}}):[],effects:u,motion:{type:Wt(typeof h.type=="string"?oi(h.type):h.type,Dr.map(p=>p.mode),"none"),speed:et(h.speed,1,.1,3),amount:et(h.amount,1,0,2)},hover:{effect:hr(m.effect)??mi.effect,strength:et(m.strength,xe.strength.default,xe.strength.min,xe.strength.max),radius:et(m.radius,xe.radius.default,xe.radius.min,xe.radius.max),edgeSafe:m.edgeSafe===!0,...Nr(m.scope)!=="all"&&{scope:Nr(m.scope)},...et(m.decay,.5,0,1)!==.5&&{decay:et(m.decay,.5,0,1)}}}}function fi(n,t,e,r,i){let a=Math.abs(i.rotation/90)%2===1,o=a?t:n,l=a?n:t,s=Math.max(e/o,r/l)*i.zoom;return{width:o*s,height:l*s,x:(e-o*s)*i.x,y:(r-l*s)*i.y,scale:s,rotated:a}}function di(n,t,e,r=12e3,i=1){let a=Math.max(2,Number.isFinite(n)?n:960),o=Math.max(2,Number.isFinite(t)?t:540),l=Math.max(1,Math.floor(Number.isFinite(r)?r:12e3)),s=Math.max(.01,Number.isFinite(i)?i:1),h=qe(e.style)||["dither","pixel","mosaic","lego","voxel","disco","dots","hex","led","cmyk"].includes(e.style)?1:1.65,m=Math.max(1,Math.ceil(Math.sqrt(a*o/(l*h))/s));for(;Math.ceil(a/(m*s))*Math.ceil(o/(m*s*h))>l;)m++;let u=e.style==="dither"?e.dither.scale:e.cellSize,f=Math.max(m,u)*s;return{cell:f,rowHeight:f*h,columns:Math.ceil(a/f),rows:Math.ceil(o/(f*h)),minimum:m,limited:u<m}}var pi="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",gi="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",Be=new Uint16Array(4096);for(let n=0;n<Be.length;n++)Be[n]=pi.indexOf(gi[n*2])<<6|pi.indexOf(gi[n*2+1]);var Xr=(n,t)=>{let e=Math.sin(n*127.1+t*311.7)*43758.5453;return e-Math.floor(e)};function Qi(n,t,e){let r=0;for(let i=1;i<e;i*=2){let a=(Math.floor(n/i)%2+2)%2,o=(Math.floor(t/i)%2+2)%2;r=r*4+[[0,2],[3,1]][o][a]}return(r+.5)/(e*e)-.5}var $i=new Map([2,4,8,16].map(n=>[n,Float64Array.from({length:n*n},(t,e)=>Qi(e%n,Math.floor(e/n),n))])),tn={"floyd-steinberg":[[1,0,7/16],[-1,1,3/16],[0,1,5/16],[1,1,1/16]],atkinson:[[1,0,.125],[2,0,.125],[-1,1,.125],[0,1,.125],[1,1,.125],[0,2,.125]],stucki:[[1,0,8/42],[2,0,4/42],[-2,1,2/42],[-1,1,4/42],[0,1,8/42],[1,1,4/42],[2,1,2/42],[-2,2,1/42],[-1,2,2/42],[0,2,4/42],[1,2,2/42],[2,2,1/42]],sierra:[[1,0,5/32],[2,0,3/32],[-2,1,2/32],[-1,1,4/32],[0,1,5/32],[1,1,4/32],[2,1,2/32],[-1,2,2/32],[0,2,3/32],[1,2,2/32]],"sierra-lite":[[1,0,.5],[-1,1,.25],[0,1,.25]],burkes:[[1,0,8/32],[2,0,4/32],[-2,1,2/32],[-1,1,4/32],[0,1,8/32],[1,1,4/32],[2,1,2/32]],jarvis:[[1,0,7/48],[2,0,5/48],[-2,1,3/48],[-1,1,5/48],[0,1,7/48],[1,1,5/48],[2,1,3/48],[-2,2,1/48],[-1,2,3/48],[0,2,5/48],[1,2,3/48],[2,2,1/48]]},Yr=n=>[parseInt(n.slice(1,3),16),parseInt(n.slice(3,5),16),parseInt(n.slice(5,7),16)];function bi(n,t,e,r,i=0){let{algorithm:a,amount:o,threshold:l}=r,s=a==="blue-noise",h=a.startsWith("bayer")?Number(a.slice(5)):0,m=$i.get(h),u=h-1,f=r.colorSpace==="luminance",c=(r.palette==="custom"?r.colors:cr[r.palette]??cr.mono).map(Yr),b=tn[a],g=b?new Float32Array(t*3*3):null,M=r.motion==="drift"?i*r.speed*3:0,v=(r.direction??45)*Math.PI/180,S=Math.round(Math.cos(v)*M),k=Math.round(Math.sin(v)*M),A=(C,I)=>(C%I+I)%I,H=c.map(C=>C[0]*.299+C[1]*.587+C[2]*.114),N=r.motion==="shimmer"?Math.sin(i*r.speed*2)*.15:0;for(let C=0;C<e;C++)for(let I=0;I<t;I++){let y=(C*t+I)*4,z=(C%3*t+I)*3;if(n[y+3]===0){g&&(g[z]=g[z+1]=g[z+2]=0);continue}let q=0,Y=s?(Be[(C-k&63)*64+(I-S&63)]+.5)/Be.length:0;m?q=m[(C-k&u)*h+(I-S&u)]:a==="noise"?q=Xr(I-S,C-k)-.5:a==="lines"?q=A(C-k,4)/3-.5:a==="vertical-lines"?q=A(I-S,4)/3-.5:a==="diagonal-lines"?q=A(I-S+C-k,4)/3-.5:a==="radial"?q=A(Math.hypot(I-t/2,C-e/2)-M,6)/6-.5:a==="halftone"&&(q=Math.hypot(A(I-S,6)-2.5,A(C-k,6)-2.5)/3.54-.5);let x=(q*o+N+(.5-l))*128,D=n[y]+x+(g?.[z]??0),V=n[y+1]+x+(g?.[z+1]??0),Z=n[y+2]+x+(g?.[z+2]??0),T=0,O=0,w=0;if(c.length){let F=1/0,W=1/0,P=0,U=0,E=D*.299+V*.587+Z*.114;for(let B=0;B<c.length;B++){let nt=c[B],Q=f?(E-H[B])**2:(D-nt[0])**2*.299+(V-nt[1])**2*.587+(Z-nt[2])**2*.114;Q<F?(s&&(W=F,U=P,P=B),F=Q,[T,O,w]=nt):s&&Q<W&&(W=Q,U=B)}if(s&&o>0&&Number.isFinite(W)){let B=c[U],nt=B[0]-T,Q=B[1]-O,ct=B[2]-w,ft=H[U]-H[P],At=f?ft*ft:nt*nt*.299+Q*Q*.587+ct*ct*.114,Tt=f?(E-H[P])*ft:(D-T)*nt*.299+(V-O)*Q*.587+(Z-w)*ct*.114,mt=At?Math.max(0,Math.min(1,Tt/At*o)):0;Y<mt&&([T,O,w]=B)}}else if(s){let F=Math.max(0,Math.min(1,.5+(Y-.5)*o));T=Math.floor(D/51+1-F)*51,O=Math.floor(V/51+1-F)*51,w=Math.floor(Z/51+1-F)*51}else T=Math.round(D/51)*51,O=Math.round(V/51)*51,w=Math.round(Z/51)*51;if(n[y]=T,n[y+1]=O,n[y+2]=w,g&&b){g[z]=g[z+1]=g[z+2]=0;for(let[F,W,P]of b){let U=I+F;if(U<0||U>=t||C+W>=e)continue;let E=((C+W)%3*t+U)*3;g[E]+=(D-T)*P*o,g[E+1]+=(V-O)*P*o,g[E+2]+=(Z-w)*P*o}}}}function Mi(n=()=>document.createElement("canvas")){let t=n(),e=t.getContext("webgl",{alpha:!0,premultipliedAlpha:!1,antialias:!1,preserveDrawingBuffer:!0});if(!e)return null;let r=[],i=(f,p)=>{let c=e.createShader(f);if(r.push(c),e.shaderSource(c,p),e.compileShader(c),!e.getShaderParameter(c,e.COMPILE_STATUS))throw new Error(e.getShaderInfoLog(c)||"Finish shader failed");return c},a=e.createProgram();if(e.attachShader(a,i(e.VERTEX_SHADER,"attribute vec2 p;varying vec2 uv;void main(){uv=(p+1.)*.5;gl_Position=vec4(p,0.,1.);}")),e.attachShader(a,i(e.FRAGMENT_SHADER,`precision mediump float;varying vec2 uv;uniform sampler2D src;uniform vec2 size;uniform float t,bloom,grain,dust,scanlines,crt,prism,vignette,glitch,pixelate,blur,blurMode,angle,focus,halftone,rgbSplit,sharpen;\n float hash(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}\n vec4 sampleAt(vec2 p){if(min(min(p.x,p.y),min(1.-p.x,1.-p.y))<0.)return vec4(0.);return texture2D(src,vec2(p.x,1.-p.y));}\n void main(){vec2 q=uv,c=q-.5;q=c*(1.+dot(c,c)*crt*.25)+.5;\n if(glitch>0.)q.x+=(hash(vec2(floor(q.y*35.),floor(t*5.)))-.5)*.07*glitch*step(.82,hash(vec2(floor(q.y*35.),floor(t*5.)+3.)));\n if(pixelate>0.){vec2 grid=size/(1.+pixelate*20.);q=(floor(q*grid)+.5)/grid;}\n vec4 base=sampleAt(q);float edge=smoothstep(.12,.65,length(c));\n vec2 shift=vec2((prism*3.*edge+rgbSplit*8.)/size.x,prism*edge/size.y);\n if(prism>0.||rgbSplit>0.)base.rgb=vec3(sampleAt(q+shift).r,base.g,sampleAt(q-shift).b);\n vec2 dir=vec2(cos(angle),sin(angle))/size;float amount=blur;\n if(blurMode>1.5&&blurMode<2.5){dir=normalize(c+vec2(.0001))/size;amount*=length(c)*2.;}\n if(blurMode>2.5)amount*=smoothstep(.05,.5,abs(q.y-focus));\n vec4 blurred=base;\n if(amount>0.){blurred=base*.2;for(int i=1;i<=4;i++){float f=float(i)*amount*.35;vec2 off=dir*f;if(blurMode<.5)off=vec2(cos(float(i)*1.57),sin(float(i)*1.57))*amount/size;blurred+=sampleAt(q+off)*.1+sampleAt(q-off)*.1;}}\n vec3 light=vec3(0.);\n // Bloom: a wide golden-angle disc of soft-kneed highlights, screened on, so light spills like halation instead of ghosting glyphs.\n if(bloom>0.){float total=0.;for(int i=0;i<16;i++){float f=float(i);vec2 o=vec2(cos(f*2.39996),sin(f*2.39996))*(2.+f*1.6)/size;vec3 s=sampleAt(q+o).rgb;float w=1./(1.+f*.18);light+=s*smoothstep(.35,.9,max(s.r,max(s.g,s.b)))*w;total+=w;}light*=bloom*3.2/total;}\n vec3 col=1.-(1.-blurred.rgb)*(1.-min(light,vec3(1.)));\n if(sharpen>0.){vec2 px=1./size;vec3 near=sampleAt(q+vec2(px.x,0.)).rgb+sampleAt(q-vec2(px.x,0.)).rgb+sampleAt(q+vec2(0.,px.y)).rgb+sampleAt(q-vec2(0.,px.y)).rgb;col+=(base.rgb*4.-near)*sharpen*.5;}\ncol*=1.-scanlines*.4*(.5+.5*cos(q.y*size.y*3.14159));\n col*=1.-vignette*smoothstep(.15,.72,length(c));\n // Film grain: soft triangular noise, strongest in the midtones, quiet in deep shadow and paper-white highlights.\n float luma=dot(col,vec3(.299,.587,.114));vec2 g=floor(q*size/1.25)+floor(t*24.)*vec2(7.,13.);\n col+=(hash(g)+hash(g+31.7)-1.)*grain*.17*(.2+3.2*luma*(1.-luma));\n if(dust>0.)col+=step(1.-dust*.002,hash(floor(q*size*.25)+floor(t*2.)))*.4;\n if(halftone>0.)col*=mix(1.,smoothstep(.1,.65,length(fract(q*size/6.)-.5)),halftone);\n gl_FragColor=vec4(clamp(col,0.,1.),blurred.a);}`)),e.linkProgram(a),!e.getProgramParameter(a,e.LINK_STATUS))throw new Error("Finish link failed");e.useProgram(a);let o=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,o),e.bufferData(e.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,1,1]),e.STATIC_DRAW);let l=e.getAttribLocation(a,"p");e.enableVertexAttribArray(l),e.vertexAttribPointer(l,2,e.FLOAT,!1,0,0);let s=e.createTexture();e.bindTexture(e.TEXTURE_2D,s),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);let h=["t","bloom","grain","dust","scanlines","crt","prism","rgbSplit","sharpen","vignette","glitch","pixelate","blur","blurMode","angle","focus","halftone"],m=Object.fromEntries(h.map(f=>[f,e.getUniformLocation(a,f)])),u=e.getUniformLocation(a,"size");return{canvas:t,render(f,p,c,b=1){(t.width!==f.width||t.height!==f.height)&&(t.width=f.width,t.height=f.height,e.viewport(0,0,t.width,t.height)),e.useProgram(a),e.bindTexture(e.TEXTURE_2D,s),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f),e.uniform2f(u,t.width/b,t.height/b);for(let g of h)e.uniform1f(m[g],g==="t"?c:g==="blurMode"?["gaussian","directional","radial","progressive"].indexOf(p.blurType):g==="angle"?p.angle*Math.PI/180:p[g]??0);return e.drawArrays(e.TRIANGLE_STRIP,0,4),t},destroy(){e.deleteTexture(s),e.deleteBuffer(o),e.deleteProgram(a),r.forEach(f=>e.deleteShader(f)),t.width=t.height=1,e.getExtension("WEBGL_lose_context")?.loseContext()}}}function Jt(n,t,e){let r=Math.min(n*Math.max(1,e),(1-n)*Math.max(1,e),t*Math.max(1,1/e),(1-t)*Math.max(1,1/e)),i=Math.max(0,Math.min(1,(r-.035)/.105));return i*i*i*(i*(i*6-15)+10)}var mr=class{constructor(t,e){this.edgeSafe=!1;this.rings=new Float64Array(40);this.slot=0;this.clock=0;this.lastRing=-1;this.previous=null;this.alive=!1;this.width=t,this.height=e,this.pixels=new Uint8Array(t*e*4),this.values=new Float32Array(t*e),this.clear()}get active(){return this.alive}clear(){this.rings.fill(0),this.values.fill(0),this.pixels.fill(0);for(let t=0;t<this.pixels.length;t+=4)this.pixels[t]=128;this.previous=null,this.alive=!1,this.slot=0,this.lastRing=-1,this.clock=0}leave(){this.previous=null}move(t,e,r,i){if(!Number.isFinite(t+e+r))return;t=Math.max(0,Math.min(1,t)),e=Math.max(0,Math.min(1,e));let a=Number.isFinite(i)?i/1e3:this.clock,o=this.previous;if(this.previous={x:t,y:e,time:a},!o)return;let l=this.width/this.height,s=Math.hypot((t-o.x)*Math.max(1,l),(e-o.y)*Math.max(1,1/l));if(s<1e-4||this.clock-this.lastRing<1/24)return;let h=s/Math.max(1/240,Math.min(.1,a-o.time||1/60)),m=this.slot*5;this.slot=(this.slot+1)%8,this.rings[m]=t,this.rings[m+1]=e,this.rings[m+2]=0,this.rings[m+3]=Math.min(.9,.26+h*.2),this.rings[m+4]=.035+Math.max(.1,Math.min(1,r))*.13,this.alive=!0,this.lastRing=this.clock}step(t){if(!Number.isFinite(t)||t<=0)return;let e=Math.min(.05,t);if(this.clock+=e,!this.alive)return;this.values.fill(0),this.alive=!1;let r=this.width/this.height,i=Math.max(1,r),a=Math.max(1,1/r);for(let o=0;o<this.rings.length;o+=5){if(!this.rings[o+3])continue;let l=this.rings[o+2]+=e;if(l>2.8){this.rings[o+3]=0;continue}this.alive=!0;let s=this.rings[o+4],h=l*.17,m=this.rings[o+3]*(1-Math.exp(-l*20))*Math.exp(-l*2.5),u=h+s*1.8,f=this.rings[o],p=this.rings[o+1],c=Math.max(0,Math.floor((f-u/i)*(this.width-1))),b=Math.min(this.width-1,Math.ceil((f+u/i)*(this.width-1))),g=Math.max(0,Math.floor((p-u/a)*(this.height-1))),M=Math.min(this.height-1,Math.ceil((p+u/a)*(this.height-1)));for(let v=g;v<=M;v++)for(let S=c;S<=b;S++){let A=(Math.hypot((S/(this.width-1)-f)*i,(v/(this.height-1)-p)*a)-h)/s;Math.abs(A)>1.8||(this.values[v*this.width+S]+=m*Math.cos(A*Math.PI*2)*Math.exp(-A*A*2.5))}}for(let o=0;o<this.height;o++)for(let l=0;l<this.width;l++){let s=o*this.width+l,h=this.values[s]=Math.max(-1,Math.min(1,this.values[s]))*(this.edgeSafe?Jt(l/(this.width-1),o/(this.height-1),r):1),m=Math.round(h*32767+32768);this.pixels[s*4]=m>>>8,this.pixels[s*4+1]=m&255}}sample(t,e,r){let i=Math.max(0,Math.min(this.width-1.001,t*(this.width-1))),a=Math.max(0,Math.min(this.height-1.001,e*(this.height-1))),o=Math.floor(i),l=Math.floor(a),s=i-o,h=a-l,m=l*this.width+o,u=m+this.width;r[0]=r[1]=0,r[2]=((this.values[m]*(1-s)+this.values[m+1]*s)*(1-h)+(this.values[u]*(1-s)+this.values[u+1]*s)*h)*3}};var Se=n=>["dissolve","silk","vortex","magnetic","scatter","etch","elastic","lens","smudge"].includes(n),yi=n=>n==="elastic"||n==="scatter",vi={elastic:[150,4.2],scatter:[90,3.6]},fr=class{constructor(t,e){this.edgeSafe=!1;this.previous=null;this.peak=0;this.scatterDirections=null;this.springX=null;this.springY=null;this.mode="dissolve";this.width=t,this.height=e;let r=t*e;this.pixels=new Uint8Array(r*4),this.ink=new Float32Array(r),this.targetX=new Float32Array(r),this.targetY=new Float32Array(r),this.offsetX=new Float32Array(r),this.offsetY=new Float32Array(r),this.edge=new Float32Array(r);for(let i=0;i<e;i++)for(let a=0;a<t;a++)this.edge[i*t+a]=Jt(a/(t-1),i/(e-1),t/e);this.clear()}get active(){return this.peak>2e-4}setMode(t){if(yi(t)&&!this.springX&&(this.springX=new Float32Array(this.ink.length),this.springY=new Float32Array(this.ink.length)),t==="scatter"&&!this.scatterDirections){let e=this.scatterDirections=new Float64Array(this.width*this.height*2),r=(i,a)=>{let o=Math.sin(i*127.1+a*311.7)*43758.5453;return o-Math.floor(o)};for(let i=0;i<this.height;i++)for(let a=0;a<this.width;a++){let o=a*.09,l=i*.09,s=Math.floor(o),h=Math.floor(l),m=o-s,u=l-h,f=m*m*(3-2*m),p=u*u*(3-2*u),b=((r(s,h)*(1-f)+r(s+1,h)*f)*(1-p)+(r(s,h+1)*(1-f)+r(s+1,h+1)*f)*p)*Math.PI*4,g=(i*this.width+a)*2;e[g]=Math.cos(b)*.7,e[g+1]=Math.sin(b)*.7}}t!==this.mode&&(this.mode=t,this.clear())}clear(){for(let t of[this.ink,this.targetX,this.targetY,this.offsetX,this.offsetY,this.pixels])t.fill(0);if(this.previous=null,this.peak=0,this.springX?.fill(0),this.springY?.fill(0),this.mode!=="dissolve")for(let t=0;t<this.pixels.length;t+=4)this.pixels[t]=this.pixels[t+2]=128}leave(){this.previous=null}move(t,e,r){if(!Number.isFinite(t+e+r))return;t=Math.max(0,Math.min(1,t)),e=Math.max(0,Math.min(1,e));let i=this.previous;this.previous={x:t,y:e};let a=this.width,o=this.height,l=Math.max(1,a/o),s=Math.max(1,o/a),h=i?(t-i.x)*l:0,m=i?(e-i.y)*s:0,u=Math.hypot(h,m);if(!i&&this.mode!=="dissolve"&&this.mode!=="etch"&&this.mode!=="lens"||i&&u<1e-4)return;let f=.035+Math.max(.1,Math.min(1,r))*.11,p=Math.min(128,Math.max(1,Math.ceil(u/(f*.45)))),c=u?h/u:1,b=u?m/u:0,g=!i&&this.mode==="lens"?.32:Math.min(1,u/(f*p)*2.2);for(let M=0;M<p;M++){let v=(M+.5)/p,S=i?i.x+(t-i.x)*v:t,k=i?i.y+(e-i.y)*v:e,A=Math.max(0,Math.floor((S-f*2.5/l)*(a-1))),H=Math.min(a-1,Math.ceil((S+f*2.5/l)*(a-1))),N=Math.max(0,Math.floor((k-f*2.5/s)*(o-1))),C=Math.min(o-1,Math.ceil((k+f*2.5/s)*(o-1)));for(let I=N;I<=C;I++)for(let y=A;y<=H;y++){let z=(y/(a-1)-S)*l/f,q=(I/(o-1)-k)*s/f,Y=Math.exp(-(z*z+q*q)*1.5),x=I*a+y;if(this.mode==="dissolve"||this.mode==="etch")this.ink[x]=Math.max(this.ink[x],Y);else if(this.mode==="elastic")this.springX[x]=Math.max(-24,Math.min(24,this.springX[x]+c*Y*g*12)),this.springY[x]=Math.max(-24,Math.min(24,this.springY[x]+b*Y*g*12));else if(this.mode==="scatter"){let D=this.scatterDirections;this.springX[x]=Math.max(-24,Math.min(24,this.springX[x]+(z*.6+D[x*2])*Y*g*7)),this.springY[x]=Math.max(-24,Math.min(24,this.springY[x]+(q*.6+D[x*2+1])*Y*g*7))}else if(this.mode==="lens")this.targetX[x]=Math.max(-.65,Math.min(.65,this.targetX[x]+z*Y*g*1.6)),this.targetY[x]=Math.max(-.65,Math.min(.65,this.targetY[x]+q*Y*g*1.6));else if(this.mode==="smudge")this.targetX[x]=Math.max(-1,Math.min(1,this.targetX[x]+c*Y*g*1.3)),this.targetY[x]=Math.max(-1,Math.min(1,this.targetY[x]+b*Y*g*1.3));else{let D=(-z*b+q*c)*Y*2.8,V=this.mode==="magnetic"?-z*Y*2.5:this.mode==="silk"?c*D:-q*Y*2.5,Z=this.mode==="magnetic"?-q*Y*2.5:this.mode==="silk"?b*D:z*Y*2.5;this.targetX[x]=Math.max(-1,Math.min(1,this.targetX[x]+V*g)),this.targetY[x]=Math.max(-1,Math.min(1,this.targetY[x]+Z*g))}}}this.peak=1}step(t){if(!this.active||!Number.isFinite(t))return;let e=Math.max(0,Math.min(.05,t)),r=this.mode==="dissolve"?2.15:this.mode==="smudge"?2.4:3.2,i=this.mode==="lens"?16:22,a=Math.exp(-r*e),o=1-Math.exp(-i*e),l=0,[s,h]=this.mode==="scatter"?vi.scatter:vi.elastic,m=Math.sqrt(s-h*h),u=Math.exp(-h*e),f=Math.cos(m*e),p=Math.sin(m*e)/m;for(let c=0;c<this.ink.length;c++)if(this.mode==="etch")this.ink[c]*=a,l=Math.max(l,this.ink[c]);else if(this.mode==="dissolve"){this.ink[c]*=a,l=Math.max(l,this.ink[c]);let b=Math.round(this.ink[c]*65535);this.pixels[c*4]=b>>>8,this.pixels[c*4+1]=b&255}else{if(yi(this.mode)){let M=this.offsetX[c],v=this.offsetY[c],S=this.springX[c],k=this.springY[c];this.offsetX[c]=Math.max(-1,Math.min(1,u*(M*f+(S+h*M)*p))),this.offsetY[c]=Math.max(-1,Math.min(1,u*(v*f+(k+h*v)*p))),this.springX[c]=u*(S*f-(h*S+s*M)*p),this.springY[c]=u*(k*f-(h*k+s*v)*p),l=Math.max(l,Math.abs(this.springX[c])*.05,Math.abs(this.springY[c])*.05)}else if(this.mode==="lens"||this.mode==="smudge"){let M=1-o,v=i/(i-r)*(a-M);this.offsetX[c]=this.offsetX[c]*M+this.targetX[c]*v,this.offsetY[c]=this.offsetY[c]*M+this.targetY[c]*v,this.targetX[c]*=a,this.targetY[c]*=a}else this.targetX[c]*=a,this.targetY[c]*=a,this.offsetX[c]+=(this.targetX[c]-this.offsetX[c])*o,this.offsetY[c]+=(this.targetY[c]-this.offsetY[c])*o;l=Math.max(l,Math.abs(this.offsetX[c]),Math.abs(this.offsetY[c]),Math.abs(this.targetX[c]),Math.abs(this.targetY[c]));let b=Math.round(this.offsetX[c]*(this.edgeSafe?this.edge[c]:1)*32767+32768),g=Math.round(this.offsetY[c]*(this.edgeSafe?this.edge[c]:1)*32767+32768);this.pixels[c*4]=b>>>8,this.pixels[c*4+1]=b&255,this.pixels[c*4+2]=g>>>8,this.pixels[c*4+3]=g&255}if(this.mode==="etch")for(let c=0;c<this.height;c++)for(let b=0;b<this.width;b++){let g=c*this.width+b,M=(this.ink[c*this.width+Math.max(0,b-1)]-this.ink[c*this.width+Math.min(this.width-1,b+1)]+this.ink[Math.max(0,c-1)*this.width+b]-this.ink[Math.min(this.height-1,c+1)*this.width+b])*3;this.offsetX[g]=Math.max(-1,Math.min(1,M))*(this.edgeSafe?this.edge[g]:1);let v=Math.round(this.offsetX[g]*32767+32768);this.pixels[g*4]=v>>>8,this.pixels[g*4+1]=v&255}this.peak=l,this.active||this.clear()}sample(t,e,r){let i=Math.max(0,Math.min(this.width-1.001,t*(this.width-1))),a=Math.max(0,Math.min(this.height-1.001,e*(this.height-1))),o=Math.floor(i),l=Math.floor(a),s=i-o,h=a-l,m=l*this.width+o,u=m+this.width,f=p=>(p[m]*(1-s)+p[m+1]*s)*(1-h)+(p[u]*(1-s)+p[u+1]*s)*h;if(this.mode==="etch"){r[0]=r[1]=0,r[2]=f(this.offsetX)*3;return}r[0]=f(this.offsetX)*(this.edgeSafe?Jt(t,e,this.width/this.height):1)*.08,r[1]=f(this.offsetY)*(this.edgeSafe?Jt(t,e,this.width/this.height):1)*.08,r[2]=this.mode==="dissolve"?-f(this.ink)*6:0}};var dr=class{constructor(t,e){this.rings=[];this.previous=null;this.elapsed=1;this.echoPeak=0;this.width=t,this.height=e,this.pixels=new Uint8Array(t*e*4),this.echo=new Float32Array(t*e)}get active(){return this.rings.length>0||this.echoPeak>2e-4}clear(){this.rings=[],this.previous=null,this.elapsed=1,this.pixels.fill(0),this.echo.fill(0),this.echoPeak=0}leave(){this.previous=null}move(t,e,r){let i=Math.max(1,this.width/this.height),a=Math.max(1,this.height/this.width);this.previous&&(Math.hypot((t-this.previous.x)*i,(e-this.previous.y)*a)<.065||this.elapsed<.3)||this.rings.length!==4&&(this.previous={x:t,y:e},this.elapsed=0,this.rings.push({x:t,y:e,age:0,radius:r}))}ringSample(t,e){let r=Math.max(1,this.width/this.height),i=Math.max(1,this.height/this.width),a=0;for(let o of this.rings){let l=.015+o.age*(.15+o.radius*.22),s=.009+o.radius*.014,h=(Math.hypot((t-o.x)*r,(e-o.y)*i)-l)/s,m=Math.sin(Math.min(1,o.age/.07)*Math.PI/2)*Math.max(0,1-o.age/1.35)**2;a=Math.max(a,Math.exp(-h*h)*m)}return a}sample(t,e){let r=Math.max(0,Math.min(this.width-1,Math.round(t*(this.width-1)))),i=Math.max(0,Math.min(this.height-1,Math.round(e*(this.height-1))));return Math.max(this.ringSample(t,e),this.echo[i*this.width+r])}step(t){if(!Number.isFinite(t))return;let e=Math.max(0,Math.min(.05,t));this.elapsed+=e;for(let a of this.rings)a.age+=e;if(this.rings=this.rings.filter(a=>a.age<1.35),!this.active){this.pixels.fill(0);return}let r=Math.exp(-5.5*e),i=0;for(let a=0;a<this.height;a++)for(let o=0;o<this.width;o++){let l=a*this.width+o;this.echo[l]=Math.max(this.ringSample(o/(this.width-1),a/(this.height-1)),this.echo[l]*r),i=Math.max(i,this.echo[l]);let s=Math.round(this.echo[l]*65535),h=l*4;this.pixels[h]=s>>>8,this.pixels[h+1]=s&255}this.echoPeak=i,this.active||(this.echo.fill(0),this.pixels.fill(0))}};var pr=class{constructor(t,e){this.previous=null;this.peak=0;this.width=t,this.height=e;let r=t*e;this.pixels=new Uint8Array(r*4),this.signal=new Float32Array(r),this.offsetX=new Float32Array(r),this.offsetY=new Float32Array(r),this.driftX=new Float32Array(r),this.driftY=new Float32Array(r),this.u=new Float32Array(r),this.v=new Float32Array(r),this.ink=new Float32Array(r),this.a=new Float32Array(r),this.b=new Float32Array(r),this.c=new Float32Array(r),this.pressure=new Float32Array(r),this.pressureNext=new Float32Array(r),this.divergence=new Float32Array(r),this.curl=new Float32Array(r)}get active(){return this.peak>2e-4}clear(){for(let t of[this.u,this.v,this.ink,this.a,this.b,this.c,this.pressure,this.pressureNext,this.divergence,this.curl,this.signal,this.pixels,this.offsetX,this.offsetY,this.driftX,this.driftY])t.fill(0);this.previous=null,this.peak=0}leave(){this.previous=null}move(t,e,r,i=performance.now()){if(!Number.isFinite(t+e+r+i))return;t=Math.max(0,Math.min(1,t)),e=Math.max(0,Math.min(1,e)),r=Math.max(.1,Math.min(1,r));let a=this.previous;if(this.previous={x:t,y:e,time:i},!a)return;let o=(t-a.x)*(this.width-1),l=(e-a.y)*(this.height-1),s=Math.hypot(o,l);if(s<.001)return;let h=Math.min(this.width,this.height),m=i>a.time?Math.max(1/240,(i-a.time)/1e3):1/60,u=Math.min(12,s/h/m),f=1-Math.exp(-u/2.2),p=h*(.022+r*.075)*(.65+f*.95),c=Math.min(128,Math.max(1,Math.ceil(s/(p*.4)))),b=s/p*(.32+f*.22)/c,g=o/s,M=l/s,v=-M,S=g,k=s*(2+f*18)/c;for(let A=0;A<c;A++){let H=(A+.5)/c,N=(a.x+(t-a.x)*H)*(this.width-1),C=(a.y+(e-a.y)*H)*(this.height-1),I=Math.max(1,Math.floor(N-p*3)),y=Math.min(this.width-2,Math.ceil(N+p*3)),z=Math.max(1,Math.floor(C-p*3)),q=Math.min(this.height-2,Math.ceil(C+p*3));for(let Y=z;Y<=q;Y++)for(let x=I;x<=y;x++){let D=((x-N)*g+(Y-C)*M)/p,V=((x-N)*v+(Y-C)*S)/p,Z=Math.exp(-D*D*.65-V*V*1.7),T=Y*this.width+x;this.ink[T]=1-(1-this.ink[T])*Math.exp(-Z*b);let O=1-V*V*.55,w=D*V*.7;this.u[T]=Math.max(-80,Math.min(80,this.u[T]+(g*O+v*w)*Z*k)),this.v[T]=Math.max(-80,Math.min(80,this.v[T]+(M*O+S*w)*Z*k))}}this.peak=1}read(t,e,r){e=Math.max(.5,Math.min(this.width-1.5,e)),r=Math.max(.5,Math.min(this.height-1.5,r));let i=e|0,a=r|0,o=e-i,l=r-a,s=a*this.width+i;return(t[s]*(1-o)+t[s+1]*o)*(1-l)+(t[s+this.width]*(1-o)+t[s+this.width+1]*o)*l}sample(t,e){return this.read(this.signal,t*(this.width-1),e*(this.height-1))}displacement(t,e,r){r[0]=this.read(this.offsetX,t*(this.width-1),e*(this.height-1)),r[1]=this.read(this.offsetY,t*(this.width-1),e*(this.height-1))}step(t){if(!this.active||!Number.isFinite(t))return;let e=Math.max(0,Math.min(.05,t)),r=this.width,i=this.height;for(;e>1e-7;){let a=Math.min(.016666666666666666,e);e-=a;let o=Math.exp(-1.9*a),l=Math.exp(-3.2*a);for(let h=1;h<i-1;h++)for(let m=1;m<r-1;m++){let u=h*r+m,f=Math.max(.5,Math.min(r-1.5,m-this.u[u]*a)),p=Math.max(.5,Math.min(i-1.5,h-this.v[u]*a)),c=f|0,b=p|0,g=f-c,M=p-b,v=b*r+c,S=(1-g)*(1-M),k=g*(1-M),A=(1-g)*M,H=g*M;this.a[u]=(this.u[v]*S+this.u[v+1]*k+this.u[v+r]*A+this.u[v+r+1]*H)*o,this.b[u]=(this.v[v]*S+this.v[v+1]*k+this.v[v+r]*A+this.v[v+r+1]*H)*o,this.c[u]=(this.ink[v]*S+this.ink[v+1]*k+this.ink[v+r]*A+this.ink[v+r+1]*H)*l}[this.u,this.a]=[this.a,this.u],[this.v,this.b]=[this.b,this.v],[this.ink,this.c]=[this.c,this.ink];for(let h=1;h<i-1;h++)for(let m=1;m<r-1;m++){let u=h*r+m;this.curl[u]=(this.v[u+1]-this.v[u-1]-this.u[u+r]+this.u[u-r])*.5}for(let h=1;h<i-1;h++)for(let m=1;m<r-1;m++){let u=h*r+m,f=Math.abs(this.curl[u+1])-Math.abs(this.curl[u-1]),p=Math.abs(this.curl[u+r])-Math.abs(this.curl[u-r]),c=Math.hypot(f,p)+1e-4,b=this.curl[u]*a*10,g=Math.hypot(this.u[u],this.v[u]);this.u[u]+=p/c*b,this.v[u]-=f/c*b;let M=Math.min(1,g/(Math.hypot(this.u[u],this.v[u])+1e-6));this.u[u]*=M,this.v[u]*=M,this.divergence[u]=-.5*(this.u[u+1]-this.u[u-1]+this.v[u+r]-this.v[u-r])}this.pressure.fill(0);for(let h=0;h<4;h++){for(let m=1;m<i-1;m++)for(let u=1;u<r-1;u++){let f=m*r+u;this.pressureNext[f]=(this.divergence[f]+this.pressure[f-1]+this.pressure[f+1]+this.pressure[f-r]+this.pressure[f+r])*.25}[this.pressure,this.pressureNext]=[this.pressureNext,this.pressure]}let s=0;for(let h=1;h<i-1;h++)for(let m=1;m<r-1;m++){let u=h*r+m;this.u[u]=Math.max(-80,Math.min(80,this.u[u]-(this.pressure[u+1]-this.pressure[u-1])*.5)),this.v[u]=Math.max(-80,Math.min(80,this.v[u]-(this.pressure[u+r]-this.pressure[u-r])*.5)),this.driftX[u]+=(this.u[u]*3.6-58*this.offsetX[u]-12*this.driftX[u])*a,this.driftY[u]+=(this.v[u]*3.6-58*this.offsetY[u]-12*this.driftY[u])*a,this.offsetX[u]=Math.max(-2,Math.min(2,this.offsetX[u]+this.driftX[u]*a)),this.offsetY[u]=Math.max(-2,Math.min(2,this.offsetY[u]+this.driftY[u]*a)),this.signal[u]=1-Math.exp(-Math.hypot(this.u[u],this.v[u])*.06-this.ink[u]*.16),s=Math.max(s,this.signal[u])}this.peak=s}if(!this.active){this.clear();return}for(let a=0;a<this.ink.length;a++){let o=Math.round(Math.min(1,this.signal[a])*65535);this.pixels[a*4]=o>>>8,this.pixels[a*4+1]=o&255,this.pixels[a*4+2]=Math.round(128+this.offsetX[a]*63.5),this.pixels[a*4+3]=Math.round(128+this.offsetY[a]*63.5)}}};function xi(n,t){let e=Math.max(0,Math.min(1,t/.38)),r=e*e*(3-2*e);return n+(1-2*n)*r}var en=["loupe","repel","tilt","reveal","haze","bleed"],$t=n=>en.includes(n),ke=class{constructor(){this.value=0;this.velocity=0}step(t,e,r,i){let a=2*Math.sqrt(r)*i;for(let o=e;o>1e-6;o-=1/480){let l=Math.min(.0020833333333333333,o);this.velocity+=((t-this.value)*r-this.velocity*a)*l,this.value+=this.velocity*l}}resting(t){return Math.abs(this.value-t)<.0015&&Math.abs(this.velocity)<.01}set(t){this.value=t,this.velocity=0}},Si=n=>n*n*(3-2*n),Ge=(n,t)=>{let e=Math.sin(n*127.1+t*311.7)*43758.5453;return e-Math.floor(e)};function gr(n,t){let e=Math.floor(n),r=Math.floor(t),i=Si(n-e),a=Si(t-r),o=Ge(e,r),l=Ge(e+1,r),s=Ge(e,r+1),h=Ge(e+1,r+1);return(o+(l-o)*i)*(1-a)+(s+(h-s)*i)*a}var br=class{constructor(t,e){this.edgeSafe=!1;this.settle=1;this.focus=[.5,.5,0,.2];this.guide=null;this.mode="loupe";this.radius=.35;this.x=new ke;this.y=new ke;this.tx=new ke;this.ty=new ke;this.presence=new ke;this.target=null;this.speed=0;this.clock=0;this.inkPeak=0;this.ink=null;this.next=null;this.fiber=null;this.sampled=[0,0,0];this.width=t,this.height=e,this.pixels=new Uint8Array(t*e*4),this.sx=Math.max(1,t/e),this.sy=Math.max(1,e/t),this.clear()}setMode(t){if(t!==this.mode&&(this.mode=t,this.clear(),t==="bleed"&&!this.ink)){let e=this.width*this.height;this.ink=new Float32Array(e),this.next=new Float32Array(e),this.fiber=new Float32Array(e);for(let r=0;r<this.height;r++)for(let i=0;i<this.width;i++)this.fiber[r*this.width+i]=.35+.5*gr(i*.09,r*.045)+.15*Ge(i,r)}}setRadius(t){this.radius=Math.max(.1,Math.min(1,t))}get reach(){return(.05+this.radius*.25)*(this.mode==="loupe"?1-this.speed*.14:1)}get engaged(){return this.presence.value>.002||this.inkPeak>.002||Math.abs(this.tx.value)+Math.abs(this.ty.value)>4e-4}get active(){let t=this.target?1:0;return!this.presence.resting(t)||!!this.target&&(!this.x.resting(this.target.x)||!this.y.resting(this.target.y))||!this.tx.resting(this.tiltGoal(0))||!this.ty.resting(this.tiltGoal(1))||this.speed>.01||this.mode==="haze"&&this.presence.value>.002||this.inkPeak>.002}tiltGoal(t){return this.target&&this.mode==="tilt"?((t?this.target.y:this.target.x)-.5)*2:0}clear(){for(let t of[this.x,this.y,this.tx,this.ty,this.presence])t.set(0);this.x.set(.5),this.y.set(.5),this.target=null,this.speed=0,this.inkPeak=0,this.ink?.fill(0),this.next?.fill(0),this.encode()}move(t,e,r){if(!Number.isFinite(t+e))return;t=Math.max(0,Math.min(1,t)),e=Math.max(0,Math.min(1,e));let i=Number.isFinite(r)?r/1e3:this.clock,a=this.target;if(!a&&this.presence.value<.05&&(this.x.set(t),this.y.set(e)),a){let o=Math.hypot((t-a.x)*this.sx,(e-a.y)*this.sy),l=o/Math.max(1/240,Math.min(.1,i-a.time||1/60));this.speed=Math.max(this.speed,Math.min(1,l/1.6)),this.mode==="bleed"&&this.deposit(a.x,a.y,t,e,Math.min(1,o*9))}else this.mode==="bleed"&&this.deposit(t,e,t,e,.5);this.target={x:t,y:e,time:i}}leave(){this.target=null}deposit(t,e,r,i,a){let o=this.ink,l=this.width,s=this.height,h=this.reach*.55,m=Math.hypot((r-t)*this.sx,(i-e)*this.sy),u=Math.min(48,Math.max(1,Math.ceil(m/(h*.5))));for(let f=0;f<u;f++){let p=(f+.5)/u,c=t+(r-t)*p,b=e+(i-e)*p,g=Math.max(0,Math.floor((c-h*2/this.sx)*(l-1))),M=Math.min(l-1,Math.ceil((c+h*2/this.sx)*(l-1))),v=Math.max(0,Math.floor((b-h*2/this.sy)*(s-1))),S=Math.min(s-1,Math.ceil((b+h*2/this.sy)*(s-1)));for(let k=v;k<=S;k++)for(let A=g;A<=M;A++){let H=(A/(l-1)-c)*this.sx/h,N=(k/(s-1)-b)*this.sy/h,C=k*l+A;o[C]=Math.min(1.4,o[C]+Math.exp(-(H*H+N*N)*1.8)*a/u*1.6)}}this.inkPeak=Math.max(this.inkPeak,.01)}step(t){if(!Number.isFinite(t)||t<=0)return;let e=Math.min(.05,t),r=e*this.settle;this.clock+=e;let i=this.target,a=this.mode;if(i?this.presence.step(1,e,190,1):this.presence.step(0,r,a==="repel"?120:70,a==="repel"?.42:1),i){let o=a==="tilt"?60:a==="haze"?90:240,l=a==="loupe"||a==="repel"?.72:.9;this.x.step(i.x,e,o,l),this.y.step(i.y,e,o,l)}this.tx.step(this.tiltGoal(0),i?e:r,45,.78),this.ty.step(this.tiltGoal(1),i?e:r,45,.78),this.speed*=Math.exp(-e*7),a==="bleed"&&this.spread(e,r,!!i),!this.engaged&&!this.active&&(this.presence.set(0),this.tx.set(0),this.ty.set(0)),this.focus[0]=this.x.value,this.focus[1]=this.y.value,this.focus[2]=Math.max(0,Math.min(1,this.presence.value)),this.focus[3]=this.reach,this.encode()}spread(t,e,r){let i=this.ink,a=this.next,o=this.fiber,l=this.width,s=this.height;r&&this.target&&this.deposit(this.x.value,this.y.value,this.x.value,this.y.value,t*.9);let h=Math.max(1,Math.ceil(t/(1/240))),m=t/h,u=26*(.4+this.radius),f=(r?.02:.1)*e/t,p=Math.exp(-(r?.15:.9)*e/h),c=0;for(let b=0;b<h;b++){c=0;for(let g=1;g<s-1;g++)for(let M=1;M<l-1;M++){let v=g*l+M,S=i[v],k=o[v],A=Math.min(k,o[v-1])*(i[v-1]-S)+Math.min(k,o[v+1])*(i[v+1]-S)+Math.min(k,o[v-l])*(i[v-l]-S)+Math.min(k,o[v+l])*(i[v+l]-S),H=Math.max(0,(S+A*Math.min(.24,u*m))*p-f*m);a[v]=H,H>c&&(c=H)}i.set(a)}this.inkPeak=c}sample(t,e,r){r[0]=r[1]=r[2]=0;let i=this.presence.value,a=this.mode;if(a==="bleed"){if(this.inkPeak<=.002)return;let p=this.width,c=this.height,b=this.ink,g=Math.max(0,Math.min(p-1.001,t*(p-1))),M=Math.max(0,Math.min(c-1.001,e*(c-1))),v=Math.floor(g),S=Math.floor(M),k=g-v,A=M-S,H=S*p+v,N=H+p,C=(b[H]*(1-k)+b[H+1]*k)*(1-A)+(b[N]*(1-k)+b[N+1]*k)*A;r[2]=1-Math.exp(-C*2.4);return}if(a==="tilt"){let c=.2+.8*(this.guide?hi(this.guide,"depth",t,e):.6),b=this.edgeSafe?Jt(t,e,this.sx/this.sy):1;r[0]=this.tx.value*.024*c*b/this.sx,r[1]=this.ty.value*.024*c*b/this.sy;return}if(i<=.001)return;let o=this.reach,l=(t-this.x.value)*this.sx,s=(e-this.y.value)*this.sy,h=(l*l+s*s)/(o*o);if(a==="reveal"){r[2]=Math.exp(-h*2.4)*i;return}if(h>9)return;let m=this.edgeSafe?Jt(t,e,this.sx/this.sy):1,u=0,f=0;if(a==="loupe"){let p=Math.exp(-h*h)*i*.5;u=l*p,f=s*p;let c=Math.sqrt(h)-1;r[2]=Math.exp(-c*c/.018)*i*.55}else if(a==="repel"){let p=Math.sqrt(h),c=o*.5*Math.exp(-h/1.7)*i,b=Math.max(1e-6,Math.sqrt(l*l+s*s));u=l/b*Math.min(c,b+o*.5*i),f=s/b*Math.min(c,b+o*.5*i);let g=Math.max(0,Math.min(1,(p-.3)/.32));r[2]=-(1-g*g*(3-2*g))*i}else if(a==="haze"){let p=s/o+.45,c=Math.exp(-(l*l/(o*o))-p*p/2.6)*i*(.35+.65*Math.min(1,this.speed*1.4+.25));if(c<.002)return;let b=this.clock,g=t*this.sx*9,M=e*this.sy*9+b*2.3,v=gr(g,M)-.5,S=gr(g+17.3,M*1.3+b*.7)-.5;u=v*.06*c,f=S*.026*c,r[2]=(gr(g*1.7+5,M*1.7)-.5)*.35*c}r[0]=u*m/this.sx,r[1]=f*m/this.sy}encode(){let t=this.width,e=this.height,r=this.pixels,i=this.sampled,a=this.engaged;for(let o=0;o<e;o++)for(let l=0;l<t;l++){let s=(o*t+l)*4;if(a?this.sample(l/(t-1),o/(e-1),i):i[0]=i[1]=i[2]=0,this.mode==="bleed"){let h=Math.round(Math.max(-1,Math.min(1,i[2]))*32767+32768);r[s]=h>>>8,r[s+1]=h&255,r[s+2]=128,r[s+3]=0}else{this.mode==="repel"&&(i[0]*=.3,i[1]*=.3);let h=Math.round(Math.max(-1,Math.min(1,i[0]/.16))*32767+32768),m=Math.round(Math.max(-1,Math.min(1,i[1]/.16))*32767+32768);r[s]=h>>>8,r[s+1]=h&255,r[s+2]=m>>>8,r[s+3]=m&255}}}};var rn=.2,nn=.6,an=3,on=7,ki=(n,t)=>n==="water"?30*t/.55:n==="silk"?28*t:n==="vortex"?38*t:["magnetic","scatter","elastic","lens","smudge"].includes(n)?32*t:["loupe","repel","tilt","haze"].includes(n)?.16*t/.55:0,sn=(n=.5)=>Math.pow(2,(.5-(Number.isFinite(n)?Math.max(0,Math.min(1,n)):.5))*2.4);function Wr(n,t,e,r=!1){if(!e)return t;let i=a=>Math.max(0,Math.min(1,a));switch(n){case"trail":case"contour":return xi(t,e);case"etch":case"ripple":return i(t+e*.35);case"dissolve":{let a=Math.max(0,1+e);return r?1-(1-t)*a:t*a}case"bleed":return i(t+e*(r?-.6:.6));case"loupe":return i(t+e*.3);case"haze":return i(t+e*.5);default:return t}}var Ai=n=>["trail","contour","etch","ripple","bleed","haze"].includes(n),Xe=class{constructor(t=1){this.ripple=null;this.cursor=null;this.settle=1;this.mode="water";this.amount=.55;this.radius=.2;this.lensX=.5;this.lensY=.5;this.lensStrength=0;this.previous=null;this.energy=0;this.pending=!1;this.remainder=0;this.quiet=0;this.guide=null;t=Math.max(.25,Math.min(4,t)),this.columns=Math.round(t>=1?128:128*t),this.rows=Math.round(t>=1?128/t:128),this.xScale=Math.max(1,t),this.yScale=Math.max(1,1/t),this.heights=new Float32Array(this.columns*this.rows),this.velocity=new Float32Array(this.heights.length),this.next=new Float32Array(this.heights.length),this.normals=new Float32Array(this.heights.length*2),this.edgeMask=new Float32Array(this.heights.length);for(let e=0;e<this.rows;e++)for(let r=0;r<this.columns;r++)this.edgeMask[e*this.columns+r]=Jt(r/(this.columns-1),e/(this.rows-1),t);this.refraction={width:this.columns,height:this.rows,pixels:new Uint8Array(this.heights.length*4),strength:30,mode:"water",focus:[.5,.5,0,.2]},this.waterPixels=this.refraction.pixels,this.trail=new pr(this.columns,this.rows),this.contour=new dr(this.columns,this.rows),this.afterimage=new fr(this.columns,this.rows),this.clear()}get invertsDensity(){return this.mode==="trail"}get densityTrail(){return["trail","contour","dissolve","etch","ripple","bleed"].includes(this.mode)}get hasRefraction(){return this.active||this.lensStrength>15e-5}get effect(){return this.mode}get engaged(){return $t(this.mode)?this.cursor.engaged:this.active}get spotlight(){return this.mode==="reveal"&&this.cursor?this.cursor.focus:null}get signature(){return $t(this.mode)&&this.cursor.engaged?this.cursor.focus.map(t=>t.toFixed(4)).join(","):""}setGuide(t){this.cursor&&(this.cursor.guide=t),this.guide=t}get active(){return $t(this.mode)?this.cursor.active:this.mode==="ripple"?this.ripple?.active??!1:Se(this.mode)?this.afterimage.active:this.mode==="contour"?this.contour.active:this.mode==="trail"?this.trail.active:this.pending||this.energy>15e-5}setMode(t){let e=t==="light"||t==="scan"?t:hr(t)??"none";e!==this.mode&&(this.clear(),this.mode=e,this.refraction.mode=e,Se(e)&&this.afterimage.setMode(e),e==="ripple"&&!this.ripple&&(this.ripple=new mr(this.columns,this.rows)),$t(e)&&(this.cursor??(this.cursor=new br(this.columns,this.rows)),this.cursor.guide=this.guide,this.cursor.setMode(e)),this.refraction.pixels=$t(e)?this.cursor.pixels:e==="ripple"?this.ripple.pixels:e==="trail"?this.trail.pixels:e==="contour"?this.contour.pixels:Se(e)?this.afterimage.pixels:this.waterPixels,this.refraction.strength=ki(e,this.amount),this.refraction.relative=$t(e))}configure(t,e=.55,r=.2,i=!1,a=.5){this.setMode(t),this.settle=sn(a),this.refraction.edgeSafe=i,this.afterimage.edgeSafe=i,this.ripple&&(this.ripple.edgeSafe=i),this.amount=Number.isFinite(e)?Math.max(0,Math.min(1,e)):.55,this.radius=Number.isFinite(r)?Math.max(.1,Math.min(1,r)):.2,this.cursor&&(this.cursor.edgeSafe=i,this.cursor.settle=this.settle,this.cursor.setRadius(this.radius)),this.refraction.strength=ki(this.mode,this.amount),this.refraction.focus[2]=this.densityTrail?this.amount:this.lensStrength*this.amount,this.refraction.focus[3]=this.radius,(this.mode==="reveal"||this.mode==="repel")&&this.syncSpot()}syncSpot(){let t=this.cursor.focus;this.refraction.focus=[t[0],t[1],t[2]*(this.mode==="repel"?Math.min(1,this.amount/.55):this.amount),t[3]]}move(t,e,r){if(this.mode==="none"||this.amount===0||!Number.isFinite(t+e))return;if(t=Math.max(0,Math.min(1,t)),e=Math.max(0,Math.min(1,e)),$t(this.mode)){this.cursor.move(t,e,r);return}if(this.mode==="ripple"){this.ripple.move(t,e,this.radius,r);return}if(Se(this.mode)){this.afterimage.move(t,e,this.radius);return}if(this.mode==="contour"){this.contour.move(t,e,this.radius);return}if(this.mode==="trail"){this.trail.move(t,e,this.radius,r);return}if(this.mode!=="water"){!this.previous&&this.lensStrength<.001&&(this.lensX=t,this.lensY=e),this.previous={x:t,y:e},this.pending=!0;return}if(!this.previous){this.previous={x:t,y:e};return}let i=this.previous;this.previous={x:t,y:e};let a=(t-i.x)*this.xScale,o=(e-i.y)*this.yScale,l=Math.hypot(a,o);if(l<1e-5)return;let s=.035+this.radius*.1,h=s*3,m=Math.min(192,Math.max(1,Math.ceil(l/(s*.5)))),u=Math.min(l,1)*95/m;for(let f=0;f<m;f++){let p=(f+.5)/m,c=i.x+(t-i.x)*p,b=i.y+(e-i.y)*p,g=Math.max(1,Math.floor((c-h/this.xScale)*(this.columns-1))),M=Math.min(this.columns-2,Math.ceil((c+h/this.xScale)*(this.columns-1))),v=Math.max(1,Math.floor((b-h/this.yScale)*(this.rows-1))),S=Math.min(this.rows-2,Math.ceil((b+h/this.yScale)*(this.rows-1)));for(let k=v;k<=S;k++)for(let A=g;A<=M;A++){let H=(A/(this.columns-1)-c)*this.xScale,N=(k/(this.rows-1)-b)*this.yScale,C=Math.exp(-(H*H+N*N)/(s*s))*u,I=k*this.columns+A;this.velocity[I]=Math.max(-12,this.velocity[I]-C)}}this.pending=!0,this.quiet=0}leave(){this.cursor?.leave(),this.ripple?.leave(),this.afterimage.leave(),this.contour.leave(),this.trail.leave(),this.previous=null,this.mode!=="water"&&this.lensStrength&&(this.pending=!0)}clear(){this.trail.clear(),this.contour.clear(),this.afterimage.clear(),this.ripple?.clear(),this.cursor?.clear(),this.heights.fill(0),this.velocity.fill(0),this.next.fill(0),this.normals.fill(0),this.refraction.focus[2]=0,this.previous=null,this.lensStrength=0,this.energy=0,this.pending=!1,this.remainder=0,this.quiet=0;for(let t=0;t<this.waterPixels.length;t+=4)this.waterPixels[t]=this.waterPixels[t+2]=128,this.waterPixels[t+1]=this.waterPixels[t+3]=0}step(t){if(!this.active||!Number.isFinite(t))return;if($t(this.mode)){this.cursor.step(t),(this.mode==="reveal"||this.mode==="repel")&&this.syncSpot();return}if(t*=this.settle,this.mode==="ripple"){this.ripple.step(t);return}if(Se(this.mode)){this.afterimage.step(t);return}if(this.mode==="contour"){this.contour.step(t);return}if(this.mode==="trail"){this.trail.step(t);return}if(this.mode!=="water"){this.stepLight(Math.max(0,Math.min(.05,t)));return}this.remainder+=Math.max(0,Math.min(.05,t));let e=1/120,r=Math.min(this.columns,this.rows)*.3;for(;this.remainder+1e-8>=e;){this.remainder-=e,this.quiet+=e;let a=Math.max(0,Math.min(1,(this.quiet-rn)/nn)),o=a*a*(3-2*a),l=Math.exp(-(3.8+o*an)*e),s=Math.exp(-o*on*e),h=0;for(let m=1;m<this.rows-1;m++)for(let u=1;u<this.columns-1;u++){let f=m*this.columns+u,p=this.heights[f],c=this.heights[f-1]+this.heights[f+1]+this.heights[f-this.columns]+this.heights[f+this.columns]-4*p,b=Math.min(u,m,this.columns-1-u,this.rows-1-m),g=b<5?.88+b*.024:1,M=(this.velocity[f]+(c*r*r-p*8)*e)*l*g;this.velocity[f]=M,this.next[f]=(p+M*e)*g*s,h=Math.max(h,Math.abs(this.next[f]),Math.abs(M)*.1)}this.heights.set(this.next),this.energy=h,this.pending=!1}if(!this.active){this.clear();return}let i=Math.min(this.columns,this.rows)*.18;for(let a=0;a<this.rows;a++)for(let o=0;o<this.columns;o++){let l=a*this.columns+o,s=(this.heights[a*this.columns+Math.max(0,o-1)]-this.heights[a*this.columns+Math.min(this.columns-1,o+1)])*i,h=(this.heights[Math.max(0,a-1)*this.columns+o]-this.heights[Math.min(this.rows-1,a+1)*this.columns+o])*i,m=Math.tanh(s)*(this.refraction.edgeSafe?this.edgeMask[l]:1),u=Math.tanh(h)*(this.refraction.edgeSafe?this.edgeMask[l]:1);this.normals[l*2]=m,this.normals[l*2+1]=u;let f=Math.round(m*32767+32768),p=Math.round(u*32767+32768);this.refraction.pixels[l*4]=f>>>8,this.refraction.pixels[l*4+1]=f&255,this.refraction.pixels[l*4+2]=p>>>8,this.refraction.pixels[l*4+3]=p&255}}stepLight(t){let e=this.previous,r=1-Math.exp(-30*t),i=1-Math.exp(-12*t);if(e&&(this.lensX+=(e.x-this.lensX)*r,this.lensY+=(e.y-this.lensY)*r),this.lensStrength+=((e?1:0)-this.lensStrength)*i,this.energy=Math.max(e?Math.abs(e.x-this.lensX)+Math.abs(e.y-this.lensY):0,Math.abs((e?1:0)-this.lensStrength)),this.pending=!1,!e&&!this.active){this.clear();return}this.refraction.focus=[this.lensX,this.lensY,this.lensStrength*this.amount,this.radius]}sample(t,e,r){if($t(this.mode)){this.cursor.sample(t,e,r),r[0]*=this.amount/.55,r[1]*=this.amount/.55,r[2]*=this.mode==="reveal"||this.mode==="repel"?Math.min(1,this.amount/.55):this.amount*3;return}if(this.mode==="ripple"){this.ripple.sample(t,e,r),r[2]*=this.amount;return}if(Se(this.mode)){this.afterimage.sample(t,e,r),r[0]*=this.amount,r[1]*=this.amount,r[2]*=this.amount;return}if(this.mode==="contour"){r[0]=r[1]=0,r[2]=this.contour.sample(t,e)*this.amount*3;return}if(this.mode==="trail"){r[0]=r[1]=0,r[2]=this.trail.sample(t,e)*this.amount*3;return}let i=Math.max(0,Math.min(this.columns-1.001,t*(this.columns-1))),a=Math.max(0,Math.min(this.rows-1.001,e*(this.rows-1))),o=Math.floor(i),l=Math.floor(a),s=i-o,h=a-l,m=(l*this.columns+o)*2,u=m+this.columns*2;for(let f=0;f<2;f++)r[f]=((this.normals[m+f]*(1-s)+this.normals[m+2+f]*s)*(1-h)+(this.normals[u+f]*(1-s)+this.normals[u+2+f]*s)*h)*.08;r[0]*=this.amount/.55,r[1]*=this.amount/.55,r[2]=this.mode==="light"||this.mode==="scan"?ln(t,e,this.refraction,this.xScale/this.yScale):0}};function ln(n,t,e,r){let[i,a,o,l]=e.focus,s=(n-i)*Math.max(1,r)/l,h=(t-a)*Math.max(1,1/r)/l;return e.mode==="light"?Math.exp(-3*(s*s+h*h))*o:e.mode==="scan"?(Math.exp(-s*s*110)*1.3-Math.exp(-s*s*12)*.3)*Math.exp(-h*h*1.8)*o:0}function Ei(n){return"videoWidth"in n?[n.videoWidth,n.videoHeight]:"naturalWidth"in n?[n.naturalWidth,n.naturalHeight]:[n.width,n.height]}var Ht=(n,t,e)=>{(n.width!==t||n.height!==e)&&(n.width=t,n.height=e)},wi={blocks:" \\u2591\\u2592\\u2593\\u2588",braille:" \\u2801\\u2803\\u2807\\u2847\\u28C7\\u28E7\\u28F7\\u28FF",lines:" -\\u2550\\u256A\\u256C",cross:" \\xB7+xX#",diagonal:" /\\u2571\\u2573",diamond:" \\xB7\\u25C7\\u25C8\\u25C6",mixed:" .:+/\\u25C7#@"},hn=.01,cn=.99,Mr=.32,un=.07,mn=.6,yr=.9;function fn(n){let t=new Uint32Array(256),e=0;for(let o=0;o<n.length;o+=4)n[o+3]<8||(t[Math.min(255,n[o]*.299+n[o+1]*.587+n[o+2]*.114|0)]++,e++);if(!e)return[0,1];let r=o=>{let l=0,s=o*e;for(let h=0;h<256;h++)if((l+=t[h])>=s)return h/255;return 1},i=r(hn),a=r(cn);return a-i<Mr&&(i=Math.max(0,Math.min(1-Mr,(i+a)/2-Mr/2)),a=i+Mr),[i,a]}function dn(n,t,e){let r=Math.max(.001,e-t),i=0,a=0;for(let l=0;l<n.length;l+=4){if(n[l+3]<8)continue;let s=((n[l]*.299+n[l+1]*.587+n[l+2]*.114)/255-t)/r;s<=.06||(i+=Math.min(1,s),a++)}if(!a)return yr;let o=Math.min(.99,Math.max(.01,i/a));return Math.min(yr,Math.max(mn,Math.log(.5)/Math.log(o)))}function pn(n,t=yr){let e=Math.min(...n),r=Math.max(...n);if(!(r-e>1e-4))return null;let i=n.map(o=>(o-e)/(r-e)),a=new Uint8Array(256);for(let o=0;o<256;o++){if(o/255<un){a[o]=i.indexOf(0);continue}let l=Math.pow(o/255,t),s=0;for(let h=1;h<i.length;h++)Math.abs(i[h]-l)<Math.abs(i[s]-l)&&(s=h);a[o]=s}return a}function Fi(n,t,e,r){n.clearRect(0,0,t,e),n.fillStyle="#fff",n.strokeStyle="#fff",n.lineCap="round",n.lineJoin="round";for(let i of r){if(n.beginPath(),i.kind==="ellipse")n.ellipse((i.x+i.width/2)*t,(i.y+i.height/2)*e,i.width*t/2,i.height*e/2,0,0,Math.PI*2);else if(i.kind==="rectangle")n.rect(i.x*t,i.y*e,i.width*t,i.height*e);else{if(n.lineWidth=(i.size??.05)*t,i.points?.length===1){n.arc(i.points[0][0]*t,i.points[0][1]*e,n.lineWidth/2,0,Math.PI*2),n.fill();continue}i.points?.forEach(([a,o],l)=>l?n.lineTo(a*t,o*e):n.moveTo(a*t,o*e)),n.stroke();continue}n.fill()}}var Ri=new WeakMap;function Ti(n,t,e,r,i,a){Ri.get(n)?.(t,e,r,i,a,!1)}var gn=n=>Math.max(64,Math.min(4096,Number.isFinite(n)?n:960));function bn(n,t,e){let r=Math.min(1,n/Math.max(t,e));return[Math.max(2,Math.round(t*r)),Math.max(2,Math.round(e*r))]}function Mn(n,t,e,r,i){let[a,o]=Ei(t);n.clearRect(0,0,e,r),n.save();let l=fi(a,o,e,r,i);n.translate(l.x+l.width/2,l.y+l.height/2),n.rotate(i.rotation*Math.PI/180),n.drawImage(t,-a*l.scale/2,-o*l.scale/2,a*l.scale,o*l.scale),n.restore()}function Ci(n,t,e,r){let i=r.surface,a=n.getContext("2d");if(!a)throw new Error("Canvas is already owned by another renderer.");let o=i(),l=i(!0),s=i(),h=i(),m=i(),u=i(),f=i(),p=i(),c=i(),b=i(),g=0,M=0,v=1,S=yr,k=null,A=null,H=null,N="",C,I,y=ur(t),z=0,q="",Y="",x="",D=new Uint8ClampedArray(0),V=new Uint8ClampedArray(0),Z=new Uint8ClampedArray(0),T=null,O="",w=0,F=0,W=0,P=null,U="",E=new Xe,B=null,nt=new Float32Array(0),Q=i(!0),ct=i(),ft=i(),At=0,Tt=[0,0,0],mt=[0,0,0,1],se=[0,0],ot=[0,0,0,0],te=Rr(y.color),Ae=Pr(y.print),yt=new Qe(y.color.denoise),le=new $e(y.warps,y.warpEdge),ee=gn(e.maxDimension),Ct=Math.max(256,Math.min(1048576,Number.isFinite(e.maxCells)?e.maxCells:12e3)),re=Ct,Zt=Math.max(.1,Math.min(8,e.pixelRatio??1)),Le=(wt,Nt,Xt)=>{E.configure(y.hover.effect,y.hover.strength,y.hover.radius,y.hover.edgeSafe,y.hover.decay),E.move(wt,Nt,Xt)};function We(wt,Nt=0,Xt=960,jt=540,He=Nt*y.motion.speed){Ue(wt,Nt,Xt,jt,He,!0)}function Ue(wt,Nt,Xt,jt,He,kr){if(Number.isFinite(Nt)||(Nt=0),!Number.isFinite(Xt)||!Number.isFinite(jt)||Xt<1||jt<1)throw new Error("Render dimensions must be positive finite numbers.");let[Ke,Oe]=Ei(wt);if(!Ke||!Oe)return;let[it,$]=bn(ee,Xt,jt);Ht(n,it,$),Ht(o.canvas,it,$),Ht(s.canvas,it,$),Ht(h.canvas,it,$),Ht(m.canvas,it,$),At!==it/$&&(At=it/$,E=new Xe(At),E.setGuide(B)),E.configure(y.hover.effect,y.hover.strength,y.hover.radius,y.hover.edgeSafe,y.hover.decay),E.step(Math.max(0,Math.min(.05,Nt-W))),W=Nt;let ie=r.media(wt),d=[z,it,$,ie.time].join(":"),G=y.style==="dither",R=di(it,$,y,re,Zt),_=R.cell,j=R.rowHeight,pt=R.columns,Mt=R.rows;if(q!==d||P!==ie.key||w!==pt||F!==Mt){P=ie.key,q=d,O="",Y="",x="",w=pt,F=Mt,r.scene?r.scene(o.ctx,it,$):Mn(o.ctx,wt,it,$,y.crop),Ht(l.canvas,w,F),l.ctx.clearRect(0,0,w,F),l.ctx.drawImage(o.canvas,0,0,w,F),D=l.ctx.getImageData(0,0,w,F).data,yt.apply(D,w,F),V.length!==D.length&&(V=new Uint8ClampedArray(D.length)),V.set(D);let Rt=y.color;for(let bt=0;bt<D.length;bt+=4){let ht=D[bt]*.299+D[bt+1]*.587+D[bt+2]*.114;for(let rt=0;rt<3;rt++){let St=ht+(D[bt+rt]-ht)*Rt.saturation;D[bt+rt]=((St*(1-Rt.grayscale)+ht*Rt.grayscale)/255-.5)*Rt.contrast*255+127.5+Rt.brightness*255}}if(te&&Zr(D,te),D=le.apply(D,w,F,it/$),y.color.levels!=="none"){let[bt,ht]=fn(D),rt=dn(D,bt,ht),St=k===ie.key&&ie.video?.15:1;k=ie.key,M+=(bt-M)*St,v+=(ht-v)*St,S+=(rt-S)*St}let gt=y.hover,Ut=gt.scope??"all";if(gt.effect!=="none"&&(Ut!=="all"||gt.effect==="tilt")){let bt=null;if(y.mask.enabled&&y.mask.shapes.length){Ht(Q.canvas,w,F),Q.ctx.clearRect(0,0,w,F),Fi(Q.ctx,w,F,y.mask.shapes);let ht=Q.ctx.getImageData(0,0,w,F).data;bt=new Float32Array(w*F);for(let rt=0;rt<bt.length;rt++)bt[rt]=y.mask.invert?1-ht[rt*4+3]/255:ht[rt*4+3]/255}B=ar(D,w,F,bt,B),nt.length!==w*F&&(nt=new Float32Array(w*F));for(let ht=0;ht<nt.length;ht++)nt[ht]=li(Ut,B.subject[ht],B.key);if(gt.effect==="reveal"){Ht(ct.canvas,w,F);let ht=new ImageData(w,F);for(let rt=0;rt<nt.length;rt++)ht.data[rt*4+3]=nt[rt]*255;ct.ctx.putImageData(ht,0,0)}}else B=null;E.setGuide(B)}if(!kr){x=Y="";return}let Ft=ii(y),K=ri(y),J=!E.active&&!Ft&&!K,tt=[d,w,F,_,j,Zt,E.signature].join(":"),dt=E.engaged,lt=E.effect;if(!J||x!==tt){s.ctx.clearRect(0,0,it,$),s.ctx.globalAlpha=1,s.ctx.globalCompositeOperation="source-over";let Rt=He,gt=Ft?y.motion.type:"none",Ut=y.motion.amount??1,bt=si(gt);gt!=="none"&&O!==q&&(T=ci(V,w,F,T),O=q);let ht=null;if(G){let st=J;if(!st||Y!==d){Z.length!==D.length&&(Z=new Uint8ClampedArray(D.length));let It=Z;if(It.set(D),dt||gt!=="none")for(let L=0;L<F;L++)for(let Pt=0;Pt<w;Pt++){let ne=Pt/w,we=L/F,ae=Pt,oe=L,Fe=0,zt=0,Yt=1;if(dt){E.sample(ne,we,Tt);let Bt=B?nt[L*w+Pt]:1;ae-=Tt[0]*Bt*w,oe-=Tt[1]*Bt*F,lt==="reveal"?Yt=1-.72*Math.min(1,Tt[2]*Bt):lt==="repel"?Yt=1+Math.max(-1,Tt[2])*Bt:Fe=Tt[2]/3*Bt}let Ee=(L*w+Pt)*4;Lr(gt,ne,we,Rt,mt,(D[Ee]*.299+D[Ee+1]*.587+D[Ee+2]*.114)/255,T??void 0,(L*w+Pt)*ve),Hr(mt,Ut),(mt[0]||mt[1])&&(Ur(mt,ae,oe,w,F,se),ae=se[0],oe=se[1]),zt=mt[2],Yt*=mt[3];let he=(L*w+Pt)*4;Ce(D,w,F,ae,oe,ot);for(let Bt=0;Bt<3;Bt++){let ut=ot[Bt]/255,Dt=Wr(lt,ut,Fe)+zt;It[he+Bt]=Dt*255}It[he+3]=ot[3]*Yt}bi(It,w,F,y.dither,Nt),l.ctx.putImageData(new ImageData(It,w,F),0,0),Y=st?d:""}s.ctx.imageSmoothingEnabled=!1,s.ctx.drawImage(l.canvas,0,0,it,$)}else{let st=y.style==="pointillism";st&&r.marks&&I===void 0&&(I=r.marks()),ht=st&&I?.begin(it,$)?I:null;let It=Array.from(wi[y.style]??y.charset),L=ht?.ctx??s.ctx,Pt=Yr(y.ink),ne=lt==="ripple"||lt==="etch",we=ne&&Pt[0]*.299+Pt[1]*.587+Pt[2]*.114<90?[214,214,214]:Pt,ae=y.style==="ascii"||!!wi[y.style],oe=qe(y.style)?y.style:null,Fe=Math.max(3,Math.round(j*.92)),zt=Math.ceil(_+4),Yt=Math.ceil(j+4),Ee=[It.join(""),Fe,zt,Yt,y.ink,y.colorMode].join(":");if(ae&&Ee!==U){U=Ee,Ht(f.canvas,zt*It.length,Yt),f.ctx.clearRect(0,0,f.canvas.width,Yt),f.ctx.font=`${Fe}px monospace`,f.ctx.textBaseline="middle",f.ctx.textAlign="center",f.ctx.fillStyle=y.colorMode==="accent"?y.ink:"#ffffff",It.forEach((ut,Dt)=>f.ctx.fillText(ut,Dt*zt+zt/2,Yt/2)),A=null,N="";try{let ut=f.ctx.getImageData(0,0,f.canvas.width,f.canvas.height).data;A=It.map((Dt,fe)=>{let de=0;for(let Qt=0;Qt<f.canvas.height;Qt++)for(let ce=fe*zt;ce<(fe+1)*zt&&ce<f.canvas.width;ce++)de+=ut[(Qt*f.canvas.width+ce)*4+3];return de})}catch{A=null}}let he=ae&&y.color.levels!=="none";if(he&&A){let ut=U+":"+S.toFixed(2);ut!==N&&(N=ut,H=pn(A,S))}let Bt=Math.max(.001,v-M);if(y.style==="lego"&&g!==_){g=_,Ht(b.canvas,Math.ceil(_),Math.ceil(j));let ut=b.ctx;ut.clearRect(0,0,b.canvas.width,b.canvas.height),ut.fillStyle="rgba(255,255,255,.2)",ut.strokeStyle="rgba(0,0,0,.25)",ut.lineWidth=Math.max(.5,Zt*.6),ut.beginPath(),ut.arc(_/2,j/2,_*.28,0,Math.PI*2),ut.fill(),ut.stroke()}L.font=`${Fe}px monospace`,L.textBaseline="middle",L.textAlign="center";for(let ut=0;ut<F;ut++)for(let Dt=0;Dt<w;Dt++){let fe=Dt,de=ut,Qt=0,ce=0;if(dt){E.sample(Dt/w,ut/F,Tt);let at=B?nt[ut*w+Dt]:1;fe=Math.max(0,Math.min(w-1,Dt-Tt[0]*at*w)),de=Math.max(0,Math.min(F-1,ut-Tt[1]*at*F)),lt==="reveal"?ce=Math.min(1,Tt[2]*at)*.72:lt==="repel"?ce=-Math.max(-1,Tt[2])*at:Qt=Tt[2]/3*at}if(gt!=="none"){let at=(ut*w+Dt)*4;Lr(gt,Dt/w,ut/F,Rt,mt,(D[at]*.299+D[at+1]*.587+D[at+2]*.114)/255,T??void 0,(ut*w+Dt)*ve),Hr(mt,Ut),(mt[0]||mt[1])&&(Ur(mt,fe,de,w,F,se),fe=se[0],de=se[1])}Ce(D,w,F,fe,de,ot);let pe=0;if(ne&&Qt>.012&&(ot[3]?ot[3]>250&&ot[0]*.299+ot[1]*.587+ot[2]*.114<30:y.hover.scope==="outside")){let at=Math.min(1,(Qt-.012)/.12);pe=at*at*(3-2*at)}if(!ot[3]){if(!((pe||Qt>.03)&&y.hover.scope==="outside"&&Ai(lt)))continue;ot[0]=we[0],ot[1]=we[1],ot[2]=we[2],ot[3]=pe?255:Math.min(255,Qt*640)}let Ve=ot[0],_e=ot[1],Je=ot[2],Ar=(Ve*.299+_e*.587+Je*.114)/255,kt=he?Math.max(0,Math.min(1,(Ar-M)/Bt)):Ar;kt=Wr(lt,kt,Qt,!!oe&&Ae.settings.invert);let Et=Dt*_,vt=ut*j,ge=1,Re=kt;if(gt!=="none"){let at=mt[2]/(he?Math.max(.5,Bt):1);kt=Math.max(0,Math.min(1,kt+at)),Re=Math.max(0,Math.min(1,Re+at*(bt?.45:1)))}else Re=kt;pe&&(kt=Re=Math.max(kt,.1+pe*.45)),ge=(gt!=="none"?mt[3]:1)*ot[3]/255*(1-ce)*(pe?.3+pe*.45:1),!ae&&!oe&&y.colorMode==="accent"&&y.style!=="cmyk"?ge*=kt:he&&y.colorMode==="accent"&&(ge*=.32+.68*Math.pow(kt,S)),L.globalAlpha=ge;let be=(kt-Ar)*255,Kr=ht&&y.colorMode!=="accent"?y.ink:y.colorMode==="source"?`rgb(${Ve+be},${_e+be},${Je+be})`:y.colorMode==="gray"?`rgb(${Math.round(kt*255)},${Math.round(kt*255)},${Math.round(kt*255)})`:y.ink;if(L.fillStyle=Kr,oe)Ae.paint(L,oe,Dt,ut,Et,vt,_,kt,Kr,y.colorMode==="gray"?kt*255:Ve+be,y.colorMode==="gray"?kt*255:_e+be,y.colorMode==="gray"?kt*255:Je+be,y.colorMode);else if(ae){let at=he&&H?H[Math.round(Re*255)]:Math.max(0,Math.min(It.length-1,Math.round(Re*(It.length-1))));if(y.colorMode==="accent"?A?.[at]===0:It[at]===" ")continue;y.colorMode==="accent"?L.drawImage(f.canvas,at*zt,0,zt,Yt,Math.round(Et+(_-zt)/2),Math.round(vt+(j-Yt)/2),zt,Yt):L.fillText(It[at],Et+_/2,vt+j/2)}else if(y.style==="dots")L.beginPath(),L.arc(Et+_/2,vt+j/2,_*.48*Math.sqrt(kt),0,Math.PI*2),L.fill();else if(y.style==="led")L.beginPath(),L.arc(Et+_/2,vt+j/2,_*.39,0,Math.PI*2),L.fill(),L.globalAlpha=ge*.35,L.fillStyle="#ffffff",L.beginPath(),L.arc(Et+_*.43,vt+j*.4,_*.11,0,Math.PI*2),L.fill();else if(y.style==="hex"){let at=Et+_/2,ue=vt+j/2;L.beginPath();for(let Me=0;Me<6;Me++){let Ne=Math.PI/3*Me,me=at+Math.cos(Ne)*_*.49,Te=ue+Math.sin(Ne)*j*.49;Me===0?L.moveTo(me,Te):L.lineTo(me,Te)}L.closePath(),L.fill()}else if(y.style==="cmyk"){L.fillStyle="#ffffff",L.fillRect(Et,vt,_,j);let at=(wr,Ze)=>Math.max(0,Math.min(255,y.colorMode==="source"?wr+be:y.colorMode==="gray"?kt*255:Ze*kt)),ue=at(Ve,Pt[0]),Me=at(_e,Pt[1]),Ne=at(Je,Pt[2]),me=1-Math.max(ue,Me,Ne)/255,Te=Math.max(.001,1-me),Ui=[["#00ffff",(1-ue/255-me)/Te,.36,.36],["#ff00ff",(1-Me/255-me)/Te,.64,.36],["#ffff00",(1-Ne/255-me)/Te,.5,.66],["#000000",me,.5,.5]];L.globalCompositeOperation="multiply";for(let[wr,Ze,Hi,Oi]of Ui)Ze>0&&(L.fillStyle=wr,L.beginPath(),L.arc(Et+_*Hi,vt+j*Oi,_*.48*Math.sqrt(Math.max(0,Ze)),0,Math.PI*2),L.fill());L.globalCompositeOperation="source-over"}else if(y.style==="voxel"){let at=Et+_/2,ue=vt+j/2;L.beginPath(),L.moveTo(at,vt),L.lineTo(Et+_,vt+j*.25),L.lineTo(at,ue),L.lineTo(Et,vt+j*.25),L.closePath(),L.fill(),L.globalAlpha=ge*.72,L.beginPath(),L.moveTo(Et,vt+j*.25),L.lineTo(at,ue),L.lineTo(at,vt+j),L.lineTo(Et,vt+j*.75),L.closePath(),L.fill(),L.globalAlpha=ge*.42,L.beginPath(),L.moveTo(at,ue),L.lineTo(Et+_,vt+j*.25),L.lineTo(Et+_,vt+j*.75),L.lineTo(at,vt+j),L.closePath(),L.fill()}else{let at=y.style==="pixel"?0:Math.max(.5,_*.06);L.fillRect(Et,vt,_-at,j-at),y.style==="lego"&&L.drawImage(b.canvas,Et,vt),y.style==="disco"&&(L.fillStyle=`rgba(255,255,255,${.1+Xr(Dt,ut)*.25})`,L.fillRect(Et,vt,_-at,j*.35),L.fillStyle="rgba(0,0,0,.25)",L.fillRect(Et,vt+j*.65,_-at,j*.35-at))}}}if(s.ctx.globalAlpha=1,ht){let st=ht.finish();st&&s.ctx.drawImage(st,0,0)}(y.color.amount||y.lights.length)&&(Ht(p.canvas,it,$),p.ctx.clearRect(0,0,it,$),p.ctx.drawImage(s.canvas,0,0)),y.color.amount&&(s.ctx.save(),s.ctx.globalCompositeOperation=y.color.blend,s.ctx.globalAlpha=y.color.amount,s.ctx.fillStyle=y.color.tint,s.ctx.fillRect(0,0,it,$),s.ctx.restore());for(let st of y.lights){let It=st.radius*Math.max(it,$),L=s.ctx.createRadialGradient(st.x*it,st.y*$,0,st.x*it,st.y*$,It);L.addColorStop(0,st.color),L.addColorStop(1,"transparent"),s.ctx.save(),s.ctx.globalCompositeOperation="screen",s.ctx.globalAlpha=st.intensity,s.ctx.fillStyle=L,s.ctx.fillRect(0,0,it,$),s.ctx.restore()}(y.color.amount||y.lights.length)&&(s.ctx.globalCompositeOperation="destination-in",s.ctx.drawImage(p.canvas,0,0),s.ctx.globalCompositeOperation="source-over"),y.mask.enabled&&y.mask.shapes.length&&(Fi(m.ctx,it,$,y.mask.shapes),s.ctx.globalCompositeOperation=y.mask.invert?"destination-out":"destination-in",s.ctx.drawImage(m.canvas,0,0),s.ctx.globalCompositeOperation="source-over");let rt=h.ctx;rt.clearRect(0,0,it,$),rt.globalAlpha=y.backdrop.opacity;let St=y.backdrop;if(St.mode==="solid"&&(rt.fillStyle=St.color,rt.fillRect(0,0,it,$)),St.mode==="gradient"){let st=rt.createLinearGradient(0,0,it,$);st.addColorStop(0,St.color),st.addColorStop(1,St.color2),rt.fillStyle=st,rt.fillRect(0,0,it,$)}if(St.mode==="source"&&rt.drawImage(o.canvas,0,0),St.mode==="blurred"){let st=Math.max(1,St.blur);Ht(u.canvas,Math.max(2,Math.round(it/st)),Math.max(2,Math.round($/st))),u.ctx.drawImage(o.canvas,0,0,u.canvas.width,u.canvas.height),rt.imageSmoothingEnabled=!0,rt.drawImage(u.canvas,0,0,it,$)}rt.globalAlpha=1,y.effects.characterBloom>0&&(Ht(c.canvas,Math.max(2,Math.round(it/3)),Math.max(2,Math.round($/3))),c.ctx.clearRect(0,0,c.canvas.width,c.canvas.height),c.ctx.drawImage(s.canvas,0,0,c.canvas.width,c.canvas.height),rt.save(),rt.globalAlpha=y.effects.characterBloom*.8,rt.globalCompositeOperation="screen",rt.filter=`blur(${1+y.effects.characterBloom*4}px)`,rt.drawImage(c.canvas,0,0,it,$),rt.restore());let Kt=E.spotlight;if(Kt&&Kt[2]>.002){Ht(ft.canvas,it,$);let st=ft.ctx,It=Kt[3]*Math.min(it,$)*1.6;st.globalCompositeOperation="source-over",st.clearRect(0,0,it,$),st.drawImage(o.canvas,0,0),st.globalCompositeOperation="destination-in";let L=st.createRadialGradient(Kt[0]*it,Kt[1]*$,0,Kt[0]*it,Kt[1]*$,It),Pt=Math.min(1,Kt[2]*y.hover.strength/.55);for(let ne of[0,.2,.4,.6,.8,1])L.addColorStop(ne,`rgba(0,0,0,${Pt*Math.exp(-2.4*(ne*1.6)**2)*(1-ne)})`);st.fillStyle=L,st.fillRect(0,0,it,$),B&&(y.hover.scope??"all")!=="all"&&(st.imageSmoothingEnabled=!0,st.drawImage(ct.canvas,0,0,it,$)),st.globalCompositeOperation="source-over",rt.drawImage(ft.canvas,0,0)}rt.drawImage(s.canvas,0,0),x=J?tt:""}let qt=Object.entries(y.effects).some(([Rt,gt])=>!["angle","focus","blurType","characterBloom"].includes(Rt)&&typeof gt=="number"&&gt>0);a.clearRect(0,0,it,$),qt?(C===void 0&&(C=Mi(r.finishCanvas)),C?a.drawImage(C.render(h.canvas,y.effects,Nt,Zt),0,0):a.drawImage(h.canvas,0,0),r.finished(C?"gpu":"unavailable")):(a.drawImage(h.canvas,0,0),r.finished("none"))}let je={canvas:n,render:We,setPixelRatio(wt){Zt=Math.max(.1,Math.min(8,Number.isFinite(wt)?wt:1))},get pixelRatio(){return Zt},setBudget(wt){re=Math.max(256,Math.min(Ct,Number.isFinite(wt)?Math.round(wt):Ct))},get maxCells(){return re},configure(wt){y=ur(wt),te=Rr(y.color),Ae=Pr(y.print),yt.configure(y.color.denoise),le.configure(y.warps,y.warpEdge),z++},pointer:Le,leave(){E.leave()},get active(){return E.active},get settings(){return ur(y)},get capabilities(){return{gpuFinish:C!==null}},invalidate(){q=""},destroy(){C?.destroy(),I?.destroy(),I=void 0,le.clear(),yt.configure(0);for(let wt of[o,l,s,h,m,u,f,p,c,b,Q,ct,ft])wt.canvas.width=wt.canvas.height=1;P=null,D=new Uint8ClampedArray(0),Z=new Uint8ClampedArray(0),T=null,O=""}};return Ri.set(je,Ue),je}var yn=`#version 300 es\nlayout(location=1) in vec4 shape;\nlayout(location=2) in float angle;\nlayout(location=3) in vec4 color;\nlayout(location=4) in float path;\nuniform vec2 size;\n// Rim vertices per quadrant in this draw: a fan of 4 * slots triangles per ellipse, of which only the\n// quadrant\'s own segment count are not empty.\nuniform int slots;\nout vec4 ink;\nconst float W = 0.70710678118;\nvec2 turn(vec2 v, vec2 axis) { return vec2(v.x * axis.x - v.y * axis.y, v.x * axis.y + v.y * axis.x); }\n// Skia\'s Wang\'s formula for a conic at a quarter-pixel tolerance, rounded up to a power of two: how many line segments\n// the GPU canvas tessellates the curve into.\nfloat segments(vec2 p0, vec2 p1, vec2 p2) {\n vec2 center = (min(min(p0, p1), p2) + max(max(p0, p1), p2)) * 0.5;\n p0 -= center; p1 -= center; p2 -= center;\n float maxLength = sqrt(max(max(dot(p0, p0), dot(p1, p1)), dot(p2, p2)));\n vec2 dp = -2.0 * W * p1 + p0 + p2;\n float dw = abs(-2.0 * W + 2.0);\n float numer = length(dp) * 4.0 + max(0.0, maxLength * 4.0 - 1.0) * dw;\n float n = sqrt(max(numer / (4.0 * min(W, 1.0)), 0.0));\n return exp2(ceil(log2(max(1.0, ceil(n)))));\n}\nvoid main() {\n int triangle = gl_VertexID / 3, corner = gl_VertexID % 3;\n vec2 radii = shape.zw;\n vec2 axis = vec2(cos(angle), sin(angle));\n vec2 unit = vec2(0.0);\n if (corner != 0) {\n int k = triangle + corner - 1, quadrant = k / slots;\n // The quadrant\'s own conic, in the frame\'s pixels, decides its segment count.\n vec2 a0 = vec2(1.0, 0.0), a1 = vec2(1.0, 1.0), a2 = vec2(0.0, 1.0);\n if (quadrant == 1) { a0 = vec2(0.0, 1.0); a1 = vec2(-1.0, 1.0); a2 = vec2(-1.0, 0.0); }\n else if (quadrant == 2) { a0 = vec2(-1.0, 0.0); a1 = vec2(-1.0, -1.0); a2 = vec2(0.0, -1.0); }\n else if (quadrant == 3) { a0 = vec2(0.0, -1.0); a1 = vec2(1.0, -1.0); a2 = vec2(1.0, 0.0); }\n float n = min(float(slots), segments(turn(a0 * radii, axis), turn(a1 * radii, axis), turn(a2 * radii, axis)));\n float t = quadrant > 3 ? 0.0 : floor(float(k - quadrant * slots) * n / float(slots)) / n;\n float a = (1.0 - t) * (1.0 - t), b = 2.0 * W * t * (1.0 - t), c = t * t;\n unit = quadrant > 3 ? vec2(1.0, 0.0) : (a0 * a + a1 * b + a2 * c) / (a + b + c);\n }\n vec2 p = shape.xy + turn(unit * radii, axis);\n ink = vec4(color.rgb * color.a, color.a);\n // Drawn upside down and flipped back when resolved: the canvas\'s multisample pattern is the GPU\'s, top-left origin.\n // Each fill is one path: a later path is nearer, and a path\'s own shapes overlap on equal depth, so a sample covered\n // twice by one path is blended once, as a single filled path is.\n gl_Position = vec4(p / size * 2.0 - 1.0, 1.0 - path * exp2(-23.0), 1.0);\n}`,vn=`#version 300 es\nprecision highp float;\nin vec4 ink;\nout vec4 outColor;\nvoid main() { outColor = ink; }`;function Ii(){if(typeof OffscreenCanvas!="function")return null;let n=new OffscreenCanvas(300,150),t=n.getContext("webgl2",{alpha:!0,premultipliedAlpha:!0,antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!1});if(!t)return null;let e=(P,U)=>{let E=t.createShader(P);if(t.shaderSource(E,U),t.compileShader(E),!t.getShaderParameter(E,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(E)||"Dot shader failed");return E},r=t.createProgram();try{if(t.attachShader(r,e(t.VERTEX_SHADER,yn)),t.attachShader(r,e(t.FRAGMENT_SHADER,vn)),t.linkProgram(r),!t.getProgramParameter(r,t.LINK_STATUS))return null}catch{return null}let i=t.getUniformLocation(r,"size"),a=t.getUniformLocation(r,"slots"),o=t.createVertexArray();t.bindVertexArray(o);let l=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,l);let s=40;t.enableVertexAttribArray(1),t.vertexAttribPointer(1,4,t.FLOAT,!1,s,0),t.vertexAttribDivisor(1,1),t.enableVertexAttribArray(2),t.vertexAttribPointer(2,1,t.FLOAT,!1,s,16),t.vertexAttribDivisor(2,1),t.enableVertexAttribArray(3),t.vertexAttribPointer(3,4,t.FLOAT,!1,s,20),t.vertexAttribDivisor(3,1),t.enableVertexAttribArray(4),t.vertexAttribPointer(4,1,t.FLOAT,!1,s,36),t.vertexAttribDivisor(4,1),t.bindVertexArray(null);let h=Math.min(4,t.getParameter(t.MAX_SAMPLES)),m=t.createFramebuffer(),u=t.createRenderbuffer(),f=t.createRenderbuffer(),p=0,c=0,b=t.createFramebuffer(),g=t.createRenderbuffer(),M=new Float32Array(10*4096),v=0,S=1,k=1,A=0,H=0,N=new Float32Array(40),C=0,I=1,y=0,z=0,q=0,Y=1,x="#000000",D=new Map,V=new OffscreenCanvas(1,1).getContext("2d"),Z=P=>Math.max(0,Math.min(255,Number(P)))/255,T=P=>{let U=D.get(P);if(U)return U;let E=/^rgb\\(([-+.\\deE]+),([-+.\\deE]+),([-+.\\deE]+)\\)$/.exec(P),B=E?null:/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i.exec(P);if(E&&E.slice(1).every(nt=>Number.isFinite(Number(nt))))U=[Z(E[1]),Z(E[2]),Z(E[3]),1];else if(B)U=[parseInt(B[1],16)/255,parseInt(B[2],16)/255,parseInt(B[3],16)/255,1];else{if(V.fillStyle="#010203",V.fillStyle=P,V.fillStyle==="#010203"&&!/^(#010203|rgb\\(1,2,3\\))$/i.test(P.replace(/\\s/g,"")))return null;V.clearRect(0,0,1,1),V.fillRect(0,0,1,1);let[nt,Q,ct,ft]=V.getImageData(0,0,1,1).data;U=[nt/255,Q/255,ct/255,ft/255]}return D.size>=4096&&D.clear(),D.set(P,U),U},O=(P,U,E,B,nt)=>{if(C*5+5>N.length){let ct=new Float32Array(N.length*2);ct.set(N),N=ct}let Q=C++*5;N[Q]=P,N[Q+1]=U,N[Q+2]=E,N[Q+3]=B,N[Q+4]=nt},w=P=>{if((v+P)*10>M.length){let U=new Float32Array(Math.max(M.length*2,(v+P)*10));U.set(M),M=U}},F=(P,U,E,B,nt,Q,ct,ft,At,Tt)=>{if(!(E>0&&B>0))return;let mt=v++*10;E>A&&(A=E),B>A&&(A=B),M[mt]=P,M[mt+1]=U,M[mt+2]=E,M[mt+3]=B,M[mt+4]=nt,M[mt+5]=Q,M[mt+6]=ct,M[mt+7]=ft,M[mt+8]=At,M[mt+9]=Tt};return{ctx:{get globalAlpha(){return I},set globalAlpha(P){P>=0&&P<=1&&(I=P)},get fillStyle(){return x},set fillStyle(P){if(typeof P!="string"||P===x)return;x=P;let U=T(P);U&&([y,z,q,Y]=U)},strokeStyle:"#000000",globalCompositeOperation:"source-over",font:"",textBaseline:"alphabetic",textAlign:"start",beginPath(){C=0},moveTo(){},closePath(){},arc(P,U,E){O(P,U,E,E,0)},ellipse(P,U,E,B,nt){O(P,U,E,B,nt)},fill(){let P=I*Y;if(P<=0)return;w(C);let U=++H;for(let E=0;E<C;E++){let B=E*5;F(N[B],N[B+1],N[B+2],N[B+3],N[B+4],y,z,q,P,U)}},fillEllipse(P,U,E,B,nt,Q,ct,ft){I<=0||(w(1),F(P,U,E,B,nt,Math.max(0,Math.min(255,Q))/255,Math.max(0,Math.min(255,ct))/255,Math.max(0,Math.min(255,ft))/255,I,++H))}},begin(P,U){return t.isContextLost()?!1:(S=P,k=U,v=0,C=0,A=0,H=0,I=1,x="#000000",y=z=q=0,Y=1,!0)},finish(){if(t.isContextLost())return null;if(n.width!==S&&(n.width=S),n.height!==k&&(n.height=k),(p!==S||c!==k)&&(p=S,c=k,t.bindRenderbuffer(t.RENDERBUFFER,u),t.renderbufferStorageMultisample(t.RENDERBUFFER,h,t.RGBA8,S,k),t.bindRenderbuffer(t.RENDERBUFFER,f),t.renderbufferStorageMultisample(t.RENDERBUFFER,h,t.DEPTH_COMPONENT24,S,k),t.bindFramebuffer(t.FRAMEBUFFER,m),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.RENDERBUFFER,u),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,f),t.bindRenderbuffer(t.RENDERBUFFER,g),t.renderbufferStorage(t.RENDERBUFFER,t.RGBA8,S,k),t.bindFramebuffer(t.FRAMEBUFFER,b),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.RENDERBUFFER,g)),t.bindFramebuffer(t.FRAMEBUFFER,m),t.viewport(0,0,S,k),t.clearColor(0,0,0,0),t.clearDepth(1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),v){t.useProgram(r),t.uniform2f(i,S,k);let P=Math.sqrt(Math.max(0,2*A-.207)),U=Math.min(64,2**Math.ceil(Math.log2(Math.max(1,Math.ceil(P)))));t.uniform1i(a,U),t.enable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.enable(t.BLEND),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),t.bindVertexArray(o),t.bindBuffer(t.ARRAY_BUFFER,l),t.bufferData(t.ARRAY_BUFFER,M.subarray(0,v*10),t.STREAM_DRAW),t.drawArraysInstanced(t.TRIANGLES,0,U*4*3,v),t.bindVertexArray(null)}return t.bindFramebuffer(t.READ_FRAMEBUFFER,m),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,b),t.blitFramebuffer(0,0,S,k,0,0,S,k,t.COLOR_BUFFER_BIT,t.NEAREST),t.bindFramebuffer(t.READ_FRAMEBUFFER,b),t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),t.blitFramebuffer(0,0,S,k,0,k,S,0,t.COLOR_BUFFER_BIT,t.NEAREST),t.bindFramebuffer(t.FRAMEBUFFER,null),n},destroy(){t.deleteRenderbuffer(u),t.deleteRenderbuffer(f),t.deleteRenderbuffer(g),t.deleteFramebuffer(m),t.deleteFramebuffer(b),t.getExtension("WEBGL_lose_context")?.loseContext(),n.width=n.height=1}}}var Pi=self,jr=()=>new OffscreenCanvas(300,150),xn=()=>{let n=jr(),t=n.getContext("2d");if(!t)throw new Error("Canvas 2D is unavailable.");return{canvas:n,ctx:t}},Ot=null,vr=null,Sr=null,Ye=null,Di={video:!1,time:0,key:0},Li="none",xr=(n,t=[])=>Pi.postMessage(n,t),Sn={surface:xn,media:()=>Di,scene(n,t,e){n.clearRect(0,0,t,e),Sr&&n.drawImage(Sr,0,0)},finishCanvas:()=>jr(),marks:Ii,finished(n){Li=n}};Pi.onmessage=n=>{let t=n.data;try{switch(t.type){case"init":vr=jr(),Ot=Ci(vr,t.settings,t.limits,Sn),t.pixelRatio!==void 0&&Ot.setPixelRatio(t.pixelRatio),t.budget!==void 0&&Ot.setBudget(t.budget);break;case"source":Sr?.close(),Sr=t.scene,Ye={width:t.width,height:t.height},Di={video:t.video,time:t.time,key:t.key};break;case"pointer":Ot?.pointer(t.x,t.y,t.time);break;case"leave":Ot?.leave();break;case"configure":Ot?.configure(t.settings);break;case"budget":Ot?.setBudget(t.cells);break;case"ratio":Ot?.setPixelRatio(t.ratio);break;case"invalidate":Ot?.invalidate();break;case"advance":Ot&&Ye&&Ti(Ot,Ye,t.time,t.width,t.height,t.motionTime);break;case"render":{if(!Ot||!vr||!Ye){xr({type:"skip",seq:t.seq});break}let e=performance.now();Ot.render(Ye,t.time,t.width,t.height,t.motionTime);let r=performance.now()-e,i=vr.transferToImageBitmap();xr({type:"frame",seq:t.seq,bitmap:i,cost:r,active:Ot.active,finish:Li},[i]);break}}}catch(e){xr({type:"error",seq:t.type==="render"||t.type==="advance"?t.seq:-1,message:e instanceof Error?e.message:String(e)})}};xr({type:"ready"});})();\n';export{t as default};