Public: anyone can read this; the crew can change it.
A phone shows one whole column, not one and a sliver: a width breakpoint, snap, and a header that stays #95
Sign in to join this conversation.
Public: anyone can read this; the crew can change it.
On a phone the board should rest on a whole column, not on one column and a sliver of the next.
What it is like today. The stylesheet in
src/pages/board.tshas exactly two media queries and both areprefers-color-scheme— there is no width breakpoint anywhere in the app..boardisdisplay: flex; overflow-x: auto,.columnis a fixedwidth: 16rem; flex: none, andbodyhaspadding: 1rem 1.5rem. On a 390px phone that is one 256px column, a 16px gap, and about 100px of the next one, with nothing to snap to: every swipe leaves the board parked between two columns. Scroll down a column with a dozen cards and its name, its count and its controls are off the top of the screen, so you cannot tell which column you are dropping into. The app is keyboard-first and touch-draggable (#21) and it has never been told how wide a phone is.Done looks like
@media (max-width: 40rem)): a column takes the content width with a small peek of the next, so it is obvious the board continues, and the horizontal gutter shrinks so a snapped column is not clipped.scroll-snap-type: x proximityon.board,scroll-snap-align: starton.columnand.new-column, andscroll-padding-inline-startmatching the gutter. Proximity, not mandatory, so a wide drag and keyboard focus are not fought by the scroller.position: sticky; top: 0, over an opaque backdrop (canvas, not the translucent#8881, which lets cards show through), with no layout shift at first paint.scrollIntoView({ block: "nearest", inline: "nearest" })instatic/board.jswhere the move already lands focus), so a keyboard move never leaves the focused card off-screen.src/pages/board.test.tsasserts the page ships the breakpoint and the snap rules (the stylesheet is rendered into the page, so it is assertable the way the rest of this page is tested), and the pull carries a picture at 390px wide: three columns, one of them scrolled past its first cards.Files
src/pages/board.ts(thestylesblock only),static/board.<hash>.jsplus its content-hashed name and theBOARD_JSconstant if thescrollIntoViewline lands,src/pages/board.test.ts.Risks
scroll-snap-type: mandatorywould trap a drag that crosses columns — proximity is the deliberate choice, not a weaker one.stylesblock at the same phone width, so this waits for it. If #25 is closed as already built (its own comment reads that way), this is ready immediately.Waits for #25.