Component Contract

CTA — Call to action

A centered prompt: title, supporting text, action button(s), and an optional disclaimer.

Live Demo

On a light section

Ready to offer a better pension?

Talk to our team about how DBplus can help your organization attract and retain talent.

DBplus is offered by the CAAT Pension Plan. This page is for information only and does not constitute financial advice.

On a brand (dark) section

Pensions matter — let's talk

See how a modern defined-benefit plan fits your workforce.

1. Summary

Component nameCTA — Call to action
AEM resource typecaat/components/cta
TierComposite — composes Text/Title + Button
PurposePrompt the reader to take a single, clear next step at the end of a page or section.
VariantsOn light · On brand (dark) · with/without disclaimer
Status New
ReplacesThe template-local .pm-cta pattern

Composed of

ConstituentRoleStatus
Text / TitleHeading (.caat-title)✓ composed
ButtonAction(s) — primary, optional secondary/outline✓ composed

2. Design Tokens

TokenRole
--caat-color-text-mutedSupporting text + disclaimer
--caat-color-borderDisclaimer top rule
--caat-space-3 / -4 / -5 / -6Action gap, disclaimer spacing (scale-based)
(title)From Text/Title

3. Authoring Fields

FieldTypeRequiredNotes
TitleTextYesThe prompt — keep it action-oriented
TextRich textNoOne or two supporting sentences
ActionsMultifield (Button)Yes1 primary; an optional secondary/outline
DisclaimerRich textNoFine print below a top rule
On brandCheckboxNoPlace inside a dark brand section

4. Validation Rules

RuleConditionError message
Title + one actionMissing title or no action"A CTA needs a title and at least one action."
One primary actionMore than one primary button"Use a single primary action; make others secondary/outline."

5. Content Guidance

  • One clear primary action. A second action should be lower-emphasis (outline/secondary).
  • Action labels are verb-first ("Talk to us", "Download the guide").
  • Keep supporting text to 1–2 lines; put fine print in the disclaimer.
  • Use the on-brand (dark) variant to make a closing CTA stand out from the page.

6. Semantic HTML

<div class="caat-cta">
  <h2 class="caat-title caat-title--h2">Ready to offer a better pension?</h2>
  <p class="caat-cta__text">Talk to our team…</p>
  <div class="caat-cta__actions">
    <a class="caat-button caat-button--primary caat-button--lg">Talk to us</a>
    <a class="caat-button caat-button--outline-primary caat-button--lg">Download the guide</a>
  </div>
  <p class="caat-cta__disclaimer">…</p>
</div>

7. CSS Contract

SelectorPurpose
.caat-ctaCentered wrapper
.caat-cta__textSupporting copy (measure-capped)
.caat-cta__actionsButton row (centered, wraps)
.caat-cta__disclaimerFine print with top rule

8. Accessibility

RequirementImplementation
Heading levelUse the correct <h*> for the page outline (not chosen for size).
ActionsReal Buttons (links or buttons) with visible focus.
ContrastOn-brand variant uses inverse text (AA on navy); disclaimer muted meets AA.
DisclaimerMarked role="note" when it's a legal note.

9. SEO

Transient / structural UI with no indexable content of its own — no SEO markup required. Ensure any content this component wraps or reveals stays server-rendered and crawlable.

10. Analytics

Analytics are captured through the shared data-analytics-component attribute on the component root (emitted automatically) and reported to the central data layer. Event names and payloads follow the organisation's standard analytics schema — defined centrally with the analytics team, not invented per component — so no bespoke tracking is specified here.

11. AEM Implementation Notes

  • Resource type: caat/components/cta; actions delegate to the Button component.
  • Often placed as the last component in a page, inside a .caat-section (optionally --brand).

12. Dialog Model (cq:dialog)

Simplified model — shows field intent and Granite UI resource types, not the literal cq:dialog node tree (e.g. select options are authored as child items nodes).

{
  "title":      { "sling:resourceType": "…/form/textfield", "required": true },
  "text":       { "sling:resourceType": "…/form/textarea" },
  "actions":    { "sling:resourceType": "…/form/multifield", "field": { "label": "…", "href": "…", "style": "…" } },
  "disclaimer": { "sling:resourceType": "…/form/textarea" },
  "onBrand":    { "sling:resourceType": "…/form/checkbox" }
}

13. QA Checklist

#CheckPass?
1Single primary action; others lower-emphasis
2Heading uses the correct outline level
3On-brand variant: inverse text meets AA
4Actions keyboard-focusable with visible ring

14. Definition of Done

  • Composes Text/Title + Button (no bespoke heading/button CSS).
  • Spacing token-driven; on-light + on-brand both AA.
  • Pensions Matter template refactored from .pm-cta to this.
  • QA checklist signed off.