fix(web): survive WebKit table quirks, selection run splits, late fonts

Three renderer reliability fixes:

- Register the write-PTY trampoline with table.grow(1) + table.set
  instead of a grow init value: WebKit stores the init value with broken
  type information and every later call_indirect through it traps with a
  signature mismatch, which killed the surface on the first terminal
  reply (resize size reports made it look like resizing broke the
  terminal: cleared canvas, dead render loop, lost focus). Verified with
  an isolated WebKit probe: grow-init traps, grow-then-set delivers.

- Selection no longer splits text runs: since selection tints only the
  background overlay, splitting runs at selection edges just shifted
  glyph spacing whenever the face's true advance differed from the
  measured cell width.

- Re-measure cell metrics when document.fonts finishes loading faces:
  a cold load could measure the grid from a fallback font and render
  with the real one, producing wrong advances and a cursor detached
  from the text. The surface now refits itself when the loaded faces
  change the measurement.

End-to-end verified in WebKit against the dev server: typing after
resize, drag selection with the action menu, no page errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
b72cc87c3eWout Stiens committed on 7/31/2026, 10:24:17 AMparent6a31d5e
3 files changedLine totals unavailable