Fixed
- The viewer rendered raw template over the whole UI. 8.3.0's template lost the export modal's closing tags (a modal was spliced in mid-element); browsers recovered by force-closing open elements, which pushed every later modal outside Vue's mount target — they showed as un-compiled
{{ }}overlays with dead buttons, covering the app on every browser. The structure is restored, and a new structural test makes the whole class unshippable: the template must parse perfectly balanced, with every modal inside the mount target. (#408)
📋 Full changelog: docs/CHANGELOG.md