feat: SVG overlay cloze boxes via typst frame walking
- Remove typst-rendered yellow highlight from #blank[]; blanks now render
as plain text in the authoring preamble
- Add frame walker in tala-typst: after compilation, recurse the layout
frame tree matching per-glyph source spans against blank content spans
to produce pixel-space bounding boxes (blank_boxes in RenderResult)
- tala-typst render() gains blank_spans parameter; update example and tests
- Add blank_boxes_located test: verifies 2 non-zero boxes found for 2-blank fixture
- Editor parses source via tala-format to extract blank content spans,
passes them to render(), normalizes boxes to [0,1] in PreviewData
- SVG overlay on preview image: yellow semi-transparent rects for existing
blanks, blue rects for user-drawn boxes, dashed live drag preview
- Draw Cloze toggle button; draw-capture div handles click-drag-release;
IoU matching identifies which existing blank a drawn box targets
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>