feat(desktop): plain DOM block surface for the tag-query editor view
The query view mounts one block div per item with a single selected block, block-level fold as a class toggle, and content-visibility: auto on each block. Selection and fold state is a DOM-free leaf (createBlockState) behind select/fold/unfold/foldAll/unfoldAll/blockCount, so another surface can implement the same interface. home.js picks the surface from surface=dom|cm (default dom; cm shows a not-built notice) and runs a measurement over generated items when the URL has syntheticBlocks=N. At 1000 plain-text blocks on an Apple M4, mount takes about 4 ms and fold/unfold about 2 ms with content-visibility: auto, against 40-70 ms and 34 ms without it. The spec records the numbers and how this surface covers search, ':' commands, marks and the inline editor's use of the vim command area.