page shell
Contract: docs/contract/components/page-shell.md in the repository. Every fixture below renders in light and dark.
page = document implies serif page-wide and the nav-width column. Pass the same option to htmlAttributes and renderPageShell; a rounded document is rejected. Compose the content as a soft document glass pane with wtk-prose, an h1 and wtk-meta. The package supplies padding, edge trims and the document title size. Canvas remains independent: app documents can keep canvas = wash.
The one document h1 can be nested inside header.postHeader[data-wtk-contents-title-anchor]; deleting consumer title rules does not require moving the blog/newsroom header. A guest loading only content.css can declare data-wtk-page="document" on html, the shell, or its own main/article root. The preset rules and zero-specificity token fallbacks travel with that stylesheet. Under a v0.5.0 host, the column remains the host’s existing width; bump the host before newsroom guests.
htmlAttributes({ page: "document", canvas: "wash" })renderPageShell({ page: "document", headerHtml, mainHtml, footerHtml })Contract: docs/contract/components/document-page.md. Document fixture also renders at 390px.
The 0.6.0 kit wash owns gradient stops and overscroll endpoint colours from the widget palette alpha recipe over whiteblack, preserving the 180px edge fade. Neutral glass panes stay neutral. The wash, links/accent and primary colour fixtures each cover all eight tints and both schemes. Primary labels and tint text use kit values verbatim, with ratio reports; neutral text retains the AA gate. .wtk-primary-action binds only the primary colour roles on a native anchor/button; .wtk-tint-text binds raw tint ink. Widget-card data is exported unused, including the semantic grey recipe rather than invented system-grey RGB.