### Browser runtime (`wai-web/`)

- New crate: wasm-bindgen wrapper exposing `parse(bytes) → WaiEnvelope`,
  `pack(manifest_json, payload)`, and `known_capabilities()`. 107 KB
  wasm + 16 KB JS glue.
- `wai-web/demo/wai.js` — thin JS shim with `WaiRuntime.register(cap,
  handler)` dispatch. Backends are **pluggable** (browser-native APIs,
  transformers.js, WebGPU compute, WebNN, ONNX runtime web) — WAI
  doesn't bundle any. The sink-side compute fabric is heterogeneous;
  the deployer picks per capability.
- `wai-web/demo/index.html` — drop-and-decode demo with handlers wired
  to: `createImageBitmap` for `wai.image.{png,jpeg,avif,jxl}`,
  `AudioContext` for `wai.audio.{opus,flac}`, placeholders for
  `wai.neural.*` showing where transformers.js / WebNN / WebGPU plug
  in. Run with `python3 wai-web/demo/serve.py`.
- 4 sample `.wai` files in `wai-web/demo/samples/` covering PNG, JXL,
  Opus, and EnCodec for testing.

