What changed, in one pass.
The shell moves from column to topbar (render.go's shellLayout), which is a whole-app choice — newRenderer parses exactly one layout. Both signed-in screens get one bar. show.html's [rst-page-header] is gone entirely: the brand link is the route back to the list, the document's title sits beside it, sign-out is in the bar's account menu, and the two export links are at the formatting bar's trailing end, which is where both Google Docs and Word put a document's own controls and which was empty white space before. list.html loses sign-out with it and is back to two controls in its header.
The canvas then takes the window. [rst-page]'s 64rem column and its padding are cancelled on the editor screen only, scoped by delivery — that stylesheet ships with show.html and nothing else. Deliberately not 'width: 100vw', which measures the viewport including a classic scrollbar and starts the horizontal scroll SC 1.4.10 forbids; the narrow-screen block below it had already worked that out once and its negative margin is now unnecessary, so it goes.
No new catalog strings. The brand reuses docs.list.title and a document's title is its own data, so no copy-review gate.
Two things found by looking at the rendered result rather than by reasoning about it, both worth a reviewer's attention:
- signin.html's first attempt at hiding the bar did nothing. tokens.css lays it out with '[rst-shell-topbar] [rst-shell-bar]', specificity (0,2,0); a bare '[rst-shell-bar]' is (0,1,0) and loses. The front door kept showing rastrillo's default brand — a 'Home' link to a route its own guard bounces straight back here. Fixed by matching the framework's selector shape.
- At 320px the three toolbar selects measured wider than the bar and the page grew a horizontal scrollbar. That one predates this branch: the toolbar had 320-32-32 = 256px inside [rst-page] and has 320-32 = 288px now, so it was worse before and is still wrong. Fixed here rather than deferred because this is the row being restructured — the group wraps and min-inline-size lifts a select's automatic minimum size. Flagging it because it means this branch contains one fix that is not about layout language at all.
Two judgement calls left open for Paul rather than decided quietly:
- The list screen now reads 'Documents' in the bar and 'Documents' as its h1, directly beneath. Google Drive does exactly this ('Drive' / 'My Drive') and the two are at different weights and sizes, so it is defensible. Making them differ needs a new heading string, which is new user-facing copy and therefore the copy-review gate — not something to slip in here.
- The list header still carries four controls: search field, search button, title field, create button. Better than five, still busy. Google Docs would put search in the bar. That is a further change to list.html's shape rather than a tightening of this one, so it is not in this branch.
Verification: .amadan/ci.d/10-gate exits 0 locally (wire compat both directions, go vet/test/gofmt, build). TestDocumentPageLinksBackToTheList was updated, not deleted — it now asserts the route at [rst-shell-brand], because what it holds is the route rather than the element that carried it, and a shell block a page never defines falls back to the layout's default silently. Checked by rendering: 1440px and 320px on the editor, the list, and the signed-out page.
Not yet done, and both are gates rather than oversights: the highest-capability-model review of the branch as one diff, and Paul's call on the two items above.