lostpage 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +390 -2
  3. package/dist/catalog.d.ts +2 -0
  4. package/dist/catalog.js +1 -0
  5. package/dist/catalog.json +11438 -0
  6. package/dist/cdn/c/ascii-3d-LO5K5SPJ.js +3 -0
  7. package/dist/cdn/c/astronaut-LH5N45GT.js +2 -0
  8. package/dist/cdn/c/aurora-XF7DCQ7M.js +129 -0
  9. package/dist/cdn/c/autumn-V5GRVYCX.js +1 -0
  10. package/dist/cdn/c/balloon-404-KV6ISJWV.js +1 -0
  11. package/dist/cdn/c/beach-OGS53KAQ.js +95 -0
  12. package/dist/cdn/c/black-hole-635WWF67.js +124 -0
  13. package/dist/cdn/c/block-drop-QU7NYBNQ.js +1 -0
  14. package/dist/cdn/c/blue-screen-GKLGT7XD.js +70 -0
  15. package/dist/cdn/c/breakout-EGDE3QDC.js +1 -0
  16. package/dist/cdn/c/bricks-C6XPPQ64.js +1 -0
  17. package/dist/cdn/c/broken-link-U47D6LR2.js +11 -0
  18. package/dist/cdn/c/brutalist-QFXIHFAD.js +15 -0
  19. package/dist/cdn/c/bubble-wrap-45ZWIQMW.js +1 -0
  20. package/dist/cdn/c/campfire-TFG4DUUS.js +88 -0
  21. package/dist/cdn/c/card-GH5VVMRG.js +15 -0
  22. package/dist/cdn/c/cassette-33OUQ4CF.js +15 -0
  23. package/dist/cdn/c/chalkboard-NAPUHNER.js +3 -0
  24. package/dist/cdn/c/chrome-404-QVPFIQEF.js +1 -0
  25. package/dist/cdn/c/chunk-4ZBXB36L.js +1 -0
  26. package/dist/cdn/c/chunk-A44JMJWI.js +1 -0
  27. package/dist/cdn/c/chunk-HXSSPN2I.js +1 -0
  28. package/dist/cdn/c/chunk-IETNWEVK.js +1 -0
  29. package/dist/cdn/c/chunk-JLRXT2AZ.js +4 -0
  30. package/dist/cdn/c/chunk-LMRCHEWX.js +1 -0
  31. package/dist/cdn/c/chunk-NUQBEDA4.js +296 -0
  32. package/dist/cdn/c/chunk-QHXVYCR6.js +1 -0
  33. package/dist/cdn/c/chunk-QJZBGT2Q.js +75 -0
  34. package/dist/cdn/c/chunk-URWX3LLV.js +1 -0
  35. package/dist/cdn/c/chunk-YNREKTFR.js +70 -0
  36. package/dist/cdn/c/circuit-board-V6VT4OTX.js +1 -0
  37. package/dist/cdn/c/claw-machine-LLCPLZ6W.js +1 -0
  38. package/dist/cdn/c/clay-404-SMDVAQCV.js +1 -0
  39. package/dist/cdn/c/constellation-J5QMY7IB.js +1 -0
  40. package/dist/cdn/c/countdown-2TEFVO73.js +14 -0
  41. package/dist/cdn/c/cross-stitch-N5H5GLAG.js +2 -0
  42. package/dist/cdn/c/deep-sea-ILDVMW5M.js +85 -0
  43. package/dist/cdn/c/divider-PMT4UZEF.js +9 -0
  44. package/dist/cdn/c/dna-CAAKBMRK.js +2 -0
  45. package/dist/cdn/c/dominoes-VLA5MBXM.js +1 -0
  46. package/dist/cdn/c/dot-grid-O7LJO44U.js +11 -0
  47. package/dist/cdn/c/editorial-4C5Z33WO.js +11 -0
  48. package/dist/cdn/c/elevator-EFNB6FVO.js +36 -0
  49. package/dist/cdn/c/emoji-EHAJDQSM.js +8 -0
  50. package/dist/cdn/c/error-cascade-CIJCQLP3.js +18 -0
  51. package/dist/cdn/c/evidence-board-Z7DXMGNE.js +18 -0
  52. package/dist/cdn/c/eyes-VPOHW2CX.js +2 -0
  53. package/dist/cdn/c/fireworks-QLWJ3S43.js +1 -0
  54. package/dist/cdn/c/flashlight-QXI7QT74.js +57 -0
  55. package/dist/cdn/c/flatline-3GBK7IVS.js +1 -0
  56. package/dist/cdn/c/flock-RLSZ7EZQ.js +1 -0
  57. package/dist/cdn/c/foggy-glass-A56REA7E.js +1 -0
  58. package/dist/cdn/c/gears-4HJO7H74.js +5 -0
  59. package/dist/cdn/c/glass-404-WZRMDFTP.js +1 -0
  60. package/dist/cdn/c/glitch-Y4CIADF3.js +60 -0
  61. package/dist/cdn/c/gradient-404-YNSTOPNA.js +6 -0
  62. package/dist/cdn/c/halftone-XZ7F75B4.js +43 -0
  63. package/dist/cdn/c/hanging-letters-Y3VH7EVP.js +1 -0
  64. package/dist/cdn/c/hanging-sign-2KUXPLZE.js +1 -0
  65. package/dist/cdn/c/helpful-links-UFGTWTRQ.js +18 -0
  66. package/dist/cdn/c/hyperspace-R34QNI7J.js +57 -0
  67. package/dist/cdn/c/hypnosis-MK6AV3SC.js +26 -0
  68. package/dist/cdn/c/ink-S332BOPS.js +43 -0
  69. package/dist/cdn/c/invaders-ZSY3Z443.js +1 -0
  70. package/dist/cdn/c/kaleidoscope-BLGSIK4F.js +34 -0
  71. package/dist/cdn/c/lava-lamp-VYY5XFG5.js +55 -0
  72. package/dist/cdn/c/life-QBWZL5FY.js +1 -0
  73. package/dist/cdn/c/lighthouse-QX7QIIPX.js +60 -0
  74. package/dist/cdn/c/loading-LIS67QF7.js +34 -0
  75. package/dist/cdn/c/lost-at-sea-QNURIHBY.js +258 -0
  76. package/dist/cdn/c/magic-8-ball-W3TRJALZ.js +2 -0
  77. package/dist/cdn/c/matrix-rain-4V4SVGGG.js +3 -0
  78. package/dist/cdn/c/maze-QL5TRCE5.js +1 -0
  79. package/dist/cdn/c/mesh-gradient-UISGI62K.js +34 -0
  80. package/dist/cdn/c/metro-map-H64EHOZM.js +30 -0
  81. package/dist/cdn/c/milk-carton-3SDLA5AY.js +53 -0
  82. package/dist/cdn/c/minimal-SB6FU3DE.js +9 -0
  83. package/dist/cdn/c/mirage-IQ3IA3VB.js +70 -0
  84. package/dist/cdn/c/moon-landing-TKZE4Q6G.js +1 -0
  85. package/dist/cdn/c/neon-sign-XGMN75MH.js +1 -0
  86. package/dist/cdn/c/newspaper-YECAUY77.js +49 -0
  87. package/dist/cdn/c/nixie-CQBRCVDE.js +1 -0
  88. package/dist/cdn/c/no-signal-HL4A4CFZ.js +82 -0
  89. package/dist/cdn/c/one-bit-AFIZQPHK.js +49 -0
  90. package/dist/cdn/c/outline-404-REB5E5EN.js +9 -0
  91. package/dist/cdn/c/paint-splash-GZGPOURW.js +1 -0
  92. package/dist/cdn/c/paper-plane-KDCSE3RM.js +2 -0
  93. package/dist/cdn/c/particles-7UMRMT2M.js +1 -0
  94. package/dist/cdn/c/path-not-found-VUEXOVO7.js +14 -0
  95. package/dist/cdn/c/planet-H6QGPDVC.js +157 -0
  96. package/dist/cdn/c/pond-6DL43VUQ.js +106 -0
  97. package/dist/cdn/c/pong-B2ZGAY7T.js +1 -0
  98. package/dist/cdn/c/radar-22JCPGQZ.js +4 -0
  99. package/dist/cdn/c/rainy-window-DTGLJVAR.js +114 -0
  100. package/dist/cdn/c/receipt-ZOYUSMN3.js +32 -0
  101. package/dist/cdn/c/road-closed-3OS55UBX.js +1 -0
  102. package/dist/cdn/c/rpg-dialog-FV53YYNJ.js +14 -0
  103. package/dist/cdn/c/runner-NANXJTQG.js +1 -0
  104. package/dist/cdn/c/scratch-card-GC6U4ZZN.js +1 -0
  105. package/dist/cdn/c/screensaver-UXKJVQUU.js +1 -0
  106. package/dist/cdn/c/search-404-HFKZ4DUA.js +17 -0
  107. package/dist/cdn/c/server-default-RBMMRAHS.js +10 -0
  108. package/dist/cdn/c/server-room-QSKAUFUY.js +1 -0
  109. package/dist/cdn/c/skyline-OMZMF5R6.js +1 -0
  110. package/dist/cdn/c/skywriting-RYNQWJ6I.js +1 -0
  111. package/dist/cdn/c/slot-machine-XXCVI2HK.js +33 -0
  112. package/dist/cdn/c/snake-6Z5V3QA3.js +1 -0
  113. package/dist/cdn/c/snow-globe-RLDPNA2J.js +2 -0
  114. package/dist/cdn/c/soft-blobs-FYEFGINV.js +15 -0
  115. package/dist/cdn/c/solar-system-CQAP6WFU.js +2 -0
  116. package/dist/cdn/c/split-flap-O7JGD5Q4.js +37 -0
  117. package/dist/cdn/c/split-panel-QGXZ24E4.js +12 -0
  118. package/dist/cdn/c/stage-GBZR3JQS.js +2 -0
  119. package/dist/cdn/c/swiss-poster-OON4HBUG.js +20 -0
  120. package/dist/cdn/c/terminal-7BTUDZDB.js +41 -0
  121. package/dist/cdn/c/thunderstorm-FRCKHKXY.js +1 -0
  122. package/dist/cdn/c/topographic-3RIQXKIQ.js +38 -0
  123. package/dist/cdn/c/torn-page-6UT5ZQHG.js +16 -0
  124. package/dist/cdn/c/treasure-map-FALAEBL5.js +3 -0
  125. package/dist/cdn/c/typewriter-7TIO42MH.js +23 -0
  126. package/dist/cdn/c/ufo-6UW34TI3.js +1 -0
  127. package/dist/cdn/c/unplugged-QXKDDH4S.js +1 -0
  128. package/dist/cdn/c/vending-machine-SH3MNFMY.js +27 -0
  129. package/dist/cdn/c/vinyl-3FUP3LSO.js +2 -0
  130. package/dist/cdn/c/voxel-404-LMC43X4B.js +102 -0
  131. package/dist/cdn/c/wormhole-I2RWIMRW.js +113 -0
  132. package/dist/cdn/c/zen-garden-HMAMASJK.js +1 -0
  133. package/dist/cdn/element.js +1 -0
  134. package/dist/cdn/index.js +1 -0
  135. package/dist/chunks/chunk-3ISI6SOJ.js +1 -0
  136. package/dist/chunks/chunk-6HZC24J2.js +296 -0
  137. package/dist/chunks/chunk-7XMDQMDO.js +1 -0
  138. package/dist/chunks/chunk-B2NBRLO2.js +1 -0
  139. package/dist/chunks/chunk-B4TY5M55.js +1 -0
  140. package/dist/chunks/chunk-DAZOIOF7.js +1 -0
  141. package/dist/chunks/chunk-ES56TX4X.js +1 -0
  142. package/dist/chunks/chunk-FVGCB66F.js +1 -0
  143. package/dist/chunks/chunk-KIYSQVWX.js +1 -0
  144. package/dist/chunks/chunk-MNUNTC4L.js +4 -0
  145. package/dist/chunks/chunk-SH72TE6I.js +75 -0
  146. package/dist/chunks/chunk-URB3NNOB.js +70 -0
  147. package/dist/cli.js +97 -0
  148. package/dist/core/canvas2d.d.ts +18 -0
  149. package/dist/core/define.d.ts +16 -0
  150. package/dist/core/gl.d.ts +50 -0
  151. package/dist/core/glsl.d.ts +10 -0
  152. package/dist/core/overlay.d.ts +5 -0
  153. package/dist/core/runtime.d.ts +8 -0
  154. package/dist/core/shader.d.ts +22 -0
  155. package/dist/core/styles.d.ts +4 -0
  156. package/dist/core/text.d.ts +54 -0
  157. package/dist/core/types.d.ts +170 -0
  158. package/dist/core/util.d.ts +16 -0
  159. package/dist/core.d.ts +8 -0
  160. package/dist/core.js +1 -0
  161. package/dist/element.cdn.js +1 -0
  162. package/dist/element.d.ts +21 -0
  163. package/dist/element.js +1 -0
  164. package/dist/engines/arcade.d.ts +25 -0
  165. package/dist/engines/text3d.d.ts +37 -0
  166. package/dist/generated/all.d.ts +2 -0
  167. package/dist/generated/catalog.d.ts +2 -0
  168. package/dist/generated/registry.d.ts +5 -0
  169. package/dist/index.d.ts +23 -0
  170. package/dist/index.js +1 -0
  171. package/dist/lostpage.global.js +3222 -0
  172. package/dist/react.d.ts +21 -0
  173. package/dist/react.js +2 -0
  174. package/dist/scenes/_simple.d.ts +10 -0
  175. package/dist/scenes/ascii-3d.d.ts +10 -0
  176. package/dist/scenes/ascii-3d.js +3 -0
  177. package/dist/scenes/astronaut.d.ts +10 -0
  178. package/dist/scenes/astronaut.js +2 -0
  179. package/dist/scenes/aurora.d.ts +14 -0
  180. package/dist/scenes/aurora.js +129 -0
  181. package/dist/scenes/autumn.d.ts +8 -0
  182. package/dist/scenes/autumn.js +1 -0
  183. package/dist/scenes/balloon-404.d.ts +9 -0
  184. package/dist/scenes/balloon-404.js +1 -0
  185. package/dist/scenes/beach.d.ts +14 -0
  186. package/dist/scenes/beach.js +95 -0
  187. package/dist/scenes/black-hole.d.ts +15 -0
  188. package/dist/scenes/black-hole.js +124 -0
  189. package/dist/scenes/block-drop.d.ts +9 -0
  190. package/dist/scenes/block-drop.js +1 -0
  191. package/dist/scenes/blue-screen.d.ts +5 -0
  192. package/dist/scenes/blue-screen.js +70 -0
  193. package/dist/scenes/breakout.d.ts +10 -0
  194. package/dist/scenes/breakout.js +1 -0
  195. package/dist/scenes/bricks.d.ts +7 -0
  196. package/dist/scenes/bricks.js +1 -0
  197. package/dist/scenes/broken-link.d.ts +8 -0
  198. package/dist/scenes/broken-link.js +11 -0
  199. package/dist/scenes/brutalist.d.ts +7 -0
  200. package/dist/scenes/brutalist.js +15 -0
  201. package/dist/scenes/bubble-wrap.d.ts +9 -0
  202. package/dist/scenes/bubble-wrap.js +1 -0
  203. package/dist/scenes/campfire.d.ts +11 -0
  204. package/dist/scenes/campfire.js +88 -0
  205. package/dist/scenes/card.d.ts +8 -0
  206. package/dist/scenes/card.js +15 -0
  207. package/dist/scenes/cassette.d.ts +9 -0
  208. package/dist/scenes/cassette.js +15 -0
  209. package/dist/scenes/chalkboard.d.ts +8 -0
  210. package/dist/scenes/chalkboard.js +3 -0
  211. package/dist/scenes/chrome-404.d.ts +13 -0
  212. package/dist/scenes/chrome-404.js +1 -0
  213. package/dist/scenes/circuit-board.d.ts +9 -0
  214. package/dist/scenes/circuit-board.js +1 -0
  215. package/dist/scenes/claw-machine.d.ts +8 -0
  216. package/dist/scenes/claw-machine.js +1 -0
  217. package/dist/scenes/clay-404.d.ts +11 -0
  218. package/dist/scenes/clay-404.js +1 -0
  219. package/dist/scenes/constellation.d.ts +10 -0
  220. package/dist/scenes/constellation.js +1 -0
  221. package/dist/scenes/countdown.d.ts +9 -0
  222. package/dist/scenes/countdown.js +14 -0
  223. package/dist/scenes/cross-stitch.d.ts +8 -0
  224. package/dist/scenes/cross-stitch.js +2 -0
  225. package/dist/scenes/deep-sea.d.ts +9 -0
  226. package/dist/scenes/deep-sea.js +85 -0
  227. package/dist/scenes/divider.d.ts +6 -0
  228. package/dist/scenes/divider.js +9 -0
  229. package/dist/scenes/dna.d.ts +9 -0
  230. package/dist/scenes/dna.js +2 -0
  231. package/dist/scenes/dominoes.d.ts +9 -0
  232. package/dist/scenes/dominoes.js +1 -0
  233. package/dist/scenes/dot-grid.d.ts +9 -0
  234. package/dist/scenes/dot-grid.js +11 -0
  235. package/dist/scenes/editorial.d.ts +6 -0
  236. package/dist/scenes/editorial.js +11 -0
  237. package/dist/scenes/elevator.d.ts +10 -0
  238. package/dist/scenes/elevator.js +36 -0
  239. package/dist/scenes/emoji.d.ts +7 -0
  240. package/dist/scenes/emoji.js +8 -0
  241. package/dist/scenes/error-cascade.d.ts +6 -0
  242. package/dist/scenes/error-cascade.js +18 -0
  243. package/dist/scenes/evidence-board.d.ts +7 -0
  244. package/dist/scenes/evidence-board.js +18 -0
  245. package/dist/scenes/eyes.d.ts +12 -0
  246. package/dist/scenes/eyes.js +2 -0
  247. package/dist/scenes/fireworks.d.ts +8 -0
  248. package/dist/scenes/fireworks.js +1 -0
  249. package/dist/scenes/flashlight.d.ts +12 -0
  250. package/dist/scenes/flashlight.js +57 -0
  251. package/dist/scenes/flatline.d.ts +9 -0
  252. package/dist/scenes/flatline.js +1 -0
  253. package/dist/scenes/flock.d.ts +13 -0
  254. package/dist/scenes/flock.js +1 -0
  255. package/dist/scenes/foggy-glass.d.ts +9 -0
  256. package/dist/scenes/foggy-glass.js +1 -0
  257. package/dist/scenes/gears.d.ts +10 -0
  258. package/dist/scenes/gears.js +5 -0
  259. package/dist/scenes/glass-404.d.ts +11 -0
  260. package/dist/scenes/glass-404.js +1 -0
  261. package/dist/scenes/glitch.d.ts +15 -0
  262. package/dist/scenes/glitch.js +60 -0
  263. package/dist/scenes/gradient-404.d.ts +9 -0
  264. package/dist/scenes/gradient-404.js +6 -0
  265. package/dist/scenes/halftone.d.ts +11 -0
  266. package/dist/scenes/halftone.js +43 -0
  267. package/dist/scenes/hanging-letters.d.ts +10 -0
  268. package/dist/scenes/hanging-letters.js +1 -0
  269. package/dist/scenes/hanging-sign.d.ts +9 -0
  270. package/dist/scenes/hanging-sign.js +1 -0
  271. package/dist/scenes/helpful-links.d.ts +6 -0
  272. package/dist/scenes/helpful-links.js +18 -0
  273. package/dist/scenes/hyperspace.d.ts +11 -0
  274. package/dist/scenes/hyperspace.js +57 -0
  275. package/dist/scenes/hypnosis.d.ts +10 -0
  276. package/dist/scenes/hypnosis.js +26 -0
  277. package/dist/scenes/ink.d.ts +10 -0
  278. package/dist/scenes/ink.js +43 -0
  279. package/dist/scenes/invaders.d.ts +10 -0
  280. package/dist/scenes/invaders.js +1 -0
  281. package/dist/scenes/kaleidoscope.d.ts +10 -0
  282. package/dist/scenes/kaleidoscope.js +34 -0
  283. package/dist/scenes/lava-lamp.d.ts +11 -0
  284. package/dist/scenes/lava-lamp.js +55 -0
  285. package/dist/scenes/life.d.ts +13 -0
  286. package/dist/scenes/life.js +1 -0
  287. package/dist/scenes/lighthouse.d.ts +11 -0
  288. package/dist/scenes/lighthouse.js +60 -0
  289. package/dist/scenes/loading.d.ts +6 -0
  290. package/dist/scenes/loading.js +34 -0
  291. package/dist/scenes/lost-at-sea.d.ts +35 -0
  292. package/dist/scenes/lost-at-sea.js +258 -0
  293. package/dist/scenes/magic-8-ball.d.ts +10 -0
  294. package/dist/scenes/magic-8-ball.js +2 -0
  295. package/dist/scenes/matrix-rain.d.ts +13 -0
  296. package/dist/scenes/matrix-rain.js +3 -0
  297. package/dist/scenes/maze.d.ts +9 -0
  298. package/dist/scenes/maze.js +1 -0
  299. package/dist/scenes/mesh-gradient.d.ts +13 -0
  300. package/dist/scenes/mesh-gradient.js +34 -0
  301. package/dist/scenes/metro-map.d.ts +8 -0
  302. package/dist/scenes/metro-map.js +30 -0
  303. package/dist/scenes/milk-carton.d.ts +9 -0
  304. package/dist/scenes/milk-carton.js +53 -0
  305. package/dist/scenes/minimal.d.ts +6 -0
  306. package/dist/scenes/minimal.js +9 -0
  307. package/dist/scenes/mirage.d.ts +10 -0
  308. package/dist/scenes/mirage.js +70 -0
  309. package/dist/scenes/moon-landing.d.ts +8 -0
  310. package/dist/scenes/moon-landing.js +1 -0
  311. package/dist/scenes/neon-sign.d.ts +15 -0
  312. package/dist/scenes/neon-sign.js +1 -0
  313. package/dist/scenes/newspaper.d.ts +10 -0
  314. package/dist/scenes/newspaper.js +49 -0
  315. package/dist/scenes/nixie.d.ts +11 -0
  316. package/dist/scenes/nixie.js +1 -0
  317. package/dist/scenes/no-signal.d.ts +11 -0
  318. package/dist/scenes/no-signal.js +82 -0
  319. package/dist/scenes/one-bit.d.ts +8 -0
  320. package/dist/scenes/one-bit.js +49 -0
  321. package/dist/scenes/outline-404.d.ts +8 -0
  322. package/dist/scenes/outline-404.js +9 -0
  323. package/dist/scenes/paint-splash.d.ts +6 -0
  324. package/dist/scenes/paint-splash.js +1 -0
  325. package/dist/scenes/paper-plane.d.ts +9 -0
  326. package/dist/scenes/paper-plane.js +2 -0
  327. package/dist/scenes/particles.d.ts +22 -0
  328. package/dist/scenes/particles.js +1 -0
  329. package/dist/scenes/path-not-found.d.ts +6 -0
  330. package/dist/scenes/path-not-found.js +14 -0
  331. package/dist/scenes/planet.d.ts +19 -0
  332. package/dist/scenes/planet.js +157 -0
  333. package/dist/scenes/pond.d.ts +11 -0
  334. package/dist/scenes/pond.js +106 -0
  335. package/dist/scenes/pong.d.ts +8 -0
  336. package/dist/scenes/pong.js +1 -0
  337. package/dist/scenes/radar.d.ts +9 -0
  338. package/dist/scenes/radar.js +4 -0
  339. package/dist/scenes/rainy-window.d.ts +11 -0
  340. package/dist/scenes/rainy-window.js +114 -0
  341. package/dist/scenes/receipt.d.ts +8 -0
  342. package/dist/scenes/receipt.js +32 -0
  343. package/dist/scenes/road-closed.d.ts +9 -0
  344. package/dist/scenes/road-closed.js +1 -0
  345. package/dist/scenes/rpg-dialog.d.ts +11 -0
  346. package/dist/scenes/rpg-dialog.js +14 -0
  347. package/dist/scenes/runner.d.ts +10 -0
  348. package/dist/scenes/runner.js +1 -0
  349. package/dist/scenes/scratch-card.d.ts +9 -0
  350. package/dist/scenes/scratch-card.js +1 -0
  351. package/dist/scenes/screensaver.d.ts +8 -0
  352. package/dist/scenes/screensaver.js +1 -0
  353. package/dist/scenes/search-404.d.ts +9 -0
  354. package/dist/scenes/search-404.js +17 -0
  355. package/dist/scenes/server-default.d.ts +6 -0
  356. package/dist/scenes/server-default.js +10 -0
  357. package/dist/scenes/server-room.d.ts +9 -0
  358. package/dist/scenes/server-room.js +1 -0
  359. package/dist/scenes/skyline.d.ts +10 -0
  360. package/dist/scenes/skyline.js +1 -0
  361. package/dist/scenes/skywriting.d.ts +8 -0
  362. package/dist/scenes/skywriting.js +1 -0
  363. package/dist/scenes/slot-machine.d.ts +10 -0
  364. package/dist/scenes/slot-machine.js +33 -0
  365. package/dist/scenes/snake.d.ts +13 -0
  366. package/dist/scenes/snake.js +1 -0
  367. package/dist/scenes/snow-globe.d.ts +10 -0
  368. package/dist/scenes/snow-globe.js +2 -0
  369. package/dist/scenes/soft-blobs.d.ts +9 -0
  370. package/dist/scenes/soft-blobs.js +15 -0
  371. package/dist/scenes/solar-system.d.ts +9 -0
  372. package/dist/scenes/solar-system.js +2 -0
  373. package/dist/scenes/split-flap.d.ts +15 -0
  374. package/dist/scenes/split-flap.js +37 -0
  375. package/dist/scenes/split-panel.d.ts +8 -0
  376. package/dist/scenes/split-panel.js +12 -0
  377. package/dist/scenes/stage.d.ts +10 -0
  378. package/dist/scenes/stage.js +2 -0
  379. package/dist/scenes/swiss-poster.d.ts +9 -0
  380. package/dist/scenes/swiss-poster.js +20 -0
  381. package/dist/scenes/terminal.d.ts +13 -0
  382. package/dist/scenes/terminal.js +41 -0
  383. package/dist/scenes/thunderstorm.d.ts +11 -0
  384. package/dist/scenes/thunderstorm.js +1 -0
  385. package/dist/scenes/topographic.d.ts +13 -0
  386. package/dist/scenes/topographic.js +38 -0
  387. package/dist/scenes/torn-page.d.ts +9 -0
  388. package/dist/scenes/torn-page.js +16 -0
  389. package/dist/scenes/treasure-map.d.ts +10 -0
  390. package/dist/scenes/treasure-map.js +3 -0
  391. package/dist/scenes/typewriter.d.ts +10 -0
  392. package/dist/scenes/typewriter.js +23 -0
  393. package/dist/scenes/ufo.d.ts +11 -0
  394. package/dist/scenes/ufo.js +1 -0
  395. package/dist/scenes/unplugged.d.ts +9 -0
  396. package/dist/scenes/unplugged.js +1 -0
  397. package/dist/scenes/vending-machine.d.ts +7 -0
  398. package/dist/scenes/vending-machine.js +27 -0
  399. package/dist/scenes/vinyl.d.ts +9 -0
  400. package/dist/scenes/vinyl.js +2 -0
  401. package/dist/scenes/voxel-404.d.ts +13 -0
  402. package/dist/scenes/voxel-404.js +102 -0
  403. package/dist/scenes/wormhole.d.ts +13 -0
  404. package/dist/scenes/wormhole.js +113 -0
  405. package/dist/scenes/zen-garden.d.ts +8 -0
  406. package/dist/scenes/zen-garden.js +1 -0
  407. package/dist/svelte.d.ts +17 -0
  408. package/dist/svelte.js +1 -0
  409. package/dist/vue.d.ts +66 -0
  410. package/dist/vue.js +1 -0
  411. package/package.json +114 -4
