Quieten the label sections and anchor the add-a-label field master
Four things a reader said about the label surfaces, and none of them is a new capability. The sentence explaining that a goal stands under every label it carries is gone. It was arithmetic about the page rather than anything about the work, and each section is counted where it stands, so a heading is already true of what is under it. `overlapping()` goes with it, since the surface was its only caller. A section heading is plain text now, not the label's own chip. The pressable pills all live in the bar a few pixels above; the same word painted twice in two weights read as two controls for one thing, and a page of quiet section headings does not want the loudest one to be the one a section is filed under. Both kinds of heading — a label and "No labels" — are the one shape. "Group by label" moves up between the all/open/ended segment and the chips, so every control a reader operates stands on the bar's first line in the order they narrow in: which goals, how they are arranged, which labels. The second line keeps its reserved height because that reservation is what stops a chip press moving the list, but it is now blank until something is narrowed, so the bar sheds most of its bottom padding — the held-open row is that padding. The add-a-label field opens in a panel anchored under the chip that opens it rather than in the goal's meta row. A field and a button arriving in that row pushed every fact after them along the line and, on a full one, wrapped it and moved the description underneath — which is the one thing a control a reader is pointing at must not do. Out of flow, nothing on the row moves at all. The field is the app's ordinary field again now that it no longer stands in a row of chips, and that is what fixes the datalist arrow: it sat off centre because a field shrunk to chip size was given an arrow shrunk to match, and the browser centres its own indicator when it is left at its own size. Dismissal follows the board's status filter — pointerdown outside closes and keeps the draft, Escape cancels, clears and hands focus back to the chip. Covered by a mounted assertion that opening the field leaves the meta row's items exactly as they were, one for the draft surviving a click away but not an Escape, one that a section heading holds no button and no chip and that its count is the rows beneath it, and `test/label-surfaces.test.mjs` for the two promises only the stylesheet and the markup can keep: the panel is out of flow and the bar's second line is reserved. Co-Authored-By: claudebot.disnetdev.com (did:plc:n6ku5xddiuguwze3f356evla) <claudebot.disnetdev.com@noreply.radial>