Railblocks ⬩ UI kit
Railblocks
[ Graphic language ⬩ UI kit ]

UI kit

The website is designed like a set of technical drawings: flat ink or paper fills, 1.5px ink rules for structure, 1px hairlines to divide, 2px corners, uppercase mono labels and numbered markers. Colour appears as solid fills and hover states, never as gradients or shadows.

1.5px rule ⬩ 1px hairline ⬩ 2px radius ⬩ mono labels
[ 01 Foundations ⬩ Sheet 01 / 33 ]

Lines

Rules give structure, hairlines divide, dashed lines mark something provisional or in progress. Lines are never coloured; weight sets the hierarchy.

dividers
Rule ⬩ 1.5px inkOpens a sheet, a table or a header. Top edge of title blocks and tab strips.
Hairline ⬩ 1px 28%Between rows, list items and grid cells inside a sheet.
Dashed ⬩ 1px inkSeparates attribution from content, e.g. the quote footer on a card.
Dotted ⬩ leaderJoins a label to its value across a row: spec tables, price lists.
[ Section ]04 / 08Labelled ruleStarts a new section on a long page. Eyebrow left, sheet number right.
AboutBlogContactVertical ⬩ 1px 28%Between nav items, table columns and title-block fields.
[ 01 Foundations ⬩ Sheet 02 / 33 ]

Spacing

Spacing uses nine steps on a 4px base. Pages use a 12-column grid with 24px gutters and 40px margins.

grid
04px
08px
12px
16px
24px
32px
48px
64px
96px
Margin ⬩ 4012 col ⬩ gutter 24Margin ⬩ 40
010203040506070809101112
Max width ⬩ 1440Breakpoints ⬩ 600 ⬩ 900 ⬩ 1200
[ 01 Foundations ⬩ Sheet 03 / 33 ]

Backgrounds

Each section sits on its own sheet, and sheets stack as you scroll. Ten backgrounds are approved, named as on the Colour page: Linen is the default sheet, with dots and grid versions for heroes and diagrams; alternate it with Ink. Nothing else goes behind a section. Paper is for cards only: one step lighter than the sheet, so a card lifts without a shadow.

14px top radius ⬩ stack on scroll
Paper ⬩ cards#FBF4ED
Linen#F7F1E9
Linen ⬩ dots#F7F1E9
Linen ⬩ grid#F7F1E9
Chalk#EEE7E2
Stone#D3C8C4
Terracotta#C27153
Slate#6E86A9
Sage#7F9870
Ink#0D0503
[ 01 Foundations ⬩ Sheet 04 / 33 ]

Symbols

Type these inline in mono labels and captions. ⬩ is the only separator; never a middot.

set in the mono face
⬩SeparatorEyebrows, captions, headings ⬩ never a middot
[ ]BracketsWrap section eyebrows ⬩ [ Mission ]
→ArrowEnds every CTA and link row
↓DownScroll hint, inside a 22px circle
↗ExternalLinks that leave the site
>_PromptPrefix on prompt chips ⬩ accent colour
/OfCounters ⬩ Sheet 03 / 08
+ −ToggleAccordion open and close
✕CloseDismiss and field errors
×TimesStat figures ⬩ 4×
①CalloutNumbers in 24–26px circles
©CopyrightInfo strip ⬩ ©Railblocks.com
[ 01 Foundations ⬩ Sheet 05 / 33 ]

Motion

Motion is straight, short and without bounce, like parts on a track. Colour changes are fast, movement slightly slower, and only scrolling moves the sheets. Press Play to compare all timings.

TokenTimeEasingUsed for
Instant0.12seaseRow and cell hover, table highlight
Quick0.15seaseButton and link fills, focus
Switch0.2seaseToggle, checkbox, radio
Lift0.3seaseCards rise 8px on hover
Slide0.35s(.2, 0, 0, 1)Sidebar, dialogs, panels
Loop2.4slinearTurntable, progress sweep
SheetScrolllinkedCovered sheet scales to 95% and shades to 40%See sheet 26 ⬩ Sheets
01No bounceNo springs or overshoot. Everything stops where it lands.
02One axisMove up, down or sideways. Never diagonally or rotating (loops excepted).
03No fade-insContent is already in place when a sheet appears. Only overlays fade in.
04Reduced motionIf the user prefers reduced motion, keep colour changes and remove movement and sheet scaling.
[ 02 Elements ⬩ Sheet 06 / 33 ]

