Serializable document model + pure evaluator.
Group evaluation: pass 1 accumulates shape paths and applies modifiers in
document order; pass 2 recurses/emits styles bottom-first so Scene.items
is in painter's order. Nodes live in a slotmap arena. Tree membership is
attach/detach so undo/redo never changes a NodeId.