Style guide

The system as it stands, plus the calls still open. Sections marked Decided document what is already in use; they exist so choices stop drifting. Sections marked Open show real inconsistencies on the site today and need a pick.

Typography Decided

Archivo carries every heading, number and pull-quote. Body copy stays on the system sans, so the site loads one webfont family. Rule: a section heading never sets its own font-size; it takes .section-label and overrides margin only. Ignoring that is how four different heading sizes appeared last time.

.page-heading clamp(1.75rem, 3vw, 2.25rem) / 700
Page title — Header Modernization
.case-study-hero__title clamp(2.25rem, 5vw, 3.75rem) / 700
Case study title — Header Modernization
.section-label clamp(1.875rem, 2.6vw, 2.375rem) / 600
Section heading — Header Modernization
.section-label--secondary clamp(1.5rem, 2.5vw, 2rem) / 600
Section heading, one tier down — Header Modernization
.lede 1.05rem / system sans
Lede — Header Modernization
.(body) 1rem / 1.5 / system sans
Body copy — Header Modernization
.cs-microlabel 0.7rem / 600 / uppercase / muted
Micro-label — Header Modernization

Color Decided

Cool neutrals with terracotta held back. The accent is the one warm thing in the system and only works while it stays rare: a handful of marks per page, never on labels, field names or small rules.

#0D1114
--color-text Headings, body, structural rules
#667079
--color-muted Secondary copy, every micro-label
#D5D8DC
--color-border Hairlines, outlined boxes
#B9BFC6
--color-rule Structural rules needing more presence
#F2F4F6
--color-surface Banded sections
#E6EAEE
--color-surface-deep The one section that stands apart
#C24A2C
--color-accent Rationed — see below

Where terracotta is allowed

  • The one emphasized word in the homepage headline
  • Active states: nav item, filter tab, carousel dot
  • Pull-quote borders and the oversized quote mark
  • Numbered markers on Leadership and Principles
  • The Impact stat on a case study card
  • Link hover and focus states

Where it is not

  • Micro-labels, field labels, eyebrows: all muted
  • Small rules and dividers: these use --color-text

Color: warm neutral Open

Terracotta stays. The question this time is only the neutral undertone underneath it. Same accent hex on both sides below, so the comparison isolates cool vs. warm gray rather than mixing that question up with a new accent again.

Current: cool neutral

Systems-level UX, built to hold without me.

Cool neutrals with the accent held back. It is the one warm thing in the system, and it stays rare.

Email Katie Impact +34%
<40% Of the page the PDP team owns

What ships today. Neutrals lean slightly blue; terracotta reads as a clear warm departure from them, which is part of why it stands out as much as it does.

Warm neutral

Systems-level UX, built to hold without me.

Cool neutrals with the accent held back. It is the one warm thing in the system, and it stays rare.

Email Katie Impact +34%
<40% Of the page the PDP team owns

Neutrals shift toward stone instead of slate. Terracotta now sits closer in temperature to what's around it rather than cutting against it: quieter and more unified, at the cost of the accent popping less on sight.

Icons Decided

Heavy stroke, square caps, mitered joins, no corner radius, matched to the squared geometry and the bold display type. 2.25 stroke on a 24px grid, 1.75 on the 16px grid the inline parts use. All icons are inline SVG; there is no icon font anywhere in this theme.

arrow
external
lock
unlock
square
check
cross
pin

Stat treatment Decided

Number first, label underneath, no rule. Ten different number treatments existed before this; most were already close to it, and the display sizes are now unified across Leadership stats, case study outcomes and launch signals. The rule-above variant is kept for the Leadership stats only; it reads well there, and using it everywhere is exactly how it would get worn out.

Standard
72% → 88% Findability
4 → 1 Codebases
16% → 30% Search engagement

Value: Archivo 700 at clamp(1.75rem, 3vw, 2.25rem). Label: 0.75rem, 600, uppercase, muted.

Rule variant: Leadership stats only
72% → 88% Findability
4 → 1 Codebases
16% → 30% Search engagement

Do not extend this to other stat groups without a reason. It earns its place on one page; repeated it becomes decoration.

Button Decided

Solid fill, square, weight 600, nudging 4px right on hover with the arrow traveling along its own axis. Still worth knowing: .btn is not currently used anywhere on the site; every call to action is a text link. The obvious place for it is the footer email action.

Hover it. Motion is wrapped in a prefers-reduced-motion guard, so the transform is dropped for anyone who has asked their system to reduce animation while the color change still fires; the state is never lost.

Arrows Decided

Two arrows, two meanings: the distinction carries information, so never swap one for the other on layout grounds. Each nudges along its own axis on hover, so the movement matches the direction the glyph points.

Horizontal: stays on the site

Case study cards, earlier-work rows, the principles cross-link, “See it in action”, “View all work”, “More on how I lead”. template-parts/icon-arrow.php

Diagonal: leaves the site

Email, LinkedIn, GitHub, ADPList, Instagram, Dribbble, the coffee link, Mentorship Resources. template-parts/icon-arrow-external.php

Links and focus Decided

