cta.neobrutal-stamp-banner · Stamp banner

A cta pattern from Neo-Brutalism, drawn alone below with this design's tokens and sample copy. Used in this design on: home page, section 7; about page, section 4. Give the section root data-pattern="cta.neobrutal-stamp-banner". A guide only: DESIGN.md and tokens.json are the source of truth.

Rule
A bordered accent banner with the headline tilted −2° on 1–8, the body and a large secondary button on 9–12, and a yellow star at the top of 7–9, between the headline's end and the body.
Slots
headline, body, cta
Grid areas
headline 1-8 · action 9-12 · star 7-9 (12-column grid, 1-based inclusive spans)
Tokens
bg #FFF4DE · text #111111 · heading #000000 · accent #FF5FA2 · accent2 #00BCA1 · Archivo Black / Space Grotesk · radius 8px · space unit 8px (full list in design/tokens.json)
Section
vertical padding step 10

Pattern notes

  • One accent-filled bordered banner with the hard shadow. The headline (step 6, heaviest weight, onAccent) sits on 1–8 rotated −2°; the body and a medium secondary button are bottom-aligned on 9–12. A yellow star (lg, rotated 20°) sits at the top of 7–9, between the headline's end and the body (it may break the banner's top edge), and hides on phone. Use once per page.

Have a hard thing to explain?

Each engagement starts with a two-week audit: interviews with customers, sales and the people who build the product. The brief writes itself after that.

Start a project
Layout tree (as in design/layout.json)
{
  "pattern": "cta.neobrutal-stamp-banner",
  "kind": "cta",
  "grid": {
    "headline": "1-8",
    "action": "9-12",
    "star": "7-9"
  },
  "slots": [
    "headline",
    "body",
    "cta"
  ],
  "tree": {
    "el": "box",
    "bg": "accent",
    "pad": [
      8,
      6
    ],
    "border": "all",
    "children": [
      {
        "el": "grid",
        "gap": 3,
        "align": "center",
        "children": [
          {
            "el": "shape",
            "span": "7-9",
            "rowSpan": "1-1",
            "mobile": "hide",
            "alignSelf": "start",
            "kind": "star",
            "size": "lg",
            "fill": "surfaceAlt",
            "rotate": 20
          },
          {
            "el": "text",
            "span": "1-8",
            "rowSpan": "1-1",
            "color": "onAccent",
            "slot": "headline",
            "role": "h2",
            "step": 6,
            "tracking": "tight",
            "leading": "tight",
            "maxCh": 14,
            "rotate": -2
          },
          {
            "el": "box",
            "span": "9-12",
            "rowSpan": "1-1",
            "alignSelf": "end",
            "gap": 3,
            "children": [
              {
                "el": "text",
                "color": "onAccent",
                "slot": "body",
                "role": "body",
                "maxCh": 30
              },
              {
                "el": "button",
                "slot": "cta",
                "variant": "secondary",
                "size": "md",
                "arrow": true
              }
            ]
          }
        ]
      }
    ]
  }
}
Component example: reference/cta.neobrutal-stamp-banner.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>cta.neobrutal-stamp-banner — Neo-Brutalism</title>
<link rel="stylesheet" href="base.css">
<style>
  section { padding: calc(var(--unit) * 10) 0; }
  .banner { background: var(--accent); padding: calc(var(--unit) * 8) calc(var(--unit) * 6); position: relative; align-items: center; }
  .banner h2 { grid-column: 1 / 9; font-size: var(--step-6); color: var(--on-accent); transform: rotate(-2deg); max-width: 14ch; line-height: 0.95; }
  .banner .side { grid-column: 9 / 13; align-self: end; display: grid; gap: calc(var(--unit) * 3); color: var(--on-accent); }
  .banner .btn { background: var(--surface); color: var(--ink); justify-self: start; }
  .banner .star { position: absolute; top: -36px; left: 62%; width: 110px; background: var(--surface-alt); transform: translateX(-50%) rotate(20deg); }
  @media (max-width: 640px) { .banner { padding: calc(var(--unit) * 5) calc(var(--unit) * 3); } .banner h2 { font-size: var(--step-4); } }
</style>
</head>
<body>
<section class="wrap">
  <div class="banner box grid">
    <h2>Your next invoice is free.</h2>
    <div class="side">
      <p>Send your first ten invoices on us. Upgrade when you're busy, not before.</p>
      <a class="btn" href="/signup">Make an invoice <span aria-hidden="true">→</span></a>
    </div>
    <div class="star deco" aria-hidden="true"></div>
  </div>
</section>
</body>
</html>

Other patterns in this design

Whole design · Spec bundle (JSON) · On the style page