| Flow context | Pages use <main class="section-flow"> for inter-section spacing. Posts/articles use <article class="prose-flow"> |
| Manual typography in content zones | Flag manual typography classes on <h2>, <p>, <a> inside content zones — prose handles these. Only flag inside section-flow or prose-flow zones where ambient prose applies |
| Blockquote prose protection | Blockquotes inside prose zones need protection via data-component (prose targets blockquote:not([data-component])) or explicit counter-declarations (border-l-0 pl-0 not-italic) |
| List prose protection | UI lists (navigation, tags, non-content lists) inside prose zones must have list-none p-0 to override prose's list styles. Content lists that should have bullets need no override |
| Landmark vs content wrapping | Landmark components (Hero, Footer, Nav) live on their own in section-flow — don't wrap them in <Section>. Content components sit inside <Section> |
| Section component | Content sections on the page use the Section component. No raw <section> elements with manual padding for content sections |
| Seamless usage | Sections with background colors/images use <Section seamless> (or the landmark's flow attributes). Adjacent seamless sections should butt up (0 gap) |
| Background rhythm | Page has visual rhythm — some variation in section backgrounds (alternating light/dark, or strategic use of color). Flag a page where every section is the same plain background |
| Composition purity — single file | Design system layout directories (src/pages/design-system/layouts/) must contain only one .astro file. Flag extra files |
| Composition purity — zero classes | In layouts and site pages, no Tailwind utility classes on raw HTML elements. Only section-flow on <main> is allowed. If a <div> needs a class, a component is missing |
| Composition purity — no client code | Flag inline <script> tags in layouts and site pages. Use Preact islands via components instead |
| Composition drift | When auditing a layout that has a corresponding site page (or vice versa), check for structural divergence — different section order, missing/extra sections, different component usage. Copy differences are expected (placeholder vs real content). Structural differences are a bug |
| SEO | Site pages (not layouts) have <title>, <meta name="description">. Template-driven pages wire SEO from table fields (meta_title, meta_description). Flag missing OG tags on public-facing pages |