isonew · design system · 2026

One accent, hairlines, and numbers that carry their source

This is the system as it is actually built, not as it was once sketched. Every specimen below is the live component rendering with the live tokens, so the page cannot drift away from the site it documents.

0

Color and type tokens

Defined in src/styles.css

0

Kit components

Exported from components/ds

0+

Routes on the system

Files under src/routes

0+

Years operating

Team, cumulative

Principles

Three rules the whole system answers to

Everything below is downstream of these. When a decision is unclear, the principle wins over the preference.

01

Evidence over adjectives

A number with its scope and source beats any superlative. If we cannot label where a figure came from, it does not ship.

02

Hairline over shadow

Structure comes from 1px and 2px borders and from whitespace. Depth appears only when a surface responds to a pointer.

03

One accent, for action

Signal orange marks the thing to click. Red and green carry meaning on numbers. Nothing else is colored.

Color

Four groups, and each one has a job

Surfaces carry structure, ink carries text, the accent carries action, semantic color carries meaning on numbers. Nothing carries mood.

Surfaces

Three surfaces only. Everything else is a border or whitespace.

#F4F1EA

--paper

oklch(0.957 0.011 88)

Page background and every alternating band.

#FFFFFF

--card

oklch(1 0 0)

Cards, tables, artifacts, anything that carries evidence.

#EDE7DB

--muted

oklch(0.93 0.013 88)

Card headers and table headers. Never a full band.

Ink and hairlines

Ink is reserved for closing bands and the footer, so it still reads as an ending.

#0B0B0A

--ink

oklch(0.155 0.002 90)

Body text on light surfaces; background of closing band and footer.

#6C675E

--muted-foreground

oklch(0.46 0.012 80)

Eyebrows, table headers, secondary labels. Never body copy.

#E3DDD0

--border

oklch(0.892 0.019 88)

Every hairline, every divider, every 2px evidence border.

Accent

One accent, and it means action. If it is not clickable or focused, it is not orange.

#FF5A1F

--signal

oklch(0.678 0.219 36)

Primary CTA fill, focus ring, active tab underline, quote rule.

Semantic

Gain and loss belong to numbers and comparisons. They are never decoration.

#B3261E

--loss

oklch(0.474 0.176 27)

What the manual process costs today. Before column, red metrics.

#116B4B

--gain

oklch(0.428 0.089 161)

What comes back after the system ships. After column, green metrics.

Contrast pairings

Measured with the WCAG 2.1 formula against the token values above. Ratios are computed from the hex values, not sampled from a screenshot.

  • Ink on Paper

    16.4:1

    AAA

    Default body pairing. Never lighten body copy below 80% opacity.

  • Ink on White

    18.1:1

    AAA

    Card copy. Same rule on opacity applies.

  • Ink on Signal

    6.2:1

    AA

    Why the primary CTA is ink on orange, not white on orange.

  • Signal on Ink

    7.8:1

    AAA

    High-contrast CTA variant: orange on the ink surface. Use when the action must dominate the band.

  • Paper on Ink

    16.4:1

    AAA

    Closing band and footer. Secondary copy stops at 70% opacity.

  • Loss on White

    6.9:1

    AA

    Red numbers pass at body size. Do not use red on the muted surface.

  • Gain on White

    6.5:1

    AA

    Green numbers pass at body size. Same restriction as loss.

Typography

Outfit does the talking, mono does the labeling

Two families. Outfit at 600 for anything structural and 450 for reading. IBM Plex Mono is restricted to uppercase eyebrows, tabular figures, and token names.

Page titleOutfit 600 · clamp 2.25 → 3rem · -0.02em · 1.05

Know what AI pays back first

One per route, always the promise in owner language.

Section titleOutfit 600 · 1.5 → 2.25rem · -0.02em · 1.12

What the manual process costs today

One per band, sitting under an eyebrow.

Card titleOutfit 600 · 1.125rem · -0.01em

Fixed scope, fixed price

Cards, rows, artifacts, person names.

BodyOutfit 450 · 1rem / 1.625 · opacity 80% for secondary

We document what your team does by hand, price it, and rank the work by what it returns in the first year.

Every paragraph. Max width 2xl so lines stay under 75 characters.

Display figureOutfit 600 · 2.25 → 3.75rem · tabular-nums

$48M+

Metrics and headline numbers only, with scope and source underneath.

