Organism

Rows

The scroll container of the queue, and that is all it is. Three declarations, standing on 43 instances across 43 screens: in Z4 38 and inside a block 5.

It exists so that the rows scroll and the zone around them does not. The scope bar, the readout and the keyboard strip stay put while two hundred rows go past, and the head row sticks to the top of this box rather than to the viewport. Take the box away and the sticky head has nothing to stick inside.

Inside a brief it stops scrolling, and that rule is not written here. A handover is read from the top in one pass, so a scroll box inside a scrolling document is a second scrollbar nobody asked for. brief owns the override, because otherwise this component would have to know where it is standing.

Anatomy

What the bench is standing in. A 280px flex column, which is z4 made short enough to fit on a page. flex:1 1 auto and min-height:0 do nothing at all without a parent of a settled height, so a bench that left that out would show a list that never scrolls and document the opposite of the component. Scroll inside it: the head stays, the readout above and the strip below stay, the rows move.

Variants

One axis, and both of its values change the row rather than this. The container carries the axis in its own header comment and declares nothing for it: the log’s widths live on row--log, and the handover line is a component of its own.

AxisValueUsesThe rule
listbase31the queue. Seven zones at --row-tracks
.rows--log7the log. It has no declaration in the system. In kit.css the container set the track list; here the same seven zones at the log’s widths are row--log reading --row-tracks-log, so the class survives on the screens as a name and does no work
scrollno values–Prohibited, and the reason is where the rule lives. There is no rows--static. The one place the list must not scroll is inside a brief, and that override belongs to brief, the container that changes it
densityno values–Prohibited. It has no padding, no gap and no type of its own. Everything a reader would want to loosen belongs to row, and design principle 5 answers it there

The remaining 5 of the 43 have left: .rows--moved in the shift brief was ruled a component of its own at step 2 and the five screens wear rows-moved now. Counted after the rename this container stands on 38.

When to use it

Around every list of row that fills a zone: the queue and the log. Not around four lines in a block, and not around anything read as a document.

Where she meets it. Six hours a day, without ever seeing it. What she sees is that the column names are still there at row 90 and the count of what is shown has not scrolled away. This is the component that costs the least to write and is noticed only when it is missing.

Rule and anti-rule

Do

One scroll box, filling the zone, with the readout above it and the strip below it standing still. The head is sticky because this box is what it sticks to.

Do not

What moved this shift
Larkfield LogisticsToken replay. Escalated to S. Varga, still openescalated2h
Meridian HealthImpossible travel, ruled benigndecided1h

Never inside a document. That is rows-moved, which does not scroll: a handover is read from the top in one pass, and a scroll box inside a page that already scrolls hides the last thing that moved behind a scrollbar.

Limits

Rules of composition and context, which no anti-rule can carry: nothing else is the right component to take, and what is wrong is the count or the neighbour. Counted on the grey corpus at stage 09, and every one of them is a function in design/kit/checks/rules.mjs. Full table with sources on Architecture.

States

None. It is layout, it reads no colour, and there is nothing on it to point at. Everything alive in the bench below belongs to row.

The scrollbar is the browser’s and it is not restyled. Nothing in this system paints one. On a console read for six hours the platform’s own scrollbar is the one the analyst already knows how to grab.

At 360 the box keeps scrolling and the row underneath it becomes one column, because --row-tracks collapses to 1fr on :root at that width. This file changes nothing there and needs no media query of its own.

What it reads, and where it stands

Nothing. It is the only organism in the system with no colour role at all, which is what makes it the clearest case that layout and paint are separable here: every ink and every line in the bench above is declared by row, readout or qfoot.

RoleSurfaceWhere on the componentDarkLight
no fill–it is transparent, and the zone behind it shows through––
no ink–it has no text of its own––
no line–the rules between rows belong to row, through --rule-hair
--bg-surfacefillthe sticky head that depends on this box, declared by row--head

Copy this

<div class="rows" role="grid" aria-labelledby="qh" tabindex="0"> <div class="row row--head" role="row">…</div> <a class="row" role="row" href="case.html">…</a> </div> <!-- it needs a flex column of a settled height above it. On a screen that is .z4 -->

Where it stands