Hero Section
Stats Row
Logo Marquee / Trust Bar
CTA Strip (Multi-Card)
Real-Time Monitoring
Circuit-level visibility across your entire portfolio.
AI Detection
Anomaly detection that finds faults before they escalate.
Energy Analytics
Granular consumption data for optimization and reporting.
CTA Arrow Link
Dark Image Container
Documentation
Page Sections
Overview
Section-level patterns for Persuade x Web Page composition (homepages, landing pages, campaign pages). These sit between component patterns (buttons, cards) and full-page composition rules (foundations/composition.md).
These patterns cover the Persuade purpose type. Inform and Convert pages use different section vocabularies and are documented in foundations/composition.md and the corresponding cells in rules/visual-rules.yml.
Token Usage
Colors
- Brand teal:
color.brand.verdigris(hero labels, stat numbers, CTA arrow links) - Dark background:
color.neutral.950(hero sections, close sections) - Dark container:
color.neutral.900(image container wrapper) - Muted foreground:
color.semantic.muted-foreground(stat labels, section descriptions)
Typography
- Display:
font-family.display(Lato) for hero H1 and stat numbers - Body:
font-family.body(Inter) for all other text - Mono:
font-family.mono(JetBrains Mono) for section labels
Spacing
- Section padding: 4rem-8rem depending on narrative role (see Composing a Persuade Page)
- Card gap: 1.5rem (
components.cta-strip-cards.gap) - Logo gap: 2rem-4rem (
components.logo-marquee-bar.min_gap,.max_gap)
Hero Section
The first section on a persuade page. Serves the hook narrative role: capture attention, state the value proposition.
A hero combines two independent axes. Scale (full / standard / minimal) is set by page tier. Posture (authoritative / belonging / restrained) is set by page role. See foundations/composition.md Page Hierarchy and Hero Posture for routing.
Scale
| Scale | Section padding | Min height | H1 size | Gradient strip | Used on |
|---|---|---|---|---|---|
| Full | 8rem | min(100svh, 50rem) with 22rem floor |
4rem | Yes | Homepage only |
| Standard | 5rem | auto | 3rem | No | Product, Platform, Hardware, Solutions, About, Industries, Careers, Partners |
| Minimal | 4rem | auto | 2.5rem | No | Pricing, signup, demo |
Body specs apply to all scales: line-height 1.65-1.75, max line length 65ch, body letter-spacing +0.01em.
Posture: Authoritative (dark)
Default for product evaluation pages. The dark ground creates visual weight that signals “this is serious infrastructure.” Used on homepage, platform, hardware, and solutions pages.
| Property | Value |
|---|---|
| Background | color.semantic.hero-authoritative-bg (neutral.950) |
| Text | color.semantic.hero-authoritative-fg (neutral.50) |
| Section label | mono, uppercase, teal |
| Stat cards | Frosted glass on dark (bg-white/5 + backdrop-blur) |
| Primary CTA | Filled teal |
| Secondary CTA | Ghost-on-dark (transparent, white/60 border) |
Do:
- Let the hero breathe. Whitespace is the primary signal of quality on persuade pages.
- Use the gradient strip (at full scale) as a visual transition to the next section.
- Pair a primary filled CTA with a ghost-on-dark secondary CTA.
Don’t:
- Fill the hero with secondary information (partner logos, taglines, social proof).
- Use more than one H1 on the page.
- Add more than two CTAs.
Posture: Belonging (teal)
For identity pages where brand teal reads as warmth, not accent. Used on About and at most one companion identity page (mission, investors, annual report). Capped at 2 pages per site by composition.site-level.hero-posture-match.
| Property | Value |
|---|---|
| Background | color.semantic.hero-belonging-bg (brand.verdigris) |
| Text | color.semantic.hero-belonging-fg (neutral.50) |
| Section label | mono, uppercase, neutral.50 at 70% opacity |
| Stat cards | Frosted glass on teal (bg-white/10 + backdrop-blur) |
| Primary CTA | White filled with teal text |
| Secondary CTA | Ghost-on-teal (transparent, white/60 border) |
Do:
- Use only on identity pages. Copy speaks as the company (“who we are”), not about the product.
- Keep imagery human (team photos, hands-on, physical goods) rather than abstract.
Don’t:
- Use on product, platform, hardware, or industry pages. Teal is your trust color; spending it on every page strips its meaning.
- Mix accent colors inside the hero. Teal is already the ground; adding midnight-purple or cyber-yellow on top creates visual noise.
Posture: Restrained (light)
For awareness-stage and non-product surfaces: industry landings (search arrivals), recruiting pages, and partner pages. Full authoritative weight would over-sell on these surfaces. Restrained means lower intensity, not softer voice.
| Property | Value |
|---|---|
| Background | color.semantic.hero-restrained-bg (neutral.50) |
| Text | color.semantic.hero-restrained-fg (neutral.950) |
| Section label | mono, uppercase, teal |
| Stat cards | color.semantic.card bg with 1px color.semantic.border (neutral.200) |
| Primary CTA | Filled teal |
| Secondary CTA | Ghost-on-light (transparent, neutral.300 border) |
Do:
- Keep typography and copy understated. Short, technical, confident. No hedging qualifiers, no warmth-photography framing, no “here is how we help your world.”
- Use teal as a precise accent (eyebrow label, primary CTA). Do not tint the hero region with teal washes.
- Keep CTAs anchored to the visitor’s job (“See how we help data centers”, “View open roles”) without softening the brand voice.
Don’t:
- Use on product, platform, hardware, or solutions pages. Light heroes on evaluation pages feel like white-label starter templates.
- Lead with lifestyle imagery (smiling teams, office tours) to signal “approachability.” That is softness, not restraint. Technical imagery (data center floor, hardware on a rack) is on-brand; stock-photo warmth is not.
- Default to this posture to look modern. Authoritative is the right signal for product evaluation; restrained is the right signal for pre-product visitors, and nothing else.
Stats Row
Large numbers with labels, used for trust and metric displays. Serves the turn or evidence narrative role.
Color by Content Category
Stat numbers default to brand teal (color.brand.verdigris) when all metrics are trust-region content (technology, platform, data quality). When stats span multiple content categories, number color can follow the palette semantics from foundations/color.md:
- Trust/technology metrics: teal (default)
- Detection/alert metrics: energy region (
mp-step-2ormp-step-3) - Savings/ROI metrics: results region (
cyber-yellow) on dark backgrounds only - Recovery/sustainability metrics: growth region (
cy-step-2) on dark backgrounds only
When in doubt, use teal. Teal + neutrals must comprise at least 70% of color expression on any surface.
Specifications
| Property | Value | Rule reference |
|---|---|---|
| Number size | 2rem-3.5rem | components.stats-row.number.min_size, .max_size |
| Number weight | 700 | components.stats-row.number.font_weight |
| Number color | color.semantic.primary |
components.stats-row.number.color |
| Label transform | uppercase | components.stats-row.label.text_transform |
| Label tracking | 0.05em | components.stats-row.label.letter_spacing |
| Label weight | 500 | components.stats-row.label.font_weight |
| Label color | color.semantic.muted-foreground |
components.stats-row.label.color |
| Layout | horizontal | components.stats-row.layout |
| Responsive | stack vertical below sm (640px) | components.stats-row.responsive |
Do’s
-
Do: Use 3-4 stats. Fewer than 3 looks sparse; more than 4 overwhelms.
-
Do: Use real numbers, not rounded generics. “2.1B+” is more credible than “Billions.”
Don’ts
-
Don’t: Mix units inconsistently. If one stat uses a suffix (“+”, “%”), apply the same formatting logic across all stats.
-
Don’t: Place the stats row as the first section. Stats land harder after the reader has context (the hook and at least one evidence section).
Logo Marquee / Trust Bar
Scrolling logo display for social proof. Serves the proof narrative role.
Specifications
| Property | Value | Rule reference |
|---|---|---|
| Container | overflow hidden | components.logo-marquee-bar.overflow |
| Logo height | 1.25rem-2rem | components.logo-marquee-bar.logo_min_height, .logo_max_height |
| Logo opacity | 0.7 | components.logo-marquee-bar.logo_opacity |
| Gap | 2rem-4rem | components.logo-marquee-bar.min_gap, .max_gap |
| Reduced motion | static display (no scroll) | components.logo-marquee-bar.requires_reduced_motion |
Implementation
The marquee requires a duplicated logo set inside an overflow-hidden container. The animation translates the track by -50% (one full set width) and loops infinitely. On prefers-reduced-motion: reduce, the animation stops and logos display statically.
Do’s
-
Do: Mute logo opacity to 0.7. Logos at full opacity compete with page content for attention.
-
Do: Include at least 6 logos to fill the viewport. Fewer creates visible gaps in the scroll.
Don’ts
-
Don’t: Mix logo sizes. All logos should share the same max-height for visual consistency.
-
Don’t: Use the marquee without a reduced-motion fallback. The scrolling animation can cause discomfort for motion-sensitive users.
CTA Strip (Multi-Card)
Horizontal card strip where each card is a call-to-action. Serves the evidence narrative role (feature highlights, product areas).
Specifications
| Property | Value | Rule reference |
|---|---|---|
| Layout | horizontal (grid) | components.cta-strip-cards.layout |
| Gap | 1.5rem | components.cta-strip-cards.gap |
| Card width | 16rem-24rem | components.cta-strip-cards.card_min_width, .card_max_width |
| Card padding | 1.5rem | components.cta-strip-cards.card_padding |
| Card radius | 0.625rem | components.cta-strip-cards.card_border_radius |
| Hover effect | hover-lift | components.cta-strip-cards.hover_effect_ref |
| Responsive | scroll horizontal on mobile, grid on desktop | components.cta-strip-cards.responsive |
Do’s
-
Do: Use 3 cards for a balanced row. 2 looks incomplete; 4+ may not fit without scrolling on tablet.
-
Do: Keep card content to heading + one sentence. CTA cards are scannable, not readable.
Don’ts
-
Don’t: Mix hover-lift with hover-scale on CTA cards. Pick one. See
categories/animation/hover-states.mdfor the hover-lift pattern. -
Don’t: Add images to CTA strip cards. These are text-forward micro-CTAs, not feature cards with hero images.
CTA Arrow Link
Inline link with a trailing arrow that expands on hover. Used where a full button is too heavy.
Specifications
| Property | Value | Rule reference |
|---|---|---|
| Font weight | 500 | components.cta-arrow-link.font_weight |
| Arrow character | → | components.cta-arrow-link.arrow_character |
| Display | inline-flex, center-aligned | components.cta-arrow-link.display |
| Default gap | 0.25rem | components.cta-arrow-link.min_gap |
| Hover gap | 0.5rem | components.cta-arrow-link.max_gap |
| Transition | gap 200ms ease | components.cta-arrow-link.transition |
| Hover gate | compound media query required | components.cta-arrow-link.requires_hover_query |
The arrow span should have aria-hidden="true" since the arrow is decorative.
Do’s
-
Do: Use CTA arrow links for section-level navigation (“See detection in action”, “Read the case study”). They are lighter than buttons and guide the reader forward.
-
Do: Place arrow links at the end of a section, after the content has made the case.
Don’ts
-
Don’t: Use arrow links for primary page CTAs. Primary actions get buttons (filled or ghost-on-dark). Arrow links are secondary.
-
Don’t: Mix arrow links with the underline CTA-link pattern (
components.cta-link) in the same section. Pick one style per context.
Dark Image Container
Dark wrapper for showcasing dark-themed screenshots on light pages. Prevents jarring contrast at the light/dark boundary.
Specifications
| Property | Value | Rule reference |
|---|---|---|
| Background | color.neutral.900 |
components.dark-image-container.background |
| Border radius | 0.625rem | components.dark-image-container.border_radius |
| Padding | 1.5rem-3rem | components.dark-image-container.min_padding, .max_padding |
| Overflow | hidden | components.dark-image-container.overflow |
Do’s
-
Do: Use the dark container when embedding Patina dashboard screenshots or dark-mode UI on light page backgrounds. The neutral.900 wrapper provides a visual frame.
-
Do: Use the smaller padding (1.5rem) for inline images and larger padding (3rem) for hero-scale screenshots.
Don’ts
-
Don’t: Use the dark container for light-themed images. It inverts the purpose and makes the image look detached.
-
Don’t: Nest dark containers inside dark page sections (hero, footer). The container exists to bridge light-to-dark contrast, which is not needed on already-dark surfaces.
Composing a Persuade Page
These section patterns map to narrative roles defined in foundations/composition.md:
| Narrative role | Section pattern | Color intensity | Padding |
|---|---|---|---|
| Hook | Hero Section | Full expression (dark bg, teal) | 8rem |
| Context | Body text on neutral.200 bg. Max-width 65ch, 1.6 line-height. | Breathing room (neutral.200) | 4rem |
| Evidence | CTA Strip Cards, card grids | Supporting (teal label, white bg) | 4rem |
| Turn | Stats Row with accent background | Accent (tint + border) | 5rem+ |
| Proof | Logo Marquee + Dark Image Container | Supporting (teal label) | 4rem |
| Close | Hero-weight dark section with CTA | Full expression (dark bg) | 4rem+ |
Arc rules
See foundations/composition.md for the full narrative arc rules governing section ordering and pacing.
Section flow
Pages must follow the lightness rhythm rules to avoid strobing (alternating dark/light sections). See foundations/color.md for context and rules/visual-rules.yml -> color.section-flow for machine rules.
See foundations/composition.md for the coupling rules (color-to-spacing, color-to-typography, type-to-spacing) and whitespace principle.
Related
- Composition – Purpose x Surface framework and coupling rules
- Hover States – Hover-lift, ghost-on-dark, CTA arrow-link hover patterns
- Buttons – Button variants including ghost-on-dark
- Visual Rules – Machine-readable rules (canonical values)