features.midcentury-shape-catalogue · Shape catalogue

A features pattern from Mid-Century Modern, drawn alone below with this design's tokens and sample copy. Used in this design on: home page, section 2. Give the section root data-pattern="features.midcentury-shape-catalogue". A guide only: DESIGN.md and tokens.json are the source of truth.

Rule
A title block with a half-sun on 1–4; features flow two per row across 5–12, each led by a teal circle beside its title and paragraph.
Slots
sectionLabel, title, features[4..6]
Grid areas
intro 1-4 · features 5-12 (12-column grid, 1-based inclusive spans)
Tokens
bg #F3E9D6 · text #2B231B · heading #2B231B · accent #C9552A · accent2 #0099BE · League Spartan / Jost · radius 20px · space unit 8px (full list in design/tokens.json)

Pattern notes

  • On 1–4: the label, the title at step 5 (heaviest weight, max 12 ch) and a large orange half-sun (lg) under it. Features flow two per row across 5–12 (an even number, 4 or 6); each feature is a row: a teal circle (md), then the title (h3) and a paragraph (max 40 ch) stacked beside it.

What you get

What we do

Positioning

Find the one sentence your best customers already believe.

Identity systems

Logos, type and colour that work on a factory floor and a pitch deck.

Websites

Fast, editable sites built on the CMS your team already knows.

Sales enablement

Decks, one-pagers and demos your reps actually use.

Product naming

Names that survive trademark search and a noisy trade show.

Brand governance

Guidelines as a living site, not a forgotten PDF.

Layout tree (as in design/layout.json)
{
  "pattern": "features.midcentury-shape-catalogue",
  "kind": "features",
  "grid": {
    "intro": "1-4",
    "features": "5-12"
  },
  "slots": [
    "sectionLabel",
    "title",
    "features[4..6]"
  ],
  "tree": {
    "el": "grid",
    "gap": 3,
    "rowGap": 6,
    "children": [
      {
        "el": "box",
        "span": "1-4",
        "alignSelf": "start",
        "gap": 3,
        "children": [
          {
            "el": "text",
            "color": "link",
            "slot": "sectionLabel",
            "role": "eyebrow",
            "transform": "uppercase",
            "tracking": "wide"
          },
          {
            "el": "text",
            "slot": "title",
            "role": "h2",
            "step": 5,
            "tracking": "tight",
            "leading": "tight",
            "maxCh": 12
          },
          {
            "el": "shape",
            "kind": "half-circle",
            "size": "lg",
            "fill": "accent"
          }
        ]
      },
      {
        "el": "repeat",
        "span": "5-12",
        "slot": "features",
        "min": 4,
        "max": 6,
        "layout": "grid",
        "cols": 2,
        "gap": 6,
        "of": {
          "el": "box",
          "mobile": "keep",
          "dir": "row",
          "gap": 3,
          "align": "start",
          "children": [
            {
              "el": "shape",
              "kind": "circle",
              "size": "md",
              "fill": "accent2"
            },
            {
              "el": "box",
              "gap": 1,
              "children": [
                {
                  "el": "text",
                  "slot": "title",
                  "role": "h3"
                },
                {
                  "el": "text",
                  "slot": "body",
                  "role": "body",
                  "maxCh": 40
                }
              ]
            }
          ]
        }
      }
    ]
  }
}
Component example: reference/features.midcentury-shape-catalogue.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>features.midcentury-shape-catalogue — Mid-Century Modern</title>
<link rel="stylesheet" href="base.css">
<style>
  section { padding: var(--section) 0; }
  .intro { grid-column: 1 / 5; display: grid; gap: calc(var(--unit) * 3); align-content: start; }
  .intro h2 { font-size: var(--step-5); max-width: 12ch; }
  .sun { width: 120px; height: 60px; border-radius: 120px 120px 0 0; background: var(--accent); }
  .list { grid-column: 5 / 13; display: grid; grid-template-columns: 1fr 1fr; gap: calc(var(--unit) * 5); }
  .item { display: grid; grid-template-columns: 22px 1fr; gap: calc(var(--unit) * 3); align-items: start; }
  .item::before { content: ""; width: 22px; height: 22px; border-radius: 50%; background: var(--teal); margin-top: 4px; }
  .item h3 { font-size: var(--step-1); margin-bottom: 8px; } .item p { max-width: 40ch; }
  @media (max-width: 640px) { .list { grid-template-columns: 1fr; margin-top: calc(var(--unit) * 5); } }
</style>
</head>
<body>
<section class="wrap">
  <div class="grid">
    <div class="intro"><p class="eyebrow">Why it lasts</p><h2>Built the slow way, on purpose.</h2><span class="sun" aria-hidden="true"></span></div>
    <div class="list">
      <div class="item"><div><h3>Moulded ply shells</h3><p>Seven layers of birch, pressed in steam and left to cure for three weeks.</p></div></div>
      <div class="item"><div><h3>Solid walnut legs</h3><p>Turned from American black walnut and finished with hard oil, not lacquer.</p></div></div>
      <div class="item"><div><h3>Wool you can re-cover</h3><p>Every cushion zips off; we sell the fabric by the metre for forty years.</p></div></div>
      <div class="item"><div><h3>Repairs for life</h3><p>Send any piece back to the workshop and we will fix it at cost.</p></div></div>
    </div>
  </div>
</section>
</body>
</html>

Other patterns in this design

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