Labels

Mono caps for eyebrows, tags and meta. One line at most; never for body copy.

Sheet 03 / 08 ⬩ Your firm OS
Eyebrow[ Your firm OS ]
Prompt chip>_Put your data in order for AI
Tags
Caption barFounders ⬩ operators ⬩ AI Ops engineers
Fig. captionFig. 3 ⬩ The self-learning factoryPart 04 / 06 assembled
[ 02 Elements ⬩ Sheet 07 / 33 ]

Numbered markers

Mark steps, callouts and list order. Keep numbering sequential within a sheet.

Callout ⬩ 24–26px ⬩ mono ⬩ fill when active
2Workflow automation
01Index ⬩ nav and listsA1Grid ref ⬩ logo wall
[ 02 Elements ⬩ Sheet 08 / 33 ]

Buttons

One primary action per view in clay. Outline for secondary, text with arrow for tertiary links.

Every button hugs its label: 17 × 24 padding (15 × 22 outlined), the arrow 14px after the text. Never stretch a button to fill a card, column, form or menu; set it at the start of the content it follows.

Get in Touch → Primary ⬩ ink ⬩ hover accent
More about our process → Secondary ⬩ paper ⬩ on colour sheets
More about Railblocks → Inverse ⬩ clay ⬩ on ink sheets
Default
Submit →Hover
Default
SecondaryHover
Book a callPick a time →
Do ⬩ the button hugs its label
Book a callPick a time →
Don't ⬩ stretched to the card, arrow pushed to the edge
[ 02 Elements ⬩ Sheet 09 / 33 ]

Focus

Keyboard focus is a dashed outline 4px outside the element, the same on every control. Links in text are underlined and turn Clay on hover; ↗ marks links to other sites.

inline links
Get in Touch → Secondary About → ✓ Focus ⬩ 1.5px dashed ⬩ 4px offset ⬩ press Tab on any control

We start with one workflow and ship it on your own infrastructure. Read how a16z screened applications in the case study ↗.

Inline ⬩ 1px underline ⬩ 3px offset ⬩ clay on hover
[ 03 Inputs ⬩ Sheet 10 / 33 ]

Form fields

Each field is numbered like a drawing callout: label above, hint on the right, message below. Focus adds an ink border and a Clay glow; disabled fields switch to dashed lines.

click to focus
[ 03 Inputs ⬩ Sheet 11 / 33 ]

Selection

Checkboxes for several choices, radios for one, switches for settings that apply immediately. A switch turns Sage when on.

checkbox, radio, switch
Checkbox ⬩ sources
Radio ⬩ engagement
Switch ⬩ settings
[ 04 Feedback ⬩ Sheet 12 / 33 ]

Tooltip

Tooltips work like drawing callouts: a line from a dot on the target to a small ink label. Dropdowns open a bordered list of numbered options, with a tick on the selected one.

dropdown
4× faster ⬩ vs. manual review 4× Hover the figure
08 ⬩ Use case
[ 04 Feedback ⬩ Sheet 13 / 33 ]

Alerts

Banners sit above the content they refer to; the colour block shows the type. Toasts confirm an action at the bottom of the sheet and disappear on their own.

toast
NotePilots for Q4 are now scheduling. Book a scoping call.
SentMessage received. We reply within one working day.
CheckYour file is over 20MB. Large uploads may take a minute.
ErrorWe couldn’t send the form. Check your connection and retry.
Click to trigger the toast
✓Message received ⬩ reply within 1 day
[ 04 Feedback ⬩ Sheet 14 / 33 ]

Loading

Progress runs along a track, the spinner turns like a turntable, and loading placeholders are crossed dashed boxes. Never a pulsing grey block.

progress, spinner, skeleton
Assembling workflow64%
Part 04 / 06≈ 20s left
Indeterminate ⬩ sweep
Turntable
Skeleton ⬩ card
[ 04 Feedback ⬩ Sheet 15 / 33 ]

Empty state

An empty view looks like an unfinished drawing: dashed border, a crosshair, one line saying what goes here, and one action to start.

Sheet 00 ⬩ WorkflowsNot yet drawn [ Nothing on this sheet ] No workflows yet Draw the first one →
[ 05 Navigation ⬩ Sheet 16 / 33 ]