Underlined at rest so links are findable without relying on color, terracotta on hover. Focus is a 2px accent outline at 3px offset; the site previously defined none at all, so keyboard users got whatever the browser drew.

Resting View my ADPList profile
Hover View my ADPList profile
Focus View my ADPList profile

Rules and dividers Decided

The hairline is the divider. A middle weight token existed with a single use and no clear job, so it was removed rather than left as a third option nobody could tell apart. The accent rule is a marker, not a divider: numbered items only.

Divider — --color-border — everywhere
Marker — --color-accent, 3px — Leadership stats only

Spacing and layout Decided

Twenty-two different spacing values had crept into the stylesheet with no scale behind them. These are the ones worth keeping. Use a value from the scale rather than inventing a new one; that is how the drift started.

Scale
0.5rem Label to the thing it labels
0.75rem Inside a tight cluster
1rem Between related lines
1.5rem Between fields in a block
2rem Between blocks
3rem Grid gutters
4rem Between components
6rem Between major sections and bands
The three column widths, and why there are three

These look like drift and are not: each does a different job. Adding a fourth would be drift.

8.125rem 1frMarker column: a numeral and its rule. How I Lead, decision blocks.
12rem 1frLabel column: a field name beside its value. About rows, the summary.
18rem 1frSidebar column: a section heading beside its content. Bands, the split lead-in.
Widths and breakpoints
  • 72rem — the one container width, shared by every section including heroes
  • 42rem — prose measure. Applied to paragraphs, not to their container, so figures can use the full width
  • 48rem — the main breakpoint: two-column layouts collapse to one
  • 40rem — the small breakpoint: three-column grids collapse, label columns stack

Components Decided

The three most-repeated pieces, rendered with their real classes rather than mocked, so what is shown here is genuinely what ships.

Case study card

The whole card is one link; the corner glyph is the only affordance. Hover rotates -0.4deg and scales 1.012, the site’s oldest piece of motion, and what the button nudge was matched to. The locked variant swaps the arrow for a lock, drops the reframe line and the stat row, and a single password note renders above the grid rather than on every card.

“What it unlocked” box
What it unlocked

Four codebases collapsed into one, and content updates went from weeks of engineering work to minutes of self-serve editing.

Closes each decision block. Hairline border, no radius, micro-label, no accent; it follows the system, but it went through a near-black box and a terracotta-rule version first. It carries an unlocked-padlock mark. Deliberately not an arrow: the two arrows now mean internal and external navigation, and a third meaning would muddy them.

Closing statement: two treatments Open

A: what is live. B: the same content in the “What it unlocked” box. The question is whether that box is a single-meaning device or a general callout pattern.

A: split principle (live)
The principle we set at the start: Performance must do no harm. It was holding, so we didn’t roll it back.
B: boxed, as a callout
The principle we set at the start

Performance must do no harm. It was holding, so we didn’t roll it back.

B makes the page more systematic: one bounded-callout pattern doing both jobs, with the label saying which job. It also matches the three boxes in the decisions above it, so the section reads as a bookend. The cost is the typographic drama: the principle stops being the largest thing on the page and becomes another line of body copy inside a box. A also keeps the box meaning one thing, the way the two arrows each mean one thing.

Banded section

Full-bleed, sits outside .container so it reaches the viewport edge.

Two tones only: --color-surface for the two ordinary bands, --color-surface-deep for the single section that has to stand apart. A third tone would flatten the distinction. Bands never sit directly against each other with white between them; that reads as an accident.

Pull-quote

There’s too much going on and I don’t know where to start.

ParticipantB2C shopper, RITE testing

Terracotta left border and an oversized quote mark. One of the few places the accent is allowed, and one of the few treatments on this site that landed first time. Do not redesign it without a reason.

Images Decided

Defined before the real screenshots land rather than after, so they go in consistently. Case study imagery sits at container width, outside the 42rem prose measure so screenshots stay legible, and never full-bleed: the only edge-to-edge elements are the bands.

Figure with caption
Image sits here at container width
Captions describe what the reader is looking at and why it mattered, not what it is. “Search moved to Level 1, browse one layer deeper”, not “the new header”.

.cs-media wraps the image and caption. Images carry a hairline border so light screenshots do not bleed into the page. Placeholders use a dashed border, deliberately unlike every other box on the site, so an unfinished slot is never mistaken for a finished one.

Dimension Open

The site is flat on purpose: zero shadows or gradients anywhere in the stylesheet. Round one (a hard offset color panel, a bordered overlay card, a dot-grid texture) read as dated. Katie: "it just feels old school." Round two chases the same goal, depth, through more current means: overlap and scale contrast between photos, slight rotation, and a shadow soft enough to read as ambient rather than a UI effect. That last part is a real first for this stylesheet; see the note on option B.

A: Overlapping pair
Katie at Machu Picchu, Peru Katie standing above the village of Vík, Iceland

A second, smaller photo overlaps the main one at a different scale, with just enough shadow to separate the two layers. Depth comes from the photos themselves rather than an added shape. This is the direction that scales down cleanly to two photos instead of three.

B: Tilted, soft shadow
Katie hiking through the Zion Narrows, wading through the river with trekking poles

A slight rotation and a soft, wide, low-opacity shadow: ambient, not a hard drop shadow. This is the one real system change here: the site has zero box-shadow anywhere today, and this introduces the idea for the first time. It reads well as a single photo on its own, if Katie goes down to one on About rather than three.

C: Asymmetric pair
Katie at Machu Picchu, Peru Katie standing above the village of Vík, Iceland

No shadow, no rotation. Depth comes from breaking the equal-square grid: two different aspect ratios at two different vertical positions. The most conservative option relative to the flat, square-cornered system; the safest to say yes to without reopening other rules.

Keep exploring Decided

End of a case study: three compact cards to browse other work, rather than the page just ending. Deliberately not .case-study-card sized down: bordered box, title plus one client/date line, no reframe sentence, no stat row. Title-only was tried too; Katie picked title + client/date, so a name alone always has a little context. The heading is a quiet .more-work__label eyebrow, not .section-label: this section follows "How we worked" directly, and two bold headings in a row (one saying "worked", the other originally "work") read as an accidental echo rather than two real openers. The copy changed too, to "Keep exploring", for the same reason. Rendered with the real template part and classes, template-parts/more-work.php, so what is shown here is genuinely what ships.

Editorial scale Open

A second reference Katie liked (garri.design/fintech), not for a specific device this time, but for its overall visual style: a lot more whitespace, a bigger type scale, and a problem statement set at headline size rather than body size. Two portable pieces of that, tried on real case study content.

A: Oversized problem statement

The information wasn't missing from the page. It just wasn't visible at the moment someone actually needed it.

From Screen to Aisle's "gist": currently normal body copy inside the boxed summary. Set at headline scale instead, the closing line of the problem statement gets the same visual weight the reference gives its Challenge quote. This would sit alongside "The gist", not replace it; the box still carries Role/Scope/Client and the fuller paragraph.

B: Spacious screenshot band

Same two Screen to Aisle screenshots, on a full-bleed soft-gray band with real air around them, instead of sitting directly on white inside a .cs-decision grid. Reads calmer and more considered with fewer images per page; the tradeoff is it asks for more vertical space than the current inline treatment.

C: Full-height hero

I lead design that earns its place in the business.

Systems-level UX, cross-functional alignment, and measurable business impact, for enterprise products where design touches everything and belongs to no one team.

Katie, browsing garri.design's homepage separately: she likes how its hero fills most of the viewport rather than sitting in a normal-height band at the top. Same real headline and subline, same type styles, just given the room to breathe: roughly 80% of viewport height instead of a content-height band. Shown here at a fixed height rather than true viewport height so it fits the guide's flow; the real thing would use min-height: 80vh.

Voice and copy Decided

Unusual in a style guide, and the most re-litigated part of this site. These are rules found the hard way; with two more case studies to write, they are what stops the copy drifting back.

Claim it, don’t correct it
Not this

“I design outcomes, not just interfaces”

This

“I lead design that earns its place in the business”

A “not X” construction argues with a strawman before it says anything. Affirmative claims read as confident; corrective ones read as defensive.

Section titles come from the story
Not this

“The system behind the screen”, “Consequential decisions”

This

“A surface nobody owned”, “Three calls that changed it”

Generic framework names are interchangeable between portfolios — which is exactly how this page ended up reading like someone else’s. A title that only describes your project cannot be borrowed.

Micro-labels are a fixed set
Not this

CONTEXT / DECISION / TRADEOFF / EVIDENCE

This

THE SITUATION / THE CALL / WHAT IT COST / HOW I KNEW

Reusable across every case study so they read as one system. “What it cost” is the one that does the most work — most portfolios only show wins.

Name the numbered things “moves”
Not this

“Decision 01”, “Call 01”

This

“Move 01”

Borrowed from the How I Lead moves on the Leadership page, so the case studies speak the same language as the rest of the site.

Show the cost, not just the win
Not this

“We aligned stakeholders and shipped”

This

“Merchandising lost prime real estate. Holding that meant arguing from data, repeatedly.”

Tradeoffs and the moment something nearly went wrong are the parts that read as seniority. The launch-pushback section is the strongest thing on the site for exactly this reason.

Accessibility Decided

Measured, not assumed. All three text colors clear AA for body text on white, but terracotta clears it by a small margin, which constrains what can be done with it later.

Contrast on white
--color-text 18.96:1 Passes AA and AAA
--color-muted 5.05:1 Passes AA for body text
--color-accent 4.87:1 Passes AA — but only just. Do not lighten it, and do not put it on a tinted band without re-checking.
Standing rules
  • Focus is a 2px accent outline at 3px offset, defined globally. Never remove it without replacing it.
  • All motion sits behind a prefers-reduced-motion guard; color changes still fire, so no state depends on movement alone.
  • One H1 per page. Work has two headings at the same visual size: the second is an H2 carrying .page-heading, which is how they match without breaking the outline.
  • Anything that looks like a heading must be a heading. A styled span was caught doing this job once already.
  • Decorative marks (rules, quote glyphs, arrows) carry aria-hidden. Icons that are the only affordance sit inside a link with real text.