# CTA stamp

> A closing ask reduced to one small bordered box centred in a very deep band of empty paper. The box is a 1px currentColor outline with no ground of its own, and it is measured by its action: its width comes from the button inside it rather than from the page's grid, so the only geometry in the section is the size of the thing it asks you to click. Inside, a tracked label, three words and the button. States no colour and no font of its own.

Canonical: https://patternpaste.com/pattern/cta-stamp.html
Section: Call to action
Access: Included in Pattern Paste access.
Needs: Requires a block theme on WordPress 7.0 to 7.1. Classic themes and page builders are outside our supported setup. Adaptive patterns use the block theme’s colour, spacing and typography presets; styled variations declare their own colours or type.
Blocks: button, buttons, group, heading, paragraph
Keywords: cta, stamp, mark, boxed, centred, closing, button

## Variations (4)

### Pressed mark (the default)

Identical markup in every theme.

Your paper ground, a hairline box in your text colour, and one filled ink button inside it. The band is empty everywhere else, so the box reads as a stamp pressed onto the page rather than as a card sitting on it.

### Night stamp

Identical markup in every theme.

The colour axis, by inversion. The band flips to your contrast ground with base type, and the box border follows it for free because the border is currentColor. The button inverts with it, so the mark is the same mark seen at night.

### Oxblood and sand

This variation states its own colours and states its own type: identical in every theme.

An oxblood mark on sand pairs a Georgia headline with tracked, small-caps-style labels.

### Filled stamp

Identical markup in every theme.

The composition changes, not the colour. The box gains an ink ground with base type inside it, so the outline becomes a solid block on the same paper band. Same box, same size, opposite weight: an inked stamp instead of an embossed one.


---

## The signature moment: the box is measured by its action

**The signature is a structural mark: the box takes its width from the button
inside it, not from the page's grid.** Every other box in this catalogue is sized
by a column, a `contentSize` or a measure of type. This one is sized by the thing
it is asking you to click, so the only geometry the section states is the size of
one action, and everything around it is empty paper.

That is why the copy is as short as it is. A tracked label of two words, an ask
of three, and a button label of four; the ask is set at display size and is still
narrower than the button under it, so the button is the widest thing in the box
and therefore the thing that sets its width. **A wide box is a card, and the
pattern dies.** If you replace the ask with a sentence, the box grows to fit the
sentence and you have built a panel with a button in it, which is a different and
much more ordinary pattern.

### What the box's width actually depends on

Honestly, and in this order:

1. The box is a `core/group` with `layout: {type: flex, orientation: vertical,
   justifyContent: center}`. WordPress writes a vertical flex layout as
   `flex-direction: column` with `justifyContent` mapped to `align-items`, so
   `center` gives `align-items: center` and every child shrinks to its own
   content width instead of filling the line. A **constrained** group would have
   filled the theme's `contentSize` and there would be no stamp at all; that is
   the one layout decision this pattern turns on.
2. The band around it is also a flex group, horizontal, `justifyContent: center`,
   so the box itself is a flex item that shrinks to its content rather than a
   block filling the band.
3. So the box's width is **its widest child, plus its own horizontal padding**.
   The children are the label, the ask and the button, and the copy is written so
   that the widest of the three is the button: roughly 4 words of button label
   plus `2.75rem` of padding on each side, against an ask of three words at
   `clamp(1.5rem, 2.5vw, 2.25rem)`.
4. There is one bound above it. A flex item still cannot exceed the space it has,
   so at 390px the box stops at the band's inner width and the button, at about
   243px including its padding, still sits comfortably inside it.

Nothing pins the width numerically, and nothing could: a fixed width would be a
literal length pretending to be a relationship, and it would break the moment the
buyer changed the button's label. The relationship is the pattern.

## What it inherits from your theme

- **The typeface.** No font family is stated anywhere. The label's tracking, the
  ask's tight leading and the button's proportions are tuned to read as
  deliberate in a serif theme and in a sans one.
- **Your colours.** The band asks for `base` and the type for `contrast`, both of
  which every stock block theme defines, and each chain ends on a colour
  WordPress itself guarantees, so nothing here can resolve to nothing.
- **The box's edge, for free.** The border is `currentColor` and states no colour
  at all, so it is exactly the colour of the text inside it, in every theme and
  in every variation. That is why the night variation needed no change to the
  box: invert the band and the outline inverts with it.
- **The button's hover and focus states**, which are your theme's to style.

## What it decides for itself

- **The air.** `clamp(7rem, 15vw, 12rem)` top and bottom, stated rather than
  taken from a spacing preset, because the emptiness is the composition and a
  theme with a tight scale would quietly turn this into an ordinary boxed CTA.
- **Sharp corners.** The box has no radius, and the button is pinned to
  `border-radius: 0`, because a stamp with rounded corners is a badge.
- **The button's size.** Padding only. A `core/button` carrying a `typography`
  attribute does not stay valid across editor versions, so
  every button in this catalogue is sized with padding and takes your theme's
  button size otherwise.
- **Full bleed.** The band spans the viewport, so the section reads as a pause in
  the page rather than as another block of content.

## The variations

- **Night stamp.** The colour axis, and only that. The band inverts to your
  `contrast` ground with `base` type; the outline follows the text colour without
  being touched, and the button inverts with it. Use it to close a page that has
  been light the whole way down.
- **Filled stamp.** The composition axis, and only that. The band stays on paper
  and the box gains an ink ground with `base` type inside it, so the outline
  becomes a solid block: the same mark, at the same size, with the opposite
  weight. The 1px `currentColor` border is kept so the geometry is identical to
  the base; on a paper band it simply stops being visible.

- **Oxblood and sand** (`oxblood-and-sand`) states an oxblood mark on sand with a Georgia headline and tracked, small-caps-style label. The compact stamp and surrounding air stay the same.

## What to change first

1. **The ask.** Three words, four at the outside. Read the signature section
   above before you make it longer: the length of this line is the pattern.
2. **The button label.** It sets the width of the box, so it is doing two jobs.
   Four short words is the shape; if you shorten it a lot, widen the button's
   side padding to keep the box from collapsing onto the ask.
3. **The label.** Two words, uppercase, at `0.28em` tracking. It is the only
   incidental type in the section and it is floored at `0.75rem`, which is 12px
   at a phone width.
4. **The link.** The button ships with no `href`, the way every action in this
   catalogue ships. Select it and add yours.
5. **The air**, if this sits between two other quiet sections. Lower both ends of
   the `clamp()` together; raising it much past 12rem starts to read as a broken
   page rather than as space.

## Notes

- Core blocks only: group, paragraph, heading, buttons, button. No plugin,
  nothing to keep updated.
- The box's boundary is a group `style.border`, not a `core/separator`. A group
  border is immune to the theme rule that narrows a separator without
  `is-style-wide` to a short centred stub, so the one structural mark in the
  section cannot quietly disappear.
- Contrast is claimed at 4.5:1 on the label, which is small, and on the button.
  The ask is over the large-text threshold at every width but uses the same
  guaranteed pair, so it is not relying on the 3:1 allowance.
- At 390px nothing stacks or reflows: the box is already the narrowest thing the
  pattern can be, and it simply sits in less paper.
