Passed my EPA 608 today 🔧
Safety yellow and neutral grays mirror the visual world of construction and skilled trades.
The complete visual language behind every IronLink screen — tokens, type, icons, components, states and motion. One stylesheet (ironlink.css) drives all 55 mockups; nothing here is bespoke per screen. Built for skilled trades: industrial-familiar, professional, practical.
Three rules decide every visual call. The audience is blue-collar trade workers and the employers who hire them — often on a phone, on a job site, sometimes lower-literacy or bilingual (EN/ES). Clarity beats cleverness.
Safety yellow and neutral grays mirror the visual world of construction and skilled trades.
Minimal color accents and muted tones keep it serious and work-focused — money and verification feel safe.
Straight lines, structured layouts, big confident numbers, generous tap targets. One primary action per view.
Yellow is reserved for the single primary action / highlight on a screen — never decoration. Navy ink carries text and dark actions. Everything else is a cool neutral or a semantic accent used sparingly.
Archivo — an engineered, slightly squared grotesque with industrial character and high legibility. Archivo Expanded handles display + numbers (wage figures, metrics). Deliberately not Inter / Roboto / system. Numbers use tabular-nums so money lines up.
Body 15 / 1.5 — clear, high-legibility copy for an audience that includes lower-literacy and bilingual (EN/ES) users.
Small 13 · secondary metadata · Montgomery, AL
XS 11.5 · timestamps, captions
| Class | Size / line | Weight | Use |
|---|---|---|---|
.t-display | 30 / 1.08 | 800 expanded | Hero headlines |
.t-h1 | 26 / 1.12 | 800 | Screen titles |
.t-h2 | 20 / 1.18 | 700 | Card / section titles |
.t-h3 | 16 / 1.25 | 700 | Sub-headers, list titles |
.t-body · .t-body-m | 15 / 1.5 | 400 · 500 | Paragraph & emphasised body |
.t-sm · .t-sm-m | 13 | 400 · 600 | Metadata, secondary |
.t-xs | 11.5 | 500 | Captions, timestamps |
.t-metric · .t-metric-sm | 38 · 26 | 800 expanded | Wages, percentiles, counts |
.eyebrow | 11 · .1em caps | 700 | Overline labels |
Color helpers: .muted (text-2) · .faint (text-3) · .pos / .neg / .warn · .tabnum for tabular figures.
A strict 4-pt spacing grid and a 6-step radius scale keep rhythm consistent. Screen gutters use --s5 (20px) via .pad; cards stack with --s3 (12px).
| Token | Value | |
|---|---|---|
--s1 | 4px | |
--s2 | 8px | |
--s3 | 12px | |
--s4 | 16px | |
--s5 | 20px | |
--s6 | 24px | |
--s7 | 32px | |
--s8 | 40px |
| Radius | Value | |
|---|---|---|
--r-xs | 6px | |
--r-sm | 10px | |
--r-md | 14px | |
--r-lg | 18px | |
--r-xl | 24px | |
--r-pill | 999px |
Five soft, cool-tinted shadows. Sized by intent, not whim: cards rest low, sheets and FABs float. The two colored shadows tie the yellow FAB and dark buttons to their fills.
cards, chips, inputs
create menu, hover
sheets, dialogs, toast
primary button · FAB
dark button · employer FAB
Motion utilities are opt-in (add a class) and every one is disabled under prefers-reduced-motion. Three easings, short durations. Used live across the loading, refresh, sheet and create-menu screens.
| Easing | Curve | For |
|---|---|---|
--ease-std | cubic-bezier(.4,0,.2,1) | moves & cross-fades |
--ease-in | cubic-bezier(.3,0,.4,1) | entrances (sheets, dialogs) |
--ease-out | cubic-bezier(.4,0,1,1) | exits |
| Utility | Duration | Effect |
|---|---|---|
.anim-sheet / .anim-scrim | 280 / 240ms | bottom-sheet slide-up + scrim fade |
.anim-dialog | 200ms | centered pop-in |
.anim-toast | 260ms | snackbar slide-up |
.anim-stagger / .anim-list | 320 / 300ms | children rise in sequence |
.anim-fab-open | 240ms | FAB rotates + → ✕ |
.tabfade | 150ms | tab content cross-fade |
.appbar.is-collapsed | 180ms | collapsing detail header |
.tabbar.is-hidden | 280ms | hide-on-scroll (feed) |
.press:active | — | scale(.97) tap feedback |
A single SVG <symbol> sprite, thin geometric stroke (1.9px), 24px grid. Reference with <svg class="ic"><use href="#i-home"/></svg>. Sizes: .ic 22 · .ic-sm 18 · .ic-lg 26 · .ic-xl 30. One glyph = one meaning per mode (e.g. i-network = Network, i-users = Talent).
Initials on navy by default; yellow for the signed-in worker; squared (--org) for companies. A dashed placeholder covers the no-photo case.
Three selection patterns: filter chips (multi, horizontal scroll), segmented control (one of N, compact), and underline tabs (top-level views).
52px touch targets, 1.5px borders that darken to ink on focus and to danger on error. Inputs always pair with a .label and optional .hint.
The card is the workhorse container. Highlight (yellow wash) marks the one thing that matters; dark inverts for AI insights / wallet. List rows and section headers structure long content.
Surface, hairline border, soft shadow.
Yellow wash + border for the key item.
A cert moves you to $46/hr.
Banners give persistent context; the toast confirms an action; dialogs confirm decisions; action sheets offer choices. Empty states always point to the next step.
This can't be undone. Buyers will no longer see it.
Save jobs to compare them later.
Purpose-built compositions for IronLink's core jobs: pay transparency, hiring and the feed. These encode the product, not just the brand.
Designed for spotty job-site 4G: read & draft always work, writes queue, and every gap is explained. Skeletons hold layout; placeholders cover missing photos.