One repository, one line. The rail runs behind every node and stops half a row short at each end, so the line terminates on a node rather than on a cut (RAIL-2). The node vocabulary names FORM, never meaning: the same filled disc reads as "pushed this week" on an index and "on the current ref" in a log (RAIL-3).
Four rungs of the ladder on one line: name --fj-primary size-4 medium, sha --fj-faint size-2, subject --fj-muted size-3, date --fj-faint size-2 aligned to the right margin (COMP-4). Single-line, because nothing here is a second independent fact (DENS-1, DENS-2).
Filled, half-weight, hollow, and a square rotated 45 degrees. Four forms, one geometry. The merge form is a SHAPE rather than a fourth colour, so the vocabulary survives a monochrome print and a colour-blind reader (COLOR-5). Adding a fifth reading means adding it to the spec's table first (RAIL-4). RAIL-3 states the middle step as "filled at 45%"; it is drawn in --fj-primary-half rather than in 45% opacity, because the node carries meaning and COLOR-6's 3:1 floor has no exception list.
The row lifts to --fj-surface, the node fills to --fj-primary, and the link gains an underline. Never geometry, never size, never position.
The ring is on the row's only tab stop, the name. Tab into the list below to see it: this one is live rather than forced, because a focus ring you cannot reach with the keyboard is the thing DNA-5 is about.
The row washes to --fj-select-wash and the node gains a --fj-marker ring in --fj-primary. It lives in the rail's own column, so keyboard navigation adds no new vocabulary (RAIL-5, STATE-CURSOR-3). It is carried by data-cursor rather than by :focus-visible, so a reader who clicked and then pressed j still sees where they are (STATE-CURSOR-4).
STATE-PREC-2: the two must stay distinguishable when both apply. The cursor is carried by the node's ring, hover by the surface lift, so a row that is both reads as both.
The background deepens one surface step. No transform (STATE-ACTIVE).
Every rung collapses to --fj-faint and the name stops being a link: the affordance is removed, not painted over. The node's border drops from --fj-mark to --fj-rule, because a disabled row's node encodes nothing and a boundary that encodes nothing has no contrast floor (COLOR-6).
Single-line, ellipsis at the end, full value in title, never wraps and never reflows the row (DENS-4). Narrow this window to watch the subject give way while the name, the sha and the date hold their columns.
DENS-2: --fj-row-tall only where a second independent fact cannot be truncated onto the first line. A commit row qualifies; an index row does not, which is why the specimen here is a commit. DENS-6: nothing is ever taller than this.
aria-busy on the region and a word in the eyebrow's count slot. The rail still renders, so the page does not change shape when the rows arrive.
Loading repositories
One left-aligned line in --fj-muted, on the content column, with the rail rendered as a single node stub. Never centred (DNA-4), never illustrated, never an emoji (AP-10).
No repositories yet. Push one with a git client.
A hairline region with a --fj-del border, a SIGN GLYPH, and the message in --fj-ink. The sign is a required parameter, so an error rendered through this binding cannot lose its non-colour carrier (COLOR-5, A11Y-5).
Four rungs of the ladder on one line: name --fj-primary size-4 medium, sha --fj-faint size-2, subject --fj-muted size-3, date --fj-faint size-2 aligned to the right margin (COMP-4). Single-line, because nothing here is a second independent fact (DENS-1, DENS-2).
Filled, half-weight, hollow, and a square rotated 45 degrees. Four forms, one geometry. The merge form is a SHAPE rather than a fourth colour, so the vocabulary survives a monochrome print and a colour-blind reader (COLOR-5). Adding a fifth reading means adding it to the spec's table first (RAIL-4). RAIL-3 states the middle step as "filled at 45%"; it is drawn in --fj-primary-half rather than in 45% opacity, because the node carries meaning and COLOR-6's 3:1 floor has no exception list.
The row lifts to --fj-surface, the node fills to --fj-primary, and the link gains an underline. Never geometry, never size, never position.
The ring is on the row's only tab stop, the name. Tab into the list below to see it: this one is live rather than forced, because a focus ring you cannot reach with the keyboard is the thing DNA-5 is about.
The row washes to --fj-select-wash and the node gains a --fj-marker ring in --fj-primary. It lives in the rail's own column, so keyboard navigation adds no new vocabulary (RAIL-5, STATE-CURSOR-3). It is carried by data-cursor rather than by :focus-visible, so a reader who clicked and then pressed j still sees where they are (STATE-CURSOR-4).
STATE-PREC-2: the two must stay distinguishable when both apply. The cursor is carried by the node's ring, hover by the surface lift, so a row that is both reads as both.
The background deepens one surface step. No transform (STATE-ACTIVE).
Every rung collapses to --fj-faint and the name stops being a link: the affordance is removed, not painted over. The node's border drops from --fj-mark to --fj-rule, because a disabled row's node encodes nothing and a boundary that encodes nothing has no contrast floor (COLOR-6).
Single-line, ellipsis at the end, full value in title, never wraps and never reflows the row (DENS-4). Narrow this window to watch the subject give way while the name, the sha and the date hold their columns.
DENS-2: --fj-row-tall only where a second independent fact cannot be truncated onto the first line. A commit row qualifies; an index row does not, which is why the specimen here is a commit. DENS-6: nothing is ever taller than this.
aria-busy on the region and a word in the eyebrow's count slot. The rail still renders, so the page does not change shape when the rows arrive.
Loading repositories
One left-aligned line in --fj-muted, on the content column, with the rail rendered as a single node stub. Never centred (DNA-4), never illustrated, never an emoji (AP-10).
No repositories yet. Push one with a git client.
A hairline region with a --fj-del border, a SIGN GLYPH, and the message in --fj-ink. The sign is a required parameter, so an error rendered through this binding cannot lose its non-colour carrier (COLOR-5, A11Y-5).