Every page is 1280 pixels wide, including the tables, and the cap is one line in base.html #188
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Postulo/postulo#188
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Observation
templates/base.html:max-w-7xlis 80rem — 1280 pixels — so on a 1440p or 4K screen the whole application isa 1280px column with grey on both sides. Nothing opts out: there is no
max-w-none, now-screen, and no width preference anywhere in the templates or onProfile.Where it actually costs something
Not the forms. The grids, and the cost is compounding:
.scroll-x(overflow-x: auto). #136 then gave people chosen columns and saved columnwidths — so somebody can add a tenth column and drag it wider, and the page still refuses
to use the monitor. The table just scrolls in a box.
will want the same for captures. Every one of those makes the cap hurt more.
lg:grid-cols-4inside it.Accessibility: checked, and it does not argue against this
The one WCAG criterion about line length is SC 1.4.8 Visual Presentation — "Width is no
more than 80 characters or glyphs" — and it is level AAA.
CLAUDE.mdanddocs/PLAN.mdboth promise WCAG 2.2 AA, and the changelog already keeps that distinction deliberately
("Reflow is level AA, and the README promises AA without qualification").
The reasoning behind 1.4.8 is real at any level, though: a long measure costs readers with
dyslexia, low vision and cognitive disabilities, who lose their place coming back to the
start of the next line. So it decides the shape of this change rather than blocking it —
and it is already being respected.
max-w-2xlis 42rem = 672px, which at the 16px baseis about eighty characters. That is 1.4.8's own number; whoever chose it was aiming at it.
There is also an argument for widening the grids. Today a wide table scrolls inside a
capped column, so somebody using a screen magnifier scrolls in two nested contexts to read
one row. Lifting the outer cap removes one of them. Not SC 1.4.10 Reflow, which is about
320px — but the same hostility, at the other end.
The change
Take
max-w-7xloff<main>and let each page say how wide it is. Every page thatalready caps itself (26 ×
max-w-2xl, 11 ×max-w-md, 7 ×max-w-3xl, mostly forms andentrance pages) is unaffected and keeps its measure.
The header and footer are a separate decision: they may stay at
max-w-7xlfor a tidymasthead over a wide page, or follow. Worth choosing rather than inheriting.
Pages with no cap of their own, which is the whole risk surface
Grids — these are the point of the change:
Prose and detail — these need a measure inside a wide page:
A wide page is not a wide paragraph. A listing detail page going full width with its
description following is trading a table problem for a reading problem, and the description
is exactly the field that runs to forty thousand characters.
Settings already has its own sub-layout —
settings/base.html:9ismx-auto max-w-5xl lg:flexwith a 14rem sidebar — so those pages are unaffected either way.#180may widen it; that is that issue's call, not this one's.Fixed, or a preference?
Recommendation: fixed. Grids go wide, prose keeps its measure, nobody configures
anything. A preference means a
Profilefield, a migration, a form control on Appearance,and its strings in every catalogue — for a choice most people would set once and forget, and
which the per-page split already gets right for them.
Profiledoes already holdtheme,table_settingsanddashboard_widgets, so a widthpreference would sit naturally beside them later if anybody asks. Doing it now would mean
building the machine before knowing whether the default is wrong.
Checks this must not break
test_accessibility.pyruns axe-core over every page signed in and out; a layout changegoes through it.
test_the_dashboard_lays_out_in_four_columnsandtest_a_narrow_screen_reads_downwardsassert the dashboard's grid and stacking.
#73is where the phone gets its proper attention. Nothing here should make a narrowscreen worse, and the per-page caps are what keeps it from doing so.
npm run build:css.Landed on
mainas43d51b043, with one change of shape from what this issue proposed.Rather than take the cap off
<main>and chase every page that had no cap of its own --the allauth and MFA pages among them --
<main>takes its width from amain_widthblockwhose default is the cap it always had. The thirteen grid pages listed here empty it
and take the screen; everything else keeps its measure without being touched. That inverts
the risk surface: the only pages that change are the ones meant to.
The header and footer span the width, so a masthead never sits narrower than a table under
it. Below 1280 pixels nothing changes, and the compiled stylesheet did not either.
Checked from the markup by
tests/test_width.py(twelve grid pages uncapped, seven measuredpages at 7xl, header and footer uncapped) and from a browser at 2560 pixels by
tests/e2e/test_width.py(the applications table'smainand its scroll box take thescreen; a form stays at 1280).
Two things noticed on the way:
/jobs/captures/now redirects to/listings/and/settings/to/settings/appearance/, so the tests name the final pages. The print reportis a standalone document outside
base.htmland is unaffected either way.