Skip to content

Design system

One token layer, every primitive, in every state.

Extracted from sfcompute.com on 2026-09-19 with agent-browser 0.27.0 at 1440×1000. Every value in src/styles.css is either measured on that reference or taken from an owning skill, and the provenance is in docs/design-system.md. This page is what new work builds against.

Brand

A 3D softmax surface: the peak heights are the class probabilities and the tall spire is the argmax. It is the same idea the previous four-cell mark carried — a system with one of it decided — said as a distribution, and it is traced from a generated master rather than constructed from geometry. One cut ships, because this master is a single connected silhouette that reads at 16px and at 1024px alike.

Mark

16px
24px
32px
48px
64px
96px

One cut, from 16px to 1024px. The mark is a single connected silhouette with no holes, so there is no size at which a gap welds shut and no tier table to consult. The master before it traced to twelve components whose thin white gaps did close below 48px, which is what a compact cut and a closed cut were for — both were compensating for the source art, and both went with it. One colour, no ground of its own, so it holds on white and on a dark band both.

Lockup

on the page

Clear space on all four sides is half the mark's height. The lockup is monochrome in both grounds, and it carries the same one cut — our nav renders it 24px tall, which puts the mark's ink at 15px, and this mark is drawn to read there.

Files

  • public/mark-ddbb6d0b.svg — the mark, 32×32, one subpath, for every size
  • public/mark-inverse-d6352f80.svg — the same mark in #FAFAFA, for a dark band
  • public/favicon-2fa1792d.svg — the mark on a white tile, because a transparent glyph takes on whatever the browser chrome is
  • public/wordmark-ac166c8b.svg — the lockup, near-black
  • public/wordmark-inverse-644f9ec2.svg — the lockup in white

Every one carries a content hash, because every one is referenced from somewhere. The hash is the cache key: an asset at a stable URL is an asset a browser will not re-fetch, and a favicon is the worst case, because browsers keep icons in their own store past any header we send.

Colour

Primitives name a hue or a weight, roles name a job, and components read roles only. There is no accent: the emphasis fill is the near-black, which is what the reference's primary button becomes once its blue is removed. The tier ramp is the one categorical colour, because a rank is a value a reader compares; every other non-neutral here encodes a status, never a brand.

surface

the page ground

surface-raised

bands, cards

surface-sunk

wells, row hover, gridlines

fill-quiet

the quiet button

rule

every hairline

rule-strong

field borders

ink

body copy

ink-muted

secondary copy

ink-meta

captions

ink-subtle

nav idle

action

the solid button

action-strong

its hover

emphasis

emphasis fill, focus ring

fund

rewarded

warn

borderline

danger

errors

rank-s-tint

S, the red end

rank-d-tint

D, the green end

RoleValueOnRatioUsed for
ink#2C2B31surface14.03:1body copy
ink#2C2B31surface-sunk12.54:1a row's hover ground
ink-muted#565659surface-sunk6.54:1secondary copy
ink-meta#6E6E6Esurface-sunk4.56:1captions, counts
ink-subtle#6E6E6Esurface-sunk4.56:1nav idle
on-action#FAFAFAaction15.70:1the solid button
on-emphasis#FAFAFAemphasis15.70:1the emphasis fill
ink#2C2B31fill-quiet12.54:1the quiet button
ink#2C2B31fill-overlay12.54:1a marker on the 5% slab
link#2C2B31surface-sunk12.54:1links, carried by the underline
fund#0F7A3Dsurface-sunk4.85:1rewarded
warn#8A5200surface-sunk5.71:1borderline
danger#C02626surface-sunk5.29:1errors, fired checks
rank-s-ink#5C1414rank-s-tint5.49:1S badge
rank-a-ink#6B3410rank-a-tint6.13:1A badge
rank-b-ink#713F12rank-b-tint6.65:1B badge
rank-c-ink#6B4E00rank-c-tint7.32:1C badge
rank-d-ink#14532Drank-d-tint7.73:1D badge

Tier ramp

D tierC tierB tierA tierS tierNot graded yet

A red-to-green run, S through D, which is the tier-list convention. It is the only categorical ramp in the system: a tier is a rank, and a reader skimming a list expects the top of it to be a colour, not the darkest step of a grey staircase. The letter is always rendered beside the tint, so rank never depends on the fill.

Reward state

RewardedBelow the barRustMIT

Kept off the tier ramp so a value never does two jobs in one row: rewarded is the emphasis fill and solid, below the bar is hollow plus the words.

Distribution

Bars scale to the peak, not to 1, so a flat distribution still has a silhouette. The same ramp as the badge, so the chart and the badge say the same thing. Each bar carries a 1px inset ring mixed from the body ink, because the C and D fills are 1.06:1 and 1.18:1 against the white ground and would otherwise disappear.

Type

Two families and a mono. A display serif carries every heading at weight 400, and a grotesque carries everything else. The reference renders fourteen sizes, four of them sub-pixel neighbours; they are collapsed onto eight, keeping its small anchors: 16px body, 15px lede, 12px chips, 11px axis labels. Its 26px heading and 40px display are the one pair deliberately not kept — they are a marketing page's type, and over a table they read as shouting.