@@ -0,0 +1 @@
1
+ import{__export}from"./chunk-7XMDQMDO.js";var text_exports={};__export(text_exports,{MONO:()=>MONO,SANS:()=>SANS,SERIF:()=>SERIF,blurField:()=>blurField,drawFittedText:()=>drawFittedText,sdfFromAlpha:()=>sdfFromAlpha,textCanvas:()=>textCanvas,textPoints:()=>textPoints,textSDF:()=>textSDF});var SANS='"Inter","SF Pro Display",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif',MONO='"JetBrains Mono","SF Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace',SERIF='"Fraunces","Playfair Display",ui-serif,Georgia,"Times New Roman",serif';function textCanvas(text,o){let c=document.createElement("canvas");c.width=Math.max(1,Math.round(o.width)),c.height=Math.max(1,Math.round(o.height));let g=c.getContext("2d");return drawFittedText(g,text,o),c}function drawFittedText(g,text,o){let fit=o.fit??.8,font=o.font??SANS,weight=o.weight??800,style=o.style??"normal",size=100;g.font=`${style} ${weight} ${size}px ${font}`;let tracking=o.tracking??-.02,measure=()=>{let m2=g.measureText(text),w=m2.width+tracking*size*(text.length-1),h=(m2.actualBoundingBoxAscent||size*.72)+(m2.actualBoundingBoxDescent||0);return{w,h,asc:m2.actualBoundingBoxAscent||size*.72,desc:m2.actualBoundingBoxDescent||0}},m=measure();size=Math.min(o.width*fit/m.w,o.height*fit/m.h)*100,g.font=`${style} ${weight} ${size}px ${font}`,m=measure();let cx=o.width*(o.cx??.5),cy=o.height*(o.cy??.5);g.fillStyle=o.color??"#fff",g.textBaseline="alphabetic";let baseY=cy+(m.asc-m.desc)/2;if(Math.abs(tracking)<1e-4)g.textAlign="center",g.fillText(text,cx,baseY);else{g.textAlign="left";let x=cx-m.w/2;for(let ch of text)g.fillText(ch,x,baseY),x+=g.measureText(ch).width+tracking*size}return{size,width:m.w,height:m.h,x:cx-m.w/2,y:baseY-m.asc}}function textPoints(text,o){let c=textCanvas(text,{...o,width:o.width*1,height:o.height*1}),g=c.getContext("2d"),{data,width,height}=g.getImageData(0,0,c.width,c.height),out=[],rnd=o.random??Math.random,j=o.jitter??0;for(let y=0;y<height;y+=o.step)for(let x=0;x<width;x+=o.step)data[(y*width+x)*4+3]>140&&out.push(x/1+(rnd()-.5)*j*o.step,y/1+(rnd()-.5)*j*o.step);return new Float32Array(out)}var INF=1e20;function edt1d(f,n,d,v,z){let k=0;v[0]=0,z[0]=-INF,z[1]=INF;for(let q=1;q<n;q++){let s=(f[q]+q*q-(f[v[k]]+v[k]*v[k]))/(2*q-2*v[k]);for(;s<=z[k];)k--,s=(f[q]+q*q-(f[v[k]]+v[k]*v[k]))/(2*q-2*v[k]);k++,v[k]=q,z[k]=s,z[k+1]=INF}k=0;for(let q=0;q<n;q++){for(;z[k+1]<q;)k++;d[q]=(q-v[k])*(q-v[k])+f[v[k]]}}function edt2d(grid,w,h){let n=Math.max(w,h),f=new Float64Array(n),d=new Float64Array(n),v=new Int32Array(n),z=new Float64Array(n+1);for(let x=0;x<w;x++){for(let y=0;y<h;y++)f[y]=grid[y*w+x];edt1d(f,h,d,v,z);for(let y=0;y<h;y++)grid[y*w+x]=d[y]}for(let y=0;y<h;y++){for(let x=0;x<w;x++)f[x]=grid[y*w+x];edt1d(f,w,d,v,z);for(let x=0;x<w;x++)grid[y*w+x]=d[x]}}function sdfFromAlpha(alpha,w,h,stride=4,offset=3){let outside=new Float64Array(w*h),inside=new Float64Array(w*h);for(let i=0;i<w*h;i++){let a=alpha[i*stride+offset]/255;if(a>=.999)outside[i]=0,inside[i]=INF;else if(a<=.001)outside[i]=INF,inside[i]=0;else{let dd=Math.max(0,.5-a),di=Math.max(0,a-.5);outside[i]=dd*dd,inside[i]=di*di}}edt2d(outside,w,h),edt2d(inside,w,h);let out=new Float32Array(w*h);for(let i=0;i<w*h;i++)out[i]=Math.sqrt(outside[i])-Math.sqrt(inside[i]);return out}function blurField(f,w,h,sigma=1.6){let r=Math.ceil(sigma*2.5),k=[],sum=0;for(let i=-r;i<=r;i++){let v=Math.exp(-(i*i)/(2*sigma*sigma));k.push(v),sum+=v}for(let i=0;i<k.length;i++)k[i]/=sum;let tmp=new Float32Array(f.length);for(let y=0;y<h;y++){let row=y*w;for(let x=0;x<w;x++){let acc=0;for(let i=-r;i<=r;i++)acc+=f[row+Math.min(w-1,Math.max(0,x+i))]*k[i+r];tmp[row+x]=acc}}for(let x=0;x<w;x++)for(let y=0;y<h;y++){let acc=0;for(let i=-r;i<=r;i++)acc+=tmp[Math.min(h-1,Math.max(0,y+i))*w+x]*k[i+r];f[y*w+x]=acc}return f}function textSDF(text,o){let c=textCanvas(text,o),img=c.getContext("2d").getImageData(0,0,c.width,c.height),sdf=sdfFromAlpha(img.data,c.width,c.height);(o.smooth??1.8)>0&&blurField(sdf,c.width,c.height,o.smooth??1.8);let flipped=new Float32Array(sdf.length);for(let y=0;y<c.height;y++)flipped.set(sdf.subarray(y*c.width,(y+1)*c.width),(c.height-1-y)*c.width);return{data:flipped,width:c.width,height:c.height}}export{SANS,MONO,SERIF,textCanvas,drawFittedText,textPoints,textSDF,text_exports};
@@ -0,0 +1,296 @@
1
+ import{HASH,NOISE,POST,dataTexture,getGL,pass}from"./chunk-SH72TE6I.js";import{linear}from"./chunk-FVGCB66F.js";import{SANS,textSDF}from"./chunk-3ISI6SOJ.js";var COMMON=`
2
+ uniform sampler2D uSdf;
3
+ uniform vec2 uHalf; // half extents of the SDF box (world)
4
+ uniform float uScale; // sdf px -> world
5
+ uniform float uInflate;
6
+ uniform float uDepth, uRound, uSpin, uFloat, uGloss, uEnvSpeed, uStrings, uDisp, uFloor, uSize, uY;
7
+ uniform vec3 uA, uB, uC, uBg0, uBg1, uLight;
8
+ ${HASH}
9
+ ${NOISE}
10
+ ${POST}
11
+
12
+ mat3 rotY(float a){ float c = cos(a), s = sin(a); return mat3(c,0,-s, 0,1,0, s,0,c); }
13
+ mat3 rotX(float a){ float c = cos(a), s = sin(a); return mat3(1,0,0, 0,c,s, 0,-s,c); }
14
+
15
+ // Cubic B-spline filtering from 4 bilinear taps: C2-smooth distances, so normals don't kink at texel edges.
16
+ float sdfBicubic(vec2 uv) {
17
+ vec2 size = vec2(textureSize(uSdf, 0));
18
+ vec2 st = uv * size - 0.5;
19
+ vec2 i = floor(st);
20
+ vec2 f = st - i;
21
+ vec2 f2 = f * f, f3 = f2 * f;
22
+ vec2 w0 = (1.0 - 3.0 * f + 3.0 * f2 - f3) / 6.0;
23
+ vec2 w1 = (4.0 - 6.0 * f2 + 3.0 * f3) / 6.0;
24
+ vec2 w2 = (1.0 + 3.0 * f + 3.0 * f2 - 3.0 * f3) / 6.0;
25
+ vec2 w3 = f3 / 6.0;
26
+ vec2 g0 = w0 + w1, g1 = w2 + w3;
27
+ vec2 h0 = (w1 / g0 - 1.0 + i + 0.5) / size;
28
+ vec2 h1 = (w3 / g1 + 1.0 + i + 0.5) / size;
29
+ float a = texture(uSdf, vec2(h0.x, h0.y)).r, b = texture(uSdf, vec2(h1.x, h0.y)).r;
30
+ float c = texture(uSdf, vec2(h0.x, h1.y)).r, d = texture(uSdf, vec2(h1.x, h1.y)).r;
31
+ return mix(mix(d, c, g0.x), mix(b, a, g0.x), g0.y);
32
+ }
33
+
34
+ float sdText2(vec2 p) {
35
+ vec2 uv = p / (2.0 * uHalf) + 0.5;
36
+ vec2 q = clamp(uv, 0.004, 0.996);
37
+ float d = sdfBicubic(q) * uScale;
38
+ return d + length((uv - q) * 2.0 * uHalf);
39
+ }
40
+
41
+ mat3 objRot;
42
+ vec3 objOff;
43
+ float floorY = -1.15;
44
+
45
+ float mapText(vec3 p) {
46
+ p = objRot * (p - objOff);
47
+ if (uInflate > 0.0) {
48
+ // pillow: thickness grows with distance from the outline along a circular profile
49
+ float d2 = sdText2(p.xy);
50
+ float s = clamp(-d2 / uInflate, 0.0, 1.0);
51
+ float h = uDepth * sqrt(max(1.0 - (1.0 - s) * (1.0 - s), 0.0));
52
+ return max(d2, abs(p.z) - h) * 0.6;
53
+ }
54
+ float d2 = sdText2(p.xy) + uRound;
55
+ vec2 w = vec2(d2, abs(p.z) - uDepth);
56
+ return min(max(w.x, w.y), 0.0) + length(max(w, 0.0)) - uRound;
57
+ }
58
+
59
+ // which letter (0,1,2) a point belongs to, by x position in object space
60
+ float letterId(vec3 p) {
61
+ vec3 q = objRot * (p - objOff);
62
+ return clamp(floor((q.x / (2.0 * uHalf.x) + 0.5) * 3.0), 0.0, 2.0);
63
+ }
64
+ vec3 letterColor(vec3 p) {
65
+ float id = letterId(p);
66
+ return id < 0.5 ? uA : id < 1.5 ? uB : uC;
67
+ }
68
+
69
+ float mapStrings(vec3 p) {
70
+ if (uStrings < 0.5) return 1e5;
71
+ vec3 q = objRot * (p - objOff);
72
+ float d = 1e5;
73
+ for (int i = 0; i < 3; i++) {
74
+ float x = (float(i) - 1.0) * uHalf.x * 0.62;
75
+ float sway = sin(uTime * 0.9 + float(i) * 1.7) * 0.08 * (-q.y - uHalf.y * 0.7);
76
+ vec3 a = vec3(x + sway, q.y, 0.0);
77
+ float inY = step(q.y, -uHalf.y * 0.55);
78
+ float dd = length(q.xz - a.xz) - 0.006;
79
+ d = min(d, mix(1e5, dd, inY));
80
+ }
81
+ return d;
82
+ }
83
+
84
+ float map(vec3 p) {
85
+ float d = mapText(p);
86
+ d = min(d, mapStrings(p));
87
+ if (uFloor > 0.5) d = min(d, p.y - floorY);
88
+ return d;
89
+ }
90
+
91
+ vec3 calcNormal(vec3 p) {
92
+ const vec2 k = vec2(1, -1);
93
+ float e = 0.003;
94
+ return normalize(k.xyy * map(p + k.xyy * e) + k.yyx * map(p + k.yyx * e) + k.yxy * map(p + k.yxy * e) + k.xxx * map(p + k.xxx * e));
95
+ }
96
+
97
+ float trace(vec3 ro, vec3 rd, float tmax) {
98
+ float t = 0.0;
99
+ for (int i = 0; i < 140; i++) {
100
+ float d = map(ro + rd * t);
101
+ if (d < 0.00012 * t + 0.0002) return t;
102
+ t += d * 0.85;
103
+ if (t > tmax) break;
104
+ }
105
+ return -1.0;
106
+ }
107
+
108
+ float softShadow(vec3 ro, vec3 rd) {
109
+ float res = 1.0, t = 0.02;
110
+ for (int i = 0; i < 40; i++) {
111
+ float h = mapText(ro + rd * t);
112
+ res = min(res, 10.0 * h / t);
113
+ t += clamp(h, 0.02, 0.25);
114
+ if (res < 0.002 || t > 6.0) break;
115
+ }
116
+ return clamp(res, 0.0, 1.0);
117
+ }
118
+
119
+ float ao(vec3 p, vec3 n) {
120
+ float occ = 0.0, s = 1.0;
121
+ for (int i = 1; i <= 5; i++) {
122
+ float h = 0.03 * float(i) * float(i);
123
+ occ += (h - map(p + n * h)) * s;
124
+ s *= 0.6;
125
+ }
126
+ return clamp(1.0 - 1.6 * occ, 0.0, 1.0);
127
+ }
128
+
129
+ // A photo-studio environment: dark floor, gradient walls, long softboxes and a ring light.
130
+ vec3 studio(vec3 r) {
131
+ float a = uTime * uEnvSpeed;
132
+ r = rotY(a) * r;
133
+ vec3 c = mix(uBg1 * 0.6 + 0.04, uBg0 * 1.6 + 0.08, smoothstep(-0.25, 0.9, r.y));
134
+ c = mix(c, uBg1 * 0.15, smoothstep(-0.02, -0.35, r.y));
135
+ // broad gradient bands so curved surfaces always pick up something
136
+ c += uLight * 0.35 * smoothstep(0.6, 1.0, sin(atan(r.x, r.z) * 3.0 + 0.6) * 0.5 + 0.5) * smoothstep(-0.1, 0.4, r.y);
137
+ // horizon line
138
+ c += uLight * 0.9 * exp(-abs(r.y + 0.02) * 60.0);
139
+ // overhead strip softboxes
140
+ float strip1 = smoothstep(0.08, 0.06, abs(r.x - 0.35)) * smoothstep(0.35, 0.45, r.y);
141
+ float strip2 = smoothstep(0.05, 0.03, abs(r.x + 0.55)) * smoothstep(0.1, 0.25, r.y) * smoothstep(0.95, 0.75, r.y);
142
+ float box = smoothstep(0.02, 0.0, max(abs(r.z + 0.55) - 0.32, abs(r.y - 0.25) - 0.18)) * step(0.0, r.x);
143
+ float ring = smoothstep(0.03, 0.0, abs(length(r.xy - vec2(-0.2, 0.55)) - 0.22)) * step(0.0, -r.z);
144
+ c += uLight * (strip1 * 6.0 + strip2 * 4.0 + box * 3.0 + ring * 2.5);
145
+ // behind the camera: a big diffused panel split by a dark gap, so front faces read as polished metal
146
+ float fz = smoothstep(0.35, 0.95, r.z);
147
+ float diag = r.x * 0.8 + r.y * 0.6;
148
+ float panel = smoothstep(-0.05, 0.05, diag + 0.1) * smoothstep(0.75, 0.2, diag) + 0.55 * smoothstep(-0.3, -0.18, diag) * smoothstep(-0.05, -0.15, diag);
149
+ c += uLight * fz * panel * 1.1;
150
+ return c;
151
+ }
152
+ `,BG=`
153
+ vec3 background(vec2 uv, vec2 fc) {
154
+ vec3 c = mix(uBg1, uBg0, smoothstep(-0.6, 0.6, uv.y));
155
+ return c;
156
+ }
157
+ `,GLASS_BG=`
158
+ // moving colour fields behind the glass
159
+ vec3 background(vec2 uv, vec2 fc) {
160
+ float t = uTime * 0.12;
161
+ vec3 c = mix(uBg1, uBg0, smoothstep(-0.7, 0.7, uv.y));
162
+ for (int i = 0; i < 4; i++) {
163
+ float fi = float(i);
164
+ vec2 cp = vec2(sin(t * (1.0 + fi * 0.3) + fi * 2.1) * 0.75, cos(t * (0.8 + fi * 0.2) + fi * 1.3) * 0.38);
165
+ vec3 col = fi < 0.5 ? uA : fi < 1.5 ? uB : fi < 2.5 ? uC : mix(uA, uB, 0.5);
166
+ c = mix(c, col, smoothstep(0.75, 0.0, length(uv - cp)) * 0.85);
167
+ }
168
+ // fine stripes make refraction readable
169
+ c *= 0.92 + 0.08 * smoothstep(0.3, 0.7, abs(fract(uv.x * 9.0 + uv.y * 3.0) - 0.5) * 2.0);
170
+ return c;
171
+ }
172
+ `,MAIN=material=>`
173
+ void main() {
174
+ vec2 fc = gl_FragCoord.xy;
175
+ vec2 uv = (fc - 0.5 * uRes) / uRes.y;
176
+ float t = uTime;
177
+ float aspect = uRes.x / uRes.y;
178
+
179
+ // object motion: gentle sway, follows the pointer
180
+ float sway = sin(t * 0.45) * uSpin + uMouse.x * 0.45;
181
+ float tilt = sin(t * 0.33 + 1.0) * uSpin * 0.35 - uMouse.y * 0.25;
182
+ objRot = rotX(tilt) * rotY(sway);
183
+ // fit text width to the screen (and never taller than ~42% of it)
184
+ float fov = 1.8;
185
+ float dist = max(uHalf.x * 2.0 * fov / (uSize * min(aspect, 2.2)), uHalf.y * 2.0 * fov / 0.42);
186
+ objOff = vec3(0.0, sin(t * 0.8) * uFloat + uY * dist / fov, 0.0);
187
+ floorY = uY * dist / fov - uHalf.y - 0.45;
188
+ vec3 ro = vec3(0.0, 0.0, dist);
189
+ vec3 rd = normalize(vec3(uv, -fov));
190
+
191
+ vec3 col = background(uv, fc);
192
+ float tmax = dist + 8.0;
193
+ float th = trace(ro, rd, tmax);
194
+
195
+ if (th > 0.0) {
196
+ vec3 p = ro + rd * th;
197
+ vec3 n = calcNormal(p);
198
+ bool isFloor = uFloor > 0.5 && p.y < floorY + 0.02 && mapText(p) > 0.01;
199
+ vec3 L = normalize(vec3(0.55, 0.85, 0.6));
200
+ ${MATERIAL[material]}
201
+ }
202
+
203
+ col = aces(col * 1.0);
204
+ col = toSRGB(col);
205
+ col += grain(fc, t) * 0.012;
206
+ fragColor = vec4(col, 1.0);
207
+ }
208
+ `,MATERIAL={chrome:`
209
+ if (isFloor) {
210
+ vec3 r = reflect(rd, n);
211
+ float tr = trace(p + n * 0.01, r, 8.0);
212
+ vec3 rc = col * 0.6;
213
+ if (tr > 0.0) { vec3 q = p + n * 0.01 + r * tr; vec3 qn = calcNormal(q); rc = studio(reflect(r, qn)) * letterColor(q) * 0.7; }
214
+ float fr = 0.04 + 0.5 * pow(1.0 - max(dot(n, -rd), 0.0), 5.0);
215
+ col = mix(col * 0.8, rc, fr + 0.15) * smoothstep(9.0, 2.0, length(p.xz));
216
+ } else {
217
+ vec3 r = reflect(rd, n);
218
+ vec3 tint = letterColor(p);
219
+ vec3 rc = studio(r);
220
+ // one inter-reflection so the letters mirror each other
221
+ float tr = trace(p + n * 0.004, r, 6.0);
222
+ if (tr > 0.0) { vec3 q = p + n * 0.004 + r * tr; vec3 qn = calcNormal(q); rc = studio(reflect(r, qn)) * letterColor(q) * 0.85; }
223
+ float ndv = max(dot(n, -rd), 0.0);
224
+ vec3 F = tint + (1.0 - tint) * pow(1.0 - ndv, 5.0);
225
+ col = rc * F;
226
+ col += uLight * pow(max(dot(r, L), 0.0), 160.0) * 3.0;
227
+ col *= 0.65 + 0.35 * ao(p, n);
228
+ }`,glass:`
229
+ float ndv = max(dot(n, -rd), 0.0);
230
+ float fres = 0.04 + 0.96 * pow(1.0 - ndv, 5.0);
231
+ vec3 refl = studio(reflect(rd, n)) * 0.55;
232
+ vec3 acc = vec3(0.0);
233
+ for (int ch = 0; ch < 3; ch++) {
234
+ float ior = 1.45 + (float(ch) - 1.0) * 0.035 * uDisp;
235
+ vec3 rdi = refract(rd, n, 1.0 / ior);
236
+ // march through the inside to the back face
237
+ vec3 q = p - n * 0.003;
238
+ float s = 0.0;
239
+ for (int i = 0; i < 48; i++) {
240
+ float d = -mapText(q + rdi * s);
241
+ if (d < 0.0008) break;
242
+ s += max(d, 0.004);
243
+ }
244
+ vec3 qb = q + rdi * s;
245
+ vec3 nb = -calcNormal(qb);
246
+ vec3 rdo = refract(rdi, nb, ior);
247
+ if (dot(rdo, rdo) < 1e-4) rdo = reflect(rdi, nb);
248
+ vec2 suv = uv + rdo.xy * 0.22 + rdi.xy * s * 0.05;
249
+ vec3 b = background(suv, fc);
250
+ b *= exp(-s * (1.0 - letterColor(p)) * 0.9);
251
+ acc[ch] = b[ch];
252
+ }
253
+ col = mix(acc, refl, fres);
254
+ col += uLight * pow(max(dot(reflect(rd, n), L), 0.0), 220.0) * 2.5;
255
+ col += uLight * 0.25 * pow(1.0 - ndv, 3.0);`,clay:`
256
+ vec3 base = isFloor ? mix(uBg1, uBg0, 0.35) : letterColor(p);
257
+ float dif = clamp(dot(n, L) * 0.5 + 0.5, 0.0, 1.0);
258
+ dif *= dif;
259
+ float sh = softShadow(p + n * 0.01, L);
260
+ float occ = ao(p, n);
261
+ float rim = pow(1.0 - max(dot(n, -rd), 0.0), 3.0);
262
+ vec3 sky = mix(uBg1, uBg0, 0.7);
263
+ vec3 lit = base * (0.42 * sky * occ + 0.95 * uLight * dif * mix(0.35, 1.0, sh));
264
+ lit += base * rim * 0.35 * occ;
265
+ if (!isFloor) {
266
+ vec3 h = normalize(L - rd);
267
+ lit += uLight * pow(max(dot(n, h), 0.0), 60.0) * uGloss * sh * 0.9;
268
+ // subtle surface tooth
269
+ lit *= 0.97 + 0.03 * vnoise(p.xy * 90.0);
270
+ } else {
271
+ float fade = smoothstep(9.0, 1.5, length(p.xz));
272
+ lit = mix(col, lit, fade);
273
+ }
274
+ col = lit;`,foil:`
275
+ if (isFloor) {
276
+ float sh = softShadow(p + n * 0.01, L);
277
+ vec3 fl = mix(uBg1, uBg0, 0.3) * (0.55 + 0.45 * sh);
278
+ col = mix(col, fl, smoothstep(9.0, 1.5, length(p.xz)));
279
+ } else if (mapStrings(p) < mapText(p)) {
280
+ col = vec3(0.85) * (0.6 + 0.4 * dot(n, L));
281
+ } else {
282
+ vec3 q = objRot * (p - objOff);
283
+ // crinkles: low-amplitude noise on the normal
284
+ vec3 bump = vec3(vnoise(q.xy * 18.0) - 0.5, vnoise(q.yx * 18.0 + 3.0) - 0.5, 0.0) * 0.18;
285
+ vec3 nn = normalize(n + bump * (0.3 + 0.7 * smoothstep(0.0, 0.2, uDepth - abs(q.z))));
286
+ vec3 r = reflect(rd, nn);
287
+ vec3 tint = letterColor(p);
288
+ vec3 rc = studio(r);
289
+ float ndv = max(dot(nn, -rd), 0.0);
290
+ vec3 F = tint * 0.85 + (1.0 - tint * 0.85) * pow(1.0 - ndv, 4.0);
291
+ col = rc * F + tint * 0.08;
292
+ col += uLight * pow(max(dot(r, L), 0.0), 90.0) * 2.0;
293
+ // seam around the edge
294
+ float seam = smoothstep(0.012, 0.0, abs(q.z)) * 0.5;
295
+ col *= 1.0 - seam;
296
+ }`};function text3dScene(ctx,o){let canvas=ctx.canvas({adaptive:!0}),gl=getGL(canvas),prog=pass(gl,COMMON+(o.material==="glass"?GLASS_BG:BG)+MAIN(o.material)),code=ctx.copy.code||"404",tw=1024,th=400,sdf=textSDF(code,{width:tw,height:th,font:o.font??SANS,weight:o.weight??800,fit:.86,tracking:-.01}),tex=dataTexture(gl,sdf.data,sdf.width,sdf.height,1),halfX=2,scale=halfX*2/tw,halfY=th*scale/2,c=o.colors,u={uSdf:tex,uHalf:[halfX,halfY],uScale:scale,uDepth:o.depth??.22,uInflate:o.inflate??0,uRound:o.round??.04,uSpin:o.spin??.25,uFloat:o.float??.03,uGloss:o.gloss??.4,uEnvSpeed:o.envSpeed??.08,uStrings:o.strings?1:0,uDisp:o.dispersion??1,uFloor:o.floor?1:0,uSize:o.scale??.62,uY:o.y??.08,uA:linear(c.a),uB:linear(c.b),uC:linear(c.c??c.a),uBg0:linear(c.bg0),uBg1:linear(c.bg1),uLight:linear(c.light??"#ffffff")};return{frame(t){prog.draw({...u,uTime:t,uMouse:[ctx.pointer.sx,ctx.pointer.sy]})}}}export{text3dScene};
@@ -0,0 +1 @@
1
+ var __defProp=Object.defineProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})};export{__export};
@@ -0,0 +1 @@
1
+ var ICONS={back:'<svg data-dir="back" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M13 8H3M7 4 3 8l4 4"/></svg>',arrow:'<svg data-dir="arrow" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 11 11 5M6 5h5v5"/></svg>',home:'<svg data-dir="home" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.5 7.5 8 3l5.5 4.5M4 6.5V13h8V6.5"/></svg>'};function el(tag,cls,text){let n=document.createElement(tag);return n.className=cls,text!==void 0&&(n.textContent=text),n}function buildAction(a,onNavigate){let variant=a.variant??"primary",node=a.href!==void 0?el("a",`lp-btn lp-btn--${variant}`):el("button",`lp-btn lp-btn--${variant}`);node instanceof HTMLAnchorElement?node.href=a.href:node.type="button";let icon=a.icon??(variant==="primary"?"back":"arrow"),label=el("span","lp-btn-label",a.label);if(icon!=="none"&&ICONS[icon]){let holder=document.createElement("span");holder.innerHTML=ICONS[icon];let svg=holder.firstChild;icon==="arrow"?node.append(label,svg):node.append(svg,label)}else node.append(label);return node.addEventListener("click",ev=>{let e=ev;a.onClick?.(e),!e.defaultPrevented&&a.href!==void 0&&onNavigate&&!(e.metaKey||e.ctrlKey||e.shiftKey||e.button===1)&&(e.preventDefault(),onNavigate(a.href,e))}),node}function buildOverlay(copy,layout,onNavigate){let overlay=el("div",`lp-overlay lp-layout-${layout} lp-fadein`),head=el("div","lp-head");if(copy.eyebrow&&head.append(el("p","lp-eyebrow",copy.eyebrow)),copy.code){let code=el("div","lp-code",copy.code);code.setAttribute("aria-hidden","true"),head.append(code)}let body=el("div","lp-body");if(copy.title){let h1=el("h1","lp-title");copy.code&&h1.append(el("span","lp-sr",`Error ${copy.code}: `)),h1.append(copy.title),body.append(h1)}if(copy.message&&body.append(el("p","lp-message",copy.message)),copy.actions?.length){let actions=el("div","lp-actions");for(let a of copy.actions)actions.append(buildAction(a,onNavigate));body.append(actions)}return overlay.append(head,body),overlay}export{buildAction,buildOverlay};
@@ -0,0 +1 @@
1
+ import{getGL,pass}from"./chunk-SH72TE6I.js";function shaderScene(ctx,o){let canvas=ctx.canvas({scale:o.scale??1,adaptive:o.adaptive??!0,z:o.z}),gl=getGL(canvas),p=pass(gl,o.frag);return o.init?.(gl,p),{gl,pass:p,frame(t,dt){p.draw({uTime:t,uMouse:[ctx.pointer.sx,ctx.pointer.sy],...o.uniforms?.(t,dt)??{}})}}}export{shaderScene};
@@ -0,0 +1 @@
1
+ function canvas2d(ctx,o={}){let canvas=ctx.canvas({z:o.z,scale:o.scale}),g=canvas.getContext("2d",{alpha:o.alpha??!1}),c={canvas,g,get w(){return ctx.width},get h(){return ctx.height},reset(){let sx=canvas.width/Math.max(1,ctx.width),sy=canvas.height/Math.max(1,ctx.height);g.setTransform(sx,0,0,sy,0,0)}};return c.reset(),c}function glowSprite(color,size=64,hardness=.15){let c=document.createElement("canvas");c.width=c.height=size;let g=c.getContext("2d"),grd=g.createRadialGradient(size/2,size/2,0,size/2,size/2,size/2);return grd.addColorStop(0,color),grd.addColorStop(hardness,color),grd.addColorStop(1,"rgba(0,0,0,0)"),g.fillStyle=grd,g.fillRect(0,0,size,size),c}export{canvas2d,glowSprite};
@@ -0,0 +1 @@
1
+ import{buildAction}from"./chunk-B2NBRLO2.js";var esc=s=>s.replace(/[&<>"]/g,c=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[c]),path=()=>typeof location<"u"?location.pathname+location.search:"/missing-page";function actions(ctx,className="lp-actions"){let box=document.createElement("div");box.className=className;for(let a of ctx.copy.actions)box.append(buildAction(a,ctx.navigate));return box}function layer(ctx,className,html,vars={}){let el=document.createElement("div");el.className=className;for(let[k,v]of Object.entries(vars))el.style.setProperty(`--${k}`,String(v));return el.innerHTML=html,ctx.root.append(el),el}var sr=code=>`<span class="lp-sr">Error ${esc(code)}: </span>`;export{esc,path,actions,layer,sr};
@@ -0,0 +1 @@
1
+ import{__export}from"./chunk-7XMDQMDO.js";var util_exports={};__export(util_exports,{TAU:()=>TAU,clamp:()=>clamp,damp:()=>damp,fract:()=>fract,isBrowser:()=>isBrowser,lerp:()=>lerp,linear:()=>linear,mixColor:()=>mixColor,rgb:()=>rgb,rgba:()=>rgba,rng:()=>rng,smoothstep:()=>smoothstep});var clamp=(x,a=0,b=1)=>x<a?a:x>b?b:x,lerp=(a,b,t)=>a+(b-a)*t,smoothstep=(a,b,x)=>{let t=clamp((x-a)/(b-a));return t*t*(3-2*t)},fract=x=>x-Math.floor(x),TAU=Math.PI*2,damp=(a,b,lambda,dt)=>lerp(a,b,1-Math.exp(-lambda*dt));function rng(seed=1){let s=seed>>>0||1;return()=>{s=s+1831565813>>>0;let t=s;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function rgb(input){let s=input.trim();if(s.startsWith("#")){let h=s.slice(1);(h.length===3||h.length===4)&&(h=h.split("").map(c=>c+c).join(""));let n=parseInt(h.slice(0,6),16);return[(n>>16&255)/255,(n>>8&255)/255,(n&255)/255]}let m=s.match(/[\d.]+/g);return m&&m.length>=3?[+m[0]/255,+m[1]/255,+m[2]/255]:[1,1,1]}function linear(input){return rgb(input).map(c=>c<=.04045?c/12.92:Math.pow((c+.055)/1.055,2.4))}function mixColor(a,b,t){let ca=rgb(a),cb=rgb(b),c=ca.map((v,i)=>Math.round(lerp(v,cb[i],t)*255));return`rgb(${c[0]},${c[1]},${c[2]})`}function rgba(color,alpha){let[r,g,b]=rgb(color);return`rgba(${Math.round(r*255)},${Math.round(g*255)},${Math.round(b*255)},${alpha})`}var isBrowser=()=>typeof window<"u"&&typeof document<"u";export{clamp,damp,rng,rgb,linear,rgba,isBrowser,util_exports};
@@ -0,0 +1 @@
1
+ function defineScene(def){return def}var DEFAULT_COPY={code:"404",eyebrow:"Error 404",title:"Page not found",message:"The page you were looking for doesn't exist or has moved.",actions:[{label:"Back to home",href:"/",variant:"primary",icon:"back"}]},COPY_KEYS=["code","eyebrow","title","message","actions"];function resolve(def,opts={}){let presetId=opts.preset&&def.presets?.[opts.preset]?opts.preset:"default",preset=presetId==="default"?void 0:def.presets[presetId],copy={...DEFAULT_COPY};for(let layer of[def.copy,preset,opts])if(layer)for(let k of COPY_KEYS){let v=layer[k];v!=null&&(copy[k]=v)}return{preset:presetId,params:{...def.params,...preset?.params??{},...opts.params??{}},copy,theme:{...def.theme??{},...preset?.theme??{},...opts.theme??{}}}}function presetIds(def){return["default",...Object.keys(def.presets??{})]}export{defineScene,DEFAULT_COPY,resolve,presetIds};
@@ -0,0 +1,4 @@
1
+ import{SANS,textCanvas}from"./chunk-3ISI6SOJ.js";var KEYMAP={ArrowLeft:"left",KeyA:"left",ArrowRight:"right",KeyD:"right",ArrowUp:"up",KeyW:"up",ArrowDown:"down",KeyS:"down",Space:"action",Enter:"action"};function input(ctx,opts={}){let pressedFlag=!1,st={left:!1,right:!1,up:!1,down:!1,action:!1,playing:!1,swipe:null,pressed(){let p=pressedFlag;return pressedFlag=!1,p}},inEditable=()=>{let a=document.activeElement;return!!a&&(a.tagName==="INPUT"||a.tagName==="TEXTAREA"||a.isContentEditable)};ctx.onWindow("keydown",e=>{let k=KEYMAP[e.code];if(!k||!ctx.visible()||inEditable()||e.metaKey||e.ctrlKey)return;let r=ctx.root.getBoundingClientRect();r.top<innerHeight*.5&&r.bottom>innerHeight*.5&&e.preventDefault(),!st[k]&&k==="action"&&(pressedFlag=!0),!st[k]&&k==="up"&&(pressedFlag=!0),st[k]=!0,st.playing=!0}),ctx.onWindow("keyup",e=>{let k=KEYMAP[e.code];k&&(st[k]=!1)});let sx=0,sy=0;return ctx.on("pointerdown",e=>{e.target.closest("a,button")||(sx=e.clientX,sy=e.clientY,pressedFlag=!0,opts.pointerPlays!==!1&&(st.playing=!0))}),ctx.on("pointerup",e=>{let dx=e.clientX-sx,dy=e.clientY-sy;Math.hypot(dx,dy)>30&&(st.swipe=Math.abs(dx)>Math.abs(dy)?dx>0?"right":"left":dy>0?"down":"up")}),opts.pointerPlays&&ctx.on("pointermove",()=>st.playing=!0),st}function codeBitmap(code,cols,rows,weight=900){let d=textCanvas(code,{width:cols,height:rows,font:SANS,weight,fit:1}).getContext("2d").getImageData(0,0,cols,rows).data,out=[];for(let i=0;i<cols*rows;i++)out.push(d[i*4+3]>120);return out}var PIXEL_FONT='"Press Start 2P","Silkscreen","VT323",ui-monospace,SFMono-Regular,Menlo,monospace';function hud(g,text,x,y,size,color,align="left"){g.font=`700 ${size}px ${PIXEL_FONT}`,g.textAlign=align,g.textBaseline="top",g.fillStyle=color,g.fillText(text,x,y)}function loadHigh(key){try{return Number(localStorage.getItem(`lostpage:${key}`)||0)}catch{return 0}}function saveHigh(key,v){try{localStorage.setItem(`lostpage:${key}`,String(v))}catch{}}var GAME_CSS=`& .lp-title{--lp-title-size:clamp(22px,2.6vw,34px)}
2
+ & .lp-message{margin-top:8px}
3
+ & .lp-actions{margin-top:16px}
4
+ & .lp-eyebrow{font-family:var(--lp-font-mono);letter-spacing:.2em}`;export{input,codeBitmap,PIXEL_FONT,hud,loadHigh,saveHigh,GAME_CSS};
@@ -0,0 +1,75 @@
1
+ import{__export}from"./chunk-7XMDQMDO.js";var glsl_exports={};__export(glsl_exports,{HASH:()=>HASH,NOISE:()=>NOISE,POST:()=>POST,SDF2:()=>SDF2,SIMPLEX:()=>SIMPLEX});var HASH=`
2
+ float hash11(float p){ p = fract(p * .1031); p *= p + 33.33; p *= p + p; return fract(p); }
3
+ float hash12(vec2 p){ vec3 p3 = fract(vec3(p.xyx) * .1031); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.x + p3.y) * p3.z); }
4
+ vec2 hash22(vec2 p){ vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.xx + p3.yz) * p3.zy); }
5
+ vec3 hash32(vec2 p){ vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); p3 += dot(p3, p3.yxz + 33.33); return fract((p3.xxy + p3.yzz) * p3.zyx); }
6
+ float hash13(vec3 p3){ p3 = fract(p3 * .1031); p3 += dot(p3, p3.zyx + 31.32); return fract((p3.x + p3.y) * p3.z); }
7
+ `,NOISE=`
8
+ float vnoise(vec2 p){
9
+ vec2 i = floor(p), f = fract(p);
10
+ vec2 u = f * f * (3.0 - 2.0 * f);
11
+ return mix(mix(hash12(i), hash12(i + vec2(1,0)), u.x), mix(hash12(i + vec2(0,1)), hash12(i + vec2(1,1)), u.x), u.y);
12
+ }
13
+ float vnoise3(vec3 p){
14
+ vec3 i = floor(p), f = fract(p);
15
+ vec3 u = f * f * (3.0 - 2.0 * f);
16
+ return mix(mix(mix(hash13(i), hash13(i + vec3(1,0,0)), u.x), mix(hash13(i + vec3(0,1,0)), hash13(i + vec3(1,1,0)), u.x), u.y),
17
+ mix(mix(hash13(i + vec3(0,0,1)), hash13(i + vec3(1,0,1)), u.x), mix(hash13(i + vec3(0,1,1)), hash13(i + vec3(1,1,1)), u.x), u.y), u.z);
18
+ }
19
+ float fbm(vec2 p){ float a = .5, s = 0.; mat2 r = mat2(.8, -.6, .6, .8); for(int i = 0; i < 6; i++){ s += a * vnoise(p); p = r * p * 2.03 + 11.7; a *= .5; } return s; }
20
+ float fbm3(vec3 p){ float a = .5, s = 0.; for(int i = 0; i < 5; i++){ s += a * vnoise3(p); p = p * 2.02 + vec3(13.1, 7.7, 3.3); a *= .5; } return s; }
21
+ `,SIMPLEX=`
22
+ vec3 _sxp(vec3 x){ return mod(((x * 34.0) + 1.0) * x, 289.0); }
23
+ float snoise(vec2 v){
24
+ const vec4 C = vec4(0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439);
25
+ vec2 i = floor(v + dot(v, C.yy));
26
+ vec2 x0 = v - i + dot(i, C.xx);
27
+ vec2 i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
28
+ vec4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1;
29
+ i = mod(i, 289.0);
30
+ vec3 p = _sxp(_sxp(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0));
31
+ vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0);
32
+ m = m * m; m = m * m;
33
+ vec3 x = 2.0 * fract(p * C.www) - 1.0;
34
+ vec3 h = abs(x) - 0.5;
35
+ vec3 ox = floor(x + 0.5);
36
+ vec3 a0 = x - ox;
37
+ m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);
38
+ vec3 g; g.x = a0.x * x0.x + h.x * x0.y; g.yz = a0.yz * x12.xz + h.yz * x12.yw;
39
+ return 130.0 * dot(m, g);
40
+ }
41
+ `,POST=`
42
+ vec3 aces(vec3 x){ return clamp((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14), 0.0, 1.0); }
43
+ vec3 toSRGB(vec3 c){ c = max(c, vec3(0.0)); return mix(c * 12.92, 1.055 * pow(max(c, vec3(1e-6)), vec3(1.0 / 2.4)) - 0.055, step(0.0031308, c)); }
44
+ vec3 toLinear(vec3 c){ return pow(max(c, vec3(1e-6)), vec3(2.2)); }
45
+ float grain(vec2 fc, float t){ return fract(sin(dot(fc + fract(t) * 91.7, vec2(12.9898, 78.233))) * 43758.5453) - 0.5; }
46
+ float vignette(vec2 uv, float k){ uv = uv * (1.0 - uv.yx); return pow(max(uv.x * uv.y * 16.0, 1e-5), k); }
47
+ `,SDF2=`
48
+ float sdBox(vec2 p, vec2 b){ vec2 d = abs(p) - b; return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); }
49
+ float sdRoundBox(vec2 p, vec2 b, float r){ return sdBox(p, b - r) - r; }
50
+ float sdSeg(vec2 p, vec2 a, vec2 b){ vec2 pa = p - a, ba = b - a; float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0); return length(pa - ba * h); }
51
+ float sdCircle(vec2 p, float r){ return length(p) - r; }
52
+ float sdTrap(vec2 p, float r1, float r2, float he){
53
+ vec2 k1 = vec2(r2, he); vec2 k2 = vec2(r2 - r1, 2.0 * he);
54
+ p.x = abs(p.x);
55
+ vec2 ca = vec2(p.x - min(p.x, (p.y < 0.0) ? r1 : r2), abs(p.y) - he);
56
+ vec2 cb = p - k1 + k2 * clamp(dot(k1 - p, k2) / dot(k2, k2), 0.0, 1.0);
57
+ float s = (cb.x < 0.0 && ca.y < 0.0) ? -1.0 : 1.0;
58
+ return s * sqrt(min(dot(ca, ca), dot(cb, cb)));
59
+ }
60
+ mat2 rot(float a){ float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }
61
+ `;var gl_exports={};__export(gl_exports,{FS_PRELUDE:()=>FS_PRELUDE,FULLSCREEN_VS:()=>FULLSCREEN_VS,dataTexture:()=>dataTexture,getGL:()=>getGL,pass:()=>pass,program:()=>program,swapTargets:()=>swapTargets,target:()=>target,texture:()=>texture,updateTexture:()=>updateTexture});function getGL(canvas,attrs={}){let gl=canvas.getContext("webgl2",{alpha:!1,antialias:!1,depth:!1,stencil:!1,premultipliedAlpha:!0,powerPreference:"high-performance",preserveDrawingBuffer:!1,...attrs});if(!gl)throw new Error("WebGL2 unavailable");return canvas.__lpgl=gl,gl}var FULLSCREEN_VS=`#version 300 es
62
+ in vec2 aPos;
63
+ out vec2 vUv;
64
+ void main(){ vUv = aPos * 0.5 + 0.5; gl_Position = vec4(aPos, 0.0, 1.0); }`,FS_PRELUDE=`#version 300 es
65
+ precision highp float;
66
+ precision highp int;
67
+ in vec2 vUv;
68
+ out vec4 fragColor;
69
+ uniform vec2 uRes;
70
+ uniform float uTime;
71
+ uniform vec2 uMouse;
72
+ `;function compileShader(gl,type,src){let sh=gl.createShader(type);if(gl.shaderSource(sh,src),gl.compileShader(sh),!gl.getShaderParameter(sh,gl.COMPILE_STATUS)){let log=gl.getShaderInfoLog(sh)??"",lines=src.split(`
73
+ `),m=log.match(/ERROR: \d+:(\d+)/),at=m?+m[1]:0,excerpt=at?lines.slice(Math.max(0,at-3),at+2).map((l,i)=>`${at-2+i}: ${l}`).join(`
74
+ `):"";throw gl.deleteShader(sh),new Error(`[lostpage] shader compile failed: ${log}
75
+ ${excerpt}`)}return sh}function program(gl,vs,fs){let p=gl.createProgram();if(gl.attachShader(p,compileShader(gl,gl.VERTEX_SHADER,vs)),gl.attachShader(p,compileShader(gl,gl.FRAGMENT_SHADER,fs)),gl.bindAttribLocation(p,0,"aPos"),gl.linkProgram(p),!gl.getProgramParameter(p,gl.LINK_STATUS))throw new Error(`[lostpage] link failed: ${gl.getProgramInfoLog(p)}`);return p}var triangles=new WeakMap;function fullscreenVAO(gl){let vao=triangles.get(gl);if(vao)return vao;vao=gl.createVertexArray(),gl.bindVertexArray(vao);let buf=gl.createBuffer();return gl.bindBuffer(gl.ARRAY_BUFFER,buf),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW),gl.enableVertexAttribArray(0),gl.vertexAttribPointer(0,2,gl.FLOAT,!1,0,0),gl.bindVertexArray(null),triangles.set(gl,vao),vao}function target(gl,w,h,o={}){o.float&&gl.getExtension("EXT_color_buffer_float"),o.float&&gl.getExtension("OES_texture_float_linear");let tex=gl.createTexture(),fbo=gl.createFramebuffer(),filter=o.filter==="nearest"?gl.NEAREST:gl.LINEAR,wrap=o.wrap==="repeat"?gl.REPEAT:gl.CLAMP_TO_EDGE,ch=o.channels??4,half=o.half??!0,fmt=ch===1?gl.RED:ch===2?gl.RG:gl.RGBA,internal=o.float?half?ch===1?gl.R16F:ch===2?gl.RG16F:gl.RGBA16F:ch===1?gl.R32F:ch===2?gl.RG32F:gl.RGBA32F:ch===1?gl.R8:ch===2?gl.RG8:gl.RGBA8,type=o.float?half?gl.HALF_FLOAT:gl.FLOAT:gl.UNSIGNED_BYTE,t={fbo,tex,width:0,height:0,resize(nw,nh){nw=Math.max(1,Math.round(nw)),nh=Math.max(1,Math.round(nh)),!(nw===t.width&&nh===t.height)&&(t.width=nw,t.height=nh,gl.bindTexture(gl.TEXTURE_2D,tex),gl.texImage2D(gl.TEXTURE_2D,0,internal,nw,nh,0,fmt,type,null),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,filter),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,filter),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,wrap),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,wrap),gl.bindFramebuffer(gl.FRAMEBUFFER,fbo),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,tex,0),gl.viewport(0,0,nw,nh),gl.clearColor(0,0,0,0),gl.clear(gl.COLOR_BUFFER_BIT),gl.bindFramebuffer(gl.FRAMEBUFFER,null))}};return t.resize(w,h),t}function swapTargets(gl,w,h,o={}){let pair={read:target(gl,w,h,o),write:target(gl,w,h,o),swap(){let r=pair.read;pair.read=pair.write,pair.write=r},resize(nw,nh){pair.read.resize(nw,nh),pair.write.resize(nw,nh)}};return pair}function texture(gl,source,o={}){let tex=gl.createTexture();return updateTexture(gl,tex,source,o),tex}function updateTexture(gl,tex,source,o={}){gl.bindTexture(gl.TEXTURE_2D,tex),gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,o.flipY??!0),gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),source?gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,source):gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,1,1,0,gl.RGBA,gl.UNSIGNED_BYTE,new Uint8Array([0,0,0,255]));let f=o.filter??"linear";gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,f==="nearest"?gl.NEAREST:f==="mipmap"?gl.LINEAR_MIPMAP_LINEAR:gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,f==="nearest"?gl.NEAREST:gl.LINEAR);let w=o.wrap==="repeat"?gl.REPEAT:gl.CLAMP_TO_EDGE;gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,w),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,w),f==="mipmap"&&source&&gl.generateMipmap(gl.TEXTURE_2D),gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,!1)}function dataTexture(gl,data,w,h,channels=1,filter="linear"){let tex=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,tex),gl.pixelStorei(gl.UNPACK_ALIGNMENT,1),channels===1?gl.texImage2D(gl.TEXTURE_2D,0,gl.R16F,w,h,0,gl.RED,gl.FLOAT,data):gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA16F,w,h,0,gl.RGBA,gl.FLOAT,data);let f=filter==="linear"?gl.LINEAR:gl.NEAREST;return gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,f),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,f),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE),tex}function pass(gl,fs,vs=FULLSCREEN_VS){let src=fs.trimStart().startsWith("#version")?fs:FS_PRELUDE+fs,prog=program(gl,vs,src),vao=fullscreenVAO(gl),info=new Map,n=gl.getProgramParameter(prog,gl.ACTIVE_UNIFORMS),unit=0;for(let i=0;i<n;i++){let u=gl.getActiveUniform(prog,i),name=u.name.replace(/\[0\]$/,""),loc=gl.getUniformLocation(prog,u.name),isSampler=u.type===gl.SAMPLER_2D||u.type===gl.SAMPLER_3D||u.type===gl.SAMPLER_CUBE;info.set(name,{loc,type:u.type,unit:isSampler?unit++:-1})}function set(name,v){let u=info.get(name);if(!(!u||v===null||v===void 0))switch(u.type){case gl.FLOAT:return gl.uniform1f(u.loc,Number(v));case gl.INT:case gl.BOOL:return gl.uniform1i(u.loc,Number(v));case gl.FLOAT_VEC2:return gl.uniform2fv(u.loc,v);case gl.FLOAT_VEC3:return gl.uniform3fv(u.loc,v);case gl.FLOAT_VEC4:return gl.uniform4fv(u.loc,v);case gl.FLOAT_MAT3:return gl.uniformMatrix3fv(u.loc,!1,v);case gl.FLOAT_MAT4:return gl.uniformMatrix4fv(u.loc,!1,v);case gl.SAMPLER_2D:{gl.activeTexture(gl.TEXTURE0+u.unit);let tex=v.tex??v;return gl.bindTexture(gl.TEXTURE_2D,tex),gl.uniform1i(u.loc,u.unit)}}}return{program:prog,draw(uniforms={},to=null){gl.useProgram(prog);for(let k in uniforms)set(k,uniforms[k]);to?(gl.bindFramebuffer(gl.FRAMEBUFFER,to.fbo),gl.viewport(0,0,to.width,to.height),set("uRes",[to.width,to.height])):(gl.bindFramebuffer(gl.FRAMEBUFFER,null),gl.viewport(0,0,gl.drawingBufferWidth,gl.drawingBufferHeight),"uRes"in uniforms||set("uRes",[gl.drawingBufferWidth,gl.drawingBufferHeight])),gl.bindVertexArray(vao),gl.drawArrays(gl.TRIANGLES,0,3),gl.bindVertexArray(null)}}}export{HASH,NOISE,POST,glsl_exports,getGL,target,swapTargets,texture,updateTexture,dataTexture,pass,gl_exports};
@@ -0,0 +1,70 @@
1
+ import{buildOverlay}from"./chunk-B2NBRLO2.js";import{clamp,damp,isBrowser,rng}from"./chunk-FVGCB66F.js";import{resolve}from"./chunk-KIYSQVWX.js";var BASE_CSS=`
2
+ .lp-root{
3
+ --lp-bg:#0b0d12;--lp-fg:#f5f6f8;--lp-muted:color-mix(in srgb,var(--lp-fg) 64%,transparent);
4
+ --lp-accent:var(--lp-fg);--lp-accent-fg:var(--lp-bg);
5
+ --lp-font:"Inter","Manrope",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
6
+ --lp-font-display:var(--lp-font);
7
+ --lp-font-mono:"JetBrains Mono","IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
8
+ --lp-font-serif:"Fraunces","Playfair Display",ui-serif,Georgia,"Times New Roman",serif;
9
+ --lp-code-color:color-mix(in srgb,var(--lp-fg) 22%,transparent);
10
+ --lp-code-size:clamp(64px,23cqw,300px);--lp-code-weight:500;
11
+ --lp-title-size:clamp(22px,4.6cqw,58px);--lp-title-weight:500;
12
+ --lp-radius:999px;--lp-pad:clamp(14px,5cqw,72px);
13
+ position:relative;box-sizing:border-box;overflow:hidden;width:100%;
14
+ height:var(--lp-height,100vh);height:var(--lp-height,100dvh);
15
+ background:var(--lp-bg);color:var(--lp-fg);font-family:var(--lp-font);
16
+ isolation:isolate;container-type:size;container-name:lp;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
17
+ text-rendering:optimizeLegibility;touch-action:manipulation;
18
+ }
19
+ .lp-root *,.lp-root *::before,.lp-root *::after{box-sizing:border-box}
20
+ .lp-root [hidden]{display:none!important}
21
+ .lp-stage{position:absolute;inset:0;z-index:0;overflow:hidden}
22
+ .lp-stage>canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
23
+ .lp-custom{position:absolute;inset:0;z-index:3}
24
+ .lp-overlay{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;
25
+ justify-content:center;gap:clamp(12px,3cqh,32px);padding:var(--lp-pad) max(16px,var(--lp-pad));pointer-events:none}
26
+ .lp-overlay a,.lp-overlay button,.lp-overlay [data-lp-interactive]{pointer-events:auto}
27
+ .lp-head,.lp-body{display:flex;flex-direction:column;align-items:center;text-align:center;max-width:100%}
28
+ .lp-eyebrow{margin:0 0 6px;font-size:11px;font-weight:600;letter-spacing:.32em;text-transform:uppercase;color:var(--lp-muted)}
29
+ .lp-code{margin:0;font-family:var(--lp-font-display);font-weight:var(--lp-code-weight);font-size:var(--lp-code-size);
30
+ line-height:.86;letter-spacing:-.045em;color:var(--lp-code-color);user-select:none;white-space:nowrap}
31
+ .lp-title{margin:0;font-family:var(--lp-font-display);font-size:var(--lp-title-size);font-weight:var(--lp-title-weight);
32
+ letter-spacing:-.035em;line-height:1.04;text-wrap:balance}
33
+ .lp-message{margin:14px 0 0;max-width:36ch;color:var(--lp-muted);font-size:clamp(12.5px,1.25cqw,16px);line-height:1.6;text-wrap:pretty}
34
+ .lp-actions{margin-top:clamp(20px,3.2cqh,32px);display:flex;gap:10px 22px;flex-wrap:wrap;align-items:center;justify-content:center}
35
+ .lp-btn{display:inline-flex;align-items:center;gap:10px;font:inherit;font-size:13px;font-weight:500;letter-spacing:.01em;
36
+ text-decoration:none;cursor:pointer;border:0;transition:transform .25s cubic-bezier(.2,.8,.2,1),background .25s,color .25s,box-shadow .25s}
37
+ .lp-btn--primary{padding:13px 22px;border-radius:var(--lp-radius);background:var(--lp-accent);color:var(--lp-accent-fg)}
38
+ .lp-btn--primary:hover{transform:translateY(-1px);box-shadow:0 10px 30px -10px color-mix(in srgb,var(--lp-accent) 60%,transparent)}
39
+ .lp-btn--secondary{padding:13px 4px;background:none;color:var(--lp-fg);border-bottom:1px solid color-mix(in srgb,var(--lp-fg) 30%,transparent);border-radius:0}
40
+ .lp-btn--secondary:hover{border-bottom-color:var(--lp-fg)}
41
+ .lp-btn svg{width:14px;height:14px;flex:none;transition:transform .25s cubic-bezier(.2,.8,.2,1)}
42
+ .lp-btn:hover svg[data-dir=back]{transform:translateX(-3px)}
43
+ .lp-btn:hover svg[data-dir=arrow]{transform:translate(2px,-2px)}
44
+ .lp-btn:focus-visible{outline:2px solid var(--lp-accent);outline-offset:3px}
45
+ .lp-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
46
+
47
+ .lp-layout-split{justify-content:space-between}
48
+ .lp-layout-split .lp-head{padding-top:clamp(8px,4cqh,48px)}
49
+ .lp-layout-split .lp-body{padding-bottom:clamp(8px,3cqh,40px)}
50
+ .lp-layout-bottom{justify-content:flex-end}
51
+ .lp-layout-top{justify-content:flex-start}
52
+ .lp-layout-bottom-left{justify-content:flex-end;align-items:flex-start}
53
+ .lp-layout-bottom-left .lp-head,.lp-layout-bottom-left .lp-body,
54
+ .lp-layout-left .lp-head,.lp-layout-left .lp-body{align-items:flex-start;text-align:left}
55
+ .lp-layout-bottom-left .lp-actions,.lp-layout-left .lp-actions{justify-content:flex-start}
56
+ .lp-layout-left{align-items:flex-start;padding-left:max(16px,calc(var(--lp-pad) * 1.4))}
57
+ .lp-layout-right{align-items:flex-end}
58
+ .lp-layout-right .lp-head,.lp-layout-right .lp-body{align-items:flex-end;text-align:right}
59
+ .lp-layout-right .lp-actions{justify-content:flex-end}
60
+ .lp-layout-none .lp-head,.lp-layout-none .lp-body{display:none}
61
+ .lp-code-hidden .lp-code{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
62
+
63
+ .lp-fadein .lp-head,.lp-fadein .lp-body{animation:lp-rise 1.1s cubic-bezier(.2,.8,.2,1) both}
64
+ .lp-fadein .lp-body{animation-delay:.18s}
65
+ @keyframes lp-rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
66
+ @container (max-width:640px){.lp-layout-left,.lp-layout-right{align-items:center}
67
+ .lp-layout-left .lp-head,.lp-layout-left .lp-body,.lp-layout-right .lp-head,.lp-layout-right .lp-body{align-items:center;text-align:center}
68
+ .lp-layout-left .lp-actions,.lp-layout-right .lp-actions{justify-content:center}}
69
+ @media (prefers-reduced-motion:reduce){.lp-fadein .lp-head,.lp-fadein .lp-body{animation:none}.lp-btn,.lp-btn svg{transition:none}}
70
+ `,injected=new Set;function inject(key,css){if(typeof document>"u"||injected.has(key))return;if(document.querySelector(`style[data-lostpage="${key}"]`)){injected.add(key);return}let el=document.createElement("style");el.setAttribute("data-lostpage",key),el.textContent=css,document.head.appendChild(el),injected.add(key)}function injectBase(){inject("base",BASE_CSS)}function injectScene(id,css){css&&inject(`scene:${id}`,css.replace(/&/g,`.lp-s-${id}`))}function mount(target,scene,options={}){let current=null,destroyed=!1,paused=!1,opts=options,def=typeof scene=="object"?scene:null,host=typeof target=="string"?isBrowser()?document.querySelector(target):null:target,start=()=>{destroyed||!def||!host||(current?.destroy(),current=createInstance(host,def,opts),paused&&current.pause())},ready=(async()=>{if(!(!isBrowser()||!host)){if(!def){if(typeof scene=="string")throw new Error(`[lostpage] "lostpage/core" can't load "${scene}" by id. Import mount from "lostpage", or pass the scene object from "lostpage/scenes/${scene}".`);def=await scene()}start()}})();return ready.catch(e=>console.error(e)),{get root(){return current?.root??null},ready,update(next){let prev=opts;if(opts={...opts,...next},!current)return;["preset","params","motion","interactive","seed","maxDpr","overlay"].some(k=>k in next&&JSON.stringify(next[k])!==JSON.stringify(prev[k]))?start():current.refreshCopy(opts)},pause(){paused=!0,current?.pause()},resume(){paused=!1,current?.resume()},destroy(){destroyed=!0,current?.destroy(),current=null}}}function createInstance(host,def,opts){injectBase(),injectScene(def.id,def.css);let r=resolve(def,opts),root=document.createElement("div");root.className=`lp-root lp-s-${def.id} lp-p-${r.preset}${def.codeInScene?" lp-code-hidden":""}${opts.className?" "+opts.className:""}`,root.setAttribute("data-lostpage",def.id),opts.height&&root.style.setProperty("--lp-height",opts.height);let applyTheme=theme=>{for(let[k,v]of Object.entries(theme))root.style.setProperty(k.startsWith("--")?k:`--lp-${k}`,v)};applyTheme(r.theme);let stage=document.createElement("div");stage.className="lp-stage",stage.setAttribute("aria-hidden","true"),root.append(stage);let overlay=null;opts.overlay!==!1&&(overlay=buildOverlay(r.copy,def.layout,opts.onNavigate),root.append(overlay)),host.append(root);let reduceQuery=window.matchMedia?.("(prefers-reduced-motion: reduce)"),reducedMotion=opts.motion==="reduce"||opts.motion!=="full"&&!!reduceQuery?.matches,interactive=opts.interactive!==!1,maxDpr=opts.maxDpr??2,motionless=def.motion==="static"||reducedMotion&&def.motion!=="game",pointer={x:0,y:0,nx:0,ny:0,sx:0,sy:0,down:!1,inside:!1,engaged:!1},canvases=[],cleanups=[],width=0,height=0,dpr=1,quality=1,inView=!0,pageVisible=!document.hidden,pausedByUser=!1,raf=0,last=0,t=0,needsFrame=!0,instance={},failed=!1,ctx={root,stage,overlay,params:r.params,copy:r.copy,preset:r.preset,get width(){return width},get height(){return height},get dpr(){return dpr*quality},pointer,reducedMotion,interactive,random:rng(opts.seed??1337),canvas(o={}){let el=document.createElement("canvas");el.style.zIndex=String(o.z??0),stage.append(el);let mc={el,scale:o.scale??1,adaptive:!!o.adaptive};return canvases.push(mc),sizeCanvas(mc),el},on(type,fn,o){root.addEventListener(type,fn,o),cleanups.push(()=>root.removeEventListener(type,fn,o))},onWindow(type,fn,o){window.addEventListener(type,fn,o),cleanups.push(()=>window.removeEventListener(type,fn,o))},invalidate(){needsFrame=!0,!raf&&!failed&&schedule()},visible:()=>inView&&pageVisible,navigate(href,e){opts.onNavigate?opts.onNavigate(href,e??new MouseEvent("click")):location.assign(href)},cssVar:name=>getComputedStyle(root).getPropertyValue(name.startsWith("--")?name:`--lp-${name}`).trim()};function sizeCanvas(mc){let s=dpr*mc.scale*(mc.adaptive?quality:1),w=Math.max(1,Math.round(width*s)),h=Math.max(1,Math.round(height*s));(mc.el.width!==w||mc.el.height!==h)&&(mc.el.width=w,mc.el.height=h)}function measure(){let rect2=root.getBoundingClientRect();width=Math.max(1,Math.round(rect2.width)),height=Math.max(1,Math.round(rect2.height)),dpr=Math.min(window.devicePixelRatio||1,maxDpr);for(let mc of canvases)sizeCanvas(mc);try{instance.resize?.(width,height,dpr)}catch(e){fail(e)}ctx.invalidate()}if(interactive){let setPos=e=>{let rect2=root.getBoundingClientRect();pointer.x=e.clientX-rect2.left,pointer.y=e.clientY-rect2.top,pointer.nx=clamp(pointer.x/rect2.width*2-1,-1,1),pointer.ny=clamp(1-pointer.y/rect2.height*2,-1,1),pointer.engaged=!0};ctx.on("pointermove",e=>{setPos(e),pointer.inside=!0,motionless&&ctx.invalidate()}),ctx.on("pointerdown",e=>{setPos(e),pointer.down=!0,motionless&&ctx.invalidate()}),ctx.onWindow("pointerup",()=>{pointer.down=!1}),ctx.on("pointerleave",()=>{pointer.inside=!1})}function frame(now){if(raf=0,failed)return;let dt=last?Math.min((now-last)/1e3,1/20):1/60;last=now,pointer.sx=damp(pointer.sx,pointer.nx,3,dt),pointer.sy=damp(pointer.sy,pointer.ny,3,dt),motionless?(t=def.stillTime??4,pointer.sx=pointer.nx,pointer.sy=pointer.ny):t+=dt;try{instance.frame?.(t,motionless?0:dt)}catch(e){fail(e);return}motionless||govern(dt),needsFrame=!1,motionless||schedule()}function schedule(){raf||failed||pausedByUser||!(inView&&pageVisible)||motionless&&!needsFrame||(raf=requestAnimationFrame(frame))}let acc=0,frames=0,warmup=1.5;function govern(dt){if(!canvases.some(c=>c.adaptive))return;if(warmup>0){warmup-=dt;return}if(acc+=dt,frames++,acc<1)return;let avg=acc/frames;acc=0,frames=0;let next=quality;if(avg>1/45?next=Math.max(.5,quality*.85):avg<1/58&&quality<1&&(next=Math.min(1,quality*1.08)),Math.abs(next-quality)>.01){quality=next;for(let mc of canvases)mc.adaptive&&sizeCanvas(mc);instance.resize?.(width,height,dpr)}}function fail(e){failed=!0,raf&&cancelAnimationFrame(raf),raf=0,root.classList.add("lp-fallback");for(let mc of canvases)mc.el.style.display="none";console.warn(`[lostpage] scene "${def.id}" could not render, showing text only.`,e)}let io=new IntersectionObserver(entries=>{inView=entries[entries.length-1].isIntersecting,inView&&(last=0,schedule())});io.observe(root);let onVis=()=>{pageVisible=!document.hidden,pageVisible&&(last=0,schedule())};document.addEventListener("visibilitychange",onVis);let ro=new ResizeObserver(()=>measure());ro.observe(root);let rect=root.getBoundingClientRect();width=Math.max(1,Math.round(rect.width)),height=Math.max(1,Math.round(rect.height)),dpr=Math.min(window.devicePixelRatio||1,maxDpr);try{instance=def.setup(ctx)||{},instance.resize?.(width,height,dpr)}catch(e){fail(e)}return schedule(),{root,pause(){pausedByUser=!0,raf&&cancelAnimationFrame(raf),raf=0},resume(){pausedByUser=!1,last=0,schedule()},refreshCopy(next){let nr=resolve(def,next);if(applyTheme(nr.theme),overlay){let fresh=buildOverlay(nr.copy,def.layout,next.onNavigate);fresh.classList.remove("lp-fadein"),overlay.replaceWith(fresh),overlay=fresh,ctx.overlay=fresh}Object.assign(ctx.copy,nr.copy)},destroy(){raf&&cancelAnimationFrame(raf),raf=0,failed=!0,io.disconnect(),ro.disconnect(),document.removeEventListener("visibilitychange",onVis);for(let c of cleanups)c();try{instance.destroy?.()}catch{}for(let mc of canvases)mc.el.__lpgl?.getExtension("WEBGL_lose_context")?.loseContext();root.remove()}}}export{mount};