Skip to content

Polish: make the row treatment reachable, number every rule, and correct three comments that were wrong - #4

Merged
datlechin merged 1 commit into
mainfrom
fix/landing-polish
Aug 15, 2026
Merged

Polish: make the row treatment reachable, number every rule, and correct three comments that were wrong#4
datlechin merged 1 commit into
mainfrom
fix/landing-polish

Conversation

@datlechin

Copy link
Copy Markdown
Member

The remaining medium/low findings from the audit that preceded #3, minus the
ones #3 already fixed and one I refuted on inspection.

The row treatment could never fire on focus

[data-row] shipped on exactly two elements and neither is focusable: LedgerRow
is a plain <div>, the Safe Mode row is a <tr>. So the claim in 21c32be that
"keyboard users finally get row-level feedback" was false — nothing carrying
the attribute could match :focus-visible.

LedgerRow was the wrong host for a second reason. A ledger row is a definition
list entry with nothing to activate, so tinting it on hover advertised an
affordance that does not exist — and on the one row that does hold links, the
ten comparison chips, the surrounding whitespace lit up more strongly than the
links themselves.

It moves onto things you can genuinely click or select: the database tiles,
which are links and therefore focusable, so hover and focus finally resolve to
the same treatment. Safe Mode keeps it, where aria-selected is real. The chips
get their own hover instead — a 2px bar at left: 0 is a row device and would
have been clipped by their own border radius.

Every rule is numbered now, or the claim was untrue

AccentLine draws a visually identical hairline and was not counted, so the
ordinal was the position of some rules rather than of the rule — the first one
in every section was silently missing. 108 numbered rules become 124.

Three comments stated things that were not true

  • The gutter columns are md:block; the comment claimed they "are not rendered
    at all" below lg. They render from 768px and simply do not carry numbers yet,
    which is now what it says and why.
  • With a 96rem middle column the container stops filling it from 1360px
    80rem of content plus two 40px gutters — not the ~1616px two comments claimed.
  • workbench.tsx's ladder justification is left alone; it is right about the
    ratio even where it is loose about the measured width.

Smaller

Refuted, so not changed

The audit claimed the workbench screenshots "render at 12% scale with no crop"
below lg. They do not: Tailwind's preflight sets img { max-width: 100% }, so
the image fits its container at every width below the lg: overrides.

Still blocked, unchanged

Cold-start measurement (the EXPLAIN tree, and whether "Under 1s" may stay on
the spec table at all), recaptured screenshots (hero, Plates, workbench
toggles), per-sponsor copy, the DepthGrid and FAQ cuts, an h1 for /faq, and
the nineteen-site button migration — which wants a human looking at the result,
since it is the conversion path and there is no visual check here.

Verification

typecheck, build and pint clean; 96 tests / 1827 assertions with
REQUIRE_SSR=1. Rendered HTML re-checked: 124 numbered rules, data-row on 33
focusable or selectable elements and none on a ledger row, and no arbitrary font
size anywhere in resources/js.

`[data-row]` shipped on two elements, and neither could ever match its own
`:focus-visible` rule: LedgerRow is a plain `<div>` and the Safe Mode row is a
`<tr>`. So the claim in 21c32be that "keyboard users finally get row-level
feedback" was false — nothing focusable carried the attribute.

Worse on LedgerRow specifically: a ledger row is a definition list entry with
nothing to activate, so tinting it on hover advertised an affordance that is not
there. On the one row that *does* hold links — the ten comparison chips — the
surrounding whitespace lit up more strongly than the links inside it.

It moves to things you can genuinely click or select: the database tiles, which
are links and therefore focusable, so hover and focus now resolve to the same
treatment as intended. Safe Mode keeps it, where `aria-selected` is real. The
comparison chips get their own hover instead — a 2px bar at `left: 0` is a row
device and would have been clipped by their own border radius.

Also in this pass:

- AccentLine was not numbered. It draws a visually identical hairline, so
  skipping it made the ordinal the position of *some* rules rather than of the
  rule — the first one in every section was missing. 108 numbered rules become
  124.
- Two doc comments stated the wrong thing. The gutter columns are `md:block`,
  not lg, so the claim that they "are not rendered at all" below lg was false;
  and with a 96rem middle column the container stops filling it from 1360px, not
  the ~1616px both comments claimed.
- `transition-delay` joins the reduced-motion block, for the same reason
  `animation-delay` did: collapsing a transition's duration still leaves it
  holding its start value for the whole delay.
- Blog h2/h3 set their own font-size and inherited the wrapper's 1.75 leading,
  so they never touched the locked scale. They read from it now.
- The last four arbitrary font sizes go: `text-[10px]` sat below the smallest
  rung and carried no line-height or tracking at all, and `text-[13px]` fell
  between two rungs. `rounded-[4px]` becomes `rounded-key`, which is the token
  added to stop that literal being retyped.
@datlechin
datlechin merged commit 723ff60 into main Aug 15, 2026
5 checks passed
@datlechin
datlechin deleted the fix/landing-polish branch August 15, 2026 02:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant