Building the Leaf Arcade browser edition of The Powder Toy

Upstream revision: 9ae1069a34562c72a9fd7802dc62198f0c703dbd (https://github.com/The-Powder-Toy/The-Powder-Toy)
Changes to upstream files (leaf/leaf-changes.patch): meson.build exports Emscripten's FS; GameView.cpp makes the Open button show local saves, because this build has no online save browser.
leaf/ holds the page shell, adapter and packaging script used on leafarcade.com.

1. Install Emscripten 7.0.0 (emsdk install 7.0.0; emsdk activate 7.0.0) and Meson >= 1.0 with Ninja.
2. Prebuilt libraries: meson downloads tpt-libs-prebuilt-wasm32-emscripten-emscripten-static-release-v20260821222421.
   Their complete source and build scripts are in tpt-libs-v20260821222421-wasm-source.tar.gz next to this archive
   (fftw 3.3.8, jsoncpp 1.9.5, Lua 5.1.5 and 5.2.4; build with .github/build.sh for wasm32-emscripten-emscripten-static).
   To build them yourself, set -Dtpt_libs_vtag and point the wrap file at your build.
   After meson has downloaded the prebuilt (step 4 setup), run
   leaf/rebuild-tpt-libs.sh <extracted tpt-libs dir> subprojects/tpt-libs-prebuilt-wasm32-emscripten-emscripten-static-release-v20260821222421
   to rebuild jsoncpp and Lua 5.2 (compiled as C++) with Emscripten 7.0.0; the shipped prebuilt used an older
   Emscripten whose C++ library ABI differs and crashed local saving. fftw is used as shipped.
3. SDL2, bzip2, libpng and zlib come from Emscripten ports; the exact archives are in emscripten-ports/.
4. meson setup --cross-file=.github/emscripten-ghactions.ini -Dbuildtype=release -Dhttp=false -Dstatic=prebuilt build-em
   ninja -C build-em
5. Serve build-em/powder.js and powder.wasm with leaf/index.html, leaf/leaf.css and leaf/leaf-powder-toy.js.
   The page needs Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp (threads).
