Column
.frame
Centers the route inside --frame. Every interior page uses it on main.
Design · Structure
Structure is how routes assemble existing roles — not a second spacing scale. Every interior page shares one shell; the landing page is the only route that uses .hero and .band.
Shell
website/app/layout.tsx owns the skip link, masthead, and colophon. Each route supplies main#content. The skip target must stay on that element.
body a.skip → #content header.masthead … shared chrome main#content … route body footer.colophon … shared chrome
.skip#content..masthead / .colophonmain#contentInterior
Interior routes wrap content in frame page, open with PageMast, then place collections or reading columns below. Spacing tokens are on the Space page.
<main id="content" className="frame page">
<PageMast kicker="…" title="…">
<p className="lede">…</p>
</PageMast>
…body…
</main>Column
.frameCenters the route inside --frame. Every interior page uses it on main.
Padding
.pageVertical rhythm for interior routes (--space-7 top, --space-8 bottom). Omit on the landing page.
Opening
PageMast / .introKicker, one h1.title, optional children — normally a single .lede.
PageMast.kickerPageMast.titleh1. Do not repeat it inside Markdown prose.PageMast.childrenSpecimen
This block is the live PageMast output: same classes as /status, /syntax, and the catalog.
Regions
A .stack separates sibling regions. Each .group keeps its heading, supporting copy, and one related cluster together.
Region one
Use a group per catalog section or doc chapter.
Region two
Prose and collections stay inside the group they belong to.
.stack--space-6 between major regions..group.prose--measure. See Content.Recipes
Pick the smallest shell that fits the route. These match live pages today.
Example: /status
<PageMast … /> <article className="prose" />
One reading column after the mast. Markdown h1 is stripped so the page title stays unique.
Example: /syntax
<PageMast … /> <div className="stack"> <section className="group">…prose…</section> <section className="group">…prose…</section> </div>
Use when a route has two or more named regions with their own section titles.
Example: /learn
<PageMast … /> <div className="tiles">…</div>
PageMast, then a single equal-track grid. No stack wrapper unless another region follows.
Example: /design/typography
<PageMast … /> <div className="stack"> <section className="group">…</section> … </div>
Most catalog routes: mast, then a stack of groups. The design layout adds catalog subnav first.
Landing
Only / uses this recipe. main#content has no .page class. Each region is section.frame with either .hero or .band.
Research language · incomplete
Display title, actions, then factual chips — one thought.
Next region
Figures, maps, and featured collections each get their own band.
.hero.display title — not PageMast. One per site, on the home route only..band.intro block or jump straight to content.Catalog layout
website/app/design/layout.tsx wraps every catalog page in main#content.frame.page, renders DesignNav, then the route body. Individual catalog pages still use PageMast — do not duplicate the layout shell inside a page file.
<main id="content" className="frame page"> <DesignNav /> <PageMast … /> <div className="stack">…</div> </main>
Avoid
h1 when PageMast already supplies the page title..stack inside .group unless the inner stack is the group's single content cluster.