features.frosted-stacked-panes · Stacked panes

A features pattern from Frosted Glass, drawn alone below with this design's tokens and sample copy. Used in this design on: home page, section 3. Give the section root data-pattern="features.frosted-stacked-panes". A guide only: DESIGN.md and tokens.json are the source of truth.

Rule
Intro on 1–4; features as a stack of wide frosted panes on 5–12, each with a ring mark, title and muted paragraph side by side.
Slots
sectionLabel, title, body, features[3..5]
Grid areas
intro 1-4 · panes 5-12 (12-column grid, 1-based inclusive spans)
Tokens
bg #0A0F1F · text #E4EAF6 · heading #FFFFFF · accent #6E8BFF · accent2 #A67AE8 · Sora / Manrope · radius 22px · space unit 8px (full list in design/tokens.json)

Pattern notes

  • Columns 1–4 hold the eyebrow, h2 (step 4, weight 600) and a muted paragraph, top-aligned. Columns 5–12 hold 3–5 wide frosted panes with small gaps; each pane is a row: a small accent ring (sm) on the left, then the h3 and a muted paragraph (max 56 ch).

What you get

What we do

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.

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.

Layout tree (as in design/layout.json)
{
  "pattern": "features.frosted-stacked-panes",
  "kind": "features",
  "grid": {
    "intro": "1-4",
    "panes": "5-12"
  },
  "slots": [
    "sectionLabel",
    "title",
    "body",
    "features[3..5]"
  ],
  "tree": {
    "el": "grid",
    "gap": 5,
    "children": [
      {
        "el": "box",
        "span": "1-4",
        "alignSelf": "start",
        "gap": 3,
        "children": [
          {
            "el": "text",
            "color": "textMuted",
            "slot": "sectionLabel",
            "role": "eyebrow"
          },
          {
            "el": "text",
            "slot": "title",
            "role": "h2",
            "step": 4,
            "weight": 600,
            "tracking": "tight",
            "maxCh": 16
          },
          {
            "el": "text",
            "color": "textMuted",
            "slot": "body",
            "role": "body",
            "maxCh": 34
          }
        ]
      },
      {
        "el": "repeat",
        "span": "5-12",
        "slot": "features",
        "min": 3,
        "max": 5,
        "layout": "list",
        "gap": 3,
        "of": {
          "el": "box",
          "bg": "surface",
          "dir": "row",
          "gap": 4,
          "pad": [
            4,
            4
          ],
          "align": "start",
          "border": "all",
          "children": [
            {
              "el": "shape",
              "kind": "ring",
              "size": "sm",
              "fill": "accent"
            },
            {
              "el": "box",
              "gap": 1,
              "children": [
                {
                  "el": "text",
                  "slot": "title",
                  "role": "h3",
                  "weight": 600
                },
                {
                  "el": "text",
                  "color": "textMuted",
                  "slot": "body",
                  "role": "body",
                  "maxCh": 56
                }
              ]
            }
          ]
        }
      }
    ]
  }
}
Component example: reference/features.frosted-stacked-panes.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>features.frosted-stacked-panes — Frosted Glass</title>
<link rel="stylesheet" href="base.css">
<style>
  section { padding: calc(var(--unit) * 17) 0; position: relative; }
  .intro { grid-column: 1 / 5; align-self: start; display: grid; gap: calc(var(--unit) * 3); position: sticky; top: 96px; }
  .intro h2 { font-size: var(--step-4); max-width: 16ch; }
  .panes { grid-column: 5 / 13; display: grid; gap: calc(var(--unit) * 3); list-style: none; padding: 0; }
  .pane { display: flex; gap: calc(var(--unit) * 4); padding: calc(var(--unit) * 4); }
  .ring { flex: none; width: 44px; height: 44px; border-radius: 50%; border: 3px solid var(--accent); }
  .pane h3 { font-size: var(--step-2); margin-bottom: 6px; }
  .pane p { max-width: 56ch; }
  .blob { position: absolute; width: 520px; right: -120px; top: 20%; background: var(--accent2); z-index: -1; }
  @media (max-width: 640px) { .intro { position: static; } .pane { flex-direction: column; gap: calc(var(--unit) * 2); } }
</style>
</head>
<body>
<section class="wrap">
  <div class="blob" aria-hidden="true"></div>
  <div class="grid">
    <div class="intro"><p class="eyebrow">Why teams switch</p><h2>Finance that stays out of the way</h2><p class="muted">Three things we obsess over so your finance lead doesn't have to.</p></div>
    <ul class="panes">
      <li class="pane glass"><span class="ring" aria-hidden="true"></span><div><h3>Every bank, one ledger</h3><p class="muted">Connect accounts in 40 countries through open banking. Balances reconcile themselves every minute.</p></div></li>
      <li class="pane glass"><span class="ring" aria-hidden="true"></span><div><h3>Runway you can trust</h3><p class="muted">Forecasts built from real payroll and contracts, not spreadsheets someone forgot to update.</p></div></li>
      <li class="pane glass"><span class="ring" aria-hidden="true"></span><div><h3>Approvals in Slack</h3><p class="muted">Spend requests arrive where your team already works, with the context needed to say yes.</p></div></li>
    </ul>
  </div>
</section>
</body>
</html>

Other patterns in this design

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