Components · Layout and structure

Statement block

A single value-prop tile — icon, headline, one line of body. Built to live in rows of three or four on landing surfaces, where the user is scanning rather than reading.

Documentedby Derek Fidler

Fast approval, no paperwork

Skip the endless forms and waiting times.

One block

Overview

The statement block is the compact unit of a “why pick this product” row. One icon, one headline, one short line. It earns its space when the page is selling — Capital, partnerships, a new product launch — and the user is grazing rather than reading top to bottom.

Three is the magic number

A row of three statement blocks reads like a value proposition. A row of four reads like a feature comparison. A row of five reads like a list someone forgot to cut. Pick three when the three are genuinely the most important; reach for four only when you can’t cut to three.

Row of three

The default layout. Equal columns, generous whitespace, the icons line up across the row. On mobile, the columns stack — the rhythm reads top-to-bottom instead of left-to-right.

Fast approval, no paperwork

Skip the endless forms and waiting times.

Tied to your card sales

Repayment is a small percentage of every transaction — no fixed monthly bill.

Repay as you earn

Slower week? You repay less. Busy week? You clear it faster.

Four across

Trim the headlines and the body when going to four. Each block gets less reading time per scan, so the title needs to carry more meaning on its own.

Fast

Indicative terms in under a minute.

Regulated

Lent by Flatpay Financial Services A/S.

Card-based

Repayment scales with daily sales.

Flexible

No fixed monthly bill, no early-pay penalties.

Variants

Two alignments. Default is center — the landing-page shape. Reach for start when the row is dense, or when the surrounding content is left-aligned and you want the blocks to read as a vertical list of features rather than a horizontal display.

Fast approval, no paperwork

Skip the endless forms and waiting times.

align="start" — left-aligned, for grids that read top-to-bottom column by column.

Repay as you earn

Slower week? You repay less. Busy week? You clear it faster.

No icon — when the title carries the meaning on its own.

In context

Pinned under a Founders display headline, the row of three reads as the page’s core proposition. Use as="li" when the blocks are wrapped in a real list — semantics matter, and the parent should be a <ul>.

Why Capital

Three reasons merchants pick Flatpay Capital over a traditional line of credit.

  • Fast approval, no paperwork

    Skip the endless forms and waiting times.

  • Tied to your card sales

    Repayment is a small percentage of every transaction.

  • Repay as you earn

    Slower week? You repay less. Busy week? You clear it faster.

Anatomy

Three named parts, separated by 24 px gaps. The icon optional; the title and body do the work.

  • Icon (optional). 32 × 32 slot in the foreground colour. Pass an <Icon>, an SVG, or any node — the component sizes its container, but keeps your icon’s style.
  • Title. Inter Tight SemiBold 20 / 24, foreground charcoal. Renders as an <h4> — statement blocks live below an <h2> section heading, which means the heading hierarchy lines up naturally.
  • Body (optional). Inter Tight Regular 16 / 24 at 60% foreground. One short sentence. Tabular-nums and lining figures are on so any numerals (percentages, currencies) stay aligned with the page’s metric type.

Accessibility

  • Icon is decorative. The icon slot is hidden from assistive tech (aria-hidden="true") — the title carries the meaning. Don’t pair a glyph with a title that depends on the icon to make sense.
  • Heading hierarchy. The title renders as <h4>. Pair with an outer <h2> section heading; don’t skip levels (no statement block directly under an <h1>).
  • List semantics when the row is a list. When the blocks are a parallel set of items, wrap them in a <ul> and pass as="li" to each block. Screen readers will announce “list, 3 items” and let the user scan.

Code

tsx

import { StatementBlock } from "@flatpay-dk/ui";

// Row of three on a landing page
<ul className="grid gap-10 sm:grid-cols-3 sm:gap-6">
  <StatementBlock as="li" icon={<BoltIcon />} title="Fast approval, no paperwork">
    Skip the endless forms and waiting times.
  </StatementBlock>
  <StatementBlock as="li" icon={<CardIcon />} title="Tied to your card sales">
    Repayment is a small percentage of every transaction.
  </StatementBlock>
  <StatementBlock as="li" icon={<CycleIcon />} title="Repay as you earn">
    Slower week? You repay less. Busy week? You clear it faster.
  </StatementBlock>
</ul>

// One block, left-aligned, no icon
<StatementBlock align="start" title="Repay as you earn">
  Slower week? You repay less. Busy week? You clear it faster.
</StatementBlock>

Best practices

  • Title carries the meaning.A scanner reads the title and decides whether to read the body. Make every word in the title count — no “features”, “benefits”, “why us”.
  • Parallel structure across siblings. Three titles that all start with verbs read as a unit. One starting with a noun breaks the rhythm. Same goes for body copy length — keep them within ±20% of each other.
  • Use icons sparingly. Either every block in the row has one or none of them do — a row with two icons and one without reads as a missing asset, not a design choice.
  • Don’t turn it into a card.No border, no background, no shadow on a statement block. The Figma is air and type — keep it that way. If the surface needs a container, that’s the parent section’s job, not the block’s.

Props

PropTypeDefaultDescription
title*ReactNodeThe headline. Renders as <h4>, Inter Tight SemiBold 20 / 24.
iconReactNodeOptional 32 × 32 icon. Hidden from assistive tech — the title carries meaning.
childrenReactNodeOptional one-line body copy. Inter Tight Regular 16 / 24 at 60% foreground.
align"center" | "start""center"Horizontal alignment. center is the landing default; start is for dense or vertical layouts.
as"article" | "li" | "div""article"Semantic element. Use "li" when the blocks live inside a <ul>; "article" or "div" when they stand alone.
classNamestringPass-through class on the wrapper.