Tab strip

Tabs switch views inside a section; the link list sends users to other pages.

link list
[ 05 Navigation ⬩ Sheet 17 / 33 ]

Breadcrumbs

Breadcrumbs read like stations on a line: filled stops behind you, an open ring where you are. Pagination counts sheets, not pages.

pagination
Full ⬩ visited ⬩ empty ⬦ current
Sheet {{ pageLabel }}
[ 05 Navigation ⬩ Sheet 18 / 33 ]

Stepper list

For processes of three to six steps. Only one row open at a time.

active row expands
{{ s.n }}{{ s.t }}{{ s.d }}
[ 05 Navigation ⬩ Sheet 19 / 33 ]

Sidebar

Opens from Menu in the header and slides in from the right. Groups show only their names until opened, and one group is open at a time. The current page is highlighted in Clay. Click outside or ✕ to close.

RailblocksClose ✕
One bucket open at a time ⬩ current sheet on clay
[ 05 Navigation ⬩ Sheet 20 / 33 ]

Accordion

Any number of rows can be open. The square marker fills Clay when open. Questions use the display font; answers use body text.

FAQ

{{ f.a }}

[ 06 Content ⬩ Sheet 21 / 33 ]

Logo wall

Client logos sit in a grid, one per cell, in ink only. Avatars show initials in a circle and overlap when grouped.

avatars
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
DBDavid BoothPartner ⬩ a16z
DBMKSOJL+12 operators
DBMKSOJL28 ⬩ 36 ⬩ 44 ⬩ 52
[ 06 Content ⬩ Sheet 22 / 33 ]

Cards

One idea per card: a quote, a case or a feature. The card lifts on hover to show it opens.

testimonial lifts on hover
1Admissions
“One person screened ~1,300 applications in ~2 hours.”
David BoothPartner ⬩ a16z
Fig. 4 ⬩ Figure frame

Deal sourcing

Inbound triaged, scored and routed before a partner opens it.

4×Stat footer ⬩ big figure ⬩ label
[ 06 Content ⬩ Sheet 24 / 33 ]

Table

Tables follow engineering schedules: ink rule on top, mono headers, hairline rows, a reference code in the first column. Rows highlight on hover.

schedule
RefWorkflowOwnerStatusRev
A1Intake formOperationsLiveR3
A2Scoring modelPartnersReviewR2
B1CRM syncPlatformLiveR5
B2Weekly reportFinanceDraftR1
Schedule 02 ⬩ Workflows04 of 12 rows
[ 06 Content ⬩ Sheet 25 / 33 ]

Code block

For configs and commands in posts and docs. Ink background, file name in the header, numbered lines, prompt in Clay, values in peach, comments in Sage.

workflow.yaml ⬩ R3
01>_ railblocks deploy02workflow: admissions-screening03source: warehouse.applications04steps:05  - score: rubric-v306  - route: partner-review07review: human# every decision signed off
[ 07 Page ⬩ Sheet 26 / 33 ]

Sheets

Use sheets for pages made of short, separate sections: the homepage, the UI kit, landing pages. Long pages (blog, articles, guidelines) use standard full-width sections that scroll normally, each opened by a 1.5px ink rule. Each sheet stops under the header and is exactly one screen tall; longer content scrolls inside it. The next sheet then slides over it, and the covered sheet steps back and darkens. One idea per sheet. Use the slider to see it.

HeaderMenu +
[ Sheet 01 ]
[ Sheet 02 ]
RuleValue
HeightAlways exactly the screen minus the header, whatever the content
PinStops right under the header (56px) ⬩ never slides beneath it
Corners14px, top only
Padding48 top ⬩ 64 sides ⬩ 128 bottom
Edge1px hairline on top edge, no shadow
CoveredScales to 95% ⬩ 40% ink shade
TallNever grows past the header ⬩ content scrolls inside the sheet, then the next sheet covers it
OrderEach sheet above the last ⬩ never sideways
SurfaceAlternate paper tones ⬩ ink for cover and footer
HeroFirst sheet, no sheet count ⬩ numbering starts at the sheet after it
LastScrolls normally, never pins ⬩ the footer is glued to its bottom edge
FooterNot a sheet ⬩ no rounded top, no count, never covers the last sheet
[ 07 Page ⬩ Sheet 27 / 33 ]

