Conversation
The owner asked for the grid-line look of Laravel, Vercel and Tailwind (design-system §4.7, decided 2026-10-06). It reverses the rebuild's "gutter rails" removal in a form that cannot repeat the old defects. - Rails: FrameRails draws two 1px --rule verticals on the wide Container's outer edge from 1280px, over the page and again inside the opaque sticky header. Each rail is its own 1px element. Below 1280 there are no rails, only horizontals. - Joins: app.css draws a full-bleed rule between every two blocks of <main> by position, so no template can leave one out. Section, PageHeader and the hero pad half the rhythm on each side, replacing the data-rhythm collapse. Top-level Containers now sit in full-width blocks so their joins reach the screen edge. Anchors land behind the header's rule, so /#pricing shows one line, not two. - Marks: an 11px --rule-strong cross where the frame starts and ends, plus the homepage's #pricing; six at most, from 82rem, hidden in forced colours and print. - Cells: CellGrid draws shared 1px lines with spread shadows and reaches the rails. The homepage's actions, engines, sponsors, workflow rows, safety row, platform block, plans and closing actions, the pricing page's plans and the feature pages' docs row are cells. Prose stays unlined. - A list that ends a block drops its last rule, so it never stacks a second line above the join; a list inside a card keeps it. PageFrameTest holds the markup and CSS on fifteen templates. The geometry was measured in a browser at 390 to 1920px: no horizontal scroll, rails on the Container edge, cell lines on the rails, one join per block boundary, at most six marks.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings the grid-line look of Laravel, Vercel and Tailwind to tablepro.app, as the owner decided on 2026-10-06 (design-system §4.7). It reverses the rebuild's "gutter rails" removal, in a form built so the old frame's defects cannot come back: the rails are drawn on the Container's own box, so they cannot detach; nothing uses
vw; nothing clips overflow.What changes
Rails (
FrameRails): two 1px--rulelines on the wide Container's outer edge, from 1280px. At 1280 they sit on the screen edges. Drawn over the page, and again inside the sticky header because the header is opaque. Below 1280 there are no rails.Joins: a full-bleed hairline between every two blocks of
<main>, drawn inapp.cssby position. Every block pads half the section rhythm on each side, which replaces thedata-rhythmcollapse. Top-level Containers now sit inside full-width blocks, so every join reaches the screen edge. Anchor jumps land behind the header's rule, so/#pricingshows one line.Marks: an 11px neutral cross where the frame starts and where it ends, plus the homepage's
#pricingjoin. At most six per page, shown from 82rem, and hidden in forced colours and in print.Cells (
CellGrid): shared 1px lines that reach the rails. Cells are used for:/pricingplans;#ai,#switchand articles stay unlined.A list that ends a block drops its last rule, so two lines never stack just above a join. A list inside a card keeps its rule.
design-system.mdgains §4.7 Page frame and updates the decisions table, §4.3, §4.5, §4.6, §5.1, §5.3.18, §8.1, §10 and §11.Verification
php artisan test: 1556 passed, 1 skipped.npm run test:js: 185/185 passed.tscclean, and the shared files are unchanged.New
PageFrameTestcovers 15 templates: the rails, a full-width block for every join, no doubled rule, the mark count, cell grids only in wide sections, and the CSS.Browser measurement (Chrome) on 20 templates at 390, 768, 1024, 1280, 1366, 1440 and 1920px:
The only rules still sitting just above a join are boxes with their own edge: callouts, placeholders, the database facts card and form inputs.
Not checked:
Screenshots
Each image puts the live site today (left) beside this PR's build (right). Light theme at 1440px unless noted. Click an image for full size.
Hero: the two download actions become a row of cells; rails appear from 1280px.

Databases: the featured engines become a wall of cells, and the list by type runs from rail to rail. The marks show where the frame starts.

Sponsors and workflows: the logos become a wall of cells that closes on the next join, and each workflow row is a cell.

Safety: the detail row becomes two cells, split 5 / 7.

Platforms: the Mac and iPhone cards become cells on the band.

Pricing: three joined cells, with a marked join. The prices are unchanged.

Closing actions and footer: the actions close on the footer's rule, where the frame's end marks sit.

Dark theme

/pricing: a join under the page header, and the plans as cells.

Phone, 390px: no rails. Cells run to the screen edge, so only horizontal lines remain.
