Layout contract
PageLayout, ToolbarRow, ListPageFooter — enforced Workshop page grammar from hq-ui-full remediation.
Foundations · fixture-only
List page footer anchor
Every list/index page pairs ListSurface with ListPageFooter to prevent orphan whitespace.
Fixture data only — behaviour matches production chrome
Toolbar gap-2
Filter/search strips use ToolbarRow (gap-2) — no mixed 4px/12px clusters.
Fixture data only — behaviour matches production chrome
Detail hero scale
RecordHero on detail pages — 20px title + caption line, not 15px list-scale h1.
Fixture data only — behaviour matches production chrome
PageLayout
Main column + optional aside; data-page-kind drives mechanical h1 bands on list pages.
List surface
1 row
ToolbarRow
Single gap-2 filter strip — layout contract §3.
Anti-pattern: orphan whitespace
List without footer anchor leaves dead canvas — always pair ListSurface + ListPageFooter.
Without footer anchor
— specimen only