Skip to content

Run the rails past the footer, and stop stacking two rules at one height - #8

Merged
datlechin merged 1 commit into
mainfrom
fix/landing-rails-and-ordinals
Aug 15, 2026
Merged

Run the rails past the footer, and stop stacking two rules at one height#8
datlechin merged 1 commit into
mainfrom
fix/landing-rails-and-ordinals

Conversation

@datlechin

Copy link
Copy Markdown
Member

Both of these were reported from a screenshot, and both are mine.

The vertical lines stopped dead above the footer

row-span-full compiles to grid-row: 1 / -1, and -1 counts back from the
last line of the explicit grid
. The layout declared grid-cols and nothing
else, so every row was implicit, -1 resolved to line 1, and the span collapsed
to a single row. Both gutters and both container rails ended exactly where
<main> ended, and the footer stood beside nothing.

grid-rows-[1fr_auto] makes -1 mean what it reads like. The 1fr also pins
the footer to the bottom on short pages, which min-h-dvh alone never did.

PR #3 moved the rails out of <main> specifically so they would "carry on past
the content and down the side of the footer" — the markup was right and the
grid silently refused to honour it.

The gutter printed 08 and 09 on top of each other

Five places had one block closing with a rule and the next opening with one. Two
rules at the same y draw a single hairline but consume two ordinals, so the
numbers collided. On the homepage that was the join between the hero screenshot
and the spec table — the exact "08/09" in the screenshot — plus four more.

A boundary is one rule and it belongs to whatever closes. The redundant opening
rules are gone from spec-strip, objection-row, download-rail, pricing's
billing toggle and Download's system-requirements line. 125 rules become 120,
and nothing changes visually: the line was always being drawn by the block above.

Both are held by tests

The rule test was proved by reintroducing the spec-strip rule and watching it
fail with "Rules 8/9 render at the same height" — the exact pair in the
screenshot — then pass again on revert.

It treats only <section> and unstyled <div> as transparent, because anything
that can carry height genuinely separates two rules. scroll-mt-* is
specifically excluded: it is scroll-margin and adds no layout height, and
mistaking it for margin is what made my first two attempts at finding these by
hand come back clean.

Verification

typecheck, build and pint clean. 107 tests / 1852 assertions with
REQUIRE_SSR=1. All nine page types re-rendered and scanned: zero coincident
rules anywhere, footer inside the grid on every one.

Two visible defects, both reported from a screenshot.

**The vertical lines stopped dead above the footer.** `row-span-full` compiles
to `grid-row: 1 / -1`, and `-1` counts back from the last line of the *explicit*
grid. The layout declared `grid-cols` and nothing else, so every row was
implicit, `-1` resolved to line 1, and the span collapsed to a single row: both
gutters and both container rails ended where `<main>` ended and the footer stood
beside nothing. Declaring `grid-rows-[1fr_auto]` makes `-1` mean what it reads
like, and the `1fr` also pins the footer to the bottom on short pages, which
`min-h-dvh` alone never did.

**The gutter printed 08 and 09 on top of each other.** Five places had one block
closing with a rule and the next opening with one. Two rules at the same y draw
a single hairline and consume two ordinals, so the numbers collided — on the
homepage at the join between the hero screenshot and the spec table, and four
more times elsewhere. A boundary is one rule, and it belongs to whatever closes;
the opening rules are gone from spec-strip, objection-row, download-rail,
pricing's billing toggle and Download's system-requirements line.

Both are held by tests now. The rule test was verified by reintroducing the
spec-strip rule and watching it fail with "Rules 8/9 render at the same height"
— the exact pair in the screenshot. It treats only `<section>` and unstyled
`<div>` as transparent, since anything that can carry height genuinely separates
two rules, and `scroll-mt-*` is excluded because it is scroll-margin and adds
no layout height — which is precisely what fooled my first attempt at finding
these by hand.
@datlechin
datlechin merged commit ea3c59e into main Aug 15, 2026
5 checks passed
@datlechin
datlechin deleted the fix/landing-rails-and-ordinals branch August 15, 2026 05:07
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