Mobile sheets

Below 600px, sheets keep the same rules at a smaller scale: smaller header and corners, less padding, a lighter step back. They still stop under the header and scroll inside when content is long.

RailblocksMenu +
[ Sheet 01 ]
01 ⬩ At rest
RailblocksMenu +
[ Sheet 01 ]
[ Sheet 02 ]
02 ⬩ Being covered
RailblocksMenu +
[ Sheet 01 ]
03 ⬩ Scrolling inside
RuleMobile
Header48px ⬩ logo + Menu
PinStops right under the header
HeightScreen minus header, always
Corners10px, top only
Padding32 top ⬩ 20 sides ⬩ 64 bottom
CoveredScales to 97% ⬩ 20% ink shade
LayoutEvery grid collapses to one column
TypeSheet title 64 → 40 ⬩ cover 120 → 56
LongContent scrolls inside the sheet
[ 07 Page ⬩ Sheet 28 / 33 ]

Header

Sticky on every page. Logo on the left, links on the right; each link takes its section colour on hover.

hover each link for its colour
[ 07 Page ⬩ Sheet 29 / 33 ]

Mobile nav

Below 900px, the header shows only the logo and Menu. Menu opens a full sheet of numbered links, each in its own colour, with the main action at the bottom.

tap Menu
Railblocks
Sheet 01 / 08 ⬩ Home
[ 07 Page ⬩ Sheet 30 / 33 ]

Modal

A dialog is one sheet over a dimmed page: a header with sheet number and close button, one decision, two actions, and a footer.

dialog
Dialog ⬩ Sheet 01 / 01
Book a scoping callThirty minutes with an engineer. Bring one workflow you would like to hand off.
30 minVideo callEsc to close
[ 07 Page ⬩ Sheet 31 / 33 ]

Info strip

The thin strip at the bottom of every page: who made it, the number of sheets, the year and the legal links. It is based on the title block of an engineering drawing. It always comes last, inside the footer.

Made by©Railblocks.com
Set08 sheets
Year2026
LegalTerms⬩Privacy
[ 07 Page ⬩ Sheet 32 / 33 ]

Footer

Ends every page. Option A: an ink sheet with a newsletter signup and three link columns. Option B: the homepage footer, on paper, with a track pattern on the left, a closing line with the main action and one numbered link list. Both end with the info strip.

the last sheet
Option A ⬩ ink sheet
Option B ⬩ paper with track pattern ⬩ as on the homepage
[ 08 Editorial ⬩ Sheet 33 / 33 ]

Blog article

The pieces inside a long read: the divider between parts, the pull quote and the takeaway callout. Both carry no text of their own and never sit between rules.

divider ⬩ pull quote ⬩ callout
Fig. 1 ⬩ In an article

One third of the working population, roughly a billion people, spend their days shaping that virtual matter. And to shape it, they use virtual tools: software.

Software is a very peculiar tool.

First, it’s neither bought nor owned. It’s rented. Mainly for good reasons.

Today, there is a rare opening to reclaim our agency, to once again build and own our tools.

Pull quote ⬩ rail
RailsTwo vertical lines, 1.5px ink, 5px apart. Tight: from a distance it reads as one quote bar.
Ties1px, same ink as the rails, never lighter. One closes the top, one closes the bottom.
SpacingTies are always evenly spaced, about 6px. The rail fits a whole number of ties to the quote’s height.
TextNewsreader 400, 22–26px, 1.22 leading. Ink.
Gap24px between rail and text. The quote sits on the text column, never breaks out of it.
NeverQuotation-mark glyphs, rules above or below, oversized type, or a coloured rail.
Callout ⬩ ink panel
UseThe takeaway of an article, or the one thing a reader must not miss. One per article.
PanelInk ground, 2px corners, 22px 24px padding. Sits on the text column.
LabelMono 11px in terracotta, bracketed: [ Key takeaway ], [ Note ], [ In short ].
TextPlex Sans 16px, 1.6 leading, Paper colour at full opacity.
NeverA second one in the same article, a coloured panel, or a heading inside it.
Divider ⬩ keystones
FormThree keystones from the logo. Outer 9px outlined, middle 11px filled in terracotta.
UseBetween the parts of a long read. Not after the last part.
Space56–96px above and below.
NeverLabels, numbers or rules attached to it.