Sami Vuori Design system Back to site →

Article layout

The long-form page for case studies and About (Figma 93:731): header, hero, facts, body and end links. A full page, so see it live.

Live: Governance case study (device hero, Happeo accent) · About (portrait hero, site orange).

Anatomy

  1. Header: black title and Light lead on the left; badges on the right (date first, then client, then reading time), above the title on mobile.
  2. Hero, one of:
    • screen: the product in a CSS-drawn device on the accent band. The whole hero keeps fixed proportions and scales with the width; the band's bottom edge crops the device. From 640 Figma's band 1312 × 448 with the device 69% wide; below 640 a taller band (994 × 527) and a bigger device (91%).
    • photo: a portrait standing on a smaller band beside the facts (facts in columns 1–2, portrait 3–6 from 1024; stacked below).
  3. Facts: three items (e.g. Team · My role · Timeline), each a label and two or three short lines.
  4. Body: KeyFigures → ChapterNav → StoryScroll → Reflection, or plain text with Testimonial bands. Text sits in the reading column (--article-column); bands break out to full width.
  5. End: back link left, next case study right, on the page margins.

Any img[data-zoom] in the article opens full-size in the lightbox.

Accent

accent replaces the site orange with the client's brand colour for everything in the article (--color-accent); band sets the hero, key-figures, quote and reflection band (--article-band).

Props

PropTypeDefaultDescription
title string — The outcome, not the feature.
lead string — One or two sentences: the project and your part.
description string lead Meta description.
date string — First badge, black.
badges { label; color? }[] [] Client (accent colour) and others.
screen { src; alt } — Product screen in the device hero.
photo { src; alt } — Portrait hero instead of the device.
visual { src; alt } — A finished hero composition from Figma (band and device included), full grid width. Sandudd.
accent CSS colour var(--color-accent-main) e.g. var(--color-accent-happeo).
band CSS background var(--gradient-accent-happeo) e.g. var(--gradient-accent-main).
facts { label; lines[] }[] [] Team · role · timeline.
readingTime boolean true "n min read" badge from the body text (~230 words/min).
back { href; label } — End link, left.
next { href; title; label? } — Next case study, right.

Tokens

Token Base≥ 640≥ 1024≥ 1440 Note
--article-header-pt var(--spacing-edge) clears the nav
--article-header-text-column 1 / -11 / span 41 / span 5 badges need 2 cols here
--article-badges-column 1 / -15 / span 26 / span 1
--article-badges-order -10 mobile: badges above the title
--article-badges-direction rowcolumn
--article-badges-justify startend
--article-facts-column 1 / -1span 2 team · role · timeline
--article-hero-display block set to none to hide on a breakpoint
--article-band-ratio 994 / 5271312 / 448
--article-band-radius var(--radius-lg)var(--radius-band)
--article-device-width 91%69% of the band
--article-device-overhang 5.7%7.5% % of the width (padding)
--article-device-radius var(--radius-lg)var(--radius-device)
--article-portrait-column 1 / -13 / -1 portrait instead of the device (About)
--article-portrait-row auto2
--article-portrait-band-ratio 1000 / 853869 / 524 < 640: photo 91% wide, ~square
--article-portrait-photo-width 91%76%
--article-portrait-overhang 5.7%14.7%
--article-portrait-facts-column 1 / -11 / span 2
--article-portrait-facts-display gridflex flex column beside the portrait
--article-portrait-facts-pt var(--spacing-xl)0
--article-column 1 / -12 / span 43 / span 3 reading column
--article-section-space var(--spacing-2xl)var(--spacing-3xl) before each h2 / band