Foundations
Page Layout
How to structure page sections, apply alternating backgrounds, maintain vertical rhythm, and create visual separation without break bands or stacked separators.
Overview
Every CAAT page is composed of full-width sections stacked vertically. Each section gets a background colour, consistent vertical padding, and contains a .container to constrain content width. This pattern replaces the legacy approach of using thick coloured bars, horizontal rules, or empty spacer components between page blocks.
The system provides three background tiers — white, grey, and blue — that alternate to create natural visual separation. No additional dividers or break elements are needed between sections.
Section Rhythm
Alternate between white and grey backgrounds to create a clear reading rhythm. Use blue sparingly for emphasis sections (stats, CTAs, or key messaging).
Recommended Pattern
Background Tiers
| Tier | Token | Value | Text Colour | Purpose |
|---|---|---|---|---|
White |
#ffffff (default) |
— | --caat-ink / --caat-blue-900 |
Default section background. Primary content, forms, articles. |
Grey |
--caat-grey |
#eff2f7 | --caat-ink / --caat-blue-900 |
Alternating sections. Card grids, feature lists, testimonials, logo walls. |
Blue |
--caat-blue-900 |
#003750 | #fff (headings), rgba(255,255,255,.75) (body) |
Emphasis sections. Stat strips, strength metrics, primary CTAs, "join" blocks. Use sparingly — 1–2 per page max. |
Colour Inversion Rules
When a section uses the blue background, all child components must invert their colours:
| Element | On white/grey | On blue |
|---|---|---|
| Section title | --caat-blue-900 | #fff |
| Section subtitle | --caat-muted | rgba(255,255,255,.75) |
| Body text | --caat-ink | rgba(255,255,255,.88) |
| Eyebrow labels | --caat-green-700 | --caat-lime |
| Stat values | --caat-blue-900 | #fff |
| Stat labels | --caat-muted | rgba(255,255,255,.7) |
| Dividers / borders | --caat-grey-200 | rgba(255,255,255,.2) |
Decision Tree: Which Background?
Use this guide when laying out a page to decide each section's background:
| Question | Answer | Background |
|---|---|---|
| Is this the first content section after the hero? | Yes | White |
| Is the previous section white? | Yes | Grey (alternate) |
| Is the previous section grey? | Yes | White (alternate) |
| Is this a stat strip or strength metrics bar? | Yes | Blue |
| Is this a primary CTA / "Join" / "Talk to us" block? | Yes | White (or blue for a single high-impact CTA) |
| Is this the page's most important takeaway? | Yes | Blue (max 1–2 per page) |
| Does this section contain a card grid or feature list? | Yes | Grey (cards pop better on grey) |
| Does this section have a video embed? | Yes | White (video needs clean frame) |
Section Spacing
All sections use consistent vertical padding to maintain rhythm. Content is always constrained within a Bootstrap .container.
| Context | Padding | Notes |
|---|---|---|
| Standard section | 4rem 0 (64px top/bottom) | Default for all page sections. Mobile (<768px): compresses one step to 3rem 0 automatically via layout.css — see the Responsive foundation |
| Compact section (stat strip) | 1.25rem 2rem | Tighter for data-dense horizontal bars |
| Hero section | 4rem 0 minimum | May be larger depending on hero variant |
| CTA section | 4rem 0 | Same as standard — consistency is key |
| Footer | 3rem 0 | Slightly tighter, dark blue background |
4rem padding on each section creates 8rem of total visual space between content blocks (4rem bottom of Section A + 4rem top of Section B). This is sufficient — do not add margin, spacer components, or empty containers between sections.
Section Anatomy
Every page section follows the same structural pattern:
<section class="caat-section caat-section--grey"
aria-labelledby="section-heading">
<div class="container">
<h2 class="caat-section__title" id="section-heading">
Section heading
</h2>
<p class="caat-section__subtitle">
Supporting description text
</p>
<!-- Components go here -->
</div>
</section>
Anatomy Breakdown
| Element | Required | Purpose |
|---|---|---|
<section> | Yes | Full-width semantic wrapper with background colour class |
aria-labelledby | Yes | Links to the section heading for screen readers |
.container | Yes | Constrains content to max-width (1320px) with horizontal padding |
.caat-section__title | Recommended | Centred section heading, weight 900, uses --caat-blue-900 (or white on blue) |
.caat-section__subtitle | Optional | Centred sub-heading, max-width 44rem, muted colour |
| Component content | Yes | Any combination of DS components (cards, forms, charts, etc.) |
Anti-Patterns
These are common patterns found on the current site that should not be replicated in the new design system.
Full-width break bands
Don't use thick coloured bars spanning the full viewport width to separate page sections. These create a jarring, segmented "stacked boxes" appearance.
Instead: Use alternating white/grey backgrounds. The colour change is the divider.
Separators as spacers
Don't use <hr> or separator components between page sections to add vertical space. The separator is for within-content use only.
Instead: Sections have built-in 4rem padding. No spacers needed.
Same background on adjacent sections
Don't use the same background colour for two adjacent sections — they will merge visually and lose their distinct identity.
Instead: Always alternate. Grey → White → Grey.
Overusing blue sections
Don't use blue backgrounds for more than 1–2 sections per page. When overused, the emphasis is lost and the page feels heavy.
Instead: Reserve blue for 1–2 high-impact moments (stats, CTA).
Grid System
CAAT uses Bootstrap 5's 12-column fluid grid inside every .container. The grid provides responsive breakpoints, gutters, and alignment utilities.
Container widths
| Breakpoint | Class | Max-width | Typical use |
|---|---|---|---|
| xs | .container | 100% | Mobile — full-width with padding |
| sm (≥576px) | .container | 540px | Large phones landscape |
| md (≥768px) | .container | 720px | Tablets |
| lg (≥992px) | .container | 960px | Small laptops |
| xl (≥1200px) | .container | 1140px | Desktops |
| xxl (≥1400px) | .container | 1320px | Wide screens — CAAT default max |
Grid rules
- Always nest content in
.container → .row → .col-*— never place content directly inside a section without a container. - Gutter: Default gutter is
1.5rem(24px). Use.g-4(1.5rem) for card grids,.g-3(1rem) for tighter layouts. - No offset hacks: Use
.justify-content-centeron the row to centre fewer than 12 columns, not empty offset columns. - Responsive: Always define at least
col-12(mobile) + one larger breakpoint (e.g.col-md-6).
Gutter reference
| Class | Value | Use case |
|---|---|---|
.g-0 | 0 | Edge-to-edge image grids, flush cards |
.g-3 | 1rem | Tight layouts — badge groups, stat pills |
.g-4 | 1.5rem | Standard card grids, icon cards |
.g-5 | 3rem | Spacious feature layouts, hero + sidebar |
Column Layouts
Common column patterns used across CAAT pages. Each pattern is responsive — stacking to single-column on mobile.
Standard patterns
Single column (narrow)
For article body text, forms, legal content. Max-width constrained for readability.
.col-lg-8.mx-auto or max-width: 44rem
680px content width — optimal reading line length
Two column — equal (6 + 6)
Side-by-side comparisons, image + text, two feature blocks.
.col-md-6.col-md-6Two column — weighted (8 + 4)
Article with sidebar, main content + CTA panel, video + description.
.col-lg-8Main content.col-lg-4Sidebar / asideThree column (4 + 4 + 4)
Card grids, feature trios, icon cards, stat blocks.
.col-md-4.col-md-4.col-md-4Four column (3 + 3 + 3 + 3)
Logo walls, stats strips, small feature cards.
.col-lg-3.col-lg-3.col-lg-3.col-lg-3Responsive stacking rules
| Desktop layout | Tablet (md) | Mobile (xs–sm) |
|---|---|---|
| 4 columns | 2 × 2 grid | Single stack |
| 3 columns | 2 + 1 or full stack | Single stack |
| 2 columns (equal) | Stays 2-column | Single stack |
| 2 columns (8+4) | Stays weighted or stacks | Single stack, sidebar below |
| Single narrow | Same | Full-width with padding |
Page Templates
Six standard page templates define the section structure, grid layout, and component slots for different content types at CAAT. Each template specifies which sections are required vs. optional and what column patterns to use.
Homepage
The primary entry point. Bold hero, key messages, trust signals, and clear CTAs.
Grid: Full-width hero → container sections. Mix of 3-col card grids and 2-col feature splits. Max 1 blue emphasis section.
Landing Page
Campaign or product-focused. Persuasion-driven, top-to-bottom narrative flow. Example: Pensions Matter.
Grid: Alternating white/grey. Heavy use of auto-fit grids for icon cards. Single blue emphasis band. 10–12 sections typical.
Sub Page (Interior)
Standard interior content page. Sidebar navigation for deep content structures (e.g. About, Plan details, Employer resources).
Grid: 3 + 9 sidebar layout inside container. Sidebar collapses to top nav or off-canvas on mobile. Main content area uses narrow prose width (max 44rem).
Article / Blog Post
Long-form editorial content. Optimised for reading with constrained width, clear typography, and minimal distractions.
Grid: Single centred column (.col-lg-8.mx-auto) for body content. Full-width grey section at bottom for related cards. No sidebar — focused reading experience.
News / Listing Page
Index page for articles, news, resources, or publications. Filterable grid with pagination.
Grid: 3-column card grid (.col-md-6.col-lg-4). Filter bar spans full container width. Cards stack to 2-col on tablet, 1-col on mobile.
Events
Webinars, conferences, employer info sessions. Combines listing with detail view.
Listing view
Detail view
Grid: Listing uses 2-col (.col-md-6). Detail uses 8+4 weighted layout. Registration panel is sticky on desktop.
Template comparison
| Template | Hero style | Primary grid | Sidebar | Typical sections | Blue band |
|---|---|---|---|---|---|
| Homepage | Composable (gradient/image) | 3-col cards | No | 5–7 | 1 (CTA) |
| Landing page | Feature Resource (fullbleed) | Auto-fit grids | No | 10–12 | 1 (metrics) |
| Sub page | Typographic header | 9-col main | Yes (3-col) | 3–5 | 0 |
| Article | None (inline header) | 8-col centred | No | 3–4 | 0 |
| News listing | Typographic header | 3-col cards | No | 3 | 0 |
| Events | Typographic header | 2-col cards / 8+4 detail | No | 3–4 | 0–1 |
AEM Implementation
In AEM, each page section is a Layout Container with a style policy that controls the background colour. Authors select the background when configuring the container — they don't need to add any CSS classes manually.
Layout Container Policy
| Policy field | Type | Options |
|---|---|---|
| Section background | Select (Style System) | default (white) · grey · blue |
| Section ID | Text | Auto-generated or author-defined anchor ID for deep linking |
| Full width | Checkbox | If checked, section background spans viewport; content stays in container |
Style System Mapping
| Style option | CSS class applied | Result |
|---|---|---|
| Default (White) | none | White background, dark text |
| Grey | caat-section--grey | background: var(--caat-grey) |
| Blue | caat-section--blue | background: var(--caat-blue-900); color: #fff |
HTL Template
<section class="caat-section ${section.styleClasses}"
aria-labelledby="${section.id}-heading"
data-sly-use.section="com.caat.models.SectionModel">
<div class="container">
<sly data-sly-resource="${'content' @ resourceType='wcm/foundation/components/responsivegrid'}"/>
</div>
</section>
Author Guidance
CSS Contract
These classes are available for page-level section styling. They should live in a shared page-layout stylesheet, not in individual component CSS.
| Class | Purpose |
|---|---|
.caat-section | Base section wrapper: padding: 4rem 0 |
.caat-section--grey | Grey background: background: var(--caat-grey) |
.caat-section--blue | Blue background: background: var(--caat-blue-900); color: #fff |
.caat-section__title | Centred section heading: weight 900, clamp(1.5rem, 3vw, 2.2rem) |
.caat-section__subtitle | Centred sub-heading: max-width 44rem, muted colour |
/* ── Page section rhythm ── */
.caat-section {
padding: 4rem 0;
}
.caat-section--grey {
background: var(--caat-grey);
}
.caat-section--blue {
background: var(--caat-blue-900);
color: #fff;
}
.caat-section__title {
font-family: var(--caat-font-primary);
font-weight: 900;
font-size: clamp(1.5rem, 3vw, 2.2rem);
color: var(--caat-blue-900);
letter-spacing: -.02em;
text-align: center;
margin-bottom: .5rem;
}
.caat-section--blue .caat-section__title {
color: #fff;
}
.caat-section__subtitle {
text-align: center;
color: var(--caat-muted);
max-width: 44rem;
margin: 0 auto 2.5rem;
font-size: 1.05rem;
}
.caat-section--blue .caat-section__subtitle {
color: rgba(255,255,255,.75);
}
Real Examples
The Pensions Matter template demonstrates the alternating pattern in practice:
Notice the strict alternation: white → grey → white → grey, with a single blue emphasis section near the end.