Math AST. A formula is a Row (horizontal sequence of nodes); every
editable slot in a structure node is itself a Row, so the cursor can
always be described as (path into nested rows, column in that row).
Structural editing model. The cursor is a path of (node index, field)
pairs from the root row plus a column inside the innermost row —
the usual WYSIWYG model for math insets.
The structural glyph constants — the drawing vocabulary that is
not a spelling table: nothing here maps a \name to a meaning
or classifies families; each constant is one canonical glyph with
one structural role. The spelling/classification layer lives under
symbols; render and parse spell their pictures with these names.
Host-independent keymap: the single place where keystrokes are mapped
onto editor operations. The TUI (crossterm) and the wasm bindings
(DOM KeyboardEvent) only translate their native events into Key
and dispatch through Editor::input, so the two frontends cannot
drift apart.