hero.split-offset · Split offset

A hero pattern from Swiss International, drawn alone below with this design's tokens and sample copy. Used in this design on: home page, section 1. Give the section root data-pattern="hero.split-offset". A guide only: DESIGN.md and tokens.json are the source of truth.

Rule
Headline flush left across columns 1–8, bottom-aligned; meta column at 10–12 carries subhead and CTA. Column 9 stays empty.
Slots
eyebrow, headline, subhead, cta, meta
Grid areas
heading 1-8 · meta 10-12 (12-column grid, 1-based inclusive spans)
Notes
Headline at type scale step 6, bottom-aligned with the meta column. A 4px rule spans the full grid above both columns.
Tokens
bg #FAFAFA · text #1F1F1F · heading #0F0F0F · accent #E2271D · accent2 #850001 · Inter Tight / Hanken Grotesk · radius 0px · space unit 8px (full list in design/tokens.json)
Section
vertical padding step 8

Pattern notes

  • The headline block owns columns 1–8 and is bottom-aligned with the meta column at 10–12; column 9 is the gutter that makes the asymmetry visible. A 4 px rule spans 1–12 at the top of the hero. Headline at scale step 6, weight 700, tight tracking, max ~14 characters per line. The meta column opens with a hairline, then the subhead (body size), the primary CTA (accent fill, square, arrow) and a small muted meta line (location, date or availability). At phone width: eyebrow, headline, then the meta column.

Brand & product studio

We make complicated companies simple to choose

Northfold is a 14-person studio helping manufacturers, labs and B2B teams explain what they do — and look like they mean it.

Start a project

Booking projects from June 2026

Layout tree (as in design/layout.json)
{
  "pattern": "hero.split-offset",
  "kind": "hero",
  "grid": {
    "heading": "1-8",
    "meta": "10-12"
  },
  "slots": [
    "eyebrow",
    "headline",
    "subhead",
    "cta",
    "meta"
  ],
  "notes": "Headline at type scale step 6, bottom-aligned with the meta column. A 4px rule spans the full grid above both columns.",
  "tree": {
    "el": "grid",
    "gap": 3,
    "rowGap": 6,
    "align": "end",
    "minVh": 0.86,
    "children": [
      {
        "el": "divider",
        "span": "1-12",
        "alignSelf": "start",
        "weight": 4
      },
      {
        "el": "box",
        "span": "1-8",
        "alignSelf": "end",
        "gap": 3,
        "children": [
          {
            "el": "text",
            "color": "textMuted",
            "slot": "eyebrow",
            "role": "eyebrow"
          },
          {
            "el": "text",
            "slot": "headline",
            "role": "display",
            "step": 6,
            "weight": 700,
            "tracking": "tight",
            "leading": "tight",
            "maxCh": 14
          }
        ]
      },
      {
        "el": "box",
        "span": "10-12",
        "alignSelf": "end",
        "gap": 3,
        "pad": [
          2,
          0
        ],
        "border": "top",
        "children": [
          {
            "el": "text",
            "slot": "subhead",
            "role": "body",
            "maxCh": 36
          },
          {
            "el": "button",
            "slot": "cta",
            "variant": "primary",
            "size": "md",
            "arrow": true
          },
          {
            "el": "text",
            "color": "textMuted",
            "slot": "meta",
            "role": "small"
          }
        ]
      }
    ]
  }
}
Component example: reference/hero.split-offset.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>hero.split-offset — Swiss International</title>
<link rel="stylesheet" href="base.css">
<style>
  .hero { min-height: 86vh; padding: calc(var(--unit) * 8) 0; display: grid; align-content: space-between; row-gap: calc(var(--unit) * 6); }
  .hero .heading { grid-column: 1 / 9; align-self: end; display: grid; gap: calc(var(--unit) * 3); }
  .hero h1 { font-size: var(--step-6); letter-spacing: -0.035em; line-height: 0.95; max-width: 14ch; }
  .hero .meta { grid-column: 10 / 13; align-self: end; display: grid; gap: calc(var(--unit) * 3); padding-top: calc(var(--unit) * 2); }
  .btn { display: inline-flex; gap: 12px; align-items: center; justify-self: start; background: var(--accent); color: var(--on-accent);
         font: 700 var(--base)/1 var(--font-heading); padding: 16px 20px; text-decoration: none; border-radius: 0; }
  .btn:hover { background: var(--ink); }
  @media (max-width: 640px) { .hero h1 { font-size: var(--step-4); } }
</style>
</head>
<body>
<section class="wrap">
  <div class="hero grid">
    <div class="rule-4" style="grid-column: 1 / 13"></div>
    <div class="heading">
      <p class="eyebrow muted">Studio for buildings and objects — Basel</p>
      <h1>Form follows the grid.</h1>
    </div>
    <div class="meta rule-1">
      <p>Architecture, interiors and exhibition design for public institutions since 1998.</p>
      <a class="btn" href="#work">See the work <span aria-hidden="true">→</span></a>
      <p class="small muted">Taking commissions for 2027</p>
    </div>
  </div>
</section>
</body>
</html>

Other patterns in this design

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