Brand

Motion, coming to rest.

Repose plans and runs robot arm motion that settles exactly where it was told to, every time. The identity is built from that one idea, and from the ordered dither that has been on this site since day one.

The Repose mark: a damped oscillation that settles onto a lime square
The idea

A step response, drawn in dither.

The mark is the plot every controls engineer knows: a joint is commanded to a new position, overshoots, rings down and settles. The motion carries noise and energy. The rest is clean.

01 · Motion

Dithered energy

The halo around the first swing is the homepage noise field, ordered-dithered. It fades as the oscillation decays.

02 · Control

One solid line

The trajectory itself is always solid ink. Whatever the noise does, the path is deterministic.

03 · Repose

The lime setpoint

The line ends on a lime square: the target, reached and held. Lime only ever marks the moment something arrives.

Don't

Keep the pixels honest.

Smooth or blur it

Always scale with crisp, pixelated rendering.

Recolour the setpoint

Lime is the only accent. It is never blue, red or white.

Stretch it

The mark is square. Keep its aspect ratio.

Rotate or flip it

Motion reads left to right and comes to rest on the right.

Colour

Mostly dark, a little paper, a spark of lime.

Ink

Background for nearly everything. A warm black, never pure #000 on screen.

#09090A
rgb 9 9 10 · --bg

Paper

Text and line work, and the background for light contexts and print.

#EDEBE6
rgb 237 235 230 · --ink

Signal lime

The setpoint. Links on hover, focus rings, the end of a path. Use it sparingly, as a point, not a fill.

#C7FF3D
rgb 199 255 61 · --accent

Dim · 80%

Paper at 80% · --dim
Body copy and secondary text.

Faint · 76%

Paper at 76% · --faint
Labels, captions, eyebrows.

Line · 24%

Paper at 24% · --line
Rules, borders, grid lines.

Roughly 78 ink · 19 paper · 3 lime

Type

A clear sans for ideas, a mono for facts.

Display & body
Instrument Sans

Headlines in Semibold with −2 to −3% tracking. Body text in Regular at 15–19 px, 1.6 line height.

400 Regular · 600 Semibold · 700 Bold
Code, data & labels
JetBrains Mono

Code, crate names, numbers and units. Uppercase with wide tracking for small eyebrow labels.

400 Regular · 500 Medium · 0.16em tracking for labels
Dither

Same seed, same picture.

All imagery comes from one generator: a seeded, domain-warped noise field thresholded against an 8×8 Bayer matrix, with a motif drawn in lime. It's deterministic like the software: a given seed always renders the same pixels. Use it for covers, banners and backgrounds instead of stock photography.

Threshold matrix

Each pixel lights up when the field is brighter than its cell's threshold. The grid is tiled across the image.

Rules

Only ink and paper pixels, plus lime for the motif. No grey levels and no anti-aliasing: render with image-rendering: pixelated. Seed covers by their slug, so every page keeps its picture.

Generator: /dither.js · mark: tools/brand-mark.mjs

Diagrams

Boxes, lines, one setpoint.

Docs diagrams are drawn at build time as inline SVG by docs_src/diagram.py, so they need no JavaScript and follow the site's colours. Ink boxes for tasks, dashed for library calls, paper-filled for hardware. Solid lines carry messages; dotted lines carry measured data. Lime appears once, where the motion arrives.

building blocks
measuredmessagearrivesHardwarekind='io'Taskkind='task'Library callkind='lib'

See it in use on Architecture.

Voice

Calm, exact, unhurried.

Precise

State facts and numbers: “zero allocations”, not “blazing fast”. If it can be measured, give the measurement.

Plain

Short sentences, active voice, no hype words. Explain like a colleague at the robot cell, not a brochure.

At rest

No exclamation marks, no urgency. Confidence comes from the system working the same way every time.