hero.interactive-grid-hover · Hover tile grid

A hero pattern from the hero library, 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.interactive-grid-hover". A guide only: DESIGN.md and tokens.json are the source of truth.

Rule
Intro in 1–5 (headline top, subhead + CTA bottom); a 3-column grid of 6–9 bordered tiles (number + label) fills 6–12 and inverts tile by tile under the cursor.
Slots
eyebrow, headline, subhead, cta, items[6..9]
Grid areas
intro 1-5 · tiles 6-12 (12-column grid, 1-based inclusive spans)
Notes
Tiles share borders (gap 0, collapsed borders). On hover a tile fills with the accent and its text switches to onAccent (150–200 ms); each tile is a link (category, service, product). Keyboard focus triggers the same state. No motion beyond the colour change under reduced motion.
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)

Do

  • Build a 3-column grid of 6–9 tiles in 6–12 with shared 1 px borders and no gaps.
  • Each tile: mono number top-left, label bottom-left; the whole tile is a link.
  • On hover and focus, fill the tile with the accent and switch its text to onAccent.
  • Split the intro column: headline at the top, subhead + CTA at the bottom.

Don't

  • Don't add icons or images to the tiles.
  • Don't animate the tiles in on load or tilt them in 3D.
  • Don't use rounded, separated cards.

Phone width

  • Intro first, then the tiles as a horizontal scroll row (snap per tile), at most 6.

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

01

Discovery sprint

02

Positioning workshop

03

Identity design

04

Website

05

Launch support

06

Retainer

Layout tree (as in design/layout.json)
{
  "pattern": "hero.interactive-grid-hover",
  "kind": "hero",
  "grid": {
    "intro": "1-5",
    "tiles": "6-12"
  },
  "slots": [
    "eyebrow",
    "headline",
    "subhead",
    "cta",
    "items[6..9]"
  ],
  "notes": "Tiles share borders (gap 0, collapsed borders). On hover a tile fills with the accent and its text switches to onAccent (150–200 ms); each tile is a link (category, service, product). Keyboard focus triggers the same state. No motion beyond the colour change under reduced motion.",
  "tree": {
    "el": "grid",
    "gap": 4,
    "align": "stretch",
    "minVh": 0.9,
    "children": [
      {
        "el": "box",
        "span": "1-5",
        "gap": 4,
        "pad": [
          4,
          0
        ],
        "justify": "between",
        "children": [
          {
            "el": "box",
            "gap": 3,
            "children": [
              {
                "el": "text",
                "slot": "eyebrow",
                "role": "eyebrow"
              },
              {
                "el": "text",
                "slot": "headline",
                "role": "h1",
                "step": 6,
                "leading": "tight",
                "maxCh": 12
              }
            ]
          },
          {
            "el": "box",
            "gap": 3,
            "children": [
              {
                "el": "text",
                "slot": "subhead",
                "role": "body",
                "maxCh": 32
              },
              {
                "el": "button",
                "slot": "cta",
                "variant": "primary",
                "arrow": true
              }
            ]
          }
        ]
      },
      {
        "el": "repeat",
        "span": "6-12",
        "mobile": "scroll-x",
        "slot": "items",
        "min": 6,
        "max": 9,
        "layout": "grid",
        "cols": 3,
        "gap": 0,
        "of": {
          "el": "box",
          "gap": 4,
          "pad": [
            4,
            3
          ],
          "justify": "between",
          "border": "all",
          "children": [
            {
              "el": "text",
              "color": "textMuted",
              "slot": "number",
              "role": "label",
              "font": "mono"
            },
            {
              "el": "text",
              "slot": "title",
              "role": "h4"
            }
          ]
        }
      }
    ]
  }
}

Other patterns in this design

Whole design · Spec bundle (JSON) · Hero library page