Pattern

Section headings

The uppercase label that starts a section of a drawer or a step, or labels a group of values.

Copy the bindings from
app/features/fundraisers/routes/dashboard/fundraisers.slug.edit/components/share-messages-drawer-body.tsx
Route
/dashboard/accounts/:acctId/sites/:siteId/fundraisers/:slug/edit

6. Empty collection

A zero count is still visible.

Route
/dashboard/accounts/:acctId/sites/:siteId/volunteers

Assigned animals0

<SectionHeading
  tone="section"
  count={0}
>
  Assigned animals
</SectionHeading>

6. One item

The count follows the title in muted text.

Route
/dashboard/accounts/:acctId/sites/:siteId/volunteers

Assigned animals1

<SectionHeading
  tone="section"
  count={1}
  action={{
    label: 'Edit',
    onPress: openAddMenu2,
  }}
>
  Assigned animals
</SectionHeading>

6. Many items and one action

The same title row works for a larger collection.

Route
/dashboard/accounts/:acctId/sites/:siteId/volunteers

Assigned animals12

<SectionHeading
  tone="section"
  count={12}
  action={{
    label: 'Edit',
    onPress: openAddMenu2,
  }}
>
  Assigned animals
</SectionHeading>

Section tone

Divides a drawer, modal, or step body and is followed by content. The hairline runs to the right edge.

Route
/dashboard/accounts/:acctId/sites/:siteId/fundraisers/:slug/edit

Donor · Thank-you page

Pre-fills the share copy donors see after they give.

<SectionHeading
  tone="section"
>
  Donor · Thank-you page
</SectionHeading>

Section tone with an action

The action takes the hairline’s end, as the contract queue’s Add does. An action that adds something is the dashed, tinted button; any other is a text link.

Route
/dashboard/accounts/:acctId/sites/:siteId/contracts/groups

Contracts · Signing order

1. Dog Adoption Contract, then 2. Feline Adoption Contract.

<SectionHeading
  tone="section"
  action={{
    label: 'Add',
    icon: 'add',
    onPress: openAddMenu2,
  }}
>
  Contracts · Signing order
</SectionHeading>

Caption tone

Labels a value group inside a card, a review group, or a list. No hairline.

Route
/dashboard/accounts/:acctId/sites/:siteId/submitted-forms/:kind?review=:id

Status

In Progress since Oct 12, 2026.

<SectionHeading
  tone="caption"
>
  Status
</SectionHeading>

Caption tone with an action

The action sits at the right end of the card’s title row.

Route
/dashboard/accounts/:acctId/sites/:siteId/submitted-forms/:kind?review=:id

Latest note

Called the landlord; pets are allowed.

<SectionHeading
  tone="caption"
  action={{
    label: 'View all',
    onPress: showAllNotes,
  }}
>
  Latest note
</SectionHeading>