micro 11pxWk 1 · Wk 4 · Wk 8 · Wk 12
caption 12pxGraded 2026-09-19 · 3 runs
ui 14pxSubmit a project
lede 15pxOne pass, one typed decision.
body 16pxThe grader reads the code and scores it.
title 20pxAgreement across runs
section 22pxReserve compute at market rate
display 30pxA studio for System 1 models

Aa Bb 0123

400 regular

Aa Bb 0123

500 medium

Aa Bb 0123

600 semibold

Aa Bb 0123 — the serif at weight 400

Newsreader stands in for the reference's ABCOtto. Inter stands in for ABCDiatype. Both are OFL; the reference's faces are commercial.

Sentence case everywhere. No component sets text-transform, no token carries positive tracking, and a test fails if either returns. Three weights carry the interface, and a test fails on a fourth.

Surface

Radius, rules and depth. The reference's histogram decides it: 2px appears 60 times on rendered elements, 12px 15, 8px 10. A control is 2px and a panel is 12px, which is a sharper system than the last one and is deliberate. Structure is hairlines, never shadows.

radius-inset

2px · chips, small markers

radius-control

2px · fields, selects, every control

radius-button

8px · buttons only — the one soft corner

radius-panel

12px · panels and cards

radius-pill

full · the one pill-shaped element

raised

bands, cards

sunk

wells, row hover, gridlines

canvas

the page ground

Motion

Three durations and four curves, all of them the reference's own observed transitions: 150ms on colour, 150ms on transform, 200ms on an SVG fill, and 500ms on a chart's opacity reveal. Nothing moves under prefers-reduced-motion, and every colour change still eases.

Steps

fast 150ms
press feedback, nav colour, transform
base 200ms
button colour, SVG fill and stroke
slow 500ms
a chart's opacity reveal, long fades

Curves

ease-out
cubic-bezier(0.22, 1, 0.36, 1)
transform
ease-in-out
cubic-bezier(0.4, 0, 0.2, 1)
colour, opacity
ease-data
cubic-bezier(0.3, 0.9, 0.4, 1)
SVG fill and stroke
ease-color
cubic-bezier(0.4, 0, 0.2, 1)
hover colour

Layout

The frame hugs the content everywhere: one width for all routes, the 760px column bracketed by one page gutter each side, with equal clearances outside the rules. The nav reserves no width — it floats in the left clearance one gutter off the window edge, seated only where the clearance fits it (from 1240px up). No header and no footer.

760+2 gutters

frame-outer

the one frame, every route

760px

container-measure

the content column

544px

container-copy

a column of prose

1088px

container-site

the dense board only

Buttons

Aqua: Apple's Mac OS X push-button language, four layers deep — a saturated core, a specular band that fades by the middle, a bounce glow at the bottom edge, and a thin dark rim. Four variants across three sizes, every state here. Only action and secondary shine: if every control gleams then nothing is the default, so a row holds exactly one action.

Fields

One control recipe shared by input, textarea and select, so they cannot drift. 16px on touch because iOS zooms a page whose control text is smaller, stepping down to 14px from sm up where no zoom can fire.

Rest, hint and error

The repository the grader reads.

That address is not a repository we can read.

Textarea and select

Eight or more characters.

Disclosure

Content

Panels, cards, tabs and the table. The panel is the reference's card: a 12px radius, a 1px hairline and one step of surface lift, with no shadow.

Every rating shows its runs

The spread across runs is printed beside the tier, so a rating that only just cleared the bar reads differently from one that did not.

Tier
A
Runs
3
Agreement
High
Model
typesafe-jev
  • Working implementation0.82
  • Engineering depth0.71
  • Reports measured results0.44
ProjectStarsTier
jev-ultrafast1,284S tier
constrained-decode412A tier
tabsort96B tier

Loading and empty

Loading projects.

Nothing on the board yet

Projects land here once a scout submits a public repository and the grader rates it.

Rules

What future work is held to. Each one is a rule with a reason, not a preference.

  • A raw value exists in one file

    src/styles.css. A component reads a role, and a role resolves to a primitive. Nothing else may hold a hex, a px radius or a duration.

  • The type scale is closed

    Eight steps and three weights. A test fails on an arbitrary size, an arbitrary leading, or a fourth weight.

  • A link is an underline, not a colour

    There is no accent hue, so the underline is the whole affordance. Removing it removes the only signal that the text is a link.

  • Colour never carries a value alone

    Rank always prints its letter, a fired check always prints its number, and reward state is words as well as a fill.

  • Every text pair is measured

    The ratio in the table above is computed from the token values, not read off a screenshot, and the worst surface is the one quoted.

  • Structure is a hairline, never a shadow

    The reference declares no shadow on a card. Depth is one step of surface lift plus a 1px rule.

Not carried over from the reference: ABCOtto and ABCDiatype, both Dinamo faces, and its blue accent. Newsreader and Inter are the substitutions and both are OFL. Its own nav idle grey, #8F8F91, measures 2.89:1 on its own slab, so the idle nav grey here is the caption grey instead.