Move node-box sizing into the layout instance via a content-aware
estimator (`estimateLabelBox`) and replace the renderer's per-node
dynamic font-size calculation with fixed sizes (14px main / 11px
secondary). Both modules import the constants from `text-extent.ts`
so the box and the rendered text agree by construction.
The estimator uses 100×60 as a floor so short labels keep the
historical footprint; long labels grow up to 280×140. Explicit
`size` directives still produce exactly the requested dimensions
(matching `sat_size` in the Lean mechanization).
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>