feat: beui dom renderer experiment, drawing with DOM elements on the web

Adds a `dom` feature to beui: a browser runner, `beui::run_dom`, that keeps
beui's own layout, input and focus but turns each frame's shapes into
absolutely positioned DOM elements, reconciled by content so only what
changed is touched. Text is measured with the browser's fonts through a
canvas, so the module carries no fonts; the icon font is fetched by URL.

- font.rs keeps the shared galley types and cache; FreeType moves to
  font/freetype.rs behind a new `fonts` feature, and font/browser.rs is the
  dom backend. A font generation makes documents lay out again when a web
  font finishes loading.
- The wgpu web runner's event plumbing moves to app/browser.rs, shared with
  the dom runner.
- crates/beui-web-demo shows examples/demo.rs this way, built in a wasm plan
  of its own (wasi-dom) so the dom feature never reaches block-app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0196uUgCMmYrESjLeKT3BBxK
c8f29deb9eClaude committed on 9/26/2026, 9:59:38 PMparent419d88c
36 files changedLine totals unavailable