Repository navigation
feat(web): rebuild the page chrome around one layout (spec 0015) - #14
Merged
Merged
Conversation
Replaces three competing content widths, unwrapped tables and a form-as-layout stylesheet with a navigation rail, one content column and four primitives (.scroller, .section, .field, .tag). Fixes text drawn outside its container and the page scrolling sideways below 60rem. Verified by measuring every element against its container in headless Chrome at 1440px and 390px; the same probe reports the pre-0015 pages as broken.
The rail is sticky and one viewport tall: on a long page it used to scroll away and take the logout button with it (measured 428px above the viewport). Issuing and signing become two pages with two rail entries — which side holds the private key is the difference between them, and it was buried in the second half of one page. Adds GET /certs/sign; POST /certs/sign is unchanged, and its errors now re-render the CSR page.
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.
Implements spec 0015.
What was wrong
Four structural defects, all reproducible with real data at a normal desktop width:
main60rem,.card24rem,.card-wide48rem. Settings and the dashboard rendered at half the width of every table page, and the 60rem ofmainwas never used.table { width: 100% }without a fixed layout grows past its card./certsdrew its last three columns 275px outside the card and off the screen;/users221px,/ca63px.flex-wrapon the nav or the filter rows, no media query anywhere. Below ~60rem the page scrolled sideways.Two further problems came from the same stylesheet:
form { display: flex; flex-direction: column }stretched every button to the full card width, and because settings and ACME are one<form>each, their headings and prose were flex items with the same 0.5rem gap as the input fields.What changed
Pages now compose from a grouped navigation rail plus a content column that uses the window, and from four primitives:
.scroller— the only element allowed to scroll horizontally.section— a heading and its explanation beside its controls.field/.actions—formis no longer a layout, so a button is sized by its text.tag— replaces.badge-*, keeping the value in the class name (tag-valid,tag-source-acme) so a value can still be styled and asserted onBoth colour schemes are complete, the rail collapses to a wrapping nav strip below 60rem, and the current page carries
aria-current="page". Two SIL OFL fonts are vendored with their licences (Public Sans + IBM Plex Mono, 57 KB of woff2) — nothing is fetched from a CDN.No routes, permissions, CSRF behaviour, data or page copy changed.
Verification
tests/test_web_layout.pyrenders all ten authenticated pages in headless Chrome with a 60-character common name and five SANs, and measures every element against the viewport and against its own container at 1440×1150 and 390×900. Both widths: zero offenders.The probe is checked for sensitivity rather than assumed: run against the pre-0015 templates it reports
/certs+275px,/users+221px and/ca+63px out of container, and it turns red if.scrollerstops scrolling. An earlierscrollWidth-based version of the same test called the known-broken pages clean and was discarded.make check: 473 passed, no skips.Notes
test_web_certs_inventory,test_web_acme_uiandtest_mcpwere renamed frombadge-*totag-*. Their intent is unchanged.{% if certs %}branch removed the way back from an out-of-range page number.test_list_page_absurd_page_is_empty_not_an_errorfailed; the pager now sits outside the branch in bothcerts_list.htmlandaudit.html.