Soundfont switcher: pick the sampled-instrument font live in settings

Paul: "let me switch soundfonts in the settings section … that sounds really fun." The sampled instruments were baked FluidR3; this makes the font a runtime choice.

• tools/gen-font.js extracts any GM SF2 into a parallel set (found/samples/instruments-/, full-capture via sf2.js) + a compact engine/faust/font-.json {base, instr:{slug:{sr,zones}}}, matching kernel…

• genre-kernel routes the 4 sampler-build sites through fontInstr(id): the ACTIVE font's zones + sample dir, with PER-INSTRUMENT fallback to FluidR3 for anything a font lacks (specialty slugs: upright piano…

• native sampler zoneFor now selects the zone by VELOCITY too (vlo/vhi; absent = full range, so single-velocity fonts are unaffected)

• app/fonts.js loads the manifest, lazy-registers a font on pick, rebuilds the mix and hot-restarts the engine (shared srcIds → reload the caches).

▶ Play it: Rail Replacement Rapture — a bed-heavy genre where the found-sound layer carries the room https://stellate.app/?genre=transitwave&seed=3416&path=749.12536,768.12569,730.12569&xdur=13.122

0c7bd28 https://github.com/aboard-io/stellate/commit/0c7bd2889e7b34d00062ac98d7af9f82481505fe