EyebrowIBM Plex Mono · 0.6875rem · 0.18em · uppercase

Evidence, not adjectives

One per band, above the section title. Never a sentence.

Spacing and rhythm

A 4px scale, used at six sizes

Bands alternate Paper and White so the page has a pulse without adding a single decorative element.

  • 4px

    Icon nudges and optical alignment only.

  • 8px / 12px

    Gaps inside a card: label to value, icon to text.

  • 20px (gap-5)

    Grid gutter between cards, everywhere.

  • 24px (p-6)

    Standard card padding. 20px on dense cells.

  • 40px (mt-10)

    Section title to the content it introduces.

  • 64px → 96px (py-16 → py-24)

    Band padding, mobile to desktop.

  • max-w-6xl

    Every band's inner column. 20px page gutter, 32px from sm.

  • max-w-3xl

    Section titles and hero copy blocks.

  • max-w-2xl

    Running paragraphs, so a line never exceeds ~75 characters.

Shape and elevation

Borders build the structure, shadows only answer a pointer

A resting page has no drop shadows worth noticing. Depth appears when something is hoverable, and it disappears again on release.

  • radius 10px

    Cards, tables, artifacts, framed screenshots.

  • radius 999px

    CTAs only. Nothing else is a pill.

  • border 1px

    Default hairline: dividers, standard cards.

  • border 2px

    Evidence surfaces: artifacts, flow steps, tables, person cards.

  • border-l 2px

    Meaning on a card edge: loss red, gain green, signal on quotes.

shadow-subtle0 1px 2px / ink at 6%

Resting state on cards that can be interacted with. Never on a static band.

shadow-lift0 4px 12px -2px / ink at 10%

Hover and focus only, paired with a 1px to 2px translate. Never a resting state.

Motion

Four movements, and a contract to turn them all off

Motion here exists to sequence attention, never to entertain. Under reduced motion the page renders complete and static, with nothing hidden.

  • Reveal on enter

    opacity 0 → 1, translateY 18px → 0, 620ms, cubic-bezier(0.2, 0.7, 0.2, 1) — Fires once per element via IntersectionObserver. Stagger siblings by 40ms.

  • Count up

    0 → target over 900ms, requestAnimationFrame, tabular figures — Display numbers only, triggered at 10% visibility. The final value is the truth.

  • Hover lift

    translateY -1px to -2px plus shadow-lift, default transition — Only on surfaces that navigate or submit. Icons may translate 2px in the arrow direction.

  • Reduced motion

    prefers-reduced-motion: reduce — Reveals render revealed, counters jump to the final value, lifts still change shadow only.

Icons

One library, one stroke weight

Icons are marks, not illustrations. A monochrome 2px glyph keeps a technology grid inside the system without importing a single trademark asset.

Specimenlucide · 2px · currentColor
  • Library

    Lucide only. No second icon set, no emoji, no vendor logo files.

  • Stroke

    2px for evidence and comparison marks, 2.5px for small checks and crosses.

  • Color

    currentColor. Signal orange only when the icon marks an action or a check.

  • Size

    size-4 inline with text, size-5 in strips, size-8 in the stack grid.

  • Semantics

    Decorative icons are aria-hidden. A meaningful icon gets a label.

Components

The kit, rendering live

Every page on this site is assembled from these. No route redefines a color, a radius, or a type size on its own.

MetricCardthree tones · count-up on enter

Cost today

0Hours per month, estimate

Returned

0Hours per month after phase one

Named engagements

0Public case records
BeforeAfterloss column against gain column

Today

  • Intake arrives in three inboxes and one WhatsApp thread.
  • Someone retypes the same order into two systems.

After

  • One queue, one record, one status everyone can see.
  • The system writes to both systems and logs what it wrote.
FlowDiagramnumbered mechanism · 2px borders
  1. 01

    Map

    We watch the work and write down what actually happens.

  2. 02

    Price

    Each step gets an hour cost and an error cost.

  3. 03

    Rank

    Opportunities ordered by first-year return.

RowList and CheckListnumbered rows · proof checks
  • 01

    Fixed scope engagement

    Priced before it starts, delivered against a written outcome.

  • 02

    Handover as a deliverable

    Documentation and access transfer are part of the phase, not an extra.

  • You own the code and the cloud accounts
  • Every figure carries its scope
  • No retainer required to keep it running
  • A person answers your contact form
