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{a as x}from"./chunk-4ZBXB36L.js";import{f as p}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var I={id:"flatline",name:"Flatline",description:"A hospital heart monitor reads the page's vitals. A few beats, then the long flat tone of a 404.",category:"Playful",kind:"2d",motion:"live",tags:["canvas","medical","monitor","funny","dark","ecg"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Vitals",title:"We lost this page.",message:"We did everything we could. Its links are no longer responding. Please make your way to the homepage.",actions:[{label:"Resuscitate at home",href:"/",variant:"primary"}]},params:{bg:"#03080a",trace:"#38ff7a",grid:"#0c2a1e",alarm:"#ff3b3b",paper:!1},theme:{bg:"#03080a",fg:"#d9ffe7",accent:"#38ff7a","accent-fg":"#03080a","font-display":"var(--lp-font-mono)","title-weight":"600"},presetName:"ICU Green",presets:{amber:{name:"Amber Monitor",params:{bg:"#0a0600",trace:"#ffb000",grid:"#2a1a00",alarm:"#ff3b3b"},theme:{bg:"#0a0600",fg:"#ffe1a3",accent:"#ffb000","accent-fg":"#0a0600"}},blue:{name:"Cardiac Blue",params:{trace:"#4fd8ff",grid:"#0b2236",bg:"#020812"},theme:{bg:"#020812",fg:"#d9f3ff",accent:"#4fd8ff","accent-fg":"#020812"}},paper:{name:"ECG Paper",params:{bg:"#fff5f3",trace:"#1b1b1b",grid:"#f5b8ae",alarm:"#d62828",paper:!0},theme:{bg:"#fff5f3",fg:"#1b1b1b",accent:"#d62828","accent-fg":"#fff"}}},setup(g){let n=g.params,a=x(g),b=[],i=0,m=0,T=r=>{let l=(e,o,f)=>f*Math.exp(-((r-e)**2)/(2*o*o));return l(.18,.025,.12)-l(.38,.008,.18)+l(.41,.012,1)-l(.445,.01,.32)+l(.65,.04,.25)};return{resize(){a.reset(),b.length=0,i=0},frame(r,l){let e=a.g;a.reset();let o=a.h*.08,f=a.h*.5,M=o+f*.62,v=f*.45,d=9,s=r%d<4.6,S=s?72+Math.round(Math.sin(r)*6):0,k=a.w*.18,h=Math.max(1,Math.ceil((r-m)*120));for(let t=0;t<h&&l>0;t++){let c=m+(r-m)*(t+1)/h,y=c%d*1.2%1,P=c%d<4.6?T(y):0;i+=k*(r-m)/h,i>a.w&&(i=0);let A=Math.floor(i);b[A]=M-P*v}m=r,e.fillStyle=n.bg,e.fillRect(0,0,a.w,a.h),e.strokeStyle=n.grid;for(let t=0;t<a.w;t+=20)e.lineWidth=t%100===0?1.2:.5,e.beginPath(),e.moveTo(t,o),e.lineTo(t,o+f),e.stroke();for(let t=o;t<=o+f;t+=20)e.lineWidth=(t-o)%100===0?1.2:.5,e.beginPath(),e.moveTo(0,t),e.lineTo(a.w,t),e.stroke();e.strokeStyle=n.trace,e.lineWidth=2.2,n.paper||(e.shadowColor=n.trace,e.shadowBlur=8),e.beginPath();let u=!1;for(let t=0;t<a.w;t++){let c=b[t],y=(t-i+a.w)%a.w<30;if(c===void 0||y){u=!1;continue}u?e.lineTo(t,c):e.moveTo(t,c),u=!0}e.stroke(),e.shadowBlur=0,e.textAlign="right",e.textBaseline="top";let w=!s&&Math.floor(r*2.5)%2===0;e.fillStyle=s?n.trace:w?n.alarm:p(n.alarm,.4),e.font=`700 ${Math.max(28,a.w*.04)}px ui-monospace,Menlo,monospace`,e.fillText(s?String(S):"0",a.w-24,o+8),e.font="600 13px ui-monospace,Menlo,monospace",e.fillText("HR bpm",a.w-24,o+Math.max(28,a.w*.04)+14),e.textAlign="left",e.fillStyle=p(n.trace,.8),e.fillText(`PAGE ${g.copy.code}`,24,o+10),e.fillText(`SpO\u2082 ${s?97:"--"}%`,24,o+30),s||(e.fillStyle=w?n.alarm:p(n.alarm,.35),e.font="800 16px ui-monospace,Menlo,monospace",e.fillText("\u25B2 ASYSTOLE \u2014 LINK NOT FOUND",24,o+f-26))}}}};export{I as default};
@@ -0,0 +1 @@
1
+ import{a as W}from"./chunk-4ZBXB36L.js";import{f as G}from"./chunk-HXSSPN2I.js";import{a as E,f as O}from"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var V={id:"flock",name:"Murmuration",description:"A flock of hundreds of birds swirls across the sky, then gathers into the shape of the error for a moment before scattering. Your cursor is a hawk.",category:"Nature",kind:"2d",motion:"live",tags:["canvas","boids","flocking","nature","generative","interactive","sunset"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Gone south",title:"This page flew away.",message:"It joined the flock and never came back. Every now and then they spell out what happened.",actions:[{label:"Fly home",href:"/",variant:"primary"}]},params:{skyTop:"#2b3a67",skyBottom:"#ffb38a",bird:"#1a1420",shape:"bird",count:520,hold:3.5,sun:!0},theme:{bg:"#c98a7a",fg:"#1a1420",accent:"#1a1420","accent-fg":"#ffe9dc"},presetName:"Dusk",presets:{starlings:{name:"Winter Starlings",params:{skyTop:"#5a6a85",skyBottom:"#d9dce6",bird:"#14161c",sun:!1},theme:{bg:"#a9b2c4",fg:"#14161c",accent:"#14161c","accent-fg":"#fff"}},koi:{name:"Golden Fish",params:{skyTop:"#0b2a2a",skyBottom:"#145a4a",bird:"#ffb347",shape:"fish",sun:!1},theme:{bg:"#0f3a32",fg:"#fff3e0",accent:"#ffb347","accent-fg":"#0b2a2a"}},reef:{name:"Reef",eyebrow:"Schooling",title:"This page swam off with the school.",params:{skyTop:"#04263f",skyBottom:"#0b7a8f",bird:"#c9f3ff",shape:"fish",sun:!1},theme:{bg:"#06405a",fg:"#e6fbff",accent:"#e6fbff","accent-fg":"#04263f"}},drones:{name:"Drone Show",eyebrow:"Live show",title:"The show went on. The page didn't.",params:{skyTop:"#020412",skyBottom:"#0c1440",bird:"#9ff3ff",shape:"drone",count:700,sun:!1,hold:5},theme:{bg:"#050a24",fg:"#e9f6ff",accent:"#9ff3ff","accent-fg":"#020412"}},morning:{name:"Morning",params:{skyTop:"#8ec5ff",skyBottom:"#fff1d6",bird:"#22303f",sun:!1},theme:{bg:"#cfe3f7",fg:"#16202b",accent:"#16202b","accent-fg":"#fff"}}},setup(p){let c=p.params,o=W(p),T=p.random,h=0,f=new Float32Array(0),a=new Float32Array(0),S=new Float32Array(0),A=0;function I(){let g=Math.min(1,Math.sqrt(o.w*o.h/1296e3));h=Math.round(c.count*Math.max(.45,g));let d=Math.min(o.w*.8,1100),t=Math.min(d*.4,o.h*.42),v=O(p.copy.code||"404",{width:d,height:t,font:E,weight:900,fit:.95,step:4,random:T}),i=v.length/2;S=new Float32Array(h*2);for(let r=0;r<h;r++){let n=Math.floor(r/h*i+T()*(i/h))%i;S[r*2]=v[n*2]+(o.w-d)/2,S[r*2+1]=v[n*2+1]+o.h*.38-t/2}v=new Float32Array(0),f=new Float32Array(h*2),a=new Float32Array(h*2);for(let r=0;r<h;r++){f[r*2]=T()*o.w,f[r*2+1]=T()*o.h*.6;let n=T()*6.28;a[r*2]=Math.cos(n)*80,a[r*2+1]=Math.sin(n)*80}}I();let w=40,F=new Map;return{resize(){o.reset(),I()},frame(g,d){let t=o.g;o.reset(),A=g%(c.hold+9);let i=A>7&&A<7+c.hold+1.2?Math.min(1,(A-7)/1.2):0;if(d>0){F=new Map;for(let e=0;e<h;e++){let s=Math.floor(f[e*2]/w)*7919+Math.floor(f[e*2+1]/w),m=F.get(s);m?m.push(e):F.set(s,[e])}let n=Math.max(o.w,o.h)*.16;for(let e=0;e<h;e++){let s=f[e*2],m=f[e*2+1],l=0,b=0,L=0,q=0,N=0,j=0,k=0,z=Math.floor(s/w),H=Math.floor(m/w);for(let y=-1;y<=1;y++)for(let u=-1;u<=1;u++){let M=F.get((z+y)*7919+H+u);if(M)for(let x of M){if(x===e)continue;let B=f[x*2]-s,C=f[x*2+1]-m,D=B*B+C*C;D>w*w||(k++,L+=B,q+=C,N+=a[x*2],j+=a[x*2+1],D<120&&(l-=B*3,b-=C*3))}}k&&(l+=L/k*.9*(1-i),b+=q/k*.9*(1-i),l+=(N/k-a[e*2])*.6,b+=(j/k-a[e*2+1])*.6);let K=o.w*(.5+.35*Math.sin(g*.21+e*5e-4)),Y=o.h*(.32+.12*Math.sin(g*.33));if(l+=(K-s)*.08*(1-i),b+=(Y-m)*.12*(1-i),i>0&&(l+=(S[e*2]-s)*6*i-a[e*2]*2.5*i,b+=(S[e*2+1]-m)*6*i-a[e*2+1]*2.5*i),p.pointer.inside){let y=s-p.pointer.x,u=m-p.pointer.y,M=y*y+u*u;M<22e3&&(l+=y/Math.sqrt(M+1)*2600,b+=u/Math.sqrt(M+1)*2600)}a[e*2]+=l*d,a[e*2+1]+=b*d;let P=Math.hypot(a[e*2],a[e*2+1]),R=i>.5?n*1.5:n;P>R&&(a[e*2]*=R/P,a[e*2+1]*=R/P),P<n*.35&&i<.5&&(a[e*2]*=1.05,a[e*2+1]*=1.05),f[e*2]+=a[e*2]*d,f[e*2+1]+=a[e*2+1]*d}}let r=t.createLinearGradient(0,0,0,o.h);if(r.addColorStop(0,c.skyTop),r.addColorStop(1,c.skyBottom),t.fillStyle=r,t.fillRect(0,0,o.w,o.h),c.sun){let n=o.w*.7,e=o.h*.78,s=t.createRadialGradient(n,e,0,n,e,o.h*.5);s.addColorStop(0,"rgba(255,240,200,.9)"),s.addColorStop(.08,"rgba(255,220,170,.6)"),s.addColorStop(1,"rgba(255,180,140,0)"),t.fillStyle=s,t.fillRect(0,0,o.w,o.h)}c.shape==="drone"&&(t.globalCompositeOperation="lighter");for(let n=0;n<h;n++){let e=f[n*2],s=f[n*2+1],m=Math.atan2(a[n*2+1],a[n*2]);if(c.shape==="drone"){let l=.6+.4*Math.sin(g*3+n);t.fillStyle=G(c.bird,.25*l),t.beginPath(),t.arc(e,s,5,0,Math.PI*2),t.fill(),t.fillStyle=G(c.bird,l),t.fillRect(e-1.2,s-1.2,2.4,2.4);continue}if(t.save(),t.translate(e,s),t.rotate(m),t.fillStyle=c.bird,c.shape==="fish")t.beginPath(),t.ellipse(0,0,5,2,0,0,Math.PI*2),t.moveTo(-4,0),t.lineTo(-8,-2.5),t.lineTo(-8,2.5),t.fill();else{let l=Math.sin(g*14+n)*2.5;t.beginPath(),t.moveTo(3,0),t.lineTo(-2,-4-l),t.lineTo(-1,0),t.lineTo(-2,4+l),t.closePath(),t.fill()}t.restore()}t.globalCompositeOperation="source-over"}}}};export{V as default};
@@ -0,0 +1 @@
1
+ import{a as L}from"./chunk-4ZBXB36L.js";import{f as R}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var H={id:"foggy-glass",name:"Foggy Glass",description:"Someone wrote the error with a finger on a steamed-up window. Wipe the glass with your cursor and watch it fog back over.",category:"Nature",kind:"2d",motion:"interactive",tags:["canvas","fog","window","wipe","interactive","cozy","winter"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Wipe the glass",title:"Can't see the page from here.",message:"Drag across the window to clear it. It'll mist up again, and the page still won't be out there.",actions:[{label:"Step back inside",href:"/",variant:"primary"}]},params:{view:"city",fog:"#c9d3dc",regrow:6},theme:{bg:"#7d8b99",fg:"#13202b",accent:"#13202b","accent-fg":"#eef3f7"},presetName:"City Night",presets:{rain:{name:"Rainy Night",params:{view:"city",fog:"#9fb0c2",regrow:3}},forest:{name:"Snowy Forest",eyebrow:"Cold outside",title:"It's freezing, and the page is gone.",params:{view:"forest",fog:"#e6edf2"},theme:{bg:"#c8d4dc",fg:"#14212a",accent:"#14212a","accent-fg":"#fff"}},sunset:{name:"Sunset Drive",params:{view:"sunset",fog:"#f1d9c9"},theme:{bg:"#e8b8a0",fg:"#2c140a",accent:"#2c140a","accent-fg":"#fff"}}},css:"& .lp-body{text-shadow:0 1px 12px rgba(255,255,255,.45)}",setup(p){let T=p.params,h=L(p),s=p.random,m,w,S,n,k,C,P=[],g=1,M=(o,t)=>{let e=document.createElement("canvas");return e.width=Math.max(1,Math.round(o)),e.height=Math.max(1,Math.round(t)),e};function I(){let o=h.w,t=h.h;g=Math.min(2,p.dpr),m=M(o*g,t*g);let e=m.getContext("2d");if(e.scale(g,g),T.view==="city"){let i=e.createLinearGradient(0,0,0,t);i.addColorStop(0,"#0b1430"),i.addColorStop(1,"#2b2140"),e.fillStyle=i,e.fillRect(0,0,o,t);for(let a=0;a<o;){let y=40+s()*90,b=t*(.25+s()*.45);e.fillStyle="#0a0c18",e.fillRect(a,t-b,y,b);for(let f=t-b+10;f<t-10;f+=14)for(let c=a+6;c<a+y-8;c+=12)s()>.55&&(e.fillStyle=["#ffcf7a","#ffe9b8","#9fd1ff","#ff9f6b"][Math.floor(s()*4)],e.fillRect(c,f,6,8));a+=y+4}for(let a=0;a<40;a++){let y=s()*o,b=t*(.7+s()*.3),f=6+s()*16,c=e.createRadialGradient(y,b,0,y,b,f),u=["#ffb347","#ff4d4d","#ffffff","#7fc8ff"][Math.floor(s()*4)];c.addColorStop(0,u),c.addColorStop(1,R(u,0)),e.fillStyle=c,e.fillRect(y-f,b-f,f*2,f*2)}}else if(T.view==="forest"){let i=e.createLinearGradient(0,0,0,t);i.addColorStop(0,"#9fb4c8"),i.addColorStop(1,"#e8eef3"),e.fillStyle=i,e.fillRect(0,0,o,t);for(let a=0;a<3;a++){let y=["#7e93a6","#4f6577","#25384a"][a];for(let b=0;b<24+a*8;b++){let f=s()*o,c=t*(.25+a*.12+s()*.15),u=t*(.72+a*.1);e.fillStyle=y,e.beginPath(),e.moveTo(f,u-c),e.lineTo(f-c*.22,u),e.lineTo(f+c*.22,u),e.closePath(),e.fill(),e.fillStyle="rgba(255,255,255,.55)",e.beginPath(),e.moveTo(f,u-c),e.lineTo(f-c*.06,u-c*.7),e.lineTo(f+c*.06,u-c*.7),e.fill()}}e.fillStyle="#f4f7f9",e.fillRect(0,t*.9,o,t*.1)}else{let i=e.createLinearGradient(0,0,0,t);i.addColorStop(0,"#3a2a6b"),i.addColorStop(.55,"#ff7a59"),i.addColorStop(1,"#ffd6a0"),e.fillStyle=i,e.fillRect(0,0,o,t),e.fillStyle="#fff1c9",e.beginPath(),e.arc(o*.62,t*.62,Math.min(o,t)*.12,0,Math.PI*2),e.fill(),e.fillStyle="#2a1838",e.beginPath(),e.moveTo(0,t);for(let a=0;a<=o;a+=20)e.lineTo(a,t*.72-Math.sin(a*.006)*t*.06-Math.sin(a*.017)*t*.03);e.lineTo(o,t),e.fill()}w=M(m.width,m.height);let r=w.getContext("2d");r.filter=`blur(${18*g}px) saturate(.8)`,r.drawImage(m,0,0),r.filter="none",r.fillStyle=R(T.fog,.55),r.fillRect(0,0,w.width,w.height);for(let i=0;i<w.width*w.height/260;i++){r.fillStyle=`rgba(255,255,255,${s()*.18})`;let a=(.5+s()*1.6)*g;r.beginPath(),r.arc(s()*w.width,s()*w.height,a,0,Math.PI*2),r.fill()}S=M(m.width,m.height),n=S.getContext("2d"),C=M(m.width,m.height),k=M(m.width,m.height);let l=k.getContext("2d");l.scale(g,g);let d=p.copy.code||"404",v=Math.min(o*.24,t*.34);l.font=`400 ${v}px "Marker Felt","Chalkboard SE","Segoe Print","Comic Sans MS",cursive`,l.textAlign="center",l.textBaseline="middle",l.lineJoin="round",l.lineCap="round",l.strokeStyle="#000";for(let i=0;i<3;i++)l.lineWidth=v*(.07+i*.01),l.save(),l.translate((s()-.5)*3,(s()-.5)*3),l.strokeText(d,o/2,t*.37),l.restore();P=[];for(let i=0;i<14;i++)P.push({x:o/2+(s()-.5)*v*d.length*.5,y:t*.37+v*.3,v:0,len:0})}I();let x=null,E=(o,t)=>{n.save(),n.scale(g,g),n.globalCompositeOperation="source-over",n.strokeStyle="#000",n.fillStyle="#000",n.lineCap="round",n.lineWidth=Math.max(40,h.w*.05),n.filter=`blur(${6*g}px)`,n.beginPath(),x?(n.moveTo(x.x,x.y),n.lineTo(o,t),n.stroke()):(n.arc(o,t,n.lineWidth/2,0,Math.PI*2),n.fill()),n.filter="none",n.restore(),x={x:o,y:t}};return p.on("pointermove",o=>{(o.pointerType==="mouse"||o.buttons)&&(E(p.pointer.x,p.pointer.y),Math.random()<.06&&P.push({x:p.pointer.x,y:p.pointer.y+Math.max(20,h.w*.025),v:0,len:0}))}),p.on("pointerleave",()=>x=null),{resize(){h.reset(),I()},frame(o,t){let e=h.g;h.reset(),t>0&&(n.globalCompositeOperation="destination-out",n.fillStyle=`rgba(0,0,0,${Math.min(1,t/T.regrow)*1.6})`,n.fillRect(0,0,S.width,S.height),n.globalCompositeOperation="source-over");let r=k.getContext("2d");for(let d of P){if(d.len>h.h*.3||t===0)continue;d.v=Math.min(60,d.v+(Math.random()<.02?40:2)*t*10);let v=d.y+d.v*t;r.save(),r.scale(g,g),r.strokeStyle="#000",r.lineWidth=3,r.lineCap="round",r.beginPath(),r.moveTo(d.x,d.y),d.x+=(Math.random()-.5)*.6,r.lineTo(d.x,v),r.stroke(),r.restore(),d.len+=v-d.y,d.y=v}e.drawImage(m,0,0,h.w,h.h);let l=C.getContext("2d");l.globalCompositeOperation="source-over",l.clearRect(0,0,C.width,C.height),l.drawImage(w,0,0),l.globalCompositeOperation="destination-out",l.drawImage(S,0,0),l.drawImage(k,0,0),e.drawImage(C,0,0,h.w,h.h)}}}};export{H as default};
@@ -0,0 +1,5 @@
1
+ import"./chunk-URWX3LLV.js";function w(i,e,h,t){let l=[],c=Math.PI*2/i;for(let g=0;g<i;g++){let o=g*c,s=[[o-c*.3,e-h],[o-c*.18,e],[o+c*.18,e],[o+c*.3,e-h]];for(let[p,b]of s)l.push(`${(Math.cos(p)*b).toFixed(2)},${(Math.sin(p)*b).toFixed(2)}`)}let m=`M${t},0 A${t},${t} 0 1,0 ${-t},0 A${t},${t} 0 1,0 ${t},0Z`;return`M${l.join("L")}Z ${m}`}var j={id:"gears",name:"Broken Machine",description:"The machinery behind this page has jammed. The gears turn, grind, shudder and try again. The 0 is a gear too.",category:"Playful",kind:"2d",motion:"live",tags:["svg","gears","mechanical","industrial","maintenance","light"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Mechanical failure",title:"Something jammed in the works.",message:"Our engineers are oiling the gears. The page you asked for won't be produced today.",actions:[{label:"Back to working pages",href:"/",variant:"primary"}]},params:{metal:"#2b2f36",metal2:"#8b939e",bg:"#ecebe6",accent:"#ff5a1f",jam:6},theme:{bg:"#ecebe6",fg:"#1c1f24",accent:"#1c1f24","accent-fg":"#fff"},presetName:"Workshop",presets:{copper:{name:"Copper",params:{metal:"#7a3a1a",metal2:"#e8875a",bg:"#f6ece3",accent:"#1a6b5a"},theme:{bg:"#f6ece3",fg:"#2a1206",accent:"#2a1206","accent-fg":"#fff"}},neon:{name:"Neon Machine",params:{metal:"#3bd6ff",metal2:"#1a4a6b",bg:"#020a12",accent:"#ff3bd4"},theme:{bg:"#020a12",fg:"#e6f9ff",accent:"#3bd6ff","accent-fg":"#020a12"}},brass:{name:"Steampunk",params:{metal:"#8a5a22",metal2:"#d9a85b",bg:"#1c140c",accent:"#ffb347"},theme:{bg:"#1c140c",fg:"#f3e2c4",accent:"#d9a85b","accent-fg":"#1c140c"}},blueprint:{name:"Blueprint",params:{metal:"#e9f1ff",metal2:"#9cc0ff",bg:"#1b4f9c",accent:"#ffffff"},theme:{bg:"#1b4f9c",fg:"#ffffff",accent:"#ffffff","accent-fg":"#1b4f9c"}}},css:`
2
+ & .gr{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding-bottom:22cqh}
3
+ & .gr svg{width:min(980px,94cqw);height:auto;overflow:visible}
4
+ & .gr .grid{opacity:.07}
5
+ `,setup(i){let e=i.params,h=i.copy.code||"404",t=document.createElement("div");t.className="gr",t.setAttribute("aria-hidden","true");let l=[...h],c=1e3,m=c/l.length,g=(r,a,n)=>`<g transform="translate(${r} 260)"><g data-gear="${n}"><path d="${w(14,a,a*.16,a*.42)}" fill="${e.metal}" fill-rule="evenodd"/><circle r="${a*.62}" fill="none" stroke="${e.metal2}" stroke-width="6" opacity=".6"/>${Array.from({length:6},(u,d)=>`<rect x="${a*.44}" y="-6" width="${a*.16}" height="12" transform="rotate(${d*60})" fill="${e.metal2}" opacity=".7"/>`).join("")}</g><circle r="${a*.12}" fill="${e.accent}"/></g>`,o=(r,a,n,u,d,f)=>`<g transform="translate(${r} ${a})"><g data-gear="${d}" data-n="${u}"><path d="${w(u,n,n*.22,n*.3)}" fill="${f}" fill-rule="evenodd"/></g></g>`,s=`<svg viewBox="0 0 ${c} 520"><defs><pattern id="gp" width="40" height="40" patternUnits="userSpaceOnUse"><path d="M40 0H0V40" fill="none" stroke="${e.metal}" stroke-width="1"/></pattern></defs><rect class="grid" x="-200" y="-100" width="${c+400}" height="720" fill="url(#gp)"/>`;s+=o(m*.95,110,70,12,"s1",e.metal2),s+=o(m*2.05,420,60,10,"s2",e.metal2),s+=o(m*1.5,470,34,8,"s3",e.metal),l.forEach((r,a)=>{let n=m*(a+.5);/[0oO]/.test(r)?s+=g(n,190,`b${a}`):s+=`<text x="${n}" y="400" text-anchor="middle" font-family="Inter,Arial Black,sans-serif" font-weight="900" font-size="380" fill="${e.metal}" letter-spacing="-10">${r.replace(/[<&]/g,"")}</text>`}),s+="<g data-spark></g></svg>",t.innerHTML=s,i.stage.append(t);let p=[...t.querySelectorAll("[data-gear]")],b=t.querySelector("[data-spark]"),y=0,k=-1,M=e.jam;return{frame(r,a){let n=r<k;!n&&r>M&&!i.reducedMotion&&(k=r+1.4,M=r+e.jam+Math.random()*3),y+=(n?0:28)*a;let d=n?Math.sin(r*70)*2.2:0;p.forEach((f,$)=>{let v=$%2?-1:1,x=Number(f.dataset.n??14);f.setAttribute("transform",`rotate(${y*v*14/x+d})`)}),b.innerHTML=n?Array.from({length:7},()=>{let f=470+(Math.random()-.5)*120,$=190+(Math.random()-.5)*80;return`<line x1="${f}" y1="${$}" x2="${f+(Math.random()-.5)*40}" y2="${$-Math.random()*40}" stroke="${e.accent}" stroke-width="3" stroke-linecap="round"/>`}).join(""):""},destroy(){t.remove()}}}};export{j as default};
@@ -0,0 +1 @@
1
+ import{a}from"./chunk-NUQBEDA4.js";import"./chunk-QJZBGT2Q.js";import"./chunk-HXSSPN2I.js";import"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var t={id:"glass-404",name:"Prism Glass",description:"Thick refractive glass numerals with real dispersion, bending a field of slow colour behind them.",category:"Typography",kind:"3d",motion:"live",tags:["webgl","raymarching","glass","refraction","dispersion","gradient","light"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Error 404",title:"Crystal clear: it's not here.",message:"We looked straight through this page. There's nothing behind the glass.",actions:[{label:"Back to home",href:"/",variant:"primary"}]},params:{c1:"#7b5cff",c2:"#ff6ec7",c3:"#36d6ff",bgTop:"#f6f4ff",bgBottom:"#d9d4f5",dispersion:1.2,depth:.28},theme:{bg:"#ebe8fb",fg:"#14112a",accent:"#14112a","accent-fg":"#ffffff"},presetName:"Iris",presets:{forest:{name:"Forest Glass",params:{c1:"#1f9d55",c2:"#a3e635",c3:"#0ea5a3",bgTop:"#06140d",bgBottom:"#0b2a1a"},theme:{bg:"#07170f",fg:"#eafff2",accent:"#a3e635","accent-fg":"#07170f"}},ocean:{name:"Deep Ocean",params:{c1:"#2563eb",c2:"#06b6d4",c3:"#1e3a8a",bgTop:"#020617",bgBottom:"#0b1a3a"},theme:{bg:"#030b1f",fg:"#e6f4ff",accent:"#67e8f9","accent-fg":"#030b1f"}},lava:{name:"Molten",params:{c1:"#ff4d00",c2:"#ffb000",c3:"#ff1f5a",bgTop:"#0a0302",bgBottom:"#1f0703",dispersion:1.6},theme:{bg:"#120402",fg:"#fff0e6",accent:"#ffb000","accent-fg":"#120402"}},lavender:{name:"Lavender",params:{c1:"#a78bfa",c2:"#f0abfc",c3:"#93c5fd",bgTop:"#faf5ff",bgBottom:"#e9defa"},theme:{bg:"#f1eafc",fg:"#2a1a47",accent:"#2a1a47","accent-fg":"#fff"}},neon:{name:"Neon Night",params:{c1:"#ff00e6",c2:"#00f0ff",c3:"#7a00ff",bgTop:"#05000a",bgBottom:"#12001f",dispersion:1.8},theme:{bg:"#08000f",fg:"#fbe6ff",accent:"#00f0ff","accent-fg":"#08000f"}},aurora:{name:"Aurora",params:{c1:"#22e3a1",c2:"#3a7bff",c3:"#b25cff",bgTop:"#050a18",bgBottom:"#0b1030"},theme:{bg:"#070c1f",fg:"#eef2ff",accent:"#e9fff6","accent-fg":"#04140e"}},sunset:{name:"Sunset",params:{c1:"#ff7a3d",c2:"#ff3d77",c3:"#ffd23d",bgTop:"#fff4ea",bgBottom:"#ffd9c4"},theme:{bg:"#ffe8da",fg:"#2a1208",accent:"#2a1208","accent-fg":"#fff"}},ice:{name:"Ice",title:"Frozen solid. Page not found.",params:{c1:"#9ad8ff",c2:"#d7f1ff",c3:"#5aa9ff",bgTop:"#f4fbff",bgBottom:"#cfe6f7",dispersion:.6,depth:.34},theme:{bg:"#e3f2fc",fg:"#0b2233",accent:"#0b2233","accent-fg":"#fff"}},mono:{name:"Monochrome",params:{c1:"#111111",c2:"#555555",c3:"#999999",bgTop:"#fafafa",bgBottom:"#dcdcdc",dispersion:1.6},theme:{bg:"#ededed",fg:"#0a0a0a",accent:"#0a0a0a","accent-fg":"#fff"}},candy:{name:"Candy",params:{c1:"#ff4fa3",c2:"#ffb13b",c3:"#4fd1ff",bgTop:"#fff0f7",bgBottom:"#ffd6ea"},theme:{bg:"#ffe5f1",fg:"#2b0a1b",accent:"#ff3d95","accent-fg":"#fff"}}},setup(e){let f=e.params;return a(e,{material:"glass",colors:{a:f.c1,b:f.c2,c:f.c3,bg0:f.bgTop,bg1:f.bgBottom,light:"#ffffff"},depth:f.depth,round:.07,spin:.3,dispersion:f.dispersion,envSpeed:.05,y:.1})}};export{t as default};
@@ -0,0 +1,60 @@
1
+ import{a as d}from"./chunk-LMRCHEWX.js";import{a as b,b as u,c as h,h as p}from"./chunk-QJZBGT2Q.js";import{e as i}from"./chunk-HXSSPN2I.js";import{a as g,e as m}from"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var y=`
2
+ uniform sampler2D uText;
3
+ uniform vec3 uBg, uInk, uA, uB;
4
+ uniform float uAmt, uScan, uGrid, uBurst, uLight;
5
+ ${b}
6
+ ${u}
7
+ ${h}
8
+
9
+ float textAt(vec2 uv) { return texture(uText, uv).a; }
10
+
11
+ void main() {
12
+ vec2 fc = gl_FragCoord.xy;
13
+ vec2 uv = fc / uRes;
14
+ float t = uTime;
15
+ // bursts: mostly calm, then violent for a few frames
16
+ float slot = floor(t * 7.0);
17
+ float burst = step(0.82, hash11(slot)) + uBurst;
18
+ float amt = uAmt * (0.25 + burst * 1.4);
19
+
20
+ // horizontal slice displacement
21
+ float rows = 18.0 + 40.0 * hash11(slot + 3.0);
22
+ float row = floor(uv.y * rows);
23
+ float shift = (hash12(vec2(row, slot)) - 0.5) * 0.08 * amt * step(0.55, hash12(vec2(row * 1.3, slot + 1.0)));
24
+ // block displacement
25
+ vec2 bid = floor(uv * vec2(12.0, 24.0));
26
+ float bh = hash12(bid + slot * 7.1);
27
+ vec2 boff = (bh > 0.93 ? (hash22(bid + slot) - 0.5) * vec2(0.12, 0.02) : vec2(0.0)) * amt;
28
+ vec2 q = uv + vec2(shift, 0.0) + boff;
29
+
30
+ float split = 0.004 + 0.012 * amt;
31
+ float r = textAt(q + vec2(split, 0.0));
32
+ float g = textAt(q);
33
+ float b = textAt(q - vec2(split, 0.0));
34
+
35
+ vec3 col = uBg;
36
+ // background grid
37
+ if (uGrid > 0.5) {
38
+ vec2 gp = fc / 32.0;
39
+ float gl = smoothstep(0.47, 0.5, max(abs(fract(gp.x) - 0.5), abs(fract(gp.y) - 0.5)));
40
+ col = mix(col, uInk, gl * 0.06);
41
+ }
42
+ // channel-separated text: a and b fringes, ink core
43
+ if (uLight > 0.5) {
44
+ col = mix(col, uA, max(r - g, 0.0));
45
+ col = mix(col, uB, max(b - g, 0.0));
46
+ col = mix(col, uInk, g);
47
+ } else {
48
+ col += uA * max(r - g * 0.6, 0.0) + uB * max(b - g * 0.6, 0.0);
49
+ col = mix(col, uInk, g * 0.92);
50
+ }
51
+ // corrupted line artefacts
52
+ float lineN = hash12(vec2(floor(fc.y / 2.0), slot));
53
+ col = mix(col, uA, step(0.996 - 0.01 * amt, lineN) * 0.6);
54
+ // scanlines and noise
55
+ col *= 1.0 - uScan * 0.18 * step(0.5, fract(fc.y / 3.0));
56
+ col = toSRGB(clamp(col, 0.0, 1.0));
57
+ col += (hash12(fc + fract(t) * 100.0) - 0.5) * 0.05 * (0.5 + amt);
58
+ fragColor = vec4(col, 1.0);
59
+ }
60
+ `,R={id:"glitch",name:"Signal Corruption",description:"The numerals tear, shift and split into colour channels in short violent bursts. Hover close and it gets worse.",category:"Typography",kind:"2d",motion:"live",tags:["webgl","glitch","rgb-split","cyberpunk","typography","interactive"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"ERR_PAGE_CORRUPTED",title:"Something broke in transmission.",message:"The page you requested got scrambled on the way here. A fresh copy lives on the homepage.",actions:[{label:"Reload home",href:"/",variant:"primary"},{label:"Report the glitch",href:"/contact",variant:"secondary"}]},params:{bg:"#06060a",ink:"#f4f4f6",a:"#ff1f6d",b:"#1ff4ff",intensity:1,reactive:!0,scanlines:1,grid:!0,weight:900},theme:{bg:"#06060a",accent:"#f4f4f6","accent-fg":"#06060a","font-display":"var(--lp-font-mono)","title-weight":"600"},presetName:"Cyber",presets:{sunset:{name:"Sunset",params:{bg:"#1a0b1f",ink:"#ffe6cc",a:"#ff5a36",b:"#b026ff"},theme:{bg:"#1a0b1f",fg:"#ffe6cc",accent:"#ffe6cc","accent-fg":"#1a0b1f"}},ice:{name:"Ice",params:{bg:"#eaf6ff",ink:"#0b2a40",a:"#00b3ff",b:"#7a5cff",scanlines:.4},theme:{bg:"#eaf6ff",fg:"#0b2a40",accent:"#0b2a40","accent-fg":"#eaf6ff"}},blood:{name:"Corrupted",eyebrow:"FATAL_CORRUPTION",params:{bg:"#0a0000",ink:"#ff2a2a",a:"#ffffff",b:"#5a0000",intensity:1.6},theme:{bg:"#0a0000",fg:"#ffd6d6",accent:"#ff2a2a","accent-fg":"#0a0000"}},blueprint:{name:"Blueprint",params:{bg:"#123e7a",ink:"#ffffff",a:"#7fd3ff",b:"#ffe14d",grid:!0},theme:{bg:"#123e7a",fg:"#ffffff",accent:"#ffffff","accent-fg":"#123e7a"}},vapor:{name:"Vaporwave",params:{bg:"#ffd6f0",ink:"#2a1b5c",a:"#ff4fd8",b:"#3bd0ff",grid:!0},theme:{bg:"#ffd6f0",fg:"#2a1b5c",accent:"#2a1b5c","accent-fg":"#ffd6f0"}},print:{name:"Misprint",eyebrow:"Misregistration",title:"Printed off the edge of the page.",params:{bg:"#f5f2ea",ink:"#141414",a:"#ff3b30",b:"#0a84ff",scanlines:0,grid:!1},theme:{bg:"#f5f2ea",fg:"#141414",accent:"#141414","accent-fg":"#f5f2ea","font-display":"var(--lp-font)"}},toxic:{name:"Toxic",params:{bg:"#050a02",ink:"#d7ff3b",a:"#3bff7a",b:"#ff3bd7",intensity:1.4},theme:{bg:"#050a02",fg:"#efffc2",accent:"#d7ff3b","accent-fg":"#050a02"}},mono:{name:"Monochrome",params:{bg:"#000000",ink:"#ffffff",a:"#8a8a8a",b:"#4a4a4a",grid:!1},theme:{bg:"#000",accent:"#fff","accent-fg":"#000"}},calm:{name:"Subtle",params:{intensity:.35,reactive:!0,scanlines:.4,bg:"#0b0d12",a:"#7c5cff",b:"#2bd4ff"}}},setup(t){let a=t.params,o=document.createElement("canvas"),c=null,e,v=parseInt(a.bg.replace("#","").slice(0,2),16)>140,l=()=>{let f=Math.max(2,Math.round(t.width*Math.min(t.dpr,2))),n=Math.max(2,Math.round(t.height*Math.min(t.dpr,2)));o.width=f,o.height=n;let r=o.getContext("2d");r.clearRect(0,0,f,n),r.save(),r.translate(0,n*.36-n*.25),m(r,t.copy.code||"404",{width:f,height:n*.5,font:g,weight:a.weight,fit:.84,tracking:-.03}),r.restore(),c&&(e.bindTexture(e.TEXTURE_2D,c),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,o),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1))},s=0;return{...d(t,{frag:y,adaptive:!1,init(f){e=f,l(),c=p(f,o,{filter:"linear"})},uniforms:(f,n)=>{let r=a.reactive&&t.pointer.inside?Math.max(0,1-Math.hypot(t.pointer.nx,(t.pointer.ny-.28)*1.6)):0;return s+=(r-s)*Math.min(1,n*6),{uText:c,uBg:i(a.bg),uInk:i(a.ink),uA:i(a.a),uB:i(a.b),uAmt:a.intensity,uScan:a.scanlines,uGrid:a.grid?1:0,uBurst:s*.9,uLight:v?1:0}}}),resize(){l()}}}};export{R as default};
@@ -0,0 +1,6 @@
1
+ import"./chunk-URWX3LLV.js";var r={id:"gradient-404",name:"Gradient",description:"The modern SaaS 404: a heavy gradient-filled number with a soft glow, a short headline and a pill button.",category:"Simple",kind:"2d",motion:"static",tags:["simple","gradient","saas","startup","static","fast","modern"],layout:"center",copy:{eyebrow:"",title:"Page not found",message:"The link may be broken, or the page may have been removed.",actions:[{label:"Take me home",href:"/"},{label:"Help center",href:"/help",variant:"secondary"}]},params:{from:"#6366f1",via:"#a855f7",to:"#ec4899",glow:!0},theme:{bg:"#ffffff",fg:"#0f172a",accent:"#0f172a","accent-fg":"#ffffff","code-size":"clamp(110px,24cqw,260px)","code-weight":"800"},presetName:"Violet",presets:{night:{name:"Night",params:{from:"#22d3ee",via:"#6366f1",to:"#d946ef"},theme:{bg:"#070a13",fg:"#e2e8f0",accent:"#e2e8f0","accent-fg":"#070a13"}},sunset:{name:"Sunset",params:{from:"#f59e0b",via:"#ef4444",to:"#db2777"},theme:{bg:"#fffaf5",fg:"#2a1406",accent:"#2a1406","accent-fg":"#fffaf5"}},mint:{name:"Mint",params:{from:"#10b981",via:"#06b6d4",to:"#3b82f6",glow:!1},theme:{bg:"#f8fafc",fg:"#0f172a",accent:"#0f172a","accent-fg":"#fff"}}},css:`
2
+ & .lp-code{background:linear-gradient(120deg,var(--g1),var(--g2),var(--g3));-webkit-background-clip:text;background-clip:text;color:transparent;letter-spacing:-.06em;line-height:.95;padding:0 .04em}
3
+ & .gr-glow{position:absolute;left:50%;top:38%;width:min(70cqw,760px);aspect-ratio:2/1;translate:-50% -50%;filter:blur(70px);opacity:.28;
4
+ background:radial-gradient(closest-side,var(--g1),transparent),radial-gradient(closest-side at 70% 50%,var(--g3),transparent)}
5
+ & .lp-title{font-weight:700;font-size:clamp(24px,3.6cqw,44px)}
6
+ `,setup(e){let a=e.params;if(e.root.style.setProperty("--g1",a.from),e.root.style.setProperty("--g2",a.via),e.root.style.setProperty("--g3",a.to),!a.glow)return;let t=document.createElement("div");return t.className="gr-glow",e.stage.append(t),{destroy:()=>t.remove()}}};export{r as default};
@@ -0,0 +1,43 @@
1
+ import{a as h}from"./chunk-LMRCHEWX.js";import{a as c,b as p,c as u,h as m}from"./chunk-QJZBGT2Q.js";import{e as l}from"./chunk-HXSSPN2I.js";import{a as f,e as s}from"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var d=`
2
+ uniform sampler2D uText;
3
+ uniform vec3 uPaper, uInk1, uInk2;
4
+ uniform float uCell, uOffset;
5
+ ${c}
6
+ ${p}
7
+ ${u}
8
+ float tone(vec2 uv, vec2 p, float t) {
9
+ // soft blobs plus the code
10
+ float a = textureLod(uText, uv, 1.5).a;
11
+ float b = 0.5 + 0.5 * sin(p.x * 3.0 + t * 0.4) * cos(p.y * 2.5 - t * 0.3);
12
+ return clamp(a * 0.9 + b * 0.25 + fbm(p * 2.0 + t * 0.05) * 0.2, 0.0, 1.0);
13
+ }
14
+ float dots(vec2 fc, float angle, float tv, float cell) {
15
+ float c = cos(angle), s = sin(angle);
16
+ vec2 q = mat2(c, -s, s, c) * fc / cell;
17
+ vec2 f = fract(q) - 0.5;
18
+ float r = sqrt(tv) * 0.62;
19
+ float d = length(f);
20
+ float w = fwidth(d);
21
+ return 1.0 - smoothstep(r - w, r + w, d);
22
+ }
23
+ void main() {
24
+ vec2 fc = gl_FragCoord.xy;
25
+ vec2 uv = fc / uRes;
26
+ vec2 p = (fc - 0.5 * uRes) / uRes.y;
27
+ float t = uTime;
28
+ // the pointer works like a loupe: bigger dots under it
29
+ vec2 m = (uMouse * 0.5 + 0.5) * uRes;
30
+ float loupe = smoothstep(220.0, 0.0, length(fc - m)) * step(0.001, length(uMouse));
31
+ float cell = uCell * (1.0 + loupe * 1.6);
32
+ float t1 = tone(uv, p, t);
33
+ float t2 = tone(uv + vec2(0.02, -0.01), p + 0.3, t * 0.8) * 0.85;
34
+ vec3 col = uPaper;
35
+ float d2 = dots(fc + vec2(uOffset, -uOffset), 0.26, t2 * 0.8, cell);
36
+ float d1 = dots(fc, 0.785, t1, cell);
37
+ // multiply the inks like a riso print
38
+ col *= mix(vec3(1.0), uInk2, d2);
39
+ col *= mix(vec3(1.0), uInk1, d1);
40
+ col *= 0.97 + 0.03 * hash12(floor(fc * 0.5));
41
+ fragColor = vec4(toSRGB(col), 1.0);
42
+ }
43
+ `,x={id:"halftone",name:"Risograph",description:"Two-colour halftone print, slightly misregistered like a risograph. The dots swell and shrink, and a loupe follows your cursor.",category:"Paper & Print",kind:"2d",motion:"live",tags:["webgl","halftone","riso","print","editorial","light","graphic"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Misprint",title:"This page didn't make it to press.",message:"The plates were inked, the paper loaded, and then nothing came out. The homepage is in stock.",actions:[{label:"Back to the shop",href:"/",variant:"primary"}]},params:{paper:"#f6f1e7",ink1:"#ff4f8b",ink2:"#2a6bff",cell:9,offset:3},theme:{bg:"#f6f1e7",fg:"#1a1a2e",accent:"#1a1a2e","accent-fg":"#fff"},presetName:"Pink & Blue",presets:{citrus:{name:"Yellow & Green",params:{ink1:"#00a95c",ink2:"#ffe800"},theme:{fg:"#0a2a1a",accent:"#0a2a1a"}},sunset:{name:"Orange & Purple",params:{ink1:"#7a3dff",ink2:"#ff6c2f"},theme:{fg:"#24103f",accent:"#24103f"}},mono:{name:"Black Only",params:{ink1:"#1a1a1a",ink2:"#ffffff",cell:7},theme:{fg:"#111",accent:"#111"}},news:{name:"Newsprint",params:{paper:"#e8e2d4",ink1:"#2a2a2a",ink2:"#c1121f",cell:6,offset:2},theme:{bg:"#e8e2d4",fg:"#1a1a1a",accent:"#c1121f"}}},setup(a){let n=a.params,t=document.createElement("canvas"),r=null,e,i=()=>{t.width=512,t.height=Math.max(64,Math.round(512*a.height/Math.max(1,a.width)));let o=t.getContext("2d");o.clearRect(0,0,t.width,t.height),o.save(),o.translate(0,t.height*.38-t.height*.24),s(o,a.copy.code||"404",{width:t.width,height:t.height*.48,font:f,weight:900,fit:.86}),o.restore(),r&&(e.bindTexture(e.TEXTURE_2D,r),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.generateMipmap(e.TEXTURE_2D))};return{...h(a,{frag:d,adaptive:!1,init(o){e=o,i(),r=m(e,t,{filter:"mipmap"})},uniforms:()=>({uText:r,uPaper:l(n.paper),uInk1:l(n.ink1),uInk2:l(n.ink2),uCell:n.cell*Math.min(2,a.dpr),uOffset:n.offset*Math.min(2,a.dpr)})}),resize:i}}};export{x as default};
@@ -0,0 +1 @@
1
+ import{a as x}from"./chunk-4ZBXB36L.js";import{f as w}from"./chunk-HXSSPN2I.js";import{a as v}from"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var S={id:"hanging-letters",name:"Hanging Letters",description:"Each numeral dangles on its own string like a mobile. Brush past them with the cursor and they swing and twist.",category:"Physics",kind:"2d",motion:"live",tags:["canvas","physics","pendulum","mobile","interactive","light","playful"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Hanging by a thread",title:"This page came undone.",message:"All that's left are the numbers, swinging in the breeze. Give them a nudge.",actions:[{label:"Back to the homepage",href:"/",variant:"primary"}]},params:{bg:"#f4efe6",letters:["#ff5a3c","#2b59ff","#ffb800","#16a34a","#9b5cff"],string:"#2b2620",look:"solid",wind:1},theme:{bg:"#f4efe6",fg:"#2b2620",accent:"#2b2620","accent-fg":"#fff"},presetName:"Primary",presets:{autumn:{name:"Autumn",params:{bg:"#f6e7cf",letters:["#d9541e","#a8461a","#e8a83b"],string:"#5a3a1a"},theme:{bg:"#f6e7cf",fg:"#3a1d0a",accent:"#3a1d0a"}},neon:{name:"Neon",params:{bg:"#08000f",letters:["#ff3bd4","#3bd6ff","#ffe14d"],string:"#3a2a4a",look:"outline"},theme:{bg:"#08000f",fg:"#ffe6fb",accent:"#ff3bd4","accent-fg":"#fff"}},paper:{name:"Paper Cut",params:{bg:"#eaf2f8",letters:["#ffffff"],string:"#7a8a99",look:"paper"},theme:{bg:"#eaf2f8",fg:"#1c2b38",accent:"#1c2b38"}},noir:{name:"Noir",params:{bg:"#111114",letters:["#f2f2f2"],string:"#555",look:"outline"},theme:{bg:"#111114",fg:"#f2f2f2",accent:"#f2f2f2","accent-fg":"#111"}},pastel:{name:"Nursery",params:{bg:"#fff6f0",letters:["#ffb3c7","#a8d8ff","#ffe08a","#b8f0c8"],string:"#c9a98a"},theme:{bg:"#fff6f0",fg:"#4a2a3a",accent:"#4a2a3a"}}},setup(i){let s=i.params,a=x(i),h=[...i.copy.code||"404"],g=[],m=()=>{let l=h.length,n=Math.min(a.w*.7/l,a.h*.32);g=h.map((t,r)=>({ch:t,ax:a.w/2+(r-(l-1)/2)*n*.95,L:a.h*.12+r*37%3*a.h*.04,a:i.reducedMotion?0:(Math.random()-.5)*.4,va:0,tw:0,vtw:0,size:n,col:s.letters[r%s.letters.length]}))};m();let b=0,p=0;return{resize(){a.reset(),m()},frame(l,n){let t=a.g;a.reset();let r=i.pointer.x,u=i.pointer.y,d=n>0?(r-b)/n:0;b=r,p=u;for(let e of g){if(n<=0)break;let f=9;e.va+=(-f/Math.max(1,e.L/100)*Math.sin(e.a)+Math.sin(l*.7+e.ax)*.25*s.wind)*n,e.va*=Math.exp(-.6*n),e.vtw+=(-e.tw*6+Math.sin(l*.5+e.ax*.01)*.3*s.wind)*n,e.vtw*=Math.exp(-.8*n);let o=e.ax+Math.sin(e.a)*(e.L+e.size*.5),c=Math.cos(e.a)*(e.L+e.size*.5);i.pointer.inside&&Math.abs(r-o)<e.size*.45&&Math.abs(u-c)<e.size*.55&&(e.va+=d*12e-5,e.vtw+=d*6e-4),e.a+=e.va*n,e.tw+=e.vtw*n}t.fillStyle=s.bg,t.fillRect(0,0,a.w,a.h),t.fillStyle=w(s.string,.85),t.fillRect(a.w*.1,0,a.w*.8,6);for(let e of g){let f=e.ax+Math.sin(e.a)*e.L,o=Math.cos(e.a)*e.L;t.strokeStyle=s.string,t.lineWidth=1.5,t.beginPath(),t.moveTo(e.ax,3),t.lineTo(f,o),t.stroke(),t.save(),t.translate(f,o),t.rotate(-e.a);let c=Math.cos(e.tw);if(t.scale(Math.max(.08,Math.abs(c)),1),t.font=`900 ${e.size}px ${v}`,t.textAlign="center",t.textBaseline="top",t.fillStyle="rgba(0,0,0,.12)",t.fillText(e.ch,e.size*.08,e.size*.1),s.look==="outline")t.strokeStyle=e.col,t.lineWidth=e.size*.03,t.strokeText(e.ch,0,0);else{let y=c<0?.75:1;t.fillStyle=e.col,t.globalAlpha=y,t.fillText(e.ch,0,0),t.globalAlpha=1,s.look==="paper"?(t.strokeStyle="rgba(0,0,0,.08)",t.lineWidth=2,t.strokeText(e.ch,0,0)):(t.fillStyle="rgba(255,255,255,.18)",t.fillText(e.ch,-e.size*.012,-e.size*.012),t.fillStyle=e.col,t.globalAlpha=y,t.fillText(e.ch,0,e.size*.006),t.globalAlpha=1)}t.restore(),t.fillStyle=s.string,t.beginPath(),t.arc(f,o,2.5,0,Math.PI*2),t.fill()}}}}};export{S as default};
@@ -0,0 +1 @@
1
+ import{a as F}from"./chunk-4ZBXB36L.js";import{f as z}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var J={id:"hanging-sign",name:"Hanging Sign",description:"A sign hangs on two chains and swings with real physics. Grab it, throw it and watch it settle.",category:"Physics",kind:"2d",motion:"live",tags:["canvas","physics","verlet","drag","interactive","shop","tactile"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Sorry",title:"We couldn't find that page.",message:"Give the sign a swing if you like. The way back is below.",actions:[{label:"Back to the shop front",href:"/",variant:"primary"}]},params:{board:"wood",wall:"#e9e3d7",line1:"",line2:"PAGE NOT FOUND",chain:"#6b6b6b"},theme:{bg:"#e9e3d7",fg:"#2b2118",accent:"#2b2118","accent-fg":"#f4efe5"},presetName:"Tavern",presets:{mint:{name:"Mint Caf\xE9",params:{board:"closed",wall:"#d9f2e6",line1:"Sorry",line2:"WE'RE CLOSED",chain:"#9ab8aa"},theme:{bg:"#d9f2e6",fg:"#0f3326",accent:"#0f3326","accent-fg":"#fff"}},brick:{name:"Brick Pub",params:{board:"wood",wall:"#7a3a2a",chain:"#2a2a2a",line2:"NO PAGE ON TAP"},theme:{bg:"#7a3a2a",fg:"#fff0e0",accent:"#ffd27a","accent-fg":"#2a1206"}},closed:{name:"Sorry, We're Closed",eyebrow:"Back soon",title:"This page has closed for good.",params:{board:"closed",wall:"#cfe3e8",line1:"SORRY",line2:"WE'RE CLOSED",chain:"#c9c9c9"},theme:{bg:"#cfe3e8",fg:"#0f2a33",accent:"#d7263d","accent-fg":"#fff"}},metal:{name:"Industrial",eyebrow:"Access denied",title:"Nothing beyond this point.",params:{board:"metal",wall:"#2a2d31",line2:"NO ENTRY",chain:"#9a9a9a"},theme:{bg:"#2a2d31",fg:"#eceff2",accent:"#ffcc00","accent-fg":"#1a1a1a"}},night:{name:"Night Tavern",params:{board:"wood",wall:"#1b1f2a",chain:"#8a8f99"},theme:{bg:"#1b1f2a",fg:"#f2ebdc",accent:"#f2c46b","accent-fg":"#1b1f2a"}}},setup(p){let x=p.params,d=F(p),u=p.random,I=p.copy.code||"404",c=[],A=[],f=[0,0,0,0],a=0,t=0,B=-1,O={x:0,y:0},R,W=9,P=(s,e,n=!1)=>(c.push({x:s,y:e,px:s,py:e,pinned:n}),c.length-1),S=(s,e)=>A.push([s,e,Math.hypot(c[s].x-c[e].x,c[s].y-c[e].y)]);function L(){c=[],A=[],a=Math.min(d.w*.62,640),t=a*.42;let s=d.w/2,e=0,n=Math.max(60,d.h*.36-t/2),h=a*.36,l=s-a/2,o=e+n;f=[P(l,o),P(l+a,o),P(l+a,o+t),P(l,o+t)],S(f[0],f[1]),S(f[1],f[2]),S(f[2],f[3]),S(f[3],f[0]),S(f[0],f[2]),S(f[1],f[3]);for(let[i,g]of[[-1,f[0]],[1,f[1]]]){let w=P(s+i*h,e,!0);for(let v=1;v<W;v++){let b=v/W,T=P(s+i*h+(c[g].x+i*0-(s+i*h))*b,e+n*b);S(w,T),w=T}S(w,g)}if(!p.reducedMotion)for(let i of f)c[i].px-=a*.06;U()}function U(){let s=Math.min(2,p.dpr);R=document.createElement("canvas"),R.width=Math.ceil(a*s),R.height=Math.ceil(t*s);let e=R.getContext("2d");e.scale(s,s);let n=t*.08,h=(l,o,i,g,y)=>{e.beginPath(),e.roundRect(l,o,i,g,y)};if(x.board==="wood"){let l=e.createLinearGradient(0,0,0,t);l.addColorStop(0,"#9a6a3c"),l.addColorStop(1,"#6e4522"),h(0,0,a,t,n),e.fillStyle=l,e.fill(),e.save(),e.clip();for(let o=0;o<70;o++){e.strokeStyle=`rgba(50,25,8,${.08+u()*.15})`,e.lineWidth=1+u()*2;let i=u()*t;e.beginPath(),e.moveTo(0,i);for(let g=0;g<=a;g+=20)e.lineTo(g,i+Math.sin(g*.02+o)*3+(u()-.5)*2);e.stroke()}for(let o=0;o<3;o++){let i=u()*a,g=u()*t;e.strokeStyle="rgba(50,25,8,.35)";for(let y=1;y<5;y++)e.beginPath(),e.ellipse(i,g,y*5,y*2.4,0,0,Math.PI*2),e.stroke()}e.restore(),e.strokeStyle="#4a2c12",e.lineWidth=6,h(3,3,a-6,t-6,n),e.stroke(),e.fillStyle="#2a1606",e.textAlign="center",e.textBaseline="middle",e.font=`900 ${t*.48}px "Rockwell","Georgia",serif`,e.shadowColor="rgba(255,220,170,.35)",e.shadowOffsetY=2,e.fillText(x.line1||I,a/2,t*.42),e.font=`700 ${t*.14}px "Rockwell","Georgia",serif`,e.fillText(x.line2,a/2,t*.8),e.shadowColor="transparent"}else if(x.board==="closed")h(0,0,a,t,n*1.4),e.fillStyle="#ffffff",e.fill(),e.lineWidth=t*.05,e.strokeStyle="#d7263d",h(t*.06,t*.06,a-t*.12,t-t*.12,n),e.stroke(),e.fillStyle="#d7263d",e.textAlign="center",e.textBaseline="middle",e.font=`italic 800 ${t*.32}px "Brush Script MT","Snell Roundhand",cursive,serif`,e.fillText(x.line1||"Sorry",a/2,t*.36),e.font=`900 ${t*.2}px Inter,Arial,sans-serif`,e.fillText(x.line2,a/2,t*.7),e.fillStyle="#0f2a33",e.font=`600 ${t*.07}px Inter,Arial,sans-serif`,e.fillText(`ERROR ${I}`,a/2,t*.88);else{let l=e.createLinearGradient(0,0,a,t);l.addColorStop(0,"#c7ccd2"),l.addColorStop(.5,"#8b9199"),l.addColorStop(1,"#b9bec5"),h(0,0,a,t,n*.6),e.fillStyle=l,e.fill(),e.save(),e.clip();for(let o=0;o<t;o+=2)e.fillStyle=`rgba(255,255,255,${u()*.06})`,e.fillRect(0,o,a,1);e.fillStyle="#ffcc00",e.fillRect(0,0,a,t*.16),e.fillRect(0,t*.84,a,t*.16),e.fillStyle="#1a1a1a";for(let o=-t;o<a+t;o+=t*.22)for(let i of[0,t*.84])e.beginPath(),e.moveTo(o,i+t*.16),e.lineTo(o+t*.11,i+t*.16),e.lineTo(o+t*.27,i),e.lineTo(o+t*.16,i),e.closePath(),e.fill();e.restore(),e.fillStyle="#1a1a1a",e.textAlign="center",e.textBaseline="middle",e.font=`900 ${t*.38}px "Stencil","Impact","Arial Black",sans-serif`,e.fillText(I,a/2,t*.44),e.font=`900 ${t*.12}px "Impact","Arial Black",sans-serif`,e.fillText(x.line2,a/2,t*.7);for(let[o,i]of[[t*.1,t*.3],[a-t*.1,t*.3],[t*.1,t*.7],[a-t*.1,t*.7]])e.fillStyle="#6b7078",e.beginPath(),e.arc(o,i,t*.035,0,Math.PI*2),e.fill(),e.strokeStyle="#3a3d42",e.lineWidth=1.5,e.beginPath(),e.moveTo(o-t*.025,i),e.lineTo(o+t*.025,i),e.stroke()}e.fillStyle="#3a3a3a";for(let l of[a*.14,a*.86])e.beginPath(),e.arc(l,t*.06+6,4,0,Math.PI*2),e.fill()}p.on("pointerdown",s=>{if(s.target.closest("a,button"))return;let e=p.root.getBoundingClientRect(),n=s.clientX-e.left,h=s.clientY-e.top,l=-1,o=1/0;for(let i of f){let g=Math.hypot(c[i].x-n,c[i].y-h);g<o&&(o=g,l=i)}o<a*.8&&(B=l,O={x:c[l].x-n,y:c[l].y-h})}),p.onWindow("pointerup",()=>B=-1),L();let Y=3;return{resize(){d.reset(),L()},frame(s,e){let n=d.g;if(d.reset(),e>0){let b=Math.min(e,.03333333333333333),T=d.h*2.2;if(s>Y&&(Y=s+4+u()*6,!p.pointer.engaged))for(let r of f)c[r].px+=(u()-.5)*a*.03;for(let r of c){if(r.pinned)continue;let m=(r.x-r.px)*.992,C=(r.y-r.py)*.992;r.px=r.x,r.py=r.y,r.x+=m,r.y+=C+T*b*b}if(B>=0){let r=c[B];r.x+=(p.pointer.x+O.x-r.x)*.5,r.y+=(p.pointer.y+O.y-r.y)*.5}for(let r=0;r<14;r++)for(let[m,C,$]of A){let M=c[m],k=c[C],G=k.x-M.x,N=k.y-M.y,D=Math.hypot(G,N)||1,E=(D-$)/D,H=M.pinned?0:k.pinned?1:.5,q=k.pinned?0:M.pinned?1:.5;M.x+=G*E*H,M.y+=N*E*H,k.x-=G*E*q,k.y-=N*E*q}}n.fillStyle=x.wall,n.fillRect(0,0,d.w,d.h);let h=n.createRadialGradient(d.w/2,d.h*.3,0,d.w/2,d.h*.3,Math.max(d.w,d.h)*.8);h.addColorStop(0,"rgba(255,255,255,.18)"),h.addColorStop(1,"rgba(0,0,0,.22)"),n.fillStyle=h,n.fillRect(0,0,d.w,d.h),n.fillStyle="#3a3a3a",n.fillRect(d.w/2-a*.45,0,a*.9,10);let[l,o,i,g]=f.map(b=>c[b]),y=Math.atan2(o.y-l.y,o.x-l.x);n.save(),n.translate(l.x+18,l.y+22),n.rotate(y),n.fillStyle="rgba(0,0,0,.18)",n.filter="blur(10px)",n.fillRect(0,0,a,t),n.filter="none",n.restore(),n.strokeStyle=x.chain,n.lineWidth=2.6;for(let b=0;b<c.length;b++)f.includes(b);for(let[b,T]of A){if(f.includes(b)&&f.includes(T))continue;let r=c[b],m=c[T],C=(r.x+m.x)/2,$=(r.y+m.y)/2,M=Math.atan2(m.y-r.y,m.x-r.x),k=Math.hypot(m.x-r.x,m.y-r.y);n.save(),n.translate(C,$),n.rotate(M),n.beginPath(),n.ellipse(0,0,k*.62,b%2?2.2:4.6,0,0,Math.PI*2),n.stroke(),n.restore()}n.save(),n.translate(l.x,l.y),n.rotate(y),n.drawImage(R,0,0,a,t);let w=n.createLinearGradient(0,0,a,0),v=.5+y*2;w.addColorStop(Math.max(0,Math.min(1,v-.2)),"rgba(255,255,255,0)"),w.addColorStop(Math.max(0,Math.min(1,v)),"rgba(255,255,255,.12)"),w.addColorStop(Math.max(0,Math.min(1,v+.2)),"rgba(255,255,255,0)"),n.fillStyle=w,n.beginPath(),n.roundRect(0,0,a,t,t*.08),n.fill(),n.restore()}}}};export{J as default};
@@ -0,0 +1,18 @@
1
+ import{a as e,c as r,d as l,e as s}from"./chunk-A44JMJWI.js";import"./chunk-QHXVYCR6.js";import"./chunk-URWX3LLV.js";var d={id:"helpful-links",name:"Helpful Links",description:"Headline on top, then a tidy list of where people probably wanted to go, each with a one-line description and an arrow.",category:"Simple",kind:"2d",motion:"static",tags:["simple","links","list","useful","saas","docs","static","fast"],layout:"none",copy:{eyebrow:"404 error",title:"This page does not exist",message:"Sorry, we couldn\u2019t find the page you\u2019re looking for. These might help:",actions:[{label:"Back to home",href:"/"}]},params:{links:["Documentation|Learn how to integrate our tools with your app.|/docs","API reference|A complete reference of every endpoint.|/docs/api","Guides|Step-by-step tutorials for common tasks.|/guides","Blog|Read our latest news and articles.|/blog"]},theme:{bg:"#ffffff",fg:"#111827",accent:"#4f46e5","accent-fg":"#ffffff"},presetName:"Light",presets:{dark:{name:"Dark",theme:{bg:"#0f1117",fg:"#e5e7eb",accent:"#a5b4fc","accent-fg":"#0f1117"}},sand:{name:"Sand",theme:{bg:"#f6f1e9",fg:"#292018",accent:"#b45309","accent-fg":"#fff"}}},css:`
2
+ & .hl{position:absolute;inset:0;overflow:auto;display:flex;justify-content:center;padding:clamp(28px,8cqh,96px) 16px}
3
+ & .hl .in{width:min(560px,100%);margin:auto 0}
4
+ & .hl .ey{font-size:13px;font-weight:600;color:var(--lp-accent)}
5
+ & .hl h1{margin:8px 0 0;font-size:clamp(28px,4.4cqw,48px);font-weight:700;letter-spacing:-.03em;line-height:1.1}
6
+ & .hl p{margin:14px 0 0;color:var(--lp-muted);font-size:15px;line-height:1.6}
7
+ & .hl ul{list-style:none;margin:28px 0 0;padding:0;border-top:1px solid color-mix(in srgb,var(--lp-fg) 12%,transparent)}
8
+ & .hl li a{display:flex;gap:16px;align-items:center;padding:16px 4px;border-bottom:1px solid color-mix(in srgb,var(--lp-fg) 12%,transparent);color:inherit;text-decoration:none}
9
+ & .hl li i{flex:none;width:40px;height:40px;border-radius:10px;display:grid;place-items:center;font-style:normal;font-weight:700;font-size:15px;
10
+ background:color-mix(in srgb,var(--lp-accent) 12%,transparent);color:var(--lp-accent)}
11
+ & .hl li b{display:block;font-size:15px;font-weight:600}
12
+ & .hl li small{display:block;color:var(--lp-muted);font-size:13.5px;margin-top:2px}
13
+ & .hl li span{flex:1;min-width:0}
14
+ & .hl li em{font-style:normal;color:var(--lp-muted);transition:transform .2s}
15
+ & .hl li a:hover em{transform:translateX(4px);color:var(--lp-accent)}
16
+ & .hl .lp-actions{justify-content:flex-start;margin-top:26px}
17
+ & .hl .lp-btn--primary{background:none;color:var(--lp-accent);padding:6px 0;font-weight:600}
18
+ `,setup(n){let o=n.copy,p=n.params.links.map(t=>t.split("|")).map(([t,a,c])=>`<li><a href="${e(c??"/")}"><i aria-hidden="true">${e((t??"?").charAt(0))}</i><span><b>${e(t??"")}</b><small>${e(a??"")}</small></span><em aria-hidden="true">\u2192</em></a></li>`).join(""),i=l(n,"hl",`<div class="in"><span class="ey">${e(o.eyebrow||o.code)}</span><h1>${s(o.code)}${e(o.title)}</h1><p>${e(o.message)}</p><ul>${p}</ul></div>`);return i.querySelectorAll("ul a").forEach(t=>t.addEventListener("click",a=>{a.metaKey||a.ctrlKey||(a.preventDefault(),n.navigate(t.getAttribute("href"),a))})),i.querySelector(".in").append(r(n)),{destroy:()=>i.remove()}}};export{d as default};
@@ -0,0 +1,57 @@
1
+ import{a as r}from"./chunk-LMRCHEWX.js";import{a as f,c as o}from"./chunk-QJZBGT2Q.js";import{e as a}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var c=`
2
+ uniform vec3 uStar, uTint, uCore, uBg;
3
+ uniform float uCycle, uDensity;
4
+ ${f}
5
+ ${o}
6
+
7
+ // warp factor over a jump cycle: cruise \u2192 spool \u2192 jump \u2192 drop out
8
+ float warp(float t) {
9
+ float c = mod(t, uCycle) / uCycle;
10
+ float spool = smoothstep(0.35, 0.6, c);
11
+ float jump = smoothstep(0.6, 0.66, c) * (1.0 - smoothstep(0.86, 0.96, c));
12
+ return 0.06 + spool * 0.25 + jump * 1.6;
13
+ }
14
+
15
+ void main() {
16
+ vec2 fc = gl_FragCoord.xy;
17
+ vec2 uv = (fc - 0.5 * uRes) / uRes.y;
18
+ uv -= uMouse * 0.08;
19
+ float t = uTime;
20
+ float w = warp(t);
21
+ float r = length(uv);
22
+ float a = atan(uv.y, uv.x);
23
+ vec3 col = uBg;
24
+
25
+ for (int l = 0; l < 7; l++) {
26
+ float fl = float(l);
27
+ float bins = 90.0 + fl * 55.0;
28
+ float ab = a / 6.28318 * bins;
29
+ float id = floor(ab);
30
+ float h = hash12(vec2(id, fl * 7.3));
31
+ if (h > uDensity) continue;
32
+ float fa = fract(ab) - 0.5 - (hash12(vec2(id, fl + 1.7)) - 0.5) * 0.6;
33
+ // each star travels outward; z cycles
34
+ float speed = 0.35 + h * 0.6;
35
+ float z = fract(hash12(vec2(id, fl * 3.1)) + t * speed * (0.12 + w * 0.9));
36
+ float r0 = 0.04 / max(1.0 - z, 0.02) * 0.6;
37
+ float len = r0 * (0.02 + w * 1.2);
38
+ float along = smoothstep(r0 - len, r0, r) * smoothstep(r0 + 0.004 + w * 0.02, r0, r);
39
+ float width = abs(fa) * (r * 6.2832 / bins) * uRes.y;
40
+ float across = smoothstep(1.4 + w * 0.6, 0.0, width);
41
+ float bright = (0.4 + 0.6 * z) * along * across;
42
+ vec3 sc = mix(uStar, uTint, h * 1.3);
43
+ col += sc * bright * (1.0 + w);
44
+ }
45
+ // core glow and tunnel haze during jump
46
+ col += uCore * (exp(-r * 9.0) * (0.3 + w * 1.2) + exp(-r * 2.0) * 0.08 * w);
47
+ col += uTint * 0.05 * w * smoothstep(0.9, 0.2, r);
48
+ // flash at the jump
49
+ float c = mod(t, uCycle) / uCycle;
50
+ col += uCore * 0.6 * exp(-abs(c - 0.62) * 70.0);
51
+
52
+ col = aces(col);
53
+ col = toSRGB(col);
54
+ col *= mix(0.65, 1.0, vignette(vUv, 0.3));
55
+ fragColor = vec4(col, 1.0);
56
+ }
57
+ `,i={id:"hyperspace",name:"Hyperspace Jump",description:"Stars stretch into light as the ship spools up, jumps, and drops out somewhere unexpected.",category:"Space",kind:"2d",motion:"live",tags:["webgl","space","warp","stars","speed","sci-fi"],layout:"center",copy:{eyebrow:"Navigation error",title:"Jumped to the wrong coordinates.",message:"The navicomputer says this page should be here. Space says otherwise.",actions:[{label:"Plot a course home",href:"/",variant:"primary"}]},params:{star:"#e8f0ff",tint:"#7fb3ff",core:"#cfe0ff",bg:"#01020a",cycle:9,density:.55},theme:{bg:"#01020a","code-color":"rgba(230,240,255,.9)",accent:"#e8f0ff","accent-fg":"#01020a"},presetName:"Classic",presets:{ice:{name:"Ice Lanes",params:{star:"#ffffff",tint:"#9fe8ff",core:"#e6f9ff",bg:"#000a12",density:.65},theme:{bg:"#000a12",accent:"#9fe8ff","accent-fg":"#000a12"}},magenta:{name:"Magenta Drive",params:{star:"#ffe6f7",tint:"#ff3bb8",core:"#ff9edb",bg:"#0d0008",cycle:7},theme:{bg:"#0d0008",accent:"#ff9edb","accent-fg":"#1a0010"}},sunburst:{name:"Sunburst",params:{star:"#fffbe6",tint:"#ff7a1f",core:"#ffd36b",bg:"#120500",density:.75},theme:{bg:"#120500",accent:"#ffd36b","accent-fg":"#120500"}},mono:{name:"Monochrome",params:{star:"#ffffff",tint:"#bbbbbb",core:"#ffffff",bg:"#000000"},theme:{bg:"#000",accent:"#fff","accent-fg":"#000"}},plasma:{name:"Plasma Drive",params:{star:"#ffd9ff",tint:"#b45cff",core:"#ff9cf5",bg:"#07010d"},theme:{bg:"#07010d",accent:"#f5d9ff","accent-fg":"#12001f"}},"red-alert":{name:"Red Alert",eyebrow:"Red alert",title:"All hands: page not found.",params:{star:"#ffe1d9",tint:"#ff4a3d",core:"#ff7a5c",bg:"#0a0101",cycle:6},theme:{bg:"#0a0101",accent:"#ffb3a8","accent-fg":"#200402"}},emerald:{name:"Emerald",params:{star:"#e0fff2",tint:"#2bffb1",core:"#a6ffe0",bg:"#00080a"},theme:{bg:"#00080a",accent:"#c9ffe9","accent-fg":"#00140d"}},gold:{name:"Solar Sail",params:{star:"#fff4dd",tint:"#ffbf47",core:"#ffd88a",bg:"#080500",density:.7},theme:{bg:"#080500",accent:"#ffe0a3","accent-fg":"#1a1000"}}},css:"& .lp-code{font-weight:200;letter-spacing:.06em;text-shadow:0 0 30px rgba(170,200,255,.45)}",setup(t){let e=t.params;return r(t,{frag:c,uniforms:()=>({uStar:a(e.star),uTint:a(e.tint),uCore:a(e.core),uBg:a(e.bg),uCycle:e.cycle,uDensity:e.density})})}};export{i as default};
@@ -0,0 +1,26 @@
1
+ import{a as n}from"./chunk-LMRCHEWX.js";import{c as r}from"./chunk-QJZBGT2Q.js";import{e as a}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var f=`
2
+ uniform vec3 uA, uB;
3
+ uniform float uArms, uSpeed, uPattern;
4
+ ${r}
5
+ void main() {
6
+ vec2 fc = gl_FragCoord.xy;
7
+ vec2 p = (fc - 0.5 * uRes) / uRes.y - uMouse * 0.05;
8
+ float t = uTime * uSpeed;
9
+ float r = length(p);
10
+ float a = atan(p.y, p.x);
11
+ float v;
12
+ if (uPattern < 0.5) v = sin(a * uArms + log(max(r, 1e-3)) * 9.0 - t * 3.0);
13
+ else if (uPattern < 1.5) v = sin(r * 60.0 - t * 4.0);
14
+ else {
15
+ float z = 0.3 / max(r, 1e-3) + t * 0.6;
16
+ v = sin(a * uArms * 0.5 * 3.14159 / 3.14159 * 2.0) * sin(z * 6.0);
17
+ }
18
+ float w = fwidth(v) * 1.5;
19
+ float m = smoothstep(-w, w, v);
20
+ vec3 col = mix(uA, uB, m);
21
+ col *= smoothstep(0.0, 0.08, r) * 0.6 + 0.4;
22
+ col *= mix(0.55, 1.0, vignette(fc / uRes, 0.3));
23
+ fragColor = vec4(toSRGB(col), 1.0);
24
+ }
25
+ `,p={id:"hypnosis",name:"Hypnosis",description:"An endlessly turning hypnotic spiral. Keep looking. You are getting very, very lost.",category:"Abstract",kind:"2d",motion:"live",tags:["webgl","spiral","op-art","trippy","funny","black-and-white"],layout:"center",copy:{eyebrow:"Look into the spiral",title:"You are getting very lost.",message:"When I snap my fingers, you'll forget this URL and click the button below.",actions:[{label:"*snap*",href:"/",variant:"primary",icon:"none"}]},params:{a:"#0a0a0a",b:"#f5f5f5",arms:4,speed:1,pattern:0},theme:{bg:"#0a0a0a",fg:"#ffffff",accent:"#ff2d55","accent-fg":"#fff","code-color":"#ffffff"},presetName:"Classic",presets:{ocean:{name:"Deep Blue",params:{a:"#020a2a",b:"#3bd6ff",arms:3},theme:{accent:"#3bd6ff","accent-fg":"#020a2a"}},toxic:{name:"Toxic",params:{a:"#0a1a02",b:"#c6ff3b",arms:5,speed:1.4},theme:{accent:"#c6ff3b","accent-fg":"#0a1a02"}},candy:{name:"Candy Swirl",params:{a:"#ff2d6f",b:"#ffe6ee",arms:6},theme:{accent:"#111","accent-fg":"#fff"}},rings:{name:"Ripples",params:{pattern:1,a:"#0b1a3a",b:"#4dd8ff"},theme:{accent:"#4dd8ff","accent-fg":"#0b1a3a"}},tunnel:{name:"Op-Art Tunnel",params:{pattern:2,arms:12,a:"#000000",b:"#ffffff"}}},css:`& .lp-content,& .lp-head,& .lp-body{background:color-mix(in srgb,var(--lp-bg) 82%,transparent);border-radius:24px;padding:18px 28px}
26
+ & .lp-code{font-weight:800}`,setup(t){let e=t.params;return n(t,{frag:f,uniforms:()=>({uA:a(e.a),uB:a(e.b),uArms:e.arms,uSpeed:e.speed,uPattern:e.pattern})})}};export{p as default};
@@ -0,0 +1,43 @@
1
+ import{a as u}from"./chunk-LMRCHEWX.js";import{a as l,b as d,c as h,h as g}from"./chunk-QJZBGT2Q.js";import{e as c}from"./chunk-HXSSPN2I.js";import{c as p,e as m}from"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var b=`
2
+ uniform sampler2D uText;
3
+ uniform vec3 uPaper, uInk, uInk2;
4
+ uniform float uCycle;
5
+ ${l}
6
+ ${d}
7
+ ${h}
8
+
9
+ vec2 warp(vec2 p, float t, float amt) {
10
+ vec2 q = vec2(fbm(p * 2.0 + t * 0.05), fbm(p * 2.0 + vec2(5.2, 1.3) - t * 0.04));
11
+ vec2 r = vec2(fbm(p * 3.0 + q * 3.0 + vec2(1.7, 9.2) + t * 0.07), fbm(p * 3.0 + q * 3.0 + vec2(8.3, 2.8) - t * 0.06));
12
+ return (r - 0.5) * amt;
13
+ }
14
+
15
+ void main() {
16
+ vec2 fc = gl_FragCoord.xy;
17
+ vec2 uv = fc / uRes;
18
+ vec2 p = (fc - 0.5 * uRes) / uRes.y;
19
+ float t = uTime;
20
+ // dissolve phase: 0 = crisp letters, 1 = fully bloomed ink
21
+ float c = fract(t / uCycle);
22
+ float phase = smoothstep(0.08, 0.6, c) * (1.0 - smoothstep(0.78, 0.98, c));
23
+ float amt = phase * 0.35;
24
+ vec2 w = warp(p, t, amt);
25
+ // the ink spreads outward from the letters, sinking slightly
26
+ vec2 suv = uv + vec2(w.x * uRes.y / uRes.x, w.y) + vec2(0.0, phase * 0.03);
27
+ float lod = phase * 4.5;
28
+ float d = textureLod(uText, suv, lod).a;
29
+ float d2 = textureLod(uText, uv + vec2(w.x * uRes.y / uRes.x, w.y) * 1.6, lod + 1.0).a;
30
+ float density = clamp(d * (1.0 + phase * 0.8) + d2 * phase * 0.6, 0.0, 1.0);
31
+ // feathered tendrils
32
+ float tend = fbm(p * 7.0 + w * 6.0 + t * 0.03);
33
+ density *= mix(1.0, 0.55 + 0.9 * tend, phase);
34
+ vec3 inkCol = mix(uInk, uInk2, smoothstep(0.2, 0.9, tend) * phase);
35
+ // paper with fibres
36
+ vec3 paper = uPaper * (0.97 + 0.03 * vnoise(p * 240.0)) * (0.98 + 0.02 * fbm(p * 9.0));
37
+ vec3 col = mix(paper, inkCol, smoothstep(0.02, 0.9, density) * 0.96);
38
+ // darker edges where ink pools
39
+ col = mix(col, uInk * 0.6, smoothstep(0.45, 0.5, density) * smoothstep(0.62, 0.5, density) * 0.25 * phase);
40
+ col *= mix(0.92, 1.0, vignette(uv, 0.2));
41
+ fragColor = vec4(toSRGB(col), 1.0);
42
+ }
43
+ `,I={id:"ink",name:"Ink in Water",description:"The numerals bleed into the paper like ink dropped in water, bloom into clouds, then slowly gather back into shape.",category:"Abstract",kind:"2d",motion:"live",tags:["webgl","ink","watercolor","calm","light","editorial","elegant"],layout:"bottom",codeInScene:!0,stillTime:.2,copy:{eyebrow:"Error 404",title:"This page dissolved.",message:"It was here a moment ago, then it bled into the paper. Let's start on a clean page.",actions:[{label:"Start fresh",href:"/",variant:"primary"}]},params:{paper:"#f6f2ea",ink:"#14213d",ink2:"#4a1d6b",cycle:12,font:p},theme:{bg:"#f6f2ea",fg:"#14213d",accent:"#14213d","accent-fg":"#f6f2ea","font-display":"var(--lp-font-serif)","title-weight":"500"},presetName:"Indigo",presets:{ocean:{name:"Blue Ink",params:{paper:"#f4f7fb",ink:"#0b3a8a",ink2:"#2a7bd6"},theme:{bg:"#f4f7fb",fg:"#0b1e3a",accent:"#0b3a8a","accent-fg":"#fff"}},green:{name:"Moss",params:{paper:"#f2f2ea",ink:"#2a4a1a",ink2:"#7a9a3a"},theme:{bg:"#f2f2ea",fg:"#1a2a10",accent:"#2a4a1a","accent-fg":"#fff"}},violet:{name:"Violet",params:{paper:"#faf6ff",ink:"#4a1a8a",ink2:"#c25cd6"},theme:{bg:"#faf6ff",fg:"#24103f",accent:"#4a1a8a","accent-fg":"#fff"}},sumi:{name:"Sumi",params:{paper:"#efe9dc",ink:"#111111",ink2:"#3a3a3a"},theme:{bg:"#efe9dc",fg:"#111",accent:"#111","accent-fg":"#efe9dc"}},crimson:{name:"Crimson",params:{paper:"#fbf6ef",ink:"#8c1c13",ink2:"#d1495b"},theme:{bg:"#fbf6ef",fg:"#3d0b07",accent:"#8c1c13","accent-fg":"#fff"}},teal:{name:"Teal",params:{paper:"#f1f5f2",ink:"#0b4f4a",ink2:"#2a9d8f"},theme:{bg:"#f1f5f2",fg:"#0b2b28",accent:"#0b4f4a","accent-fg":"#fff"}},night:{name:"Gold on Black",params:{paper:"#0e0d0c",ink:"#d9b25f",ink2:"#f3dfa2"},theme:{bg:"#0e0d0c",fg:"#f3e6c8",accent:"#d9b25f","accent-fg":"#0e0d0c"}}},setup(t){let n=t.params,r=document.createElement("canvas"),o=null,e,s=()=>{let a=Math.min(2048,Math.round(t.width*Math.min(2,t.dpr))),f=Math.round(a*t.height/Math.max(1,t.width));r.width=a,r.height=f;let i=r.getContext("2d");i.clearRect(0,0,a,f),i.save(),i.translate(0,f*.37-f*.22),m(i,t.copy.code||"404",{width:a,height:f*.44,font:n.font,weight:700,fit:.86}),i.restore(),o&&(e.bindTexture(e.TEXTURE_2D,o),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.generateMipmap(e.TEXTURE_2D))};return{...u(t,{frag:b,init(a){e=a,s(),o=g(e,r,{filter:"mipmap"})},uniforms:()=>({uText:o,uPaper:c(n.paper),uInk:c(n.ink),uInk2:c(n.ink2),uCycle:n.cycle})}),resize:s}}};export{I as default};
@@ -0,0 +1 @@
1
+ import{a as X,b as D,d as z,e as V,f as W,g as Y}from"./chunk-JLRXT2AZ.js";import{a as O}from"./chunk-4ZBXB36L.js";import{f as C}from"./chunk-HXSSPN2I.js";import"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var j=[["..x..x..","...xx...","..xxxx..",".xx.xx.x","xxxxxxxx","x.xxxx.x","x.x..x.x","...xx..."],["..x..x..","x..xx..x","x.xxxx.x","xxx.xx.x","xxxxxxxx",".xxxxxx.","..x..x..",".x....x."]],F=["....x....","...xxx...","...xxx...",".xxxxxxx.","xxxxxxxxx","xxxxxxxxx","xx.....xx"],U={id:"invaders",name:"Page Invaders",description:"The 404 marches down the screen as a fleet of pixel aliens. The ship defends itself until you take the controls.",category:"Games",kind:"2d",motion:"game",tags:["canvas","game","playable","space","shooter","pixel-art","retro"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"\u2190 \u2192 move \xB7 space fires",title:"Your page was abducted.",message:"The invaders took it and they're not giving it back. Blast a few, then fly home.",actions:[{label:"Retreat to home",href:"/",variant:"primary"}]},params:{bg:"#03030a",aliens:["#7dff6b","#3bd6ff","#ff5ad1"],ship:"#e9ecff",shot:"#ffef5a",text:"#e9ecff",stars:!0},theme:{bg:"#03030a",fg:"#e9ecff",accent:"#7dff6b","accent-fg":"#03030a","font-display":"var(--lp-font-mono)","title-weight":"700"},presetName:"Arcade",presets:{neon:{name:"Neon",params:{bg:"#08000f",aliens:["#ff3bd4","#3bffe6","#ffe14d"],ship:"#ffffff",shot:"#ffffff",text:"#ffe6fb"},theme:{bg:"#08000f",fg:"#ffe6fb",accent:"#ff3bd4","accent-fg":"#fff"}},green:{name:"Phosphor",params:{bg:"#010a03",aliens:["#3dff6b"],ship:"#3dff6b",shot:"#c9ffd6",text:"#3dff6b"},theme:{bg:"#010a03",fg:"#c9ffd6",accent:"#3dff6b","accent-fg":"#010a03"}},mono:{name:"Cabinet White",params:{aliens:["#ffffff"],ship:"#3dff6b",shot:"#ffffff",text:"#ffffff"},theme:{accent:"#ffffff","accent-fg":"#000"}},blush:{name:"Bubblegum",params:{bg:"#fff1f6",aliens:["#ff4f8b","#8a5cff","#ffb13b"],ship:"#2a1640",shot:"#ff4f8b",text:"#2a1640",stars:!1},theme:{bg:"#fff1f6",fg:"#2a1640",accent:"#2a1640","accent-fg":"#fff1f6"}},amber:{name:"Amber",params:{bg:"#0a0600",aliens:["#ffb000","#ff7a00"],ship:"#ffe0a0",shot:"#fff2cc",text:"#ffb000"},theme:{bg:"#0a0600",fg:"#ffe0a0",accent:"#ffb000","accent-fg":"#0a0600"}}},css:Y,setup(M){let o=M.params,t=O(M),m=X(M,{pointerPlays:!1}),b=M.random,r=3,g=[],e={x:0,y:0,dir:1,cell:0},l={x:0,y:0},h=[],S=[],$=[],P=0,v=0,R=3,H=V("invaders"),w=0,q=!1,E=0;function I(){let s=Math.max(18,Math.min(30,Math.round(t.w/52))),x=Math.round(s*.38),i=D(M.copy.code||"404",s,x);g=[];for(let c=0;c<x;c++)for(let p=0;p<s;p++)i[c*s+p]&&g.push({gx:p,gy:c,alive:!0,col:o.aliens[c%o.aliens.length]});e.cell=Math.min(t.w*.62/s,t.h*.36/x),r=Math.max(1.5,e.cell/10),e.x=(t.w-s*e.cell)/2,e.y=t.h*.08,e.dir=1}function G(){I(),l={x:t.w/2,y:t.h*.6},$=Array.from({length:120},()=>({x:b()*t.w,y:b()*t.h,z:.3+b()}))}function L(s,x,i,c,p){t.g.fillStyle=p;for(let d=0;d<s.length;d++)for(let y=0;y<s[d].length;y++)s[d][y]==="x"&&t.g.fillRect(x+y*c,i+d*c,c+.3,c+.3)}return G(),{resize(){t.reset(),G()},frame(s,x){let i=t.g;t.reset(),m.playing&&!q&&(q=!0,v=0,R=3,I(),h=[]);let c=(!M.reducedMotion||m.playing)&&x>0,p=g.reduce((a,n)=>Math.max(a,n.gx),0)+1;if(c&&w<=0){let a=t.w*.03*(1+(1-g.filter(f=>f.alive).length/Math.max(1,g.length))*2.5);e.x+=e.dir*a*x;let n=g.filter(f=>f.alive),A=e.x+Math.min(...n.map(f=>f.gx))*e.cell,k=e.x+(Math.max(...n.map(f=>f.gx))+1)*e.cell;(e.dir>0&&k>t.w-20||e.dir<0&&A<20)&&(e.dir*=-1,e.y+=e.cell*.5);let _=Math.max(...n.map(f=>f.gy));e.y+(_+1)*e.cell>l.y-20&&(e.y=t.h*.08);let T=9*r*1.4;if(m.playing)m.left&&(l.x-=t.w*.55*x),m.right&&(l.x+=t.w*.55*x),(m.action||m.pressed())&&P<=0&&(h.push({x:l.x,y:l.y-4,vy:-t.h*1.2,enemy:!1}),P=.32);else{n.some(u=>u.gx===E)||(E=n[Math.floor(b()*n.length)]?.gx??0);let f=e.x+(E+.5)*e.cell;l.x+=Math.sign(f-l.x)*Math.min(Math.abs(f-l.x),t.w*.35*x),Math.abs(f-l.x)<e.cell&&P<=0&&(h.push({x:l.x,y:l.y-4,vy:-t.h*1.2,enemy:!1}),P=.45,b()<.35&&(E=n[Math.floor(b()*n.length)]?.gx??0))}if(l.x=Math.max(T,Math.min(t.w-T,l.x)),P-=x,b()<x*1.2&&n.length){let f=n[Math.floor(b()*n.length)];h.push({x:e.x+(f.gx+.5)*e.cell,y:e.y+(f.gy+1)*e.cell,vy:t.h*.45,enemy:!0})}for(let f of h)f.y+=f.vy*x;for(let f of h){if(f.enemy){Math.abs(f.x-l.x)<T*.5&&Math.abs(f.y-l.y-6*r)<8*r&&(f.y=1e6,S.push({x:l.x,y:l.y,life:.6,col:o.ship}),m.playing&&(R--,R<=0&&(w=2,v>H&&W("invaders",H=v))));continue}for(let u of g){if(!u.alive)continue;let B=e.x+u.gx*e.cell,N=e.y+u.gy*e.cell;if(f.x>B&&f.x<B+e.cell&&f.y>N&&f.y<N+e.cell){u.alive=!1,f.y=-1e6,v+=20,S.push({x:B+e.cell/2,y:N+e.cell/2,life:.4,col:u.col});break}}}h=h.filter(f=>f.y>-50&&f.y<t.h+50),g.some(f=>f.alive)||I()}else w>0&&(w-=x,w<=0&&(v=0,R=3,I(),h=[]));if(i.fillStyle=o.bg,i.fillRect(0,0,t.w,t.h),o.stars)for(let a of $)a.y+=a.z*18*x,a.y>t.h&&(a.y=0),i.fillStyle=C(o.text,.25*a.z),i.fillRect(a.x,a.y,a.z*1.6,a.z*1.6);let d=Math.floor(s*2)%2;for(let a of g)a.alive&&L(j[d],e.x+a.gx*e.cell+e.cell*.1,e.y+a.gy*e.cell+e.cell*.1,e.cell*.8/8,a.col);for(let a of h)i.fillStyle=a.enemy?o.aliens[0]:o.shot,i.fillRect(a.x-r*.6,a.y,r*1.2,r*5);for(let a of S){a.life-=x,i.fillStyle=C(a.col,Math.max(0,a.life*2));for(let n=0;n<8;n++){let A=n/8*Math.PI*2,k=(.6-a.life)*e.cell*2;i.fillRect(a.x+Math.cos(A)*k,a.y+Math.sin(A)*k,r*1.5,r*1.5)}}S=S.filter(a=>a.life>0),(w<=0||Math.floor(s*8)%2)&&L(F,l.x-4.5*r*1.4,l.y,r*1.4,o.ship);let y=Math.max(10,Math.min(14,t.w/90));z(i,`SCORE ${String(v).padStart(5,"0")}`,20,16,y,o.text),z(i,`HI ${String(H).padStart(5,"0")}`,t.w/2,16,y,o.text,"center"),m.playing?z(i,`LIVES ${R}`,t.w-20,16,y,o.text,"right"):Math.floor(s*1.6)%2===0&&z(i,"DEMO \xB7 PRESS SPACE",t.w/2,l.y+14*r,y,C(o.text,.75),"center")}}}};export{U as default};
@@ -0,0 +1,34 @@
1
+ import{a as g}from"./chunk-LMRCHEWX.js";import{a as c,b as m,c as l,h as i}from"./chunk-QJZBGT2Q.js";import{e as t}from"./chunk-HXSSPN2I.js";import{a as f,e as n}from"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var u=`
2
+ uniform sampler2D uText;
3
+ uniform vec3 uA, uB, uC, uBg;
4
+ uniform float uSeg, uSpeed;
5
+ ${c}
6
+ ${m}
7
+ ${l}
8
+ void main() {
9
+ vec2 fc = gl_FragCoord.xy;
10
+ vec2 p = (fc - 0.5 * uRes) / uRes.y;
11
+ float t = uTime * uSpeed;
12
+ float r = length(p);
13
+ float a = atan(p.y, p.x) + t * 0.08 + uMouse.x * 0.6;
14
+ float seg = 6.28318 / uSeg;
15
+ a = mod(a, seg);
16
+ a = abs(a - seg * 0.5);
17
+ vec2 q = vec2(cos(a), sin(a)) * r;
18
+ q = q * (1.2 + 0.2 * sin(t * 0.3)) + vec2(t * 0.05, 0.0);
19
+ // coloured glass shards
20
+ float n1 = fbm(q * 3.0 + t * 0.1);
21
+ float n2 = fbm(q * 6.0 - t * 0.07 + 4.0);
22
+ vec3 col = mix(uA, uB, smoothstep(0.35, 0.65, n1));
23
+ col = mix(col, uC, smoothstep(0.55, 0.8, n2));
24
+ float edges = smoothstep(0.02, 0.0, abs(fract(n1 * 6.0) - 0.5) - 0.46);
25
+ col = mix(col, uBg, edges * 0.8);
26
+ // the code tumbles through the mirrors
27
+ vec2 tuv = fract(q * 0.6 + vec2(0.5, 0.5 + t * 0.02));
28
+ float txt = texture(uText, tuv).a;
29
+ col = mix(col, vec3(1.0), txt * 0.85);
30
+ col *= smoothstep(1.2, 0.2, r) * 0.9 + 0.15;
31
+ col = toSRGB(col);
32
+ fragColor = vec4(col, 1.0);
33
+ }
34
+ `,y={id:"kaleidoscope",name:"Kaleidoscope",description:"Mirrored shards of colour turn endlessly, with the error tumbling through the mirrors. Move the pointer to rotate the tube.",category:"Abstract",kind:"2d",motion:"live",tags:["webgl","kaleidoscope","psychedelic","colorful","generative","trippy"],layout:"bottom",copy:{eyebrow:"Every angle",title:"We looked from every angle.",message:"Twelve mirrors, endless reflections, and not one of them shows the page you wanted.",actions:[{label:"Stop the spin",href:"/",variant:"primary"}]},params:{a:"#ff3d7f",b:"#3dd6ff",c:"#ffd23d",bg:"#0b0614",segments:12,speed:1},theme:{bg:"#0b0614",fg:"#ffffff",accent:"#ffffff","accent-fg":"#0b0614","code-color":"rgba(255,255,255,.95)"},presetName:"Candy Glass",presets:{ocean:{name:"Ocean Glass",params:{a:"#0077b6",b:"#90e0ef",c:"#ffffff",bg:"#03045e",segments:10}},autumn:{name:"Autumn Glass",params:{a:"#d9541e",b:"#f2b33d",c:"#5a2a12",bg:"#1a0a05",segments:8}},jewel:{name:"Jewel Box",params:{a:"#0a7a5a",b:"#5a0a7a",c:"#d4af37",segments:8}},pastel:{name:"Pastel",params:{a:"#ffc2d9",b:"#c2e7ff",c:"#fff2b3",bg:"#ffffff",segments:10},theme:{bg:"#ffe9f2",fg:"#2a1030",accent:"#2a1030","accent-fg":"#fff","code-color":"#2a1030"}},mono:{name:"Monochrome",params:{a:"#111111",b:"#777777",c:"#eeeeee",bg:"#000000",segments:16}}},css:"& .lp-code{font-weight:900;text-shadow:0 4px 30px rgba(0,0,0,.4)}& .lp-body{text-shadow:0 2px 14px rgba(0,0,0,.5)}",setup(s){let e=s.params,a=document.createElement("canvas");a.width=512,a.height=512;let o=a.getContext("2d");o.save(),o.translate(0,166),n(o,s.copy.code||"404",{width:512,height:180,font:f,weight:900,fit:.7}),o.restore();let r;return g(s,{frag:u,init(p){r=i(p,a,{filter:"linear",wrap:"repeat"})},uniforms:()=>({uText:r,uA:t(e.a),uB:t(e.b),uC:t(e.c),uBg:t(e.bg),uSeg:e.segments,uSpeed:e.speed})})}};export{y as default};
@@ -0,0 +1,55 @@
1
+ import{a as b}from"./chunk-LMRCHEWX.js";import{a as m,b as u,c as x,h as p}from"./chunk-QJZBGT2Q.js";import{e as r}from"./chunk-HXSSPN2I.js";import{a as s,e as d}from"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var h=`
2
+ uniform sampler2D uText;
3
+ uniform vec3 uWax, uWax2, uLiq, uLiq2;
4
+ uniform float uForm, uSpeed;
5
+ ${m}
6
+ ${u}
7
+ ${x}
8
+
9
+ float field(vec2 p, float t) {
10
+ float f = 0.0;
11
+ for (int i = 0; i < 9; i++) {
12
+ float fi = float(i);
13
+ float sp = 0.07 + hash11(fi) * 0.08;
14
+ float x = (hash11(fi + 3.1) - 0.5) * 1.6 + sin(t * 0.3 + fi * 1.9) * 0.18;
15
+ float y = mod(hash11(fi + 7.7) + t * sp * (hash11(fi + 2.0) > 0.5 ? 1.0 : -1.0), 1.5) - 0.75;
16
+ float r = 0.08 + hash11(fi + 11.0) * 0.1;
17
+ vec2 d = p - vec2(x, y * 1.3);
18
+ d.y *= 0.85 + 0.15 * sin(t + fi);
19
+ f += r * r / max(dot(d, d), 1e-4);
20
+ }
21
+ return f;
22
+ }
23
+
24
+ void main() {
25
+ vec2 fc = gl_FragCoord.xy;
26
+ vec2 uv = fc / uRes;
27
+ vec2 p = (fc - 0.5 * uRes) / uRes.y;
28
+ float t = uTime * uSpeed;
29
+ // text field: blurred code shape adds to the metaball field so the wax gathers into it
30
+ float tx = textureLod(uText, uv, 3.5).a;
31
+ float breathe = 0.55 + 0.45 * sin(t * 0.25);
32
+ float f = field(p, t) + tx * 2.2 * uForm * breathe;
33
+ float e = 1.0 / uRes.y * 2.0;
34
+ float fx = field(p + vec2(e, 0.0), t) + textureLod(uText, uv + vec2(e * uRes.y / uRes.x, 0.0), 3.5).a * 2.2 * uForm * breathe;
35
+ float fy = field(p + vec2(0.0, e), t) + textureLod(uText, uv + vec2(0.0, e), 3.5).a * 2.2 * uForm * breathe;
36
+ vec3 n = normalize(vec3((f - fx) * 0.08, (f - fy) * 0.08, 1.0) );
37
+
38
+ vec3 bg = mix(uLiq2, uLiq, smoothstep(-0.6, 0.7, p.y + 0.1 * sin(p.x * 3.0 + t)));
39
+ bg += uWax * 0.12 * exp(-abs(p.x) * 2.0);
40
+ float inside = smoothstep(0.95, 1.05, f);
41
+ vec3 wax = mix(uWax2, uWax, smoothstep(1.0, 3.0, f));
42
+ vec3 L = normalize(vec3(-0.4, 0.6, 0.7));
43
+ float dif = max(dot(n, L), 0.0);
44
+ float spec = pow(max(dot(reflect(-L, n), vec3(0, 0, 1)), 0.0), 40.0);
45
+ wax = wax * (0.55 + 0.6 * dif) + spec * 0.6;
46
+ // subsurface glow near edges
47
+ wax += uWax * smoothstep(1.4, 1.0, f) * 0.35;
48
+ vec3 col = mix(bg, wax, inside);
49
+ // glow around the wax
50
+ col += uWax * 0.18 * smoothstep(0.4, 1.0, f) * (1.0 - inside);
51
+ col = toSRGB(aces(col * 1.1));
52
+ col += grain(fc, uTime) * 0.012;
53
+ fragColor = vec4(col, 1.0);
54
+ }
55
+ `,T={id:"lava-lamp",name:"Lava Lamp",description:"Glossy wax blobs rise, merge and split, and every so often they pull together into the shape of the error.",category:"Abstract",kind:"2d",motion:"live",tags:["webgl","metaballs","retro","70s","groovy","calm","gradient"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Far out",title:"This page melted away.",message:"It got a little too groovy and dissolved. Mellow back to the homepage.",actions:[{label:"Float home",href:"/",variant:"primary"}]},params:{wax:"#ff6a2b",wax2:"#ff2b55",liquid:"#3b0f4f",liquid2:"#120320",form:.85,speed:1},theme:{bg:"#1b0629",fg:"#ffe9de",accent:"#ff8a4c","accent-fg":"#1b0629"},presetName:"Classic",presets:{neon:{name:"Neon Club",params:{wax:"#ff3bd4",wax2:"#7a3bff",liquid:"#05001a",liquid2:"#000000"},theme:{bg:"#05001a",accent:"#ff3bd4","accent-fg":"#fff"}},ocean:{name:"Ocean",params:{wax:"#3bd6ff",wax2:"#1f6bff",liquid:"#04243a",liquid2:"#010a14"},theme:{bg:"#03182a",accent:"#3bd6ff","accent-fg":"#010a14"}},lemon:{name:"Lemonade",params:{wax:"#ffe14d",wax2:"#ff9f1c",liquid:"#fffbe6",liquid2:"#ffe9b0"},theme:{bg:"#fff3c9",fg:"#3a2a00",accent:"#3a2a00","accent-fg":"#fff"}},mint:{name:"Mint",params:{wax:"#6bffcf",wax2:"#2bd4a0",liquid:"#0d3b4f",liquid2:"#031821"},theme:{bg:"#06222c",accent:"#6bffcf","accent-fg":"#03141a"}},sunset:{name:"Sunset",params:{wax:"#ffd23f",wax2:"#ff6b3d",liquid:"#ff4d8d",liquid2:"#5a1c6b"},theme:{bg:"#5a1c6b",accent:"#ffd23f","accent-fg":"#3a0f2b"}},milk:{name:"Milkshake",params:{wax:"#ff8fb1",wax2:"#ff5c8a",liquid:"#fff3e6",liquid2:"#ffe0ec"},theme:{bg:"#ffe8ef",fg:"#4a1328",accent:"#4a1328","accent-fg":"#fff"}},blue:{name:"Electric",params:{wax:"#3bc7ff",wax2:"#5a4bff",liquid:"#0b0b2e",liquid2:"#02020a"},theme:{bg:"#05051a",accent:"#3bc7ff","accent-fg":"#02020a"}}},setup(t){let a=t.params,f=document.createElement("canvas"),c=null,e,l=()=>{let i=Math.max(64,Math.round(512*t.height/Math.max(1,t.width)));f.width=512,f.height=i;let o=f.getContext("2d");o.clearRect(0,0,512,i),o.save(),o.translate(0,i*.38-i*.22),d(o,t.copy.code||"404",{width:512,height:i*.44,font:s,weight:900,fit:.8}),o.restore(),c&&(e.bindTexture(e.TEXTURE_2D,c),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.generateMipmap(e.TEXTURE_2D))};return{...b(t,{frag:h,init(n){e=n,l(),c=p(e,f,{filter:"mipmap"})},uniforms:()=>({uText:c,uWax:r(a.wax),uWax2:r(a.wax2),uLiq:r(a.liquid),uLiq2:r(a.liquid2),uForm:a.form,uSpeed:a.speed})}),resize:l}}};export{T as default};
@@ -0,0 +1 @@
1
+ import{b as R}from"./chunk-JLRXT2AZ.js";import{a as U}from"./chunk-4ZBXB36L.js";import"./chunk-IETNWEVK.js";import"./chunk-URWX3LLV.js";var C={id:"life",name:"Game of Life",description:"Conway's cellular automaton starts from the shape of the error and evolves into gliders and chaos. Draw with your cursor to add life.",category:"Abstract",kind:"2d",motion:"live",tags:["canvas","generative","cellular-automaton","math","interactive","developer"],layout:"bottom",codeInScene:!0,copy:{eyebrow:"Generation 404",title:"This page didn't survive.",message:"It started as a perfect 404 and evolved into this. Draw on the grid to seed new life, or go home.",actions:[{label:"Restart at home",href:"/",variant:"primary"}]},params:{bg:"#0a0b10",young:"#7cf7c8",old:"#3b5bff",grid:"#12141c",cell:10,rate:12,reseed:14},theme:{bg:"#0a0b10",accent:"#7cf7c8","accent-fg":"#0a0b10","font-display":"var(--lp-font-mono)","title-weight":"600"},presetName:"Neon",presets:{matrix:{name:"Matrix",params:{bg:"#000a03",young:"#d7ffe6",old:"#18ff6d",grid:"#021208"},theme:{bg:"#000a03",accent:"#18ff6d","accent-fg":"#000a03"}},candy:{name:"Candy",params:{bg:"#fff6fa",young:"#ff3b8a",old:"#ffc2da",grid:"#ffeaf3"},theme:{bg:"#fff6fa",fg:"#3a0a22",accent:"#3a0a22","accent-fg":"#fff"}},paper:{name:"Graph Paper",params:{bg:"#f7f6f1",young:"#111111",old:"#9aa0a6",grid:"#e6e3da"},theme:{bg:"#f7f6f1",fg:"#111",accent:"#111","accent-fg":"#f7f6f1"}},heat:{name:"Heatmap",params:{bg:"#0d0505",young:"#ffe14d",old:"#ff2d2d",grid:"#170909"},theme:{bg:"#0d0505",accent:"#ffb03b","accent-fg":"#0d0505"}},tiny:{name:"Microscopic",params:{cell:5,rate:20,young:"#e0e7ff",old:"#6d5bff"}}},setup(y){let g=y.params,m=U(y),M=y.random,t=0,c=0,d=g.cell,a=new Uint8Array(0),u=new Uint8Array(0),b=new Uint16Array(0),v=0;function A(){let r=Math.floor(t*.72),n=Math.floor(c*.5),o=R(y.copy.code||"404",r,n,900),e=Math.floor((t-r)/2),l=Math.floor(c*.08);for(let f=0;f<n;f++)for(let s=0;s<r;s++){let p=(l+f)*t+e+s;o[f*r+s]&&(a[p]=1,b[p]=0)}let i=[[1,0],[2,1],[0,2],[1,2],[2,2]];for(let f=0;f<4;f++){let s=Math.floor(M()*(t-4)),p=Math.floor(M()*(c-4));for(let[h,w]of i)a[(p+w)*t+s+h]=1}}function S(){d=Math.max(4,Math.round(g.cell*Math.min(1.3,Math.max(.7,m.w/1440)))),t=Math.ceil(m.w/d),c=Math.ceil(m.h/d),a=new Uint8Array(t*c),u=new Uint8Array(t*c),b=new Uint16Array(t*c),A()}function I(){for(let n=0;n<c;n++){let o=(n-1+c)%c*t,e=n*t,l=(n+1)%c*t;for(let i=0;i<t;i++){let f=(i-1+t)%t,s=(i+1)%t,p=a[o+f]+a[o+i]+a[o+s]+a[e+f]+a[e+s]+a[l+f]+a[l+i]+a[l+s],h=e+i,w=a[h]&&p===2||p===3;u[h]=w?1:0,b[h]=w&&a[h]?Math.min(b[h]+1,999):0}}let r=a;a=u,u=r}y.on("pointermove",r=>{if(!(r.buttons||r.pointerType==="mouse"))return;let n=Math.floor(y.pointer.x/d),o=Math.floor(y.pointer.y/d);for(let e=-1;e<=1;e++)for(let l=-1;l<=1;l++){if(M()<.5)continue;let i=(n+l+t)%t,f=(o+e+c)%c;a[f*t+i]=1}}),S();let x=0,G=(r,n,o)=>{let e=parseInt(r.slice(1),16),l=parseInt(n.slice(1),16),i=(e>>16&255)*(1-o)+(l>>16&255)*o,f=(e>>8&255)*(1-o)+(l>>8&255)*o,s=(e&255)*(1-o)+(l&255)*o;return`rgb(${i|0},${f|0},${s|0})`},P=Array.from({length:16},(r,n)=>G(g.young,g.old,n/15));return{resize(){m.reset(),S()},frame(r,n){let o=m.g;if(m.reset(),n>0){x+=n;let e=r-v<1.4;for(;x>1/g.rate;)x-=1/g.rate,e||I();r-v>g.reseed&&(v=r,A())}o.fillStyle=g.bg,o.fillRect(0,0,m.w,m.h),o.fillStyle=g.grid;for(let e=0;e<=t;e++)o.fillRect(e*d,0,1,m.h);for(let e=0;e<=c;e++)o.fillRect(0,e*d,m.w,1);for(let e=0;e<a.length;e++)a[e]&&(o.fillStyle=P[Math.min(15,b[e]>>1)],o.fillRect(e%t*d+1,(e/t|0)*d+1,d-1,d-1))}}}};export{C as default};
@@ -0,0 +1,60 @@
1
+ import{a as l}from"./chunk-LMRCHEWX.js";import{a as t,b as s,c}from"./chunk-QJZBGT2Q.js";import{e as a}from"./chunk-HXSSPN2I.js";import"./chunk-URWX3LLV.js";var r=`
2
+ uniform vec3 uSky, uSea, uRock, uBeam;
3
+ uniform float uFog, uPeriod;
4
+ ${t}
5
+ ${s}
6
+ ${c}
7
+
8
+ void main() {
9
+ vec2 fc = gl_FragCoord.xy;
10
+ vec2 uv = fc / uRes;
11
+ vec2 p = (fc - 0.5 * uRes) / uRes.y;
12
+ float t = uTime;
13
+ vec2 lamp = vec2(0.36, 0.12);
14
+ float ang = t * 6.28318 / uPeriod;
15
+ // beam direction sweeps in a circle; we see it as a cone that widens and narrows (foreshortening)
16
+ vec2 dir = vec2(cos(ang), 0.0);
17
+ float facing = sin(ang); // >0 toward the viewer
18
+ vec2 d = p - lamp;
19
+ float along = dot(d, normalize(vec2(dir.x, 0.0001 + 0.0)));
20
+ float spread = mix(0.05, 0.6, smoothstep(-0.2, 1.0, facing));
21
+ float cone = smoothstep(spread * abs(along) + 0.01, 0.0, abs(d.y)) * step(0.0, along * sign(dir.x + 1e-4));
22
+ cone *= exp(-abs(along) * mix(1.2, 0.4, facing));
23
+ vec3 col = mix(uSky * 0.4, uSky, smoothstep(-0.2, 0.5, p.y));
24
+ // clouds
25
+ col = mix(col, uSky * 1.4, smoothstep(0.5, 0.75, fbm(p * vec2(1.5, 3.0) + vec2(t * 0.02, 0.0))) * 0.4);
26
+ // sea
27
+ float hz = -0.08;
28
+ if (p.y < hz) {
29
+ float w = fbm(vec2(p.x * 10.0, (p.y - hz) * 60.0 / (hz - p.y + 0.05)) + vec2(t * 0.3, t * 0.1));
30
+ col = uSea * (0.55 + 0.5 * w);
31
+ // beam reflection on the water
32
+ float refl = exp(-pow((p.x - lamp.x - cos(ang) * 0.4 * (hz - p.y) * 3.0) * 8.0, 2.0)) * smoothstep(0.0, 0.6, facing) * (0.4 + w);
33
+ col += uBeam * refl * 0.25;
34
+ }
35
+ // fog lit by the beam
36
+ float fogN = fbm(p * 3.0 + vec2(t * 0.05, 0.0));
37
+ col += uBeam * cone * (0.35 + 0.65 * fogN) * (0.7 + uFog);
38
+ col = mix(col, uSky * 0.9, uFog * 0.35 * smoothstep(0.3, -0.1, abs(p.y - hz)));
39
+ // rocky headland and the tower
40
+ float cliff = -0.1 + 0.085 * smoothstep(0.05, 0.24, p.x) * smoothstep(0.78, 0.46, p.x) + 0.035 * (fbm(vec2(p.x * 9.0, 1.0)) - 0.5);
41
+ float rock = step(p.y, cliff) * step(0.02, p.x);
42
+ col = mix(col, uRock * (0.5 + 0.5 * fbm(p * 30.0)), rock);
43
+ vec2 tq = p - vec2(0.36, -0.035);
44
+ float tower = step(abs(tq.x), mix(0.035, 0.022, clamp(tq.y / 0.15, 0.0, 1.0))) * step(0.0, tq.y) * step(tq.y, 0.15);
45
+ float bands = step(0.5, fract(tq.y * 20.0));
46
+ vec3 tcol = mix(vec3(0.9), vec3(0.75, 0.12, 0.12), bands) * 0.55;
47
+ col = mix(col, tcol, tower);
48
+ float gallery = step(abs(tq.x), 0.032) * step(abs(tq.y - 0.155), 0.006);
49
+ col = mix(col, vec3(0.08), gallery);
50
+ // the lamp itself flares as the beam faces us
51
+ float ld = length(p - lamp);
52
+ float flare = smoothstep(-0.3, 1.0, facing);
53
+ col += uBeam * (exp(-ld * 90.0) * 2.0 + exp(-ld * 14.0) * 0.4 * flare + exp(-abs(p.y - lamp.y) * 120.0) * exp(-abs(p.x - lamp.x) * 3.0) * 0.4 * flare * flare);
54
+ col = toSRGB(aces(col * 1.1));
55
+ col *= mix(0.6, 1.0, vignette(uv, 0.3));
56
+ col += grain(fc, t) * 0.02;
57
+ fragColor = vec4(col, 1.0);
58
+ }
59
+ `,i={id:"lighthouse",name:"Lighthouse",description:"A lighthouse on a rocky headland sweeps its beam through the sea fog, searching the water for your page.",category:"Ocean",kind:"2d",motion:"live",tags:["webgl","lighthouse","night","ocean","fog","moody","cinematic"],layout:"left",copy:{eyebrow:"Keep watch",title:"We searched every wave.",message:"The beam has swept this coast all night. No sign of the page. Steer by the light and head home.",actions:[{label:"Steer for home",href:"/",variant:"primary"}]},params:{sky:"#0d1b2e",sea:"#06111f",rock:"#1a1a1d",beam:"#fff2c9",fog:.6,period:7},theme:{bg:"#08111e",fg:"#f2ecdc",accent:"#fff2c9","accent-fg":"#08111e","code-color":"rgba(255,242,201,.16)"},presetName:"Sea Fog",presets:{aurora:{name:"Northern Coast",params:{sky:"#03201f",sea:"#010f10",beam:"#e6fff6",fog:.4},theme:{bg:"#021615"}},storm:{name:"Squall",params:{sky:"#1a1f26",sea:"#0a0d10",fog:1,period:5},theme:{bg:"#111418"}},dusk:{name:"Last Light",params:{sky:"#3a2a52",sea:"#120f22",beam:"#ffe0b0",fog:.3},theme:{bg:"#1c1530"}}},css:`& .lp-overlay{padding-left:max(16px,calc(var(--lp-pad) * 1.5))}& .lp-head,& .lp-body{max-width:min(460px,40cqw)}
60
+ @container (max-width:760px){& .lp-head,& .lp-body{max-width:none}& .lp-overlay{justify-content:flex-end}}`,setup(o){let e=o.params;return l(o,{frag:r,uniforms:()=>({uSky:a(e.sky),uSea:a(e.sea),uRock:a(e.rock),uBeam:a(e.beam),uFog:e.fog,uPeriod:e.period})})}};export{i as default};