The file focus band, photographed

Agent Manager · branch style/files-focus-name-band (77f50fc, off integration/all-14-plus-feedback) · every picture is the real Files pane in a browser, on that branch's stylesheet · 11 Sep 2026

What changed. The keyboard focus indicator is a band behind the file name: square, in the accent, 34% over whatever is underneath it. It replaces the neutral full-row band, which replaced the 2px outline.

How these were taken. The real FilesPane, the branch's real styles.css, mounted in Chromium against a fixture file list. Every focused row was reached by pressing Tab and then arrow keys, never by focusing an element from script — :focus-visible only matches for a keyboard, so a scripted focus would have photographed a different thing. Nothing was restyled to make the pictures look better; captures are at 3× (6× for the close-ups) and cropped to the rows.

1 · the basic caseA focused file row, with unfocused rows under it

Light theme: deploy.sh focused with a teal band behind the name, four unfocused rows below
light · keyboard on deploy.sh
Dark theme: the same row and band
dark · same row

The four rows below are the same rows unfocused, so the difference is in the picture rather than in a description. The band starts and ends on the text, not on the name column: .tw-name is the flexible column that pushes Size and Modified to the right, so painting it would have left a long empty tail after a short filename. The paint sits on an inner span that is exactly as wide as the name.

2 · close upWhere the band starts, where it ends, and its corners

Close-up of the light band: square corners, a quarter-em of air each side of the text
light · 6×
Close-up of the dark band
dark · 6×

Square, because the rounding belonged to the row and the band no longer is the row. There is a quarter of an em of air each side of the text, and that padding is cancelled by an equal negative margin — so arrowing down a listing does not nudge every name sideways as the focus arrives. (Measured in the suite with a Range over the text node: the padded box moves, the glyphs do not.)

3 · a folderThe same thing on a folder row

Light theme: the docs folder row focused
light · keyboard on docs
Dark theme: the docs folder row focused
dark · same row

A folder row has no size and no download button, so the name column starts and ends in the same place but the row carries less. The band behaves identically — it is on the name, and short names get short bands.

4 · the stale pointerFocus on one row, the mouse resting on another

Light theme: deploy.sh focused, docs hovered
light · keyboard on deploy.sh, pointer over docs
Dark theme: the same split
dark · same split

This is the case that decided the strength. Hover is a whisper across the whole row (--panel-2) and reveals that row's actions; focus is a definite mark on one name. They are different in kind — a row-wide wash versus a text-width block — and not just in degree, so a mouse left lying on the listing cannot be mistaken for where the keyboard is.

5 · the hard caseFocus on a row that is also selected

Light theme: deploy.sh selected and focused, README.md selected but not focused
light · deploy.sh selected + focused · README.md selected only
Dark theme: the same comparison
dark · same comparison

Both rows are selected. The top one also has the keyboard. That is the whole question the accent band raised: accent on accent.

Two choices make it work. The row keeps saying what it is — the selected tint stays on the row — and the name says where the keyboard is, on top of it. And the name's colour changes: a selected name is normally accent at weight 600, which on an accent band is teal on teal (measured 3.68:1 in light, 2.16:1 in dark — unreadable), so when the band is there the text goes back to ordinary ink and keeps the weight. README.md in these shots is what a selected row looks like without the keyboard: accent text, no band.

Worth knowing: this combination cannot currently happen in the app. "Selected" means the file open in the preview, and the listing is hidden while a preview is open, so no row is ever both selected and on screen. The class was applied directly for these two pictures. The rule exists so the cascade is right if that ever changes, not because it is visible today.

6 · mid-dragFocus on the folder a drag would land in

Light theme: docs focused and a drop target, README.md dimmed as the dragged row
light · dragging README.md onto the focused docs
Dark theme: the same drag
dark · same drag

The drop target keeps everything it had: its own accent tint, its solid accent outline, and the dashed outline around the listing. The focus band sits on the name on top of that, so mid-drag you can still see which row the keyboard is on without the drop affordance being weakened. The dragged row is the dimmed one.

The numbers behind the choice

34% accent is the weakest tint that stays a clear step on every surface it can land on. Contrast ratios, measured on the real pane with the row states read from the cascade rather than written out again:

the band is sitting onlight: band vs rowlight: name on banddark: band vs rowdark: name on band
a quiet row1.62:111.25:11.88:18.50:1
a hovered row1.59:110.74:11.89:18.37:1
a selected row1.54:19.85:11.88:16.87:1
a drop target1.51:19.18:11.84:16.31:1

Weaker tints were measured too: at 22% the band falls to 1.30:1 on a drop target in light, which is where it stops being a mark and starts being a smudge.

What I would flag, now that I can see it