ArtifactCarddeliverable, shown instead of described
opportunity-ranking.md
  • 0101 Quote assembly — 62 h/mo — automate — payback 2.1 mo
  • 0202 Order re-entry — 38 h/mo — integrate — payback 3.4 mo
  • 0303 Weekly reporting — 12 h/mo — leave alone for now
Sample of the Diagnostic deliverable, redacted.
EvidenceTableclaim · scope · source
  • Average handle time fell to 40 seconds

    ScopeSupport queue, 90 days after launch

    SourceClient-reported dashboard export

  • Four live surfaces in production

    ScopePublic URLs, verifiable today

    SourceThis site's case records

ProofStrip and Quotenamed references only
  • ChatSac

    Live

  • VerdeOps

    Signed · In delivery

  • ChurnDefense

    Operator proof

They shipped the thing we had been describing in meetings for two years.
Owner, mid-market services company
StackStripmonochrome marks, no vendor logos
PersonCard4:3 photo · 2px border
Ronan Pinho, Founder & CEO, Board Advisor
Leadership

Ronan Pinho

Founder & CEO, Board Advisor

Runs the Diagnostic conversations with owners and decides what we take on. Sits on the other side of the table often enough to know which projects quietly never pay back.

ronanpinho.com
AnswerBlockobjections, answered in full

What if the plan says do nothing?

Then the plan says do nothing, and you saved the cost of finding out the expensive way.

RiskReversalplaced immediately before objections
  • Fixed scope, fixed price

    The Diagnostic is priced before it starts. No hourly surprises, no open-ended discovery.

  • You keep the plan

    The ranked opportunity plan is yours to act on with us, with your team, or with anyone else.

  • You own everything

    Code, data, and cloud accounts live under your organization from the first commit.

  • No retainer trap

    We document and hand over. A system you cannot run without us is a system we failed to build.

Patterns

The page recipe every route follows

A reader should be able to move between two pages on this site and never have to relearn where the argument is going.

  • 01

    Promise

    One H1 in owner language, with controlled line breaks.

  • 02

    Proof

    Four checks or four figures, immediately under the promise.

  • 03

    Problem

    The cost of doing it by hand today, as a red number.

  • 04

    Mechanism

    Three to five numbered steps. What we actually do.

  • 05

    Before and after

    Red Today column against green After column.

  • 06

    Evidence

    Cases, quotes, live surfaces, claim/scope/source table.

  • 07

    Objections

    The four questions owners ask before they say yes.

  • 08

    One action

    A single closing band. Stage decides the secondary link.

Closing band by stage

  • explore

    Primary: Diagnostic. Secondary: savings calculator. For readers who do not yet have a number.

  • evaluate

    Primary: Diagnostic. Secondary: contact. For readers comparing us against an alternative.

  • decide

    Primary: Diagnostic, alone. Any second link at this point loses the decision.

Voice

What we say, and what we never say

The copy rules are part of the design system. A beautiful page carrying an unsourced number is a failed page.

We say

  • Plain money and plain hours, with the scope attached.
  • What we will not do, before the client has to ask.
  • Named clients, live URLs, and quotes with an attribution.
  • Short sentences. One idea per line.

We never say

  • Unsourced percentages, or a metric without its scope.
  • Cutting-edge, world-class, seamless, revolutionary.
  • Lorem ipsum, placeholder cards, or buttons that go nowhere.
  • Long em dashes and exclamation marks in body copy.

Ship checklist

The gate a surface passes before it goes live

If a line here fails, the page is not late. It is unfinished.

Visual

  • Bands alternate Paper and White; ink appears once, at the close.
  • No hardcoded color class anywhere in the diff.
  • Cards use 10px radius; only CTAs are pills.
  • No horizontal overflow at 390, 768, and 1440.

Copy

  • Exactly one H1, and it states the promise in owner language.
  • Every figure carries scope and source, or is labeled an estimate.
  • Route has its own title, description, and og tags.
  • No placeholder text and no dead links.

Accessibility

  • Every CTA is at least 48px tall and passes AA on its own surface.
  • Focus ring is visible on every interactive element.
  • Decorative icons are aria-hidden; meaningful ones have labels.
  • Reduced motion removes every reveal and counter.

The system exists so the argument stays visible

If you want the same discipline applied to your operation, the Diagnostic is where it starts.